八股文记录文档
目前读过的八股文记录
- 小林Coding 感觉是最全面最详细的,但有时候太过详细,反而不适合快速复习
- CSNotes 可能记录较早了,内容有点杂
- JavaGuide 内容较全面,但主要工作在Java上也许?
- Waking-UP 内容很精简,适合快速复习,讲述不够详细
场景问题
- 验证码一段时间只发限定次数
- redis 的ZSet保存每次发送验证码的时间,以时间排序,超时的弹出,弹出后如果还是达到了限定次数,那么说明不能在发送验证码了
计算机网络
场景问题
- 键入网络到网页显示
- 服务端出现大量TIME_WAIT
- 服务器端出现大量CLOSE_WAIT
- 已建立连接的客户端宕机
- 已建立连接的服务端进程崩溃
- HTTP KeepAlive 与 TCP KeepAlive
HTTP
TCP
因为很重要 所以推荐看小林Coding的
- 什么是TCP
- TCP与UDP的区别
- TCP三次握手
- TCP四次挥手
- TCP传输机制
- TCP保活机制
- TCP全连接队列与半连接队列
- TCP是面向字节流的
- MTU与MSS
IP
- DNS域名解析
- ARP
- ICMP
- 127.0.0.1、localhost、0.0.0.0的区别
网络架构
- 网络分层
- 杂项
- 网络层
- IP数据包格式
- 热门协议
- 地址解析协议ARP
- 网际控制报文协议ICMP: 下辖
ping
与Traceroute
- 网络地址转换NAT
- 路由选择协议: 下辖
RIP OSPF BGP
- ARQ协议
- 交换机和路由器的区别
- 应用层
操作系统
- 场景问题
- 硬件结构
- 内核
- 内存管理
- 进程管理
- 调度算法
- 文件系统
- 网络系统
- Linux
数据库原理
- 场景问题
- 索引
- 事务
- 锁
- 日志
- undo log
- redo log
- binlog
- 两阶段提交
- 一条更新语句下日志的记录
- Buffer Pool
- 查询性能优化
- 存储引擎
- 基本知识概念: 元组、候选码、范式等
- 其他
Redis
- 场景问题
- 数据类型
- 持久化
- 过期删除与内存淘汰
- 缓存
- 缓存雪崩
- 缓存击穿
- 缓存穿透
- 数据库与缓存的一致性
- 延迟双删
- 订阅binlog日志
- 常见的缓存读写策略
Golang
- 切片
- 切片的容量是怎样增长的: 1.18之后更新了容量变化策略
- 哈希表
- 哈希表的实现原理: 基本上看不懂就是了
- 扩容机制: 一样看不懂
- 遍历为什么是无序的
- float作为map的key隐患
- 边遍历边删除的隐患
- 接口
- iface和eface的区别: 看不懂,但感觉挺重要的,以后有时间看看
- 接口的构造过程: 算是iface的后续构造,上汇编了 看不懂
- 接口类型转换的原理: 同上,看不懂
- 标准库
- context: 建议看看 与秋招无关 但挺重要的
- context是什么
- context有什么作用: 一句话来说就是完成 goroutine 之间退出通知、元数据传递的功能。 内容很具有实践意义,仔细了解
- context.Value的查找过程
- context如何被取消: 讲的各种 context 的源码
- 反射: 有点少
- 什么是反射: 本质是程序在运行期间探知对象的类型信息和内存结构
- 什么情况下需要使用反射: 其实是在推荐不使用反射
- Go语言如何实现反射: 讲了反射接口的各函数作用,姑且算我能看懂的上限了?
TypeOf()
函数返回一个接口,这个接口定义了一系列方法,利用这些方法可以获取关于类型的所有信息ValueOf()
函数返回一个结构体变量,包含类型信息以及实际值。
- Go语言中反射有哪些应用
- reflect.DeepEqual
- 幼麟实验室视频讲解: 短短八分钟够看半小时的了
- context: 建议看看 与秋招无关 但挺重要的
- 锁
- Mutex锁的两种模式: 3个视频
- 编译
- 调度器
- goroutine与线程的区别
- Go Scheduler: 简单描述了一下GMP
- 垃圾回收
- 杂项
- GoWork的使用
- go modules
- 方法集
- 泛型: 本质上是编译阶段的代码生成
- channel: 底层结构
某些被遗忘的算法
- 栈
- 双指针
- 链表
- 在 O(1) 时间内删除链表节点
- 删除链表中重复的节点
- 复杂链表的复制: 随机指针那题,解法很巧妙
- 两个链表的第一个公共节点: 解法巧妙
- 数组
- 调整数组顺序使奇数位于偶数前面: 冒泡排序思想的应用
- 把数组排成最小的数: 依旧是排序,排序类型思想真忘得差不多了
- 逆序对: 归并排序
- 位运算
- 二进制中1的个数: 挺巧妙的
- 数组中只出现一次的数字: 位运算中的表达式
a & (-a)
是一种常见的技巧,用于提取整数a
的二进制表示中最低位的1
- 不用加减乘除做加法:
a ^ b
表示没有考虑进位的情况下两数的和,(a & b) << 1
就是进位。
- 数学
- 约瑟夫环/圆圈中最后剩下的数字
- 数字1的个数: 看我自己的提交记录,有一版的注释
- 其他
- 表示数值的字符串: 正则表达式