面经 | Java开发技术岗
一面(简历评估):
1. JVM 的内存模型
2. 谈谈 GC,CMS 的流程,新生代老生代分别用什么算法
3. 谈谈类加载器,类加载器有哪些,双亲委派最终是由父还是子加载
4. 操作系统的悲观锁、乐观锁
5. 数据库层面的悲观锁、乐观锁
6. 数据库事务讲一下
7. Redis 的持久化机制
8. Redis 如何实现高可用
9. 索引的类型,索引的底层实现原理
10. 谈谈消息队列
11. HashMap 底层实现,哈希冲突怎么解决的
12. 各种排序算法讲一下
二面:
1. Spring IoC、AOP,底层代码看过吗,scope 作用域为什么要有 prototype
2. 谈谈 JVM,方法区可以实现 GC 吗
3. 谈谈你知道的设计模式,知道什么是回调模式吗
4. 谈谈 GRPC,为什么用 protoBuf 作为序列化机制,跟其他二进制比有什么优势(好像有坑,阿里用的是 hessian)
4. 高并发系统,海量数据分库分表的策略
5. 数据库前面的 Redis 缓存,如何实现查询的负载均衡(这里扯出了布隆过滤器及其哈希函数冗余)
6. 为什么选择阿里巴巴?你对待工作的做事原则有哪些?
7. 英文介绍你在项目中遇到的困难(这个真的懵逼了)
三面:
1. 选一个项目具体讲讲背景、你的职责、遇到的困难以及如何解决(然后各种问细节)
2. 项目中用了 REST,是拉的还是推的,既然是实时为什么不用推的
3. Redis 和数据库如何保证数据一致性
4. 问了我参加的数学建模美赛(感觉被鄙视了,对方以为是 ACM)
4. 在技术方面还有哪些兴趣?最近在看哪些技术方面的书
四面(交叉面):
1. 谈项目,问一些细节
2. 操作系统学过吗?进程和线程区别?
3. 算法学过吗?讲讲动态规划、快排、堆排
4. 用过什么代码质量检测工具?自己写代码的时候会如何注意代码质量?
5. 用过什么 JVM 调优命令?
6. 如何实现线程安全?java 的线程安全类?讲讲线程池
7. 讲讲生产者消费者模式
8. 还投了哪些企业,有 offer 了吗
HR 面:
1. 前面的面试有什么收获吗?
2. 你回顾自己的项目,有哪一点是最遗憾的最想改进的?具体讲讲
3. 你有什么技术方面崇拜的人吗?
4. 为什么选择开发不选择算法?
5. 看你发了一些论文,当时出于什么想法发的论文?
6. 还投了哪些企业呢,你觉得阿里巴巴跟其他企业相比有什么不同
7. 非科班出身,你是如何积累自己开发方面的技能的,如何自学的?
8. 你在技术方面的未来规划