拼多多PDD-4.24服务端研发实习生一面面经

📍面试公司:拼多多

👜面试岗位:服务端研发实习生

📖面试过程:全程问八股,没聊项目,最后做道题。

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

🙌面试体验:今天早上面了荣耀,面试官似乎是做安卓开发的,所以问的都算比较基础,手撕也是最基础的链表反转,20分钟就结束了,如果去的话大概率需要换方向。晚上面拼多多,虽然对难度早就有心理预期,不过确实难度大了不少,有些问题挺底层的。面试官人挺好的,对于每个没答上来的问题都会解答,只不过我答得确实太差了,估计大概率是要凉了。因为投得比较晚,所以这是我面的第二场,只能说还需要继续沉淀,再多背几家八股准备充分一点,到时候再多海投几家吧,先攒个实习经历再说。

#软件开发2024笔面经##软件开发笔面经##拼多多面经#
全部评论
面经真的很有用
4 回复 分享
发布于 04-24 23:06 江西
哥写的太详细了,棒
1 回复 分享
发布于 04-26 17:44 陕西
面试官好真诚的亚子
1 回复 分享
发布于 04-25 17:49 北京
面经真的很有用
点赞 回复 分享
发布于 06-15 11:58 江苏
收到二面邮件了,5.5下午4点
点赞 回复 分享
发布于 04-29 17:00 江苏

相关推荐

记录一下. 总共4题,过题情况4/4第一题:给一个年份,输出一个比当前年份大,每一位均不相等的年份。数据10组以内,年份不超过6位数第二题:给n个二维坐标点,每个点有个ri,如果某个点与当前点距离不超过ri,则激活当前点时也会激活这个ri距离内的其他点,激活可以连锁。问激活任意一个点之后可以激活的最多总点数。n<=100第三题:给一个序列,每次可以花费1的代价让一个元素+1,求把序列变成单峰序列的最小代价。n<=10^5第四题:n个点,每个点有一个数字a[i],有m条边,保证边是从编号小的点连向编号大的点,每条边有权值b[i],表示走这条边至少需要b[i]个补给包。初始时补给包为0个,从1号点出发,每次从一个点i出发,可以选择拿不超过a[i]个补给包,拿了就不能丢,走过边也不会消耗补给包。问能不能走到终点n,如果可以,走到终点n时身上补给包最少是多少个。n<=10^5,m<=5*10^5第一题就是不断重复+1枚举年份,暴力判断即可。值得注意的是,测试数据的输入格式和样例的格式似乎有不同,我使用python写第一题直接在输入这就报错了,最后写了两种输入,用try给干过去了。如果直接用cpp的scanf应该不会有这个问题。第二题直接枚举初始激活点,然后暴力dfs每个次级激活点即可。这样做最坏是O(n^3)的,python直接超时了,优化了一下,不难发现,如果点x被点y激活,那么初始激活x的答案肯定<=初始激活y的答案,因此一个点如果在dfs中被找过,那就不需要将它作为初始激活点了,这样复杂度降低到O(n^2)第三题考虑设f[i]表示前i个数字组成递增序列的最小代价,g[i]表示从i开始到最后一个数字组成递减序列的最小代价,顺便记录达到最小代价时位置i的数字是多少,最后枚举峰的位置,统计代价最小值即可。复杂度O(n)第四题,如果直接按照题意硬做,我是不会的,因为选取更少的补给包这个决策是不利于最后走到n这个目标的。先考虑判断有无解该怎么做,可以发现,找到最大的边权,最终答案肯定不超过这个边权,设为mx。则我们可以在走的过程中进行贪心,记录f[i]表示走到位置i时,能获得的最大补给包数量。按顺序枚举点i(注意,这样枚举肯定是无后效性的,因为边都是小编号连向大编号),然后枚举点i的出边,假设有边(i,y,b[x]),如果f[i]>=b[x]说明这条边能走,则更新f[y]为max(f[y],f[i]+a[y]),注意,f[y]的值不应该超过mx,最后验证f[n]是否有正常转移过来的值即可判断是否有解。不难发现,如果我们限制了补给包的上限,我们就可以判断在这个上限下有没有解,且如果上限c1是可行的,那么对于任意c2>c1都是可行的,存在一个边界区分有无解,这是很好的性质,可以直接二分补给包上限,用上面的判定决定往左还是往右二分即可。复杂度O((n+m)logm)总体来说还是稍微有点trick的,前三题贪图代码简单直接用python写了,第四题怕py超时,用cpp过了。整体写起来需要想的东西比较多,只能说有几个月没写算法题了,略有生疏。希望给个面试。。。
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
前不久通过了字节生活服务后端开发面试,准备做个复盘,分享下一二三面还有加面的面经。一面基本情况- 岗位:字节跳动生活服务后端开发- 形式:线上视频面- 时长:差不多1小时面试过程自我介绍(3分钟左右)一开始面试官简单说了下自己是谁,然后就让我做自我介绍。我大概讲了3分钟,主要说自己的学校、学的专业,还有做过的两个后端项目,重点提了用的技术栈和我负责的核心部分,比如微服务拆分、数据库设计这些。项目深挖(20分钟)面试官主要盯着我简历里的两个项目问,挖得还挺细的。第一个是分布式电商系统:- 先让我讲讲整体架构,我就从前端怎么接入、后端业务怎么分模块、数据存在哪、缓存怎么用这些方面说的。比如把订单、商品、用户拆成了独立的微服务,用RPC框架通信,这样改一个模块不影响其他的。- 还问我为啥选MySQL和Redis,我说MySQL处理事务、保证数据一致比较靠谱,Redis当缓存能扛高并发,查数据快。- 然后问我项目里遇到的最大问题,我说是高并发下库存超卖了。当时排查了半天,最后用Redis搞了个分布式锁,先在缓存里扣库存,再慢慢同步到数据库,才算解决。第二个是在线学习平台的后端:- 面试官对用户登录这块感兴趣,我就说用了JWT,用户登录成功给个token,后面请求带着token就能验证身份。权限管理用的是RBAC模型,学生、老师、管理员能操作的功能不一样。- 还问了性能优化,我说给数据库加了索引,慢查询日志里的语句都调了调;有些接口加了缓存,减少数据库压力;发邮件这种费时间的操作,用RabbitMQ搞成异步的,用户不用等着。基础知识(20分钟)这块主要考Java、数据库和计算机网络,都是基础但挺重要的点。Java方面:- 问了多态怎么实现的,我说重写、重载加上动态绑定,举了个父类引用指向子类对象的例子。- 还问了HashMap底层,我就说JDK1.8之后是数组加链表,链表太长了会变成红黑树,这样查起来快。哈希冲突就是用链表解决的,同一个位置的元素串起来。数据库:- 索引类型和用法,我说了主键索引、唯一索引这些,比如查用户ID的时候用主键索引最快,联合索引要注意最左匹配原则。- 事务的ACID特性,原子性、一致性这些都解释了下,还说了四个隔离级别,以及可能出现的脏读、不可重复读问题。计算机网络:- TCP和UDP的区别,我说TCP是连了线的,可靠但慢点,像发邮件、传文件用得多;UDP不用连线,快但可能丢包,直播、游戏常用。- 常见的HTTP状态码,200是成功,404是页面找不到,500是服务器出问题,这些都答上来了。算法题(15分钟)面试官给了道题:给一个数组,找出两个数相加等于目标值的所有组合。比如数组[2,7,11,15],目标9,结果就是[(2,7)]。我先跟面试官说了思路,用哈希表存每个数的位置,遍历的时候看目标值减当前数的结果在不在表里,在的话就是一对。然后在共享文档里写代码,还注意了数组为空的情况。写完后面试官让我分析时间和空间复杂度,我说遍历一次是O(n),哈希表占O(n)的空间,他点点头没说啥。开放性问题(5分钟)最后问我平时怎么学新技术,我说看看官方文档、技术博客,遇到问题上论坛搜搜,再自己动手做个小项目练手。还说会记笔记,把踩过的坑总结下来,面试官听了说挺好的。有人想进字节,可以找我内推,我帮你写内推推荐语,写内推语可以优先进面,进来才知道只填内推码没用😂内推码投递后可以私信我写内推语https://job.toutiao.com/s/syPe3tmPCw0
字节跳动一面1316人在聊
点赞 评论 收藏
分享
评论
29
103
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务