常见的面试题(java高级开发)

第一部分:项目相关

1、简单介绍介绍一下你在上家公司做过的项目、项目的主要流程、你所负责的模块、你在项目担任的职责 2、你在项目里面得到了学习到了什么,得到了哪些技术提升

3、有没有code review习惯,平时code review时候都会去注意哪些点 4、团队人员的组成,开发规模有多大,平时是如何迭代开发一个需求的(从产品经理到最终上线的流程)

第二部分:jdk源码相关

1、volatile的作用和底层原理、项目中或哪些地方(JDK或中间件)用到了volatile、volatile的使用场景、double check中volatile的作用是什么 2、java内存模型

3、cas的原理 4、ThreadLocal的底层原理,使用ThreadLocal需要注意什么问题,怎么去解决 5、死锁发生的原因以及如何去避免死锁 6、synchronized实现原子性的原理 7、ReentrantLock和synchronized的区别 8、ReentrantLock是怎么实现原子性的 9、aqs的原理(如何阻塞线程,如何唤醒阻塞线程,不同类型节点Exclusive、Shared之间唤醒模式有什么区别) 10、aqs在并发包的应用 11、自旋锁(tryLock) 12、什么场景下用读写锁(ReentrantReadWriteLock) 13、ConcurrentHashMap实现线程安全的原理(put和get),对比jdk 1.8和jdk 1.7的加锁粒度

14、手写ArrayBlockingQueue的take()和put() 15、synchronized的wait(), notify(), notifyAll() vs. Reentranlock对应Condition的await(), signal(), signalAll() 16、公平锁和非公平锁 17、jdk都有哪些常见的线程池,什么情况下我们需要自定义线程池 18、线程池的构造函数的几个参数都是什么意思

19、线程池的执行流程(什么时候创建core线程、什么时候入队列、什么时候扩容到max线程、core线程和max线程在线程池任务队列take任务时有什么区别)

第三部分:JVM

1、jvm的内存区域划分,不同内存区域都有什么作用

2、双亲委派机制的作用

3、介绍下cms垃圾收集器的执行流程

4、为什么full gc会影响系统性能

第四部分:消息中间件

1、消息中间件的使用场景如何实现消息0丢失 2、如何避免消息重复消费 3、不同消息中间件之间的技术选型,都有什么特点和区别 4、如何实现消息顺序消费 5、kafka的网络通信架构的设计细节 【基于nio实现的reactor网络通信架构(Acceptor线程 + Processor线程 + Handler线程池 + RequestChannel)】

6、kafka磁盘高性能读写实现细节 (mmap + FileChannel + 写os cache + 顺序写磁盘,定期flush,consumer基于零拷贝读) 7、kafka是如何查找一条消息的(基于.index稀疏索引文件的二分查找过程) 8、kafka顺序写磁盘什么情况下会退化为随机读写磁盘 9、kafka在磁盘中都有什么文件?(.timeindex + .index + .log) 10、kafka什么地方用到了ZooKeeper

第五部分:MySQL

1、介绍下acid是什么,InnoDB是如何实现acid的?mvcc 2、B+树、聚簇索引、普通索引、回表 儒猿-石杉架构课 https://sourl.cn/bFTskZ 3、索引的优点和缺点 4、联合索引使用过程中需要注意的问题(什么情况会索引失效) 5、Innodb是如何实现行锁的 6、分库分表

经验分享 程序员 微信小程序 职场和发展