Contents

面试题目录

面试题目录

1. 数据结构

  1. 排序算法
  2. 链表和数组的区别?跳表的实现
  3. 二分查找的时间复杂度和优点?
  4. 哈希表,解决冲突的方式
  5. 二叉树和B+树
  6. 二个亿的无序整数,如何找到中间值

常见的编程题:链表反转、动态规划、二叉树遍历

2. 操作系统

  1. 进程与线程

  2. 进程间的通信方式

  3. 进程调度

  4. 死锁的条件与解除

  5. 僵尸进程是什么

  6. 用户态与内核态

3. Linux

  1. select 与 epoll 的区别
  2. fork的底层原理
  3. 查看文件中的100-200行,其中有error相关的附近日志
  4. top分析
  5. 查看端口占用
  6. 查看打开的文件
  7. tcpdump 抓包
  8. awk,grep的使用

4. 计算机网络

  1. 七层协议与tcp四层协议?五层协议

4.1. TCP

  1. tcp与udp的区别
  2. tcp的三次握手和四次挥手
  3. syn包丢了最多会重传多少次
  4. time_wait 的作用与危害,tcp_reuse 的机制
  5. TCP 如何确保可靠传输
  6. TCP 拥塞控制和流量控制
  7. TCP 的negla算法,如何解决粘包和半包(丢包?)问题
  8. TCP的链接保活计时器
  9. 基于UDP设计一个可靠的传输协议(参考quic)

4.2. HTTP

  1. 一次url访问会经过什么过程
  2. GET 和 POST 的区别,PUT 和 POST 的区别
  3. http 常见错误码
  4. http与https,https的原理
  5. session与cookie

5. 数据库

5.1. MySQL

  1. 常见的存储引擎有哪些,他们有什么区别
  2. 常见的索引实现方式,B+树索引,哈希索引他们分别适用什么场景
  3. Innodb 引擎的索引存储方式,聚簇索引与非聚簇索引
  4. 什么情况下索引不命中?MySQL 如何优化联合索引不满足最左规则的查询(索引下推)
  5. 一级索引与二级索引的查询方式,如何优化(覆盖索引)
  6. 如何优化慢查询(explain 分析)
  7. 事务的隔离级别
  8. innodb 引擎是如何解决RR级别下的幻读问题(mvcc,next-key)
  9. MySQL为什么RC级别下会出现不可重复度的问题,而RR不会(read View)
  10. 乐观锁与悲观锁
  11. mysql的锁机制(对索引加锁)(共享锁,排他锁,意向锁,gap锁)
  12. mysql如何保证事务的正确性(redolog,undo log)
  13. mysql是怎么保证数据持久,不丢失的(binlog)
  14. mysql主从复制的方式(同步复制,半同步复制,异步复制),如何解决主从延迟(多线程执行,组提交)
  15. MySQL 查询的IN和EXIST有什么区别?
  16. MySQL 死锁是如何形成的?MySQL是如何解决死锁问题的?

5.2. Redis

  1. 常见的数据类型(String, List, Hash, Set, Sort Set)
  2. 字符串类型是怎么实现(sds结构)
  3. hash 是怎么实现(渐进性hash)
  4. sort set 是怎么实现的(跳表)
  5. redis 实现分布式锁,实现可重入锁(lua,setnxex),如何解决宿主机宕机后,主从切换可能会导致同时有两个线程获取锁(红锁)
  6. redis实现乐观锁(Multi,watch,Exec)
  7. redis 持久化机制
  8. redis 主从复制(全量复制,增量复制,runid,复制缓冲区,复制偏移量)
  9. sentinel是如何做到高可用的(主观下线,客观下线,raft选主,主从切换)
  10. redis cluster是如何做到高可用的

6. Java

6.1. 基础

6.2. 多线程

  1. 什么是线程安全问题?
  2. 实现多线程的几种方式?
  3. 线程池的关闭方式有哪些?

7. 常用框架与第三方组件

7.1. Spring

  1. Spring AOP的实现原理
  2. spring IOC 的好处
  3. spring 用了什么设计模式
  4. Transaction 什么时候会生效?事务的实现原理是什么?
  5. spring mvc的controller参数是如何映射的?
  6. 多例注入的实现原理及其生命周期
  7. Spring 中的 Controller 注解是单例的还是多例的?会不会有并发问题?

7.2. SpringBoot

  1. 常用的SpringBoot的注解有哪些?

7.3 Mybatis

  1. Mybatis 的一级缓存和二级缓存
  2. Mybatis 插件的原理,用到了什么设计模式
  3. Mybatis 是怎么找到指定的mapper的

7.4. 本地缓存

  1. guava,caffeine,ohc

8. 分布式

  1. CAP理论
  2. BASE理论

8.1. 缓存

  1. 穿透,击穿,雪崩是什么,如何避免(随机过期时间,异步刷新,单线程回源)

8.2. 一致性协议

  1. raft协议原理
  2. Paxos 算法
  3. 如何解决脑裂问题
  4. 多主一致性协议 gossip 原理

8.3. 负载均衡

  1. 常见的负载均衡算法(轮询,加权轮询,哈希,一致性哈希)
  2. 一致性哈希

8.4 分布式锁

  1. 使用zk怎么实现分布式锁
  2. 使用redis怎么实现分布式锁

8.5. 分布式事务

  1. 2pc,3pc提交

8.6. 分布式会话

  1. 分布式 session 如何设计(集成redis)

8.7 分布式ID

8.8 Zookeeper

9. 开发相关

  1. 常见的设计模式有哪些?
  2. 单例模式的实现方式?

10. 微服务

11. 系统设计

11.1. 高并发

  1. 消息队列
  2. 读写分离
  3. 分库分表
  4. 负载均衡

11.2. 高可用

  1. 限流
  2. 降级
  3. 熔断
  4. 排队

12. 消息中间件

  1. Kafka是如何保证消息的有效性的?
  2. 使用 Kafka 的过程中有没有遇到过什么问题?如何解决?

13. 容器云