Skip to content

Commit a1492e1

Browse files
committed
2026-03-01 14:38
1 parent d36eba4 commit a1492e1

1 file changed

Lines changed: 59 additions & 41 deletions

File tree

src/p/interview-checklist/index.rst

Lines changed: 59 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
.. :nosearch:
44
5-
=================
6-
知识点 Check List
7-
=================
5+
========
6+
面试八股
7+
========
88

9-
:revise: 2021-08
10-
:revise: 2026-02
9+
:Revised At: 2021-08
10+
:Revised At: 2026-02
1111

1212
.. contents::
1313
:local:
@@ -159,21 +159,45 @@ UDP 的核心贡献:给 IP 层加了端口,让数据能区分不同的应用
159159
- IoT
160160
- ...
161161

162-
select、epoll、io_uring |_|
162+
select、epoll、io_uring |o|
163163
---------------------------
164164

165+
都是流行的 IO 多路复用接口。
166+
165167
:zhwiki:`Select_(Unix)`
166168
- 是个单独的系统调用
167-
- 复杂度 :math:`O(n)`
168-
- 连接数:`FD_SETSIZE = 8`
169+
170+
Pros
171+
- POSIX 兼容,跨平台
172+
173+
Cons
174+
- 获取活跃 fd 的方式是全量扫描,复杂度 :math:`O(n)`
175+
- 有最大 FD 限制(``FD_SETSIZE``),且 fs_set 每次都要全量拷贝到内核
169176

170177
:zhwiki:`Epoll`
171-
- 是个模块,由三个系统调用组成
172-
- 底层为红黑树,复杂度 :math:`O(log_n)`
173-
- 连接数:API 上无限制
174-
- 边沿触发(异步推荐)、状态触发
178+
由三个系统调用 ``epoll_create``、``epoll_ctl``、``epoll_wait`` 组成
179+
180+
Pros
181+
- 底层为红黑树,复杂度 :math:`O(log_n)`,仅返回活跃的 fd
182+
- 连接数:API 上无限制
183+
- 通过 mmap 共享内存
184+
- 边沿触发(异步推荐)、水平触发
185+
Cons
186+
- 不支持文件 IO
187+
- 做不到 syscall free,每个 fd 至少需要一次系统调用(``epoll_ctl``)
175188

176189
:enwiki:`Io_uring`
190+
由两个用户和内存共享的环形队列组成:提交队列(SQ)和完成队列(CQ),应用程序吧 IO 请求通过 SQ 提交,内核将处理好的结果放入 CQ。
191+
192+
三种模式:中断、内核轮询(SQ POLL)、IO 轮询
193+
194+
Pros
195+
- 几乎完全零拷贝
196+
- 支持批量提交
197+
- 只需要至多三次系统调用 |?| (mmap for )
198+
199+
Cons
200+
- 复杂
177201

178202
io_uring |_|
179203
------------
@@ -280,7 +304,7 @@ io_uring |_|
280304
Web
281305
---
282306

283-
HTTPS 原理 |_|
307+
HTTPS 原理 |o|
284308
~~~~~~~~~~~~~~
285309

286310
对称加密
@@ -309,13 +333,21 @@ Session 和 Cookie |_|
309333

310334
:URL: https://zhuanlan.zhihu.com/p/27669892
311335

312-
对无状态的 HTTP 协议的补充。
336+
对无状态的 HTTP 协议的补充。允许服务端将数据存储在客户端。
313337

314338
`Set-Cookie`_ 用来向客户端设置 Cookie,假如域名不能涵盖原始服务器的域名,那么应该被用户代理拒绝
315339

316340
.. _Set-Cookie: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie
317341

318-
Session 一般用 Cookie 存。
342+
Seesion 本地存在服务端,而将凭证(Seesion ID)等存在客户端的 Cookie 中。
343+
344+
浏览器禁用 Cookie
345+
可通过URL重写传递 Session ID。
346+
347+
分布式Session
348+
Session复制、Session Sticky、集中式Session存储(Redis)。
349+
350+
.. todo:: TODO
319351

320352
分布式
321353
======
@@ -325,6 +357,8 @@ Map-Reduce 概述 |_|
325357

326358
映射(可并行) -> 归纳
327359

360+
Split -> Map -> Shuffle -> Reduce。
361+
328362
分布式 ID 生成 |_|
329363
------------------
330364

@@ -336,7 +370,7 @@ UUID / 自己随机生成
336370
:pros: - 不依赖外部服务
337371
:cons: - 业务价值不大
338372
- 不利于储存和索引
339-
- 不能趋势递增
373+
- 不能趋势递增 |?|
340374

341375
单数据库自增 ID
342376
:pros: - 支持递增
@@ -392,6 +426,7 @@ CAP |_|
392426
—— :zhwiki:`CAP定理`
393427

394428
P(分区容错性)是说这个系统要允许分区?
429+
网络分区(P)是必然发生的,所以通常是在CP(如ZooKeeper,牺牲可用性)和AP(如Eureka,牺牲强一致性,保证最终一致)之间权衡。
395430

396431
分布式锁 |_|
397432
------------
@@ -420,7 +455,7 @@ P(分区容错性)是说这个系统要允许分区?
420455
- 公平的分布式锁实现:etcd
421456
- 环形队列/时间轮
422457

423-
一致性级别 |_|
458+
一致性级别 |o|
424459
--------------
425460

426461
:URL: https://zhuanlan.zhihu.com/p/86999794
@@ -607,7 +642,11 @@ MVCC
607642
服务重试
608643
--------
609644

610-
幂等性
645+
重试的前提是幂等。
646+
647+
幂等性:多次调用结果一致
648+
649+
重试策略:指数退避
611650

612651
限流器 |_|
613652
----------
@@ -874,6 +913,8 @@ Dive in to code
874913
:gcBgMarkStartWorkers: 为每个 P(线程上的本地调度器)启动一个 gcMarkWoker
875914
:gcDrain: Mark 阶段的标记代码主要实现
876915

916+
.. todo:: GreenTea
917+
877918
内存管理
878919
--------
879920

@@ -1163,11 +1204,6 @@ IO 虚拟化
11631204
2. QEMU用户态工具,它是一个普通的Linux进程,为客户机提供设备模拟的功能,包括模拟BIOS、PCI/PCIE总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过ioctl系统调用与内核态的KVM模块进行交互。
11641205
在KVM虚拟化架构下,每个客户机就是一个QEMU进程,在一个宿主机上有多少个虚拟机就会有多少个QEMU进程;客户机中的每一个虚拟CPU对应QEMU进程中的一个执行线程
11651206

1166-
libvirt
1167-
-------
1168-
1169-
是一套用于管理硬件虚拟化的开源API、守护进程与管理工具
1170-
11711207
流处理
11721208
======
11731209

@@ -1199,24 +1235,6 @@ PLER vs Flink
11991235
:allowLateNess: 延迟窗口关闭时间
12001236
:sideOutPut: 指定窗口已经彻底关闭后,就会把所有过期延迟数据放到侧输出流,让用户决定如何处理
12011237

1202-
算法
1203-
====
1204-
1205-
1206-
- 树的遍历 |_|
1207-
- 平衡树
1208-
- 二叉堆
1209-
1210-
动态规划
1211-
- 最长上升子序列 |_|
1212-
- 最长公共子序列 |_|
1213-
- 最长回文串 |_|
1214-
- 01 背包 |_|
1215-
1216-
.. rubric:: 脚注
1217-
1218-
.. [#] https://developer.aliyun.com/article/724399
1219-
12201238
For New Period
12211239
==============
12221240

0 commit comments

Comments
 (0)