拼多多面经内推
先自我介绍一下,小编去过华为、字节跳动等大厂
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
为啥蚂蚁只待了三个月?没转正?(转正了,解释了一通。。。)
Java中的HashMap、TreeMap解释下?(TreeMap红黑树,有序,HashMap无序,数组+链表)
TreeMap查询写入的时间复杂度多少?(O(logN))
HashMap多线程有什么问题?(线程安全,死锁)怎么解决?( jdk1.8用了synchronize + CAS,扩容的时候通过CAS检查是否有修改,是则重试)重试会有什么问题么?(CAS(Compare And Swap)是比较和交换,不会导致线程阻塞,但是因为重试是通过自旋实现的,所以仍然会占用CPU时间,还有ABA的问题)怎么解决?(超时,限定自旋的次数,ABA可以通过原理变量AtomicStampedReference解决,原理利用版本号进行比较)超过重试次数如果仍然失败怎么办?(synchronize互斥锁)
CAS和synchronize有什么区别?都用synchronize不行么?(CAS是乐观锁,不需要阻塞,硬件级别实现的原子性;synchronize会阻塞,JVM级别实现的原子性。使用场景不同,线程冲突严重时CAS会造成CPU压力过大,导致吞吐量下降,synchronize的原理是先自旋然后阻塞,线程冲突严重仍然有较高的吞吐量,因为线程都被阻塞了,不会占用CPU )
如果要保证线程安全怎么办?(ConcurrentHashMap)
ConcurrentHashMap怎么实现线程安全的?(分段锁)
get需要加锁么,为什么?(不用,volatile关键字)
volatile的作用是什么?(保证内存可见性)
底层怎么实现的?(说了主内存和工作内存,读写内存屏障,happen-before,并在纸上画了线程交互图)
在多核CPU下,可见性怎么保证?(思考了一会,总线嗅探技术)
聊项目,系统之间是怎么交互的?
系统并发多少,怎么优化?
给我一张纸,画了一个九方格,都填了数字,给一个MN矩阵,从1开始逆时针打印这MN个数,要求时间复杂度尽可能低(内心OS:之前貌似碰到过这题,最优解是怎么实现来着)思考中。。。
可以先说下你的思路(想起来了,说了什么时候要变换方向的条件,向右、向下、向左、向上,依此循环)
有什么想问我的?
二面
自我介绍下
手上还有其他offer么?
部门组织结构是怎样的?(这轮不是技术面么,不过还是老老实实说了)
系统有哪些模块,每个模块用了哪些技术,数据怎么流转的?(面试官有点秃顶,一看级别就很高)给了我一张纸,我在上面简单画了下系统之间的流转情况
链路追踪的信息是怎么传递的?(RpcContext的attachment,说了Span的结构:parentSpanId + curSpanId)
SpanId怎么保证唯一性?(UUID,说了下内部的定制改动)
RpcContext是在什么维度传递的?(线程)
Dubbo的远程调用怎么实现的?(讲了读取配置、拼装url、创建Invoker、服务导出、服务注册以及消费者通过动态代理、filter、获取Invoker列表、负载均衡等过程(哗啦啦讲了10多分钟),我可以喝口水么)
Spring的单例是怎么实现的?(单例注册表)
为什么要单独实现一个服务治理框架?(说了下内部刚搞微服务不久,主要对服务进行一些监控和性能优化)
谁主导的?内部还在使用么?
逆向有想过怎么做成通用么?
---
【拼多多集团-PDD校园招聘】内推链接:https://careers.pinduoduo.com/campus/grad?t=Sl5Hug9IOS ,内推码:Sl5Hug9IOS。期待你的加入!我们一起,无拼不青春!(通过此链接投递计入内推,内推简历优先筛选~)
欢迎大家投递