# 1. 进程与线程、协程与线程、异步与非阻塞、并发与并行的辨析如何一句话讲清? A 进程与线程共享地址空间,协程切换由内核抢占 B 进程是资源分配单位、线程是调度单位、协程是用户态轻量级执行单元;异步不等待结果、非阻塞不阻塞调用;并发是逻辑同时、并行是物理同时 ✓ 正确答案 C 并发与并行含义完全相同 D 异步与非阻塞是一回事
# 2. 同步/异步与阻塞/非阻塞的四象限组合在实际 API(NIO/AIO/协程)中的体现? A BIO 是同步阻塞,NIO 是同步非阻塞(需多路复用),AIO 是异步非阻塞,协程用同步写法封装非阻塞 IO ✓ 正确答案 B BIO 是非阻塞、NIO 是异步 C NIO 与 AIO 完全相同 D 协程是内核级线程
# 3. 中断(interrupt)与异常(exception)的区分,trap、fault、abort 三类异常的语义差异与典型例子如何? A 中断是同步的,异常是异步的 B 中断是外部异步事件,异常是内部同步事件;trap 主动可继续下一条、fault 可恢复并重试、abort 不可恢复 ✓ 正确答案 C 系统调用属于 fault D 缺页属于 abort
# 4. 中断与异常、内核态与用户态、系统调用与库函数的分层关系? A 系统调用是进入内核态的途径之一,库函数通常封装系统调用;用户态经 trap 切换内核态 ✓ 正确答案 B 库函数直接在内核态执行 C 系统调用与中断完全无关 D 用户态与内核态无权限差异
# 5. 共享内存与消息队列、管道与 Socket 的通信模型差异? A 管道是双向的 B 共享内存速度快但适合跨主机 C 共享内存是最快的 IPC,但需自行同步;消息队列基于内核消息链;管道单向字节流;Socket 适合跨网络 ✓ 正确答案 D Socket 只能用于单机
# 6. 字节序(大端/小端)与网络字节序,序列化时的常见坑? A 网络字节序是固定的小端 B x86 是小端,网络字节序为大端,跨平台序列化需统一字节序并避免直接拷贝原始内存 ✓ 正确答案 C 字节序只影响大端机器 D 序列化不需要考虑字节序
# 7. 并发(Concurrency)与并行(Parallelism)的区别,单核并发、多核并行的经典辨析题如何? A 单核既能并发也能并行 B 并发是逻辑上同时处理多任务,单核即可实现;并行是物理上同时执行,需多核 ✓ 正确答案 C 并发比并行需要更多核 D 并行不需要多核
# 8. 进程与线程、协程的关系,内核态线程 vs 用户态协程的切换成本与适用场景如何? A 协程切换比线程切换成本更高 B 协程是内核调度单位 C 协程可以替代线程实现多核并行 D 线程切换需进内核态成本高,协程切换在用户态成本低;协程适合高并发 IO 密集,计算密集并行仍用多线程 ✓ 正确答案
# 9. IO 多路复用与多线程阻塞 IO 的辨析,什么场景下多路复用更优,什么场景下多线程更简单? A 多线程阻塞 IO 适合海量长连接 B 多线程阻塞 IO 无线程数上限 C 多路复用模型更简单易调试 D 多路复用适合连接数多、空闲多的场景,多线程阻塞 IO 适合连接数少且逻辑简单的场景 ✓ 正确答案
# 10. 并发安全与原子性的辨析,为什么加锁不一定保证原子性(check-then-act),CAS 的 ABA 问题属于哪类? A check-then-act 是竞态根源,加锁不一定保证原子性;ABA 是 CAS 的比较时序问题,需版本号解决 ✓ 正确答案 B 加锁必然保证原子性 C ABA 问题与 CAS 无关 D 原子性只需互斥即可保证
# 11. 奇偶校验、校验和(checksum)、CRC 与海明码(Hamming code)在检错/纠错能力上的本质区别是什么,冗余位与码距如何决定能力上限,为什么以太网 FCS 选择 CRC-32 检错而 ECC 内存选择 SEC-DED 海明码纠错? A 奇偶校验能纠错 1 位 B 校验和能纠正任意错误 C CRC 检错能力强但需重传,海明码能纠错;码距决定检错/纠错上限,以太网用 CRC-32 检错、ECC 内存用 SEC-DED 海明码纠错 ✓ 正确答案 D 码距与检错能力无关
# 12. 软链接与硬链接、文件描述符与文件句柄的差异? A 硬链接是独立文件,可跨文件系统 B fd 与文件内容无关 C 软链接共享 inode D 软链接存目标路径、可跨文件系统并悬空;硬链接共享同一个 inode;fd 是打开的实例,与链接维度不同 ✓ 正确答案
# 13. 并发与并行、进程与线程的辨析? A 进程共享地址空间,线程相互隔离 B 并发等同于并行 C 并发是逻辑同时、并行是物理同时;进程是资源隔离单位、线程是进程内共享资源的执行单位,多线程在多核可并行 ✓ 正确答案 D 线程与进程同属资源隔离单位
# 14. 虚拟内存/物理内存/交换空间的区分? A 虚拟地址直接对应物理地址 B 虚拟内存是进程的逻辑地址空间,经页表映射到物理内存;swap 是磁盘后备区,内存不足时换出页,但访问慢 ✓ 正确答案 C swap 与物理内存速度相同 D 虚拟内存只能小于物理内存
# 15. 栈与堆的区别,内存布局、分配速度、生命周期与大小限制,为什么递归过深会栈溢出而大数组常在堆上? A 栈分配快、自动释放、大小有限;堆分配慢、手动管理、空间大;递归过深耗尽栈、大数组放堆 ✓ 正确答案 B 堆分配比栈快 C 栈空间无限大 D 大数组应优先放栈上
# 16. 强类型/弱类型与静态/动态类型,类型检查时机的两个维度如何组合,与运行时性能、重构安全的关系如何? A 静态类型在运行时检查类型 B 强/弱类型看隐式转换严格性,静态/动态看检查时机;静态类型编译期检查、性能好、重构安全,动态类型灵活但运行时才发现错误 ✓ 正确答案 C Java 是动态类型 D 弱类型不做任何类型转换
# 17. 值传递与引用传递的辨析,Java/C#/C++/Go 中的"引用"语义差异,为什么"一切皆引用"的说法不准确? A Java 对象参数是引用传递,重赋值会影响实参 B Java 全部是值传递(对象传的是引用值的拷贝),C++ 有真正引用传递,不同语言"引用"语义不同,"一切皆引用"说法不准确 ✓ 正确答案 C Go 的所有参数都是引用传递 D 值传递修改会影响实参
# 18. 会话(Session)与连接(Connection)的区别,TCP 连接、HTTP 会话与业务会话的生命周期与状态边界如何? A 连接与业务会话生命周期完全相同 B 一个业务会话只能在一个 TCP 连接上 C 连接是传输层通道(TCP 有状态机),HTTP 会话强调连接复用,业务会话是应用层状态、可跨连接,由业务逻辑决定生命周期 ✓ 正确答案 D 会话与连接无关
# 19. 用户态与内核态的切换,系统调用与陷阱如何触发? A 系统调用通过 trap 主动陷入内核态,需要保存/恢复现场并切换特权级,切换成本较高 ✓ 正确答案 B 系统调用在被动的用户态直接执行,无需切换 C 切换前后无需保存任何状态 D 系统调用与中断完全无关