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

Java基础教程 - 4 流程控制

更好的阅读体验:点这里 ( www.doubibiji.com
更好的阅读体验:点这里 ( www.doubibiji.com
更好的阅读体验:点这里 ( www.doubibiji.com

4 流程控制

4.1 分支结构

判断在生活中无处不在,例如我们登录某个系统,需要判断密码是否正确,正确才能登录,否则登录失败。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1 if-else 语句

在 Java 中通过 if else 来进行条件的判断,格式如下:

if (condition) {// condition为true时执行的代码块
} else {// condition为false时执行的代码块
}

也可以不需要 else

if (condition) {// 条件成立,要做的事情
}

if 后面的条件 condition 需要 boolean 类型的值、变量或表达式,也就是 truefalse

举个栗子,判断一个数是否为偶数:

public static void main(String[] args) {int num = 5;if (num % 2 == 0) {System.out.println(num + " 是偶数");} else {System.out.println(num + " 是奇数");}
}

执行结果:

5 是奇数


一般情况下,我们经常通过 关系运算逻辑运算 作为 if 的判断条件。

举个栗子:

public static void main(String[] args) {int a = 5;if (a > 0 && a < 10)System.out.println("a在0~10之间");
}

如果 ifelse 后面只有一条语句,可以省略 {}

2 if-elseif-else 语句

if-else 只能进行是和否的判断。

if-elseif-else 可以进行多条件判断。

语法格式:

if (condition1) {// condition1为true时执行的语句块
} else if (condition2) {// condition2为true时执行的语句块
} else {// 所有条件都为false时执行的语句块
}

else-if 可以有多个,最后的 else 可以省略。

当满足一个条件后,其他的条件就不会再判断了,如果所有条件都不满足,会执行 else


下面通过练习来举个栗子:

给出成绩,经过判断,打印出输入的成绩是优秀、良好、中等、及格还是不及格。

public static void main(String[] args) {int score = 85;if (score < 0 || score > 100) {System.out.println("成绩不正确");} else if (score >= 90) {System.out.println("优秀");} else if (score >= 80) {System.out.println("良好");} else if (score >= 70) {System.out.println("中等");} else if (score >= 60) {System.out.println("及格");} else {System.out.println("不及格");}
}

上面的输出结果为:良好


重新修改一下程序,读取键盘的输入作为值,这里用到读取键盘输入,需要用到 Scanner 类,所以需要使用 import 进行导入,import 的知识点,后面再讲解。

import java.util.Scanner;public class HelloJava {public static void main(String[] args) {// 声明一个Scanner,用于读取键盘的输入Scanner scan = new Scanner(System.in);// 读取的输入int score = scan.nextInt();if (score < 0 || score > 100) {System.out.println("成绩不正确");} else if (score >= 90) {System.out.println("优秀");} else if (score >= 80) {System.out.println("良好");} else if (score >= 70) {System.out.println("中等");} else if (score >= 60) {System.out.println("及格");} else {System.out.println("不及格");}}
}

nextInt() 表示以整形数据的形式读取键盘输入。当程序执行到 scan.nextInt(); 的时候,程序会阻塞在这里,等待用户的输入,输入完成,才会继续执行。


if-else语句都是可以相互嵌套的,可以在 if-else 判断中再进行 if-else 判断。

举个栗子:

public static void main(String[] args) {int x = 10;int y = 20;if (x > 5) {if (y > 15) {System.out.println("x 大于 5,y 大于 15");} else {System.out.println("x 大于 5,y 小于等于 15");}} else {if (y > 10) {System.out.println("x 小于等于 5,y 大于 10");} else {System.out.println("x 小于等于 5,y 小于等于 10");}}
}

3 三目运算符

假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if-else 语句,例如:

public static void main(String[] args) {int a = 4;int b = 5;int max;if (a > b)max = a;elsemax = b;System.out.println("最大值为:" + max);		// 最大值为:5
}

我们可以使用三目运算符来完成上面的功能,代码会更简洁的写法:

public static void main(String[] args) {int a = 4;int b = 5;int max = a > b ? a : b;System.out.println("最大值为:" + max);		// 最大值为:5
}

int max = a > b ? a : b; 的意思是:先判断 a > b,如果成立,就返回 a,不成立就返回 b

代码简洁了确实很多。能用三目运算符的地方都可以使用 if-else 代替。

4 switch语句

switch语句也是一种判断语句,通常用于对多个可能的值进行比较。switch语句的语法如下:

switch (value) {case value1:// value == value1 时执行的代码块break;case value2:// value == value2 时执行的代码块break;default:// value 不等于上面所有的case 时执行的代码块
}

注意:switch(value) 中的value,只能是byte、short、char、int、枚举类型(后面再讲)、String类型这六种数据类型

以下是一个示例代码,通过数字判断季节:

public static void main(String[] args) {int day = 2;switch (day) {case 1:System.out.println("春季");break;case 2:System.out.println("夏季");break;case 3:System.out.println("秋季");break;case 4:System.out.println("冬季");break;default:System.out.println("错误的季节");}
}

day 满足哪个 case,就会执行哪个 case 后面的代码。

执行结果:

夏季

注意,每个case后,都需要进行 breakreturn,否则会跳到下一个 case

举个栗子:

public static void main(String[] args) {int day = 2;switch (day) {case 1:System.out.println("春季");break;case 2:System.out.println("夏季");case 3:System.out.println("秋季");case 4:System.out.println("冬季");break;default:System.out.println("错误的季节");}
}

因为 case 2 没有 break,所以执行完成,会跳到 case 3 执行,执行完 case 3 没有 breakreturn,会继续跳到 case 4执行,执行完成,case 4break,则跳出。

执行结果:

夏季

秋季

冬季


如果对多个 case 的处理是一样的,就可以将 break 省略。

例如下面的代码中,day 为1,2,3,打印的都是秋季。

public static void main(String[] args) {int day = 2;switch (day) {case 1:case 2:case 3:System.out.println("秋季");case 4:System.out.println("冬季");break;default:System.out.println("错误的季节");}
}

4.2 循环语句

循环在日常生活中也很常见,例如我们要重复做某件事,就需要用到循环,循环不停的做某件事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举个栗子,每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

1 for 循环

for循环是一种常用的循环语句,可以指定循环变量的初始值、终止条件和步长。

for循环的语法如下:

// 对应下面的各个部分
for(①初始化部分; ②循环条件部分; ④迭代部分){③循环体部分;// 执行过程是①-②-③-④-②-③-④-②-③-④......②
// 执行①,然后执行②,判断②是否成立,如果成立,执行③,③执行完成,执行④,④执行完成,再次判断②是否成立,成立继续一轮循环,执行③,②不成立,退出循环。

举个栗子:

public static void main(String[] args) {for (int i = 1; i <= 5; i++) {System.out.println(i);}
}

先执行 int i = 1,定义一个变量 i ,然后执行 i <= 5 ,判断 i 是否小于等于5,如果为 true,则执行循环体中的代码 System.out.println(i); ,执行完循环体中的代码,执行 i++ ,然后再次执行 i <= 5 ,判断i 是否小于等于5,直到 i <= 5 不满足,则终止循环。

打印结果:

1

2

3

4

5

再举个例子:

for (int i = 1, j = 10; i <= 5 && j > 0 ; i++, j--) {System.out.println(i + j);
}

从上面可以看出,初始化可以定义多个变量,但是变量的类型要一样。


使用 for 循环也是可以定义死循环的。

什么是死循环,就是一直循环,不会终止的循环。

举个栗子:

下面的循环中,不执行步长的增长,i 始终为1,则 i <= 5 永远成立,所以循环不会终止。

for (int i = 1; i <= 5;) {System.out.println(i);
}

还可以这样写:

int i = 0;
for (;;) {System.out.println(i++);
}

上面的 for 循环会一直执行,不停的打印 i 的值,i 的值会一直增长。

在实际的开发中,for 循环是用的最多的。

2 while 循环

可以使用 while进行循环操作。

while 循环的语法:

while (condition) {// condition为真时执行的代码块
}

代码执行到while,会判断是否满足条件,如果满足,就会进入while循环,执行满足条件要做的事情,执行完成,会重新判断while后面的条件,如果满足会继续循环,如果不满足就不在进入循环。


回到一开始的提问:每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

public static void main(String[] args) {int i = 1;while (i <= 100) {System.out.println("第" + i +"天,送你一朵玫瑰花");i += 1;}
}

首先我们定义了一个变量 i ,用来记录当前是第几天。

我们一开始定义了 i 为 1,执行到 while 循环时,先判断 i 是否小于等于100,如果小于等于100,则进入到循环,打印语句,然后执行 i += 1;i 加1,然后再执行while后面的条件判断,判断 i <= 100,这样一直循环执行,当 i = 101时,刚好已经执行了100次,且不再满足 i < =100,此时终止循环。

注意,一定要对 i 进行累加,如果 i 不进行累加,永远会满足 i <= 100,那么循环将永远不会结束,变成死循环。

执行结果:

第1天,送你一朵玫瑰花

第2天,送你一朵玫瑰花

……

第99天,送你一朵玫瑰花

第100天,送你一朵玫瑰花


我们在计数的时候,i 也可以从0开始,例如:

public static void main(String[] args) {int i = 0;while (i < 100) {System.out.println("第" + (i + 1) + "天,送你一朵玫瑰花");i += 1;}
}

判断的条件的设定是很灵活的,根据实际需求来就可以了,不是一成不变的。


练习:计算从1累加到100的和

public static void main(String[] args) {int sum = 0; 										// 定义一个变量,存储累加的和int i = 1; 											// 定义一个变量,标识累加到几了,从1开始累加while (i <= 100) {sum += i; 										// 将和累加i += 1; 											// 将i加1,继续累加}System.out.println("1~100的和为:" + sum); 		// 打印最终的结果
}

执行结果:

1~100的和为:5050

使用 while 循环的地方都可以使用 for 循环代替。

3 do-while 循环

do...while 循环与 while 循环的区别在于,do...while 循环先执行一次循环体中的代码,再检查条件是否为真。如果条件为真,则继续执行循环体中的代码。

do...while 循环的语法如下:

do {// 循环体中的代码块
} while (condition);

举个栗子,再送一遍花:

public static void main(String[] args) {int i = 1;do {System.out.println("第" + i + "天,送你一朵玫瑰花");i += 1;} while (i <= 100);}

4 循环嵌套

循环是可以相互嵌套的,whilefor 循环中可以再次嵌套 whilefor 循环。

例如每天给小红送10多玫瑰花,坚持100天。

public static void main(String[] args) {int day = 1; // 记录第几天while (day <= 100) {			// 外层循环用于循环天数for (int roseCount = 1; roseCount <= 10; roseCount++) {			// 内层循环用于循环花的朵数System.out.println("第" + day + "天,第" + roseCount + "朵玫瑰花");}day += 1; // 天数+1}}

forwhiledo-while 循环都可以进行多层嵌套。

一般我们使用 for 循环是最多的,要简洁一些:

public static void main(String[] args) {for (int day = 1; day < 100; day++) {			// 外层循环用于循环天数for (int roseCount = 1; roseCount <= 10; roseCount++) {			// 内层循环用于循环花的朵数System.out.println("第" + day + "天,第" + roseCount + "朵玫瑰花");}}}

5 中断循环

我们在前面终止循环,主要是靠不满足条件时自动跳出。这样的话,必须每一次的循环都执行完成,到达条件判断的时候才能跳出。

但是有时候,我们不得不提前退出循环,或者终止当前的循环继续后面的循环,这个时候就需要 breakcontinue 关键字了。


break 语句

break 关键字用于直接结束当前所在的循环。


举个栗子:

如果一个循环,想在执行第三次的时候跳出:

public static void main(String[] args) {int i = 0;while (i < 10) {if (i == 3) {break;}System.out.println("i=" + i);i++;}
}

执行结果:

i=0
i=1
i=2

可以看到 i = 3 时,跳出了循环。

break只会跳出其所在的循环

public static void main(String[] args) {for (int i = 0; i < 10; i++) {for (int j = 0; i < 10; j++) {if (j == 3) {break;}System.out.println("i=" + i + ", j=" + j);}}
}

上面的代码,break只能跳出内部的那一个循环。无法跳出外部的循环。

如果就是想跳出外部的循环呢?

那就需要给外部的循环添加一个标签,举个栗子:

public static void main(String[] args) {outer : for (int i = 0; i < 10; i++) {for (int j = 0; i < 10; j++) {if (j == 3) {break outer;}System.out.println("i=" + i + ", j=" + j);}}
}

上面的代码中,给外层循环添加了一个 outer 标签,标签名称是自定义的;在循环内,可以通过 break 标签 来跳出指定的循环。

可以为每个循环添加标签,如果有多层循环,可以通过这样的方式跳出想要跳出的循环。while 循环也可以添加标签。


continue 语句

continue的作用是中断本次循环,直接进入下一次循环。


举个栗子:

循环5次,在第三次的时候跳过,继续后面的执行:

public static void main(String[] args) {for (int i = 0; i < 5; i++) {if (i == 3) {continue;}System.out.println("i=" + i);}
}

在上面 i == 3 的时候,终止了本次循环,直接跳到 i++ ,继续后面的执行。

执行结果:

i=0
i=1
i=2
i=4

同样,continue 和 break 一样,也可以选择终止的是哪一层的循环。

举个栗子:

public static void main(String[] args) {outer : for (int i = 0; i < 10; i++) {for (int j = 0; i < 10; j++) {if (j == 3) {continue outer;}System.out.println("i=" + i + ", j=" + j);}}
}

在上面的代码中,给外层循环定义了一个标签,每次执行到 j == 3 ,就会终止本次循环,直接跳转到外层循环的 i++,继续后面的循环。

4.3 练习

随机生成一个1-100的整数,然后在键盘输入数字来猜,猜不对,提示大了还是小了,猜对了,跳出循环。

在这里我们需要生成一个随机数,需要导入一个包 java.util.Random,用来生成 1~100 的随机数;

需要键盘输入,需要导入java.util.Scanner 包。

// 导入包
import java.util.Random;
import java.util.Scanner;public class HelloJava {public static void main(String[] args) {Random random = new Random();// 随机生成1-100的目标数// random.nextInt(100)表示生成0-100的随机数,包括0,不包括100// 在[0,100)的基础上+1就是[1,101),1~100var goal = random.nextInt(100) + 1;while (true) {System.out.println("请猜随机数的大小:");	// 打印信息,提示用户输入Scanner scan = new Scanner(System.in);int value = scan.nextInt();		// 获取键盘输入的数值if (value < 1 || value > 100) {System.out.println("请输入1-100之间的整数!");continue;}if (value == goal) {System.out.println("猜对了!");break;		// 如果猜对了,就跳出循环} else if (value < goal) {System.out.println("猜小了!");} else {System.out.println("猜大了!");}}}
}

相关文章:

Java基础教程 - 4 流程控制

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 4 流程控制 4.1 分支结构…...

大厂Java面试题:MyBatis中有几种加载映射器(Mapper.xml)的方式?

大家好&#xff0c;我是王有志。 今天给大家带来的是一道来自京东的 MyBatis 面试题&#xff1a;MyBatis 中有几种加载映射器&#xff08;Mapper.xml&#xff09;的方式&#xff1f; 常见加载 MyBatis 映射器的方式有 5 种&#xff0c;可以根据不同的使用方式来进行具体区分&…...

Flutter笔记:Widgets Easier组件库(10)快速处理承若型对话

Flutter笔记 使用Widgets Easier组件库快速处理承若型对话 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…...

10_Linux中的计划任务

10_Linux中的计划任务 常见计划任务 Linux系统中默认在执行的计划任务 日志文件的轮询:logrotate日志文件分析logwatch任务建立locate数据库建立manpage查询数据库RPM软件日志文件删除缓存与网络有关的分析 仅执行一次的计划任务 atd和at [rootnode4 ~]# systemctl start…...

Google Play开发者账号为什么会被封?如何解决关联账号问题?

Google Play是Google提供的一个应用商店&#xff0c;用户可以在其中下载并安装Android设备上的应用程序、电影、音乐、电子图书等。Google Play是Android平台上较大的应用市场&#xff0c;包含了数百万个应用程序和游戏。但是谷歌对于上架应用的审核越趋严格&#xff0c;开发者…...

(第12天)【leetcode题解】151、反转字符串中的单词

目录 151、反转字符串中的单词题目描述思路代码本题反思 151、反转字符串中的单词 题目描述 给你一个字符串 s &#xff0c;请你反转字符串中单词的顺序。 单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。 返回单词顺序颠倒且单词之间用单个…...

如何处理多模态数据噪声不均衡动态?天大等最新《低质量数据的多模态融合》综述

多模态融合致力于整合来自多种模态的信息&#xff0c;目的是实现更准确的预测。在包括自动驾驶和医疗诊断等广泛的场景中&#xff0c;多模态融合已取得显著进展。然而&#xff0c;在低质量数据环境下&#xff0c;多模态融合的可靠性大部分仍未被探索。本文综述了开放多模态融合…...

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

文章目录 前言NvDataInterfaceNvBlockNvM配置SWC配置RTE Mapping使用生成的接口操作NVM总结前言 NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断…...

【c++算法篇】双指针(下)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;算法笔记仓 朋友们大家好啊&#xff0c;本篇文章我们来到算法的双指针的第二部分 目录 1.有效三角形的个数2.查找总价格为目标值的两个商品3.三数之和4.四数之和5.双指针常见场景总结 1.有效三角形…...

微图乐 多种装B截图一键制作工具(仅供娱乐交流)

软件介绍 采用exe进程交互通信。全新UI界面&#xff0c;让界面更加清爽简约。支持zfb、VX、TX、Yin行、Dai款、游戏等图片生成&#xff0c;一键超清原图复制到剪辑板&#xff0c;分享给好友。适用于提高商家信誉度&#xff0c;产品销售额度。装逼娱乐&#xff0c;用微图乐。图…...

基于Springboot的点餐平台

基于SpringbootVue的点餐平台的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 菜品信息 菜品资讯 购物车 后台登录 用户管理 菜品分类管理 菜品信息管理 …...

C# 获取一个字符串中非数字部分?

方法一&#xff1a;使用正则表达式 使用正则表达式可以便捷地匹配并提取出字符串中所有非数字字符。与之前保留数字时的做法相反&#xff0c;这次我们将匹配数字并替换为空字符串&#xff0c;从而留下非数字部分。 using System; using System.Text.RegularExpressions;publi…...

今日总结2024/5/7

今日复习LIS二分优化的使用 P2782 友好城市 确定一边城市排序完后&#xff0c;另外一边满足坐标上升的最大数目即是桥的最大个数 为上升子序列模型 #include <iostream> #include <algorithm> #include <utility> #define x first #define y second cons…...

爬虫学习(3)豆瓣电影

代码 import requests import jsonif __name__ "__main__":url https://movie.douban.com/j/chart/top_list#post请求参数处理&#xff08;同get请求一致&#xff09;headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53…...

GNU Radio创建FFT、IFFT C++ OOT块

文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言 GNU Radio 自带的 FFT 模块使用起来不是很方便…...

125.两两交换链表中的节点(力扣)

题目描述 代码解决及思路 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), …...

APP精准推送广告是怎么做到的?

你有没有遇到这种情况&#xff0c;刚和家人聊起五一去哪玩&#xff0c;各种软件就刷到各地旅游景点。刚和朋友说到健身计划&#xff0c;转眼间网购平台就给你推荐各种健身用品&#xff0c;这些软件是如何知道我们的需求&#xff0c;难道我们的手机被监听了&#xff1f;从技术上…...

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…...

大型企业总分支多区域数据传输,效率为先还是安全为先?

大型企业为了业务拓展需要&#xff0c;会在全国乃至全球各地设立分公司和办事机构&#xff0c;以便更好地处理当地事务&#xff0c;并进行市场的开拓和客户维护&#xff0c;此时&#xff0c;企业内部就衍生出了新的业务需求&#xff0c;即多区域数据传输。 多区域很难准确定义&…...

C语言例题35、反向输出字符串(指针方式),例如:输入abcde,输出edcba

#include <stdio.h>void reverse(char *p) {int len 0;while (*p ! \0) { //取得字符串长度p;len;}while (len > 0) { //反向打印到终端printf("%c", *--p);len--;} }int main() {char s[255];printf("请输入一个字符串&#xff1a;");gets(s)…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...