五月七日

关于八股:今天计划推进完成JVM部分并进行小结,JVM作为JAVA编程中比较重要的一个模块,主要涉及到的知识点有如下模块:类加载、运行时内存区、执行引擎。其中类加载部分主要涉及到类的生命周期、类的加载方式、双亲委派等内容。运行时内存区细分可分为堆、栈、方法区、PC、本地方法栈。关于内存部分的内容主要涉及对象的内存分配、对象的创建与销毁,JVM访问对象主要有两种方式:句柄与直接指针。关于内存溢出与内存泄漏,对象的四种引用(强、软、弱、虚)此外就是主要关于堆的GC部分。GC主要考察GC的方法:标记清除、标记整理、标记复制。主要的垃圾回收器:Serial、ParNew、CMS、G1、ZGC。垃圾的判定:可达性算法,三色标记法用于垃圾回收时辅助,三色标记法会导致对象消失和漏标问题,漏标问题可以通过再次标记解决,对象消失问题主要有两个方向:动态插入、快照。CMS与G1采用了这两种方式。此外为JVM调优部分的实际运用部分,需要进行实操。

算法:
二叉树通过前序、中序、后序遍历数组进行构建。主要思路:将中序遍历的数组借助hashmap存储,用于定位根节点位置,使用前序(后序)数组做根节点,在中序中查找对应的index并将其分为左、中、右的格式,将问题拆解为子问题递归求解。
105. 106. 654.

二叉树的最近公共祖先问题:
模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 定义:在以 root 为根的二叉树中寻找值为 val1 或 val2 的节点
TreeNode find(TreeNode root, int val1, int val2) {
// base case
if (root == null) {
return null;
}
// 前序位置,看看 root 是不是目标值
if (root.val == val1 || root.val == val2) {
return root;
}
// 去左右子树寻找
TreeNode left = find(root.left, val1, val2);
TreeNode right = find(root.right, val1, val2);

// 后序位置,已经知道左右子树是否存在目标值
return left != null ? left : right;
}

二叉树的最近公共祖先 236.
129. 257.

  1. 二叉树的右视图
    使用DFS,右视图即要求最右侧的节点,遍历时先遍历右侧节点再遍历左侧,同时借助depth记录深度,同一深度将最右侧加入ans即可。

五月七日
http://bloomivy.github.io/2025/05/07/五月七日/
作者
Bloom
发布于
2025年5月7日
许可协议