进程切换需保存完整上下文并刷新TLB,涉及地址空间切换,开销大于仅切换寄存器和栈的线程切换。进程间通信方式包括匿名/有名管道、信号、消息队列、共享内存、信号量和Socket;管道用于亲缘进程的单向数据流,FIFO 通过文件名实现跨进程通信;信号在任意时刻向目标进程发送控制信息;消息队列在内核保存结构化消息,支持随机读取;共享内存提供直接读写的高速共享区,需配合信号量实现同步;信号量通过P/V操作控制资源访问,防止竞争。整体阐述了进程、线程资源差异及常用IPC与同步机制。

悲观锁在每次访问共享数据前都加锁,假设最坏情况会被修改;乐观锁不加锁,更新时通过版本号或CAS检查冲突。CAS(Compare‑And‑Swap)提供原子比较替换,常用于高并发计数。IO 多路复用让单线程监控多个描述符,select、poll 均为 O(n) 轮询,select 限制 1024 个 fd、poll 无上限但仍拷贝数组;epoll 采用红黑树和就绪队列,支持水平(LT)和边缘(ET)触发,查询为 O(1),对大规模连接效率最高。域名解析依次查浏览器缓存、系统缓存、本地域名服务器、根服务器、gTLD 服务器、权威 Name Server,最终返回 IP 并缓存。Linux 配置 IP 可用 ifconfig、setup 或编辑网卡配置文件,使用 dig 解析域名。IP 地址由网络号和主机号组成,子网掩码划分网络与主机,网关指向外部路由。

Linux 内存管理包括硬件层次(寄存器、CPU 缓存、主存、外存)和软件机制。通过虚拟内存把连续的虚拟地址映射到离散的物理页,使用多级页表、TLB 与大页降低转换开销。内核将页划分为 ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM 等区域,并在 NUMA 系统中按节点独立管理。Page cache 缓解磁盘 I/O,匿名内存、回收、compact 与 OOM killer 负责内存碎片与不足的处理。段页机制实现地址空间隔离,分页提供细粒度映射;mmap 直接把文件映射到进程虚拟地址,省去 page cache 的二次拷贝。整体目标是提高访问效率、实现进程隔离并在内存紧张时保证系统稳定。

IO模型分为阻塞、同步非阻塞、IO多路复用、信号驱动和异步IO,前四属同步,只有异步IO真正不阻塞线程。Linux软链接是独立inode指向目标路径,可跨文件系统;硬链接共享同一inode,仅限同一文件系统且不可链接目录。缺页中断在页表未命中时触发,操作系统按置换算法调页并恢复指令。硬中断由外设产生,随机且可屏蔽;软中断由内核在硬中断后调度,不可屏蔽且不依赖硬件。Copy‑On‑Write在fork时让父子进程共享页面,仅在写入时复制,提高创建效率。

hashCode() 与 equals() 决定键在 HashMap 中的定位与去重,若实现不当会导致冲突或误判相等,影响查找和存储的正确性。HashMap 以键值对存储,采用哈希函数将键映射到数组桶,JDK7 采用数组+链表(头插),JDK8 在链表过长时转为红黑树(尾插),容量默认 16,负载因子 0.75,扩容为 2 的幂次。HashMap 不是线程安全的,key、value 可为 null,映射无序。构造一致性哈希时在 2^32 环上放置节点和数据的哈希值,顺时针寻找最近节点,提升扩缩容时的命中率。作为键的 Object 必须保证 hashCode 不变。HashSet 存储无序。

本文围绕 Java 中的排序集合与树结构算法展开。说明 TreeSet、TreeMap 必须存放实现 Comparable 的元素,Collections.sort 既可依赖元素自身的 compareTo,也可通过外部 Comparator 实现自定义排序。随后给出 Student 类实现 Comparable 的示例及 TreeSet 的使用,展示去重与自然升序。接着介绍二叉树的常见操作:层序遍历输出每层节点(可返回数组或 List)、递归与非递归求树深度、利用队列实现层次遍历计高度、以及计算任意两节点间最长路径的递归思路。最后简要比较 B+ 树和 B‑树:前者内部节点不存数据、叶节点链表化、查询复杂度固定为 log n,适合外部存储和区间查询;后者键值同存、查询复杂度随键位置变化。