五月七日
关于八股:今天计划推进完成JVM部分并进行小结,JVM作为JAVA编程中比较重要的一个模块,主要涉及到的知识点有如下模块:类加载、运行时内存区、执行引擎。其中类加载部分主要涉及到类的生命周期、类的加载方式、双亲委派等内容。运行时内存区细分可分为堆、栈、方法区、PC、本地方法栈。关于内存部分的内容主要涉及对象的内存分配、对象的创建与销毁,JVM访问对象主要有两种方式:句柄与直接指针。关于内存溢出与内存泄漏,对象的四种引用(强、软、弱、虚)此外就是主要关于堆的GC部分。GC主要考察GC的方法:标记清除、标记整理、标记复制。主要的垃圾回收器:Serial、ParNew、CMS、G1、ZGC。垃圾的判定:可达性算法,三色标记法用于垃圾回收时辅助,三色标记法会导致对象消失和漏标问题,漏标问题可以通过再次标记解决,对象消失问题主要有两个方向:动态插入、快照。CMS与G1采用了这两种方式。此外为JVM调优部分的实际运用部分,需要进行实操。
算法:
二叉树通过前序、中序、后序遍历数组进行构建。主要思路:将中序遍历的数组借助hashmap存储,用于定位根节点位置,使用前序(后序)数组做根节点,在中序中查找对应的index并将其分为左、中、右的格式,将问题拆解为子问题递归求解。
105. 106. 654.
二叉树的最近公共祖先问题:
模板:
1 | |
二叉树的最近公共祖先 236.
129. 257.
- 二叉树的右视图
使用DFS,右视图即要求最右侧的节点,遍历时先遍历右侧节点再遍历左侧,同时借助depth记录深度,同一深度将最右侧加入ans即可。