1. Java基础
(1) 常用集合的源码实现,重点Map;
a. HashMap,HashTable,ConcurrentHashMap以及LinkedHashMap对比(实现LRU);
b. Map的存储实现红黑树及对应JDK版本;
c. ConcurrentModificationException(fast-fail机制);
(2) 多线程,重点是线程池;
a. 实现Runnable和继承Thread是常识;
b. Executors原理,参数意义,拒绝策略;
c. wait/notify使用;
d. java并发包常用类(CountDownLatch,CyclicBarrier,Condition);
(3) volatile,synchronized和ReetrantLock实现;
a. JMM内存模型和Happens-before原则;
b. synchronized原理(https://blog.csdn.net/javazejian/article/details/72828483);
(4) JVM,JVM内存布局,GC,类加载;
a. 周志明的《深入理解java虚拟机》相关章节;
(5) NIO,单个线程为什么可以监听多个数据通道?
(6) 设计模式;
a. 单例模式多种实现方案(现场写);
b. 观察着模式的类图(现场画);
c. Spring中的九大设计模式(应用场景)
d. 代理模式中JDK动态代理和CGlib代理;
2. MySQL
(1) explain,sql执行计划;
a. sql执行计划及各字段代表含义;
b. mysql查询缓存相关参数(query_cache_size,query_cache_limit,read_buffer_size);
(2) 事务;
a. ACID,隔离级别;
b. 事务实现,redo和undo;
c. MVCC原理;
(3) 索引;
a. 索引分类,优缺点;
b. 索引原理(B-tree和B+tree);
c. 索引失效情况;
(4) 主从备份,主要是binlog日志;
3. 中间件
(1) Tomcat/Jetty;
a. Tomcat中Container/Connector/Engine/Host/Context关系;
b. Jetty中Server/Connector/Handler关系;
c. 两者对比,尤其是理解Tomcat的BIO模型和Jetty的NIO模型;
(2) Netty,依然是理解NIO;
(3) Redis,内存模型,淘汰策略,I/O模型,主从备份;
a. 存储数据类型,使用场景,常用API;
b. 持久化机制(RDB和AOF);
c. 单线程架构(重点理解I/O多路复用);
d. 集群部署,哨兵机制;
(4) Dubbo;
(5) 消息队列,上面Redis掌握就好,此处如果知道RabbitMQ或RocketMQ更好;
4. 算法(面试最重要的环节之一)
(1) 数据结构常见算法(链表,栈基本操作,各种排序查找);
(2) 剑指offer;
(3) 动态规划,背包问题;
(4) 大的数据量排序查找问题(重视位排序和Bloom Filter使用场景);
5. 项目(面试最重要的环节之二)
(1) SSM及其原理,重点是IOC,AOP,事务(SSH/Spring boot/Spring cloud四个至少掌握一个);
(2) 安全问题(XSS,CSRF,SQL注入);
(3) 所用框架事务;
(4) 跨域问题解决方案;
(5) 与json相关的操作;
(6) 针对自己做的项目,一定要总结出里面的重难点及创新点,如渠道支撑项目的相关知识点;
a. Activiti插件的使用,流程的半自动化配置,复杂流程的处理,任意环节的选取审核;
b. Hibernate和FastJson搭配,去除循环依赖;
c. 码号管理中多种类型号码的正则匹配(设计思想的转变);
d. 单点登录;
e. webservice;
f. 发邮件/发短信;
h. 码号管理中状态机的使用;
i. Redis的使用
其实,实验室项目里面类似的知识点很多,只要大家能深入去研究下,面试时,都可以作为一点展开说明。
6. 大数据(现在大公司尤其重视大数据知识,高并发场景,要多看看新技术)
(1) 大数据存储框架(HDFS,Hive,HBase);
(2) 大数据处理框架(MapReduce,Spark,Storm,Flink);
(3) 虚拟化管理(openstack,Docker, kubernetes);
(4) 日志处理框架(Kafka,Flume);