JavaSE--基础语法(第一期)

Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和 跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。

(一).数据结构与变量

首先Java的数据结构与变量中的知识主要包括字面常量,数据类型和变量三部分,接下来我们来一一了解。

1.1.字面常量

字面常量其实就和我们c语言中的字面常量相同,指的是,System.out.println("hello world");这段输出语句中的hello world,即是常量即程序运行期间,固定不变的量称为常量。

例如:

这里面的20,3.14,hello world,A,true,false都是字面常量,根据上面这些例子我们就可以给字面常量分类,有:

 1. 字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。

2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000

3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49

4. 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’

5. 布尔常量:只有两种true和false

6. 空常量:null

以上就是关于字面常量的内容,下面我们来了解数据类型的知识。

1.2.数据类型

Java中数据类型分为基本数据类型引用数据类型两种。

基本数据类型:整型,字符型,浮点型,布尔型

种类:八种

注意: 

1.不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节

2.整形和浮点型都是带有符号的

3.整型默认为int型,浮点型默认为double

4.字符串属于引用类型,该中类型后序介绍。

以上就是关于数据结构的知识下面我们来了解关于变量的知识。

1.3.变量

在Java中我们除了有一些不变的字面常量,当然还有可变的量,这些在Java中称之为变量,数据类型就是用来定义不同种类变量的。

语法结构:

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

例如:

这些等等都是数据结构变量。介绍完变量的概念之后我们来了解关于具体的几种变量。

1.3.1.整型变量

1.3.1.1整型变量

整型变量是int类型定义的变量,具体代码形式如下:

总结注意:

1. int不论在何种系统下都是4个字节

2. 推荐使用方式一定义,如果没有合适的初始值,可以设置为0

3. 在给变量设置初始值时,值不能超过int的表示范围,否则会导致溢出

4. 变量在使用之前必须要赋初值,否则编译报错

5. int的包装类型为 Integer 

1.3.1.2.长整型变量

长整形变量指的是用long类型来定义的变量,具体代码形式如下:

 注意事项:

1. 长整型变量的初始值后加L或者l,推荐加L

2. 长整型不论在那个系统下都占8个字节

3. 长整型的表示范围为: 见上图

4. long的包装类型为Long

1.3.1.3.短整型变量

短整型就是指的是short类型定义的变量,具体代码如下:

下面箭头指向的时short类型的范围。

注意事项:

1. short在任何系统下都占2个字节

2. short的表示范围为:-32768 ~ 32767

3. 使用时注意不要超过范围(一般使用比较少)

4. short的包装类型为Short 

1.3.1.4字节型变量

字节型变量指的是被byte定义的变量,具体代码如下:

注意事项:

1. byte在任何系统下都占1个字节

2. byte的范围是:-128 ~ 127

3. 字节的包装类型为Byte

 思考我们为什么要定义四种不同的整型变量?

我们可以联想到我们买衣服时要挑选不同尺寸的衣服才能让衣服和人的尺寸刚好合适,同样整型变量也是如此,我们定义不同的整型变量这样我们就可以不浪费资源和空间。

1.3.2.浮点型变量

1.3.2.1.双精度浮点型

双精度浮点型指的是被double修饰的变量。具体代码形式如下:

这里左下角大家知道为什么是这个?以下注意事项会告诉大家答案

注意事项:

1. double在任何系统下都占8个字节

2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算

3. double的包装类型为Double

4. double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。

1.3.2.2.单精度浮点型

float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数 都优先考虑 double, 不太推荐使用 float. float的包装类型为Float。

1.3.3.字符型变量

 注意事项:

1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值.

2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此 一个字符占用两个字节, 表示的字符种类更多, 包括中文.

3. char的包装类型为Character。

1.3.4.布尔型变量

布尔变量可能大家听起来很陌生,但是它真的无时无刻都与我们息息相关,比如当听到有人彩票中了几百万,我们可能会想真的假的?比尔变量就是表示真假的一个条件语句变量。例如:

注意事项: 

1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.

2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.

3. Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在 Oracle公司的虚拟机实现中,boolean占1个字节。

4. boolean的包装类型为Boolean。

1.4.类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.

例如:

 这里面就体现了Java语言的严格性,int类型的可以给long类型的变量赋值,而long类型的变量不可以给int类型的变量赋值,这是为什么呢?我们可以通过以下的学习来了解。

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐 式) 和 强制类型转换(显式)。

自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数 据范围大的时会自动进行。

例如:

类型相同时范围小的变量会自动转化为范围大的值在进行赋值等操作,但范围大的变量不能直接向范围小的变量进行赋值等操作。

强制类型转换当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。

例如:

 注意事项:

1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型

2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失

3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查

4. 强制类型转换不一定能成功,不相干的类型不能互相转换

1.5.类型提升

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

int与long之间:int会被提升为long类型

byte与byte之间:

正确写法: 

 

int 转成 String:

 

String 转成 int:

 

以上就是关于数据类型与变量的全部内容。 

(二).运算符

运算符想必大家应该都十分熟悉了吧,但这篇文章中我们要来了解在Java中运算符是怎么用的。

2.1.算术运算符

2.1.1基本四则运算符:加减乘除模(+ - * / %)

 注意:

1.都是二元运算符,使用时必须要有左右两个操作数

2.int / int 结果还是int类型,而且会向下取整,例如:

3.做除法和取模时,右操作数不能为0。

4. % 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的

5.两侧操作数类型不一致时,向类型大的提升

2.1.2.增量运算符 += -= *= %=

增量运算符其实就是一个式子的简写例如:a+=b;其实实际上就是a=a+b;故增量运算符我们可以总结为以下代码,

public static void main(String[] args) {int a = 1;a += 2; // 相当于 a = a + 2System.out.println(a); // 输出3a -= 1; // 相当于 a = a - 1System.out.println(a); // 输出2a *= 3; // 相当于 a = a * 3System.out.println(a); // 输出6a /= 3; // 相当于 a = a / 3System.out.println(a); // 输出2a %= 3; // 相当于 a = a % 2System.out.println(a); // 输出2}

 注意:只有变量才能使用该运算符,常量不能使用。

2.1.3.3. 自增/自减运算符 ++ --

++是给变量的值+1,--是给变量的值-1。

int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3
++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似

注意:

1.如果单独使用,【前置++】和【后置++】没有任何区别

2.如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式 结束时给变量+1

3.只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改 

2.2.关系运算符

关系运算符主要有六个: == != < > = ,其计算结果是 true 或者 false 。代码总结如下:

int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false

 注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的

2.3.逻辑运算符

逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型。

1.逻辑与 &&

逻辑与运算我们可以总结为一句话来概括就是左右两个表达式同时为真时结果为真,当两个表达式有一个为假或者同时为假的三种情况时,结果为假。

例如:

int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假

 2.逻辑 ||

逻辑或运算我们也可以用一句话来概括就是符号左右两个表达式当有一个为真或两个都为真的三种情况时结果为真,当左右两个表达式都为假的时候结果为假。

例如:

int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假

 3. 逻辑非 !

逻辑非其实就是假的非就是真,真的非就是假。

int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true

2.4.位运算符

Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位. 字节是最小的存储单位,每个字节是由8个二 进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。

位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。

位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算.

1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.

int a = 10;
int b = 20;
System.out.println(a & b)

 

 2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.

3.按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0

4. 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

2.5.移位运算

这里的移位为算符是<< >> >>>,这三个分别是左移,右移,无符号右移,

例如:左移

 这里我们有一个诀窍就是怎样计算发生移位之后的值,就是结果=原本值*2^移动的位数。

右移:

 右移的结果值就是n/2^x,就是结果=原本值/2^移动的位数

这里还有一个特殊的无符号右移,

和右移最大的区别就是无符号右移右移之后最高位添零,而右移是右移后最高位添加符号位。 

2.6.条件运算符

这里的条件运算符实际上用我们的话来说就是三目运算符,形式如下:

表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;

当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.

注意:

1.表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换

2.表达式不能单独存在,其产生的结果必须要被使用。

2.7.运算符的优先级

在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如:* 和 / 的优先级要高于 + 和 - ,有些情况下稍不注意,可能就会造成很大的麻烦。

例如:

// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);

 上述表达式中,由于 + 的优先级要高于 >> , 因此a先和b-a的结果做加法,整体为20,最后再进行右移,因此结果 为10。

注意:运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可.

(三).程序逻辑控制  

3.1.顺序结构

顺序结构简而言之就是按照顺序一行一行的写代码,

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
aaa
bbb
ccc

代码的顺序改变,运行结果也随之而改变。 

3.2.分支结构

3.2.1.if语句

语法格式1:

语法格式2: 

语法格式3: 

3.2.2. switch 语句

基本语法:

switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
...
default:{
内容都不满足时执行语句;
[break;]
}
}

执行流程: 

1. 先计算表达式的值

2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束

3. 当表达式的值没有与所列项匹配时,执行default

注意以下一个例子:

注意事项: 

1.多个case后的常量值不可以重复

2.switch的括号内只能是以下类型的表达式:

基本类型:byte、char、short、int,注意不能是long类型

引用类型:String常量串、枚举类型

3.break 不要遗漏, 否则会失去 "多分支选择" 的效果

4.switch 不能表达复杂的条件

3.3.循环结构

3.3.1 while 循环

基本语法格式:

 循环条件为 true, 则执行循环语句; 否则结束循环.

例如:打印1-10的数字

int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}

打印数字5的阶乘

 public static void main(String[] args) {int num=1;int n=1;while(n<=5){num*=n;n++;}System.out.println(num);}

等等很多的这种例子。 

 注意事项:

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { } 2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.

3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.

3.3.2break

break的功能是让循环提前结束。

例如:

这里当出现了图中要求的数字的时候程序遇到break就会跳出循环。

3.3.3. continue

continue 的功能是跳过这次循环, 立即进入下次循环.

例如:找到 100 - 200 中所有 3 的倍数

3.3.4for循环

基本语法:

 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次

表达式2: 循环条件,满则循环继续,否则循环结束

表达式3: 循环变量更新方式

执行过程:

①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②为false,循环结束。

例如:打印1-100的和

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

等等很多地方都会用到for循环的。

注意事项:  

1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }

2. 和 if 类似, for 后面的 { 建议和 while 写在同一行.

3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行.

4. 和while循环一样,结束单趟循环用continue,结束整个循环用break

3.4输入输出

Java中的输入和输出和其他语言的输入输出不一样,接下来让我们看看具体是怎么样的。

3.4.1输出到控制台

基本语法:

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出

1.println 输出的内容自带 \n, print 不带 \n

2.printf 的格式化输出方式和 C 语言的 printf 是基本一致的.

3.4.2从键盘输入

使用 Scanner 读取字符串/整数/浮点数

例如:

好了以上就是我与大家分享的内容,望各位指出小编的不足之处我一定会积极改正的。

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

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

相关文章

基于Docker的ElasticSearch、Kibana服务搭建并开启用户鉴权

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;云原生与服务部署专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 服务搭建 2.1. 部署ElasticSearch 2.2. 部署Kibana 3. …

安全态势管理的六大挑战:态势感知

德迅云安全鉴于如今的安全威胁不断变幻&#xff0c;企业对实施态势管理策略至关重要&#xff0c;可以让安全团队根据需要进行安全策略的动态调整。如果企业在研究构建态势感知管理&#xff0c;需要特别关注以下六个方面的挑战。 如果企业正在使用一个或多个平台&#xff0c;那么…

IS-IS链路状态数据库

原理概述 一个OSPF链路状态数据库是若干条LSA的集合。与此相似&#xff0c;一个IS-IS链路状态数据库是由若干条LSP的集合。与OSPF链路状态数据库不同&#xff0c;IS-IS链路状态数据库有Level-1和Level-2之分。 在IS-IS协议中&#xff0c;每一条LSA都有一条剩余生存时间、一个…

safetensors介绍

1 介绍 safetensors 是 Huggingface 推出的一种可靠、易移植的机器学习模型存储格式&#xff0c;用于安全地存储 Tensor&#xff0c;而且速度很快&#xff08;零拷贝&#xff09;。 safetensors 格式结构&#xff1a; 8 bytes&#xff1a;一个无符号的整数&#xff0c;表示…

Dubbo源码及总结

Springboot整合Dubbo启动解析Bean定义 根据springboot启动原理&#xff0c;会先把启动类下的所有类先进行解析bean定义&#xff0c;所以要先EnableDubbo这个注解&#xff0c;再根据这个注解里面的注解&#xff0c;可以知道import的两个类DubboComponentScanRegistrar和DubboCo…

输入一串字符,输入想要字符串前*的个数n,判断字符串前*的个数是大于n还是小于n,如果大于n则删除多余的*其它保持不变,如果小于n,则字符串也保持不变

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void fun(char* a, int n) {int i 0, j 0, m 0,b0,c0;char* p;p a;//第一步&#xff0c;判断字母前面有多少个*while (p[i] *){j;}printf("字母前*的个数%d\n",j);//求总的字符串长度while (a[m] !…

【全开源】沃德商协会管理系统源码(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0c;有效快速建立…

护眼小贴士:学生如何正确使用台灯?

随着电子设备的普及和长时间的用眼&#xff0c;长时间盯着屏幕或学习&#xff0c;眼睛需要不断调节焦距&#xff0c;导致眼睛肌肉疲劳&#xff0c;进而引发视力下降。这种现象在年轻一代甚至青少年中尤为普遍&#xff0c;这种疲劳状态不仅影响眼睛的舒适度&#xff0c;还会导致…

从《红楼梦》的视角看大模型知识库 RAG 服务的 Rerank 调优

背景介绍 在之前的文章 有道 QAnything 源码解读 中介绍了有道 RAG 的一个主要亮点在于对 Rerank 机制的重视。 从目前来看&#xff0c;Rerank 确实逐渐成为 RAG 的一个重要模块&#xff0c;在这篇文章中就希望能讲清楚为什么 RAG 服务需要 Rerank 机制&#xff0c;以及如何选…

Redisson-分布式锁单Redis节点模式

Redisson-分布式锁单Redis节点模式 为什么要用分布式锁&#xff1f; 使用分布式锁的主要目的是为了解决多线程或多进程并发访问共享资源时可能出现的竞争条件和数据一致性问题。举一些实际场㬌&#xff1a; 数据库并发控制&#xff1a;在分布式系统中&#xff0c;多个节点同…

从0开始实现一个博客系统 (SSM 实现)

相关技术 Spring Spring Boot Spring MVC MyBatis Html Css JS 实现功能 用户注册 - 密码加盐加密 (md5 加密)前后端用户信息存储 - 令牌技术用户登录 - (使用 拦截器 做登录校验)博客的增删改查后端数据返回前端, 采用 SpringBoot 做统一功能处理和统一异常处理 数据…

软考-程序员 知识点与部分真题梳理

软考-程序员 知识点与部分真题梳理 参照《程序员教程》第五版划分类别&#xff1b; 持续更新中… 计算机系统基础知识 如何理解和处理浮点数的加减法运算 在计算机科学中&#xff0c;处理浮点数的表示和运算是基础且关键的&#xff0c;尤其是在进行科学计算、图形处理和数据分…

【网络】为什么udp协议报头有长度字段,而tcp没有

引言&#xff1a; 在网络通信中&#xff0c;UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;是两种常用的传输层协议。它们在设计和功能上有一些不同之处&#xff0c;其中之一就是报头中的长度字段。本文将深入探讨UDP和TCP协议中长度字…

SpringCloud Alibaba详解:打造高可用的分布式系统

SpringCloud Alibaba是一个基于Spring Cloud的微服务开发框架&#xff0c;它集成了阿里巴巴的一系列中间件和工具&#xff0c;能够快速构建高可用的分布式系统。在本文中&#xff0c;将详细介绍如何使用SpringCloud Alibaba来打造高可用的分布式系统&#xff0c;并通过代码案例…

第十一课,end关键字、简单while循环嵌套、初识for循环

一&#xff0c;end关键字 end关键字用于在print输出的内容后面声明结束的字符&#xff0c;我们之前学过并且十分了解print是默认输出内容之后跟着换行的&#xff0c;如果我们不希望换行而希望使用其它字符来代替换行&#xff0c;就可以用end关键字来实现 特殊的&#xff0c;en…

Redis机制-Redis缓存穿透,击穿,雪崩理解等问题的理解和学习

目录 一 缓存穿透问题 二 缓存击穿问题 三 缓存雪崩问题&#xff1a; 图1 正常的Redis缓存流程 一 缓存穿透问题 我们都知道Redis是一个存储键值对的非关系型数据库&#xff0c;那么当用户进行查询的时候&#xff0c;势必会从前端发起请求&#xff0c;从而数据从Redis缓存…

内网穿透--Frp-简易型(速成)-上线

免责声明:本文仅做技术交流与学习... 目录 frp项目介绍: 一图通解: ​编辑 1-下载frp 2-服务端(server)开启frp口 3-kali客户端(client)连接frp服务器 4-kali生成马子 5-kali监听 6-马子执行-->成功上线 frp项目介绍: GitHub - fatedier/frp: A fast reverse proxy…

论文精读-SwinIR Image Restoration Using Swin Transformer

论文精读-SwinIR: Image Restoration Using Swin Transformer SwinIR:使用 Swin Transformer进行图像恢复 参数量&#xff1a;SR 11.8M、JPEG压缩伪影 11.5M、去噪 12.0M 优点&#xff1a;1、提出了新的网络结构。它采用分块设计。包括浅层特征提取&#xff1a;cnn提取&#…

Verilog实战学习到RiscV - 1 : Yosys 综合

Yosys 综合 实例 一般 FPGA IDE 的第一步都是RTL 综合&#xff08;Synthesis&#xff09;。之后就能看到数字电路图了。然后可以做RTL 级的仿真模拟。 直接上代码&#xff0c;这里我们看一个简单的加法器来学习。 module adder(input [7:0] a,input [7:0] b, input …

Java延时队列取消未支付的订单 之 重启服务任务丢失

一、定义延迟任务类 package com.activity.domain;import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit;/*** 延迟任务类*/ public class DelayedCancellation implements Delayed {private String order;private final long delayTime; // 延迟时间p…