最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
- Spring全家桶(实战系列)
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
最后祝愿各位身体健康,顺利拿到心仪的offer!
vector ans; 存放每次的可行结
vector path; 记录每次的可行解
<3>:横向for循环 和 纵向的递归深度
for(int i = level; i <= n; i++)
我们单层的for循环是遍历我们所有的(1,2,3…)
纵向的递归:我们选择的是不断缩小的我们遍历的范围
<4>:递归终止条件
path.size() == n时,这时我们的一种可行结果(就是我们的一种安排作业的顺序 比如1,2,3或则2,1,3)
4:对上方的所有可行解求出最优解
5:图解
===================================================================
/**
分析题意:
题目是批量处理作业调度,那么我们可以得知,这是让我们完成一个作业之后再去完成另一个作业
思路:
1.姑且先给我们的作业边上序号 a,b,c三个作业,那么我们可以得知关于这三个作业的
的安排有6种方式,那么我们的问题就简单了,这是一个全排列问题
2.回归本题,我们知道了是全排列问题,我们可以通过回溯法穷举所有的可行解,然后在
根据可行解求出最优值
3.回溯版的全排列,其实这和分治法那个一样,都是递归求全排列,
<1>:递归函数的参数
backtecking(int n,vector &v)
int n:表示我们选择的是n个作业 从1,2,3…这样的序列我们来求取
vector &v:这里表示我们递归的时候记录哪些元素我们已经访问过
<2>:返回的结果
vector<vector > ans; 存放每次的可行结
vector path; 记录每次的可行解
<3>:横向for循环 和 纵向的递归深度
for(int i = level; i <= n; i++)
我们单层的for循环是遍历我们所有的(1,2,3…)
纵向的递归:我们选择的是不断缩小的我们遍历的范围
<4>:递归终止条件
path.size() == n时,这时我们的一种可行结果(就是我们的一种安排作业的顺序 比如1,2,3或则2,1,3)
4:对上方的所有可行解求出最优解
*/
#include<bits/stdc++.h>
using namespace std;
vector<vector > ans;
vector path;
void backtacking(int n,vector &v) {
//递归终止的条件
if(path.size() == n){
ans.push_back(path);
return;
}
for(int i = 1; i <= n; i++) {
if(v[i] == true) continue;
v[i] = true;
path.push_back(i);
backtacking(n,v);//这里的level+1代表的是我们每次的遍历范围在变小
path.pop_back();//当我们得到一种可行解的时候,因为我们要回溯求取其他的解,所以清理最后装进容器的元素
v[i] = false;
}
}
int main(){
int N;
vectorv1(100),v2(100);
vector v3(100,false);
vectorv4;//记录最后每种排列的所求时间和
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> v1[i];
}
for (int i = 1; i <= N; i++) {
cin >> v2[i];
}
//cout << v1[1] << ’ ’ << v1[2] << ’ ’ << v1[3];
backtacking(N,v3);
//cout << endl;
for (int i = 0; i < ans.size(); i++) {
int sumTime1 = 0;
int sumTime2 = 0;
int sumTime3 = 0;//记录一种排列最后的完成总时间
for (int j = 0; j < N; j++){
//cout << ans[i][j] << ’ '; // 1 2 3
int index = ans[i][j];
sumTime1 += v1[index];//这里计算在机器1上的完成时间
sumTime2 = sumTime1; //因为在机器二上的完成时间需要在机器1上完成后才可记录
sumTime2 += v2[index];//这里记录在机器2上的完成时间
sumTime3 += sumTime2;//记录所有作业的完成时间和
}
v4.push_back(sumTime3);
}
sort(v4.begin(),v4.end());
cout << v4[0];
}
最后
为什么我不完全主张自学?
①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
[外链图片转存中…(img-p62BXpC8-1715799270329)]
[外链图片转存中…(img-OfSqJ9mV-1715799270329)]