拼多多PDD-4.24服务端研发实习生一面面经
📍面试公司:拼多多
👜面试岗位:服务端研发实习生
📖面试过程:全程问八股,没聊项目,最后做道题。
- 自我介绍
- CMS和G1垃圾回收器,为什么现在生产环境主要用G1而不用CMS了?我没答到点上,面试官希望我回答的是CMS的Full GC会导致STW(stop the world)的时间很长,以及时间很长的原因
- synchronized锁升级的流程,说一下什么时候会发生锁升级?我三阶段答上来了,但是升级的触发时机有点忘了
- 有没有了解过HTTPS,讲一下会话密钥是如何决策出来的,讲一下流程。如果有个中间人伪造了一个公钥下发给客户端,导致中间人将客户端和服务器之间的信息被截获了,如何防止这个攻击?我背八股时有看到过,但印象不深,只回想起CA啥的,没答上来。
- 有了解过消息队列吗?有听说过Kafka吗?这个我简历上只有RabbitMQ,不了解Kafka,和面试官说后他就换了个问题
- RabbitMQ底层是用什么语言实现的?答:Erlang。为什么Erlang实现RabbitMQ延迟会比较低?这个问题面试官觉得可能有点难就跳过了
- 讲讲RabbitMQ的优先级队列、延迟队列是用来干嘛的吗?举两个实际场景。面试官说如果他们要用RabbitMQ的话,是因为有这些RabbitMQ特有的feature,Kafka没有,所以才会去用RabbitMQ,不然还是会用吞吐量更高的Kafka。
- MySQL存储引擎InnoDB,它会有一个内存的BufferPool,为什么要有这个区域?答的缓存减少磁盘IO
- 你知道一般的缓存命中率会有多少吗?什么情况下BufferPool需要扩大?不太了解生产环境,猜测是查询结果集较大时需要扩大。
- MySQL的分库分表有了解过吗?如果有个订单表,数据量有1亿条,你怎么去拆?答的水平分表,一开始我想的是按顺序分表,但是如果不断有新订单产生的话,这个策略还合适吗?后来我就改成了hash去分。
- 现在表已经改完了,那么我需要怎么修改业务代码去适配?你知道代码为什么要改造吗?如何尽可能减少代码侵入去修改?面试官希望我回答的是通过Spring的AOP动态代理去做,但我当时只想到了代理,没处理过这种业务,所以答得不好。
- MySQL的事务隔离等级有哪些?可重复读会不会出现幻读?我回答的是MySQL在一定程度上解决了幻读,但还是存在幻读现象,比如前面用快照读,后面用当前读,这种情况可能会出现。如果统一用快照读(MVCC)或者当前读(间隙锁)的话可以避免。
- MVCC是存在哪里的?面试官希望我回答的是undo log,但我没get到。
- bin log和redo log有什么区别?为什么需要redo log?为什么不直接刷到磁盘?这一块的八股有点忘了,应该回答“顺序写”和“随机写”的。为什么顺序写比随机写快?面试官希望我回答磁盘的工作原理。
- 抛开价格因素不谈,固态硬盘和机械硬盘分别会用在什么场景?两者分别有什么好处和弊端?没答上来,面试官说固态速度快但不容易恢复,所以他们的数据仓库一般会用机械硬盘存,会比较好恢复,当然价格上机械硬盘也会比固态低很多。
- 代码题:题干有点长,概括讲就是有一个log文件里存了多条命令,命令分为四种,input、delete、undo、redo,input命令输入,delete命令删除、undo命令撤销上个操作、redo命令重做上个被撤销的操作,最终给出执行完所有命令后的结果。面试官先让我看题想思路,然后用伪代码写一下就行。思路就是用了两个栈,一个记录最终需要执行的操作opStack,另一个记录被撤销的命令undoStack。在遇到input、delete命令时,将命令压入opStack中;遇到undo命令时,把opStack栈顶的命令弹出,压入undoStack中;遇到redo命令时,把undoStack栈顶的命令弹出,压入opStack中。在读完所有命令后,去执行opStack里的命令就行。虽然中间因为个人对题意有点误解,写了一个比较复杂的版本,但后面在面试官的提示下还是写出来了这个最终版本。
- 最后反问环节问了一下如果去拼多多实习的话,会做什么工作。面试官说一般入职后会有个新手项目,一边做这个新手项目,一边看各种文档,主要是学习,不会参与业务代码开发。新手项目是用来熟悉公司内部的各个中间件的,后面会做一些影响不大的业务需求,了解业务流程,这时的需求还只是一些影响不大的小优化或者之前搁置的非核心需求。大概两个月后可以参与一些正式的业务需求了,这时因为要着急上线,而且涉及多个团队进度,强度就上来了,一开始可能就参与一个需求,后面如果适应了就会加大需求的并发量,总体是这个节奏。
🙌面试体验:今天早上面了荣耀,面试官似乎是做安卓开发的,所以问的都算比较基础,手撕也是最基础的链表反转,20分钟就结束了,如果去的话大概率需要换方向。晚上面拼多多,虽然对难度早就有心理预期,不过确实难度大了不少,有些问题挺底层的。面试官人挺好的,对于每个没答上来的问题都会解答,只不过我答得确实太差了,估计大概率是要凉了。因为投得比较晚,所以这是我面的第二场,只能说还需要继续沉淀,再多背几家八股准备充分一点,到时候再多海投几家吧,先攒个实习经历再说。