Java学习之路001——基础语法以及IDEA的基础使用

news2024/11/25 23:20:53

【说明】以下内容,选取于网上搜索进行的排版。如有冲突,请联系作者删除。

一、第一个Hello World程序

1.1 开发工具介绍

  • eclipse

  • IntelliJ IDEA 

1.2 案例开发步骤

  • 首先定义一个类class 类名

  • 在类定义后加上一对大括号{}

  • 在大括号中间添加一个主(main)方法/函数public static void main(String [] args){ }

  • 在主方法的大括号中间添加一行输出语句System.out.println(“hello world”);

  • 完整源码

public class HelloWorld {
    public static void main(String [] args) {
        System.out.println(“Hello World”);
    }
}

1.3 程序解析

  • 首先编写java源代码程序,扩展名.java

  • 在命令行模式中,输入javac命令对源代码进行编译,生成字节码文件javac  源文件名.java

  • 编译完成后,如果没有报错信息,输入java命令对class字节码文件进行解释运行,执行时不需要添加.class扩展名java HelloWorld

1.4 常见错误

  • 文件扩展名隐藏导致编译失败

  • class写错 Class claas…

  • 类名格式有问题 暂时全部使用英文

  • 类名后面的大括号匹配不正确

  • main方法格式错误 public static void main(String [] args){ }

  • main方法大括号缺失

  • 打印语句拼写错误 System.out.println(“”);

引号使用错误,使用成中文全角引号

二、关键字,标识符,注释

2.1 关键字

  • 关键字概述被Java语言赋予特定含义的单词

  • 词关键字特点组成关键字的字母全部小写

  • 关键字注意事项goto和const作为保留字存在,目前并不使用类似Notepad++,eclipse,IntelliJ IDEA开发工具,针对关键字有特殊的颜色标记,非常直观

2.1.1 常见关键字

用于定义数据类型的关键字

class

interface

byte

short

int

long

float

double

char

boolean

void

用于定义数据类型值的关键字

true

false

null

用于定义流程控制的关键字

if

else

switch

case

default

while

do

for

break

continue

return

用于定义访问权限修饰符的关键字

private

protected

public

用于定义类,函数,变量修饰符的关键字

abstract

final

static

synchronized

用于定义类与类之间关系的关键字

extends

implements

用于定义建立实例及引用实例,判断实例的关键字

new

this

super

instanceof

用于异常处理的关键字

try

catch

finally

throw

throws

用于包的关键字

package

import

其他修饰符关键字

native

strictfp

transient

volatile

assert

2.2 标识符

  • 标识符概述就是给类,接口,方法,变量等起名字时使用的字符序列

  • 组成规则

    • 英文大小写字母

    • 数字字符

    • $和_

  • 注意事项

    • 不能以数字开头

    • 不能是Java中的关键字

    • 区分大小写

  • 包(其实就是文件夹,用于解决相同类名问题)单级和多级分别举例

function 功能包

function.util 功能公共功能包

  • 类或者接口一个单词和和多个单词分别举例

Hello

class HelloWorld 类的首字母是大写的

interface IHello

helloWorld 变量首字母是小写的

  • 方法和变量一个单词和和多个单词分别举例

  • 常量一个单词和和多个单词分别举例

常量所有字母都是大写的,多个单词直接使用"_"连接

NAME = “Wesky”

PERSON_NAME = "Wesky";

2.3 注释

2.3.1 注释概述

  • 注释是一个程序员必须要具有的良好的编程习惯。

  • 初学者编写程序可以养成习惯:先写注释再写代码。

  • 将自己的思想通过注释先整理出来,再用代码去体现。

  • 因为代码仅仅是思想的一种体现形式而已。

2.3.2 Java中注释分类格式

  • 单行注释格式: // 注释文字

  • 多行注释

格式: /*  注释文字  */
/*
多行注释
多行注释
多行注释
多行注释
*/
  • 文档注释

格式:/** 注释文字 */
/**
  *  文档注释
  *
  *
  */

三、常量

3.1 常量概述

在程序执行的过程中其值不可以发生改变

变量: int a = 10 a = 20 (√)

常量: a = 10 a = 20 (×)

3.2 Java中常量分类

字面值常量​ 自定义常量

3.3 常见常量形式

  • 字符串常量 用双引号括起来的内容  "Gerry"

  • 整数常量 所有整数122 ,  23

  • 小数常量 所有小数12.56,  36.78

  • 字符常量 用单引号括起来的内容‘a’,’A’,’0’

  • 布尔常量 较为特有,只有true和false

  • 空常量 null(数组部分讲解)

3.3.1 整数常量提供了4种表现形式

3.3.1.1 进制概述 1~9 = 10

进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制--X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。 

  • 二进制 二进制的2 => 10 

  • 八进制 八进制的8 = >10

  • 十进制 十进制的10 = > 10

  • 十六进制 十六进制的16 = > 10

3.3.1.2 不同进制的数据组成

  • 二进制 由0,1组成。以0b开头

  • 八进制 由0,1,…7组成。以0开头

  • 十进制 由0,1,…9组成。整数默认是十进制的

  • 十六进制由0,1,…9,a,b,c,d,e,f(大小写均可)。以0x开头

3.3.1.3 进制转换

  • 其他进制到十进制通过十进制推出结论把0b100, 0100, 0x100转换成十进制

  • 十进制到其他进制通过十进制推出结论把47分别表示成二进制,八进制,十六进制

3.3.1.4 进制快速转换

  • 十进制和二进制的快速转换8421码100转成二进制101101转成十进制

  • 二进制和八进制,十六进制如何转换

  • 以十进制作为桥梁

  • 二进制到八进制 3位组合100110

  • 二进制到十六进制 4位组合100110

3.3.1.5 有符号数据表示法

  • 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。

  • 原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

  • 反码正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

  • 补码正数的补码与其原码相同;负数的补码是在其反码的末位加1。

总结:

十进制变二进制:原码--反码--加一(补码);

二进制变十进制:减一--反码--原码。

四、变量和数据类型

4.1 变量

4.1.1 变量概述

在程序执行的过程中,在某个范围内其值可以发生改变的量

4.1.2 变量定义格式

数据类型 变量名 = 初始化值;

注意:格式是固定的,记住格式,以不变应万变

总结:1:从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须要先申请(声明),然后必须进行赋值(填充内容),才能使用。2:为什么要定义变量呢 用来不断的存放同一类型的常量,并可以重复使用

int number = 100;

number = 20;

number =1;

4.2 数据类型

4.2.1 数据类型概述

Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间

4.2.2 Java数据类型种类

4.2.3 数据类型占用的存储空间及默认值

注意: Java中提到的整数都是int类型,提到的小数都是double类型。

4.2.4 注意事项

  • 作用域 变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。

  • 初始化值没有初始化值不能直接使用

  • 在一行上建议只定义一个变量可以定义多个,但是不建议

4.2.5 数据类型的转换

4.2.5.1 默认转换(从小的数据类型到大的数据类型)

  • byte,short,char-int-long-float-double

  • byte,short,char相互之间不转换,它们参与运算首先转换为int

4.2.5.2 强制转换(从大的数据类型到小的数据类型)

格式: 目标数据类型 变量 = (目标数据类型)被转换的数据

五、运算符

5.1 算术运算符

操作符

描述

例子

+

加法 - 相加运算符两侧的值

A + B 等于 30

-

减法 - 左操作数减去右操作数

A – B 等于 -10

*

乘法 - 相乘操作符两侧的值

A * B等于200

/ 取商

除法 - 左操作数除以右操作数

B / A等于2

% 取余数

取余 - 左操作数除以右操作数的余数

B%A等于0

++

自增: 操作数的值增加1

B++ 或 ++B 等于 21

--

自减: 操作数的值减少1

B-- 或 --B 等于 19

5.2 赋值运算符

操作符

描述

例子

=

简单的赋值运算符,将右操作数的值赋给左侧操作数

C = A + B将把A + B得到的值赋给C

+ =

加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数

C + = A等价于C = C + A

- =

减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数

C - = A等价于C = C - A

* =

乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数

C * = A等价于C = C * A

/ =

除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数

C / = A,C 与 A 同类型时等价于 C = C / A

(%)=

取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数

C%= A等价于C = C%A

<< =

左移位赋值运算符

C << = 2等价于C = C << 2

>> =

右移位赋值运算符

C >> = 2等价于C = C >> 2

&=

按位与赋值运算符

C&= 2等价于C = C&2

^ =

按位异或赋值操作符

C ^ = 2等价于C = C ^ 2

| =

按位或赋值操作符

C | = 2等价于C = C | 2

5.3 比较运算符 (true 代表真,false 代表假)

运算符

描述

例子

==

检查如果两个操作数的值是否相等,如果相等则条件为真。

(A == B)为假。

!=

检查如果两个操作数的值是否相等,如果值不相等则条件为真。

(A != B) 为真。

>

检查左操作数的值是否大于右操作数的值,如果是那么条件为真。

(A> B)为假。

<

检查左操作数的值是否小于右操作数的值,如果是那么条件为真。

(A <B)为真。

>=

检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。

(A> = B)为假。

<=

检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。

(A <= B)为真。

5.4 逻辑运算符

操作符

描述

例子

&&

称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。

(A && B)为假。

| |

称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。

(A | | B)为真。

称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。

!(A && B)为真。

5.5 位运算符

操作符

描述

例子

如果相对应位都是1,则结果为1,否则为0

(A&B),得到12,即0000 1100

|

如果相对应位都是 0,则结果为 0,否则为 1

(A | B)得到61,即 0011 1101

^

如果相对应位值相同,则结果为0,否则为1

(A ^ B)得到49,即 0011 0001

按位取反运算符翻转操作数的每一位,即0变成1,1变成0。

(〜A)得到-61,即1100 0011

<<

按位左移运算符。左操作数按位左移右操作数指定的位数。

A << 2得到240,即 1111 0000

>>

按位右移运算符。左操作数按位右移右操作数指定的位数。

A >> 2得到15即 1111

>>>

按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

A>>>2得到15即0000 1111

5.6 三目运算符

  • 格式 (关系表达式)?表达式1:表达式2;

    • 如果条件为true,运算后的结果是表达式1;

    • 如果条件为false,运算后的结果是表达式2;

5.6.2 接收键盘输入数据

  • 导入Scanner包 import java.util.Scanner;

  • 创建对象 Scanner scanner = new Scanner(System.in);

  • 接收数据: int data = scanner.netInt();

5.7 测试代码

public class Test {
    public static void main(String[] args) {
    	int num1 = 10;
	int num2 = 20;
	/ 算术运算符 /
	System.out.println("num1 + num2 = "+ (num1 + num2));
	System.out.println("num1 - num2 = "+ (num1 - num2));
	System.out.println("num1 * num2 = "+ (num1 * num2));
	System.out.println("num1 / num2 = "+ (num1 / num2));
	System.out.println("num1 % num2 = "+ (num1 % num2));
	// ++ 在变量的前面,先计算结果后再输出
 	// ++ 在变量的后面,先输出在计算
	System.out.println("num1++ = "+ (num1++)); // 10
	System.out.println("++num1 = "+ (++num1)); // 12
	// -- 在变量的前面,先计算结果后再输出
 	// -- 在变量的后面,先输出在计算
	System.out.println("num2-- = "+ (num2--)); // 20
	System.out.println("--num2 = "+ (--num2)); // 18
	/ 赋值运算符 /
	// 赋值符:"="
	int num3 = 25;
	System.out.println("num3+=4 =>"+(num3=num3+4)); // 29
	System.out.println("num3 -=10 =>"+(num3=num3-10)); // 19
	System.out.println("num3 *=2 =>"+(num3=num3*2)); // 38
	System.out.println("num3 /=4 =>"+(num3=num3/4)); // 9
	System.out.println("num3 %=2 =>"+(num3=num3%2)); // 1
	System.out.println("num3 <<= 2 =>"+(num3=num3 << 2)); // 0001 => 0100 => 4
	System.out.println("num3 >>= 2 =>"+(num3=num3 >> 2)); // 0100 => 0001 => 1
	/ 比较运算符 /
	num1 = 60;
	num2 = 60;
	System.out.println("num1="+num1 + ", num2 =" + num2);
	System.out.println("num1 == num2 =>" +(num1 == num2));
	System.out.println("num1 != num2 =>" +(num1 != num2));
	System.out.println("num1 > num2 =>" +(num1 > num2));
	System.out.println("num1 < num2 =>" +(num1 < num2));
	System.out.println("num1 >= num2 =>" +(num1 >= num2));
	System.out.println("num1 <= num2 =>" +(num1 <= num2));
	/ 逻辑运算符 /
	// 总结:
	// 1、逻辑与: && 连接的每一个比较运算结果为true,结果才是真(true)
	// 2、逻辑或: || 连接的每一个比较运算的结果中有一个为true,结果就是真(true)
	// 3、逻辑非:  ! 将整过比较运算的结果取反,就是运算结果为false,取反就是真(true)
	System.out.println("num1 <= num2  && num1 < num2=>" +(num1 <= num2  && num1 < num2));
	System.out.println("num1 <= num2  || num1 < num2=>" +(num1 <= num2  || num1 < num2));
	System.out.println("num1 <= num2  && num1 < num2=>" +(!(num1 <= num2  && num1 < num2)));
	/// 位移运算 
	// &: 相对应位数为1,才为1,否则就是0
	//  | : 相对应位数是0才为0,否则都是1
	// ^: 相对应位数是 0 1 或者 1 0 才是1,否则就是0
	// ~: 对应位数的0变1,1变0
	// <<: 向左移动实际就是在原有的数基础上乘以2多次幂的倍数, 7 << 3 => 7x 2 ^ 3 = 56
	// >>: 向右移动实际就是在原理数的基础上除以2多少次幂的倍数 7 / (2^2) = 1
	// >>>: 最高位的符号位,0表示正数,1代表负数,
	// >>   1000 1111   => 1000 0011
	// >>> 1000 1111 =>   0010 0011
	int a = 5;
	int b = 7;
	int c = -9;
	System.out.println("a & b =>" +(a & b)); // 
	System.out.println("a  |  b =>" +(a | b));
	System.out.println("a ^ b =>" +(a^b));
	System.out.println("~a=>" +(~a));
	System.out.println("b << 3=>" +(b << 3));
	System.out.println("b  >> 2=>" +(b >> 2));
	System.out.println("c >>> 2=>" +(c >>> 2));
	// 三目运算符 /
	a = 10;
	System.out.println(a > 5 ? "a大于5" :"a小于5");
    }
}

七、流程控制语句

7.1 概述

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

7.2 流程控制语句分类

  • 顺序结构

  • 选择结构

  • 循环结构

7.2.1 顺序结构概述

是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。总的来说:写在前面的先执行,写在后面的后执行

7.2.1.1 顺序结构图

7.2.2 选择结构

  • 也被称为分支结构。

  • 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

  • Java语言提供了两种选择结构语句if语句switch语句

7.2.2.1 if语句

if语句有三种格式

if语句 第一种格式:

if(关系表达式) {

语句体; 

}

  • 执行流程

    • 首先判断关系表达式看其结果是true还是false

    • 如果是true就执行语句体

    • 如果是false就不执行语句体

if语句 第二种格式

if(关系表达式) {

语句体1;

}else {

语句体2;

}

  • 执行流程

    • 首先判断关系表达式看其结果是true还是false

    • 如果是true就执行语句体1

    • 如果是false就执行语句体2

  • 我们前面讲解过三元运算符,它根据比较判断后,给出的也是两个结果,所以,这种情况和if语句的第二种格式很相似,他们在某些情况下应该是可以相互转换的。

  • if语句第二种格式和三元运算符

    • 三元运算符的操作都可以使用if语句改进,反之不成立

    • 什么时候不成立呢?

      • 当if语句控制的语句体是一条输出语句的时候,就不成立。因为三元运算符是一个运算符,必须要求有一个结果返回。而输出语句却不能作为一个返回结果。

if语句 第三种格式

if(关系表达式1) {

语句体1;

}else  if (关系表达式2) {

语句体2;

}    

else {

语句体n+1;

}

  • 执行流程

    • 首先判断关系表达式1看其结果是true还是false

    • 如果是true就执行语句体1

    • 如果是false就继续判断关系表达式2看其结果是true还是false

    • 如果是true就执行语句体2

    • 如果是false就继续判断关系表达式…看其结果是true还是false…

    • 如果没有任何关系表达式为true,就执行语句体n+1。

7.2.2.2 switch语句

JDK8及以前写法

switch(表达式) {

      case 值1:

语句体1;

break;

  case 值2:

语句体2;

break;

    …   

default:

语句体n+1;

break;   

 }

JDK14以及以上的写法

不带返回值

switch(表达式) { 

   case 值1,值2,值3 -> 语句体1; 

   case 值4,值5,值6 -> 语句体2; 

    case 值7 -> 语句体3;

}

通过yield返回一个新值

String result = switch(表达式) { 

   case 值1,值2,值3 -> 语句体1; yield 返回值1; 

   case 值4,值5,值6 -> 语句体2; yield 返回值2;  

   case 值7 -> 语句体3; yield 返回值3;

}

7.3 循环结构

7.3.1 概述

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

7.3.2 循环语句的组成

  • 初始化语句:一条或者多条语句,用这些语句完成一些初始化操作。

  • 判断条件语句:这是一个boolean 表达式,这个表达式能决定是否执行循环体。

  • 循环体语句:这个部分是循环体语句,也就是我们要多次做的事情。

  • 控制条件语句:这个部分在一次循环体结束后,在下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束。

7.3.3 for循环语句格式

for(初始化语句;判断条件语句;控制条件语句) {          循环体语句;    }

  • 执行流程

    • A:执行初始化语句

    • B:执行判断条件语句,看其结果是true还是false如果是false,循环结束。如果是true,继续执行。

    • C:执行循环体语句

    • D:执行控制条件语句

    • E:回到B继续

7.3.4 循环流程图

7.4 while循环

  • 基本格式

while(判断条件语句) {

      循环体语句; 

}

  • 扩展格式

初始化语句;

while(判断条件语句) { 

     循环体语句;   

     控制条件语句; 

 }

7.4.1 while循环流程

7.4.2 do...while循环

  • 基本格式

do {      

循环体语句;

}while(判断条件语句);

  • 扩展格式

初始化语句;

do {      

循环体语句;      

控制条件语句;

 } while(判断条件语句);

7.4.2.1 do...while循环流程图

7.5 跳转控制语句

前面我们已经说过了,Java中的goto是保留字,目前不能使用。虽然没有goto语句可以增强程序的安全性,但是也带来很多不便,比如说,我想在某个循环知道到某一步的时候就结束,现在就做不了这件事情。为了弥补这个缺陷,Java就提供了break,continue和return来实现控制语句的跳转和中断。

  • break 中断

  • continue 继续

  • return 返回 

7.5.1 跳转控制语句(break)

7.5.1.1 break的使用场景

  • 在选择结构switch语句中

  • 在循环语句中

离开使用场景的存在是没有意义的

7.5.1.2 break的作用

  • 跳出单层循环

  • 跳出多层循环

    • 带标签的跳出

    • 格式:标签名: 循环语句

    • 标签名要符合Java的命名规则

7.5.2 跳转控制语句(continue)

7.5.2.1 continue的使用场景

  • 在循环语句中

  • 离开使用场景的存在是没有意义的

7.5.2.2 continue的作用

  • 单层循环对比break,然后总结两个的区别

    • break 退出当前循环

    • continue 退出本次循环

7.5.3 跳转控制语句(return)

return关键字不是为了跳转出循环体,更常用的功能是结束一个方法,也就是退出一个方法。跳转到上层调用的方法。这个在方法的使用那里会有详细的讲解。

八、数组

8.1 创建数组

// 创建数组: 数据类型 数组名[] = new 数据类型[长度];
int[] numbers = new int[5];
// 赋值 通过下标
numbers[2] = 100;
numbers[1] = 20;
// 获取数组中指定元素的值  数组名称[index]   index:下标 0 ~ 数组长度-1
int firstElement = numbers[1];
// 输出快捷键  sout
System.out.println(firstElement);

// 静态创建: 创建数组同事为元素赋值
int[] nums = new int[]{11,3,2,32,42};
// 简单写法
int[] ages  = {32,32,52,52,43};
//int [] ages1 = null;
//ages1 = {1,2,33,2};
// 通过length获取数组元素个数
System.out.println(nums.length);

8.2 遍历数组

// for循环快捷键 nums.fori + enter
for (int i = 0; i < nums.length; i++) {
    System.out.println(nums[i]);
}
System.out.println("========================");
// foreach  numbers.for + + enter
for (int number : numbers) {
    System.out.println(number);
}

8.3 二维数组

// 二维数组
int[][]  table = new int[3][3];
table[0][0] = 10;
table[0][1] = 20;
table[0][2] = 30;
// 看静态初始化
int[][] table1 = {{1,2,3},{2,3,4},{2,2}};

8.4 二维数组遍历

// 二维数组的遍历
for (int[] els : table1) {
    for (int el : els) {
        System.out.print(el+"\t");
    }
    System.out.println();
}

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

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

相关文章

别克GL8改装完工,一起来看看效果

①豪华商务头等舱 别克GL8作为商务车&#xff0c;不管是家用还是商务接待&#xff0c;原车内饰都太掉档次了&#xff0c;所以车主要求全部换掉。>>织布座椅换成航空座椅 主副驾&#xff1a;改装纳帕皮 中排&#xff1a;改装水晶宝座豪华版航空座椅&#xff0c;带通风、加…

Dataway 让 Spring Boot 不再需要 Controller、Service、DAO、Mapper 简单接口直接开发。

新的sql语法可以先看一下官网&#xff0c;部署起来之后会用到Dataql&#xff1a; DataQL - 数据查询语言https://www.dataql.net/先看一下效果 接下来来实现一下。 1 创建spring boot项目 导入依赖 <!--begin dataWay--><!--hasor-spring 负责 Spring 和 Hasor 框架之…

【操作系统】进程管理

进程与线程 1. 进程 进程是资源分配的基本单位 进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态&#xff0c;所谓的创建进程和撤销进程&#xff0c;都是指对 PCB 的操作。 下图显示了 4 个程序创建了 4 个进程&#xff0c;这 4 个进程可以并发地执行…

实战|掌握Linux内存监视:free命令详解与使用技巧

文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出四. free在脚本中的应用总结前言 大家…

LAMP项目部署实战2

部署Discuz!论坛 一、Discuz&#xff01;论坛概述&#xff1a; 1&#xff09;Discuz&#xff01;论坛是基于phpmysql进行开发的一套开源的论坛系统。 2&#xff09;下载源代码&#xff1a; 下载地址&#xff1a;码云DiscuzX: Discuz! X 官方 Git&#xff0c;简体中文 UTF8 版…

2023年,35岁测试工程师只能被“优化裁员”吗?肯定不是····

国内的互联网行业发展较快&#xff0c;所以造成了技术研发类员工工作强度比较大&#xff0c;同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高&#xff0c;超过35岁的基层研发类员工&#xff0c;往往因为家庭原因、身体原因&#xff0c;比较难以跟得上工作…

mongo数据备份

目录1. mongo单机安装2. mongo(replica set)部署3. mongodump 与 mongorestore工具使用4.rsync工具使用服务端配置客户端配置客户端推送与拉取文件5. 完整mongo全量备份脚本恢复全量备份数据6. 完整mongo增量备份脚本(基于oplog)恢复增量备份数据7.备份策略1. mongo单机安装 m…

高数:极限的定义

目录 极限的定义&#xff1a; 数列极限的几何意义&#xff1a; 由极限的定义得出的极限的两个结论&#xff1a; ​编辑 极限的第三个结论&#xff1a; 例题 方法1&#xff1a; ​编辑 方法2&#xff1a; ​编辑 方法3&#xff1a; ​编辑 极限的定义&#xff1a; 如何理…

JDK8常用新特性的原理与代码演示

Lambda Lambda 表达式&#xff0c;也可称为闭包&#xff0c;Lambda 允许把函数作为一个方法的参数。 格式 (参数列表) -> {代码块} (parameters) -> expression 或 (parameters) ->{ statements; }前置条件 lambda表达式是一段执行某种功能的代码块&#xff0c;需要…

数据结构与算法——4时间复杂度分析2(常见的大O阶)

这篇文章是时间复杂度分析的第二篇。在前一篇文章中&#xff0c;我们从0推导出了为什么要用时间复杂度&#xff0c;时间复杂度如何分析以及时间复杂度的表示三部分内容。这篇文章&#xff0c;是对一些常用的时间复杂度进行一个总结&#xff0c;相当于是一个小结论 1.常见的大O…

ESFP型人格的特征,ESFP型人格的优势和劣势分析

ESFP型人格的特征ESFP&#xff08;表演者型人格&#xff09;是人群中的开心果。他们外向&#xff0c;友善&#xff0c;包容&#xff0c;有他们在的地方总是充满着活泼的氛围。ESFP对于新的朋友&#xff0c;新的环境适应良好&#xff0c;他们是完完全全的社交动物&#xff0c;对…

【数据库原理 | MySQL】一文打通 DDL语句

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 书接上文介绍了数据库的前世今生&#xff0c;本文讲解SQL语句中的DDL语句 文章目录二、SQL2.1 SQL通用语法2.2 SQL的分类三、 …

I.MX6ULL_Linux_系统篇(19) kernel编译及Makefile分析

Linux 内核 Linux 由 Linux 基金会管理与发布&#xff0c; Linux 官网为 https://www.kernel.org&#xff0c;所以你想获取最新的Linux 版本就可以在这个网站上下载&#xff0c;网站界面如图所示&#xff1a; 从图中可以看出最新的稳定版 Linux 已经到了 6.2&#xff0c;NXP …

Python常用标准库-sys库一文详解

目录 前言 一、Sys库概述 二、Sys查看版本信息 1.sys.version获取Python版本信息 2.sys.api_version获取解释器中C的API版本 3.sys.getwindowsversion系统功能版本 4.sys.hexversion()获取Python解释器的版本值 5.sys.implementation获取当前正在运行的Python解释器的实现…

Redis源码---如何实现一个性能优异的Hash表

目录 前言 Redis 如何实现链式哈希&#xff1f; 什么是哈希冲突&#xff1f; 链式哈希如何设计与实现&#xff1f; Redis 如何实现 rehash&#xff1f; 什么时候触发 rehash&#xff1f; rehash 扩容扩多大&#xff1f; 渐进式 rehash 如何实现&#xff1f; 前言 Hash …

数据处理 |遍历所有文件夹及子目录文件夹方法总结与实例代码详解

深度学习中不可避免的数据预处理~1. glob.glob()方法 2. pathlib中的Path方法3. os.walk()方法1. glob.glob()方法 语法glob.glob(pathname)&#xff08;多指定文件类型&#xff0c;查找jpg,png,txt,json等&#xff09;缺点&#xff1a;查找文件较慢2. 路径操作库pathlib中的Pa…

【计算机三级网络技术】 第四篇 路由设计技术基础

文章目录一、分组转发二、路由选择1.理想的路由算法的基本特征2.路由算法的度量标准3.路由算法分类&#xff1a;4.IP路由选择与路由汇聚(重点)三、自治系统与Internet的路由选择协议1.自治系统2.路由选择协议的分类四、内部网关协议1.RIP的基本概念2.RIP的原理3.RIP的运行过程五…

Android Lmkd 低内存终止守护程序

一、低内存终止守护程序 Android 低内存终止守护程序 (lmkd) 进程可监控运行中的 Android 系统的内存状态&#xff0c;并通过终止最不必要的进程来应对内存压力大的问题&#xff0c;使系统以可接受的性能水平运行。 所有应用进程都是从zygote孵化出来的&#xff0c;记录在AMS…

Android问题笔记 - 打开Android Studio先弹出项目选择框

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断…

leetcode 427. Construct Quad Tree(构建四叉树)

刚看到题的时候是懵的&#xff0c;这也太长了。到底是要表达什么呢。 不妨把这个矩阵看成一个正方形的图片&#xff0c;想象你在处理图片&#xff0c;从整体逐步到局部。 刚开始看一整张图片&#xff0c;如果是全0或全1&#xff0c;这个就是叶子节点&#xff0c;怎么表达叶子节…