一面
- 说一下面向对象和面向过程的区别。
- final修饰一个类的目的是什么?为什么不能被继承?
在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。
- JRE,JDK,JVM分别是什么意思。
- 说一下HashMap的底层原理。红黑树相比于AVL树有什么优势?
红黑树利用了缓存,以空间换时间。牺牲了部分平衡性,以换取删除/插入操作时少量的旋转次数,整体来说,性能优于AVL树。
-
Concurrent的底层原理。1.8之后为什么用CAS来实现了。ConcurrentHashMap出现冲突时执行什么操作?
-
说一下Synchronized的底层原理,CAS和Synchronized各自的优势是什么?
-
CountDownLatch等底层原理是什么?AQS底层原理是什么?
-
说一下JVM的内存模型。
-
代码题:打印如下规律的数组:
n = 2: 1 1 1 1 n = 3: 1 1 1 1 2 1 1 1 1 n = 4: 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1
(使用螺旋打印数组的方式做出来了,但是还有更简单的方式,且不是用动态规划)
-
InnoDB中索引的数据结构。使用时可以怎么让B+树的层数更少(叶子节点更少->表中列的数目不宜过多)。
下去了解一下叶子节点的固定大小。
二面
上来就怼项目,说我这个多么不完善(这我能不知道吗)。
然后让打印九九乘法表,并且要可扩展且保证性能。这里两重循环是避免不了的,主要是在输出的时候要保证格式(数字右对齐),而且每层循环都输出耗时太长。将打印出的数据先暂存到一个StringBuilder中,最后在统一输出更好。