54 归档分页
370 留言互动
4 核心专题

最近更新

Java 2023-03-01

遍历

本文通过两个 Java 示例说明遍历的基本思想。第一个示例实现二叉树的 Z 字型层序遍历,利用队列逐层访问节点并通过布尔标记在奇偶层之间切换顺序,必要时对当前层结果进行反转。第二个示例演示文件系统的递归遍历,使用 `File` 类遍历指定目录,若遇文件直接输出名称,若遇子目录则递归调用以遍历其全部子文件,实现对整个文件夹及其子文件夹的完整遍历。两段代码均突出遍历的实现方式和常用技巧。

面经 阅读全文
Java 2023-03-01

链表

本文围绕单向链表的常见面试题展开,首先介绍使用快慢指针判断链表是否成环的原理;随后指出在哈希桶中使用链表存储会导致查找、插入、删除效率低下;接着给出奇数位升序、偶数位降序链表转为整体升序的思路——按奇偶位拆分为两链表、将偶数链表逆序再合并,并提供完整实现代码;随后展示 O(1) 额外空间的随机指针链表复制算法;最后给出标准的单链表反转实现。整体阐述了链表环检测、性能缺陷、排序合并、深拷贝及反转等关键技术要点。

面经 阅读全文
Java 2023-03-01

数组

本文介绍了几道常见的数组面试题及其核心思路:① 用层层交换实现二维矩阵顺时针旋转90°;② 利用全体异或找出唯一不成对的元素;③ 通过哈希表在 O(n) 时间内求和为 S 的两数下标;④ 使用 Kadane 算法求连续子数组最大和;⑤ 采用快排划分(或堆)实现前 K 大元素的快速查找。每个实现均给出关键代码示例。

面经 阅读全文
Java 2023-03-01

排序

本文先给出Java实现的冒泡排序代码示例,随后列出常见排序算法分类:插入、交换、选择、归并、分配等,并简要说明各子类。接着阐述归并排序的分治合并过程、堆排序通过构建大(小)顶堆并不断取堆顶的原理。再介绍在数据流中实时获取中位数的做法:使用最大堆保存左半部分、最小堆保存右半部分,插入为O(log n),取中位数为O(1)。最后给出快速排序的划分思路及双指针交换过程。

面经 阅读全文
Java 2023-03-01

堆与栈

文章阐述了 Java 内存划分:堆区存放对象实例,由所有线程共享,需通过 new 分配,由垃圾回收器回收;栈区为每线程私有,仅存基本类型值和对象引用,由编译器自动分配释放,访问速度快;方法区(静态区)存放类信息、static 与全局变量,同样共享。对比堆与栈:堆容量大、手动/GC 分配、访问相对慢;栈容量小、自动分配、后进先出、访问快。并通过字符串创建示例说明两者在实际使用中的差异。

面经 阅读全文
Java 2023-03-01

队列

Java PriorityQueue 是基于堆实现的无界队列,元素按自然顺序或自定义比较器排序。创建时可指定比较器,队列不接受 null 值。它不是线程安全的,入队和出队的时间复杂度均为 O(log n)。

面经 阅读全文