C语言—控制语句
控制语句就是用来实现对流程的选择、循环、转向和返回等控制行为。
分支语句
if语句
基本结构
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
执行顺序:
如果表达式判断成立(即表达式为真),则执行语句块1;如果表达式判断不成立(即表达式为假),则执行语句块2。
例如:
如果下雨就打印 “with umbrella” ,如果不下雨就打印 “no umbrella” 。
#include <stdio.h> #include <stdlib.h>#define RAIN 0int main(int argc,char const * argv[]) {if(RAIN)printf("with umbrella\n");elseprintf("no nmbrella\n");return 0; }输入a和b两个整数,实现用较大的数减较小的数。
int a,b; scanf("%d%d",&a,&b); if(a>b)printf("%d\n",a-b); elseprintf("%d\n",b-a);以下程序的运行结果是(B)
int main() {unsigned int a;int b=-1;a=b;printf("%u",a);return 0; }A. -1 B. 65535 C. 32767 D. -32768
解析:
有符号数转换为无符号数就是该数的补码,即有符号数为正数时,转换为无符号数就是他本身;为负数时,转换为无符号数就是他的补码。
拓展:
同样字长的无符号数和有符号数之间相互转换的一般规则是:数值可能会变,但是位模式不变,如果转换的无符号数太大以至于超过了补码能够表示的范围,可能会得到该范围的最大值。
设有定义语句:
char c1=92,c2=92;
则以下表达式中值为零的是(A)
A. c1^c2 B. c1&c2 C. ~c2 D. c1|c2
如果a=1,b=2,则a | b的值为(D)
A. 0 B. 1 C. 2 D. 3
实现大小写字符转换
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {char c=getchar();if(c>'A'&&c<'Z')ch+=32;else if(c>'a'&&c<'z')ch-=32;else{printf("input error\n");return ;}putchar(c);putchar(10);return 0; }结合宏定义和三目运算实现求两个数的差
解析:在宏定义中定义了变量,在函数中不能出现同名变量
#include <stdio.h> #include <stdlib.h>/*三目运算结合宏*/ #define M 20 #define N 10 #define DIFF M>N?M-N:N-M/*三目运算结合宏函数*/ #define DIFF_FUN(a,b) a>b?a-b:b-aint main(int argc,char const *argv[]) {printf("%d\n",DIFF);printf("%d\n",DIFF_FUN(M,N)); //调用宏函数:M>N?M-N:N-Mreturn 0; }
分层结构
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
else
{
语句块3;
}
执行顺序:
先判断if后面的表达式1是否成立,如果成立(即结果为真)则执行语句块1,如果结果为假则继续判断else if里面的表达式2,如果表达式2成立则执行语句块2,如果结果为假,则执行else里面的语句块3。
例如:
判断两个数的大小关系。
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {int a,b;scanf("%d %d",&a,&b);if(a>b)printf("a>b\n");else if(a<b)printf("a<b\n");elseprintf("a=b\n");return 0; }从终端输入一个学生的成绩,来判断学生成绩的等级并打印出来,等级评判如下:
90-100为A;80-89为B;70-79为C;60-69为D;60分以下为不及格(打印sorry,you fail )
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {int score;scanf("%d",&score);if(score<=100&&score>=90)printf("A\n");else if(score>=80&&score<=89)printf("B\n");else if(score>=70&&score<=79)printf("C\n");else if(score>=60&&score<=69)printf("D\n");else if(score<=59)printf("sorry,you fail\n");elseprintf("input error\n");return 0; }
嵌套结构
if(表达式1)
{
if(表达式2)
{
语句块1;
}
else
{
语句块2;
}
}
else
{
语句块3;
}
执行顺序:
先判断if后面的表达式1,如果结果为真则判断嵌套的if后面的表达式2,如果表达式2结果为真 则执行语句块1,如果结果为假则执行语句块2,如果表达式1结果为假则执行语句块3。
从终端输入一个学生的成绩,来判断学生成绩的等级并打印出来,如果输入的不是int型数据则打印 “input error” ,等级评判如下:
90-100为A;80-89为B;70-79为C;60-69为D;60分以下为不及格(打印sorry,you fail )
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {int score;scanf("%d",&score);if(score>=0&&score<=100){if(score<=100&&score>=90)printf("A\n");else if(score>=80&&score<=89)printf("B\n");else if(score>=70&&score<=79)printf("C\n");else if(score>=60&&score<=69)printf("D\n");else if(score<=59)printf("sorry,you fail\n");}elseprintf("input error\n");return 0; }输入一个int类型的数据,如果大于0则打印大于0,并且再判断是否大于等于10,如果大于等于10则打印大于等于10,小于10则打印小于10,如果数据小于0则不打印任何东西。
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {int num=0;scanf("%d",&num);if(num>=0){printf("num>=0\n");if(num>=10){printf("num>=10");}elseprintf("num<10\n");}return 0; }
总结:
- 首先需要判断表达式是否成立 ,如果成立就执行if里面的语句块,否则执行else里面的语句块;
- if后面可以没有else,但是else前面必须有if,并且else必须紧跟着if后面,中间不能加任何语句;
- if和else下面语句块中如果只有一行语句则可以省略花括号。
switch…case语句
基本结构
switch(变量或表达式)
{
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
……
default:
语句块n+1;
}
执行顺序:
当switch后面括号中的变量或表达式与下面其中一个case后面的常量相符时,就执行相应case语句后面的语句块,并依次执行后面的case,直到遇到break语句跳出switch语句。如果变量或表达式与所有的case后面的常量都不相等,则执行default后面的语句块。
注意:
- switch后面的表达式不能是浮点型数据或字符串;
- case后面的break可以省略,但是省略后会从相符的case开始顺序执行,直到遇到break结束。
从终端输入一个学生的成绩,然后打印出来对应成绩的等级,要求用到switch…case结构编写,等级评判如下:
90-100为A;80-89为B;70-79为C;60-69为D;60分以下为不及格(打印sorry,you fail )
#include <stdio.h> #include <stdlib.h>int main(int argc,char char const * argv[]) {int score;scanf("%d",&score);switch(score/10){case 10:case 9:printf("A\n");break;case 8:printf("B\n");break;case 7:printf("C\n");break;case 6:printf("A\n");break;default:printf("sorry,you fail\n");break;}return 0; }从终端输入一个日期(年、月、日),判断这是这一年的第几天。
解析:
首先要先判断是闰年还是平年,闰年的二月份比平年的二月份多一天。普通年份除以4,有余数的是平年,没有余数的是闰年,对于整百的年份,要除以400,有余数的是平年,没有余数的是闰年。
方法一:
#include <stdio.h> #include <stdlib.h>int main(int argc, char const *argv[]) {int year, month, day, days = 0, leap = 0;scanf("%d %d %d", &year, &month, &day);if (year % 100 == 0){if (year % 400 == 0)leap = 1;elseleap = 0;}else{if (year % 4 == 0)leap = 1;elseleap = 0;}switch (month){case 1:days = day;break;case 2:days = 31 + day;break;case 3:days = 31 + 28 + leap + day;break;case 4:days = 31 + 28 + leap + 31 + day;break;case 5:days = 31 + 28 + leap + 31 + 30 + day;break;case 6:days = 31 + 28 + leap + 31 + 30 + 31 + day;break;case 7:days = 31 + 28 + leap + 31 + 30 + 31 + 30 + day;break;case 8:days = 31 + 28 + leap + 31 + 30 + 31 + 30 + 31 + day;break;case 9:days = 31 + 28 + leap + 31 + 30 + 31 + 30 + 31 + 31 + day;break;case 10:days = 31 + 28 + leap + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;break;case 11:days = 31 + 28 + leap + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;break;case 12:days = 31 + 28 + leap + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;break;default:printf("month err\n");break;}printf("%d\n",days);return 0; }方法二:
#include <stdio.h> #include <stdlib.h>int main() {int year = 0, month = 0, day = 0, days = 0, leap = 1;scanf("%d %d %d", &year, &month, &day);leap = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);switch (month){case 12:days += 30;case 11:days += 31;case 10:days += 30;case 9:days += 31;case 8:days += 31;case 7:days += 30;case 6:days += 31;case 5:days += 30;case 4:days += 31;case 3:days += 28 + leap;case 2:days += 31;case 1:days += day;break;default:printf("error!\n");break;}printf("%04d-%02d-%02d:这一年的第%d天\n", year, month, day, days);return 0; }
总结:
- 执行顺序:先判断switch()括号中的条件是否满足switch语句块里的case,如果满足哪个case则执行那个case里面的语句块,如果不满足则执行default中的默认语句块,并且如果case后面没有break会依次向下执行,直到遇到break后结束。
- 如果case后面的语句块和上一个case中的语句块相同,那么可以省略,形式如下:
case 常量1:
case 常量2:
语句块1;
break;
switch…case语句要遵循的规则:
- 只能针对基本数据类型的整型数据或字符型数据,如果要判断的条件是其他类型必须用if;
- case后面的标签必须是常量;
- case后面的标签必须是唯一表达式,不能有两个重复的case。
循环语句
for循环
基本结构
for(表达式1;表达式2;表达式3)
{
语句块;
}
说明:
表达式1:赋初值
表达式2:循环判断条件
表达式3:增值或减值
执行顺序:
首先执行表达式1进行赋初值,然后判断表达式2是否成立,如果成立就进入循环执行语句块,最后执行表达式3进行增值或者减值,再判断表达式2是否成立,如果成立就再次进入循环,直到判断表达式2不成立的时候退出循环。
例如:
求5的阶乘(5!)
int sum=1; for(int i=1;i<=5;i++)sum*=i; printf("%d\n",sum);
嵌套结构
for(表达式1;表达式2;表达式3)
{
for(表达式4;表达式5;表达式6)
{
语句块;
}
}
例如:
用for循环打印99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {for(int i=1;i<10;i++){for(int j=1;j<=i;j++)printf("%d*%d=%d ",j,i,i*j);printf("\n");}return 0; }
for循环变形
变形一
表达式1;
for(;表达式2;表达式3)
{
语句块;
}
变形二
表达式1;
for(;表达式2;)
{
语句块;
表达式3;
}
变形三
表达式1;
for(;;)
{
if(表达式2)
{
语句块;
表达式3;
}
else
{
break;
}
}
例题:
打印所有的水仙花数
水仙花数:三位数的百位立方+十位立方+个位立方=原数
#include <stdio.h> #include <stdlib.h>int main(int argc,char const argv[]) {int g,s,b,num;for(int i=100;i<1000;i++) {g=i%10;s=i/10%10;b=i/100;num=g*g*g+s*s*s+b*b*b;if(num==i)printf("%d\n",i);}return 0; }从终端输入行数,例如输入5,打印类似于下图的图形。
分析:
下半部分的行数和空格数关系表:
行数 i 空格数 = i-1 星星数 = 5 - i + 1 1 0 5 = 5 - 1 + 1 2 1 4 = 5 - 2 + 1 3 2 3 = 5 - 3 + 1 4 3 2 = 5 - 4 + 1 5 4 1 = 5 - 5 + 1 #include <stdio.h> #include <stdlib.h>int main(int argv,char const * argc[]) {int n;scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)printf("*");printf("\n");}for(int i=1;i<=n;i++){for(int j=1;j<i;j++)printf(" ");for(int k=1;k<=n-1+1;k++)printf("*");printf("\n");}return 0; }
while循环
基本结构
定义循环变量并赋初值;
while(判断条件)
{
语句块;
增值或减值语句;
}
执行顺序:
首先定义循环变量并赋初值,然后判断条件是否满足,如果满足则进入循环体系并进行增值或减值语句,然后再进行判断,如果满足则再次进入循环体系直到不满足条件就退出循环,类似于for循环的第二种变形。
例如:
用while循环求1到100的和
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {int i=1,sum=0;while(i<=100){sum+=i;i++;}printf("%d\n",sum);return 0; }
do…while循环
基本结构
do
{
语句块;
增值或减值语句;
}while(判断条件);
执行顺序:
先执行再判断。
用do…while循环求1到100的和
#include <stdio.h> #include <stdlib.h>int main(int argc,char const * argv[]) {int i=1,sum=0;do{sum+=i;i++;}while(i<=100);printf("%d\n",sum);return 0; }

上图中左边是do…while循环,右边是while循环
do…while和while的区别:
- 执行顺序不同:do…while先执行后判断,while先判断后执行。
- 执行次数不同:do…while至少执行一次,但是如果一开始满足判断条件则两者执行次数相同。
死循环
for(;;){}
while(1){}
while(1);
循环控制语句
break
break:直接结束循环,如果是嵌套的话是结束一层循环。
continue
continue:结束本次循环,继续下一次循环。
goto
goto:强制跳转到标签位置,可以用于多层嵌套循环(尽量不要使用goto)。
练习:
打印100-200中所有能被三整除的数
#include <stdio.h> #include <stdlib.h>int main(int argc, char const *argv[]) {int n;for(n=100;n<=200;n++){if(n%3!=0) continue;printf("%d ",n);}printf("\n");return 0; }练习:
从终端上循环输入一个字符并在终端上输出 这个字符,当输入的字符为 ' q ' 时,程序结束。
#include <stdio.h> #include <stdlib.h> int main() {char ch;while(1){scanf("%c",&ch);//getchar();if(ch=='\n')continue;if(ch=='q')break;printf("%c\n",ch);}return 0; }
死循环结束场景:
使用在循环语句中,为了结束循环在使用时需要加判断条件。
练习:
循环输入一个5位数,判断是不是回文数,当输入的数是0时循环结束,输入的数是回文数循环也结束。
解析:
12321是回文数,即个位与万位相同,十位与千位相同。
#include <stdio.h> #include <stdlib.h> {int n=0,g,s,b,q,w;while(1){scanf("%d",&n);g=n%10;s=n/10%10;b=n/100%10;q=n/1000%10;w=n/10000;if((g==w&&w!=0)&&q==s||n==0){printf("%d\n",n);break;}}return 0; }输入任意两个数,输出两个数之间(包括这两个数)各偶数之和。
解析:
从输入的较小的数开始依次加1判断是否为偶数,直到加到较大的数为止,每次都判断当前数是否是偶数,是则累加到sum中。
#include <stdio.h> #include <stdlib.h> int main() {int a,b,c,sum=0;scanf("%d %d",&a,&b);if(a>b){c=a;a=b;b=c}while(a<=b){if(a%2==0)sum+=a;a++;}printf("sum=%d\n",sum);return 0; }
相关文章:
C语言—控制语句
控制语句就是用来实现对流程的选择、循环、转向和返回等控制行为。 分支语句 if语句 基本结构 if(表达式) { 语句块1; } else { 语句块2; } 执行顺序: 如果表达式判断成立(即表达式为真),则执行语句块…...
三. TensorRT基础入门-ONNX注册算子的方法
目录 前言0. 简述1. 执行一下我们的python程序2.转换swin-tiny时候出现的不兼容op的例子3. 当出现导出onnx不成功的时候,我们需要考虑的事情4. unsupported asinh算子5. unsupported deformable conv算子总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战…...
01、什么是ip、协议、端口号知道吗?计算机网络通信的组成是什么?
声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!! 目录 前言 计算机网络 网络ip地址 网络协议 网络端口号 前言 最近有个项目要用到相关文章…...
答题套路2 阅读理解 说明文某个词是否能去掉
观点 回答:不能 解词 某个词什么意思需要解释一下 反证法 如果去掉了,会怎么样 总结 使用这个词体现了说明文的科学性,严谨性...
Pytorch图像分类模型模型实时在线验证代码
1.训练并保存自己的模型 保存的模型格式为:XXX.pth torch.save(model, "./weight/last.pth")if best_acc <(validation_acc / len_val):torch.save(model, "./weight/best.pth")2.转化为ONNX格式 2.1环境安装(window10&#x…...
Java高并发场景(银行转账问题)
最近面试问到了银行转账的高并发问题,回答的不是很理想,小编整理了下,题目大概如下: 有一张银行账号表(银行账号字段、金额字段),A账号要给B账号转账,A扣款,B收款&#x…...
TypeScript 工具类型
这些工具类型是 TypeScript 提供的强大功能,用于操作和转换类型。下面是每个工具类型的简要说明和示例: 1、Record let value: Record<string, any> { name: "", age: 0, desc: [] }; let value2: { [key: string]: any } { name: &…...
[Kotlin]创建一个私有包并使用
1.创建Kotlin测试项目 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置,完成设置。 2.创建Android Library模块 官方文档:创建 Android 库 | Android Studio | Android De…...
鸿蒙应用开发者高级认证指南及参考资料整理(含详细参考答案)
如何报名鸿蒙应用开发者高级认证 报名链接:点击这里进行报名。报名步骤: 点击上述链接进入报名页面。选择“立即报名”。在课程内容中找到“HarmonyOS应用开发者高级认证”,点击进入。点击“参加考试”,随后即可开始考试。考试注意事项 实名认证:考试前,请务必完成实名认…...
数据匿名化技术
不同的数据匿名化技术可用于多种行业,旨在从数据流中获取有用的见解,同时确保满足数据保护标准和法规的合规要求。 数据脱敏(Data Masking) 数据脱敏,又称数据漂白、数据去隐私化或数据变形,指的是对数据集…...
HTML学习笔记汇总
整理一些常见问题的Links,不定期更新。 Html生成自定义函数的图形(2024/5/10)-CSDN博客 HTML中插入图片(2024/5/10)-CSDN博客 Html给网页加icon图标_html icon-CSDN博客...
初始JSVMP
1.初始JSVMP JSVMP是"JavaScript Virtual Machine Protection"的缩写,是一种前端代码虚拟化保护技术。它的核心思想是在JavaScript代码保护过程中引入代码虚拟化,将目标代码转换成自定义的字节码,这些字节码只有特殊的解释器才能识…...
【机器学习数据可视化-04】Pyecharts数据可视化宝典
一、引言 在大数据和信息爆炸的时代,数据可视化成为了信息传递和展示的关键手段。通过直观的图表和图形,我们能够更好地理解数据,挖掘其背后的信息。Pyecharts,作为一款基于Python的数据可视化库,凭借其丰富的图表类型…...
通过 Java 操作 redis -- zset 有序集合基本命令
目录 使用命令 zadd,zrange 使用命令 zcard 使用命令 zrem 使用命令 zscore 使用命令 zrank 关于 redis zset 有序集合类型的相关命令推荐看Redis - Zset 有序集合 要想通过 Java 操作 redis,首先要连接上 redis 服务器,推荐看通过 Jav…...
力扣 516. 最长回文子序列 python AC
动态规划 class Solution:def longestPalindromeSubseq(self, s):size len(s)dp [[0] * size for _ in range(size)]for i in range(size):dp[i][i] 1for i in range(size - 1, -1, -1):for j in range(i 1, size):if s[i] s[j]:dp[i][j] dp[i 1][j - 1] 2else:dp[i][…...
数据库编程
PL/SQL程序 1.PL/SOL程序块 整个PL/SQL块分三部分:声明部分、执行部分、异常处理部分; 示例: declare --变量声明 v_sno varchar2(10) : ‘04001’; v_cno varchar2(10) :‘001’; v_grade number : 90; begin --程序入口 insert…...
(docker)进入容器后如何使用本机gpu
首次创建容器,不能直接使用本机gpu 在系统终端进行如下配置: 1.安装NVIDIA Container Toolkit 进入Nvidia官网Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation,安装NVIDIA Container Toolkit …...
java基础知识点总结2024版(8万字超详细整理)
java基础知识点总结2024版(超详细整理) 这里写目录标题 java基础知识点总结2024版(超详细整理)java语言的特点1.简单性2.面向对象3.分布式4.健壮性5.安全性6.体系结构中立7.可移植性8.解释性9.多线程10.动态性 初识java中的main方…...
vue中使用element的i18n语言转换(保姆式教程-保证能用)
话不多说,先看效果:预览地址: https://sandm00.github.io/i18n-switch/#/ 1、项目中需要使用的插件,vue2或vue3、element、vue-i18n、js-cookie、vuex我是在vue2中使用 npm i element-ui -S npm i js-cookie -S npm i vue-i18n8.28.2 //因为我项目使用…...
01 设计模式--单例模式
1. 单例模式 单例模式有两种实现方式: 1.1 饿汉模式(Eager Initialization):在类加载时就创建单例实例,无论是否需要使用该实例。 饿汉模式在类加载时就创建单例实例,无论是否需要使用该实例。 饿汉模式…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

