java面试题:总结一下今年大厂java喜欢问的问题

一面

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、场景

场景就看面试官是怎么去问了
比如:

  1. 设计一个RPC框架
  2. 设计一个2W员工带上下级关系,能查询下属有多少(MYSQL)
  3. 设计一个很大的文件里充满IP,找出前5个出现频率最高的IP(变异TOPK)
  4. 如果你的项目再重新做一遍,你会怎么干

2、操作系统/发散思维

我被问过:

  1. 360开机时间是怎么做出来的
  2. 当按下开机键,发生了什么
  3. 想算出北京市有多少井盖,怎么思考
  4. 一二三级缓存位置
  5. CAS、synchronize操作系统是怎么做的

作者:李小白白
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论

企鹅群:39438021

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×