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

【Java】Java基础

环境准备

安装JDK和JRE

下载JDK,可以在官网Java Downloads | Oracle 中国下载,但是这里需要注册才能够下载。在Index of java-local/jdk (huaweicloud.com)也可以下载到,但是版本比较老,关系不大,直接下载,对应jdk-8u202-windows-x64.exe,这个是JDK8版本,它是一个长期维护版本。

下载后安装:

在这里插入图片描述

注意这里的JRE,它是Java程序执行的环境,会有额外安装:

在这里插入图片描述

因为已经包含在下载包中,所以也不需要额外下载。

设置环境变量

安装成功之后需要增加Java相关的环境变量。

  1. 首先是新建一个环境变量JAVA_HOME:

在这里插入图片描述

  1. 再将JDK和JRE的bin目录添加到PATH变量中:

在这里插入图片描述

之后如果在PowerShell下可以使用java,就表示安装成功了,比如:

C:\Users\jiang>java
用法: java [-options] class [args...](执行类)java [-options] -jar jarfile [args...](执行 jar 文件)
其中选项包括:-d32          使用 32 位数据模型 (如果可用)-d64          使用 64 位数据模型 (如果可用)-server       选择 "server" VM默认 VM 是 server.-cp <目录和 zip/jar 文件的类搜索路径>-classpath <目录和 zip/jar 文件的类搜索路径>; 分隔的目录, JAR 档案和 ZIP 档案列表, 用于搜索类文件。-D<名称>=<>设置系统属性-verbose:[class|gc|jni]启用详细输出-version      输出产品版本并退出-version:<>警告: 此功能已过时, 将在未来发行版中删除。需要指定的版本才能运行-showversion  输出产品版本并继续-jre-restrict-search | -no-jre-restrict-search警告: 此功能已过时, 将在未来发行版中删除。在版本搜索中包括/排除用户专用 JRE-? -help      输出此帮助消息-X            输出非标准选项的帮助-ea[:<packagename>...|:<classname>]-enableassertions[:<packagename>...|:<classname>]按指定的粒度启用断言-da[:<packagename>...|:<classname>]-disableassertions[:<packagename>...|:<classname>]禁用具有指定粒度的断言-esa | -enablesystemassertions启用系统断言-dsa | -disablesystemassertions禁用系统断言-agentlib:<libname>[=<选项>]加载本机代理库 <libname>, 例如 -agentlib:hprof另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help-agentpath:<pathname>[=<选项>]按完整路径名加载本机代理库-javaagent:<jarpath>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument-splash:<imagepath>使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。C:\Users\jiang>java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

安装IDE

开发Java常用的IDE有Eclipse和IntelliJ IDEA,这里使用IntelliJ IDEA,它的Community版是免费的,界面如下:

在这里插入图片描述

创建Java项目:

在这里插入图片描述

示例代码:

在这里插入图片描述

到这里Java的基本环境已经安装完毕。

Java基础

Java主类结构

Java程序的基本组成单元是类。

每一个应用程序都必须要包含一个main()方法,含有main()方法的类称为主类。

一个Java程序有若干个类组成。

通过package关键字声明类所在的包,通过import关键字引入该包包含的类。

下面的代码声明了一个包,该包中包含一个类:

package LearnJava;public class BasicDataType {public void test() {System.out.print(new BasicDataType());}
}

下面的代码包含并使用了上述类:

import LearnJava.BasicDataType;public class Main {public static void main(String[] args) {// 基本数据类型测试BasicDataType myBasicDataType = new BasicDataType();myBasicDataType.test();}
}

publicstaticvoid分别是权限修饰符静态修饰符返回值修饰符

基本数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ymhpetO7-1693156098722)(Java.assets/基本数据类型.svg)]

Java没有区分正负的数值型,它们本身包含正负。

下面是一个示例:

package LearnJava;public class BasicDataType {public byte byteValue = 0;public short shortValue = -1;public int intValue = 2;public long longValue = 3;public char charValue = 'a';public float floatValue = 1.1F; // 不加F会告警public double doubleValue = -1.2;public boolean booleanValue = true;public void test() {System.out.println(new BasicDataType());System.out.println(byteValue);System.out.println(shortValue);System.out.println(intValue);System.out.println(longValue);System.out.println(charValue);System.out.println(floatValue);System.out.println(doubleValue);System.out.println(booleanValue);}
}

变量和常量

Java语言严格区分大小写。

Java语言规定标识符有任意顺序的字母、下划线(_)、美元符号($)和数字组成,并且第一个字符不能是数字。

Java关键字:

关键字描述
abstract非访问修饰符。用于类和方法:抽象类不能用于创建对象(要访问它,必须从另一个类继承)。抽象方法只能在抽象类中使用,并且它没有主体。主体由子类(继承自)提供。
assert用于调试。
boolean只能存储真值和假值的数据类型。
break从循环或switch块中断开。
byte可以存储-128和127之间的整数的数据类型。
caseswitch语句中标记代码块。
catch捕获由try语句生成的异常。
char用于存储单个字符的数据类型。
class定义一个类。
continue继续到循环的下一个迭代。
const定义一个常量。不再使用,改用final
default指定switch语句中的默认代码块。
dowhile一起使用以创建do-while循环。
double可以存储1.7e−308 到 1.7e+308。
else用于条件语句中。
enum声明枚举(不可更改)类型。
exports导出包含模块的包。Java9中的新特性。
extends扩展类(表示一个类是从另一个类继承的)。
final用于类、属性和方法的非访问修饰符,使它们不可更改(无法继承或重写)。
finally与异常一起使用,无论是否存在异常都将执行的代码块。
float可以存储3.4e−038 到 3.4e+038。
for创建for循环。
goto不在使用中,没有任何功能。
if一个条件语句。
implements实现一个接口。
import用于导入包、类或接口。
instanceof检查对象是特定类的实例还是接口的实例。
int可以存储从-2147483648到2147483647的整数的数据类型。
interface用于声明仅包含抽象方法的特殊类型的类。
long可以存储从-9223372036854775808到9223372036854775808的整数的数据类型。
module声明一个模块。Java9中的新特性。
native指定方法不是在同一Java源文件中实现的(而是在另一种语言中实现的)。
new创建新对象。
package声明一个包。
private用于属性、方法和构造函数的访问修饰符,使它们只能在声明的类中访问。
protected用于属性、方法和构造函数的访问修饰符,使它们可以在同一个包和子类中访问。
public用于类、属性、方法和构造函数的访问修饰符,使它们可以被任何其他类访问。
requires指定模块内所需的库。Java9中的新特性。
return已完成方法的执行,并可用于从方法返回值。
short可以存储从-32768到32767的整数的数据类型。
static用于方法和属性的非访问修饰符。无需创建类的对象即可访问静态方法/属性。
strictfp限制浮点计算的精度和舍入。
super指超类(父)对象。
switch选择要执行的多个代码块之一。
synchronized非访问修饰符,指定一次只能由一个线程访问方法。
this指方法或构造函数中的当前对象。
throw创建自定义错误。
throws指示方法可能引发的异常。
transient非访问修饰符,指定属性不是对象持久状态的一部分。
try创建try…catch语句。
var声明一个变量。Java10中的新特性。
void指定方法不应具有返回值。
volatile指示属性不是本地缓存的线程,并且总是从“主内存”中读取。
while创建while循环。

常量也被称为“final变量”,再整个程序中只能被赋值一次。

在Java语言中声明一个常量,除了要指定数据类型,还需要通过final关键字进行限定。

常量名通常使用大写字母,但这并不是必须的。

final double PI = 3.1425926;

在为所有的对象共享值时,常量是非常有用的。

根据变量的有效返回,变量可以分为:

  • 成员变量:在类体中声明的变量被称为成员变量,成员变量在整个类中都有效。类中的成员变量又分为两类:静态变量实例变量
  • 局部变量:在类的方法体中声明的变量称为局部变量。

运算符

算数运算符:

运算符名称描述实例
+加法将两个值相加。x + y
-减法从一个值减去另一个值。x - y
*乘法将两个值相乘。x * y
/除法分子除以分母。x / y
%取模取模运算符,整除后的余数。x % y
++自增自增运算符,整数值增加 1。++x
--自减自减运算符,整数值减少 1。–x

赋值运算法:

运算符实例等同于
=x = 5x = 5
+=x += 3x = x + 3
-=x -= 3x = x - 3
*=x *= 3x = x * 3
/=x /= 3x = x / 3
%=x %= 3x = x % 3
&=x &= 3x = x & 3
|=x |= 3x = x | 3
^=x ^= 3x = x ^ 3
>>=x >>= 3x = x >> 3
<<=x <<= 3x = x << 3

关系运算符:

运算符名称实例
==等于x == y
!=不等于x != y
>大于x > y
<小于x < y
>=大于或等于x >= y
<=小于或等于x <= y

逻辑运算符:

运算符名称描述实例
&&逻辑与如果两个语句都为true,则返回truex < 5 && x < 10
||逻辑或如果其中一条语句为true,则返回truex < 5 || x < 4
!逻辑非反转结果,如果结果为真则返回false!(x < 5 && x < 10)

位运算符:

运算符描述例子等同于结果十进制
&AND - 如果两个位都为1,则将每个位设置为1。5 & 10101 & 000100011
|OR - 如果两个位中的任何一个为1,则将每个位设置为1。5 | 10101 | 000101015
~NOT - 反转所有位。~ 5~0101101010
^XOR - 如果两个位中只有一个为1,则将每个位设置为1。5 ^ 10101 ^ 000101004
<<Zero-fill left shift - 通过从右侧推入零并让最左边的位脱落来向左移动。9 << 11001 << 100102
>>Signed right shift - 通过从左侧推入最左侧位的副本并让最右侧位脱落来右移。9 >> 11001 >> 1110012
>>>Zero-fill right shift - 通过从左边推入零并让最右边的位脱落来右移。9 >>> 11001 >>> 101004

还有三元运算符?:也支持。

代码注释和编码规范

代码注释说明:

// 单行注释/*多行注释
*//**文档注释注意上面有两个**
*/

一些编码规范:

  1. package语句要写在类文件的第一行。如果类不在任何包中,可以不写package语句。
  2. import语句写在类的上方,package语句下方。

流程控制

if语句:

if () {} else if {} {} else {}

switch语句:

switch () {case x:break;case y:break;default:break;
}

循环语句:

while () {}do {} while ();for (x; y; z) {}for (i : a) {}

控制语句:

break;
continue;

数组

  • 声明一维数组:
int[] arr1;
// int arr2[];

第二种会在IDE中报告警:

Local variable 'arr2' has C-style array type declaration

所以还是建议使用数据类型[]的方式。

  • 一维数组赋值:
public void testArray() {int[] arr1;arr1 = new int[5];for (int j : arr1) {System.out.println(j);}
}
  • 声明的同时为一维数组分配内存:
int[] arr1 = new int[5];
  • 初始化一维数组:
int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = {10, 20, 30};
  • 二维数组可以看做是特殊的一维数组。
int[][] arr3 = new int[2][4];

2是行数,4是列数:

在这里插入图片描述

  • 二维数组的初始化:
int[][] arr4 = new int[][] {{1, 2, 3, 4}, {5, 6, 7, 8}};

arr3和arr4是等价的,但是不能直接写new int[2][4],会报错。

这样写更能看出行列关系:

int[][] arr3 = new int[][] {{1, 2, 3, 4},{5, 6, 7, 8}
};

数组的基本操作

  • 遍历:
int[][] arr3 = new int[][] {{1, 2, 3, 4},{5, 6, 7, 8}
};
for (int[] j : arr3) {for (int i : j) {System.out.println(i);}
}

foreach的方式很好用。

  • 填充:
int[] arr2 = new int[3];Arrays.fill(arr2, 1);
for (int i : arr2) {System.out.println(i);
}

为了使用fill(),需要导入对应的类:

import java.util.Arrays;

这里通过fill()为数组填充了同一个值。

还可以指定范围填充:

Arrays.fill(arr2, 0, 1, 10);

0表示起始位置,1表示结束位置(但该位置不在填充范围内),10表示需要填充的值。

  • 排序:
int[] arr1 = new int[] {10, 2, 1, 4, 5};
Arrays.sort(arr1);
for (int i : arr1) {System.out.println(i);
}
  • 复制数组:
int[] arr1 = new int[] {10, 2, 1, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, 10);
for (int i : arr2) {System.out.println(i);
}

如果复制的值超过了原有的数组,则用0填充。

也有一个范围的版本:

int[] arr1 = new int[] {10, 2, 1, 4, 5};
int[] arr2 = Arrays.copyOfRange(arr1, 1, 2);
for (int i : arr2) {System.out.println(i);
}

通用结束的索引没有包含在内,所以上例中只复制一个值。

  • 查询:
int[] arr1 = new int[] {10, 2, 1, 4, 5};
System.out.println(Arrays.binarySearch(arr1, 1));
System.out.println(Arrays.binarySearch(arr1, 0, arr1.length, 1));

返回的是索引值,同样可以指定范围。上例的返回值是2。

类和对象

面向对象的特性:

  • 封装。
  • 继承。
  • 多态。

类示例:

package LearnJava;public class Book {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}

修饰符权限

privateprotectedpublic
本类可见可见可见
同包其它类或子类不可见可见可见
其它包的类或子类不可见不可见可见

如果没有显式指定权限修饰符,则预设为包存取范围,即只有一个包中的类可以访问。

this关键字用于表示本类当前的对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类。this关键字只能在本类中使用。

构造函数:

public Book() {this.name = "Unspecific";
}
public Book(String name) {this.name = name;
}

如果类中没有定义构造方法,则会自动创建一个无参数的构造方法;如果已经有构造函数了,且都是带参数的,则不会有无参数的构造方法。

这里定义了两个构造函数,实际是中方法重载,即方法名相同,但是参数不同。

static定义类的静态变量或静态方法,它们在所有的实例中共享。静态成员同样有修饰符约束。

静态成员在类中可以不用this

package LearnJava;public class Book {private String name;public static int count = 0;public Book() {this.name = "Unspecific";count++;}public Book(String name) {this.name = name;count++;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void showBook() {System.out.format("Total count: %d\n", count);System.out.println(this.name);}
}

类的使用:

Book book1 = new Book();
Book book2 = new Book("Learning Java");
book1.showBook();
book2.showBook();

Object类

ID方法描述
1protected Object clone();
创建并返回一个对象的拷贝。
2boolean equals(Object obj);
比较两个对象是否相等。
3protected void finalize();
当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
4Class getClass();
获取对象的运行时对象的类。
5int hashCode();
获取对象的hash值。
6void notify();
唤醒在该对象上等待的某个线程。
7void notifyAll();
唤醒在该对象上等待的所有线程。
8String toString();
返回对象的字符串表示形式。
9void wait();
让当前线程进入等待状态。直到其他线程调用此对象的notify()方法或notifyAll()方法。
10void wait(long timeout);
让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过参数设置的timeout超时时间。
11void wait(long timeout, int nanos);
wait(long timeout)方法类似,多了一个nanos参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999),所以超时的时间还需要加上 nanos纳秒。

继承和多态

继承:

package LearnJava;public class FictionBook extends Book {public FictionBook(String name) {super(name);System.out.println("FictionBook(String)");  // 这句要在上句下面,否则会报错}
}

super指向父类,这里是父类的构造函数。

使用:

Book book = new FictionBook("The Three-Body Problem");
book.showBook();

这里有一个向上转型,即子类对象转换成父类对象。

子类可以直接使用父类的函数。

多态是通过父类可以对它以及其子类都可以进行通用操作(其中也包含了向上转型):

public static void checkBook(Book book) {if (book instanceof FictionBook) {System.out.println("This is a fiction book");} else if (book instanceof ReferenceBook) {System.out.println("This is a reference book");} else {System.out.println("This is a normal book");}
}Book book1 = new FictionBook("The Three-Body Problem");
Book book2 = new ReferenceBook("XinHua Dictionary");
checkBook(book1);
checkBook(book2);

这里使用了instanceof关键字,可以用来判断对象的类型。

前面介绍过final变量,还有:

  • final方法:防止子类修改父类的定义与实现方式,同时提高执行效率。
  • final类:不能被继承。

Java只支持单继承。

抽象类与接口

抽象类使用abstract关键字定义。

抽象类不可实例化。

通过abstract关键字还可以定义抽象方法,该方法没有方法体,本身没有任何意义,必须要被重写(可以被它的直接子类重写,也可以被其子类的子类重写)。当然抽象类中也可以有正常的方法。

接口是纯粹的抽象类,所有方法都没有方法体。

使用interface关键字定义接口。

接口中方法必须要是public或abstract形式的,否则没有意义。

接口中定义的任何字段都默认是static和final的。

内部类

在一个类中使用内部类,可以在内部类中直接存起其所在类的私有成员变量。

package LearnJava;public class OuterClass {private int x = 1;public class InnerClass {private int x = 11;public void show() {System.out.format("Inner int: %d\n", this.x);	// 只用内部类(就是它自己)的成员变量System.out.format("Outer int: %d\n", OuterClass.this.x);	// 使用外部类的成员变量}}public void show() {InnerClass inner = new InnerClass();inner.show();}
}

内部类的使用:

OuterClass out = new OuterClass();
OuterClass.InnerClass inner = out.new InnerClass(); // 内部类依赖于外部类的方法,所以必须要用out.new
out.show();
inner.show();

匿名类是只在创建对象时才会编写类体的一种方法。

匿名类的特点是“现用现写”。比如有一个抽象类:

package LearnJava;public abstract class AnimalClass {String name;public abstract void sound();
}

这里临时使用:

AnimalClass dog = new AnimalClass() {@Overridepublic void sound() {System.out.println("Wang ~ Wang ~");}
};
dog.sound();

异常

try-catch-finally语句块用于捕捉异常:

try {int a = 10 / 0;
}
catch (Exception e) {e.printStackTrace();
}
finally {System.out.println("Always be here");   // 无论是否异常都会执行
}

字符串

ID方法描述
1char charAt(int index)
返回指定索引处的 char 值。
2int compareTo(Object o)
把这个字符串和另一个对象比较。
3int compareTo(String anotherString)
按字典顺序比较两个字符串。
4int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
5String concat(String str)
将指定字符串连接到此字符串的结尾。
6boolean contentEquals(StringBuffer sb)
当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。
7static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的String。
8static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的String。
9boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
10boolean equals(Object anObject)
将此字符串与指定的对象比较。
11boolean equalsIgnoreCase(String anotherString)
将此String与另一个String比较,不考虑大小写。
12byte[] getBytes()
使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。
13byte[] getBytes(String charsetName)
使用指定的字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。
14void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
15int hashCode()
返回此字符串的哈希码。
16int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
17int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
19int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20String intern()
返回字符串对象的规范化表示形式。
21int lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。
22int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
24int lastIndexOf(String str, int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25int length()
返回此字符串的长度。
26boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
27boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
28boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
29String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。
30String replaceAll(String regex, String replacement)
使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
31String replaceFirst(String regex, String replacement)
使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。
32String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
33String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
34boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
35boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36CharSequence subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列。
37String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
38String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
39char[] toCharArray()
将此字符串转换为一个新的字符数组。
40String toLowerCase()
使用默认语言环境的规则将此String中的所有字符都转换为小写。
41String toLowerCase(Locale locale)
使用给定Locale的规则将此String中的所有字符都转换为小写。
42String toString()
返回此对象本身(它已经是一个字符串)。
43String toUpperCase()
使用默认语言环境的规则将此String中的所有字符都转换为大写。
44String toUpperCase(Locale locale)
使用给定Locale的规则将此String中的所有字符都转换为大写。
45String trim()
返回字符串的副本,忽略前导空白和尾部空白。
46static String valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。
47contains(CharSequence chars)
判断是否包含指定的字符系列。
48isEmpty()
判断字符串是否为空。

相关文章:

【Java】Java基础

环境准备 安装JDK和JRE 下载JDK&#xff0c;可以在官网Java Downloads | Oracle 中国下载&#xff0c;但是这里需要注册才能够下载。在Index of java-local/jdk (huaweicloud.com)也可以下载到&#xff0c;但是版本比较老&#xff0c;关系不大&#xff0c;直接下载&#xff0…...

Spring-SpringBoot-SpringMVC-MyBatis常见面试题

文章目录 Spring篇springbean是安全的的?什么是AOP你们工作中有用过AOP吗spring中的事务是如何实现的spring中事务失效场景Spring的生命周期spring中的循坏依赖springMVC的执行流程springboot的启动原理常用注解MyBatis执行流程Mybatis是否支持延迟加载&#xff1f;Mybatis的一…...

15.MyCat数据库分片

MyCat 是一个开源的数据库中间件&#xff0c;主要用于将数据库操作请求路由和分发到后端的多个数据库节点。 1.Mycat环境搭建 在两个不同数据库中创建相同表 下载mycat https://github.com/MyCATApache/Mycat-Serverhttps://github.com/MyCATApache/Mycat-Server 将下…...

【Python】PySpark

前言 Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、PB乃至EB级别的海量数据…...

pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境

pycharm 打开Terminal时报错activate.ps1&#xff0c;因为在此系统上禁止运行脚本&#xff0c;并因此无法进入虚拟环境 如下图所示&#xff1a; 网上说可以set_restrictFalse什么的&#xff0c;虽然也可但可能会降低电脑安全性&#xff0c;可以将下面的终端改为cmd.exe即可...

[C++][C#]yolox TensorRT C++ C#部署

YOLOX是一种新型的高性能探测器&#xff0c;由开发者Zheng Ge、Songtao Liu、Feng Wang、Zeming Li和Jian Sun在《YOLOX: Exceeding YOLO Series in 2021》首次提出。与YOLOV5和YOLOV8相比&#xff0c;YOLOX具有更高的性能和更好的平衡&#xff0c;在速度和精度方面都表现出优越…...

根据源码,模拟实现 RabbitMQ - 网络通讯设计,自定义应用层协议,实现 BrokerServer (8)

目录 一、网络通讯协议设计 1.1、交互模型 1.2、自定义应用层协议 1.2.1、请求和响应格式约定 ​编辑 1.2.2、参数说明 1.2.3、具体例子 1.2.4、特殊栗子 1.3、实现 BrokerServer 1.3.1、属性和构造 1.3.2、启动 BrokerServer 1.3.3、停止 BrokerServer 1.3.4、处…...

MongoDB入门

简介 MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库 是NoSQL数据库产品中的一种&#xff0c;是最像关系型数据库&#xff08;MySQL&#xff09;的非关系型数据库 内部采用BSON(二进制JSON)格式来存储数据,并支持水平扩展。 MongoDB本身并不是完全免费的,它对于…...

vr智慧党建主题展厅赋予企业数字化内涵

现如今&#xff0c;VR全景技术的发展让我们动动手指就能在线上参观博物馆、纪念馆&#xff0c;不仅不用受时间和空间的限制&#xff0c;还能拥有身临其境般的体验&#xff0c;使得我们足不出户就能随时随地学习、传承红色文化。 很多党建展厅都是比较传统的&#xff0c;没有运用…...

go中mutex的sema信号量是什么?

先看下go的sync.mutex是什么 type Mutex struct {state int32sema uint32 } 这里面有个sema&#xff0c;这个就是信号量。 什么是信号量&#xff1f; 什么是信号量&#xff1f;_kina100的博客-CSDN博客 其实通俗的来说&#xff0c;信号量就是信号灯&#xff0c;但是他不是…...

LeetCode笔记:Weekly Contest 360

LeetCode笔记&#xff1a;Weekly Contest 360 0. 吐槽1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接&#xff1a;https://leetcode.com/contest/weekly-contest-360/ 0.…...

【树DP】2021ICPC南京 H

Problem - H - Codeforces 题意&#xff1a; 思路&#xff1a; 这题应该算是铜牌题 铜牌题 简单算法 基础思维 简单复盘一下思路 首先&#xff0c;我们发现有个很特殊的条件&#xff1a; ti < 3 然后看一下样例&#xff1a; 注意到&#xff0c;对于一个结点 u &#…...

Leedcode19. 删除链表的倒数第 N 个结点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1…...

Mysql-索引查询相关

一、单表查询 1.1 二级索引为null 不论是普通的二级索引&#xff0c;还是唯一二级索引&#xff0c;它们的索引列对包含 NULL 值的数量并不限制&#xff0c;所以我们采用key IS NULL 这种形式的搜索条件最多只能使用 ref 的访问方法&#xff0c;而不是 const 的访问方法 1.2 c…...

C++ Pimpl

Pimpl(Pointer to implementation&#xff0c;指向实现的指针) 是一种减少代码依赖和编译时间的C编程技巧&#xff0c;其基本思想是将一个外部可见类(visible class)的实现细节&#xff08;一般是所有私有的非虚成员&#xff09;放在一个单独的实现类(implementation class)中&…...

rust学习-类型转换

基本类型转换 // 不显示类型转换产生的溢出警告。 #![allow(overflowing_literals)]fn main() {let decimal 65.4321_f32;// 错误&#xff01;不提供隐式转换// let integer: u8 decimal;// 可以显式转换let integer decimal as u8;let character integer as char;println…...

算法通过村第四关-栈青铜笔记|手写栈操作

文章目录 前言1. 栈的基础概要1.1 栈的特征1.2 栈的操作1.3 Java中的栈 2. 栈的实现&#xff08;手写栈&#xff09;2.1 基于数组实现2.2 基于链表实现2.3 基于LinkedList实现 总结 前言 提示&#xff1a;我自己一个人的感觉很好 我并不想要拥有你 除非你比我的独处更加宜人 --…...

Python计算加速利器

迷途小书童的 Note 读完需要 6分钟 速读仅需 2 分钟 1 简介 Python 是一门应用非常广泛的高级语言&#xff0c;但是&#xff0c;长久以来&#xff0c;Python的运行速度一直被人诟病&#xff0c;相比 c/c、java、c#、javascript 等一众高级编程语言&#xff0c;完全没有优势。 那…...

PyTorch 深度学习实践 第10讲刘二大人

总结&#xff1a; 1.输入通道个数 等于 卷积核通道个数 2.卷积核个数 等于 输出通道个数 1.单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。假设卷积核大小为3x3&#xff0c…...

Linux特殊指令

目录 1.dd命令 2.mkfs格式化 3.df命令 4.mount实现硬盘的挂载 5.unshare 1.dd命令 dd命令可以用来读取转换并输出数据。 示例一&#xff1a; if表示infile&#xff0c;of表示outfile。这里的/dev/zero是一个特殊文件&#xff0c;会不断产生空白数据。 bs表示复制一块的大…...

MPI之主从模式的一般编程示例

比如&#xff0c;我们可以选举0号进程为master进程&#xff0c;其余进程为slaver进程 #include "mpi.h" #include <unistd.h> #include <iostream>int main(int argc, char *argv[]) {int err MPI_Init(&argc,&argv);int rank,size;MPI_Comm_r…...

基于野狗算法优化的BP神经网络(预测应用) - 附代码

基于野狗算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于野狗算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.野狗优化BP神经网络2.1 BP神经网络参数设置2.2 野狗算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…...

C语言面向对象的编程思想

面向对象编程 面向对象编程Object-Oriented Programming&#xff0c;OOP&#xff09; 作为一种新方法&#xff0c;其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征&#xff0…...

MPI之非阻塞通信中通信完成检测接口简介

在之前的文章中&#xff0c;简单的写了一个非阻塞的通信代码介绍最最基本的使用&#xff1a; int main(int argc, char *argv[]) {int err MPI_Init(&argc,&argv);int rank,size;MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD, &size);…...

Excel:如何实现分组内的升序和降序?

一、POWER 1、构建辅助列D列&#xff0c;在D2单元格输入公式&#xff1a; -POWER(10,COUNTA($A$2:A2)3)C2 2、选中B1:D10&#xff0c;注意不能宣导A列的合并单元格&#xff0c;进行以下操作&#xff1a; 3、删除辅助列即可 二、COUNTA 第一步&#xff0c;D2建立辅助列&#xf…...

深度学习论文: Segment Any Anomaly without Training via Hybrid Prompt Regularization

深度学习论文: Segment Any Anomaly without Training via Hybrid Prompt Regularization Segment Any Anomaly without Training via Hybrid Prompt Regularization PDF: https://arxiv.org/pdf/2305.10724.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch Py…...

【算法训练-字符串】一 最长无重复子串

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是最长无重复子串或最长无重复子数组&#xff0c;这类题目出现频率还是很高的。 最长无重复子串【MID】 先来看字符串数据结构的题目 题干 解题思…...

【数据结构】手撕顺序表

一&#xff0c;概念及结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储&#xff1b; 在数组上完成数据的增删查改。 1&#xff0c; 静态顺序表&#xff1a;使用定长数组存储元素。 2.&#xff0c;动态顺序表&#xff1…...

景联文科技数据标注:人体关键点标注用途及各点的位置定义

人体关键点标注是一种计算机视觉任务&#xff0c;指通过人工的方式&#xff0c;在指定位置标注上关键点&#xff0c;例如人脸特征点、人体骨骼连接点等&#xff0c;常用来训练面部识别模型以及统计模型。这些关键点可以表示图像的各个方面&#xff0c;例如角、边或特定特征。在…...

typescript基础之never

TypeScript 的 never 类型是一种特殊的类型&#xff0c;它表示的是那些永远不存在的值的类型。例如&#xff0c;一个抛出异常或无限循环的函数的返回值类型就是 never&#xff0c;因为它们永远不会返回任何值。never 类型是所有类型的子类型&#xff0c;也就是说&#xff0c;任…...

电子电路学习笔记之NCP304LSQ37T1G ——超低电流电压检测器

超低电流电压检测器是一种专门用于检测极小电流值的设备。它们常用于电子元件或电路中&#xff0c;用于监测电流的存在和程度。这些检测器通常具有高灵敏度和高精度&#xff0c;能够测量微安级别或更小的电流。 超低电流电压检测器的应用领域广泛&#xff0c;例如电池管理系统…...

【计算机组成原理】一文快速入门,很适合JAVA后端看

作者简介&#xff1a; CSDN内容合伙人、CSDN新星计划导师、JAVA领域优质创作者、阿里云专家博主&#xff0c;计算机科班出身、多年IT从业经验、精通计算机核心理论、Java SE、Java EE、数据库、中间件、分布式技术&#xff0c;参加过国产中间件的核心研发&#xff0c;对后端有…...

10万字智慧政务大数据平台项目建设方案222页[Word]

导读:原文《10万字智慧政务大数据平台项目建设方案222页[Word]》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 1.1 项目建设目标 推进市一级政府搭建数字政府建设的规划要求,结合市一级政府“互联网+政务服务”建设…...

Python-主线程控制子线程-4

需求&#xff1a;在Python-主线程控制子线程-3的基础上&#xff0c;新增使用UDP接收指令功能&#xff0c;代替从键盘输入指令 # 修改后的程序&#xff0c;主线程可以获取子线程的结果 import threading import time import queue import tracebackfrom loguru import logger i…...

设计模式二十二:策略模式(Strategy Pattern)

定义一系列算法&#xff0c;将每个算法封装成独立的对象&#xff0c;并使这些对象可互相替换。这使得在运行时可以动态地选择算法&#xff0c;而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离&#xff0c;使得客户端可以根据需要灵活地选择和切换…...

【c语言】结构体内存对齐,位段,枚举,联合

之前学完结构体&#xff0c;有没有对结构体的大小会很疑惑呢&#xff1f;&#xff1f;其实结构体在内存中存储时会存在内存对齐&#xff0c;捎带讲讲位段&#xff0c;枚举&#xff0c;和联合&#xff0c;跟着小张一起学习吧 结构体内存对齐 结构体的对齐规则: 第一个成员在与结…...

干货丨软件测试行业迎来新时代,AI将成为主流技术?

随着科技日新月异的发展&#xff0c;人工智能正逐渐渗透到我们生活的各方各面&#xff0c;从智能语音助手到自动驾驶汽车、从智能家居到人脸识别技术&#xff0c;AI正以其卓越的智能和学习能力引领着新时代的发展方向。 在这个快速演进的时代中&#xff0c;软件测试领域也受到了…...

MacOS goland go1.21 debug问题

安装dlv brew install dlv 安装之后在终端会显示所在目录 类似/usr/local/Cellar/delve/1.21.0/bin 配置goland 在文件系统中找到goland 右击选择show package contents -> Contents -> plugins -> go 尝试替换 其中对应系统 的 dlv 结果还是不行 然后打开应用gol…...

python 笔记(1)——基础和常用部分

目录 1、print 输出不换行 2、格式化输出字符串 3、浮点数的处理 4、进制转换和ASCII与字符间的转换 5、随机数 6、字符串截取和内置方法 6-1&#xff09;字符串截取 6-2&#xff09;字符串内置方法 7、元组、列表&#xff0c;及其遍历方式 7-1&#xff09;列表常用内…...

kafka架构和原理详解

Apache Kafka 是一个分布式流数据平台,用于高吞吐量、持久性、可扩展的发布和订阅消息。它具有高度的可靠性,被广泛用于构建实时数据流处理、日志收集和数据管道等应用。 基本架构 1. 主题(Topic): 主题是消息的逻辑分类生产者将消息发布到特定的主题中,而消费者可以订阅…...

wsl Ubuntu中非root的普通用户怎么直接执行docker命令

docker需要root权限&#xff0c;如果希望非root用户直接使用docker命令&#xff0c;而不是使用sudo&#xff0c;可以选择将该用户加入到docker用户组。 sudo groupadd docker&#xff1a;添加到groupadd用户组&#xff08;已经有docker用户组&#xff0c;所以可以不用再新增do…...

Web开发模式、API接口、restful规范、序列化和反序列化、drf安装和快速使用、路由转换器(复习)

一 Web开发模式 1. 前后端混合开发模式 前后端混合开发模式是一种开发方式&#xff0c;将前端和后端的开发工作结合在一起&#xff0c;以加快项目的开发速度和 提高协作效率。这种模式通常用于快速原型开发、小型项目或敏捷开发中。在前后端混合开发模式中&#xff0c;前端和…...

<AMBA总线篇> AXI总线协议介绍

目录 01 AXI协议简介 AXI协议特性 AXI协议传输特性 02 AXI协议架构 AXI协议架构 write transaction(写传输) read tramsaction(读传输) Interface and interconnect 典型的AXI系统拓扑 03 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软件工程…...

一个简单的Python网络爬虫教程

网络爬虫是一种自动获取网页内容的程序&#xff0c;它可以从互联网上的网站中提取数据并进行分析。本教程将带您逐步了解如何使用 Python 构建一个简单的网络爬虫。 注意&#xff1a;在进行网络爬虫时&#xff0c;请遵守网站的使用条款和法律法规&#xff0c;避免对目标网站造…...

YARN资源管理框架论述

一、简介 为了实现一个Hadoop集群的集群共享、可伸缩性和可靠性&#xff0c;并消除早期MapReduce框架中的JobTracker性能瓶颈&#xff0c;开源社区引入了统一的资源管理框架YARN。 YARN是将JobTracker的两个主要功能&#xff08;资源管理和作业调度/监控&#xff09;分离&…...

Unity查找资源依赖关系

这个方法主要是发现资源乱用的情况&#xff0c;对应的逻辑可能要改一个才能用到自己的项目里面 [MenuItem("Tools/Prefab/查找选中资源依赖关系", false, 0)] public static void FindDependencies() { foreach (var guid in Selection.assetGUIDs…...

【操作系统】聊聊局部性原理是如何提升性能的

对于目前数据主导的系统&#xff0c;大多数都是Java/Go 技术栈MySQL&#xff0c;但是随着时间的推移&#xff0c;数据库数据的数据量过多&#xff0c;并且会频繁访问热点数据&#xff0c;为了提升系统的性能&#xff0c;一般都是加入缓存中间件、Redis。 局部性原理 我们知道…...

多线程应用——单例模式

单例模式 文章目录 单例模式一.什么是单例模式二.如何实现1.口头实现2.利用语法特性 三.实现方式&#xff08;饿汉式懒汉式&#xff09;1.饿汉式2.懒汉式3.线程安全的单例模式4.双重检查锁5.禁止指令重排序 一.什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff…...

几种在JavaScript中创建对象的方式!

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字面量方式⭐ 构造函数方式⭐ Object.create()方式⭐ 工厂函数方式⭐ ES6类方式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…...

java项目mysql转postgresql

特殊函数 &#xff1a; mysql&#xff1a; find_in_set(?, ancestors) postgresql&#xff1a; ? ANY (string_to_array(ancestors,,)) mysql&#xff1a; date_format(t1.oper_time, %Y-%m-%d) postgresql&#xff1a; rksj::date to_char(inDate,YYYY-MM-DD) mysql&am…...