You should know
每天按照这个目录思考一下,或许会发现新大陆。
数据是一切的根本,所以以数据结构开始。
数据结构:
- 数组
- 链表(hash表)
- 树
- B树
- B+树
- 红黑树
- 字典树
- LSM树
重点:
- B树与B+树的区别,
- 为什么文件系统使用B+树,为什么不用红黑树,
- 为什么HashMap不用B+树
- 二分法查找
- 什么是跳跃表
- 堆数据结构是什么样子的
- 冒泡/选择/插入排序(基础)
- 快排/归并/堆排序(进阶)
- 数组是如何申请内存的
说起数据结构,第一个想到的就是数据库,毕竟大学的时候是放到一门课程里面的。
数据库:
- InnoDB:聚集索引
- MyISAM:非聚集索引
- 事务
- 原子性
- 一致性
- 隔离
- 持久
- 乐观锁/悲观锁
- HBase
重点:
- MySql数据库的数据结构,优点/缺点
- HBase数据库的数据结构,优点/缺点
- 聚集索引与非聚集索引的区别
- InnoDB是如何实现事务的
- 赃读、不可重复读、幻读分别是什么,怎么产生的?
- 事务的4种隔离级别:串行、可重复读、读已提交、读未提交;InnoDB默认可重复读;
- 乐观锁的实现:
- MVCC多版本并发控制的实现,系统编号,事务编号,创建编号,删除编号,日志先行。
- Next Lock 控制索引集合解决幻读问题。
- 悲观锁的实现:
- for update ,前提是要有索引,有索引就是行级锁,没有索引就是锁表了。本质就是当其他请求过来发现数据被锁住了会被阻塞等待锁的释放。
- 有闲心的可以想一想怎么设计一个内存数据库
数据库仅仅是数据存储的一种手段,我们更多的是在内存中处理数据。
Java集合类
- HashMap
- LinkedHashMap
- TreeMap
- HashTable
- ArrayList
- LinkedList
- HashSet
- TreeSet
- ConcurrentHashMap
重点:
- 各个集合类的数据结构
- 各个集合类的增删改查的实现原理
- 各个集合类的扩容实现,为什么要这么做,或者说这么做的优点是什么
- 其他的集合类还有什么
- 画一画集合框架图,梳理一下结构。
上面提到类ConcurrentHashMap,我们知道它是一个线程安全的集合类,那么保证线程安全都有那些手段?
Java中的锁
- volatile
- synchronized
- ReentrantLock
- CyclicBarrier
- CountDownLatch
- Semaphore
- ReentrantReadWriteLock
重点:
- 各自的特点,能解决什么场景的问题
- 底层实现机制,实现原理
- 其他的锁还有什么
- synchronized偏向锁、轻量锁、重量锁
- CAS的实现
- AQS的实现
锁是用来保证线程安全的,那么制造线程不安全的根本是多线程,单线程是不涉及到线程安全问题的。
Java多线程
- Thread、Runable、Callable
- ForkJoin
- ThreadPoolExcuter
重点:
- 多线程基础的3种实现方式,分别有什么特点
- ForkJoin的执行原理
- ThreadPool的执行原理
- 线程的中断
- 线程的阻塞与唤醒
- 线程池的关闭
- 线程的状态
Java毕竟是运行在JVM上的,所以没办法为了写得一手好代码,还是要了解深入一下的。
JVM从入门到入坑
- java内存模型
- 运行时数据区
- 类加载过程
- 垃圾回收器
- 分代回收
- 回收算法
- jvm常用参数
- jvm问题分析
重点:
- 深入了解这个内存模型,要细,知道哪里来哪里去。这个跟多线程关系密切
- 运行时数据区的各个区域分别是干什么的,要深入。
- 类加载过程,加载、校验、准备、解析、初始化。
- 各种回收器的特点,怎么组合使用。
- 知道分代回收的整个流程
- 各种回收算法的优缺点
- safepoint、saferegion、OopMap
- JIT、osr、c1、c2、逃逸分析
- 常用的几个参数的含义,以及大小的分配
- 线上出了问题怎么跟踪问题,并解决
可以玩儿点新花样了,各种框架了解下。
常用框架
- Spring
- MyBatis
- SpringBoot
重点:
- Spring ioc的实现原理。
- Spring aop的实现原理。
- Spring 事务的实现原理,以及传播机制。
- Spring Bean的生命周期。
- SpringMVC的实现原理。
- MyBatis的实现原理。
Redis
- Redis String、Hash、List、Set、ZSet数据结构
- Redis集群 Redis Sharding 一致性哈希
- 怎么持久化
- 分布式锁
消息队列
- Kafka Producer、Consumer、ConsumerGroup、Broker、Partition
- 如何保证高可用
- 如何持久化
- 如何保证一致性
- 基本的生产者-消费者实现过程。
不太好划分的,先放一坨
-
tcp/ip
- 三次握手
- TCP与UDP区别:连接可靠传输协议、无连接不可靠传输协议
- TCP如何保证可靠
- 校验和
- 序号标识
- 重传机制:超时重传、快速重传
- 滑动窗口
- 确认应答
- Https请求过程
-
算法:
- 分布式:2PC、3PC、TCC、Paxos、Raf
- 一致性hash
- 查询:深度优先、广度优先、二分法查找、最短路径优先
- LRU
Java Reference:强引用、软引用、弱引用、虚引用。分别在jdk种举例出对应的实现。
IO/NIO 区别,明确阻塞/非阻塞、同步/异步的概念,IO多路复用,select、poll、epoll。
==对一个事物的思考思路:
这是一个什么东西?
这个东西有什么用?怎么用?
怎么实现的?
为什么这么实现的?
有什么优点、缺点?==
后续继续补充,完善。。