先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
for(int i = 0; i < M; i++){
for(int j = 0; j < M; j++){
if(i == node[j].block){
cout << node[j].block << ’ ';
cout << node[j].page << endl;
}
}
}
}
void outResult(int address){
int pageNumber = address/N; //页号
int pageMigration = address%N; //页内偏移
stringstream st; //这是为了将int类型转换成 string 类型
st << pageNumber;
string str = st.str();
int temp1 = 0,temp2 = 0;
cout << “页号:”<< pageNumber <<" 页内偏移:" << pageMigration << endl;
//遍历内存的物理块中是否有该页号
for(int i = 0; i < M; i++){
if(node[i].page == str){
temp1 = 1;
}
if(node[i].page == “void”){ //统计有空闲的位置
temp2++;
}
}
//在内存的时候
if(temp1 == 1){
cnt++;
//这个时候因为块中已有该页 我们遍历整个结构体数组 找到 该页号 将新的优先级赋值给它
for(int i = 0; i < M; i++){
if(node[i].page == str){
node[i].priority = cnt;
}
}
sort(node,node+M,sort_priority);//按照优先级重新排序
printSate();
}
//不在内存的时候 ,且内存中还有空间
if(temp1 == 0 && temp2 > 0){
cout << “该页不在内存中,调入!” << endl;
//更新物理块中的页号状态
for(int i = 0; i < M; i++){
if(node[i].page == “void”){
node[i].page = str;
cnt++;
node[i].priority = cnt;
break;
}
}
sort(node,node+M,sort_priority);//按照优先级重新排序
printSate();
}
//当不在内存的时候,内存中没有空间
if(temp1 == 0 && temp2 == 0){
cout << “已无空闲物理块,置换!” << endl;
cnt++;
//这个时候就覆盖结构体数组当中的首个元素的 页号
node[0].page = str;
node[0].priority = cnt;
sort(node,node+M,sort_priority);//按照优先级重新排序
printSate();
}
}
int main(){
int logicAddress;
cin >> N >> M;
for(int i = 0; i < M; i++){
node[i].block = i;
node[i].page = “void”;
}
while(1){
cin >> logicAddress;
if(logicAddress != -1){
outResult(logicAddress);
}else{
break;
}
}
}
//1024 3
//1
//1056
//2096
//3175
//-1
===================================================================================
这个是显示运行时错误,我在其中用了优先队列,如果你看过我前面几篇博客的话,我在分支限界当中,用的也是优先队列,所以在做这道题的时候,考虑到优先级的问题,我就自然而然想到了用优先队列来做,但是我是万万没想到,用优先队列会出现运行时错误,查阅资料显示 优先队列有时会抛出异常,我觉得可能是这个原因。但还是记录错误码 毕竟也是劳动成果!!
/**
思路:
1.基本和上道题一样,但是我们在处理这个页面置换算法的时候用的是 LRU
最近最久未使用的思想进行置换页面
2.这个算法每次处理的置换页面号,我们依然用队列进行处理,但是我们要注意的是
我们在如果这个页号已经在内存中存在,那么就要就要将其
debug:解决运行时错误
1.将int类型转换成string类型没问题
2.[178781373];非结构体数组范围问题
3.最后一行有空行无问题 z
*/
#include<bits/stdc++.h>
using namespace std;
int N,M;//N代表页面大小 M代表物理块数
int cnt = 0;
struct Node{
int block; //块
string page; //页
int priority;//优先级
}node[100];
bool operator<(const Node& a,const Node& b){
return a.priority > b.priority;
}
priority_queueq;
void printSate(){
cout << “物理块号 页号” << endl;
for(int i = 0; i < M; i++){
cout << node[i].block << ’ ';
cout << node[i].page << endl;
}
}
void outResult(int address){
int pageNumber = address/N; //页号
int pageMigration = address%N; //页内偏移
stringstream st; //这是为了将int类型转换成 string 类型
st << pageNumber;
string str = st.str();
int temp1 = 0,temp2 = 0;
cout << “页号:”<< pageNumber <<" 页内偏移:" << pageMigration << endl;
//遍历内存的物理块中是否有该页号
for(int i = 0; i < M; i++){
if(node[i].page == str){
temp1 = 1;
}
if(node[i].page == “void”){ //统计有空闲的位置
temp2++;
}
}
//在内存的时候
if(temp1 == 1){
cnt++;
//这个时候因为块中已有该页 我们遍历整个结构体数组 找到 该页号 将新的优先级赋值给它
for(int i = 0; i < M; i++){
if(node[i].page == str){
node[i].priority = cnt;
}
}
// cout << “*****************” << endl;
// for(int i = 0; i < M; i++){
// cout << node[i].priority << endl;
// }
//
//更新node[i]中的优先级,因为这时候,优先队列中的结点的优先级是跟结构体中优先级是不一致的
for(int i = 0; i < M; i++){
Node node2 = q.top(); q.pop();
int num1 = node2.block;
int num2 = node2.priority;
for(int i = 0; i < M; i++){ //我们更新优先队列中的结点的优先级,同时当出现重复页号的时候,这时就要更新结构体中的块号所对应的优先级
if(num1 == node[i].block && node[i].page != str){//我们刚更新的页的优先级是 比不需要用队列中的优先级更新的,因为比队列中的优先级要高
node[i].priority = num2;
}
}
}
for(int i = 0; i < M; i++){
q.push(node[i]);
}
// cout << “********************” << endl;
// while(!q.empty()){
// Node node2 = q.top(); q.pop();
// cout << node2.block <<’ '<< node2.page <<" "<< node2.priority << endl;
// }
printSate();
}
//不在内存的时候 ,且内存中还有空间
if(temp1 == 0 && temp2 > 0){
cout << “该页不在内存中,调入!” << endl;
//更新物理块中的页号状态
for(int i = 0; i < M; i++){
if(node[i].page == “void”){
node[i].page = str;
cnt++;
node[i].priority = cnt;
q.push(node[i]);
break;
}
}
printSate();
}
//当不在内存的时候,内存中没有空间
if(temp1 == 0 && temp2 == 0){
cout << “已无空闲物理块,置换!” << endl;
Node newnode = q.top();
q.pop();
cnt++;
Node node1;
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
大厂面试场景
知识点总结
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
[外链图片转存中…(img-FaPnrtVG-1713613876686)]
大厂面试场景
[外链图片转存中…(img-g3xJ0nBG-1713613876687)]
知识点总结
[外链图片转存中…(img-qrZiHKUV-1713613876687)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-qQkeabXB-1713613876688)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!