万字干货 2019 年蚂蚁金服、头条、拼多多面经( 三 )


一面
1. 为啥蚂蚁只待了三个月?没转正?
2. Java中的、解释下?
(红黑树 , 有序 , 无序 , 数组+链表)
3. 查询写入的时间复杂度多少?
(O(logN))
4. 多线程有什么问题?
(线程安全 , 死锁)
5. 怎么解决?
( jdk1.8用了 + CAS , 扩容的时候通过CAS检查是否有修改 , 是则重试)
6. 重试会有什么问题么?
(CAS( And Swap)是比较和交换 , 不会导致线程阻塞 , 但是因为重试是通过自旋实现的 , 所以仍然会占用CPU时间 , 还有ABA的问题)怎么解决?
(超时 , 限定自旋的次数 , ABA可以通过原理变量ce解决 , 原理利用版本号进行比较)超过重试次数如果仍然失败怎么办?
(互斥锁)
7. CAS和有什么区别?都用不行么?
(CAS是乐观锁 , 不需要阻塞 , 硬件级别实现的原子性;会阻塞 , JVM级别实现的原子性 。使用场景不同 , 线程冲突严重时CAS会造成CPU压力过大 , 导致吞吐量下降 , 的原理是先自旋然后阻塞 , 线程冲突严重仍然有较高的吞吐量 , 因为线程都被阻塞了 , 不会占用CPU )
8. 如果要保证线程安全怎么办?
()
9. 怎么实现线程安全的?
(分段锁)
10. get需要加锁么 , 为什么?
(不用 , 关键字)
11. 的作用是什么?
(保证内存可见性)
12. 底层怎么实现的?
(说了主内存和工作内存 , 读写内存屏障 , - , 并在纸上画了线程交互图)
13. 在多核CPU下 , 可见性怎么保证?
(思考了一会 , 总线嗅探技术)
14. 聊项目 , 系统之间是怎么交互的?
15. 系统并发多少 , 怎么优化?
16. 给我一张纸 , 画了一个九方格 , 都填了数字 , 给一个MN矩阵 , 从1开始逆时针打印这MN个数 , 要求时间复杂度尽可能低(内心OS:之前貌似碰到过这题 , 最优解是怎么实现来着)思考中 。
17. 可以先说下你的思路(想起来了 , 说了什么时候要变换方向的条件 , 向右、向下、向左、向上 , 依此循环)
18. 有什么想问我的?
二面
1. 自我介绍下
2. 手上还有其他offer么?
(拿了蚂蚁的offer)
3. 部门组织结构是怎样的?
(这轮不是技术面么 , 不过还是老老实实说了)
4. 系统有哪些模块 , 每个模块用了哪些技术 , 数据怎么流转的?
(面试官有点秃顶 , 一看级别就很高)给了我一张纸 , 我在上面简单画了下系统之间的流转情况
5. 链路追踪的信息是怎么传递的?
(的 , 说了Span的结构: + )
6. 怎么保证唯一性?
(UUID , 说了下内部的定制改动)
7. 是在什么维度传递的?
(线程)
8. Dubbo的远程调用怎么实现的?
(讲了读取配置、拼装url、创建、服务导出、服务注册以及消费者通过动态代理、、获取列表、负载均衡等过程(哗啦啦讲了10多分钟) , 我可以喝口水么)
9. 的单例是怎么实现的?
(单例注册表)
10. 为什么要单独实现一个服务治理框架?
(说了下内部刚搞微服务不久 , 主要对服务进行一些监控和性能优化)
11. 谁主导的?内部还在使用么?
12. 逆向有想过怎么做成通用么?