三 . 运算符和流程控制——Java基础篇

三 . 运算符和流程控制

1. 运算符

1 . 赋值运算符

1.2.1 基本语法

  • 符号:=

    • 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
    • 支持连续赋值
  • 扩展赋值运算符: +=、 -=、*=、 /=、%=

    赋值运算符符号解释
    +=将符号左边的值右边的值进行相加操作,最后将结果赋值给左边的变量
    -=将符号左边的值右边的值进行相减操作,最后将结果赋值给左边的变量
    *=将符号左边的值右边的值进行相乘操作,最后将结果赋值给左边的变量
    /=将符号左边的值右边的值进行相除操作,最后将结果赋值给左边的变量
    %=将符号左边的值右边的值进行取余操作,最后将结果赋值给左边的变量
注意:赋值运算符不会更改原有的数据类型
public class OperatorTest1 {public static void main(String[] args) {char c='a';c-=32;//省去了强转数据类型的步骤System.out.println("c = " + c);
//        char c='a';
//
//        int result=c-32;
//        System.out.println("result = " + result);
//        //将数字转为字符
//        char temp=(char)result;
//        System.out.println("temp = " + temp);/*a:97A:65*/System.out.println("------------------------");int m = 10;System.out.println("m = " + m);m+=30;//m = m + 30;System.out.println("m = " + m);m*=10;//m=m*10System.out.println("m = " + m);int n=30;n%=7;   //n=n=n%7;System.out.println("n = " + n);}
}
2 . 比较运算符

在这里插入图片描述

  • 比较运算符的结果都是boolean型,也就是要么是true,要么是false。

  • > < >= <= :只适用于基本数据类型(除boolean类型之外)

    == != :适用于基本数据类型和引用数据类型

    class CompareTest {public static void main(String[] args) {int i1 = 10;int i2 = 20;System.out.println(i1 == i2);//falseSystem.out.println(i1 != i2);//trueSystem.out.println(i1 >= i2);//falseint m = 10;int n = 20;System.out.println(m == n);//falseSystem.out.println(m = n);//20boolean b1 = false;boolean b2 = true;System.out.println(b1 == b2);//falseSystem.out.println(b1 = b2);//true}}
    
3 . 逻辑运算符

在这里插入图片描述

逻辑运算符,操作的都是boolean类型的变量或常量,而且运算得结果也是boolean类型的值。

  • 运算符说明:

    • & 和 &&:“且”,true=true--------true 两边布尔值都是true时,结果才能为true。否则,为false。
    • | 和 || :“或”,true=flase或者false=true-------true false=fasle------false 当符号两边布尔值有一边为true时,结果为true。当两边都为false时,结果为false
    • ! :“非”,当变量布尔值为true时,结果为false。当变量布尔值为false时,结果为true。
    • ^ :当符号左右两边布尔值不同时,结果为true。当两边布尔值相同时,结果为false。
      • 理解:异或,追求的是“异”!
  • 区分“&”和“&&”:

    • 相同点:如果符号左边是true,则二者都执行符号右边的操作

    • 不同点:& : 如果符号左边是false,则继续执行符号右边的操作

    ​ && :如果符号左边是false,则不再继续执行符号右边的操作

    • 建议:开发中,推荐使用 &&
  • 区分“|”和“||”:

    • 相同点:如果符号左边是false,则二者都执行符号右边的操作

    • 不同点:| : 如果符号左边是true,则继续执行符号右边的操作

      ​ || :如果符号左边是true,则不再继续执行符号右边的操作

逻辑运算符:&:与:所有的表达式都是true,结果才是true,能falsefalse|:或:所有的表达式都是flase,结果才是false,truetrue^:异或:相同为false,不同为true!:非:取反----&&:短路与:前面的表达式为true,则不再计算后面的表达式||:短路或:前面的表达式为false,则不再计算后面的表达式注意:1&|^是逻辑运算符时 两边表达式时boolean布尔类型 则逻辑2&|^是逻辑运算符时 两边表达式时int数字 则位*/
class OperatorTest_2{public static void main(String[] args) {boolean t1 = true, t2 = true;boolean f1 = false, f2 = false;System.out.println("-----             --||---            -----");System.out.println(f1 || f2 || f1 || f2 || t1);   //trueSystem.out.println(f1 || f2 || f1 || f2); //falseint a=10;int b=20;//boolean result=b>a | ++a>b;  //result = true,a=11boolean result=b>a || ++a>b;  //result = true,a=10System.out.println("result = " + result+",a="+a);System.out.println("---------------------&&------------------");System.out.println(t1 && t2 && t1 && f1);  //falseSystem.out.println(t1 && t2 && t1 && t2);  //trueint m=66;int n=99;// result=m>n & ++m<n;  //result = false,m=67result=m>n && ++m<n;  //result = false,m=66System.out.println("result = " + result+",m="+m);}
}
public class OperatorTest4 {public static void main(String[] args) {boolean t1 = true, t2 = true;boolean f1 = false, f2 = false;System.out.println("-------!--------");System.out.println(!t1);//falseSystem.out.println(!f1);//trueSystem.out.println("-------^--------");System.out.println(f1^t1);//trueSystem.out.println(f1^f1);//falseSystem.out.println(t2^t2);//falseSystem.out.println(t2^f2);//tureSystem.out.println("-------|--------");System.out.println(f1 | f2 | f1 | f2 | t1);   //trueSystem.out.println(f1 | f2 | f1 | f2); //falseSystem.out.println("-------&--------");//结果都是true是结果才是true,只要有一个是false,结果就是falseSystem.out.println(t1 & t2 & t1 & f1);  //falseSystem.out.println(t1 & t2 & t1 & t2);  //true}
}
4 . 位运算

在这里插入图片描述

  • 位运算符的运算过程都是基于二进制的补码运算

(1)左移:<<

运算规则:在一定范围内,数据每向左移动一位,相当于原数据*2。(正数、负数都适用)

【注意】当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位

3<<4  类似于  3*24次幂 => 3*16 => 48

在这里插入图片描述

-3<<4  类似于  -3*24次幂 => -3*16 => -48

在这里插入图片描述

(2)右移:>>

运算规则:在一定范围内,数据每向右移动一位,相当于原数据/2。(正数、负数都适用)

【注意】如果不能整除,向下取整

69>>4  类似于  69/24= 69/16 =4

在这里插入图片描述

-69>>4  类似于  -69/2的4次 = -69/16 = -5

在这里插入图片描述

(3)无符号右移:>>>

运算规则:往右移动后,左边空出来的位直接补0。(正数、负数都适用)

69>>>4  类似于  69/2的4次 = 69/16 =4

在这里插入图片描述

-69>>>4   结果:268435451

在这里插入图片描述

(4)按位与:&

运算规则:对应位都是1才为1,否则为0。

  • 1 & 1 结果为1

  • 1 & 0 结果为0

  • 0 & 1 结果为0

  • 0 & 0 结果为0

9 & 7 = 1

在这里插入图片描述

-9 & 7 = 7

在这里插入图片描述

(5)按位或:|

运算规则:对应位只要有1即为1,否则为0。

  • 1 | 1 结果为1

  • 1 | 0 结果为1

  • 0 | 1 结果为1

  • 0 & 0 结果为0

9 | 7  //结果: 15

在这里插入图片描述

-9 | 7 //结果: -9

在这里插入图片描述

(6)按位异或:^

运算规则:对应位一个为1一个为0,才为1,否则为0。

  • 1 ^ 1 结果为0

  • 1 ^ 0 结果为1

  • 0 ^ 1 结果为1

  • 0 ^ 0 结果为0

9 ^ 7  //结果为14

在这里插入图片描述

-9 ^ 7 //结果为-16

在这里插入图片描述

(7)按位取反:~

运算规则:对应位为1,则结果为0;对应位为0,则结果为1。

  • ~0就是1

  • ~1就是0

~9  //结果:-10

在这里插入图片描述

~-9  //结果:8

在这里插入图片描述

/*
位运算符(按照二进制进行运算):&:与|:或^:异或~:取反<<:左移>>:右移>>>:无符号右移无论是正数还是负数,移动后最高位都补0一个更小的负数移动后会变为一个更大的正数十进制转二进制:0B开头+十进制,
System.out.println(0B0000000000000000000000000000000000001000);*/
public class OperatorTest3 {public static void main(String[] args) {System.out.println("----------无符号右移>>>-----------");/*0000 0000 0000 0000 0000 0000 0000 0000 0000 1000|0000 0000 0000 0000 0000 0000 0000 0000 0000 100|0   //40000 0000 0000 0000 0000 0000 0000 0000 0000 10|00    //2*/System.out.println(0B0000000000000000000000000000000000001000);System.out.println(8>>>1);System.out.println(8>>>2);System.out.println(-8>>>1);System.out.println("----------右移>>-----------");/*100001000   //8100   //4*/System.out.println(16>>1);System.out.println(16>>2);System.out.println("----------<<-----------");/*1001000  //810000  //16注意:左移一位乘以2,就是向左移一位,后面补0*/System.out.println(4 << 1);System.out.println(4<<2);System.out.println("----------&|~^------------");System.out.println(5 & 3);//1/*1 0 10 1 1&  //上下都为1,才是1---------------0 0 1System.out.println(5 | 3);//1/*1 0 10 1 1|  //上下有1,才是1---------------1 1 1*/System.out.println(5 ^ 3);//1/*1 0 10 1 1^  //不同为1,相同为0---------------1 1 0*/System.out.println(~5);//-6/*0000 0101~ 取反 1111 1010补码 1111 1010反码 1111 1001          反码+1才是补码原码 1000 0110          源码最高位不变,其余1变0,0变1*/}}
5 . 条件运算符
  • 条件运算符格式:
(条件表达式)? 表达式1:表达式2
  • 说明:条件表达式是boolean类型的结果,根据boolean的值选择表达式1或表达式2

在这里插入图片描述

  • 如果运算后的结果赋给新的变量,要求表达式1和表达式2为同种或兼容的类型
/*条件运算符/三目运算符/三元运算符:X?Y:Z;X:true-->YX:false-->Z*/
public class OperatorTest5 {public static void main(String[] args) {//定义年龄int age=19;String result=age>18?"成年了":"未成年";System.out.println("result = " + result);//定义一个整数int num=19;String result2 = 19 % 2 == 0 ? "时偶数" : "不是整数";System.out.println("result2 = " + result2);int m=10;int n=20;int result3 = m > n ? m : n;System.out.println("result3 = " + result3);/*定义三个数字,求最大值,要求一行三目*/int a = 20, b = 300, c = 60;int MaxNum3 = a > b ? (a > c ? a : c) : (b > c ? b : c);System.out.println("MaxNum3 = " + MaxNum3);//        //1、获取前两个数中的最大值
//        int tempMaxNum = a > b ? a : b;
//        //2、最大值与第三个数进行比较
//        int MaxNum2 = tempMaxNum > c ? tempMaxNum : c;
//        System.out.println("MaxNum2 = " + MaxNum2);}
}

2. Scanner:键盘输入功能的实现

键盘输入:Scanner一、基本操作:1、创建键盘输入的对象in:对象名 是可以改变的Scanner in=new Scanner(System.in);2、提供提示语句(可选)3、对象调用的方法接收数据in.nextInt();4、展示数据5、关闭资源in.nextInt();二、键盘输入获取其他基本数据类型的值nextByte()nextShart()nextInt()nextLong()nextFloat()nextDouble()nextBoolean()注意:1、如果输入的类型不满足要求,输入异常,会显示inputMismatchExceltion2、键盘输入不存在nextChar()。。通过字符串中的charAt(index)获取char值三、键盘输入获取字符串数据next():只能接收空格之前的数据nextLine():可以接受一整行数据,若是要输入多行数据,得使用in.nextLine()进行过渡
class OperatorTest7_4{public static void main(String[] args) {//1、创建对象Scanner in=new Scanner(System.in);//2、提示语句System.out.println("请您输入一句话:");//3、对象调用方法来接受数据String message=in.nextLine();//4、展示数据System.out.println("message = " + message);//5、关闭资源in.close();}
}
class OperatorTest7_3{public static void main(String[] args) {//1、创建对象Scanner in=new Scanner(System.in);//2、提示语句System.out.println("请您输入一句话:");//3、对象调用方法来接受数据String message=in.next();//4、展示数据System.out.println("message = " + message);//5、关闭资源in.close();}
}
class OperatorTest7_2{public static void main(String[] args) {//通过字符串中的charAt(index)获取char值String s="ABCDE";char ele =s.charAt(2);System.out.println("ele = " + ele);//1、创建输入对象Scanner in=new Scanner(System.in);//2、提示语句System.out.println("请您输入一个名字:");//3、接受数据String name = in.next();//4、获取名字得第一个字符char c = name.charAt(0);// char c2 = in.next().charAt(0);//5、展示数据System.out.println("c = " + c);//6、关闭资源in.close();}
}
class OperatorTest7_1{public static void main(String[] args) {//1、创建键盘输入对象Scanner input=new Scanner(System.in);//2、接受并展示一个long值System.out.println("请您输入一个long值");long l = input.nextLong();System.out.println("l = " + l);//3、接受并展示一个dluble值System.out.println("请您输入一个double值");double d = input.nextDouble();System.out.println("d = " + d);//4、接受并展示一个boolean值System.out.println("请您输入一个boolean值");boolean b =  input.nextBoolean();System.out.println("b = " + b);//5、接受并展示一个char值//6、关闭资源input.close();}}
public class OperatorTest7 {public static void main(String[] args) {
//        1、创建键盘输入的对象Scanner in=new Scanner(System.in);
//        2、提供提示语句System.out.println("请您输入年龄:");
//        3、对象调用的方法接收数据int age=in.nextInt();
//        4、展示数据System.out.println("age = " + age);
//        5、关闭资源in.close();}
}
Math.random()会获取随机数[0,1)[m,n]之间的随机数就用这个公式
(int)(Math.random()*(n-m+1)+m);
public class ScannerExer2 {public static void main(String[] args) {double random = Math.random();System.out.println("random = " + random);for(int i=1;i<=50;i++){int num=(int)(Math.random()*(44-22+1)+22);System.out.println(i+"-->" + num);}}
}

3 .程序执行结构 ( 单\双—if )

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

程序得执行结构:顺序结构分支结构循环结构分支结构:1. if分支1.1 if单分支if(布尔类型的表达式){分支内容}1.2 if双分支1.3 if多分支注意://使用if时若是没有括号,是对靠近它的一条语句有作用++:先运算再+1.++:先+1再运算。使用if时若是没有括号,是对靠近它的第一条语句有作用

在这里插入图片描述

class IfExer{public static void main(String[] args) {int x=1;int y =1;if(x++==2 & ++y==2){//x++就是x先运算与2比较,结果不等于,所以是false;++y就是先+1再运算,x原本=1,再+1=2,与2进行比较,所以是true//false & ture结果是(&能false就false)falsex=7;}System.out.println("x = " + x+",y = " + y);}
}class IfText_3{public static void main(String[] args) {boolean b=false;if(b=true){System.out.println("AAAAA");}System.out.println("GameOver");boolean flag=true;if(flag){System.out.println("888888");}System.out.println("GameOver");}
}
class IfText_2{public static void main(String[] args) {int num=2;if(num>10)//使用if时若是没有括号,是对靠近它的第一条语句有作用System.out.println("AAAAA");System.out.println("BBBBB");System.out.println("CXCCC");System.out.println("DDDDD");System.out.println("GameOver");}}
public class IfText1 {public static void main(String[] args) {int age=20;if(age>=18){System.out.println("成年了");}System.out.println("GameOver");}
}

-----闰年判断练习

class IfText2_4{public static void main(String[] args) {//简单的if双分支可以使用三目运算符代替,与IfText2对应int age=45;String s=age>=30?"上年纪了":"还年轻";System.out.println(age+s);int num=19;String s1=num%2!=0?"是奇数":"不是奇数";System.out.println(num+s1);int year=2001;String s2 = year % 400 == 0 || year % 100 != 0 ? "是闰年" : "不是闰年";System.out.println(year+s2);}
}
class IfText2_3{public static void main(String[] args) {/*判断闰年:1、能被400整除2、能被4整除,不能被100整除*/int year=2000;if(year%400==0 || year%4==0 && year%100!=0){System.out.println("是闰年");}else{System.out.println("不是闰年");}System.out.println("GameOver");}
}
class IfText2_2{public static void main(String[] args) {int num=19;String message="";if(num%2!=0){message="是奇数";//  System.out.println(num+"是奇数");}else{message="不是奇数";//  System.out.println(num+"不是奇数");}System.out.println(num+message);}}
public class IfText2 {public static void main(String[] args) {//1、创建键盘输入对象Scanner in = new Scanner(System.in);//2、提示System.out.println("请您输入年龄:");//3、接受int age = in.nextInt();//4、对数据进行校验if(age>=30){System.out.println("上年纪了!");}else{System.out.println("你还年轻!");}//5、关闭资源in.close();}
}

4 . if多分支

if 多分支
if(布尔表达式1){
内容1
}else if(布尔表达式2){
内容2
}else{
内容3
}

    /*如果x>=3, 则y=2*x如果x在[-1,3), 则y=3*x+1如果x<-1, 则y=2*x*/
public class ifText3 {public static void main(String[] args) {int x=2;if(x>=3){System.out.println("y="+2*x);}else if(x>=-1 && x<3){System.out.println("y="+(3*x+1));}else if(x<-1){System.out.println("y="+4*x);}}
}
/*
1.键盘输入一个分数判断分数的等级90~100    A80~89     B70~79     C60~69     D<60       E希望使用一条输出语句展示结果99   A56   E2.大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。如果这三个条件同时满足,则:“我一定要嫁给他!!!”如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”如果三个条件都不满足,则:“不嫁!”*/
class IfIfIfExer3{public static void main(String[] args) {//1.创建键盘输入对象Scanner in = new Scanner(System.in);//2.接收成绩System.out.println("请您输入成绩");int score = in.nextInt();//todo 定义变量记录分数等级String level = "";if (score >= 90 ) {level = "A";} else if (score >= 80 ) {level = "B";} else if (score >= 70) {level = "C";} else if (score >= 60 ) {level = "D";} else {level = "E";}//4.输出结果System.out.println(score + " 等级是 " + level);//5.关闭资源in.close();}
}
class IfIfIfExer2 {public static void main(String[] args) {//1.创建键盘输入对象Scanner in = new Scanner(System.in);//2.接收成绩System.out.println("请您输入成绩");int score = in.nextInt();//todo 定义变量记录分数等级String level = "";//todo 对成绩进行安全校验 满足[0,100]if(score>=0 && score<=100){if(score>=90 && score<=100){level="A";}else if(score>=80 && score<90){level = "B";}else if(score>=70 && score<=79){level = "C";}else if(score>=60 && score<=69){level = "D";}else{level = "E";}//4.输出结果System.out.println(score+" 等级是 "+ level);}else{System.out.println("您的成绩输入有误");}//5.关闭资源in.close();}
}public class IfIfIfExer {public static void main(String[] args) {//1.创建键盘输入对象Scanner in = new Scanner(System.in);//2.获取身高信息System.out.println("请输入您的身高");double height = in.nextDouble();//3.获取财富信息System.out.println("去输入财富");int money = in.nextInt();//4.是否帅的信息System.out.println("是不是很帅");boolean handSome = in.nextBoolean();//5.对各种条件进行校验if(height>1.8 && money>10000000&& handSome==true){System.out.println("我一定要嫁给他!!!");}else if(height>180 || money>10000000|| handSome){System.out.println("嫁吧,比上不足,比下有余");}else{System.out.println("不嫁");}//7.关闭资源in.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2808385.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

网络原理 HTTP _ HTTPS

回顾 我们前面介绍了HTTP协议的请求和响应的基本结构 请求报文是由首行请求头空行正文来组成的 响应报文是由首行形影头空行响应正文组成的 我们也介绍了一定的请求头之中的键值对的属性 Host,Content-type,Content-length,User-agent,Referer,Cookie HTTP协议中的状态码 我们先…

sql-labs第46关(order by盲注脚本)

一、环境 网上有自己找 二、解释 order by 注入我们看他的true和false来进行注入出来 二、实操 让我们用sort 看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username&#xff1a; password&#xff1a; 可以看到顺序是不…

谈谈Redis的哈希槽和一致性哈希

一 . 前言 在 Redis 集群里面主要涉及到两种 Hash 算法 : 一种是一致性哈希 , 这种算法在 适用dis Cluster方案中并没有实现,主要在外部的代理模式 (Twemproxy)一种是 Slot 哈希槽算法 ,这种算法就是 Cluster 的核心算法所以谈到这个问题的时候,不能只讲一部分。在 Red…

simpleini开源库使用

源码下载&#xff1a;GitHub - brofield/simpleini: Cross-platform C library providing a simple API to read and write INI-style configuration files 1.加载simpleini库 下载后解压 2.simpleini库的简单使用 &#xff08;1&#xff09;加载ini文件 // 定义ini文档对象…

第10届蓝桥杯Scratch图形化编程 选拔赛初级组编程题1:小猫走城堡

准备工作: 导入育最库中的“Castle 3 小猫从坐标点(-165&#xff0c;-93)出发向城堡走去。随着位置的移动&#xff0c;角色大小逐渐变小&#xff0c;最后在城堡前消失。注意1.角色大小在逐渐变化&#xff0c;运行结束再次点击绿旗&#xff0c;程序应还能再次扶行。2.角色应该是…

大数据信用查询一般能查到什么?这几点要清楚

大数据信用查询一般能查到什么?当我们谈论大数据信用查询时&#xff0c;我们不只是查看一些干瘪的数据&#xff0c;而是深入探索了一个人的大数据信用特征。这些查询结果为我们提供了一个全面的、多维度的个人信用画像&#xff0c;本文带大家详细了解一下&#xff0c;一起去看…

STM32F103学习笔记(六) RTC实时时钟(原理篇)

目录 1. RTC简介 2. STM32F103的RTC模块概述 2.1 RTC模块的基本原理 2.2 RTC的工作原理 2.3 备份寄存器的功能和特点 2.4 RTC的工作流程 3. RTC的常见应用场景 4. 常见问题与解决方案 1. RTC简介 实时时钟&#xff08;RTC&#xff09;是嵌入式系统中的一种重要组件&…

ThreadLocal“你”真的了解吗?(二)

《ThreadLocal“你”真的了解吗&#xff1f;&#xff08;一&#xff09;》这篇文章梳理了ThreadLocal的基础知识&#xff0c;同时还梳理了java中线程的创建方法以及这两者之间的关系&#xff0c;本篇文章我们将继续梳理与ThreadLocal相关&#xff0c;在上一节也提过的另一组件T…

函数——递归6(c++)

角谷猜想 题目描述 日本一位中学生发现一个奇妙的 定理&#xff0c;请角谷教授证明&#xff0c;而教授 无能为力&#xff0c;于是产生了角谷猜想。 猜想的内容&#xff1a;任给一个自然数&#xff0c; 若为偶数则除以2&#xff0c;若为奇数则乘 3加1&#xff0c;得到一个新的…

深入理解JS的执行上下文、词法作用域和闭包(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

mvn版本导致的Failed to execute goal on project问题与解决

目录 一&#xff0c;报错情况与原因二&#xff0c;maven的下载与安装1&#xff0c;卸载maven2&#xff0c;安装mvn3&#xff0c;指定mvn的默认版本&#xff1a; 一&#xff0c;报错情况与原因 使用命令mvn package时会报如下错误&#xff1a; Failed to execute goal on proj…

prometheus+grafana监控nginx的简单实现

1.编译安装NGINX 加入编译安装nginx-module-vts模块,目的是为了获取更多的监控数据(虚拟主机&#xff0c;upstream等) nginx下载 http://nginx.org/download/nginx-1.20.2.tar.gz nginx-module-vts下载 https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2…

9.5K Star,又一款超棒开源轻量自动化运维平台

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 一个好的运维平台就变得非常重要了&#xff0c;可以节省大量的人力和物…

冯诺依曼体系结构 与 操作系统

一、冯诺依曼体系结构 深入理解冯诺依曼体系结构 计算机的出现就是为了解决实际问题, 所以把问题交给计算机&#xff0c;计算机经过处理&#xff0c;得到一个结果反馈给我们&#xff0c;所以这中间就必然涉及到了输入设备&#xff0c;中央处理器(包括运算器和控制器)和输出设备…

【读后感】《枪炮、病菌与钢铁》人类社会的命运

初看这个书名其实感到困惑&#xff0c;风马牛不相及的三个名词怎么就凑到一起了&#xff0c;这书是讲什么的。 先说结论&#xff0c;讲的是人类历史&#xff0c;具体是1.3万年前开始至今的历史以及现代世界格局的形成&#xff0c;1.3万年前从这个时间节点以后&#xff0c;不论…

勇宝趣学JavaScript ES6第二章(解构赋值)

在ES6中&#xff0c;我们经常使用到解构赋值这个知识点&#xff0c;今天我们就来好好讲讲这一小部分知识点。咱们争取这回一次性讲明白。 今天是元宵节&#xff0c;祝大家节日快乐&#xff0c;只有我自己还在无聊的码字。 给我点个赞吧&#xff0c;嘿嘿&#xff01;&#xff01…

MySQL数据库进阶第四篇(视图/存储过程/触发器)

文章目录 一、视图简单介绍与基础语法二、视图的检查选项三、视图的更新四、视图的作用五、存储过程的概念与特点六、存储过程的 创建&#xff0c;调用&#xff0c;查看&#xff0c;删除七、存储过程 — 系统变量八、存储过程 — 用户定义变量九、存储过程 — 局部变量十、存储…

acwing算法学习笔记 ------ 双链表

1、定义 这里可以做一个投机取巧&#xff0c;我们不再像单链表去用head去存头和尾&#xff0c;直接让r[0] 1,l[1] 0; idx 2.进行初始化&#xff0c; 解释一下l[N] 和 r[N] l[N]:是表示指向左面下一个节点下标&#xff0c; r[N]:表示指向下一个节点的下标。大家不用担心i…

[VNCTF2024]-PWN:shellcode_master解析(orw,用mmap代替read读文件)

查看保护 查看ida 在sandbox函数中&#xff0c;函数先使用了seccomp_init初始化&#xff0c;允许了所有系统调用&#xff0c;再用seccomp_rule_add来禁用掉了部分系统调用&#xff0c;其中包括execve和read seccomp_init函数可以进行系统调用全禁用和全允许初始化 seccomp_ru…

《高质量的C/C++编程规范》学习

目录 一、编程规范基础知识 1、头文件 2、程序的板式风格 3、命名规则 二、表达式和基本语句 1、运算符的优先级 2、复合表达式 3、if语句 4、循环语句的效率 5、for循环语句 6、switch语句 三、常量 1、#define和const比较 2、常量定义规则 四、函数设计 1、参…