面试复习

Java基础

容器

Map

  1. HashMap
    1. 默认大小, 扩容
    2. hash冲突
    3. 链表/红黑树
    4. 多线程操作, 1.7死循环
  2. ConcurrentHashMap
    1. 并发原理
    2. 1.7和1.8对比
  3. HashTable
    1. 并发原理
  4. TreeMap
    1. 底层结构
  5. 红黑树
    1. 基本定义
    2. 插入思想
    3. https://www.jianshu.com/p/e136ec79235c
    4. 对比AVL

Collection

  1. ArrayList
    1. 默认大小, 扩容(10, 1.5)
    2. 对比LinkedList, Vector
    3. 获取数据O(1), 扩容O(1)
  2. LinkedList
    1. 基本结构
  3. Vector
    1. 并发原理
  4. CopyOnWriteList
    1. 基本结构
    2. 并发原理
  5. HashSet
    1. 基本结构
  6. ConcurrentHashSet
  7. Queue/Deque
    1. api
  8. PriorityQueue

并发

线程

  1. http://ifeve.com/java-concurrency-thread-directory/
  2. https://www.cnblogs.com/java1024/archive/2019/11/28/11950129.html
  3. https://www.cnblogs.com/zhanht/p/5450325.html
  4. java中线程的状态
    1. https://blog.csdn.net/qq_22771739/article/details/82529874
  5. 线程池
    1. http://ifeve.com/java-threadpool/
    2. https://yq.aliyun.com/articles/687794
    3. https://blog.51cto.com/14230003/2418026?source=dra
    4. https://blog.csdn.net/weixin_28760063/article/details/81266152
    5. https://www.cnblogs.com/a8457013/p/7819044.html
    6. https://www.cnblogs.com/x-bing/p/5680611.html
    7. https://www.jianshu.com/p/174958a72ce9
    8. 创建, 参数
      1. 线程池大小: https://blog.csdn.net/qrne06/article/details/80587576
      2. https://www.cnblogs.com/gujiande/p/9488462.html
      3. https://www.cnblogs.com/fengzheng/p/9297602.html
    9. 基本原理
      1. 执行流程
        1. 带看源码
        2. 判断过程: corePoolSize(核心线程) -> workQueue(任务队列) -> maxPoolSize(最大线程) -> RejectedExecutionHandler(拒绝策略)
          1. 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
          2. 如果此时线程池中的数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列。
          3. 如果此时线程池中的数量大于等于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
          4. 如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。
          5. 当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。
      2. Worker的创建和释放
        1. 带看源码
    10. Runnable, Callable
      1. https://blog.csdn.net/weixin_30514745/article/details/95664175
      2. https://blog.51cto.com/4837471/2327284
      3. 带看FutureTask源码
    11. submit, execute
      1. submit() 该方法返回一个Future对象,可执行带返回值的线程;或者执行想随时可以取消的线程。Future对象的get()方法获取返回值。Future对象的cancel(true/false)取消任务,未开始或已完成返回false,参数表示是否中断执行中的线程
      2. execute() 没有返回值。
    12. Executors提供的几种线程池和队列
      1. https://blog.csdn.net/weixin_40304387/article/details/80508236
      2. newCachedThreadPool
        1. https://www.zhihu.com/question/23212914
        2. SynchronousQueue
        3. https://zhuanlan.zhihu.com/p/29227508
    13. 定时任务, ScheduledThreadPoolExecutor
      1. DelayedWorkQueue
        1. 最小堆
        2. 看源码
  6. 协程
    1. https://www.nosuchfield.com/2019/01/09/Multiplex-and-non-blocking-and-threading-and-coroutine/
    2. https://www.zhihu.com/question/20511233
    3. https://zhuanlan.zhihu.com/p/172471249
    4. https://blog.csdn.net/zheng199172/article/details/88800275

锁, JUC

  1. CAS, ABA
    1. https://blog.csdn.net/wufaliang003/article/details/78797203
    2. UNSAFE, 带看源码
  2. synchronized
    1. https://www.jianshu.com/p/36eedeb3f912
    2. https://www.jianshu.com/p/9998a9db17f7
    3. https://www.jianshu.com/p/31b6a0b1b84b
    4. https://blog.csdn.net/aiyawalie/article/details/53261823
  3. ReentrantLock
    1. https://cloud.tencent.com/developer/article/1414968
    2. https://baijiahao.baidu.com/s?id=1638104862611986445&wfr=spider&for=pc
    3. 公平/非公平
      1. 区别: 有没有排队
    4. ReentrantReadWriteLock
    5. 带看源码
  4. AQS
    1. 带看源码
    2. CLH
      1. https://www.jianshu.com/p/1b1b44e84394
      2. https://www.jianshu.com/p/5ad8539e25c3
    3. 看到2.3即可
    4. 独占, 共享: ReentrantReadWriteLock
  5. Latch, Barrier, Semaphore
    1. CountDownLatch
      1. https://blog.csdn.net/u012637358/article/details/90288585
      2. https://www.cnblogs.com/fengzheng/p/9153720.html
    2. CyclicBarrier
      1. https://www.jdon.com/idea/java/Java-cyclicbarrier.html
    3. Semaphore
      1. https://segmentfault.com/a/1190000019334692
  6. volatile
    1. 两个功能
      1. 线程可见性
      2. 禁止重排序
    2. https://www.jianshu.com/p/ef8de88b1343
    3. https://www.cnblogs.com/yaowen/p/11240540.html
    4. happen-before, 简读: http://www.voidcn.com/article/p-qzqvusbt-ke.html

JVM

对象, 引用和值传递

  1. https://www.cnblogs.com/dolphin0520/p/3592498.html
  2. https://blog.csdn.net/weixin_38719347/article/details/80961874
  3. https://segmentfault.com/a/1190000018221603

内存模型

  1. https://juejin.cn/post/6844903782795444238
  2. https://www.jianshu.com/p/c1ac5e7a5f87
  3. https://zhuanlan.zhihu.com/p/38348646

类加载

  1. https://www.cnblogs.com/Qian123/p/5707562.html
  2. https://www.jianshu.com/p/51b2c50c58eb

GC

  1. 搜索算法
    1. https://www.jianshu.com/p/108ddab3ad3f
  2. 回收算法
    1. https://juejin.cn/post/6844903513248497677#heading-12
  3. 分代思想
    1. https://www.infoq.cn/article/ZOYqRI4c-BFKmUBmzmKN
    2. https://www.infoq.cn/article/3WyReTKqrHIvtw4frmr3
  4. CMS, G1
    1. https://www.jianshu.com/p/d903fd25f30a
    2. https://zhuanlan.zhihu.com/p/54048685
    3. https://www.cnblogs.com/rgever/p/9534857.html
    4. 区别: https://www.jianshu.com/p/ab54489f5d71
  5. ZGC
    1. https://www.cnblogs.com/jimoer/p/13170249.html
    2. https://vimsky.com/article/4162.html
  6. 内存泄漏
    1. 简单看就行: https://juejin.cn/post/6844903809165033479

New对象

  1. https://zhuanlan.zhihu.com/p/85377745

反射 *

Redis

  1. 数据类型, 底层结构
    1. 带看
    2. https://www.cnblogs.com/ysocean/p/9080942.html
    3. https://blog.csdn.net/qq_37152598/article/details/93413384
    4. http://www.freeoa.net/osuport/db/redis-data-structure_3278.html
    5. https://stor.51cto.com/art/201910/605032.htm
    6. 跳表
      1. https://zhuanlan.zhihu.com/p/68516038
      2. 对比二叉树
  2. 持久化
    1. RDB/AOF
      1. https://www.liangzl.com/get-article-detail-126557.html
      2. https://segmentfault.com/a/1190000016021217
    2. AOF过大怎么优化
      1. https://blog.csdn.net/weixin_38642130/article/details/93508290
    3. 混合持久化
      1. https://www.cnblogs.com/chichung/p/12687101.html
  3. 分布式锁
    1. redis
      1. setnx
      2. redisson *
    2. zookeeper
      1. https://zhuanlan.zhihu.com/p/48586740
    3. 怎么避免主从不一致, RedLock
      1. https://zhuanlan.zhihu.com/p/148499134
      2. 只看RedLock即可
  4. 布隆过滤器
    1. https://www.cnblogs.com/ysocean/p/12594982.html
    2. https://blog.csdn.net/u011277123/article/details/88757861
  5. 缓存击穿, 穿透, 雪崩
    1. https://www.cnblogs.com/raichen/p/7750165.html
    2. https://msd.misuland.com/pd/2884250171976191880
    3. https://www.jianshu.com/p/b144c11e742e
    4. https://blog.csdn.net/kongtiao5/article/details/82771694
  6. 主从同步
    1. https://blog.csdn.net/weixin_42711549/article/details/83061052
    2. https://zhuanlan.zhihu.com/p/55532249
  7. 哨兵
    1. https://blog.csdn.net/niugang0920/article/details/97141175
    2. 只看一就行
    3. https://www.cnblogs.com/jaycekon/p/6237562.html

MySQL

  1. binlog, undo log, redo log (二进制日志)

    1. https://blog.csdn.net/u010002184/article/details/88526708
    2. binlog
      1. 记录数据库表结构变更(例如CREATE、ALTER TABLE…)
      2. 表数据修改(INSERT、UPDATE、DELETE…)
      3. 不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,可以通过查询通用日志来查看MySQL执行过的所有语句。
    3. undo log, redo log
      1. https://www.jianshu.com/p/f5134cbe6e05
      2. https://www.cnblogs.com/better-farther-world2099/p/9290966.html
      3. https://www.codercto.com/a/52432.html
      4. 进阶
  2. 行记录格式

    Compact 行格式
    变长字段长度列表 null值列表 记录头部信息 隐藏列 * 数据列
    RowID(6字节)如果没有定义主键会添加 TransactionID(6字节)事务列 Roll Point(7字节)回滚指针列 列1 列2 ...
  3. 主键id *

    1. 不设置的处理方式
      1. Innodb表中在没有默认主键的情况下会生成一个6byte空间的自动增长主键
    2. 为什么一般都用自增 *
      1. https://www.cnblogs.com/lanqi/p/10185172.html
      2. https://blog.csdn.net/weixin_33810006/article/details/92324931
  4. InnoDB, MyIsam

    1. https://www.jb51.net/article/62457.htm
    2. https://www.zhihu.com/question/20596402?sort=created
  5. 索引

    1. 聚簇索引, 非聚簇索引
      1. https://www.cnblogs.com/jiawen010/p/11805241.html
      2. https://www.jianshu.com/p/fa8192853184
    2. 普通索引, 联合索引, 结构
      1. https://blog.csdn.net/caijunsen/article/details/83045985
      2. B+树
    3. 索引失效: https://www.jianshu.com/p/3ccca0444432
    4. 索引优化: https://www.cnblogs.com/binbinyouni/p/6070715.html
  6. ACID的实现原理 *

    1. https://blog.csdn.net/qq_39521554/article/details/80240841
    2. 原子性, undo log
    3. 一致性
    4. 隔离性, 隔离级别, MVCC
    5. 持久性, redo log
  7. 隔离级别, MVCC, ReadView **

    1. https://www.cnblogs.com/wwcom123/p/10727194.html
    2. 简述
    3. 重点
    4. https://www.codercto.com/a/88775.html
    5. https://blog.51cto.com/12182612/2486731
    6. https://zhuanlan.zhihu.com/p/75737955
    7. https://zhuanlan.zhihu.com/p/117476959
    8. RC, RR的区别
      1. Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同
  8. 锁类型

    1. https://zhuanlan.zhihu.com/p/75737955
    2. 简读即可 *
    3. 意向锁
      1. 系列
        1. https://blog.csdn.net/zcl_love_wx/article/details/83305645
        2. https://blog.csdn.net/zcl_love_wx/article/details/81977447
        3. https://blog.csdn.net/zcl_love_wx/article/details/81983267
        4. https://blog.csdn.net/zcl_love_wx/article/details/82015281
      2. https://www.zhihu.com/question/51513268?sort=created
    4. 间隙锁 *
      1. https://www.jianshu.com/p/32904ee07e56
  9. 缓存一致性 *

  10. 主从复制

    1. https://www.cnblogs.com/baizhanshi/p/10528959.html
    2. https://www.cnblogs.com/xihuineng/p/10438969.html
    3. https://www.hoohack.me/2017/07/11/learning-mysql-replication-detail
  11. 转账 *

    1. 单向, A -> B
    2. 双向, A -> B & B -> A, 怎么避免死锁(不考虑锁机制)
    3. 设计转账系统
      1. 同步转账
      2. 异步转账

网络

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

设计模式

  1. http://c.biancheng.net/design_pattern/
  2. http://www.cocoachina.com/articles/31808

Spring

  1. IOC
    1. BeanFactory
    2. ApplicationContext
    3. Bean的创建, 生命周期
    4. 声明Bean的方式
      1. 注解, @Component, @Bean
      2. XML
  2. AOP
  3. 动态代理
    1. JDK
    2. CGLIB
  4. SpringBoot
    1. 基本思想
    2. starter原理, EnableAutoConfiguration
  5. 设计模式
    1. 单例
    2. 工厂
    3. 代理
    4. 责任链, Filter
    5. 模板, RedisTemplate
    6. 策略, Interceptor
  6. BeanFactory, FactoryBean
  7. 事务
    1. 管理方式
      1. 编程式, 使用TransactionTemplate开启关闭和提交事务
      2. 声明式, @Transactional, XML
    2. 传播行为
  8. 循环依赖
  9. MyBatis

中间件

Kafka

  1. 数据存储, 流程
  2. 高可用
  3. 持久化
  4. 消息队列, 重复消费, 事务消息
  5. 顺序消费
    1. 借助数据库
    2. 监听器关闭消费者
  6. 不同队列的对比

Thrift

分布式

  1. 缓存类型, 从客户端到服务端
  2. 一致性Hash
  3. 熔断, 限流, 降级
  4. 微服务
  5. 分布式调度
  6. CAP
  7. 分布式事务

系统设计

  1. 秒杀系统
    1. 缓存
      1. 页面
      2. 数据
      3. 预热
    2. MQ
      1. 异步
      2. 削峰
      3. 解耦
    3. 数据库
      1. 主从
      2. 读写分离
      3. 分库分表
    4. 读弱一致, 写强一致
    5. 隔离
      1. 数据
      2. 系统
      3. 业务
  2. 短链接生成
    1. 过期时间
    2. 分布式id生成
  3. 高并发的红包系统
    1. 根据红包id进行机器hash, 固定机器处理
    2. 串行请求队列
    3. 分库分表, 时间维度
  4. 分布式ID生成
    1. 机器分片
    2. 时间戳+机器id+递增id
  5. 分布式限流
    1. 固定窗口
    2. 滑动窗口
    3. 漏桶, 不能处理突发请求
    4. 令牌桶
  6. 分布式定时任务
  7. 新浪微博怎么推送微博
    1. 推, 只推送在线
    2. 拉, 手动刷新列表
    3. 缓存用户关系
  8. 大文件有限内存排序

问题

  1. 通过MQ同步处理数据, 信号量/锁
  2. 文件系统, 文件夹/文件, 公共属性
  3. 多数据源一致性
  4. 接口耗时高, 数据库/缓存
  5. 数据库缓存一致性
  6. 分布式限流
  7. 字典搜索
  8. 离线数据同步

缓存一致性

  1. 删缓存

    1. 先删后更新数据库
      1. 删-更-删
      2. 先更新数据库再删
        1. 异步, 监听binlog
  2. 更新缓存

    1. 先更新缓存, 在更新数据库
    2. 先更新数据库后更新缓存
      1. 更新缓存失败的时候, 记录进行异步处理
  3. 本地缓存, 事件总线监听刷新

项目

  1. 如何找项目性能瓶颈
  2. 项目亮点, 难题, 处理