Java入门的基础学习
Java的基础语法知识
- 一 初始Java
- 二 Java数据类型和变量
- 1.字面常量
- 2.数据类型
- 基本数据类型
- 引用数据类型
- 3.变量
- 整型变量
- 浮点型变量
- 字符型变量
- 布尔型变量
- 4.类型转化和提升
- 类型转化
- 类型提升
- 三 运算符
- 1.算数运算符
- 2.关系操作符
- 3.逻辑运算符:&&,||,!
- 4.条件操作符(三目操作符)
- 四 分支语句
- 1. if语句
- 2. switch语句
- 五 循环语句
- 1. while循环
- 2. for循环
- 3.do while 循环
- 4.continue与break语句
前言
Java 语言最初由 Sun Microsystems 公司的 James Gosling(Java之父) 和他的团队在 1991 年开始开发,当时名为 Oak,目的是用于嵌入式设备编程。但由于 Oak 名称已被注册,1995 年正式更名为 Java。2006 年,Sun 公司将 Java 开源,进一步推动了其发展。2010 年,Oracle 公司收购 Sun,Java 的开发和维护权也随之转移到 Oracle。
java最新版本网站
一 初始Java
我们先来了解java的第一个第一个代码,打印出hello world
public class test {public static void main(String[] args) {System.out.println("hello world");}
}
输出结果如下
源⽂件(扩展名为*.java):源⽂件带有类的定义。类⽤来表⽰程序的⼀个组件,⼩程序或许只会有⼀个类。类的内容必须包含在花括号⾥⾯。
类:类中带有⼀个或多个⽅法。⽅法必须在类的内部声明。
⽅法:在⽅法的花括号中编写⽅法应该执⾏的语句。
分析我们第一个代码
可以看出Java的main函数和打印函数都比较长
当然这个都是快捷键的
我们的main方法直接输入main + 按一下ENTER回车键就可以直接出来
输出的话我们直接输入sout + 按一下ENTER回车键就可以直接出来
这样的话我们在编写代码时间会大大降低
下面我们介绍Java的数据类型
二 Java数据类型和变量
1.字面常量
上面我们输出hello world的的程序中System.out.println(“hello world”);
这里输出中"hello world"就是字面常量。
常量就是在运行期间,无法改变的量
public class test {public static void main(String[] args) {System.out.println("hello world");System.out.println(100);System.out.println(3.14);System.out.println('a');System.out.println(true);System.out.println(false);}
}
1.字符串常量:必须要用 " " 括起来的,⽐如"12345"、"hello"等。
2. 整型常量:程序中直接写的数字,⽐如:10,20
3. 浮点数常量:程序中直接写的⼩数,⽐如:3.14、5.21
4. 字符常量:由单引号括起来的当个字符,⽐如:‘A’、'C'
5. 布尔常量:只有两种true和false
等等
上面的字符串、整型、浮点型、字符型以及布尔型,在Java中都是数据类型
2.数据类型
Java有自己的数据类型,主要分为基本数据类型和引用数据类型
基本数据类型
基本数据类型,主要分四类:整型、浮点型、字符型和布尔类型
八种类型:
数据类型 | 关键字 | 占用空间 | 范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~ 127 |
整型 | int | 4个字节 | -2^31 ~ 2^31-1 |
短整型 | short | 2个字节 | -32768 ~ 32767 |
长整型 | long | 8个字节 | -2^63 ~ 2^63-1 |
单精度浮点型 | float | 4个字节 | 一般不关注 |
双精度浮点型 | double | 8个字节 | 一般不关注 |
字符型 | char | 2个字节 | 0 ~ 65535 |
布尔类型 | boolean | 没有明确规定 | true和false |
这里的浮点型数字在存储的时候比较复杂,所以我们不关注
整型默认为int型,浮点型默认为double
引用数据类型
在Java中字符串就是引用数据类型,那在Java中字符串如何定义呢
需要使用String来定义,注意这里的S是大写
public class test {public static void main(String[] args) {String str = "hello world";System.out.println(str);}
}
输出结果如下
3.变量
除了常量以为,也有变量,就像生活中的温度,体重等等会变化的量,在Java中这些被称为变量
数据类型 变量名 = 初始化;
例如:
public class test{public static void main(String[] args) {int a = 10;a=100;//修改数值char ch = 'c';double c = 3.14;boolean d = true;//输出,快捷键soutSystem.out.println(a);System.out.println(ch);System.out.println(c);System.out.println(d);}
}
运行结果
整型变量
int整形
public class test{public static void main(String[] args) {int a = 10;a = 100;System.out.println(a);//int 数据的范围//-2147483648 - 2147483647System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);
}
这里打印出了int类型所能存储数据的范围,我们在初始化时候不能超过其范围
int 类型占4个字节
变量在使⽤之前必须要赋初值,否则编译报错
int的包装类型为Integer
short和long类型
public class test{public static void main(String[] args) {long a = 10l;//我们同长在后面加上l,//long类型System.out.println(a);//-9223372036854775808 - 9223372036854775807System.out.println(Long.MIN_VALUE);System.out.println(Long.MAX_VALUE);short b = 20;//short类型System.out.println(b);//-32768 - 32767System.out.println(Short.MIN_VALUE);System.out.println(Short.MAX_VALUE);}
}
短整型short 占2个字节,长整型long占8个字节
short范围-32768~32767 long范围 -2^63~(2^63)-1
short包装类型为Short long包装类型为Long
我们在创建long类型变量时候通常需要在变量后加上l或者L
浮点型变量
单精度浮点型和双精度浮点型
public class test {public static void main(String[] args) {//浮点型数据//浮点型默认是double类型double d = 1.2;//创建float类型时候,必须在数据后面加上ffloat c = 1.4f;//float a = 1.2;这个是错误的System.out.println(d);System.out.println(c);System.out.println(Float.MIN_VALUE);System.out.println(Float.MAX_VALUE);}
}
运行结果如下
这里float 类型的数据后面没有加f,直接报错了
double占8个字节,float占4个字节
浮点数与整数在内存中的存储⽅式不同,不能单纯使⽤的形式来计算
double的包装类型为Double,float的包装类型为Float
我们创建浮点型数据是默认为double的,如果需要创建float类型数据,需要在后面加上f
我们一般优先使用double,因为float对应的范围精度较小
字符型变量
字节型和字符型
public class test {public static void main(String[] args) {byte a =3;System.out.println(a);System.out.println(Byte.MIN_VALUE);System.out.println(Byte.MAX_VALUE);//字符类型char c1='C';char c2='L';System.out.println(c1);System.out.println(c2);//这里的字符是占两个字节char c3 = '三';//我们知道汉字是占两个字节,我们使用char来存储汉字并没有出错//并且还是可以打印的//所以char是占两个字符System.out.println(c3);}
}
我们使用了一个汉字在存储时候占2个字节,所以这里没有报错,可以知道char在Java中占2个字节
byte在任何系统下都占1个字节,char在任何系统下都占2个字节
byte的范围是:-128~127,char的范围为:0 ~ 65535
byte的包装类型为Byte,char的包装类型为Character
布尔型变量
我们生活中有真假的存在,Java中也存在这种数据类型就是boolean类型
public class test {public static void main(String[] args) {boolean a = true;boolean b = false;//boolean c = 1;//这会直接报错System.out.println(a);System.out.println(b);}
}
运行结果如下
boolean类型只有true表示真 和 false表示假 这两种结果
不存在1为真 ,0 为假的情况,因为int和boolean两种类型不能相互转化
就像下面这个代码是错误的
int和boolean不能进行转化
4.类型转化和提升
类型转化
自动类型转化
自动类型转化就是在编译器编译代码时候会自动处理,两个不同类型的数进行计算会自动将小范围向大范围转化,不会自动向小范围转化。
public class test {public static void main(String[] args) {int a = 10;long b = 20;b = a;//nt-->long,数据范围由⼩到⼤,隐式转换//a = b;//错误的,不可以long - int 转换//只能小转化为大System.out.println(b);}
}
这里我们在进行赋值的时候 int 转化为了 long 进行赋值
但是我们不可以long 向 int 类型转化,大范围不可以自动转化为小范围
就像下面是编译的时候会出错
强制类型转化
自动类型转化不可以小范围转化为大范围,而强制类型转化,可以将大范围转化为小范围
public class test {public static void main(String[] args) {int a = 10;long b = 100L;b = a; // int-->long,数据范围由⼩到⼤,自动类型转化a = (int)b; // long-->int, 数据范围由⼤到⼩,需要强制类型转化,否则编译失败float f = 3.14F;double d = 5.21;d = f; // float-->double,数据范围由⼩到⼤,自动类型转化f = (float)d; // double-->float, 数据范围由⼤到⼩,需要强制类型转化,否则编译失败byte b1 = 100; // 100默认为int,没有超过byte范围,自动类型转化byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显⽰转换,否则报错}
}
自动类型转化在进行赋值的时候,可将小范围的数赋值给大范围的
强制类型转化通常用于,将大范围转化为小范围,但这可能会有数据的丢失
强制类型转化不一定成功,两个毫不相干的两个数不能相互转化
类型提升
int 和 long 之间的提升
public class test {public static void main(String[] args) {int a = 10;long b = 20;//int e=c+d;//这样是错误的//在进行运算的时候,会转化为类型较大的那一个long e = c+d;System.out.println(e);}
}
这里可以用long类型的数据来接收,这两个整数的相加,但是不可以用int 类型的数据来接收,除非强制类型转化
不同类型的数据混合运算,范围⼩的会提升成范围⼤的
byte的提升
public class test {public static void main(String[] args) {byte a = 1;byte b = 2;//byte c =a+b;//错误int d = a + b;byte c = (byte)(a+b);//但不可以超过范围System.out.println(c);System.out.println(d);}
}
这里的byte的运算不可以简单认为这两个字节运算结果还是byte字节,这两个数在进行运算的时候,会先将a和b转化为int类型在进行运算。
因为我们的计算机在存储时候,是4个字节存储的,所以低于4个字节的像short和byte低于4个字节的类型,会先提升成int,再参与计算。
三 运算符
1.算数运算符
基本的四种运算符:加减乘除取模(+ - * / %)
public class test {public static void main(String[] args) {int a = 20;int b = 10;System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println(a/b);System.out.println(a%b);}
}
这里我们知道这里的所有都是二元操作符,都是必须需要两个操作数
这里我们的int / int的结果还是int类型
/ 和 %运算符只有操作数中有浮点数结果才会是浮点数,否则结果就只能是整数,可能会导致数据的丢失
但我们的%运算符通常使用整数
public class test {public static void main(String[] args) {int a = 3;int b = 2;double c = 2.0;System.out.println(a/b);System.out.println(a/c);System.out.println(a%b);System.out.println(a%c);}
}
做除法和取模时,右操作数不能为0
如果右操作数为0的话,编译器会报错
增量运算符+= -= *= /= %=
public class test {public static void main(String[] args) {int a = 3;a += 3;//相当于a=a+3;System.out.println(a);//输出6a -= 3;System.out.println(a);//输出3a *= 3;System.out.println(a);//输出9a /= 3;System.out.println(a);//输出3a %= 3;System.out.println(a);//输出0}
}
这里的 a+=3;相当于a=a+3;其他的操作符同理
那这两种写法有什么区别呢
public class test {public static void main(String[] args) {int b = 3;double c = 2.3;b+=c;System.out.println(b);//b=b+c;//编译器会报错}
}
我们使用两种类型进行计算,发现并没有报错,但是数据有所丢失
输出结果如下
就像换成b = b+c的话,编译器会报错
增量运算符在计算的时候,可以不进⾏强制类型转换,使用这种运算符可以不强制类型转化就可以运算,但是结果可能会有所丢失
⾃增/⾃减运算符 ++ –
public class test {public static void main(String[] args) {int a = 3;a++;//4System.out.println(a++);//4System.out.println(a);//5++a;//6System.out.println(++a);//7}
}
我们有前置++,-- 和后置++,–
这两种有所区别前置++先将数值赋给它,在进行++,后置++是先++操作,在进行赋值
就像这里的输出a++的话,先输出a的值在进行++,输出++a的话,是先将a的值加1在进行输出
2.关系操作符
关系运算符主要有六个: == != < > <= >= ,返回的结果只有true和false两种类型
public class test {public static void main(String[] args) {int a = 10;int b = 20;// 在Java中 == 表⽰相等System.out.println(a == b); // falseSystem.out.println(a != b); // trueSystem.out.println(a < b); // trueSystem.out.println(a > b); // falseSystem.out.println(a <= b); // trueSystem.out.println(a >= b); // false}
}
我们要注意=是赋值运算符,==才是判断两边是否相等的
如果我们需要判断一个数 3<a<5,在Java中如何表示呢
3.逻辑运算符:&&,||,!
逻辑与&&
表达式1&&表达式2
表达式1 | 表达式2 | 运行结果 |
---|---|---|
真 | 真 | 真 |
真 | 假 | 假 |
假 | 真 | 假 |
假 | 假 | 假 |
语法规则:表达式1&&表达式2,左右表达式必须是boolean类型的结果。返回只有true和false两种类型
两个表达式都为真,结果才是真,只要有⼀个是假,结果就是假。
逻辑或||
表达式1 || 表达式2
表达式1 | 表达式2 | 运行结果 |
---|---|---|
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
表达式中只要有一个为真,结果就是真。
逻辑非!
!表达式
表达式 | 结果 |
---|---|
真 | 假 |
假 | 真 |
表达式为真,结果为假
表达式为假,结果为真
下面我们代码来演示一下
public class test {public static void main(String[] args) {int a = 10;int b = 20;System.out.println(a<=10&&b==20);//都为真才为真System.out.println(a>10||b<20);//一个为真就为真System.out.println(!true);//!true就为falseSystem.out.println(a!=10&&b==20);System.out.println(a!=10||b==20);}
}
运行结果如下
逻辑与&&两边都为真才为真
逻辑或||两边都为假才为假
逻辑非!真变假,假变真
短路问题
我们上面的&&和||都有短路问题
我们来分析下面的代码
public class test {public static void main(String[] args) {System.out.println(10>20&&10/0==0);System.out.println(10<20||10/0==0);}
}
我们看上面的代码,肯定有人说这个代码错误,上面刚说过 / 的右操作符不可以为0,除数不可以为0,实则不然,这个代码是可以正常运行的。
运行结果如下
我们要注意:
逻辑与&&在运算的时候,如果左边表达式为假,右边的表达式不会进行计算
逻辑非||在运算的时候,如果左边表达式为真,右边的表达式不会进行运算
就像上面的10>20为假,并且是逻辑与&&运算符,那右边不计算
10<20为真,并且是逻辑或||运算符,那右边不计算
&和|
存在&与|这两个操作符,如果他们返回值为boolean类型,也就是只有true和false两种结果的话,它们可以像逻辑&&和逻辑||参与逻辑运算
public class test {public static void main(String[] args) {System.out.println(10>20&&10/0==0);System.out.println(10<20||10/0==0);System.out.println(10>20&10/0==0);//运算出错System.out.println(10<20|10/0==0);//运算出错}
}
&和|并不会出现短路问题,两边的表达式都会计算,不论左边为真还是为假,通通都要计算
4.条件操作符(三目操作符)
表达式1 ? 表达式2 : 表达式3如果表达式1为真,返回表达式2,反之返回表达式3
public class test {public static void main(String[] args) {int a = 10;int b = 20;int max = a>b? a:b;System.out.println(max);}
}
输出结果如下
但我们这里要注意表达2和表达式3必须是相同类型,否则程序会报错,如果是自动类型转化的话不会报错
public class test {public static void main(String[] args) {int a = 10;double b = 20.0;//int max = a>b?a:b;//这里程序是错误的double max = a>b?a:b;System.out.println(max);}
}
输出结果如下
这里如果我们可以发生小范围转化为大范围的话,这样的自动类型转化是不会报错的,但是如过这里使用int类型来接收的话,程序是错误的。
所以我们在使用表达式的时候都要注意其类型是否相符
四 分支语句
Java中存在if,swith用于分支语句,while ,for,do-while用于循环
1. if语句
if(布尔表达式){表达式1;
}else{表达式2;
}
这里的话如果布尔表达式为真(true),执行表达式1,反之则执行表达式2
例如这里小明,如果小明这次考试考了90分及以上就奖励他,如果没有没奖励
public class test {public static void main(String[] args) {int score = 90;if(score>=90){System.out.println("奖励");}else{System.out.println("没奖励");}}
}
输出结果如下
嵌套if - else(if和else相匹配)
if(布尔表达式1){// 语句1
}else if(布尔表达式2){// 语句2
}else{
表达式1成⽴,执⾏语句1,否则表达式2成⽴,执⾏语句2,否则执⾏语句3
我们可以多层嵌套,例如我们给学生成绩分等级
• 分数在[90,100]之间的,为优秀
• 分数在[80,90)之前的,为良好
• 分数在[70,80)之间的,为中等
• 分数在[60, 70)之间的,为及格
• 分数在[ 0, 60)之间的,为不及格
• 其他的分数为错误数据
public class test {public static void main(String[] args) {int score = 90;if (score >= 90 && score <= 100) {System.out.println("优秀");} else if (score >= 80 && score < 90) {System.out.println("良好");} else if (score >= 70 && score < 80) {System.out.println("中等");} else if (score >= 60 && score < 70) {System.out.println("及格");} else if (score >= 0 && score < 60) {System.out.println("不及格");} else {System.out.println("数据错误");}}
}
例题:闰年判断
口诀:四年一闰,百年不闰,四百年再闰
1.世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
2.普通年能被4整除;且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
//闰年判断
public class test {public static void main(String[] args) {int year = 2000;if (year % 100 == 0) {// 判定世纪闰年if (year % 400 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}} else {// 普通闰年if (year % 4 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}}}
}
上面代码较长,我们可以使用逻辑与&&与逻辑或||进行简化
我们已经知道就两种情况是闰年,我们直接放入
public class test {public static void main(String[] args) {int year = 2000;if((year%4==0&&year%100!=0)||(year%400==0)){System.out.println("是闰年");}else {System.out.println("是闰年");}}
}
if和else语句后面必须加上大括号吗?
public class test {public static void main(String[] args) {int x = 10;int y = 20;if (x == 10)if (y == 10)System.out.println("aaa");elseSystem.out.println("bbb");}
}
我们可以看到,这里的else是与第二个if对齐的,因为这里我们满足第一个条件x=10,但是第二个条件不满足,但是打印了bbb,如果和第一个对齐的结合的话就不会打印了,else是和最接近的if匹配
如果我们不写大括号的话,这里只能写一条语句,并且我们的逻辑关系也不清楚
不建议这么写,最好加上⼤括号
2. switch语句
switch(表达式){case 常量值1:语句1;[break;]case 常量值2:语句2;[break;]...default:内容都不满⾜时执⾏语句;[break;]
}
1.我们是先算出表达式的值
2.在进行和case的值比较,一旦有符合的语句就执行,知道遇到break结束
3.如果没有满足的就会执行default语句下面的内容
例题:我们输出星期几
public class test {public static void main(String[] args) {int day = 1;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;case 5:System.out.println("星期五");break;case 6:System.out.println("星期六");break;case 7:System.out.println("星期日");break;default :System.out.println("输入错误");break;}}
}
我们要注意这里的case语句中不可以出现两个相同的数值
并且这里case后面的类型可以为常量值是基本类型:byte、char、short、int
引⽤类型:String常量串、枚举类型
但是不可以使用long ,float和double类型
使用了double类型报错了
我们这里的break虽然可以省略,但是我们一般不会省略,因为这样可能会出多分支选择的情况
public class test {public static void main(String[] args) {int day = 1;switch (day){case 1:System.out.println("星期一");case 2:System.out.println("星期二");case 3:System.out.println("星期三");break;case 4:System.out.println("星期四");break;case 5:System.out.println("星期五");break;case 6:System.out.println("星期六");break;case 7:System.out.println("星期日");break;default :System.out.println("输入错误");break;}}
}
这里如果我们省略了break的话,我们先找到语句,找到对应语句后,直到遇到break才截止,在没遇到break之前的语句都会执行,这样可能会导致结果输出错误
五 循环语句
循环语句,就是一直重复做一件相同的事情,直到遇到截止未知2
1. while循环
基本语法格式
while(循环条件) {循环语句;
}
这里的循环条件为true,则执⾏循环语句;否则结束循环
使用时要注意这里如果不加大括号的化和if语句一样只能放一条语句
所以我们在使用的时候,建议不要省略大括号
例题:打印1~ 10之间的数
public class test {public static void main(String[] args) {int num = 1;//初始化while(num<=10){//判断System.out.println(num);num++;//调整}}
}
运行结果如下
例题:计算1 ~ 100的和
public class test {public static void main(String[] args) {int num = 1;int sum = 0;while(num<=100){sum+=num;num++;}System.out.println(sum);}
}
运行结果如下
2. for循环
for(表达式1;布尔表达式2;表达式3){表达式4;}
表达式1:⽤于初始化循环变量初始值设置,在循环最开始时执⾏,且只执⾏⼀次
表达式2:循环条件,满则循环继续,否则循环结束
表达式3:循环变量的调整
例题:输出1~10的数
public class test {public static void main(String[] args) {for (int i = 1; i <= 10; i++) {System.out.println(i);}}}
运行结果如下
使用时要注意这里如果不加大括号的化和if语句一样只能放一条语句
所以我们在使用的时候,建议不要省略大括号。
我们要注意括号内的之间要用分号分开(;),不可以使用其他符号隔开
3.do while 循环
do{循环语句;
}while(循环条件);
与while循环不同,这里是先执行循环语句,然后执行判断条件
例题 :打印1 ~ 10
public class test {public static void main(String[] args) {int num = 1;do {System.out.println(num);num++;}while (num<=10);}
}
运行结果如下
do while 循环最后的分号不要忘记
由于do while循环这种先执行循环条件,在进行判断这种特性,我们只有在特定的情况下才会使用do while循环,我们大多数使用的是while和for循环
4.continue与break语句
break是跳出整个循环,结束循环,而continue是结束本次循环在while和for循环中有所差异,下面是一些例子
while循环下的break和continue
public class test {public static void main(String[] args) {int num = 1;//初始化while(num<=10){//判断if(num==3){break;//continue;}System.out.println(num);num++;}}
}
break跳出整个循环,循环直接截止,这里num的值3时候,跳出循环
换成continue 的话,只会跳出后面语句,并不会退出循环,当num==3的时候,这里不进行打印和num++操作,但这里并不跳出出循环,一直进行判断,判断条件一直为真,在判断中num的数值一直为3,并没有逐渐接近循环截止条件,导致一直进行判断,导致死循环
for循环下的continue和break
public class test {public static void main(String[] args) {for (int i = 1; i <= 10; i++) {if(i==3){break;//continue;}System.out.println(i);}}
}
break这里和while循环效果一样,直接退出循环
continue,但是这里的结果和while循环中有所不同
这里当i的值为3的时候,跳出下面打印语句,继续执行后面的判断和++操作,
这样3后面的数还是正常打印,这里除了3没有打印其他数全部都打印了
到这里就结束,希望这对大家有所帮助,欲知后事如何,请听下回分解。
相关文章:
Java入门的基础学习
Java的基础语法知识 一 初始Java二 Java数据类型和变量1.字面常量2.数据类型基本数据类型引用数据类型 3.变量整型变量浮点型变量字符型变量布尔型变量 4.类型转化和提升类型转化类型提升 三 运算符1.算数运算符2.关系操作符3.逻辑运算符:&&,||&…...
万字详解 MySQL MGR 高可用集群搭建
文章目录 1、MGR 前置介绍 1.1、什么是 MGR1.2、MGR 优点1.3、MGR 缺点1.4、MGR 适用场景 2、MySQL MGR 搭建流程 2.1、环境准备2.2、搭建流程 2.2.1、配置系统环境2.2.2、安装 MySQL2.2.3、配置启动 MySQL2.2.4、修改密码、设置主从同步2.2.5、安装 MGR 插件 3、MySQL MGR 故…...
脚本无法获取响应主体(原因:CORS Missing Allow Credentials)
背景: 前端的端口号8080,后端8000。需在前端向后端传一个参数,让后端访问数据库去检测此参数是否出现过。涉及跨域请求,一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码,出现了这个bug࿰…...
GD32F450 使用
GB32F450使用 1. 相关知识2. 烧写程序3. SPI3.1 spi基础3.2 spi代码 4. 串口4.1 串口引脚4.2 串口通信代码 问题记录1. 修改晶振频率 注意:GD32F450 总共有三种封装形式,本文所述的相关代码和知识,均为 GD32F450IX 系列。 1. 相关知识 参数配…...
神经网络代码入门解析
神经网络代码入门解析 import torch import matplotlib.pyplot as pltimport randomdef create_data(w, b, data_num): # 数据生成x torch.normal(0, 1, (data_num, len(w)))y torch.matmul(x, w) b # 矩阵相乘再加bnoise torch.normal(0, 0.01, y.shape) # 为y添加噪声…...
Android 数据库查询对比(APN案例)
功能背景 APN 数据通常存储在数据库中,由TelephonyProvider提供。当用户进入APN设置界面时,Activity会启动,AOSP源码通过ContentResolver查询APN数据。关键分析点在于这个查询操作是否在主线程执行,因为主线程上的耗时操作会导致…...
神卓 S500 异地组网设备实现监控视频异地组网的详细步骤
一、设备与环境准备 硬件清单 主设备:神卓 S500 异地组网路由器 1子设备:神卓 S500 或兼容设备 N(需通过官网认证)监控设备:支持 RTSP/ONVIF 协议的 NVR、摄像头网络要求:各网点需稳定联网(推荐…...
golang安装(1.23.6)
1.切换到安装目录 cd /usr/local 2.下载安装包 wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz 3.解压安装包 sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz 4.配置环境变量 vi /etc/profile export PATH$…...
leetcode35.搜索插入位置
题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出…...
LeetCode第57题_插入区间
LeetCode 第57题:插入区间 题目描述 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 难度 中…...
人工智能之数学基础:线性代数中矩阵的运算
本文重点 矩阵的运算在解决线性方程组、描述线性变换等方面发挥着至关重要的作用。通过对矩阵进行各种运算,可以简化问题、揭示问题的本质特征。在实际应用中,我们可以利用矩阵运算来处理图像变换、数据分析、电路网络等问题。深入理解和掌握矩阵的运算,对于学习线性代数以…...
SQL Server 创建用户并授权
创建用户前需要有一个数据库,创建数据库命令如下: CREATE DATABASE [数据库名称]; CREATE DATABASE database1;一、创建登录用户 方式1:SQL命令 命令格式:CREATE LOGIN [用户名] WITH PASSWORD ‘密码’; 例如,创…...
MySQL双主搭建-5.7.35
文章目录 上传并安装MySQL 5.7.35双主复制的配置实例一:172.25.0.19:实例二:172.25.0.20: 配置复制用户在实例 1 (172.25.0.19)上执行:在实例 2 (172.25.0.20)上执行&…...
RNN实现精神分裂症患者诊断(pytorch)
RNN理论知识 RNN(Recurrent Neural Network,循环神经网络) 是一种 专门用于处理序列数据(如时间序列、文本、语音、视频等)的神经网络。与普通的前馈神经网络(如 MLP、CNN)不同,RNN…...
Python中字符串的常用操作
一、r原样输出 在 Python 中,字符串前加 r(即 r"string" 或 rstring)表示创建一个原始字符串(raw string)。下面详细介绍原始字符串的特点、使用场景及与普通字符串的对比。 特点 忽略转义字符࿱…...
uniapp 本地数据库多端适配实例(根据运行环境自动选择适配器)
项目有个需求,需要生成app和小程序,app支持离线数据库,如果当前没有网络提醒用户开启离线模式,所以就随便搞了下,具体的思路就是: 一个接口和多个实现类(类似后端的模板设计模式)&am…...
Spring Cloud Gateway 整合Spring Security
做了一个Spring Cloud项目,网关采用 Spring Cloud Gateway,想要用 Spring Security 进行权限校验,由于 Spring Cloud Gateway 采用 webflux ,所以平时用的 mvc 配置是无效的,本文实现了 webflu 下的登陆校验。 1. Sec…...
【异地访问本地DeepSeek】Flask+内网穿透,轻松实现本地DeepSeek的远程访问
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言依赖Flask构建本地网页访问LM Studio 开启网址访问DeepSeek 调用模板Flask 访问本…...
Windows对比MacOS
Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1:打开环境变量设置窗口步骤 2:添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1:打开终端步骤 2:编辑环境变量配置文件步骤 3࿱…...
React实现无缝滚动轮播图
实现效果: 由于是演示代码,我是直接写在了App.tsx里面在 文件位置如下: App.tsx代码如下: import { useState, useEffect, useCallback, useRef } from "react"; import { ImageContainer } from "./view/ImageC…...
Ubuntu20.04确认cuda和cudnn已经安装成功
当我们通过官网安装cuda和cudnn时,终端执行完命令后我们仍不能确定是否已经安装成功。接下来教大家用几句命令测试。 cuda 检测版本号 nvcc -V如果输出如下,则安装成功。 可以看到版本号是11.2 cudnn检测版本号 有两种命令:如果你的cudn…...
sqlilab 46 关(布尔、时间盲注)
sqlilabs 46关(布尔、时间盲注) 46关有变化了,需要我们输入sort,那我们就从sort1开始 递增测试: 发现测试到sort4就出现报错: 我们查看源码: 从图中可看出:用户输入的sort值被用于查…...
AI时代保护自己的隐私
人工智能最重要的就是数据,让我们面对现实,大多数人都不知道他们每天要向人工智能提供多少数据。你输入的每条聊天记录,你发出的每条语音命令,人工智能生成的每张图片、电子邮件和文本。我建设了一个网站(haptool.com),…...
模型优化之强化学习(RL)与监督微调(SFT)的区别和联系
强化学习(RL)与监督微调(SFT)是机器学习中两种重要的模型优化方法,它们在目标、数据依赖、应用场景及实现方式上既有联系又有区别。 想了解有关deepseek本地训练的内容可以看我的文章: 本地基于GGUF部署的…...
Buildroot 添加自定义模块-内置文件到文件系统
目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统,适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…...
蓝牙接近开关模块感应开锁手机靠近解锁支持HID低功耗
ANS-BT101M是安朔科技推出的蓝牙接近开关模块,低功耗ble5.1,采用UART通信接口,实现手机自动无感连接,无需APP,人靠近车门自动开锁,支持苹果、安卓、鸿蒙系统,也可以通过手机手动开锁或上锁&…...
计算机毕业设计SpringBoot+Vue.js基于工程教育认证的计算机课程管理平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
企业知识库搭建:14款开源与免费系统选择
本文介绍了以下14 款知识库管理系统:1.Worktile;2.PingCode;3.石墨文档; 4. 语雀; 5. 有道云笔记; 6. Bitrix24; 7. Logseq等。 在如今的数字化时代,企业和团队面临着越来越多的信息…...
蓝桥杯(握手问题)
小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。 但有 7个人,这 7 人彼此之间没有进行握手 (但这 7 人与除这 7 人以外…...
如何使用 Jenkins 实现 CI/CD 流水线:从零开始搭建自动化部署流程
如何使用 Jenkins 实现 CI/CD 流水线:从零开始搭建自动化部署流程 在软件开发过程中,持续集成(CI)和持续交付(CD)已经成为现代开发和运维的标准实践。随着代码的迭代越来越频繁,传统的手动部署方式不仅低效,而且容易出错。为了提高开发效率和代码质量,Jenkins作为一款…...
c++字符编码/乱码问题
基本概念 c11版本引入了char16_t和char32_t两个类型,他们的特点分别如下: char16_t 16位的unicode字符类型用于表示UTF-16编码大小:2字节字面量前缀:u char32_t 32位unicode字符类型用于表示UTF-32编码大小:4字节…...
侯捷 C++ 课程学习笔记:深入理解类与继承
文章目录 每日一句正能量一、课程背景二、学习内容:类与继承(一)类的基本概念1. 类的定义与实例化2. 构造函数与析构函数 (二)继承1. 单继承与多继承2. 虚函数与多态 三、学习心得四、总结 每日一句正能量 有种承担&am…...
初始化列表
一:声明,定义,赋值的区别 ①:声明 这里,int _year; int _month;int _day; 是成员变量的声明,它们告诉编译器: 类 Date中有三个成员变量_year和 _month和_day。 它们的类型分别都是 int 此…...
7.1 - 定时器之中断控制LED实验
文章目录 1 实验任务2 系统框图3 软件设计 1 实验任务 本实验任务是通过CPU私有定时器的中断,每 200ms 控制一次PS LED灯的亮灭。 2 系统框图 3 软件设计 注意事项: 定时器中断在收到中断后,只需清除中断状态,无需禁用中断、启…...
Pytest之fixture的常见用法
文章目录 1.前言2.使用fixture执行前置操作3.使用conftest共享fixture4.使用yield执行后置操作 1.前言 在pytest中,fixture是一个非常强大和灵活的功能,用于为测试函数提供固定的测试数据、测试环境或执行一些前置和后置操作等, 与setup和te…...
【分库分表】基于mysql+shardingSphere的分库分表技术
目录 1.什么是分库分表 2.分片方法 3.测试数据 4.shardingSphere 4.1.介绍 4.2.sharding jdbc 4.3.sharding proxy 4.4.两者之间的对比 5.留个尾巴 1.什么是分库分表 分库分表是一种场景解决方案,它的出现是为了解决一些场景问题的,哪些场景喃…...
合并两个有序链表:递归与迭代的实现分析
合并两个有序链表:递归与迭代的实现分析 在算法与数据结构的世界里,链表作为一种基本的数据结构,经常被用来解决各种问题。特别是对于有序链表的合并,既是经典面试题,也是提高编程能力的重要练习之一。合并两个有序链…...
HTML AI 编程助手
HTML AI 编程助手 引言 随着人工智能技术的飞速发展,编程领域也迎来了新的变革。HTML,作为网页制作的基础语言,与AI技术的结合,为开发者带来了前所未有的便利。本文将探讨HTML AI编程助手的功能、应用场景以及如何利用它提高编程…...
备战蓝桥杯Day11 DFS
DFS 1.要点 (1)朴素dfs 下面保存现场和恢复现场就是回溯法的思想,用dfs实现,而本质是用递归实现,代码框架: ans; //答案,常用全局变量表示 int mark[N]; //记录状态i是否被处理过 …...
Oracle 认证为有哪几个技术方向
Oracle 认证技术方向,分别是数据库管理、开发、云平台,每个方向都有不同的学习等级 数据库运维方向 Oracle Certified Professional(OCP):19c OCA内容已和OCP合并 OCP 19c属于oracle认证专家,要求考生掌握深…...
25物理学研究生复试面试问题汇总 物理学专业知识问题很全! 物理学复试全流程攻略 物理学考研复试调剂真题汇总
正在为物理考研复试专业面试发愁的你,是不是不知道从哪开始准备? 学姐告诉你,其实物理考研复试并没有你想象的那么难!只要掌握正确的备考方法,稳扎稳打,你也可以轻松拿下高分!今天给大家准备了…...
网络安全技术与应用
文章详细介绍了网络安全及相关技术,分析了其中的一类应用安全问题——PC机的安全问题,给出了解决这类问题的安全技术——PC防火墙技术。 1 网络安全及相关技术 自20世纪…...
APISIX Dashboard上的配置操作
文章目录 登录配置路由配置消费者创建后端服务项目配置上游再创建一个路由测试 登录 http://192.168.10.101:9000/user/login?redirect%2Fdashboard 根据docker 容器里的指定端口: 配置路由 通过apisix 的API管理接口来创建(此路由,直接…...
深度剖析数据分析职业成长阶梯
一、数据分析岗位剖析 目前,数据分析领域主要有以下几类岗位:业务数据分析师、商业数据分析师、数据运营、数据产品经理、数据工程师、数据科学家等,按照工作侧重点不同,本文将上述岗位分为偏业务和偏技术两大类,并对…...
HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路
布局基础:RelativeLayout 初印象 在 HarmonyOS 的界面开发中,布局是构建用户界面的关键环节,它决定了各个组件在屏幕上的位置和排列方式。而 RelativeLayout(相对布局)则是其中一种功能强大且灵活的布局方式࿰…...
问题修复-后端返给前端的时间展示错误
问题现象: 后端给前端返回的时间展示有问题。 需要按照yyyy-MM-dd HH:mm:ss 的形式展示 两种办法: 第一种 在实体类的属性上添加JsonFormat注解 第二种(建议使用) 扩展mvc框架中的消息转换器 代码: 因为配置类继…...
怎么排查页面响应慢的问题
一、排查流程图 -----------------| 全局监控报警触发 |-----------------|▼-----------------| 定位异常服务节点 |-----------------|------------------▼ ▼ ----------------- ----------------- | 基础设施层排查 | | 应用层代码排查 | | (网…...
第二十四:5.2【搭建 pinia 环境】axios 异步调用数据
第一步安装:npm install pinia 第二步:操作src/main.ts 改变里面的值的信息: <div class"count"><h2>当前求和为:{{ sum }}</h2><select v-model.number"n"> // .number 这里是…...
SpringBoot——生成Excel文件
在Springboot以及其他的一些项目中,或许我们可能需要将数据查询出来进行生成Excel文件进行数据的展示,或者用于进行邮箱发送进行附件添加 依赖引入 此处demo使用maven依赖进行使用 <dependency><groupId>org.apache.poi</groupId>&…...
java高级(IO流多线程)
file 递归 字符集 编码 乱码gbk,a我m,utf-8 缓冲流 冒泡排序 //冒泡排序 public static void bubbleSort(int[] arr) {int n arr.length;for (int i 0; i < n - 1; i) { // 外层循环控制排序轮数for (int j 0; j < n -i - 1; j) { // 内层循环…...