本文主要讨论了操作系统的核心概念,包括悲观锁与乐观锁的机制与应用、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()在HashMap中的关键作用,决定键的定位与去重;介绍了HashMap的实现原理,包括哈希计算、初始容量、负载因子、JDK7的链表实现和JDK8的链表/红黑树实现以及扩容机制;定义了HashMap的特性(非同步、可存null、无序)和性能参数;简述了一致性哈希的环形映射及其在节点伸缩中的优势;指出Object作键时hashCode不可变;说明HashSet存储无序。

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

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