嵌入式开发学习(阶段二 C语言基础)
C语言:第05天笔记
内容提要
- 分支结构
- 条件判断
- 用if语句实现分支结构
- 用switch语句实现分支结构
分支结构
条件判断
条件判断:根据某个条件成立与否,决定是否执行指定的操作。
条件判断的结果是逻辑值,也就是布尔类型值,其结果为真(非0)或者假(0)
面试题:
①C语言中,条件表达式(作为分支或者循环条件的表达式称之为条件表达式)
支持任意类型的表达式,包括如关系、逻辑、赋值、算术等表达式,但实质上有意义的表达式只有关系表达式和逻辑表达式。
②C语言中,条件表达式的结果是逻辑值,使用非0表示真,使用0表示假,但是底层是使用1和0来表示真假。
关系运算符及其表达式
问题抛出
我们在程序设计往往会遇到问题如下面的函数的计算:
也就是我们必须通过一个条件的结果来选择下一步的操作,算上属于一个分支结构,C语言实现分支结构主要使用if语句。
其中的条件需要用关系表达式来表示:x!=0 就是一种关系表达式。
关系运算符及其优先级次序
关系运算符是用来进行比较符号,C语言提供了6中关系运算符
举例:
int a = 5, b = 6;
printf("%d\n", a > 5 != b > 5); // 解释:a > 5结果和b > 5的结果进行比较
关系表达式
关系表达式=关系运算符+表达式(操作数)
逻辑运算符及其表达式
问题抛出
有时,只用一个简单的关系表达式无法完整的表示一个条件:
y = { 1 x + 1 a 当 x ≠ 0 , a ≠ 0 时 10000 其他 y = \begin{cases} \frac{1}{x} + \frac{1}{a} & \text{当 } x \neq 0, a \neq 0 \text{ 时} \\ 10000 & \text{其他} \end{cases} y={x1+a110000当 x=0,a=0 时其他
其中的条件需要用逻辑表达式:x!=0 && a!=0 就是一种逻辑表达式。
逻辑运算及其优先级
- 逻辑算术符构成成复杂复合的运算符。
C语言中提供了三种逻辑运算符:
符号 | 名称 | 分类 | 说明 |
---|---|---|---|
&& | 逻辑与 | 双目运算符 | 两个量都为真时为真(1),否则为假(0) |
|| | 逻辑或 | 双目运算符 | 两个量中只要有一个为真即为真(1),只有两个量都为假时才为 假(0) |
! | 逻辑非 | 单目运算符 | 运算量真时变为假(0),假时变为真(1) |
逻辑表达式
a | b | !a | !b | a&&b | a||b |
---|---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 | 0 |
**定义:**用逻辑运算符将关系表达式或者关系表达式或者逻辑表达式链接起来的构成有意义的算式称作逻辑表达式。
逻辑表达式各种优先级顺序如下:
①!(逻辑非)
②算数运算符(
*、/、%、、+、-
)③关系运算符(
\>、>=、<、<=
>==、!=
)④逻辑与逻辑或(
&&、||
)⑤赋值运算符(
=、+=、-=、*=、/=、%=
)
C编译系统在表示逻辑运算符结果时,返回也是逻辑值,用1表示真,用0表示假。
案例
假设a=4,b=5则;
表达式 | 结果 | 说明 |
---|---|---|
!a | 0 | 这里是对非0取反 |
a&&b | 1 | &&两边都是非0 |
a||b | 1 | ||左边是非0,触发短路效果 |
!a||b | 1 | ||右边是非0 |
4&&0||2 | 1 | 同级 |
小贴士:
实际上,逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0,而且也可以是字符型、实型和指针型等。系统最终是以0和非0来判定他们的真假的,例如:
‘c’ &&'d’结果为1
用if语句实现分支结构
单分支:if
概念
语法:
if(条件表达式)
{语法;
}//如果是单语句,可以省略{},以下两种写法完全等价
if(条件表达式) 语句;if (条件表达式)语句;
流程图;
功能;
- 若表达式为真(非0),则执行表达式后面的语句,执行完该语句后继续执行if语句后其他语句。
- 若表达式值为假(0),则吧执行表达式后面的语句,执行if语句后面的其他的语句。
说明:
- 如果表达式后面是复合语句(语句超过1条),则需要使用一对
{}
括起来。
案例:
-
需求:计算并输出下列分段函数的值。
-
流程图:
-
代码:
/*************************************************************************> File Name: demo02.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 10时48分57秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[]) {//创建2个变量,存储数据int x, y = -2;//printf("请输入一个整数:");scanf("%d",&x);//判断if (x >=0 ){y=2;}printf("x=%d,y=%d\n",x,y);return 0; }
-
运行结果:
案例:
-
需求:有ab,c三个数,要求从控制台输入,并求出它们中最大数和最小数。
-
分析:
①首先创建5个变量,其中a,b,c用来接收控制台输入,max和min分别用来存储最大和最小
②默认a是max和min
③让max分别和b、c比较,如果b、c比max大,就将b、c的值赋值给max
④计分别和b、c比较,如果b、c比max大,就将b、c的值赋值给max
-
代码
/*************************************************************************> File Name: demo03.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 11时00分10秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[]) {//创建5个变量,a,b,c用来接收控制台输入,max和minint a,b,c,max,min;//控制台输入printf("请输入三个整数");scanf("%d%d%d",&a,&b,&c);//最大值max = min = a;if(max < b) max = b;// b是a,b中的最大值if(max < c) max = c;// c是a,b,c中的最大值//最小值if(min > b) min = b;if(min > c) min = c;printf("min=%d,max=%d\n",min,max);return 0; }
-
运行结果
-
有可能产生的问题:
- 在变量赋值前使用变量,导致运行结果错误,因为变量未在赋值之前,系统会给变量分配随机 值。
小贴士:
建议的书写规范:
if(flag == 1) 建议写做:f(flag)
if(flag == 0) 建议写做:if(!flag)
双分支:if…else
语法:
if()
{语句1;
}
else
{语句2;
}//如果是单语句,可以省略{}以下两种写法完全等价
if (条件表达式)语法1;
else 语句2;if (条件表达式)语句1;
else语句2;
注意:else语句本身不能单独存在,必须和距离自己最近的未配对的if配对。
流程图:
功能:
若表达式的值为1,则执行语句1;否则执行语句2。不管条件表达式成不成立,都要执行一个语句,其次需要注意的是,语句1和雨具都可以是单语句或者复合语句。
说明:
if.else.结构可以实现双分支选择结构。C语言允许if.else.结构嵌套。即在语句1与语句2中又可以包含完整的if语句或者if.else.语句,并且这种嵌套可以多层(为了保证程序的执行效率,建议不超过3~4层)。利用if.else.结构的嵌套,可以实现多分支结构。
案例:
-
需求:计算输出下列分段函数的值:
-
流程图
-
代码:
/*************************************************************************> File Name: demo04.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 11时13分32秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
{//创建两个变量,用来存放数据int x, y;//通过控制台给x赋值printf("请输入一个整数:");scanf("%d",&x);//根据条件赋值if (x < 0) y = 2;else y = -2;printf("x=%d,y=%d\n",x,y);return 0;
}
- 运行结果:
案例
-
需求:通过控制台,输入一个年份,判断这个年份是闰年还是平年
-
分析:
- 判断条件:(year % 4 == 0 && year % 100 !=0 || year % 400 == 0)
-
代码:
/*************************************************************************> File Name: demo05.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 11时44分18秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[]) {int year;printf("请输入一个年份:");scanf("%d",&year);if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)printf("%d是闰年\n",year);elseprintf("%d是平年\n",year);return 0; }
-
运行结果
-
注意:对于单语句的双分支,我们可以使用三目运算符的写法来简化!
双分支:三目运算符
三目运算符,又被称作三元运算符。
语法:
表达式1?表达式2:表达式3;
说明:
① 如果表达式1的结果为真,就执行表达式2,否则执行表达式3。(表达式2和表达式3只能满 足一个)
② 三目运算符的写法实际上就是单语句的双分支if的简写
案例
- 需求:将双分支案例改造为三目运算符的写法
- 代码:
/*************************************************************************> File Name: demo04.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 11时13分32秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
{//创建两个变量,用来存放数据int x, y;//通过控制台给x赋值printf("请输入一个整数:");scanf("%d",&x);//根据条件赋值y = x < 0 ? -2 : 2;printf("x=%d,y=%d\n",x,y);return 0;
}
案例
- 需求通过控制台输入a,b,c三个数,求最大值
- 代码
/*************************************************************************> File Name: demo06.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 14时26分44秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
{int a,b,c,max;printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);max=a > b ?(a > c ? a : c):(b > c ? b : c);printf("最大值为:%d\n",max);return 0;
}
- 运行结果
。
多分支:if …else if…else…
语法;
//写法1;嵌套if..else..(不推荐)
if (表达式1) 语法1;
elseif (表达式2) 语法2;
else....//写法2;并列 if..else..(推荐)
if (表达式1) 语句1;
else if (表达式2) 语句2;
...
else if (表达式n) 语句n;
else 语句 n+1;
注意:多分支的else是可选的,根据自己的需求决定要不要写。
流程图:
注意;多分支中同一时刻只能满足一个分支
if (){}
if (){}//都有可能执行if(){}
else if(){}//两者只能执行一个
案例
-
需求:根据学生的成绩,对学生进行评级;
- 学生成绩 >=90 A
- 学生成绩 >=80 B
- 学生成绩 >=70 C
- 学生成绩 >=60 D
- 学生成绩 <60 F
-
代码
/*************************************************************************> File Name: demo08.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 15时02分32秒************************************************************************/#include <stdio.h>int textscore1()
{int score;printf("请输入您的成绩:");scanf("%d",&score);if (score < 0 || score >100)printf("成绩错误\n");else if(score >= 90 ) printf("您的成绩为A级\n");else if(score >= 80 ) printf("您的成绩为B级\n");else if(score >= 70 ) printf("您的成绩为C级\n");else if(score >= 60 ) printf("您的成绩为D级\n");else printf("您的成绩为E级\n");return 0;
}int textscore2()
{int score;printf("请输入您的成绩:");scanf("%d",&score);if (score < 0 || score >100)printf("成绩错误\n");else if(score < 60 ) printf("您的成绩为E级\n");else if(score < 70 ) printf("您的成绩为D级\n");else if(score < 80 ) printf("您的成绩为C级\n");else if(score < 90 ) printf("您的成绩为B级\n");else printf("您的成绩为A级\n");return 0;
}int main(int argc,char *argv[])
{textscore1();textscore2();return 0;
}
- 运行结果
if…else结构注意点
- if…else结构中的语句1和语句2都可以是复合语句。
- 在f…else结构中,语句1和语句2都可以是空语句。举例:
if(..);else;
if语句的嵌套
语法:
if (..)if (..) 语句1;[else 语句2;]
[elseif (..) 语句3;else 语句4;
]
流程图:
注意:
①else总是与前面最近的if配对使用
②可通过增加{}来确定配对关系
③只要if中包含if,都属于是if语句的嵌套
案例
-
需求:根据学生的成绩,对学生进行评级;
-
学生成绩 >=90 A
-
学生成绩 >=80 B
-
学生成绩 >=70 C
-
学生成绩 >=60 D
-
学生成绩 <60 F
-
代码:
/*************************************************************************> File Name: demo08.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 15时02分32秒************************************************************************/#include <stdio.h>int textscore1()
{int score;printf("请输入您的成绩:");scanf("%d",&score);if (score < 0 || score >100)printf("成绩错误\n");else if(score >= 90 ) printf("您的成绩为A级\n");else if(score >= 80 ) printf("您的成绩为B级\n");else if(score >= 70 ) printf("您的成绩为C级\n");else if(score >= 60 ) printf("您的成绩为D级\n");else printf("您的成绩为E级\n");return 0;
}int textscore2()
{int score;printf("请输入您的成绩:");scanf("%d",&score);if (score < 0 || score >100)printf("成绩错误\n");else if(score < 60 ) printf("您的成绩为E级\n");else if(score < 70 ) printf("您的成绩为D级\n");else if(score < 80 ) printf("您的成绩为C级\n");else if(score < 90 ) printf("您的成绩为B级\n");else printf("您的成绩为A级\n");return 0;
}int main(int argc,char *argv[])
{textscore1();textscore2();return 0;
}
用swich语句实现分支结构
我们可以使用swich多分支选择结构(多分支也是被多路分支)
语法:
switch (表达式) // 表达式的结果建议是 字符 或者 整型
{case 常量表达式1: // 这里一般使用字面量、符号常量、枚举语句1;break;case 常量表达式2: // 这里一般使用字面量、符号常量、枚举语句2;break;...[case 常量表达式n: // 这里一般使用字面量、符号常量、枚举语句n;break;default:语句n+1;break;]
}
流程图:
说明:
①switch后括号内的表达式可以是任意类型的表达式,建议表达式的结果是整型、字符型
②若表达式的值与某个常量表达式的值相等时,执行case后面的语句;若没有相等的值时,执行default后面的语句。
③每个case后面的常量表达式的值必须不相同,否则出现矛盾。
④各个case出现的次序不影响执行结果。
⑤case后面的语句中如果没有break语句,则执行完本case后的语句后会接着执行下面的case,直到遇到下一个break或者switch执行完毕为止,演示:
int num = 1;
switch (num)
{case 1:printf("A\n");// 注意:这里没有break,会继续执行下一个case,直到遇到break或者执行结束break;case 2:printf("B\n");break;case 3:printf("C\n");break;case 4:printf("D\n");break;case 5:printf("E\n");break;}
⑥多个case公用一组语句,演示:
//需求:根据月份判断季节
//分析
// 春季:2~4
// 夏季:5~7int mouth = 3;
switch (mouth)//月份
{case 2;case 3;case 4;printf("春季\n");
}
案例:
- 需求:按照考试成绩的等级输出百分制分数段
- 分析:
- 若分段原则如下:
- 90~100 A级
- 80~89 B级
- 70~79C级
- 60~69 D级
- 其他 E级
- 若分段原则如下:
- 代码:
/*************************************************************************> File Name: demo09.c> Author: 小刘> Description: > Created Time: 2025年05月10日 星期六 22时38分45秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[])
{int score;printf("请输入一个整数:");scanf("%d",&score);if(score < 0 || score >100){printf("Error\n");}else{switch(score / 10){default:printf("E级\n");break;case 10 :case 9:printf("A级\n");break;case 8:printf("B级\n");break;case 7:printf("C级\n");break;case 6:printf("D级\n");break;}}return 0;
}
- 运行结果:
案例:
-
需求:设计一个简易计算器,要求能够实现简单的减减乘除运算
-
代码:
/*************************************************************************> File Name: demo02.c> Author: 小刘> Description: > Created Time: 2025年05月08日 星期四 16时26分32秒************************************************************************/#include <stdio.h>int main(int argc,char *argv[]) {char op;double num1,num2;printf("--------------------\n");printf("| 简易计算器 |\n");printf("--------------------\n");printf("请输入运算符(+ - * \):\n");scanf("%c",&op);printf("请输入要计算的公式:\n");scanf("%d%c%d",&mun1,&op,&num2);switch (op){case '+':printf("%.2lf + %.2f = %.2lf",num1,num2,num1+num2);break;case '-':printf("%.2lf - %.2f = %.2lf",num1,num2,num1-num2);break;case '*':printf("%.2lf * %.2f = %.2lf",num1,num2,num1*num2);break;case '/':b==0 ? printf("0不能为被除数"): printf("%.2lf / %.2f = %.2lf",num1,num2,num1/num2);break;}return 0; }
int main(int argc,char *argv[])
{
char op;
double num1,num2;printf("--------------------\n"); printf("| 简易计算器 |\n"); printf("--------------------\n"); printf("请输入运算符(+ - * \):\n"); scanf("%c",&op); printf("请输入要计算的公式:\n"); scanf("%d%c%d",&mun1,&op,&num2); switch (op) {case '+':printf("%.2lf + %.2f = %.2lf",num1,num2,num1+num2);break;case '-':printf("%.2lf - %.2f = %.2lf",num1,num2,num1-num2);break;case '*':printf("%.2lf * %.2f = %.2lf",num1,num2,num1*num2);break;case '/':b==0 ? printf("0不能为被除数"): printf("%.2lf / %.2f = %.2lf",num1,num2,num1/num2);break;} return 0;
}
相关文章:

嵌入式开发学习(阶段二 C语言基础)
C语言:第05天笔记 内容提要 分支结构 条件判断用if语句实现分支结构用switch语句实现分支结构 分支结构 条件判断 条件判断:根据某个条件成立与否,决定是否执行指定的操作。 条件判断的结果是逻辑值,也就是布尔类型值&#…...
【RAG技术全景解读】从原理到工业级应用实践
目录 🌟 前言🏗️ 技术背景与价值🚨 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🔍 一、技术原理剖析📊 核心概念图解💡 核心作用讲解⚙️ 关键技术模块说明🔄 技术选…...

从人体姿态到机械臂轨迹:基于深度学习的Kinova远程操控系统架构解析
在工业自动化、医疗辅助、灾难救援与太空探索等前沿领域,Kinova轻型机械臂凭借7自由度关节设计和出色负载能力脱颖而出。它能精准完成物体抓取、复杂装配和精细操作等任务。然而,实现人类操作者对Kinova机械臂的直观高效远程控制一直是技术难题。传统远程…...

NX949NX952美光科技闪存NX961NX964
NX949NX952美光科技闪存NX961NX964 在半导体存储领域,美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计,成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…...

【Bootstrap V4系列】学习入门教程之 组件-输入组(Input group)
Bootstrap V4系列 学习入门教程之 组件-输入组(Input group) 输入组(Input group)Basic example一、Wrapping 包装二、Sizing 尺寸三、Multiple addons 多个插件四、Button addons 按钮插件五、Buttons with dropdowns 带下拉按钮…...

VS “筛选器/文件夹”
每天学习一个VS小技巧: 我在VS创建筛选器的时候,想要想要同步计算机上的文件目录,但是发现并未 同步。 例如我在这儿创建了一个筛选器IoManager 但是在UI这个文件夹里并未创建对应的IoManager文件夹 我右击也没有打开文件所在位置 然后我…...
RAG与语义搜索:让大模型成为测试工程师的智能助手
引言 AI大模型风头正劲,自动生成和理解文本的能力让无数行业焕发新生。测试工程师也不例外——谁不想让AI自动“看懂需求、理解接口、生成用例”?然而,很多人发现:直接丢问题给大模型,答案貌似“懂行”,细…...
从 JMS 到 ActiveMQ:API 设计与扩展机制分析(三)
三、ActiveMQ API 设计解析 (一)对 JMS API 的实现与扩展 ActiveMQ 作为 JMS 规范的一种实现,全面且深入地实现了 JMS API,确保了其在 Java 消息服务领域的兼容性和通用性。在核心接口实现方面,ActiveMQ 对 JMS 的 C…...

powerbuilder9.0中文版
经常 用这个版本号写小软件,非常喜欢这个开发软件 . powerbuilder9.0 非常的小巧,快捷,功能强大,使用方便. 我今天用软件 自己汉化了一遍,一些常用的界面都已经翻译成中文。 我自己用的,以后有什么界面需要翻译,再更新一下。 放在这里留个…...
小程序消息订阅的整个实现流程
以下是微信小程序消息订阅的完整实现流程,分为 5个核心步骤 和 3个关键注意事项: 一、消息订阅完整流程 步骤1:配置订阅消息模板 登录微信公众平台进入「功能」→「订阅消息」选择公共模板或申请自定义模板,获取模板IDÿ…...
互联网大厂Java求职面试实战:Spring Boot微服务与数据库优化详解
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…...

基于C语言的TCP通信测试程序开发指南
一、TCP通信基础原理 1.1 通信流程概述 TCP通信采用客户端-服务器模型,核心流程如下: 服务器端: 创建套接字(Socket) 绑定地址和端口(Bind) 开始监听(Listen) 接受…...
Git 分支指南
什么是 Git 分支? Git 分支是仓库内的独立开发线,你可以把它想象成一个单独的工作空间,在这里你可以进行修改,而不会影响主分支(或 默认分支)。分支允许开发者在不影响项目实际版本的情况下,开…...

教育系统源码如何支持白板直播与刷题功能?功能开发与优化探索
很多行业内同学疑问,如何在教育系统源码中支持白板直播和刷题功能?本篇文章,小编将从功能设计、技术实现到性能优化,带你全面了解这个过程。 一、白板直播功能的核心需求与技术挑战 实时交互与同步性 白板直播的核心是“实时性”。…...
SSM框架整合MyBatis-Plus的步骤和简单用法示例
以下是 SSM框架整合MyBatis-Plus的步骤 和 简单用法示例: 一、SSM整合MyBatis-Plus步骤 1. 添加依赖(Maven) <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.…...
【LeetCode 热题 100】206. 反转链表
📌 难度:简单 📚 标签:链表、双指针、迭代、递归 🔗 题目链接(LeetCode CN) 🧩 一、题目描述 给你单链表的头节点 head,请你反转链表,并返回反转后的链表。 ✅…...
centos8.5.2111 更换阿里云源
使用前提是服务器可以连接互联网 1、备份现有软件配置文件 cd /etc/yum.repos.d/ mkdir backup mv CentOS-* backup/ 2、下载阿里云的软件配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo 3、清理并重建…...

再度深入理解PLC的输入输出接线
本文再次重新梳理: 两线式/三线式传感器的原理及接线、PLC的输入和输出接线,深入其内部原理,按照自己熟悉的方式去理解该知识 在此之前,需要先统一几个基础知识点: 在看任何电路的时候,需要有高低电压差&…...

k8s(11) — 探针和钩子
钩子和探针的区别: 在 Kubernetes(k8s)中,钩子(Hooks)和探针(Probes)是保障应用稳定运行的重要机制,不过它们的用途和工作方式存在差异,以下为你详细介绍&…...

使用jmeter对数据库进行压力测试
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 很多人提到 jmeter时,只会说到jmeter进行接口自动化或接口性能测试,其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&…...
Scala与Go的异同教程
当瑞士军刀遇到电锯:Scala vs Go的相爱相杀之旅 各位准备秃头的程序猿们(放心,用Go和Scala不会加重你的发际线问题),今天我们来聊聊编程界的"冰与火之歌"——Scala和Go的异同。准备好瓜子饮料,我…...
LeetCode 热题 100 138. 随机链表的复制
LeetCode 热题 100 | 138. 随机链表的复制 大家好,今天我们来解决一道经典的链表问题——随机链表的复制。这道题在 LeetCode 上被标记为中等难度,要求深拷贝一个带有随机指针的链表。 问题描述 给你一个长度为 n 的链表,每个节点包含一个额…...

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南
一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…...

05 mysql之DDL
一、SQL的四个分类 我们通常可以将 SQL 分为四类,分别是: DDL(数据定义语言)、DML(数据操作语言)、 DCL(数据控制语言)和 TCL(事务控制语言)。 DDL 用于创建…...

电池热管理CFD解决方案,为新能源汽车筑安全防线
在全球能源结构加速转型的大背景下,新能源汽车产业异军突起,成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统,其热管理技术的优劣,直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…...
使用互斥锁保护临界
Linux线程互斥及相关概念解析 1. 临界资源(Critical Resource) 定义:被多个线程共享的资源(如变量、文件、内存区域等),需通过互斥访问确保数据一致性。特点: 共享性:多个线程可能…...
Android第三次面试总结之网络篇补充
一、网络模型:OSI 七层 vs TCP/IP 四层(必考点) 1. 分层模型对比 OSI 七层模型TCP/IP 四层模型核心功能Android 相关场景应用层(7 层)应用层定义数据格式(HTTP/HTTPS/FTP/API)OkHttp/Retrofit…...
网络世界的“快递站”:深入浅出OSI七层模型
网络世界的“快递站”:OSI七层模型的奇妙旅程 为什么需要OSI七层模型? 想象一下,你正在给朋友寄一份生日礼物。你需要先包装礼物、贴上地址标签、选择快递公司、支付运费,最后把包裹交给快递员。这个过程看似简单,但…...
使用 Apache POI 生成包含文本和图片的 Word 文档
一、概述 在实际开发场景中,我们经常需要自动生成包含文本和图片的 Word 文档。本示例借助 Apache POI 库,实现了向 Word 文档中插入文本和图片的功能。代码会循环插入多次文本和同一张图片,并且对图片进行等比缩放处理,以保证图片…...

TransmittableThreadLocal:穿透线程边界的上下文传递艺术
文章目录 前言一、如何线程上下文传递1.1 ThreadLocal单线程1.2 InheritableThreadLocal的继承困境1.3 TTL的时空折叠术 二、TTL核心设计解析2.1 时空快照机制2.2 装饰器模式2.3 采用自动清理机制 三、设计思想启示四、实践启示录结语 前言 在并发编程领域,线程上下…...