面试题目录
Contents
面试题目录
1. 数据结构
- 排序算法
- 链表和数组的区别?跳表的实现
- 二分查找的时间复杂度和优点?
- 哈希表,解决冲突的方式
- 二叉树和B+树
- 二个亿的无序整数,如何找到中间值
常见的编程题:链表反转、动态规划、二叉树遍历
2. 操作系统
进程与线程
进程间的通信方式
进程调度
死锁的条件与解除
僵尸进程是什么
用户态与内核态
3. Linux
- select 与 epoll 的区别
- fork的底层原理
- 查看文件中的100-200行,其中有error相关的附近日志
- top分析
- 查看端口占用
- 查看打开的文件
- tcpdump 抓包
- awk,grep的使用
4. 计算机网络
- 七层协议与tcp四层协议?五层协议
4.1. TCP
- tcp与udp的区别
- tcp的三次握手和四次挥手
- syn包丢了最多会重传多少次
- time_wait 的作用与危害,tcp_reuse 的机制
- TCP 如何确保可靠传输
- TCP 拥塞控制和流量控制
- TCP 的negla算法,如何解决粘包和半包(丢包?)问题
- TCP的链接保活计时器
- 基于UDP设计一个可靠的传输协议(参考quic)
4.2. HTTP
- 一次url访问会经过什么过程
- GET 和 POST 的区别,PUT 和 POST 的区别
- http 常见错误码
- http与https,https的原理
- session与cookie
5. 数据库
5.1. MySQL
- 常见的存储引擎有哪些,他们有什么区别
- 常见的索引实现方式,B+树索引,哈希索引他们分别适用什么场景
- Innodb 引擎的索引存储方式,聚簇索引与非聚簇索引
- 什么情况下索引不命中?MySQL 如何优化联合索引不满足最左规则的查询(索引下推)
- 一级索引与二级索引的查询方式,如何优化(覆盖索引)
- 如何优化慢查询(explain 分析)
- 事务的隔离级别
- innodb 引擎是如何解决RR级别下的幻读问题(mvcc,next-key)
- MySQL为什么RC级别下会出现不可重复度的问题,而RR不会(read View)
- 乐观锁与悲观锁
- mysql的锁机制(对索引加锁)(共享锁,排他锁,意向锁,gap锁)
- mysql如何保证事务的正确性(redolog,undo log)
- mysql是怎么保证数据持久,不丢失的(binlog)
- mysql主从复制的方式(同步复制,半同步复制,异步复制),如何解决主从延迟(多线程执行,组提交)
- MySQL 查询的IN和EXIST有什么区别?
- MySQL 死锁是如何形成的?MySQL是如何解决死锁问题的?
5.2. Redis
- 常见的数据类型(String, List, Hash, Set, Sort Set)
- 字符串类型是怎么实现(sds结构)
- hash 是怎么实现(渐进性hash)
- sort set 是怎么实现的(跳表)
- redis 实现分布式锁,实现可重入锁(lua,setnxex),如何解决宿主机宕机后,主从切换可能会导致同时有两个线程获取锁(红锁)
- redis实现乐观锁(Multi,watch,Exec)
- redis 持久化机制
- redis 主从复制(全量复制,增量复制,runid,复制缓冲区,复制偏移量)
- sentinel是如何做到高可用的(主观下线,客观下线,raft选主,主从切换)
- redis cluster是如何做到高可用的
6. Java
6.1. 基础
6.2. 多线程
- 什么是线程安全问题?
- 实现多线程的几种方式?
- 线程池的关闭方式有哪些?
7. 常用框架与第三方组件
7.1. Spring
- Spring AOP的实现原理
- spring IOC 的好处
- spring 用了什么设计模式
- Transaction 什么时候会生效?事务的实现原理是什么?
- spring mvc的controller参数是如何映射的?
- 多例注入的实现原理及其生命周期
- Spring 中的 Controller 注解是单例的还是多例的?会不会有并发问题?
7.2. SpringBoot
- 常用的SpringBoot的注解有哪些?
7.3 Mybatis
- Mybatis 的一级缓存和二级缓存
- Mybatis 插件的原理,用到了什么设计模式
- Mybatis 是怎么找到指定的mapper的
7.4. 本地缓存
- guava,caffeine,ohc
8. 分布式
- CAP理论
- BASE理论
8.1. 缓存
- 穿透,击穿,雪崩是什么,如何避免(随机过期时间,异步刷新,单线程回源)
8.2. 一致性协议
- raft协议原理
- Paxos 算法
- 如何解决脑裂问题
- 多主一致性协议 gossip 原理
8.3. 负载均衡
- 常见的负载均衡算法(轮询,加权轮询,哈希,一致性哈希)
- 一致性哈希
8.4 分布式锁
- 使用zk怎么实现分布式锁
- 使用redis怎么实现分布式锁
8.5. 分布式事务
- 2pc,3pc提交
8.6. 分布式会话
- 分布式 session 如何设计(集成redis)
8.7 分布式ID
8.8 Zookeeper
9. 开发相关
- 常见的设计模式有哪些?
- 单例模式的实现方式?
10. 微服务
11. 系统设计
11.1. 高并发
- 消息队列
- 读写分离
- 分库分表
- 负载均衡
11.2. 高可用
- 限流
- 降级
- 熔断
- 排队
12. 消息中间件
- Kafka是如何保证消息的有效性的?
- 使用 Kafka 的过程中有没有遇到过什么问题?如何解决?