系统设计,缓存说明,消息队列等内容讲解
树图思维导图提供 极海Channel 在线思维导图免费制作,点击“编辑”按钮,可对 极海Channel 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:f6497da195466dfe6ab91b637f2ff4ba
极海Channel思维导图模板大纲
核心因素
高可用
集群/副本
一致性问题
主备
主从延时问题
分布式
限流/熔断/降级
可扩展
弹性无状态扩容
部署平滑性问题
有状态扩容
数据迁移问题
高性能
存储
缓存
计算
数据结构
算法
异步
设计模式
23设计模式
创建型
结构型
行为型
设计原则
7大原则的理解?
变化与稳定的隔离
组合优于继承
框架与项目应用
Spring工厂
JDBC 桥接模式
SpringBoot SPI机制
DDD的理解
复杂业务的抽象方式
经典题型
海量数据问题
hash分片
MapReduce
服务降级/熔断
限流算法
漏斗
时间窗口
令牌
存储分发问题
TOP K问题
堆
hash分片
具体题型
短链接
分布式id设计
排行榜
timeline、微博、微信功能实现
秒杀
常见计算机设计
负载均衡算法
分布式系统一致性
选举算法
Raft Paxos ZAB
RPC框架设计
服务注册与发现
分布式/redis
其他
延迟队列实现
使用注意
pipline批量执行
scan避免阻塞
IO模型注意
事务特性
其他问题
缓存一致性
缓存雪崩
缓存击穿
分布式锁实现
高性能
数据类型
存储方式
SDS特点
跳跃表
IO模型
内存
高可用
集群方案
几种结构
client cluster
proxy
热点数据倾斜
扩容 or 拆key
雪崩/击穿/穿透
代码实现逻辑
主从同步过程
增量还是全量
扩容数据迁移问题
哈希一致性
持久化方式两种方式比较
哨兵模式
LRU淘汰策略
容灾恢复
分布式锁
与Zookeeper的对比?
高可用?
主从/集群
Redlock
redisson
本地缓存
对其分布式缓存的优缺点?
一致性问题?
内存限制问题?
集群通知
主要模块
Provider/Consumer/Discovery
RPC比较
gRPC
Dubbo
Http
调用过程
负载均衡与集群容错
负载策略算法
重试
幂等风险
快速失败
IO模型
底层协议与框架
服务降级与熔断
长连接
RocketMQ
主要组成
为什么吞吐量高?
0拷贝
commitlog统一写入
如何消息不丢失?
queue副本机制
重复消费
主从结构
扩容
高可用
其他mq
Kafka
RabbitMQ
spring
启动过程?
扩展点有哪些?
事务
如何控制
声明
失效情况
编程式
传播机制
多线程事务
设计模式应用
IOC与AOP
工厂等模式
源码
循环依赖
懒加载
单/多例
AbstractApplicationContext.refresh()
mybatis
拦截器插件
多级缓存
源码
spring boot
如何自动化装配
容器技术
docker
k8s
服务治理
负载均衡
一致性哈希
限流、降级、熔断
服务发现
全链路日志跟踪
分布式事务
seata
TCC
MQ消息
二阶段、三阶段提交
本地消息表
压力测试
明确业务指标
数据模型
真实环境
业务低峰
影子表/库
脏数据清理
隔离影响
压测标记透传
如何技术实现?
AOP
拦截器
选举算法
CAP
与ACID的一致性区别?
常见的一致性模型?
微服务拆分
BASE
配置中心
Zookeeper
nacos
Eureka
心态
再牛的人也不可能100%拿Offer
主观
心情
性格
客观
不匹配
面试官水平
公司因素
招人不急/备胎
刷KPI
凉面复盘
技术能力
及时补足
其它
沟通表达
多面几家
练习
匹配度
试用期
自信
抓核心接口,业务,模型
多跟需求方交流
忍受一定代码洁癖
TDD
核心链路
对应级别面试内容调研
问题类型
薪资待遇
工作内容
如果有目标公司,可以拿对标公司先练手
避免留下不好的面试记录
及时复盘总结
项目亮点
STAR模型
需求变形
突出3H或业务抽象
经典计算机思想应用
系统指标
重新设计/缺陷思考
更进一步优化
业务模型
复杂场景的描述与解决
高级必备,八股是基础,项目变形多思考
不要否定面试官
目的是拿到Offer,情商跟上
谈薪技巧
业界普遍标准30%-50%(前一份工作满一年)
可以把年包/12个月算成base 去谈
拿到其它公司的Offer去要价
注意社保公积金
加班多可以适当提高薪资标准
拿到Offer
调研团队,建议直接向HR要开发组员联系方式
建议四个维度考察:薪资/技术/团队/产品
并发与多线程
并发包核心类
AQS
CIH队列实现
性能为什么高?
入队列过程?
为什么要先自旋?
Semopher
限流可用?
ReentrantLock
与Synchronized区别?
释放阻塞的指定线程?
为什么finally释放?
读写锁
cyclebarrier countdown
LockSupport
阻塞细节?
CopyOnWrite容器用途?
UnSafe类用途?
Callable与Runnable区别?
CompleteFuture使用?
synchronized
ReentrantLock区别?
锁的量级
什么是锁升级?
如何降级?
volatile
共享一致性
MESI协议
内存屏障实现
总线风暴
线程池
回收策略哪些?
调度算法有哪些?
几个核心参数含义?
阻塞队列有哪些?
核心线程如何回收?
超过最大线程数会怎样?
为什么要有阻塞队列?
为什么避免用Executors静态线程池?
调优
大量RPC调用怎么调?
大量计算任务怎么调?
线程生命周期有哪些?
几个状态的转换?
Thread.yield()含义?
其它考点
线程与进程/协程的区别?
如何传递线程私有变量?
forkjoin
生产者消费者
Object wait与Sleep区别?
为什么wait定义在Object而不是Thread?
唤起指定线程?
如何控制多个线程同时等待一个线程结束?
OOP
什么是设计模式?
面向对象设计原则有哪些?
创建型设计模式有哪些?
工厂模式的应用?
对于场景的理解?
反射
什么是反射?
用途是啥?
性能差在哪?
安全性问题?
JavaAgent
debug底层实现?
JVMTI
arthas
JDK
指定版本优化
JDK8
泛型
为什么说Java是假泛型?
为什么要有泛型?
序列化
为什么要序列化?
为什么要实现Serializable接口?
序列化ID的含义?
多个类定义同一个序列化ID有风险吗?
NIO实现
对比BIO的优势?
IO模型有哪些?
异常管理
编译异常
运行异常
ERROR
一些关键字的理解
final
static
transient
JVM
内存结构
永久代 1.8为什么移到堆外?
常量池的作用?
为什么是-128-127?
堆和栈分别存放什么?
如何进行回收?
哪些情况栈溢出?
堆的结构?为什么是分区模型?
回收算法有哪些?
内存模型
线程私有变量?
内存同步性问题
内存逃逸分析
GC
Parallel Serial GC与CMS与G1区别?
最新ZGC
算法
类加载机制
双亲委派
为什么部分场景不遵守?
JDBC
tomcat
为什么要这样设计?
如何自定义类加载器?
线程上下文类加载器?
加载过程?
为什么解析可以在初始化之后?
JIT
编译升级几个级别?
为什么不启动就加载好?
发布预热?
如何做流量重放?
常见问题排查
堆与栈溢出有哪些情况?
如何排查?
执行耗时高如何排查?
有哪些优化?
主要组成
存储引擎区别
InnoDB和MyISAM区别?
版本差异
不同版本的加锁差异?
组成部分
优化器
复合索引的优化?
大量回表索引失效问题?
优化器如何判断?
隔离级别
如何实现?
MVCC
能解决幻读吗?
如何实现的?
事务隔离级别
幻读如何解决?
当前读和快照读的区别?
MVCC能解决幻读吗?
当前读和快找读是什么?
间隙锁的用途?
持久性和一致性的区别?
与CAP的一致性区别?
分布式事务如何实现隔离级别?
默认是什么隔离级别?
不同隔离级别差异?
锁粒度
分区分表
分库与分表的差异?
事务怎么解决?
SQL优化
explain语句分析
几个关键指标含义
DDL慢
元数据锁?
大事务优化
大表加字段
Online DDL
不同MySQL版本差异
全局优化配置optimizer_trace
写入变慢
索引文件优化?
批量刷盘优化
回表优化
索引下推
索引覆盖
B+树性质
为什么叶子节点是双向链表
为什么不是Skiplist
哈希索引与B+索引的比较
查询数据的过程
范围查询过程
日志
binlog
应用场景
格式差异
redolog
用途,如何保证数据不丢失
undolog
事务回滚控制
高可用
主从
数据一致性怎么解决?
强制走主
实现方案
AOP
DB拦截器
写入如何扩展?
纵向
增加DB配置
横向
分库分表
主从延迟风险规避?
切面拦截,强制走主
按一致性要求分离
性能优化
缓冲区
ChangeBuffer
普通索引与唯一索引处理差异?
批量刷盘
数据不丢失如何解决?
缓冲区的几个链表用途?
分库分表
水平拆分
分布式事务解决方案?
CAP
BASE最终一致
具体框架
TCC
Seata
saga
理论基础
二阶/三阶段提交?
分片规则如何设计?
尽量离散
尽力避免分布式事务
业务逻辑
不同业务分片规则冲突?
数据如何迁移?
迁移类型
停机升级
跑批工具
数据校验
业务低峰
平滑迁移
数据完整性校验
切读流量动态校验
灰度切流
监控告警
兼容性发布
先双写再增量
垂直拆分
为什么反范式设计?
结合业务场景 & 性能
拆分思路
字段访问频率
业务模型
冷热分离
为什么冷数据归档
避免大表影响性能
分离规则
定时任务滚动归档
业务实时归档
索引相关
索引数据结构
Hash
B+
聚簇索引
非聚簇索引
Full-text
锁机制
表锁
共享锁
排它锁
意向锁
MDL锁
行锁
共享锁
排它锁
区间锁
间隙锁
临键锁
如何检测死锁?
命令是啥?
索引类型区别?
为什么不用Btree?
B+的结构?
为什么不用skiplist?
Redis什么结构采用Skiplist?
为什么不用B+?
为什么不用hash?
为什么不用红黑树?
红黑树怎样的结构?
旋转是在做什么?
磁盘预读机制
磁盘缓冲区用途?
MRR参数作用?
索引优化
最左匹配?
a/b/c索引,WHRER b = 1 AND a = 1能命中吗?
优化回表
索引覆盖
索引下推
避免全表扫几种方式?
同样的条件为什么偶尔命中偶尔不命中索引?
哪些情况会导致索引失效?
其他参数优化
Innodb_buffer_pool_size
Sync_binlog
query cache
MRR
事务
ACID四大特性
持久性与一致性的区别?
与CAP的一致性区别?
原子性含义?
持久性如何实现?
代码如何控制?
binlog、redolog、undolog的应用
os
内核态与用户态
为什么要区分用户态和内核态?
如何进行切换?
协程与线程
调度算法有哪些?
守护线程作用?
线程状态有哪些?如何转换?
并行与并发的差异?
DMA
数据拷贝过程?
中断
什么是现场保护?
IO模型
异步和非阻塞的区别?
多路复用/阻塞非阻塞的理解?
硬件
机械磁盘和SSD区别?
内存
虚拟与物理?
信号量
内核缓冲
network
TCP/IP
tcp三次握手与四次挥手
IP掩码/子网划分/nat/ARP/mac地址/VPN原理等基础概念
http状态码
几种类型?
https
加密过程?
对称和非对称的区别?
CA证书的管理?
几种加密方式的对比?
TCP
拥塞控制
与UDP差异
滑动窗口
粘包
组网与协议
算法
注意事项
关注最优解
熟练白板编写
常见API要熟悉
Test Case编写Assert规范
重点tag
数组
链表
哈希表
树
字符串
动态规划
排序
稳定性
复杂度
刷题平台
Leetcode (外企多)
牛客网(国内互联网公司主要平台)
思想
分治
贪心
随机
回溯
...
循环优于递归
其他场景
redis相关
有哪些数据结构?
Bloom Filter
应用场景哪些?
ZSet如何实现的?
skiplist
Geohash
mysql
索引什么结构?
为什么是B+?
叶子节点为什么是双向链表?
非叶子节点为什么不存数据?
hash
相比B+的优势?
JDK
JUC
加锁解锁性能为什么高?
CLH队列怎样的结构?
阻塞队列有哪些?
集合类
HashMap
List
Tree
bitmap使用场景
树图思维导图提供 ——重点行业机构业务客户生态图谱(锦州地区) 在线思维导图免费制作,点击“编辑”按钮,可对 ——重点行业机构业务客户生态图谱(锦州地区) 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:f930058a554a09639a5c5c0e168c451c
树图思维导图提供 工艺流程图 在线思维导图免费制作,点击“编辑”按钮,可对 工艺流程图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a8e31ea83041e28a9ece5f7d7121fc30