一面
1、老生常谈的HashMap、ConcurrentHashMap及源码
会问你hashMap中get、set方法是怎么做的,红黑树了解吗(结构,旋转),并发情况下会有什么问题,如果想线程安全,用什么,concurrentHashMap是怎么做的,1.8和1.8之前有什么区别。
推荐:阅读hashMap和concurrentHashMap源码
2、线程池
问你平时用过线程池吗,如果是Executors知道其底层吗,线程池的7个变量都是什么意思和意义,阻塞队列有几种,分别有什么用,拒绝策略有几种。
推荐:阅读ThreadPoolExecutor源码及了解队列
3、类加载机制
编译,装载,链接,初始化 的过程,什么是双亲委派模型,为何要使用双亲委派模型,Tomcat使用的类加载机制是什么
推荐:
4、阻塞IO/非阻塞IO
什么是阻塞IO和非阻塞IO,了解NIO吗,他是如何做到高效的,了解netty吗
推荐:JDK10都发布了,nio你了解多少?
5、锁
synchronize了解吗,锁的升级、使用了解吗,底层是怎么实现的(总线锁),伴随着锁的肯定还有volatile和lock、了解死锁、活锁、饥饿以及优先级吗
推荐《java并发编程实战》
6、volatile
volatile了解吗,他和synchronize的区别,他是如何保证可见性的(内存屏障),为什么有了synchronize还要用volatile
7、CAS
CAS了解吗,他的三个参数是什么,他底层是怎么做的(unsafe包下调用CPU指令cmpxchg)
8、AQS
知道读写锁/可重入锁/公平锁吗,是怎么实现的,以及会手写一些有关代码or问你如何保证线程池中线程,一起运行到某点,等待,再继续一起执行。
推荐《java并发编程实战》、AbstractQueuedSynchronizer源码
9、网络TCP/IP
如何保证TCP可靠性:三次握手、断线重发。说一下滑动窗口、如何防止DDOS攻击。四次挥手为什么后面有个2*时间参数的等待时间。画图讲解一些三次握手四次挥手,OSI七层模型与TCP/IP五层模型说一下
推荐:《图解HTTP》《HTTP权威指南》
10、JVM
Jvm 内存模型(画图)(堆,方法区等,描述各个区域的作用),有遇到过OOM么,什么情况,怎么发现的,怎么查原因的?
如何定位一个CPU Load过高的Java线程?描述垃圾回收算法的主要流程(主要是CMS和G1)
推荐:内存分配策略:www.cnblogs.com/liangzh/arc… 、《深入理解JVM》
11、MYSQL
mysql的引擎了解吗,innodb myisam 区别是什么,Mysql索引:B+tree、hash,有什么区别,优点与好处,B+tree聚簇索引和非聚簇索引的区别,ACID是什么,事务隔离级别知道吗,MVCC是怎么保证的。如何实现主从分离(方法层面/sql语句层面)
12、Spring
spring其实没什么太多问题,IOC、AOP的原理,filter和interceptor 区别
13、写代码
①写一个交替打印(wait/notify)
②写一个线程安全的单例
③写线程池及使用
14、算法
总结一下几道见到的题,都能在leetcode中找到,我也基本都做过:
leetcode283移动零leetcode344翻转字符串
leetcode746最小花费爬楼梯
leetcode485最大连续1的个数
leetcode448找到所有数组中消失的数字
leetcode191位1的个数
leetcode21合并两个有序链表
leetcode172阶乘后的零
leetcode62不同路径
二叉树的前中后序遍历(递归/非递归)、层次遍历、变异的层次遍历这里就不在里面寻找了。
另外有些题,也是上面题的变种,类似N个有序链表合并、N个无序链表合并等等
PS:本人没去过头条,因此面试的都是一些简单题,至于mid和hard的题,无法提供太多,不过基本思路就是数组、字符串、树、DP。至于深度广度和图,没有遇到
二面
1、项目
重点、重点、重点。对于你项目中的介绍,可以逐一发问,类似redis、MQ、方案、设计等待,都是能问到很深的点,所以你对于自己的项目需要了解的很深。
2、中间件
中间件分为很多了,消息队列应该算是一个重头,kafka、rabbitMQ、rocketMQ、其中熟练掌握其中之一就行
3、分布式
分布式的问题也比较麻烦,尤其配合场景来问,如何保证最终一致性、如何保证分布式事务(TCC)、分布式锁(redis、zk、数据库)、幂等性、高可用
三面
1、场景
场景就看面试官是怎么去问了
比如:
- 设计一个RPC框架
- 设计一个2W员工带上下级关系,能查询下属有多少(MYSQL)
- 设计一个很大的文件里充满IP,找出前5个出现频率最高的IP(变异TOPK)
- 如果你的项目再重新做一遍,你会怎么干
2、操作系统/发散思维
我被问过:
- 360开机时间是怎么做出来的
- 当按下开机键,发生了什么
- 想算出北京市有多少井盖,怎么思考
- 一二三级缓存位置
- CAS、synchronize操作系统是怎么做的
作者:李小白白
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。