知识体系梳理
** 分布式
1、分布式架构、CAP理论、BASE
2、zookeeper
3、RPC框架(如Dubbo、Spring Cloud)
4、消息队列(Kafka),各种消息队列的优劣,(同步与异步消息处理)
- 发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe),kafka通过consumer group来实现,不同group为发布-订阅模式,group内部消费者之间为队列模式
5、Redis的同步与扩容机制、Redis保持唯一性地机制、zset、缓存清理策略(定期+惰性)、内存淘汰策略
一、Java虚拟机
1、内存架构
2、类加载机制(特别的,双亲委派模式及其反例)
3、内存模型,volatile实现原理
4、CMS、G1垃圾回收步骤
5、驱动时内存的分配
6、垃圾收集器:parallel scavenge + serial old parallel new + CMS
7、内存溢出的出现的原因及解决思路(线程池-threadlocal、数据量大,文件或连接未正常关闭)
8、栈溢出的出现的原因及解决思路
9、cpu飙升的场景(响应慢导致请求堆积、死循环、gc)
二、Java基础
1、函数式编程
2、线程池
3、HashMap数据结构(数组 + 链表 + 红黑树)
4、CocurrencyHashMap数据结构
5、ThreadLocal,对于线程池来说,如何释放变量
6、乐观锁与悲观锁(sychronized、cas)
7、Error与Exception的区别
8、AIO、NIO、BIO
9、stream.parrel方法,注意后续链路方法的并发问题
10、notify/await,条件不满足时while循环中须先notify,后await
11、stream.flatmap及使用场景
12、spring
- bean生命周期
- bean循环引用
- springboot启动方式
三、数据库
1、事务隔离级别、mysql隔离级别的实现方式(MVCC)
2、索引结构(聚集索引、B+树)、B与B+树的区别、索引的用处与坏处
3、数据库调优(explain,至少range、要求ref)
4、分库分表(sharding-jdbc、mycat)
5、分布式事务
6、count(*)、count(1)的区别,优化方式(由于mvcc,须遍历,可使用mysql事务存储)
7、join的执行过程(驱动表,join_buffer)
8、事务(嵌套事务)
四、设计模式
1、各种设计模式及其应用场景
2、单例模式的破坏
3、项目中用到哪些设计模式(策略模式、单例、责任链、建造者模式、模板方法)
五、算法与数据结构
1、二分查找法
2、冒泡排序 & 快速排序
3、LFU & LRU
4、一致性哈希算法
5、负载均衡策略
6、佩奇爬楼梯,10个阶梯,一次爬1/2步,枚举方案数(递归,树形结构)
7、六个数字,求三个数字和为0的组合数(转为two sum问题)
9、常见的加密算法(对称加密 : DES
、3DES
、AES
, 非对称算法: RSA
、DSA
,散列算法 : SHA-1
、MD5
)
10、Raft算法
六、操作系统
1、断页
七、场景
1、二维码登录的实现方式
2、https交互流程
3、秒杀
4、大文件的上传
5、线程池的大小如何设置?(cpu密集型:核数*2+1,io密集型:核数*(1 + io占比/cpu占比))
-> 数据库连接池大小如何选择?(核数*2 + 有效磁盘数)
-> 高并发系统如何设计?(提高单节点吞吐量 + 排队)
八、管理
1、代码review
2、devops,好处,对开发人员的
3、项目周期与需求的平衡
九、架构
1、领域模型
2、设计思路与方法论(用例图,泳道图)