第四批复习总结-答案.md 5.9 KB

第四批复习总结 · 答案解析

⚠️ 做完 第四批复习总结.md 的全部 36 题后再翻开本文件对照。 每道题给答案 + 一句话解析,解析都指向对应主题页。


判断题(对/错 + 一句话理由)

  1. 。每个标签页是独立进程(独立地址空间隔离),不是线程;线程共享地址空间会一个崩全崩。→ 41.进程-vs-线程
  2. 。孤儿是"被 init 收养继续运行",不是被"回收清除";"回收"是僵尸的处理(父进程 wait 清 PCB)。→ 42.僵尸-孤儿-守护进程
  3. 。判断守护进程的关键是是否 setsid 脱离终端,跟父进程死不死无关;父进程活着也可以是守护进程。→ 42.僵尸-孤儿-守护进程
  4. 。Ctrl+Z+bg 只是作业管理(后台任务),进程还连着终端会话,会收到 SIGHUP;守护进程必须脱离控制终端。→ 42.僵尸-孤儿-守护进程
  5. 。拥塞控制只管速度,TCP 可靠是"尽力而为";网络崩溃/物理链路断/对方进程崩溃时 TCP 也无法保证。→ 43.TCP如何保证可靠传输
  6. 。"不可靠"指没有确认/重传机制,不是一定丢包;网络良好时 UDP 包很可能正常到达。→ 43.TCP如何保证可靠传输
  7. 。判重复靠序号(Seq);校验和(Checksum)只查数据完整性(传输中坏了没)。→ 43.TCP如何保证可靠传输
  8. 。C++ 中 struct 和 class 功能完全相同,都能放数据+方法;区别只是默认访问权限和默认继承方式。→ 44.C++-struct-vs-class
  9. 。struct 默认 public(a.x 可访问),class 默认 private(a.x 报错);只是关键字一换,权限就变。→ 44.C++-struct-vs-class
  10. 。同样的成员,struct 和 class 内存布局、对齐、大小完全一致,sizeof 无区别。→ 44.C++-struct-vs-class
  11. 。RAII = 栈对象自动析构,无论正常 return 还是异常栈展开(stack unwinding)析构都执行。→ 45.C++-构造析构
  12. 。移动是偷指针 + 原对象置空,O(1) 搬资源不复制数据;拷贝才复制整份数据(O(n))。→ 45.C++-构造析构
  13. 。声明了析构函数会抑制移动构造的隐式生成(拷贝构造仍会生成)。→ 45.C++-构造析构
  14. 。多核关中断只关当前核,其他核照样能改共享数据;多核要用自旋锁或原子操作。→ 46.SMP-多核
  15. (正好相反)。arr[0]arr[100] 间隔 400 字节 > 64 缓存行,绝不会伪共享;反而 arr[0]/arr[1](4 字节 < 64)会。→ 46.SMP-多核
  16. 。单核同一时刻只能执行一个线程(并发/时间片轮转);并行需要多核。→ 46.SMP-多核

填空题

  1. wait()/waitpid()——父进程不回收,子进程残留 PCB 成僵尸。→ 42.僵尸-孤儿-守护进程
  2. init(PID 1)——孤儿院,收养并等运行完再回收,不会变僵尸。→ 42.僵尸-孤儿-守护进程
  3. setsid()——创建新会话、成为 session leader、脱离控制终端。→ 42.僵尸-孤儿-守护进程
  4. 序号(Seq)/ 校验和(Checksum)——序号判重复乱序,校验和查损坏。→ 43.TCP如何保证可靠传输
  5. 滑动窗口 / 拥塞控制 / 最小——接收方能力 + 网络能力,两个窗口取最小值。→ 43.TCP如何保证可靠传输
  6. ACK——全双工半关闭:一方 FIN 只表示不再发,还能收,所以 ACK 和 FIN 分开。→ 43.TCP如何保证可靠传输
  7. public / private——struct 默认公开,class 默认私有。→ 44.C++-struct-vs-class
  8. public / private——继承方式也有默认差异。→ 44.C++-struct-vs-class
  9. ClassName&&——右值引用参数。→ 45.C++-构造析构
  10. 转移资源 / 原对象置空——转移后把原指针置 nullptr,防析构双重释放。→ 45.C++-构造析构
  11. 移动 / 拷贝——移动优先原则:默认走移动,移动不可用(=delete/未定义/非 noexcept)才拷贝。→ 45.C++-构造析构
  12. noexcept——移动可能抛异常时 vector 无法保证强异常安全,会回退用拷贝。→ 45.C++-构造析构
  13. 保证复制省略(Guaranteed Copy Elision)——return T(); 直接构造,C++11/14 不行。→ 45.C++-构造析构
  14. 自旋锁——多核临界区要忙等锁;关中断只关本核无效。→ 46.SMP-多核
  15. 小于——地址间隔 < 缓存行大小(64 字节)才可能伪共享。→ 46.SMP-多核

场景 / 代码判断

  1. 线程。要共享数据 + 轻快切换 → 线程(共享地址空间、切换只换寄存器/栈指针)。线程崩 = 进程崩:线程共享进程的地址空间和资源,一个线程写坏共享部分,整个进程资源跟着坏;进程有独立地址空间(隔离墙)。→ 41.进程-vs-线程
  2. 方案一signal(SIGCHLD, SIG_IGN) 忽略退出信号,内核自动回收;方案二双 fork——子进程再 fork 孙进程后自己立刻退出,孙进程变孤儿被 init 收养自动回收,父进程完全不用管。→ 42.僵尸-孤儿-守护进程
  3. UDP。视频直播可容忍少量丢包(丢几帧没关系),但不能容忍延迟;TCP 要确认/重传/握手,慢且可能卡顿。→ 43.TCP如何保证可靠传输
  4. unique_ptr 只移动不拷贝,vector 扩容时调用它的移动构造(偷走资源、原指针置空),安全;因为容器默认走移动。→ 45.C++-构造析构
  5. 不一定对count++ 是"读→改→写"三步,多核同时执行被切开:A 读 0、B 也读 0,都写 1,结果 1 不是 2(丢失更新/数据竞争)。必须用原子操作或锁。→ 46.SMP-多核

错题 > 3 道:回到对应主题页重学第 5 步变体验证。