注:
(可选)的题目需要根据应聘人情况酌情考察。
(编码)的题目是编程题。当然只说思路也是可以的
二级list是答案,答案只写了基本思路。
数据结构
1. map的底层存储结构
- 数组、hash冲突后追加链表,链表太长了转红黑树
2. 如何用两个stack实现一个Queue(编码)
3. 用数组实现一个Queue(编码)
JDK语法
1.你怎么理解函数式接口?Function, Supplier,Consumer 如何使用?(可选)
2. String为何是final的?
3. Object有哪些方法?有什么作用?
多线程
1. ConcurrentHashMap线程安全实现机制
- 以前是分段锁(减少锁冲突)
- 现在是CAS实现
2. jdk中乐观锁有哪些实现
3. 线程池的使用
4. 写出一个死锁(编码)
5.ThreadLocal是什么?有什么需要注意的?
JVM
1. 了解哪些垃圾回收算法,JVM的垃圾回收机制
2. 什么是堆外内存(Direct Memory)(可选)
设计模式
1. 如何初始化单例类
2. 你了解哪些设计模式?你用了哪些设计模式来提高你代码的可维护性?
Spring
1. 你用AOP写过哪些功能
2. 什么是Srping的动态代理?Spring如果决定使用JDK动态那里还是cglib代理
3.Controller和RestController有什么区别
4.
Mysql
1. 什么是索引?主键索引和普通索引有什么区别?
2. 什么是数据库的水平切分和垂直切分?
3. 如何开启一个事务?举个例子,说明下事务是什么?
4. Mysql的redo log和bin log有什么作用?(可选)
5. Mysql支持JSON类型存储吗?支持索引吗?
6. 你平时是如何对Mysql语句进行优化的?
Redis
1. 持久化机制是怎么样的
2. 集群模式下,getKey操作是如何工作的
3. 如何复用redis链接?
- 使用连接池
- 如果链接超过一定时间就会因网络问题断掉,如何处理?
- 定期清除空闲的连接
4. 用过lua脚本吗?怎么用的,每次请求都提交整个脚本吗
5.除了String,你还用过redis的哪些数据类型
- 只需要第一次提交脚本内容时候生成一个sha值,后续每次通过evalSha直接调用