总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
具有性质:
- 深度为k的完全二叉树,至少有2(k-1)个节点,至多有2k-1个节点。
2)树高h=log2n + 1。
满二叉树
一棵深度为k,且有2^k-1个节点的树是满二叉树。
另一种定义:除了叶结点外每一个结点都有左右子叶且叶子结点都处在 最底层的二叉树。
这两种定义是等价的
性质:
- 如果一颗树深度为h,最大层数为k,且深度与最大层数相同,即k=h;
2)它的叶子数是: 2^(h-1)
-
第k层的结点数是: 2^(k-1)
-
总结点数是: 2^k-1 (2的k次方减一)
5)总节点数一定是奇数。
6)树高:h=log2(n+1)。
通俗的讲:满二叉树,就是每一个父节点都有两个叶子节点,每一层要不全是叶子节点,要不全是父节点(也即是说每一层都是满节点的)。二完全二叉树则是除了最后一层外,其他的层都是满的,最后一层的叶子节点可以不满,且最后一层的叶子节点从左到右,左边没满,右边不能有子节点(最后一层的叶子节点都靠左排列)。
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆的生序排序,小顶堆的降序排序。
代码实现:
import java.util.Arrays;
public class HeapSort {
public int[] sort(int[] sourceArray) throws Exception {
// 对 arr 进行拷贝,不改变参数内容
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
int len = arr.length;
buildMaxHeap(arr, len);//构建大顶堆
for (int i = len - 1; i > 0; i–) {
swap(arr, 0, i);//使得数组的最后一定为最大的数
len–;
heapify(arr, 0, len);//刷新大顶堆
}
return arr;
}
/**
-
构建大顶堆
-
@param arr 数据数组
-
@param len 数组长度
*/
private void buildMaxHeap(int[] arr, int len) {
//(int) Math.floor(len / 2) 向下取整,但是Math.floor()返回的类型是double,所以要强转成int
for (int i = (int) Math.floor(len / 2); i >= 0; i–) {
heapify(arr, i, len);
}
}
/**
-
使得父节点大于等于左右子节点
-
@param arr 数组
-
@param i 父节点位置
-
@param len 数组长度
*/
private void heapify(int[] arr, int i, int len) {
int left = 2 * i + 1; //左子节点位置
int right = 2 * i + 2;//右子节点位置
int largest = i;
if (left < len && arr[left] > arr[largest]) {
largest = left;//如果左子节点的值大于父节点位置的值,则替换largest
}
if (right < len && arr[right] > arr[largest]) {
largest = right;//如果右子节点的值大于父节点位置的值,则替换largest
}
if (largest != i) {
swap(arr, i, largest);//交换使得父节点的值比左右子节点的值都大。
最后
我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。
新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**