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

04控制流

一、二路分支

  • 逻辑:程序中某段代码需要在满足某个条件时才能运行
  • 形式:
  1. if 语句:表达一种 如果-则 的条件执行关系
  2. if-else 语句:表达一种 如果-否则 的互斥分支关系
  • 流程图:

  • 注意:
  1. if 语句可以单独使用,else 语句不可以,else 语句必须跟if语句配套使用
  2. 不管是 if 语句还是 else 语句,代码块都必须使用大括号{}括起来,否则只有首句有效
  3. 注意if语句后面是否有;号,如果其加了;号,不论语句判断是否正确,都将会执行{}里的内容
  • 示例代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{// (1)、if 语句:表达一种 如果-则 的条件执行关系// 1、输入整型数据int n = 0;int num = 0;// printf("请输入一个整型数据!\n");// while ( n!= 1)// {//     n = scanf("%d", &num);//     if ( n!= 1)//     {//         printf("格式错误:请重新输入(整型数据)!!!:\n");//     }//     while( getchar() != '\n');// }// printf("num == %d\n", num);// 2、判断整型数据if ( (num % 2) == 0)        // 判断num是否为偶数{printf("num是偶数(语句1)\n");  }// (2)、if-else 语句:表达一种 如果-否则 的互斥分支关系if ( (num % 3) == 0)       {printf("num是3的倍数(语句2)\n");  }else{printf("num不是3的倍数(语句3)\n");  }// (3)、if 语句可以单独使用,else 语句不可以,else 语句必须跟if语句配套使用if ( num == 100)             // 可以单独使用{}// printf("hello world!\n"); // if...else中间不能写其它语句,否则会报错else                         // 不可以单独使用{}// (4)、不管是 if 语句还是 else 语句,代码块都必须使用大括号{}括起来,否则只有首句有效int flag = 0;int n1 = 0;int n2 = 0;int n3 = 0;// 建议的写法:if (flag == 0)      // 有花括号,if语句的作用范围为{}括起来的所有语句{n1 = 100;n2 = 200;n3 = 300;}else                // 有花括号,else语句的作用范围为{}括起来的所有语句{n1 = 111;n2 = 222;n3 = 333; }printf("n1 == %d, n2 == %d, n3 == %d\n", n1, n2, n3);// 不太建议的写法1:if (flag == 1)      // 没有{}括号,if语句的作用范围仅限于一行n1 = 11;n2 = 22;        // 影响不了下面的语句n3 = 33;printf("n1 == %d, n2 == %d, n3 == %d\n", n1, n2, n3);// 不太建议的写法2:if (flag == 0)     n1 = 11111;elsen2 = 22222;     // 没有{}括号,else语句的作用范围仅限于一行n3 = 33333;     // 影响不了下面的语句printf("n1 == %d, n2 == %d, n3 == %d\n", n1, n2, n3);// (5)、注意if语句后面是否有;号,如果其加了;号,不论语句判断是否正确,都将会执行{}里的内容int ts_x = 0;int ts_y = 0;printf("请输入触摸屏的x和y轴的坐标(整型,整型)!\n");while (1){// 1、输入触摸屏数据while ( n!= 2){n = scanf("(%d,%d)", &ts_x, &ts_y);if ( n!= 2){printf("格式错误:请重新输入触摸屏的x和y轴的坐标(整型,整型)!!!:\n");}while( getchar() != '\n');}n = 0;    // 2、判断触摸屏数据if ( (ts_x >100 && ts_x < 200) &&  (ts_y>100 && ts_y < 200));   // 这个if后面加了;号,意味着其作用范围到此行为止,所以影响不了下面的{}语句{                                                               // 此处已经变为了单独的语句了,不管if语句是否为真或假printf("手指点击了这个地方\n");}}return 0;
}

二、多路分支

  • 逻辑:根据不同的条件执行不同的代码片段
  • 语法:
  • 流程图:

  • 要点解析:
  1. switch(n) 语句中的 n 必须是一个整型表达式,即 switch 判断的数据必须是整型(字符(本质上就是单字节整型)、整型数据(变量(num1、num2...)、常量(1,2,3...)、整型表达式)
  2. case 语句只能带整型常量,包括普通整型或字符,不包括 const 型数据。
  3. break 语句的作用是跳出整个 swtich 结构,没有 break 程序会略过case往下执行
  4. default 语句不是必须的,一般放在最后面(因此不需要 break)
#include <stdio.h>
int main(int argc, char const *argv[])
{// (1)、if...else if ... else if ...elseint flag = 2;if (flag == 1){printf("执行语句1\n");}// printf("hello wordl!\n");    // 会报错,if...else中间不能有其它语句,否则会打断其连续性(逻辑)else if(flag == 2){printf("执行语句2\n");}else if(flag == 3){printf("执行语句3\n");}else{printf("执行语句4\n");}// (2)、switch语句的基本用法// 1、switch(n)语句中的n为字符, case 语句为:字符char ch1 = 'a';switch (ch1)                        // 1、switch(n) 语句中的 n 必须是一个整型表达式,即 switch 判断的数据必须是整型(字符(本质上就是单字节整型)、整型数据(变量(num1、num2...)、常量(1,2,3...)、整型表达式){case 'a':                       // 2、case 语句只能带整型常量,包括普通整型或字符,不包括 const 型数据printf("11111111\n");break;                      // 3、break 语句的作用是跳出整个 swtich 结构,没有 break 程序会略过case往下执行default:                        // 3、default 语句不是必须的,一般放在最后面(因此不需要 break)printf("shijienameda,woxiangdainiqukankan!\n");  break;}// 2、switch(n)语句中的n:整型数据, case 语句为:字符int  n1 = 1;switch (n1)                        {case 1:                       printf("aaaaaaaaaaa\n");break;                      default:printf("shijienameda,woxiangdainiqukankan!\n");                         break;}// 3、switch(n)语句中的n:常量数据(字符常量、整型常量), case 语句为:'a'...'z'switch ('a')                           {case 'a'...'z':                       printf("!!!!!!!!!!!!!\n");break;                      default: printf("shijienameda,woxiangdainiqukankan!\n");                        break;}// 4、switch(n)语句中的n:整型表达式, case 语句为:普通整型或字符int a = 100;int b = 99;int c = 0;switch (c=a+b)                           {case 1:                       printf("^^^^^^^^^^\n");break;                      default:  printf("shijienameda,woxiangdainiqukankan!\n");                     break;}// (3)、实际项目中如果使用switch语句(指纹解锁)int finger_flag       = 0;int n                 = 0;int finger_idbuf[5]   = {0};int count             = 0;char select           = 0;while (1){switch (finger_flag){case 0:goto run_label;break;case 1:printf("1、请按指纹!\n");scanf("%d", &n);            // 模拟指纹操作while( getchar() != '\n');if (n == 1)                 // 让其接下下面的操作finger_flag = 2;        elsefinger_flag = 1;break;case 2:printf("2、指纹正常!\n");scanf("%d", &n);            while( getchar() != '\n');if (n == 1)                 finger_flag = 3;        elsefinger_flag = 1;            break;case 3:printf("3、请再次按指纹!\n");scanf("%d", &n);            while( getchar() != '\n');if (n == 1)                 finger_flag = 4;        elsefinger_flag = 1;                break;case 4:printf("4、指纹正常!\n");scanf("%d", &n);            while( getchar() != '\n');if (n == 1)                 finger_flag = 5;        elsefinger_flag = 1;               break;case 5:printf("5、正在对比两次指纹\n");scanf("%d", &n);            while( getchar() != '\n');if (n == 1)                 finger_flag = 6;        elsefinger_flag = 1;              break;case 6:printf("6、对比成功,两次指纹一致\n");printf("请输入指针ID号:\n");scanf("%d", &finger_idbuf[count]);while( getchar() != '\n');printf("查询(c)  继续(y)  退出(n)\n");scanf("%c", &select);  while( getchar() != '\n');count++;if (select == 'y')                finger_flag = 1;        else if(select == 'n') finger_flag = 99;   else if(select == 'c')  {printf("指纹库里面的ID号:\n");for (int i = 0; i < 5; i++){printf("finger_idbuf[%d] = %d\n", i, finger_idbuf[i]);}finger_flag = 1;   }     break;default :goto exit_sys_label;break;}}
int n2  = 0;int cnt = 0;run_label:n2  = 1;cnt = 0;switch (n2){case 0:printf("1111111\n");    break;case 1:printf("2222222\n");  cnt = 100;  case 2:printf("3333333\n");cnt = 200;    case 3:printf("444444\n"); cnt = 300; break;default:break;}printf("cnt == %d\n", cnt);exit_sys_label:printf("已退出指纹模块系统\n");return 0;
}

三、const --- 

  • 逻辑:使一个变量不可修改
  • 作用:
    • 修饰普通变量,使之不可修改
    • 修饰指针变量,使之不可修改或者使其指向的目标不可修改
#include <stdio.h>
int main(int argc, char const *argv[])
{// (1)、没有const修饰的时候int num1 = 100;         // 定义了一个int型的变量(该变量可读可写)num1 = 200;printf("num1 == %d\n", num1);// (2)、有const修饰的时候// 1、写法1:int const num2 = 200;   // 初始化,该变量设置成了只读(该变量的值不可变)// num2 = 400;          // 可读不可写(报错误: error: assignment of read-only variable ‘num3’)printf("num2 == %d\n", num2);// 2、写法2:const int  num3 = 300;  // 初始化,该变量设置成了只读(该变量的值不可变)//  num3 = 500;         // 可读不可写(报错误: error: assignment of read-only variable ‘num3’)printf("num3 == %d\n", num3);// (3)、case 语句只能带整型常量,包括普通整型或字符,不包括 const 型数据。const int num4 = 100;switch ( num4 ){// case num4:       case 100:printf("11111111\n");break;default:break;}return 0;
}

四、while循环

  • 逻辑:使得程序中每一段代码可以重复循环地运行
  • 流程图:
    • while循环:先判断,循环(入口判断)

  • 示例代码:
#include <stdio.h>// 界面功能函数
int inf1_flag = 0;
int inf2_flag = 0;
int inf3_flag = 0;
int n = 0;// 界面1
void Inf1_loop(void)
{printf("你正处在第一层循环中: 请输入控制语句!\n");scanf("%d", &n);while( getchar() !='\n');switch (n){case 1:         // 功能1:进去inf2界面2inf2_flag = 1;printf("inf1:func1\n");break;case 2:         // 功能2:printf("inf1:func2\n");break;case 3:         // 功能3: 退出inf1_flag = 0;printf("退出inf1循环\n");break;}
}// 界面2
void Inf2_loop(void)
{printf("你正处在第二层循环中: 请输入控制语句!\n");scanf("%d", &n);while( getchar() !='\n');switch (n){case 1:         // 功能1:进去inf3界面3inf3_flag = 1;printf("inf2:func1\n");break;case 2:         // 功能2:printf("inf2:func2\n");break;case 3:         // 功能3: 退出inf2_flag = 0;printf("退出inf2循环\n");break;}
}// 界面3
void Inf3_loop(void)
{printf("你正处在第三层循环中: 请输入控制语句!\n");scanf("%d", &n);while( getchar() !='\n');switch (n){case 1:         // 功能1:printf("inf3:func1\n");break;case 2:         // 功能2:printf("inf3:func2\n");break;case 3:         // 功能3: 退出inf3_flag = 0;printf("退出inf3循环\n");break;}
}// 主函数
int main(int argc, char const *argv[])
{// (1)、基本用法:// 1、紧凑程度更好,不可以留遗言int flag1 = 0;while (flag1 < 5){flag1++;printf("flag1 == %d\n", flag1);}// 2、比较分散,但可以留遗言int flag2 = 0;while (1)               // 死循环(因为条件一直为真){flag2++;printf("flag2 == %d\n", flag2);      if (flag2 > 4){printf("啊,我死了,家产由最帅的那个继承\n");   // 退出前措施break;}   }// (2)、多重循环 --- 界面(逻辑)功能跳转的时候inf1_flag = 1;while ( inf1_flag == 1)     // 最外层循环(第一个界面(逻辑)){Inf1_loop();while ( inf2_flag == 1){Inf2_loop();while (inf3_flag == 1){Inf3_loop();}}  }return 0;
}

五、do-while循环

  • 逻辑:使得程序中每一段代码可以重复循环地运行
  • 流程图:
    • do-while 循环:先循环,再判断(出口判断)

  • 语法点:
    • while 循环先进行判断,条件为真后才执行循环体,因此循环体可能一遍也不执行。
    • do-while 循环先执行循环体,再进行判断,因此循环体至少会执行一遍。
    • do-while 循环中的 while 语句后面有分号;
  • 示例代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{// // 1、测试:循环输出一系列的正数,直到100为止(不满足条件也会再执行一遍)// int num = 0;// printf("请输入一个整数\n");// scanf("%d", &num);// do// {//     printf("%d\n", num);//     num++;// } while (num<=100);// (2)、其它特性都和while循环一致// 1、紧凑程度更好,不可以留遗言int flag1 = 0;do{flag1++;printf("flag1 == %d\n", flag1);} while (flag1<5);// 2、比较分散,但可以留遗言int flag2 = 0;do{flag2++;printf("flag2 == %d\n", flag2);if (flag2 > 4){printf("快把浏览器记录删除了!!!快!!!\n"); // 退出前的措施printf("要留清白在人间\n");break;}} while (1);return 0;
}

六、for循环

  • 逻辑:与 while 循环类似,但更加紧凑,for 循环将控制循环的变量集中在一行
  • 语法点:
  • 循环头的标准语法是: for(表达式1 ; 表达式2 ; 表达式3)
    • 表达式3:一般用来更新循环控制变量
    • 表达式2:一般用来作为循环判定条件,为真则进入循环,为假则跳出循环
    • 表达式1:一般用来初始化循环控制变量
    • 三个表达式均可以省略,但分号不能省略( for( ; ; ) == 相当于while(1) )
  • 示例代码:
#include <stdio.h>
#include <unistd.h>int main(int argc, char const *argv[])
{// (1)、for循环和while循环的区别for (int i = 0; i < 5; i++)         // 此处的int i;在新版本编译器中可以放在for循环体内,但是在低级编译器里面不行{printf("i == %d\n", i);}// 相当于:int num1 = 0;                       // 相当于for循环语句的:表达式1while (num1 < 5)                    // 相当于for循环语句的:表达式2{printf("num1 == %d\n", num1);   // 相当于for循环语句的要运行的语句num1++;                         // 相当于for循环语句的:表达式3}// // (2)、- 三个表达式均可以省略,但分号不能省略( for( ; ; ) == 相当于while(1) )// for ( ; ; )// {//     printf("111111\n");//     sleep(1);// }// // (3)、单独使用表达式1// for (int num2,num3=1,num4; ; )// {//     printf("num2 == %d\n", num2);//     printf("num3 == %d\n", num3);//     printf("num4 == %d\n", num4);//     sleep(1);// }// // (4)、单独使用表达式2// // 1、简单的条件// int num5 = 0;// for ( ; num5<5; )// {//     printf("num5 == %d\n", num5);//     num5++;//     sleep(1);// }// // 2、笔试题// int a2 = 0;// int n3 = 0;// int b2 = 9;// for ( ; a2=10,n3=10,b2>10; )        // 先执行>号,再执行a2=10,n3=10,// {//     printf("1111111111111\n");//     sleep(1);// }// printf("a2 == %d\n", a2);// printf("n3 == %d\n", n3);// (5)、单独使用表达式3int a3 = 0;int n4 = 0;int b3 = 0;for ( ; ; a3++,n4++,n4=a3+b3){printf("a3 == %d\n", a3);printf("n4 == %d\n", n4);printf("b3 == %d\n", b3);sleep(1);}return 0;
}

七、break与continue

  • 逻辑:
    • break:① 跳出 switch 语句; ② 跳出当前层的循环体
    • continue:结束当次循环,进入下次循环
  • 示例代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{// // (1)、- break:① 跳出 switch 语句; ② 跳出当前层的循环体// // 1、跳出 switch 语句// int n1 = 0;// int flag = 1;// while ( flag == 1)// {//     scanf("%d", &n1);//     while( getchar()!='\n');//     switch (n1)//     {//         case 1://             printf("1111111\n");//             flag = 0;                       // 如果要连带着退出while循环,建议设置flag来直接退出//             break;                          // 这个break只是退出switch语句,并非退出while循环//         case 2://             printf("222222\n");//             break;//         default://             break;//     }// }// // 2、跳出当前层的循环体// // a、while循环体(do...while也是如此)// int n2 = 0;// while (1)// {//     scanf("%d", &n2);//     while( getchar()!='\n');//     if (n2 == 1)//     {//         printf("333333333!\n");//         break;  // 跳出当前循环//     }//     else//     {//         printf("44444444444\n");//     }// }// b、for循环体int n3 = 0;for (int i = 0; i < 10; i++, n3++){if (n3 == 5){printf("5555555555555555\n");     break;}  }int n4 = 0;for (  ; ; ){if (n4 == 5){printf("6666666666666\n");    break;}   n4++; }// (2)、- continue:结束当次循环,进入下次循环for (int i = 0; i < 100; i++){if ((i%7) == 0)     // 避免一些你不想执行的操作,但是又要继续下一个循环,就使用continue{continue;}printf("%d\n", i);}return 0;
}

八、goto语句

  • 逻辑:无条件跳转
  • 语法:
    • goto语句直接跳转到本代码块中({}的范围)的标签处
    • 标签指的是以冒号结尾的标识符
  • 作用:
    • goto语句的无条件跳转不利于程序的可读性,不建议使用(不推荐,除非迫不得已)
    • goto语句常被用在程序的错误处理中(推荐)
    • goto语句常被用在程序的调试中(推荐)
  • 示例代码:
#include <stdio.h>
#include <unistd.h>// 普通函数(模拟一个函数功能,然后其有很多的错误返回值)
int Func(int num)
{// 申请资源switch (num){case 1:            // 返回-1,-2,-3就不是正常退出   return -1;case 2:         return -2;case 3:         return -3;}return 0;               // 返回0就是正常退出
}// 主函数
int main(int argc, char const *argv[])
{// (1)、goto语句常被用在程序的错误处理中int ret = Func(0);if (ret < 0){printf("111111111111111111111111111\n", __LINE__);goto func_error_label;          // - goto语句直接跳转到本代码块中({}的范围)的标签处}printf("Func函数正常运行中!\n");// (2)、goto语句常被用在程序的调试中goto debug_label;                          // 1、调试while (1){while (1){while (1){while (1){while (1){sleep(1);printf("我现在在第五层循环中!\n");goto while1_label;      // 2、功能嵌套了太多的循环,导致逻辑紊乱,迫不得已}}}  }
while1_label:printf("回到了第一层循环中!\n");}
debug_label:printf("正在调试的语句!\n");跳转逻辑最好都是向下,不要一会上,一会下func_error_label:                      // - 标签指的是以冒号结尾的标识符switch (ret){case -1:            printf("解决问题,将错误码为-1的问题解决(%d行)(一般是将资源回收,避免浪费系统资源)\n", __LINE__);break;case -2:         printf("解决问题,将错误码为-2的问题解决(%d行)(一般是将资源回收,避免浪费系统资源)\n", __LINE__);break;case -3:         printf("解决问题,将错误码为-1的问题解决(%d行)(一般是将资源回收,避免浪费系统资源)\n", __LINE__);break;}return 0;
}

至此,希望看完这篇文章的你有所收获,我是Bardb,译音八分贝,期待下期与你相见!

相关文章:

04控制流

一、二路分支 逻辑&#xff1a;程序中某段代码需要在满足某个条件时才能运行形式&#xff1a; if 语句&#xff1a;表达一种 如果-则 的条件执行关系if-else 语句&#xff1a;表达一种 如果-否则 的互斥分支关系 流程图&#xff1a; 注意&#xff1a; if 语句可以单独使用&…...

【Leetcode 每日一题】2506. 统计相似字符串对的数目

问题背景 给你一个下标从 0 0 0 开始的字符串数组 w o r d s words words。 如果两个字符串由相同的字符组成&#xff0c;则认为这两个字符串 相似 。 例如&#xff0c;“abca” 和 “cba” 相似&#xff0c;因为它们都由字符 ‘a’、‘b’、‘c’ 组成。然而&#xff0c;“…...

【Shell编程 / 9】脚本实战项目:从基础到进阶的自动化管理方案

文章目录 Shell脚本实战项目自动化部署脚本系统监控脚本文件备份脚本定时任务管理脚本文件传输自动化脚本自动化日志清理脚本用户管理脚本 Shell脚本实战项目 在掌握了 Shell 脚本的基本语法和高级技巧后&#xff0c;实践是进一步提升脚本编写能力的关键。通过参与一些实际的项…...

在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源

插值法其实就是在已知数据点之间估计未知点的值。通过已知的离散数据点,构造一个连续的曲线函数,预测数据点之间的空缺值是什么并且自动填补上去。 适用场景: 在卷积神经网络(CNN)中的应用场景中,经常遇到计算资源有限,比如显存不够或者处理速度慢,需要用插值来降低计…...

黄金市场现状与驱动因素分析

一、当前市场现状&#xff1a;挤兑、运力与供应链危机 全球金库告急与运输瓶颈 伦敦商业银行金库的黄金存量告急&#xff0c;纽约和伦敦市场出现“史诗级挤兑”。提取英格兰银行金库的黄金需等待4-8周&#xff0c;远高于常规的几天时间[citation:用户描述]。专业运输车辆超负荷…...

Linux arm64 IOMMU总结

一、DMA的引入 Non-DMA&#xff1a;CPU直接与设备进行数据交互&#xff0c;CPU的负载会随着数据的读写而增加&#xff1b; DMA&#xff1a;CPU不参与数据的直接传输&#xff0c;DMA Controller负责Device与Memory之间的数据搬运&#xff0c;并以中断信号的形式通知CPU&#xf…...

服务器通过 ollama 运行deepseek r1

1、服务器环境简介 56核 CPU64G 内存无显卡已安装 Ollama 2、下载模型与配置 正常可以通过 ollama pull 或 ollama run 命令直接下载&#xff0c;但通常会遇到连接超时、找不到网址等总理。因此&#xff0c;可以使用国内的模型站进行下载&#xff0c;在这里使用魔塔查找模型…...

MYSQL学习笔记(九):MYSQL表的“增删改查”

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇讲述一些在MYSQL的数据类型&#xff0c;和表的“增删改查”基本操作;虽然MYSQ…...

Oracle JDK、Open JDK zulu下载地址

一、Oracle JDK https://www.oracle.com/java/technologies/downloads/ 刚进去是最新的版本&#xff0c;往下滑可以看到老版本 二、Open JDK的 Azul Zulu https://www.azul.com/downloads/ 直接可以选版本等选项卡...

分类解析决策模型

一、按理性程度划分的决策模型 1. 完全理性模型(古典决策理论) 核心假设:决策者拥有完全信息,能计算所有选项的效用并选择最优解。数学模型: 期望效用理论(Expected Utility Theory, EU): E U = ∑ ( p i...

【SPIE出版,见刊快速,EI检索稳定,浙江水利水电学院主办】2025年物理学与量子计算国际学术会议(ICPQC 2025)

2025年物理学与量子计算国际学术会议&#xff08;ICPQC 2025&#xff09;将于2025年4月18-20日在中国杭州举行。本次会议旨在汇聚全球的研究人员、学者和业界专家&#xff0c;共同探讨物理学与量子计算领域的最新进展与前沿挑战。随着量子技术的快速发展&#xff0c;其在信息处…...

【网络】高级IO——Reactor版TCP服务器

1.什么是Reactor Reactor 是一种应用在服务器端的开发模式&#xff08;也有说法称 Reactor 是一种 IO 模式&#xff09;&#xff0c;目的是提高服务端程序的并发能力 它要解决什么问题呢&#xff1f; 传统的 thread per connection 用法中&#xff0c;线程在真正处理请求之前首…...

3.Docker常用命令

1.Docker启动类命令 1.启动Docker systemctl start docker 2.停止Docker systemctl stop docker 3.重启Docker systemctl restart docker 4.查看Docker状态 systemctl status docker 5.设置开机自启(执行此命令后每次Linux重启后将自启动Docker) systemctl enable do…...

【uni-app】对齐胶囊容器组件

代码碎片 <template><div><view :style"{ height: ${statusBarHeight}px }"></view><viewclass"":style"{height: ${menuButtonHeight menuButtonPadding * 2}px,width: ${menuButtonInfo.left}px,}"><slot …...

JUC并发—10.锁优化与锁故障

大纲 1.标志位修改场景优先使用volatile(服务优雅停机) 2.数值递增场景优先使用Atomic类(心跳计数器) 3.共享变量仅对当前线程可见的场景优先使用ThreadLocal(edits log的处理) 4.读多写少需要加锁的场景优先使用读写锁(服务注册表的并发读写) 5.尽量减少线程对锁占用时间…...

Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

大数据学习之PB级音乐数据中心数仓综合项目(1)-理论知识和项目需求、歌曲热度与歌手热度排行

一、理论知识和项目需求 1.课程介绍 2.数据库与ER建模_数据库三范式 3.数据库与ER建模_ER实体关系模型 4.数据库与维度建模_数据仓库(DATA WAREHOUSE) 5.数据库与维度建模_数据库与数据仓库区别 6.数据库与维度建模_数据仓库的发展历程 7.数据库与维度建模_维度建模 8.数据库与…...

DeepSeek vs ChatGPT:AI 领域的华山论剑,谁主沉浮?

一、引言 在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已然成为推动各领域变革的核心力量。而在人工智能的众多分支中&#xff0c;自然语言处理&#xff08;NLP&#xff09;因其与人类日常交流和信息处理的紧密联系&#xff0c;成为了最受瞩目的领…...

七星棋牌顶级运营产品全开源修复版源码教程:6端支持,200+子游戏玩法,完整搭建指南(含代码解析)

棋牌游戏一直是移动端游戏市场中极具竞争力和受欢迎的品类&#xff0c;而七星棋牌源码修复版无疑是当前行业内不可多得的高质量棋牌项目之一。该项目支持 6大省区版本&#xff08;湖南、湖北、山西、江苏、贵州&#xff09;&#xff0c;拥有 200多种子游戏玩法&#xff0c;同时…...

本2硕9电子科学专业,想走linux或是嵌入式,要具体学哪些技术

​今天给大家分享的是一位粉丝的提问&#xff0c;本2硕9电子科学专业&#xff0c;想走linux或是嵌入式&#xff0c;要具体学哪些技术 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; 你好&…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...