本文展示了两类遍历的实现示例。第一段给出二叉树的 Z 字型层序遍历算法,利用队列按层遍历并通过布尔标记控制奇偶层的顺序逆转,实现左右交替输出。第二段实现了文件系统的递归遍历,使用 `File.listFiles()` 获取目录内容,区分文件与子目录,对文件直接打印名称,对目录则递归调用,以遍历指定文件夹及其所有子文件夹中的所有文件。两段代码均突出遍历思路的核心要点。

本文围绕单向链表的典型面试题展开,首先介绍利用快慢指针判断链表是否成环的思路;随后指出在哈希桶中使用链表存储的缺点——查找慢且频繁插删性能低。接着给出奇数位升序、偶数位降序链表转为整体升序的解法:按奇偶位拆分为两链表、反转偶数链、再合并。随后展示复制含随机指针的链表的三遍遍历实现,以及最常见的单链表反转算法(遍历中逐节点翻转指针)。全文提供了对应的 Java 实现代码示例。

本文列举了若干常见的数组算法面试题及其实现思路。包括:① 将 N×N 矩阵顺时针旋转 90°,通过层层交换四边元素实现;② 在除一个元素外其余均成对出现的数组中找出唯一元素,使用异或运算;③ 求数组中任意一对和为给定 S 的数,利用哈希表在一次遍历中定位;④ 求连续子数组的最大和,采用 Kadane 算法在线性时间内完成;⑤ 查找数组前 K 大的数,采用快速选择(基于快排划分)实现。每个题目均给出对应的 Java 代码示例,突出考察点在数组的遍历、哈希、位运算和分治技巧。

文章展示了Java实现的冒泡排序并给出输出示例,列举常见排序算法(插入、交换、选择、归并、分配),简述归并排序的分治合并过程和堆排序的建堆、调整、排序步骤。随后说明在数据流中用最大堆和最小堆维护左右两侧数据,可在 O(log n) 插入、O(1) 获取中位数。最后简要介绍快速排序的左右指针划分与交换机制,并提及各算法的时间复杂度。

文章阐述了 JVM 内存的三大区域及其作用:堆(heap)存放所有对象实例,由程序员通过 new 创建,垃圾回收自动释放;栈(stack)为每个线程独有,仅保存基本类型变量和对象引用,由编译器自动分配回收,遵循后进先出;方法区/静态区(static area)与堆共享,保存类信息、static 变量和全局常量。对比堆栈,堆空间大、动态分配但访问慢,需手动申请;栈空间小、自动管理、访问快但生存期受限。通过示例说明了对象创建、引用存放及字符串常量池的不同存储方式。

PriorityQueue 是基于堆实现的无界队列,元素按自然顺序或提供的 Comparator 排序。它不接受 null,非线程安全,入队和出队的时间复杂度均为 O(log n)。