分享
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:
算法训练+高分宝典:
Spring Cloud+Docker微服务实战:
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
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);
}
}
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);
}
}
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);
}
}
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?>