大家好,我是小林。
今天分享一位读者的春招面经,美团基础架构的面经。
问的全是基础,一个编程语言的问都没有。
问题记录
MySQL-MVCC

读者答:InooDB是通过 MVCC 实现可重复读的隔离级别的,MVCC 就是多版本并发控制,它其实记录了历史版本的数据,解决了读写并发冲突问题。有一个版本编码,然后它进入了各种操作下的数据状态,能够根据当前这个指令的状态来读取不同时期的数据快照。主要实现方法的话就是通过事务版本号,读取视图还有undo日志进行完善的。
小林补充:具体的实现原理过程,可以去 xiaolincoding.com 网站->图解MySQL->事务隔离级别是怎么实现的?这篇文章学习。
MySQL-原子性怎么实现的
说错了,说成redoLog了。应该是undoLog。
读者答:原子性的话会在写数据之前有一个,就是WAL的过程,就是写一个 redo log,然后如果数据没有写完或者是执行操作失败的话,可以恢复所有已提交的事务或者回滚。
小林补充:
事务的原子性是通过 undo log 实现的。
undo log 是一种用于撤销回退的日志。在事务没提交之前,MySQL 会先记录更新前的数据到 undo log 日志文件里面,当事务回滚时,可以利用 undo log 来进行回滚。如下图:
回滚事务
每当 InnoDB 引擎对一条记录进行操作(修改、删除、新增)时,要把回滚时需要的信息都记录到 undo log 里,比如:
在发生回滚时,就读取 undo log 里的数据,然后做原先相反操作。比如当 delete 一条记录时,undo log 中会把记录中的内容都记下来,然后执行回滚操作的时候,就读取 undo log 里的数据,然后进行 insert 操作。
不同的操作,需要记录的内容也是不同的,所以不同类型的操作(修改、删除、新增)产生的 undo log 的格式也是不同的,具体的每一个操作的 undo log 的格式我就不详细介绍了,感兴趣的可以自己去查查。
MySQL-持久性是怎么实现的
读者答:通过 redo log 保证持久化。buffer pool 中有 undo 页,对 undo 页的修改也都会记录到 redo log。redo log 会每秒刷盘,提交事务时也会刷盘,数据页和 undo 页都是靠这个机制保证持久化的。
通过两次写来实现,当缓冲池的脏页刷新时,并不直接写磁盘,而是会通过memcpy函数将脏页先拷贝到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次,每次写入1MB到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘,进行数据持久化。
小林补充:
事务的持久性是通过 redo log 实现的。
我们修改某条记录,其实该记录并不是马上刷入磁盘的,而是将 Innodb 的 Buffer Pool 标记为脏页,等待后续的异步刷盘。
Buffer Pool 是提高了读写效率没错,但是问题来了,Buffer Pool 是基于内存的,而内存总是不可靠,万一断电重启,还没来得及落盘的脏页数据就会丢失。
为了防止断电导致数据丢失的问题,当有一条记录需要更新的时候,InnoDB 引擎就会先更新内存(同时标记为脏页),然后将本次对这个页的修改以 redo log 的形式记录下来,这个时候更新就算完成了。
后续,InnoDB 引擎会在适当的时候,由后台线程将缓存在 Buffer Pool 的脏页刷新到磁盘里,这就是WAL (Write-Ahead Logging)技术。
WAL 技术指的是, MySQL 的写操作并不是立刻写到磁盘上,而是先写日志,然后在合适的时间再写到磁盘上。
过程如下图:
redo log 是物理日志,记录了某个数据页做了什么修改,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新,每当执行一个事务就会产生这样的一条或者多条物理日志。
在事务提交时,只要先将 redo log 持久化到磁盘即可,可以不需要等到将缓存在 Buffer Pool 里的脏页数据持久化到磁盘。
当系统崩溃时,虽然脏页数据没有持久化,但是 redo log 已经持久化,接着 MySQL 重启后,可以根据 redo log 的内容,将所有数据恢复到最新的状态。
操作系统-死锁怎么产生的
读者答:死锁会产生的话一般会出现就是嗯资源就是互相占用,但是没有办法解锁,形成循环这样的情况,比如说 a 线程有一部分 b 线程需要的资源, b 线程有一部分 a 需要的资源,那他两个人互相的互斥等待形成了死锁,两个线程都没有办法完成任务。
小林补充:
死锁问题的产生是由两个或者以上线程并行执行的时候,争夺资源而互相等待造成的。
死锁只有同时满足互斥、持有并等待、不可剥夺、环路等待这四个条件的时候才会发生。
所以要避免死锁问题,就是要破坏其中一个条件即可,最常用的方法就是使用资源有序分配法来破坏环路等待条件。
操作系统-怎么避免死锁
读者答:
操作系统-pageCache是什么
读者答:缓存一些比较常访问的文件到缓存中,这样子的话它就能减少两次从内核空间拷贝的过程,就是来减少查询这个内容的时间。
小林补充:
为了提升对文件的读写效率,Linux 内核会以页大小(4KB)为单位,将文件划分为多数据块。当用户对文件中的某个数据块进行读写操作时,内核首先会申请一个内存页(称为 页缓存)与文件中的数据块进行绑定。如下图所示:
如上图所示,当用户对文件进行读写时,实际上是对文件的页缓存进行读写。所以对文件进行读写操作时,会分以下两种情况进行处理:
计算机网络-TCP的可靠性和顺序性怎么实现的
读者答:TCP 它实现可靠性和有序性的操作的话,是通过快重传或者是回退 n 这样子的设计来实现。如果报文在传递的过程中丢失之后能够进行重传。而会怎么能发现这个报文丢失呢?主要是根据一些序列号和 ACK的配合来帮助两个服务之间知道当前传递的信息会丢失。
计算机网络-怎么进行流量控制的?
回答成拥塞控制了;
读者答:内部维护了一个能接收消息的一个窗口的大小,如果他出现就是消息丢失的情况,然后这个消息窗口的大小会减半。启动的时候采用慢启动的方式,从0开始指数级增加窗口大小,直到到达阀值之后线性增加窗口大小。
小林补充:
流量控制主要是可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量。
实现的方式,接收方会有一个接收缓冲区,如果内核接收到了数据,没有被应用读取的话,接收窗口就会收缩,然后会在tcp报文携带接收窗口的大小,发送发收到后,就会控制的发送流量。
下面举个栗子,为了简单起见,假设以下场景:
流量控制
根据上图的流量控制,说明下每个过程:
Redis-怎么持久化的数据
读者答:Redis 的话,它其实提供了两种持久化数据的方法,一种是aof,一种是RDB。然后 AOF 的话它是一种,就是说每一条操作信息它都会进行追加记录这样的一种持久化的方式。当那个数据库重新启动的时候,它就会根据 AOF 里面记录的数据操作,然后来进行一个数据库内容的重建。而 RDB 的话,它是做快照,也就是说在数据库运行的过程中,它可能会另开一个 IO 的线程来进行数据库的快照记录,这样子的话来记录它某一个时间段的数据情况,这样子它进行恢复,数据库再次启动的时候就可以直接根据 RDB 文件来进行恢复这两个操作。
这样一执行的话就可以看出来, AOF 的话,它虽然就是在执行的过程中性能的损耗是小的,但是如果数据库要进行重新启动的话,那它需要的耗时是比较长的。而 RDB 的话,它虽然重新启动的耗时小,但是说它在过程中会有一定的性能损耗。而且如果是在两个快照创建的中间就是数据库宕机,或者是这样子没有做成快照的话,会造成一部分数据的缺失。
Redis-集群是怎么做的?就是数据怎么分片的,然后它的集群的高可用是什么?怎么部署的,这个有没有了解过?
读者答:我了解到它是有一个主从模型的,从它从模型的话就是复制一份主节点的备份,然后如果主节点宕机的情况下,从节点是可以成为主节点来提供服务的,别的就没有什么了解的。
后续查资料补充add:在应对数据量扩容时,虽然增加内存这种纵向扩展的方法简单直接,但是会造成数据库的内存过大,导致性能变慢。Redis 切片集群提供了横向扩展的模式,也就是使用多个实例,并给每个实例配置一定数量的哈希槽,数据可以通过键的哈希值映射到哈希槽,再通过哈希槽分散保存到不同的实例上。这样做的好处是扩展性好,不管有多少数据,切片集群都能应对。
分布式-分布式事务是什么
读者答:我只知道分布式事务中的 2 阶段提交和 3 阶段提交这样一个概念
后续查资料补充add:实际使用都是使用消息队列+本地消息表保证最终一致性,2PC这种强一致性用在一些金融业务中,实现很麻烦。
分布式-paxos和raft的区别
读者答:Paxos在一个节点当选为就是 leader 节点之后,其他的从节点如果不满主节点的那个投票策略的话,是可以对主节点的投票就是进行否决的。Paxos就是三阶段提交。但是 raft 的话就是只要集群中存在 leader 节点的话,从节点就是会按照主节点的策略来进行一致性的执行。
分布式-为什么就是分布式的共识算法都需要要求多数派提交才能完成它的分布式一致性?
读者答:有作恶节点,消息可能到的顺序不一样,扯了拜占庭问题
场景题
面试总结
感觉
面试官想多要些人填志愿,基础知识没有深挖,所有的知识点都考察了一下
不足之处
面试叫回去等通知一般都是没有被录取的对吗?
展开全部这个没有绝对的意思,一般来说面试结束后都是不会马上通知你结果的,因为他们肯定是要面试好几个人的,不会说看一个人就结束了,只有等所有的求职者都面试完成了,那样才会有结果的。
工作面试时应该注意哪些方面?面试官一般会问什么问题?
面试技巧——经典面试问题回答思路面试过程中,面试官会向应聘者发问,而应聘者的回答将成为面试官考虑是否接受他的重要依据。 对应聘者而言,了解这些问题背后的“猫腻”至关重要。 本文对面试中经常出现的一些典型问题进行了整理,并给出相应的回答思路和参考答案。 读者无需过分关注分析的细节,关键是要从这些分析中“悟”出面试的规律及回答问题的思维方式,达到“活学活用”。 问题一:“请你自我介绍一下”思路: 1、这是面试的必考题目。 2、介绍内容要与个人简历相一致。 3、表述方式上尽量口语化。 4、要切中要害,不谈无关、无用的内容。 5、条理要清晰,层次要分明。 6、事先最好以文字的形式写好背熟。 问题二:“谈谈你的家庭情况”思路: 1、 况对于了解应聘者的性格、观念、心态等有一定的作用,这是招聘单位问该问题的主要原因。 2、 简单地罗列家庭人口。 3、宜强调温馨和睦的家庭氛围。 4、 宜强调父母对自己教育的重视。 5、 宜强调各位家庭成员的良好状况。 6、 宜强调家庭成员对自己工作的支持。 7、 宜强调自己对家庭的责任感。 问题三:“你有什么业余爱好?”思路: 1、业余爱好能在一定程度上反映应聘者的性格、观念、心态,这是招聘单位问该问题的主要原因。 2、 最好不要说自己没有业余爱好。 3、不要说自己有那些庸俗的、令人感觉不好的爱好。 4、 最好不要说自己仅限于读书、听音乐、上网,否则可能令面试官怀疑应聘者性格孤僻。 5、最好能有一些户外的业余爱好来“点缀”你的形象。 问题四:“你最崇拜谁?”思路: 1、最崇拜的人能在一定程度上反映应聘者的性格、观念、心态,这是面试官问该问题的主要原因。 2、 不宜说自己谁都不崇拜。 3、 不宜说崇拜自己。 4、 不宜说崇拜一个虚幻的、或是不知名的人。 5、 不宜说崇拜一个明显具有负面形象的人。 6、所崇拜的人人最好与自己所应聘的工作能“搭”上关系。 7、 最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。 问题五:“你的座右铭是什么?”思路: 1、座右铭能在一定程度上反映应聘者的性格、观念、心态,这是面试官问这个问题的主要原因。 2、不宜说那些医引起不好联想的座右铭。 3、不宜说那些太抽象的座右铭。 4、不宜说太长的座右铭。 5、座右铭最好能反映出自己某种优秀品质。 6、 参考答案——“只为成功找方法,不为失败找借口”问题六:“谈谈你的缺点”思路: 1、不宜说自己没缺点。 2、 不宜把那些明显的优点说成缺点。 3、 不宜说出严重影响所应聘工作的缺点。 4、 不宜说出令人不放心、不舒服的缺点。 5、 可以说出一些对于所应聘工作“无关紧要”的缺点,甚至是一些表面上看是缺点,从工作的角度看却是优点的缺点。 问题七:“谈一谈你的一次失败经历”思路: 1、 不宜说自己没有失败的经历。 2、 不宜把那些明显的成功说成是失败。 3、不宜说出严重影响所应聘工作的失败经历, 4、 所谈经历的结果应是失败的。 5、 宜说明失败之前自己曾信心白倍、尽心尽力。 6、说明仅仅是由于外在客观原因导致失败。 7、 失败后自己很快振作起来,以更加饱满的热情面对以后的工作。 问题八:“你为什么选择我们公司?”思路: 1、 面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。 2、 建议从行业、企业和岗位这三个角度来回答。 3、 参考答案——“我十分看好贵公司所在的行业,我认为贵公司十分重视人才,而且这项工作很适合我,相信自己一定能做好。 ”问题九:“对这项工作,你有哪些可预见的困难?”思路: 1、 不宜直接说出具体的困难,否则可能令对方怀疑应聘者不行。 2、可以尝试迂回战术,说出应聘者对困难所持有的态度——“工作中出现一些困难是正常的,也是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任何困难都是可以克服的。 ”问题十:“如果我录用你,你将怎样开展工作”思路: 1、 如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展工作的具体办法, 2、可以尝试采用迂回战术来回答,如“首先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。 ”问题十一:“与上级意见不一是,你将怎么办?”思路: 1、一般可以这样回答“我会给上级以必要的解释和提醒,在这种情况下,我会服从上级的意见。 ” 2、如果面试你的是总经理,而你所应聘的职位另有一位经理,且这位经理当时不在场,可以这样回答:“对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题,我希望能向更高层领导反映。 ”问题十二:“我们为什么要录用你?”思路: 1、应聘者最好站在招聘单位的角度来回答。 2、 招聘单位一般会录用这样的应聘者:基本符合条件、对这份共组感兴趣、有足够的信心。 3、如“我符合贵公司的招聘条件,凭我目前掌握的技能、高度的责任感和良好的饿适应能力及学习能力 ,完全能胜任这份工作。 我十分希望能为贵公司服务,如果贵公司给我这个机会,我一定能成为贵公司的栋梁!”问题十三:“你能为我们做什么?”思路: 1、 基本原则上“投其所好”。 2、 回答这个问题前应聘者最好能“先发制人”,了解招聘单位期待这个职位所能发挥的作用。 3、 应聘者可以根据自己的了解,结合自己在专业领域的优势来回答这个问题。 问题十四:“你是应届毕业生,缺乏经验,如何能胜任这项工作?”思路: 1、 如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘单位并不真正在乎“经验”,关键看应聘者怎样回答。 2、对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业。 3、如“作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。 我也发现,实际工作远比书本知识丰富、复杂。 但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。 请贵公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。 ”问题十五:“你希望与什么样的上级共事?”思路: 1、通过应聘者对上级的“希望”可以判断出应聘者对自我要求的意识,这既上一个陷阱,又上一次机会。 2、 最好回避对上级具体的希望,多谈对自己的要求。 3、 如“做为刚步入社会新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境提出什么要求,只要能发挥我的专长就可以了。 ”问题十六:“您在前一家公司的离职原因是什么?”思路: 1、 最重要的是:应聘者要使找招聘单位相信,应聘者在过往的单位的“离职原因”在此家招聘单位里不存在。 2、避免把“离职原因”说得太详细、太具体。 3、不能掺杂主观的负面感受,如“太幸苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们某某的员工”等。 4、但也不能躲闪、回避,如“想换换环境”、“个人原因”等。 5、 不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等。 6、尽量使解释的理由为应聘者个人形象添彩。 7、如“我离职是因为这家公司倒闭。 我在公司工作了三年多,有较深的感情。 从去年始,由于市场形势突变,公司的局面急转直下。 到眼下这一步我觉得很遗憾,但还要面对显示,重新寻找能发挥我能力的舞台。 ” 同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效,关键在于应聘者掌握了规律后,对面试的具体情况进行把握,有意识地揣摩面试官提出问题的心理背景,然后投其所好。
一般面试完说三天内回复是不是就是婉拒了
如果说让你回去等通知,这时候就没希望了。既然是三天内回复,有希望
发表评论