在小公司做了3年Java后,想去大厂发展。所以从去年年底到今年先后面试了阿里、小米、美团、京东等,外卖、订单、商旅面试了好几个部门,终于成功拿下offer。
总结下来各部门面试的大体思路基本都一致。比如:
- JVM 参数配置、常用调试工具、分区、类加载,还会问你有需要线上的调试问题吗?遇到死循环 CPU 飙升怎么解决?
- Java 并发包常用工具用法和原理、会配合集合类一起考,对了还会有 volatile、CAS 原理等。
- MySQL 也算是必备了,索引存储结构、索引搜索原理、事务的隔离级别和原理,这些真的是逢考必问。当然除了 MySQL,Redis 和 ES 也是面试长文的,大多都是集中到原理。比如 ES 倒排索引、分片原理,Redis 的 zset 原理和使用场景、多路复用、穿透、熔断等等。
- 框架也是必备的知识点,最常见的就是 AOP 原理,自己怎么实现?Spring Boot 啥原理?框架通常会配合设计模式一起考,比如你最熟悉的设计模式是啥?Spring MVC 里面用了什么设计模式?解决了什么问题?
- 接下来最重要的就是服务治理了,这里面内容就太多了,Dubbo 也好,Spring Cloud 也罢,总之这个地方最能看得出你真实的工作经验和问题的考虑深度,毕竟没有真正在庞大的系统里面锻炼过真的很难应付这个地方。
- 没漏掉还有一个最重要的算法,这个就靠平时多练了,LeetCode 中文版上线了,一天一道题,面试必无敌。
说了这么多只有一个重点,就是无论大厂他有没有题库,面试题的大体方向就这么多,你要都掌握了,还担心去大厂?那么重点就来了,怎么复习呢?
Java 基础部分
- HashMap和ConcurrentHashMap区别
- ConcurrentHashMap的数据结构
- 高并发HashMap的环是如何产生的?
- volatile作用
- Atomic类如何保证原子性(CAS操作)
- synchronized和Lock的区别
- 为什么要使用线程池?
- 核心线程池ThreadPoolExecutor的参数
- ThreadPoolExecutor的工作流程
- 如何控制线程池线程的优先级
- 线程之间如何通信
- Boolean占几个字节
- jdk1.8/jdk1.7都分别新增了哪些特性?
- Exception和Error
JVM 部分
- 运行时数据区域(内存模型)
- 垃圾回收机制