大家好,我是一个不愿透露学校名称的大四学生,你可以听着周杰伦的歌来读我这篇博客(如果你不知道听什么那么我推荐一首简单爱),这一步非常重要哦,我希望我的文章可以帮助到和我处于在同一起跑线的人,或者是比我的起跑线高但又很迷茫的人,经过这一次的秋招,让我有了很多的感悟。我会将我经历的事情逐一的讲述给大家,同时我希望大家在我之后的文章与我共同学习,一起收割offer!!
八股复习
相应八股知识点可以去ProcessOn中搜索我的模板(Java中的周杰伦)我这里复习的知识点那里都有,希望可以帮助到大家!!!!
Java集合
-
集合的层级问题(介绍一下集合)
-
HashMap的一系列问题
HashMap的底层数据结构?
HashMap线程安全问题?
HashMap在1.7和1.8中的区别?
为什么HashMap扩容要扩容2倍?
HashMap的扩容机制?
HashMap的put和get流程?
1.8中为什么要引入红黑树?
HashMap与HashTable的区别?
-
ArrayList和LinkedLis的相关问题
ArrayList与LinkedList的区别?
ArrayList的扩容机制?
使用for循环删除ArrayList当中元素会出现什么问题?
-
LinkedHashMap底层的数据结构?
-
comparable与comparator的区别?
-
LinkedHashSet和HashSet和TreeSet的区别以及底层数据结构?
算法
今天做了滴滴的笔试题
两道改编力扣的题
1. 最长递减子序列(对应力扣中的最长递增子序列)
public static int test(int[] arr){
int n=arr.length;
// dp数组定义为 当前位置的最长递减子序列的长度
int[] dp=new int[n];
// 初始化最短为自己也就是1
Arrays.fill(dp,1);
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
// 计算每个位置的最长递减子序列
if (arr[j]>arr[i]) {
dp[i]=Math.max(dp[i],dp[j]+1);
}
}
}
// 进行排序,返回最大值
Arrays.sort(dp);
return dp[n-1];
}
2. X星大学 (对应力扣中的1135)使用并查集进行求解的
我认为并查集很重要,我已经在笔试中碰到过很多次了,模板很简单主要还是在思想的使用上。
public class Test {
public static void main(String[] args) {
int[][] arr=new int[3][3];
arr[0][0]=1;
arr[0][1]=2;
arr[0][2]=50;
arr[1][0]=1;
arr[1][1]=3;
arr[1][2]=80;
arr[2][0]=2;
arr[2][1]=3;
arr[2][2]=70;
int i = test( arr,3);
System.out.println(i);
}
public static int test(int[][] arr,int n){
// 按照价格进行排序
Arrays.sort(arr,(a,b)->a[2]-b[2]);
int res=0;
UF uf = new UF(n);
for (int[] ints : arr) {
// 检验是否连通,如果没有连通将其进行连通
if (uf.find(ints[0])!=uf.find(ints[1])){
uf.union(ints[0],ints[1]);
res+=ints[2];
}
// 知道检测出一条路径可以连接所有点时退出
if (uf.count==1){
return res;
}
}
// 没有连通的
return -1;
}
}
class UF{
// 连通分量的个数
public int count;
// 存储每个节点的父节点
private int[] parent;
// 记录每棵树重量
private int[] size;
public UF(int count){
parent=new int[count+1];
size=new int[count+1];
for (int i = 0; i < count; i++) {
parent[i]=i;
size[i]=1;
}
this.count=count;
}
public int find(int x){
if (x != parent[x]){
parent[x]=find(parent[x]);
}
return parent[x];
}
public void union(int p,int q){
int p1=find(p);
int q1=find(q);
if (p1==q1){
return;
}
if (size[p1]>size[q1]){
parent[q1]=p1;
size[p1]+=size[q1];
}else {
parent[p1]=q1;
size[q1]+=size[p1];
}
count--;
}
public boolean connected(int x,int y){
int l=find(x);
int r=find(y);
return l==r;
}
}
结尾
如果你感觉写的不错,点个赞也是可以的。。。。
希望你的每一天都可以精彩,希望你的每一天可以让你更加精彩!
相应八股知识点可以去ProcessOn中搜索我的模板(Java中的周杰伦)我这里复习的知识点那里都有,希望可以帮助到大家!!!!
同时我模板里的java相关知识如果有不对的可以评论或者私信,大家一起进步!