当前位置: 首页 > news >正文

PAT(Basic Level) Practice(中文) 1015德才论

前言

※  PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习。

这道题用java解,我试了三种解法,不断优化,但始终是三个测试点通过、三个测试点超时。我把我的代码放在这里,做个参考吧。

1015 德才论 题目

    题目    

作者 CHEN, Li

单位 浙江大学

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”

现给出一批考生的德才分数,请根据司马光的理论给出录取排名。

输入格式:

输入第一行给出 3 个正整数,分别为:N(≤10^5),即考生总数;L(≥60),为录取最低分数线,即德分和才分均不低于 L 的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到优先录取线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于 H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线 L 的考生也按总分排序,但排在第三类考生之后。

随后 N 行,每行给出一位考生的信息,包括:准考证号 德分 才分,其中准考证号为 8 位整数,德才分为区间 [0, 100] 内的整数。数字间以空格分隔。

输出格式:

输出第一行首先给出达到最低分数线的考生人数 M,随后 M 行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。

输入样例:

14 60 80
10000001 64 90
10000002 90 60
10000011 85 80
10000003 85 80
10000004 80 85
10000005 82 77
10000006 83 76
10000007 90 78
10000008 75 79
10000009 59 90
10000010 88 45
10000012 80 100
10000013 90 99
10000014 66 60

输出样例:

12
10000013 90 99
10000012 80 100
10000003 85 80
10000011 85 80
10000004 80 85
10000007 90 78
10000006 83 76
10000005 82 77
10000002 90 60
10000014 66 60
10000008 75 79
10000001 64 90

 


代码    

我用java写了三种解法,测试结果都是三个测试点正确、三个测试点超时。研究半天也没搞明白到底为什么超时(难道是只能用C语言才不会超时?),发出来做个参考吧。

解法一  

用二维数组存储学生信息,同时用这个数组作为静态链表来排序(定义一个int作为头指针),最后打印时降序输出即可。代码如下。

/*
功能:根据规则对给定考生成绩进行排序并输出
实现思路:用数组存储每个考生的信息,并且用数组作为静态链表实现排序。
时间复杂度   空间复杂度
*/
import java.io.*;
class Main{public static void main(String[] args) throws IOException{//接收输入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] arr1 = br.readLine().split(" +");int n = Integer.parseInt(arr1[0]);    //考生总数int l = Integer.parseInt(arr1[1]);    //最低录取分数线int h = Integer.parseInt(arr1[2]);    //优秀录取线//在线排序int[][] a = new int[n][6];    //数组每一行代表一个考生,存储考号、德分、才分、总分、等级、链表序号int m = 0;            //录取总人数String[] b = new String[3];    //接收当前考生的信息int yi = -1;            //已录取学生排序链表中的第一名的角标for(int i=0;i<n;i++){        //在线处理每个考生的信息b = br.readLine().split(" +");    //接收当前考生的信息a[i][0] = Integer.parseInt(b[0]);        //将考生信息转为inta[i][1] = Integer.parseInt(b[1]);a[i][2] = Integer.parseInt(b[2]);a[i] = getGrade(a[i],l,h);    //调用函数填写总分及等级信息,排序地址初始化if(a[i][4]<5){                //若是第一~第四类考生m++;                        //则录取a = getSort(a,i,yi);           //调用函数填写链表地址信息if(a[i][5]==yi)            //判断是否要更新第一名的角标yi = i;}}//打印输出System.out.print(m);    //输出录取总人数if(m==0)    return;        //若是录取人数为0,则直接返回String stu = "";for(int i=yi;;i=a[i][5]){    //按数组静态链表的排序,以成绩降序输出stu = "\n" + a[i][0] + " " +a[i][1] + " " + a[i][2];System.out.print(stu);if(a[i][5]==-1)    //若是链表中录取的最后一名break;            //则跳出循环,停止打印}}private static int[] getGrade(int[] a,int l,int h){//功能:根据数组中学生成绩,填写总分及等级信息 。l是录取线,h是优秀线。a[3] = a[1] + a[2];    //计算总分a[5] = -1;             //排序地址信息初始化if(a[1]<l || a[2]<l){    //若德才有一项未达到录取线a[4] = 5;        //第五类考生,不予录取return a;}if(a[1]>=h && a[2]>=h){    //若德才均优秀a[4] = 1;        //第一类考生return a;}if(a[1]>=h){        //若德分优秀而才分不优秀a[4] = 2;        //第二类考生return a;}    if(a[1]>=a[2]){    //若德分不优秀,但德分≥才分a[4] = 3;        //第三类考生return a;}a[4] = 4;            //其它考生为第四类考生return a;}private static int[][] getSort(int[][] a,int t,int yi){//功能:对数组中指定学生的成绩(以数组静态链表方式)排序并返回数组//参数 a[][] 学生信息数组 ;t 待排序学生角标 ;yi 已排序的录取学生链表中第一名学生角标if(yi==-1)                    //如果链表中还没有学生return a;                   //则以待排序学生作为第一名,直接返回if(gradeCompare(a[t],a[yi])){        //如果待排序的学生是新的第一名a[t][5] = yi;                //待排序学生链接指向原先的第一名return a;}for(int i=yi,j=i;;i=a[i][5]){      //若链表中已经有至少一名学生,则正常进行排序if(gradeCompare(a[i],a[t])){    //若待排序学生成绩<当前对比学生成绩j=i;                            //用j记住当前对比学生角标if(a[i][5]==-1){                //若当前对比学生已经是最后一名a[i][5] = t;                    //将待排序学生插入到链表结尾break;                          //排序完毕,退出循环}}else{                          //若待排序学生成绩>当前对比学生成绩a[j][5] = t;                    //上一名的学生链接到待排序学生a[t][5] = i;                    //待排序学生链接到当前对比学生break;                            //排序完毕,退出循环}}  return a;}private static boolean gradeCompare(int[] a,int[] b){//功能:比较两个学生成绩,学生a是否排名比学生b更靠前if(a[4]<b[4])      //若a比b等级更高return true;if(a[4]>b[4])      //若a比b等级更低return false;//若ab等级相同if(a[3]>b[3])      //若总分a>breturn true;if(a[3]<b[3])      //若总分a<breturn false;//若ab总分相同if(a[1]>b[1])      //若德分a>breturn true;if(a[1]<b[1])      //若德分a<breturn false;//若ab德分相等   return (a[0]<b[0])?true:false;    //则按考号升序排序}
}

有三个测试点超时,考虑到有可能是我自己写的排序算法太慢导致超时,于是我就又写了一个算法。

解法二 

在接收学生信息时只存储不排序,打印时调用java的排序算法,在Arrays.sort()函数中传入一个Comparator匿名内部类(以便自定义排序规则)作为参数,实现排序,之后再降序打印输出。这个解法的一个缺点是要对包括未录取考生在内的所有考生进行排序,而解法一只对录取考生排序。解法二的测试结果仍然是有三个测试点超时。代码如下。

/*
功能:根据规则对给定考生成绩进行排序并输出
实现思路:用数组存储每个考生的信息,并在Arrays.sort()中传入一个Comparator匿名内部类作为参数,以实现排序。
时间复杂度   空间复杂度
*/
import java.io.*;
import java.util.*;
class Main{public static void main(String[] args) throws IOException{//接收输入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] arr1 = br.readLine().split(" +");int n = Integer.parseInt(arr1[0]);    //考生总数int l = Integer.parseInt(arr1[1]);    //最低录取分数线int h = Integer.parseInt(arr1[2]);    //优秀录取线//逐个接收考生信息Integer[][] a = new Integer[n][5];    //数组每一行代表一个考生,存储考号、德分、才分、总分、等级int m = 0;            //录取总人数String[] b = new String[3];    //接收当前考生的信息for(int i=0;i<n;i++){        //在线处理每个考生的信息b = br.readLine().split(" +");    //接收当前考生的信息for(int j=0;j<3;j++)a[i][j] = Integer.parseInt(b[j]);        //将考生信息转为int    a[i] = getGrade2(a[i],l,h);    //调用函数填写总分及等级信息if(a[i][4]<5){                //若是第一~第四类考生m++;                        //则录取}}//打印输出System.out.print(m);    //输出录取总人数if(m==0)    return;        //若是录取人数为0,则直接返回//调用java提供的数组排序Arrays.sort(a, new Comparator<Integer[]>() {    //new一个Comparator匿名内部类,重写compare方法public int compare(Integer[] b, Integer[] a) {if(a[4]<b[4])      //若a比b等级更高return 1;if(a[4]>b[4])      //若a比b等级更低return -1;//若ab等级相同if(a[3]>b[3])      //若总分a>breturn 1;if(a[3]<b[3])      //若总分a<breturn -1;//若ab总分相同if(a[1]>b[1])      //若德分a>breturn 1;if(a[1]<b[1])      //若德分a<breturn -1;//若ab德分相等   return (a[0]<b[0])?1:-1;    //则按考号升序排序}});//降序输出学生信息String stu = "";for(int i=0;i<m;i++){stu = "\n" + a[i][0] + " " +a[i][1] + " " + a[i][2];System.out.print(stu);}             }private static Integer[] getGrade2(Integer[] a,int l,int h){//功能:根据数组中学生成绩,填写总分及等级信息 。l是录取线,h是优秀线。a[3] = a[1] + a[2];    //计算总分if(a[1]<l || a[2]<l){    //若德才有一项未达到录取线a[4] = 5;        //第五类考生,不予录取return a;}if(a[1]>=h && a[2]>=h){    //若德才均优秀a[4] = 1;        //第一类考生return a;}if(a[1]>=h){        //若德分优秀而才分不优秀a[4] = 2;        //第二类考生return a;}    if(a[1]>=a[2]){    //若德分不优秀,但德分≥才分a[4] = 3;        //第三类考生return a;}a[4] = 4;            //其它考生为第四类考生return a;}
}    

解法三 

既然用java自带的排序算法也不行,那索性还是自己用数组做静态链表的排序吧。考虑到解法一中每个考生排序都要从第一类第一名开始比较,比较耗时,因此我又改进了一下,给四个类别分别设置一个本类别第一名的int角标作为指针。这样,每个考生在排序时只需从所属类别的第一名开始比较即可。此外,这个解法中我还把一些工具函数优化了一下。遗憾的是,测试结果仍然是三个点通过、三个点超时。

/*
功能:根据规则对给定考生成绩进行排序并输出
实现思路:用数组存储每个考生的信息,并且用数组作为静态链表实现排序。
时间复杂度   空间复杂度
*/
import java.io.*;
class Main{public static void main(String[] args) throws IOException{//接收基本信息输入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] arr1 = br.readLine().split(" +");int n = Integer.parseInt(arr1[0]);    //考生总数int l = Integer.parseInt(arr1[1]);    //最低录取分数线int h = Integer.parseInt(arr1[2]);    //优秀录取线//数组初始化int[][] a = new int[n][6];    //数组每一行代表一个考生,存储考号、德分、才分、总分、等级、链表序号int m = 0;            //录取总人数String[] b = new String[3];    //接收当前考生的信息Integer yi[] = new Integer[4];  //已录取学生排序链表中第一类至第四类的第一名的角标for(int i=0;i<4;i++){           //数组初始化为-1yi[i] = -1;}//在线处理 接收每个学生信息并排序存入数组中for(int i=0,temp=-1;i<n;i++){        //在线处理每个考生的信息b = br.readLine().split(" +");    //接收当前考生的信息a[i][0] = Integer.parseInt(b[0]);        //将考生信息转为inta[i][1] = Integer.parseInt(b[1]);a[i][2] = Integer.parseInt(b[2]);a[i] = getGrade(a[i],l,h);    //调用函数填写总分及等级信息,排序地址初始化if(a[i][4]!=5){                //若是第一~第四类考生m++;                        //则录取temp =a[i][4]-1;     //当前学生所属类别,从0开始计数,yi[temp]是所属类别第一名的角标a = getSort(a,i,yi[temp]);           //调用函数填写链表地址信息if(a[i][5]==yi[temp])            //判断是否要更新该生所属类别第一名的角标yi[temp] = i;}}//打印输出System.out.print(m);    //输出录取总人数if(m==0)    return;        //若是录取人数为0,则直接返回String stu = "";for(int j=0;j<4;j++){       //遍历四个学生类别if(yi[j]==-1)               //若当前类别没有学生continue;               //就继续下一个类别for(int i=yi[j];;i=a[i][5]){    //按数组静态链表的排序,以成绩降序输出stu = "\n" + a[i][0] + " " +a[i][1] + " " + a[i][2];System.out.print(stu);if(a[i][5]==-1)    //若是链表中录取的最后一名break;            //则跳出循环,停止本类别的打印}}   }private static int[] getGrade(int[] a,int l,int h){//功能:根据数组中学生成绩,填写总分及等级信息 。l是录取线,h是优秀线。if(a[1]<l || a[2]<l){    //若德才有一项未达到录取线a[4] = 5;        //第五类考生,不予录取return a;}a[5] = -1;             //对录取学生,排序地址信息初始化a[3] = a[1] + a[2];     //对录取学生,计算德才总分if(a[1]>=h){    //若德分优秀a[4] = (a[2]>=h)?1:2;   //若才分也优秀,则为第一类,否则为第二类return a;}a[4] = (a[1]>=a[2])?3:4;    //若德分不优秀,但德分≥才分,则为第三类,否则其它考生为第四类return a;}private static int[][] getSort(int[][] a,int t,int yi){//功能:对数组中指定学生的成绩(以数组静态链表方式)排序并返回数组//参数 a[][] 学生信息数组 ;t 待排序学生角标 ;yi 待排序学生所属类别的第一名学生角标if(yi==-1)                    //如果当前学生所属类别中还没有学生return a;                   //则以待排序学生作为第一名,直接返回if(gradeCompare(a[t],a[yi])){        //如果待排序的学生是新的第一名a[t][5] = yi;                //待排序学生链接指向原先的第一名return a;}for(int i=yi,j=i;;i=a[i][5]){      //若链表中已经有至少一名学生,则正常进行排序if(gradeCompare(a[i],a[t])){    //若待排序学生成绩<当前对比学生成绩j=i;                            //用j记住当前对比学生角标if(a[i][5]==-1){                //若当前对比学生已经是最后一名a[i][5] = t;                    //将待排序学生插入到链表结尾break;                          //排序完毕,退出循环}}else{                          //若待排序学生成绩>当前对比学生成绩a[j][5] = t;                    //上一名的学生链接到待排序学生(此时j是链表中上一名学生的角标)a[t][5] = i;                    //待排序学生链接到当前对比学生break;                            //排序完毕,退出循环}}  return a;}private static boolean gradeCompare(int[] a,int[] b){//功能:比较两个等级相等的学生成绩,学生a是否排名比学生b更靠前if(a[3]!=b[3])        //若总分不相等return (a[3]>b[3]);         //则返回总分比较结果if(a[1]!=b[1])              //若德分不相等return (a[1]>b[1]);         //则返回德分比较结果return (a[0]<b[0]);              //最后按考号升序排序}
}

结语

以上用java的三种解法都会超时,难道这道题必须用C语言才能不超时吗?也许可以根据考生成绩生成一个唯一的序号,再利用这个序号进行数组的快速排序?等试验了再回来更新吧。

相关文章:

PAT(Basic Level) Practice(中文) 1015德才论

前言 ※ PTA是 程序设计类实验辅助教学平台 &#xff0c;里边包含一些编程题目集以供练习。 这道题用java解&#xff0c;我试了三种解法&#xff0c;不断优化&#xff0c;但始终是三个测试点通过、三个测试点超时。我把我的代码放在这里&#xff0c;做个参考吧。 1015 德才…...

接口自动化测试的概述及流程梳理~

接下来开始学习接口自动化测试。 因为之前从来没接触过&#xff0c;所以先了解一些基础知识。 1.接口测试的概述 2.接口自动化测试流程。 接口测试概述 接口&#xff0c;又叫API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;&a…...

竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…...

虚拟货币(也称为加密货币或数字货币)的运作

虚拟币发展史 虚拟币的发展史可以追溯到20世纪末和21世纪初&#xff0c;以下是虚拟币的重要发展节点&#xff1a; 1998年&#xff1a;比特币白皮书的发布 比特币的概念最早由中本聪&#xff08;Satoshi Nakamoto&#xff09;在1998年提出&#xff0c;随后在2008年发布了一份名…...

N. Number Reduction

Problem - 1765N - Codeforces 发现如果是无前导0最小数那么在保证删除k个数时第1位是最小的&#xff0c;第二位一定是相对最小的&#xff0c;且答案第一位和第二位在原位置的间隔是小于等于还可以删除的位数的。 因此&#xff0c;对于原数字长度位n&#xff0c;要删除k&#…...

Java集合面试题

一、Java集合面试题 1.LinkedHashMap底层原理&#xff1f; HashMap是无序的&#xff0c;迭代HashMap所得到元素的顺序并不是它们最初放到HashMap的顺序&#xff0c;即不能保持它们的插入顺序。 LinkedHashMap继承于HashMap&#xff0c;是HashMap和LinkedList的融合体&#x…...

Python 编程基础 | 第三章-数据类型 | 3.5、列表

一、列表 1、创建列表 序列是Python中最基本的数据结构&#xff0c;Python有6个序列的内置类型&#xff0c;但最常见的是列表和元组。序列都可以进行的操作包括索引&#xff0c;切片&#xff0c;加&#xff0c;乘&#xff0c;检查成员。此外&#xff0c;Python已经内置确定序列…...

Spring Cloud Zuul 基本原理

Spring Cloud Zuul 底层是基于Servlet实现的&#xff0c;核心是通过一系列的ZuulFilter来完成请求的转发。 1、核心组件注册 1.1. EnableZuulProxy注解 启用Zuul作为微服务网关&#xff0c;需要在Application应用类加上EnableZuulProxy注解&#xff0c;而该注解核心是利用Im…...

QT实现TCP服务器客户端的实现

ser&#xff1a; widget.cpp&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xf…...

行为型设计模式——责任链模式

摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式&#xff08;Chain Of Responsibility&#xff09; 是一种行为设…...

window安装压缩版postgresql

环境&#xff1a; window 11 专业版postgresql-16.0-1-windows-x64-binaries.zip 一、下载 1.1 从官网下载 https://www.postgresql.org/download/windows/ 1.2 从百度网盘下载 链接&#xff1a;https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwddzyy 提取码&#…...

数组(数据结构)

优质博文&#xff1a;IT-BLOG-CN 一、简介 数组Array是一种线性表数据结构&#xff0c;它用一组连续的内存空间&#xff0c;存储一组具有相同类型的数据。 数组因具有连续的内存空间的特点&#xff0c;数据拥有非常高效率的“随机访问”&#xff0c;时间复杂度为O(1)。但因要保…...

C/C++ 二分查找面试算法题

1.二分查找&#xff08;有序数组&#xff09; https://blog.csdn.net/qq_63918780/article/details/122527681 1 #include <stdio.h>2 #include <string.h>3 4 int func(int *a,int j,int x)5 {6 int len j - 1,i 0,min;7 while(i<len)8 {9 …...

Linux基本指令(上)——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux啦&#xff01;&#xff01;&#xff01;主要是Linux的一些基本指令和Linux相关的基本概念&#xff08;系统层面&#xff09;&#xff0c;下面&#xff0c;让我们进入Linux的世界吧&#xff01;&#xff01;…...

XSS详解

XSS一些学习记录 XXS短标签、属性、事件、方法短标签属性事件函数弹窗函数一些对于绕过有用的函数一些函数使用payload收集 浏览器编码问题XML实体编码URL编码JS编码混合编码 一些绕过方法利用constructor原型污染链构造弹框空格绕过圆括号过滤绕过其他的一些绕过 参考 XXS短标…...

【图论】判环问题

&#xff08;未更新完、做到相关题再更新相关部分 文章目录 无向图判断有无环并输出环上点 无向图判断有无环并输出环上点 例题&#xff1a;H. Mad City 利用变种拓扑排序&#xff0c;先把度为1的点存入队中&#xff0c;每次取出队头&#xff0c;遍历邻接点&#xff0c;再将该…...

将3D MAX设计模型导入NX1988

将3D MAX设计模型导入NX1988 概述导入流程导出喜欢的模型对模型进行修改模型贴图 概述 一般家装设计都不会用NX之类的产品设计软件&#xff0c;也没有通用的文件格式可以互相转换&#xff0c;本文的目的是将从网上下载的一些设计较好的3D MAX模型导入到NX软件中借用&#xff0…...

操作系统原理实验三:页面调度算法程序

实验三&#xff1a;页面调度算法程序 课程名称&#xff1a;操作系统原理 项目名称&#xff1a;页面调度算法程序 实验&#xff08;实训&#xff09;类型&#xff1a;验证性实验 实验&#xff08;实训&#xff09;课时&#xff1a;2 [目的和要求] 目的&#xff1a; 加深对请…...

QT实现tcp服务器客户端

服务器.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xff0c;服务器已经成功进入监听状态…...

tcp拥塞控制原理

18.3 拥塞控制 我们在向对端发送数据时&#xff0c;并不是一股脑子任意发送&#xff0c;因为TCP建立连接后&#xff0c;就是建立了一根管道&#xff0c;这跟管道上&#xff0c;实际上有很多的工作设备&#xff0c;比如路由器和交换机等等&#xff0c;他们都会对接收到的TCP包进…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...