介绍你的项目
考察项目经历和开发经验
- 基本业务流程
- 遇到什么困难,你是如何解决的
- 从项目引出熟悉的技术栈
自我管理问题
考察总结和知识构建能力
- 说一个你解决过最复杂的问题
- 如何学习一门新技术
算法
考察算法基础能力(技术问题的倒数第二题),看对方的能力水平,问两题,第一题从Leetcode挑选经典题,第二题从限流算法或海量数据处理算法中选一题,如果都不会但要会二分查找和快排
- 排序算法
- 查找算法
- 海量数据处理算法
- 限流算法
- 高阶算法(时间轮/雪花算法/布隆过滤器/一致性哈希)
系统设计
技术栈系列问题
- 考察技术栈的熟悉程度(三个维度:流程、性能调优、高可用)
- 从整体流程引申实现细节问题(根据面试者的水平挑选适当层次的问题,能回答上来在细化)
- 尝试关联的项目的业务中
- 是否考虑过该技术栈的可靠性,即如果宕机如何处理
MySQL
1. MySQL查询工作流程,以join为例
- MySQL网络协议通信
- 查询缓存
- 解析器–计划器–执行器
- Innodb缓冲池––>缓冲池结构及性能指标
- 磁盘主键索引查询––>非聚集索引––>为什么不能使用平衡二叉树––>PG索引结构
- join池的连接算法
- 数据输出
2. MySQL DML流程
- 到执行器之前与DQL相同
- 读取到缓冲池,写入change buffer
- 创建事务读视图––>事务定义与实现及并发事务问题––>MVCC––>PG事务id––>PG的实现方式
- 数据加锁––>MySQL按不同方面划分的锁 —> 乐观锁/悲观锁及其使用场景
- 创建undo log
- 提交事务,写入redo log和bin log––>PG WAL
- 修改内存数据页
- 写入脏页––>性能指标
- 修改数据页,但不会压缩空间––>PG vacuum––>相关性能指标
3. MySQL高可用
4. MySQL性能优化
JVM
1. JVM工作流程(执行java -jar)
- 创建JVM进程,分配JVM内存––>JVM模型––>内存配置方式
- 创建类加载器
- 加载标准类库,ext类库,和应用类
- 类加载流程
- 创建对象分配内存
- 执行引擎执行字节码––>JIT编译优化
- GC流程––>GC收集器类型,对象引用
计算机网络
网络请求流程
- 浏览器发起请求
- 键盘硬中断和软中断
- 创建socket
- DNS
- DCHP
- TCP三次握手
- SSL握手
- 发起http请求––>查找缓存
- 发送网络包––>网络协议栈
- 交换机,路由器
- 接收网络包
- 接收方响应,发送方接收ACK––>流量控制––>拥塞控制
- 浏览器处理响应网络包
- TCP四次挥手
Redis
- 为什么要使用Redis
- Redis为什么快 —> 为什么是单线程
- 过程中引入Redis执行流程
- Redis网络协议通信及IO多路复用 —> IO模型 —> IO多路复用 —> select/poll/epoll
- 服务端输入缓存,解析
- Socket排队等待线程处理
- 处理完成后执行后处理操作查询/写入数据,包括AOF写入,慢日志
- Redis服务端回复写入输出缓冲,回复请求
- Redis如何保证数据不会丢失 —> 介绍AOF和RDB
- 项目中使用了哪些数据结构
- 有设置过期时间吗,你了解的过期策略是怎样的
- 有没有用过zset,内部数据结构如何实现,为什么不使用红黑树
- 你还了解其他应用场景吗
- 如何保证缓存和数据库一致性 —> 通常有两套解决思路(删除缓存和Canal)—> 为什么要删除而不能修改
- 有没有遇到过缓存失效问题,如何解决(缓存穿透/缓存击穿/缓存雪崩)
Redis高可用
- 如果Redis宕机怎么办,你们项目如何保证Redis的可用性
- 主从复制/Sentinel/集群
- 集群为什么使用哈希槽而不是一致性hash
- 会出现脑裂/3C/羊群效应问题吗,如何解决
Kafka
Elasticsearch
- 为什么要使用ES —> MySQL不适合做全文检索
- 底层Lucene —> 倒排索引原理
- ES相比Lucene有什么优点 —> 提供了高可用方案
- 引入到ES查询流程来保证高可用 —> 近实时查询和实时查询
- ES索引保证数据原子性和持久性
- 项目中如何使用ES —> 从系统架构入手说明
- ES在项目中如何规划
- 使用过程中遇到哪些问题,怎么做调优(深度分页,使用过滤器)
Prometheus
- 为什么使用Prome —> 为什么关系型数据库不合适 —> 时序数据库的原理
- 为什么选择Prome而不是open-falcon
- 项目中如何使用Prome —> 从系统架构中入手说明
- Prome在项目中如何规划
- 使用过程中遇到哪些问题,怎么做调优(大内存问题)
