高级JAVA程序员面试一、Java基础
1、JVM:一般从JVM组成开始介绍,然后单独介绍每一块,然后就会慢慢衍生出垃圾回收方式,垃圾回收器,还可以衍生出volatile之类的。
重点:栈帧、堆,垃圾回收方式,垃圾回收器的对比G1—CMS,unsafe类navicat到volatile。
2、集合类:一般会问HashMap或者ArrayList,有的还会让对比ArrayList和LinkList。还有ConcurrentHashMap等。
一般回答初始化过程、组成、底层结构、算法、线程是否安全等,这块一定要回答仔细,要看过源码,或者看些B站的源码讲解很仔细,到每一个方法名字,要是集合类就挂掉了,那就凉凉了。
重点:Hashmap组成,寻找算法、扩容算法、put、get过程,红黑树、二叉树、B+树的区别。
经典问题: 为什么使用红黑树,不使用普通的二叉树?
3、锁:AQS实现,公平锁/非公平锁,synchronized和lock的区别,synchronized锁演化过程。
一般从AQS谈起,这个和HashMap一样一定要通读源码,知道每一个方法的名字和过程,和集合类同样重要。
即使没有问你,你最后页可以对比以下synchronized和lock和lockSupport,显得JUC下面都精通。
还有这三个:
CountDownLatch、CyclicBarrier、Semaphore,一般会问使用场景,要了然于胸
lCAS:通常搭配volatile问,我一般在上面几个回答中就带上了,这个应用比较广泛,AQS、集合等大量使用,源码的时候直接说就OK
lThreadLocal:也是要看源码,还可以结合4大引用类型,堆内存泄露使用,还有使用场景。
l线程池:这个也基本99%都会问道,非常重要,和前面一样,源码来一遍。
重点:7大参数,拒绝策略。回答思路,7大参数拒绝策略介绍完。把线程池扩容场景描述一遍。结合实际使用场景说一下,参数配置,一个是耗CPU一个是耗IO的应该就问题不大。
基础大体就这么多了,可能还有JMM\J