Java最新【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT,高级Java开发面试解答

分享

首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:

(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)

其次分享一些技术知识,以截图形式分享一部分:

Tomcat架构解析:

算法训练+高分宝典:

Spring Cloud+Docker微服务实战:

最后分享一波面试资料:

切莫死记硬背,小心面试官直接让你出门右拐

1000道互联网Java面试题:

Java高级架构面试知识整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

System.out.println("一共调用: " + pageNum + “次”);

System.out.println(“缺页中断率:” + pageMissNum1.0/pageNum100 + “%” );

System.out.print(“淘汰页面:”);

for (Integer integer : stack) {

System.out.print(integer + " ");

}

return sb.toString();

}

public static void main(String[] args) {

FIFO fifo = new FIFO();

String s = fifo.fifoRun(3, “2 3 2 1 5 2 4 5 3 2 5 2”);

System.out.println(s);

}

}

LRU


package com.yusael.pagereplace;

import java.util.Stack;

public class LRU {

public int frameNum; // 分配给该作业的物理页框数

public Integer[] pageFrame; // 物理页框

public int pageNum; // 作业的页面走向总次数

public Integer[] pages; // 作业的页面走向

public Stack stack = new Stack<>(); // 存放淘汰页面的栈

public int pageMissNum = 0; // 缺页次数

public String lruRun(int frameNum, String inputPages) {

this.frameNum = frameNum; // 物理页框数

String[] split = inputPages.split(“\s+|,\s+|,\s+|,”);

this.pageNum = split.length; // 作业的页面走向总次数

pages = new Integer[pageNum]; // 作业的页面走向

for (int i = 0; i < pageNum; i++) {

this.pages[i] = Integer.parseInt(split[i]);

}

pageFrame = new Integer[frameNum]; // 物理页框

StringBuilder sb = new StringBuilder();

int count = 0;

while (count < pageNum) {

sb.append(“【第” + (count + 1) + “次】\n”);

boolean isMiss = true; // 判断本次是否缺页

boolean isEmpty = true; // 判断物理页框中是否有空位

boolean isExist = false; // 判断物理页框中是否存在本次页面走向

// 判断物理页框中是否已经存在本次页面走向

for (int i = 0; i < frameNum; i++) {

if (pages[count] == pageFrame[i]) {

isExist = true;

break;

}

}

// 若本次页面走向,物理页框中已存在,则直接进入下次页面走向

if (isExist == true){

sb.append(“本次页面走向,页框中已经存在!\n”);

sb.append(“目前物理页框中页面走向为:”);

for (Integer i : pageFrame) {

sb.append(i + " ");

}

sb.append(“\n---------------------------------------\n”);

count++;

continue;

}

// 判断物理页框有无空位

for (int i = 0 ; i < frameNum ; i++){

if (pageFrame[i] == null){

isEmpty = true;

break;

}else{

isEmpty = false;

}

}

// 本次页面走向,物理页框中不存在,且有空位,按顺序放入

if (isExist == false && isEmpty == true){

for (int i = 0; i < frameNum; i++) {

if (pageFrame[i] == null) { // 物理页框中有空位则放入

pageFrame[i] = pages[count];

break; // 从头开始找,找到一个空位即可

}

}

}

// 本次页面走向,物理页框中不存在,且物理页框中没有空位了

// 实现 LRU 算法

if (!isExist && !isEmpty){

for (int i = 0 ; i < frameNum ; i++){

if (pages[count-frameNum] == pageFrame[i]){

stack.push(pageFrame[i]); // 淘汰页面入栈

pageFrame[i] = pages[count];

}

}

}

if (isMiss == true){ // 计算缺页次数

pageMissNum++;

}

sb.append(“目前物理页框中页面走向为:”);

for (Integer i : pageFrame) {

sb.append(i + " ");

}

sb.append(“\n---------------------------------------\n”);

count++;

}

sb.append(“\n”);

return sb.toString();

/* System.out.println(“缺页次数:” + pageMissNum + “次”);

System.out.println("一共调用: " + pageNum + “次”);

System.out.println(“缺页中断率:” + pageMissNum1.0/pageNum100 + “%” );

System.out.print(“淘汰页面:”);

for (Integer integer : stack) {

System.out.print(integer + " ");

}*/

}

public static void main(String[] args) {

LRU lru = new LRU();

String s = lru.lruRun(3, “2 3 2 1 5 2 4 5 3 2 5 2”);

System.out.println(s);

}

}

OPT


package com.yusael.pagereplace;

import java.util.Stack;

public class OPT {

public int frameNum; // 分配给该作业的物理页框数

public Integer[] pageFrame; // 物理页框

public int pageNum; // 作业的页面走向总次数

public Integer[] pages; // 作业的页面走向

public Stack stack = new Stack<>(); // 存放淘汰页面的栈

public int pageMissNum = 0; // 缺页次数

public String optRun(int frameNum, String inputPages) {

this.frameNum = frameNum; // 物理页框数

String[] split = inputPages.split(“\s+|,\s+|,\s+|,”);

this.pageNum = split.length; // 作业的页面走向总次数

pages = new Integer[pageNum]; // 作业的页面走向

for (int i = 0; i < pageNum; i++) {

this.pages[i] = Integer.parseInt(split[i]);

}

pageFrame = new Integer[frameNum]; // 物理页框

StringBuilder sb = new StringBuilder();

int count = 0;

while (count < pageNum) {

sb.append(“【第” + (count + 1) + “次】\n”);

boolean isMiss = true; // 判断本次是否缺页

boolean isEmpty = true; // 判断物理页框中是否有空位

boolean isExist = false; // 判断物理页框中是否存在本次页面走向

// 判断物理页框中是否已经存在本次页面走向

for (int i = 0; i < this.frameNum; i++) {

if (pages[count] == pageFrame[i]) {

isExist = true;

break;

}

}

// 若本次页面走向,物理页框中已存在,则直接进入下次页面走向

if (isExist == true){

sb.append(“本次页面走向,页框中已经存在!\n”);

sb.append(“目前物理页框中页面走向为:”);

for (Integer i : pageFrame) {

sb.append(i + " ");

}

sb.append(“\n---------------------------------------\n”);

count++;

continue;

}

// 判断物理页框有无空位

for (int i = 0; i < this.frameNum; i++){

if (pageFrame[i] == null){

isEmpty = true;

break;

}else{

isEmpty = false;

}

}

// 本次页面走向,物理页框中不存在,且有空位,按顺序放入

if (isExist == false && isEmpty == true){

for (int i = 0; i < this.frameNum; i++) {

if (pageFrame[i] == null) { // 物理页框中有空位则放入

pageFrame[i] = pages[count];

break; // 从头开始找,找到一个空位即可

}

}

}

// 本次页面走向,物理页框中不存在,且物理页框中没有空位了

// 实现 OPT 算法

if (isExist == false && isEmpty == false){

boolean isExistEle = false; // 是否存在未来不再出现的元素

boolean isFound = false; // 是否找到未来下标的元素

int frameIndex = 0; // 记录的物理页框下标

Stack helpStack = new Stack<>(); // 辅助栈

// 寻找将来不再出现的,存在于当前物理页框中的元素

for (int i = 0; i < this.frameNum; i++){

for (int j = count; j < pageNum; j++){

if (pageFrame[i] == pages[j]){ // 若当前物理页框中,不存在未来不再出现的元素

helpStack.push(j); // 记录当前未来将遇见的下标

isFound = true; // 找到未来下标的元素

}

}

// 当前物理页框中,存在未来不再出现的元素

if (!isFound){

frameIndex = i; // 记录当前物理页框

isExistEle = true; // 存在未来不再出现的元素

break;

}

isFound = false;

}

/*for (Integer integer : helpStack) {

System.out.println(integer);

}

System.out.println("TEST " + frameIndex);

System.out.println("isExistEle " + isExistEle);

System.out.println("isFound " + isFound);*/

if(isExistEle){ // 存在未来不再出现的元素

stack.push(pageFrame[frameIndex]); // 淘汰页面入栈

pageFrame[frameIndex] = pages[count];

}else{ // 不存在未来不再出的元素

int t = 0;

for (Integer integer : helpStack) {

if(t < integer){

t = integer;

}

}

for (int i = 0; i < this.frameNum; i++){

if (pageFrame[i] == pages[t]){

stack.push(pageFrame[i]); // 淘汰页面入栈

pageFrame[i] = pages[count];

}

}

}

}

if (isMiss == true){ // 计算缺页次数

pageMissNum++;

}

sb.append(“目前物理页框中页面走向为:”);

for (Integer i : pageFrame) {

sb.append(i + " ");

}

sb.append(“\n---------------------------------------\n”);

count++;

}

sb.append(“\n”);

return sb.toString();

}

public static void main(String[] args) {

OPT opt = new OPT();

String s = opt.optRun(3, “2 3 2 1 5 2 4 5 3 2 5 2”);

System.out.println(s);

}

}

FXML界面


console.fxml:

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import javafx.scene.Cursor?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.Font?> <?import javafx.scene.text.Text?> []( )控制器 ---------------------------------------------------------------------- Controller.java: package com.yusael.controller; import com.yusael.pagereplace.FIFO; import com.yusael.pagereplace.LRU; import com.yusael.pagereplace.OPT; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.image.ImageView; import java.net.URL; import java.util.ResourceBundle; public class Controller implements Initializable { @FXML private TextField frameNum; @FXML private TextArea inputPages; @FXML private TextArea outputText; @FXML private Label loseCount; @FXML private Label callCount; @FXML private Label interupt; @FXML private Label ggPages; @FXML ### 最后 做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。 当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。 **更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务** ![](https://img-blog.csdnimg.cn/img_convert/4e502c2e1262082e7f0201cb4d284fde.webp?x-oss-process=image/format,png) ![](https://img-blog.csdnimg.cn/img_convert/eb3925e6c1071163eafd364a7eb49d3e.webp?x-oss-process=image/format,png) ![](https://img-blog.csdnimg.cn/img_convert/67677828415581f021c3c13070635107.webp?x-oss-process=image/format,png) ![](https://img-blog.csdnimg.cn/img_convert/65b4cdd5c52fdf3cfaf0a255901487a7.webp?x-oss-process=image/format,png) > **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录** **[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)** private TextArea inputPages; @FXML private TextArea outputText; @FXML private Label loseCount; @FXML private Label callCount; @FXML private Label interupt; @FXML private Label ggPages; @FXML ### 最后 做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。 当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。 **更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务** [外链图片转存中...(img-WgUJlPCl-1715419166894)] [外链图片转存中...(img-ZnJZq3Vx-1715419166894)] [外链图片转存中...(img-UklAKm5c-1715419166894)] [外链图片转存中...(img-7w5EvG4p-1715419166895)] > **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录** **[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值