本文主要讨论了操作系统的核心概念,包括悲观锁与乐观锁的机制与应用、CAS算法在高并发中的作用、IO多路复用技术(select、poll、epoll)的实现与区别、域名解析的全过程、Linux网络配置及IP地址相关基础知识。重点分析了epoll的LT/ET模式原理及其O(1)查询效率,以及锁机制和IO模型如何提升系统并发性能与数据一致性。

Linux 内存管理核心在于将有限且不连续的物理内存抽象为虚拟地址空间,通过层级页表实现地址映射,并利用 TLB、页缓存、分区(ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM)和 NUMA 节点组织内存。大页可减小页表项、提升 TLB 命中率;内存回收、压缩(compaction)与 OOM killer 保障系统稳定。文件 I/O 常通过 page cache 加速,mmap 则把文件直接映射到进程虚拟地址,省去一次拷贝。段页机制演进为分页,使得进程拥有独立的 4 GB 虚拟空间(栈、堆、全局、常量、代码),实现地址隔离并提升内存利用率。整体上,虚拟内存提供隔离、共享和按需分页,解决了早期物理内存直接使用的安全与效率问题。

hashCode() 与 equals() 是 Java 哈希容器的核心,决定键在 HashMap 中的定位与冲突处理,错误实现会导致键误判为相等或查找错误。HashMap 以键值对存储,内部通过哈希函数计算键的 hash 值映射到数组桶,JDK 7 采用数组+链表(头插),JDK 8 在链表长度超过阈值后转为红黑树(尾插),容量为 2 的幂,受初始容量和 0.75 负载因子影响,超限会扩容。HashMap 非同步、键值均可为 null、无序。构造一致性哈希时先在 2³² 环上放置节点,再将数据键的哈希顺时针映射到最近节点,提升伸缩性。作为键的 Object 必须保持 hashCode 不变。HashSet 仅包装 HashMap,存储无序。

本文围绕树结构的常见面试考点展开,首先说明 TreeSet/TreeMap 以及 Collections.sort 在排序时均依赖元素实现 Comparable 的 compareTo 方法或外部提供 Comparator;随后给出 Student 类实现 Comparable 的示例及 TreeSet 去重、自然排序的运行结果。接着系统介绍二叉树的层序遍历实现(返回数组或列表、每层换行)、求树深度的递归与非递归两种写法,以及利用层次遍历求最大路径长度的思路。最后简要比较 B+ 树和 B‑ 树:前者内部节点不存数据、叶节点链式相连、查询复杂度固定为 O(log n)且适合外部存储;后者节点中键值共存、查询复杂度随键位置变化、区间查询不便。

本文展示了两种遍历实现:①二叉树Z字型层序遍历,利用队列逐层访问节点并通过布尔标记控制奇偶层的顺序,奇数层逆序后加入结果;②文件系统递归遍历,使用File类获取目录下的文件和子目录,若为文件则输出名称,若为目录则递归调用,实现对指定文件夹及其所有子文件夹的完整文件列举。