0%
Java基础
容器
Map
- HashMap
- 默认大小, 扩容
- hash冲突
- 链表/红黑树
- 多线程操作, 1.7死循环
- ConcurrentHashMap
- 并发原理
- 1.7和1.8对比
- HashTable
- 并发原理
- TreeMap
- 底层结构
- 红黑树
- 基本定义
- 插入思想
- https://www.jianshu.com/p/e136ec79235c
- 对比AVL
Collection
- ArrayList
- 默认大小, 扩容(10, 1.5)
- 对比LinkedList, Vector
- 获取数据O(1), 扩容O(1)
- LinkedList
- 基本结构
- Vector
- 并发原理
- CopyOnWriteList
- 基本结构
- 并发原理
- HashSet
- 基本结构
- ConcurrentHashSet
- Queue/Deque
- api
- PriorityQueue
- 堆
并发
线程
- http://ifeve.com/java-concurrency-thread-directory/
- https://www.cnblogs.com/java1024/archive/2019/11/28/11950129.html
- https://www.cnblogs.com/zhanht/p/5450325.html
- java中线程的状态
- https://blog.csdn.net/qq_22771739/article/details/82529874
- 线程池
- http://ifeve.com/java-threadpool/
- https://yq.aliyun.com/articles/687794
- https://blog.51cto.com/14230003/2418026?source=dra
- https://blog.csdn.net/weixin_28760063/article/details/81266152
- https://www.cnblogs.com/a8457013/p/7819044.html
- https://www.cnblogs.com/x-bing/p/5680611.html
- https://www.jianshu.com/p/174958a72ce9
- 创建, 参数
- 线程池大小: https://blog.csdn.net/qrne06/article/details/80587576
- https://www.cnblogs.com/gujiande/p/9488462.html
- https://www.cnblogs.com/fengzheng/p/9297602.html
- 基本原理
- 执行流程
- 带看源码
- 判断过程: corePoolSize(核心线程) -> workQueue(任务队列) -> maxPoolSize(最大线程) -> RejectedExecutionHandler(拒绝策略)
- 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
- 如果此时线程池中的数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列。
- 如果此时线程池中的数量大于等于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
- 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。
- 当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。
- Worker的创建和释放
- 带看源码
- Runnable, Callable
- https://blog.csdn.net/weixin_30514745/article/details/95664175
- https://blog.51cto.com/4837471/2327284
- 带看FutureTask源码
- submit, execute
- submit() 该方法返回一个Future对象,可执行带返回值的线程;或者执行想随时可以取消的线程。Future对象的get()方法获取返回值。Future对象的cancel(true/false)取消任务,未开始或已完成返回false,参数表示是否中断执行中的线程
- execute() 没有返回值。
- Executors提供的几种线程池和队列
- https://blog.csdn.net/weixin_40304387/article/details/80508236
- newCachedThreadPool
- https://www.zhihu.com/question/23212914
- SynchronousQueue
- https://zhuanlan.zhihu.com/p/29227508
- 定时任务, ScheduledThreadPoolExecutor
- DelayedWorkQueue
- 最小堆
- 看源码
- 协程
- https://www.nosuchfield.com/2019/01/09/Multiplex-and-non-blocking-and-threading-and-coroutine/
- https://www.zhihu.com/question/20511233
- https://zhuanlan.zhihu.com/p/172471249
- https://blog.csdn.net/zheng199172/article/details/88800275
锁, JUC
- CAS, ABA
- https://blog.csdn.net/wufaliang003/article/details/78797203
- UNSAFE, 带看源码
- synchronized
- https://www.jianshu.com/p/36eedeb3f912
- https://www.jianshu.com/p/9998a9db17f7
- https://www.jianshu.com/p/31b6a0b1b84b
- https://blog.csdn.net/aiyawalie/article/details/53261823

- ReentrantLock
- https://cloud.tencent.com/developer/article/1414968
- https://baijiahao.baidu.com/s?id=1638104862611986445&wfr=spider&for=pc
- 公平/非公平
- 区别: 有没有排队
- ReentrantReadWriteLock
- 带看源码
- AQS
- 带看源码
- CLH
- https://www.jianshu.com/p/1b1b44e84394
- https://www.jianshu.com/p/5ad8539e25c3
- 看到2.3即可
- 独占, 共享: ReentrantReadWriteLock
- Latch, Barrier, Semaphore
- CountDownLatch
- https://blog.csdn.net/u012637358/article/details/90288585
- https://www.cnblogs.com/fengzheng/p/9153720.html
- CyclicBarrier
- https://www.jdon.com/idea/java/Java-cyclicbarrier.html
- Semaphore
- https://segmentfault.com/a/1190000019334692
- volatile
- 两个功能
- 线程可见性
- 禁止重排序
- https://www.jianshu.com/p/ef8de88b1343
- https://www.cnblogs.com/yaowen/p/11240540.html
- happen-before, 简读: http://www.voidcn.com/article/p-qzqvusbt-ke.html
JVM
对象, 引用和值传递
- https://www.cnblogs.com/dolphin0520/p/3592498.html
- https://blog.csdn.net/weixin_38719347/article/details/80961874
- https://segmentfault.com/a/1190000018221603
内存模型
- https://juejin.cn/post/6844903782795444238
- https://www.jianshu.com/p/c1ac5e7a5f87
- https://zhuanlan.zhihu.com/p/38348646
类加载
- https://www.cnblogs.com/Qian123/p/5707562.html
- https://www.jianshu.com/p/51b2c50c58eb
GC
- 搜索算法
- https://www.jianshu.com/p/108ddab3ad3f
- 回收算法
- https://juejin.cn/post/6844903513248497677#heading-12
- 分代思想
- https://www.infoq.cn/article/ZOYqRI4c-BFKmUBmzmKN
- https://www.infoq.cn/article/3WyReTKqrHIvtw4frmr3
- CMS, G1
- https://www.jianshu.com/p/d903fd25f30a
- https://zhuanlan.zhihu.com/p/54048685
- https://www.cnblogs.com/rgever/p/9534857.html
- 区别: https://www.jianshu.com/p/ab54489f5d71
- ZGC
- https://www.cnblogs.com/jimoer/p/13170249.html
- https://vimsky.com/article/4162.html
- 内存泄漏
- 简单看就行: https://juejin.cn/post/6844903809165033479
New对象
- https://zhuanlan.zhihu.com/p/85377745
反射 *
Redis
- 数据类型, 底层结构
- 带看
- https://www.cnblogs.com/ysocean/p/9080942.html
- https://blog.csdn.net/qq_37152598/article/details/93413384
- http://www.freeoa.net/osuport/db/redis-data-structure_3278.html
- https://stor.51cto.com/art/201910/605032.htm
- 跳表
- https://zhuanlan.zhihu.com/p/68516038
- 对比二叉树
- 持久化
- RDB/AOF
- https://www.liangzl.com/get-article-detail-126557.html
- https://segmentfault.com/a/1190000016021217
- AOF过大怎么优化
- https://blog.csdn.net/weixin_38642130/article/details/93508290
- 混合持久化
- https://www.cnblogs.com/chichung/p/12687101.html
- 分布式锁
- redis
- setnx
- redisson *
- zookeeper
- https://zhuanlan.zhihu.com/p/48586740
- 怎么避免主从不一致, RedLock
- https://zhuanlan.zhihu.com/p/148499134
- 只看RedLock即可
- 布隆过滤器
- https://www.cnblogs.com/ysocean/p/12594982.html
- https://blog.csdn.net/u011277123/article/details/88757861
- 缓存击穿, 穿透, 雪崩
- https://www.cnblogs.com/raichen/p/7750165.html
- https://msd.misuland.com/pd/2884250171976191880
- https://www.jianshu.com/p/b144c11e742e
- https://blog.csdn.net/kongtiao5/article/details/82771694
- 主从同步
- https://blog.csdn.net/weixin_42711549/article/details/83061052
- https://zhuanlan.zhihu.com/p/55532249
- 哨兵
- https://blog.csdn.net/niugang0920/article/details/97141175
- 只看一就行
- https://www.cnblogs.com/jaycekon/p/6237562.html
MySQL
binlog, undo log, redo log (二进制日志)
- https://blog.csdn.net/u010002184/article/details/88526708
- binlog
- 记录数据库表结构变更(例如CREATE、ALTER TABLE…)
- 表数据修改(INSERT、UPDATE、DELETE…)
- 不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,可以通过查询通用日志来查看MySQL执行过的所有语句。
- undo log, redo log
- https://www.jianshu.com/p/f5134cbe6e05
- https://www.cnblogs.com/better-farther-world2099/p/9290966.html
- https://www.codercto.com/a/52432.html
- 进阶
行记录格式
| Compact 行格式 |
| 变长字段长度列表 |
null值列表 |
记录头部信息 |
隐藏列 * |
数据列 |
| RowID(6字节)如果没有定义主键会添加 |
TransactionID(6字节)事务列 |
Roll Point(7字节)回滚指针列 |
列1 |
列2 |
... |
主键id *
- 不设置的处理方式
- Innodb表中在没有默认主键的情况下会生成一个6byte空间的自动增长主键
- 为什么一般都用自增 *
- https://www.cnblogs.com/lanqi/p/10185172.html
- https://blog.csdn.net/weixin_33810006/article/details/92324931
InnoDB, MyIsam
- https://www.jb51.net/article/62457.htm
- https://www.zhihu.com/question/20596402?sort=created
索引
- 聚簇索引, 非聚簇索引
- https://www.cnblogs.com/jiawen010/p/11805241.html
- https://www.jianshu.com/p/fa8192853184
- 普通索引, 联合索引, 结构
- https://blog.csdn.net/caijunsen/article/details/83045985
- B+树
- 索引失效: https://www.jianshu.com/p/3ccca0444432
- 索引优化: https://www.cnblogs.com/binbinyouni/p/6070715.html
ACID的实现原理 *
- https://blog.csdn.net/qq_39521554/article/details/80240841
- 原子性, undo log
- 一致性
- 隔离性, 隔离级别, MVCC
- 持久性, redo log
隔离级别, MVCC, ReadView **
- https://www.cnblogs.com/wwcom123/p/10727194.html
- 简述
- 重点
- https://www.codercto.com/a/88775.html
- https://blog.51cto.com/12182612/2486731
- https://zhuanlan.zhihu.com/p/75737955
- https://zhuanlan.zhihu.com/p/117476959
- RC, RR的区别
- Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同
锁类型
- https://zhuanlan.zhihu.com/p/75737955
- 简读即可 *
- 意向锁
- 系列
- https://blog.csdn.net/zcl_love_wx/article/details/83305645
- https://blog.csdn.net/zcl_love_wx/article/details/81977447
- https://blog.csdn.net/zcl_love_wx/article/details/81983267
- https://blog.csdn.net/zcl_love_wx/article/details/82015281
- https://www.zhihu.com/question/51513268?sort=created
- 间隙锁 *
- https://www.jianshu.com/p/32904ee07e56
缓存一致性 *
主从复制
- https://www.cnblogs.com/baizhanshi/p/10528959.html
- https://www.cnblogs.com/xihuineng/p/10438969.html
- https://www.hoohack.me/2017/07/11/learning-mysql-replication-detail
转账 *
- 单向, A -> B
- 双向, A -> B & B -> A, 怎么避免死锁(不考虑锁机制)
- 设计转账系统
- 同步转账
- 异步转账
网络


- https://www.jianshu.com/p/27862635c077
- https
- 非对称加密, 对称加密
- https://www.cnblogs.com/lakei/p/11165987.html
- https://blog.csdn.net/qq_29689487/article/details/81634057
- 建立连接
- https://www.cnblogs.com/softidea/p/6958394.html
- https://segmentfault.com/a/1190000018992153
- https://www.jianshu.com/p/14cd2c9d2cd2
- tcp网络协议, 拥塞控制
- 连接太长
- 拥塞控制
- 对比UDP
- NIO
- 原理
- https://zhuanlan.zhihu.com/p/23488863
- https://www.cnblogs.com/aspirant/p/8630283.html
- https://blog.csdn.net/u013956074/article/details/80974190
- select/poll
- https://blog.csdn.net/nanxiaotao/article/details/90612404
- https://www.cnblogs.com/aspirant/p/9166944.html
- epoll
- https://segmentfault.com/a/1190000003063859
- https://blog.csdn.net/daaikuaichuan/article/details/83862311
- https://segmentfault.com/a/1190000018517562
- epoll, select/poll对比
- 看流程就行
- https://www.cnblogs.com/aspirant/p/9166944.html
- https://blog.csdn.net/wteruiycbqqvwt/article/details/90299610
- https://blog.csdn.net/qq_35976351/article/details/85228002
- 零拷贝
- https://mp.weixin.qq.com/s/oPv1-wrhYjiOC1o0M0tjMA
- https://my.oschina.net/u/3990817/blog/3045359
- https://zhuanlan.zhihu.com/p/88789697
- 文件传输
- 传输大文件的时候, 使用「异步 I/O + 直接 I/O」
- 传输小文件的时候, 则使用「零拷贝技术」
- session, cookie区别
- https://www.jianshu.com/p/2f7031a69f43
- 进程通信方法
- https://www.jianshu.com/p/8e4f9978e5b8
- 输入网址到返回结果的全部过程, 数据流转, 缓存, DNS, 后端处理, 转发

- https://zhuanlan.zhihu.com/p/82956784
设计模式
- http://c.biancheng.net/design_pattern/
- http://www.cocoachina.com/articles/31808
Spring
- IOC
- BeanFactory
- ApplicationContext
- Bean的创建, 生命周期
- 声明Bean的方式
- 注解, @Component, @Bean
- XML
- AOP
- 动态代理
- JDK
- CGLIB
- SpringBoot
- 基本思想
- starter原理, EnableAutoConfiguration
- 设计模式
- 单例
- 工厂
- 代理
- 责任链, Filter
- 模板, RedisTemplate
- 策略, Interceptor
- BeanFactory, FactoryBean
- 事务
- 管理方式
- 编程式, 使用TransactionTemplate开启关闭和提交事务
- 声明式, @Transactional, XML
- 传播行为
- 循环依赖
- MyBatis
中间件
Kafka
- 数据存储, 流程
- 高可用
- 持久化
- 消息队列, 重复消费, 事务消息
- 顺序消费
- 借助数据库
- 监听器关闭消费者
- 不同队列的对比
Thrift
分布式
- 缓存类型, 从客户端到服务端
- 一致性Hash
- 熔断, 限流, 降级
- 微服务
- 分布式调度
- CAP
- 分布式事务
系统设计
- 秒杀系统
- 缓存
- 页面
- 数据
- 预热
- MQ
- 异步
- 削峰
- 解耦
- 数据库
- 主从
- 读写分离
- 分库分表
- 读弱一致, 写强一致
- 隔离
- 数据
- 系统
- 业务
- 短链接生成
- 过期时间
- 分布式id生成
- 高并发的红包系统
- 根据红包id进行机器hash, 固定机器处理
- 串行请求队列
- 分库分表, 时间维度
- 分布式ID生成
- 机器分片
- 时间戳+机器id+递增id
- 分布式限流
- 固定窗口
- 滑动窗口
- 漏桶, 不能处理突发请求
- 令牌桶
- 分布式定时任务
- 新浪微博怎么推送微博
- 推, 只推送在线
- 拉, 手动刷新列表
- 缓存用户关系
- 大文件有限内存排序
问题
- 通过MQ同步处理数据, 信号量/锁
- 文件系统, 文件夹/文件, 公共属性
- 多数据源一致性
- 接口耗时高, 数据库/缓存
- 数据库缓存一致性
- 分布式限流
- 字典搜索
- 离线数据同步
缓存一致性
删缓存
- 先删后更新数据库
- 删-更-删
- 先更新数据库再删
- 异步, 监听binlog
更新缓存
- 先更新缓存, 在更新数据库
- 先更新数据库后更新缓存
- 更新缓存失败的时候, 记录进行异步处理
本地缓存, 事件总线监听刷新
项目
- 如何找项目性能瓶颈
- 项目亮点, 难题, 处理