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

Java大师成长计划之第1天:Java编程基础入门

📢 友情提示:

本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。

欢迎来到“Java大师成长计划”系列文章的第一天!在接下来的日子里,我们将一起深入学习Java编程,逐步成长为一名Java大师。今天,我们将从Java的基础知识入手,了解Java的基本语法、数据类型、变量以及控制结构。这些内容是每一位Java开发者必须掌握的基础。

一、Java简介

Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年首次发布。它具有以下几个重要特性:

  • 跨平台:Java的“编写一次,处处运行”(WORA)特性使其能够在不同操作系统上运行。
  • 面向对象:Java是一种面向对象的编程语言,支持封装、继承和多态等特性。
  • 强类型语言:Java是一种强类型语言,所有变量都必须声明类型。

二、Java的基本语法

Java 的基本语法是理解这门语言的基础,掌握这些语法规则对于编写高质量的 Java 代码至关重要。以下内容将详细介绍 Java 的语法结构,包括类的定义、方法的声明与调用、注释的使用、标识符和关键字,以及代码块的概念等。

1. 类的定义

在 Java 中,所有的代码都必须包含在类中。类是 Java 的基本构建块,用于创建对象。类的定义使用 class 关键字,其基本结构如下:

[修饰符] class 类名 {// 类的属性(字段)// 类的方法
}
示例:
public class Car {// 属性String color;String model;// 方法void displayInfo() {System.out.println("Model: " + model + ", Color: " + color);}
}

2. 方法的声明与调用

方法是执行特定任务的代码块。每个方法都有名称、返回类型和参数列表。方法的基本结构如下:

[修饰符] 返回类型 方法名(参数类型 参数名) {// 方法体return 返回值; // 如果返回类型不是void,必须有return语句
}
示例:
public class Calculator {// 方法:加法public int add(int a, int b) {return a + b;}public static void main(String[] args) {Calculator calc = new Calculator(); // 创建Calculator对象int result = calc.add(5, 3); // 调用add方法System.out.println("Result: " + result); // 输出结果}
}

3. 注释的使用

注释是代码中的说明文字,用于提高代码的可读性。Java 支持三种类型的注释:

  • 单行注释:使用 // 开头,后面的内容被视为注释,直到行尾。

    // 这是一个单行注释
    int x = 10; // 变量 x 的值为 10
    
  • 多行注释:使用 /* 开头,*/ 结束,可以跨越多行。

    /** 这是一个多行注释* 可以用于注释多个代码行*/
    
  • 文档注释:使用 /** 开头,*/ 结束,通常用于生成 API 文档。

    /*** 计算两个数的和* @param a 第一个数字* @param b 第二个数字* @return 两个数字的和*/
    public int add(int a, int b) {return a + b;
    }
    

4. 标识符与关键字

4.1 标识符

标识符是 Java 中用于标识类、方法、变量和其他用户定义项的名称。标识符的命名规则如下:

  • 标识符由字母、数字、下划线(_)或美元符号($)组成,不能以数字开头。
  • 标识符不能使用 Java 的关键字(如 classpublicvoid 等)。
  • 标识符区分大小写。
示例:
int myVariable; // 合法标识符
String $name;   // 合法标识符
float 2ndValue; // 非法标识符,不能以数字开头

4.2 关键字

关键字是 Java 语言保留的单词,具有特定的含义。它们不能用作标识符。以下是一些常用的关键字:

  • 访问修饰符publicprivateprotected
  • 数据类型intdoublebooleancharvoid
  • 控制结构ifelseforwhileswitch
  • 其他classinterfaceextendsimplementsnew

5. 代码块

代码块是由一对大括号 {} 包围的语句集合,用于将多条语句组织在一起。代码块可以出现在方法、类和控制结构中。

示例:
public class Example {void method() {// 这是一个方法体if (true) {// 这是一个代码块System.out.println("条件为真");}}
}

6. 语句与表达式

  • 语句:语句是程序中的一行代码,完成一个特定的操作,通常以分号 ; 结尾。例如:

    int a = 5; // 赋值语句
    
  • 表达式:表达式是计算值的代码片段,可以是变量、常量或运算符的组合。例如:

    int sum = a + 10; // a + 10是一个表达式
    

7. 常量与变量

在 Java 中,可以使用 final 关键字来定义常量。常量的值在定义后不能改变。变量则是可以改变值的存储单元。

示例:
final int MAX_VALUE = 100; // 常量
int currentValue = 50;     // 变量

8. 输入与输出

Java 提供了多种方式来处理输入和输出,最常用的是通过 System.out 进行输出,通过 Scanner 类进行输入。

输出示例:
System.out.println("Hello, world!"); // 输出到控制台

输入示例:
import java.util.Scanner;public class InputExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入一个整数: ");int number = scanner.nextInt(); // 从控制台读取整数System.out.println("您输入的数字是: " + number);}
}

9. 格式化输出

在 Java 中,我们可以使用 System.out.printf 方法实现格式化输出,类似于 C 语言的 printf 函数。它允许我们指定输出的格式。

示例:
double pi = 3.14159;
System.out.printf("π的值是:%.2f%n", pi); // 输出:π的值是:3.14

10. 总结

通过以上学习,我们对 Java 的基本语法有了深入的了解。掌握了类的定义、方法的声明和调用、注释的使用、标识符与关键字、代码块、语句与表达式、常量与变量以及输入输出等内容。这些都是程序设计的基础,在后续的学习中,我们将逐步探索更高级的主题,如面向对象编程、异常处理、JavaCollections等。希望大家能在这个过程中不断实践与探索,早日成为Java大师!

三、数据类型

在 Java 中,数据类型用于定义变量可以存储何种类型的数据。数据类型的选择对于优化程序的性能和内存使用至关重要。Java 的数据类型主要分为两类:基本数据类型引用数据类型。下面将详细介绍这两类数据类型的具体内容。

1、基本数据类型

基本数据类型是 Java 中最基本的类型,用于存储简单的值。Java 提供了 8 种基本数据类型,它们可以进一步划分为数字类型、字符类型和布尔类型。

【数字类型】

数字类型用于表示各种数值,可以分为整数类型和浮点数类型。

1.1 整数类型

  • byte:1 字节(8 位),用于存储较小的整数,范围:-128 到 127。

    byte b = 100;
    
  • short:2 字节(16 位),用于存储中等大小的整数,范围:-32,768 到 32,767。

    short s = 10000;
  • int:4 字节(32 位),是最常用的整数类型,范围:-2,147,483,648 到 2,147,483,647。

    int i = 50000;
  • long:8 字节(64 位),用于存储较大的整数,范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。可以通过在数字后添加 Ll 来表示 long 类型。

    long l = 15000000000L; // 使用 L 后缀

1.2 浮点数类型

  • float:4 字节(32 位),用于存储单精度浮点数,适合存储需要小数的数值。可以通过在数字后添加 Ff 来表示 float 类型。

    float f = 5.75f; // 使用 f 后缀
  • double:8 字节(64 位),用于存储双精度浮点数,是默认的浮点数类型,适合存储更大范围的小数值。

    double d = 19.99;
【字符类型】
  • char:2 字节(16 位),用于存储单个字符,使用 Unicode 编码表示字符,范围从 \u0000\uffff

    char c = 'A';
【布尔类型】
  • boolean:1 字节(虽然实际实现可能依赖于 JVM),用于表示真(true)或假(false),常用于条件判断。

    boolean isJavaFun = true;

2、引用数据类型

引用数据类型用于存储对象的引用,而不是直接存储数据。引用数据类型包括类、接口和数组。

2.1. 类

类是 Java 中的基本构造块,用于创建对象。类定义了一组属性和行为。

public class Person {String name; // 属性int age;     // 属性// 方法void displayInfo() {System.out.println("Name: " + name + ", Age: " + age);}
}// 创建对象
Person person = new Person();
person.name = "Alice";
person.age = 30;
person.displayInfo(); // 输出:Name: Alice, Age: 30
2.2. 接口

接口是一个抽象类型,定义了一组方法但不提供实现。类可以实现接口,从而具有接口定义的行为。

public interface Animal {void sound(); // 抽象方法
}public class Dog implements Animal {public void sound() {System.out.println("Woof");}
}// 创建对象
Animal myDog = new Dog();
myDog.sound(); // 输出:Woof
2.3. 数组

数组是存储多个相同类型数据的容器。数组的大小在创建时确定,不能改变。

int[] numbers = new int[5]; // 创建一个整型数组
numbers[0] = 10;
numbers[1] = 20;// 或者直接初始化数组
int[] numbers2 = {1, 2, 3, 4, 5};// 遍历数组
for (int n : numbers2) {System.out.println(n); // 输出:1 2 3 4 5
}

3、类型转换

在 Java 中,基本数据类型之间可以进行转换,分为隐式转换和显式转换。

3.1. 隐式转换

隐式转换(也称为自动类型转换)是指从一种数据类型转换为另一种数据类型时,系统会自动处理这种转换。例如,从 int 转换为 double

int intValue = 10;
double doubleValue = intValue; // 隐式转换
3.2. 显式转换

显式转换(也称为强制类型转换)是指需要通过强制类型转换符将一种类型转换为另一种类型,通常用于将更大范围的数据类型转换为更小范围的数据类型。例如:

double doubleValue = 9.78;
int intValue = (int) doubleValue; // 显式转换,结果为 9

4、总结

了解 Java 的数据类型对于有效地处理数据至关重要。基本数据类型提供了处理简单数据的能力,而引用数据类型则使得我们能够创建复杂的数据结构。掌握这些数据类型的使用与特性,将为后续的学习打下坚实的基础。在 Java 编程中,合理使用数据类型可以帮助我们提高程序的性能和可读性。随着我们逐步深入 Java 的其他特性,数据类型将成为我们编程的基石。

四、变量

在 Java 编程中,变量是用于存储数据的命名空间。它是一种可以改变的存储单元,可以在程序运行期间持有不同的值。理解变量的概念以及如何使用它们是学习 Java 的重要组成部分。本节将详细介绍变量的声明与初始化、变量的命名规则、作用域和生命周期、常量的使用以及变量的类型转换等内容。

1、变量的声明与初始化

在 Java 中,使用变量之前必须先声明它。变量的声明指定了变量的类型和名称。变量的初始化则是指给变量分配一个初始值。

1.1 变量的声明

变量的声明格式如下:

数据类型 变量名;

例如,声明一个整数变量 num

int num;

可以在声明时不直接赋值,这种情况下,变量将具有默认值(对于基本数据类型,int 的默认值是 0)。

1.2 变量的初始化

变量的初始化是给变量赋予初值的过程,格式如下:

变量名 = 值;

例如,将 num 初始化为 5:

num = 5;

我们也可以在声明时直接进行初始化:

int num = 5; // 声明并初始化变量

2、变量的命名规则

在 Java 中,变量名必须遵循一定的命名规则和约定,以确保代码的可读性和一致性。

2.1 命名规则
  • 合法字符:变量名可以包含字母、数字、下划线(_)和美元符号($)。
  • 首字符:变量名必须以字母、下划线或美元符号开头,不能以数字开头。
  • 区分大小写:Java 是区分大小写的,变量名 myVariable 和 myvariable 是两个不同的变量。
  • 关键字:变量名不能使用 Java 的关键字(如 intclasspublic 等)。
2.2 命名约定

虽然 Java 对变量名的命名没有强制要求,但有一些命名约定有助于提高代码的可读性:

  • 驼峰命名法:变量名的第一个单词小写,后续单词首字母大写,例如:myVariableName
  • 意义明确:变量名应具有描述性,能够清晰表达该变量的用途,例如:studentAge 代表学生的年龄。
  • 避免使用不必要的缩写:尽量避免使用不明确的缩写,以便其他开发者能够轻松理解代码。

3、变量的作用域和生命周期

变量的作用域是指变量在代码中可见和有效的范围。Java 中的变量作用域可以分为以下几类:

3.1 局部变量

局部变量是在方法、构造函数或块中声明的变量。局部变量的作用域仅限于声明它们的代码块。在代码执行结束后,局部变量会被销毁。

public class Example {public void myMethod() {int localVar = 10; // 局部变量System.out.println(localVar);}
}
3.2 实例变量

实例变量是在类中声明的变量,但不在任何方法中。实例变量的作用域是整个类,可以在类的任何方法中访问。每个对象都有自己独立的实例变量。

public class Person {String name; // 实例变量public Person(String name) {this.name = name; // 使用构造函数初始化实例变量}public void displayName() {System.out.println("Name: " + name);}
}
3.3 静态变量

静态变量是使用 static 关键字声明的变量。静态变量的作用域是整个类,可以通过类名直接访问,而不需要创建类的实例。静态变量在类的所有对象间共享。

public class Counter {static int count = 0; // 静态变量public Counter() {count++; // 每创建一个对象,count 增加 1}public static void displayCount() {System.out.println("Count: " + count);}
}

4、常量的使用

常量是一个在程序运行期间值不变的变量。在 Java 中,可以使用 final 关键字来定义常量。常量通常使用全大写字母命名,以便与变量区分开。

final int MAX_SPEED = 120; // 定义一个常量

常量一旦被赋值,就不能再修改:

MAX_SPEED = 150; // 编译错误,不能修改常量的值

5、变量的类型转换

在 Java 中,变量的类型转换分为隐式转换和显式转换。

5.1 隐式转换

隐式转换(自动类型转换)是在赋值或运算时,较小的数据类型自动转换为较大的数据类型。例如:

int intValue = 100;
double doubleValue = intValue; // 隐式转换,int 转换为 double
5.2 显式转换

显式转换(强制类型转换)是指将较大类型的数据强制转换为较小类型的数据,通常使用括号来进行转换。例如:

double doubleValue = 9.78;
int intValue = (int) doubleValue; // 显式转换,结果为 9

6、总结

变量是 Java 编程的基本组成部分,理解变量的声明、初始化、命名规则、作用域、常量以及类型转换是编写高效代码的基础。在实际开发中,合理使用变量可以提高代码的可读性和可维护性。掌握这些知识后,您将能够更好地管理程序中的数据,并为学习更复杂的概念打下基础。在接下来的学习中,我们将继续深入 Java 的其他特性,如控制结构、面向对象编程等。

五、控制结构

在 Java 编程中,控制结构用于控制程序的执行流程。控制结构允许开发者根据条件执行不同的代码块,或者重复执行特定的操作。Java 提供了多种控制结构,包括条件语句和循环语句。理解这些控制结构的工作原理以及如何使用它们是编写逻辑清晰、功能强大的程序的基础。以下将详细介绍 Java 中的控制结构。

1、条件语句

条件语句用于基于给定条件的真值来选择执行的代码块。主要的条件语句包括 if 语句、if-else 语句、switch 语句等。

1.1 if 语句

if 语句用于根据布尔条件执行单个代码块。如果条件为真,则执行相应的代码块。基本语法

if (条件) {// 当条件为真时执行的代码
}

示例

int score = 85;
if (score >= 60) {System.out.println("你通过了考试!");
}
1.2 if-else 语句

if-else 语句用于在条件为真或假时执行不同的代码块。基本语法

if (条件) {// 当条件为真时执行的代码
} else {// 当条件为假时执行的代码
}

示例

int score = 55;
if (score >= 60) {System.out.println("你通过了考试!");
} else {System.out.println("你没有通过考试。");
}
1.3 else if 语句

else if 语句用于多个条件的判断。可以有任意数量的 else if 语句来检查多个条件。基本语法

if (条件1) {// 当条件1为真时执行的代码
} else if (条件2) {// 当条件2为真时执行的代码
} else {// 所有条件都不为真时执行的代码
}

示例

int score = 75;
if (score >= 90) {System.out.println("优秀");
} else if (score >= 75) {System.out.println("良好");
} else if (score >= 60) {System.out.println("及格");
} else {System.out.println("不及格");
}
1.4 switch 语句

switch 语句用于根据某个变量的值选择执行不同的代码块。它通常用于处理多个条件的情况,尤其是当这些条件是基于同一个变量的多个值时。基本语法

switch (变量) {case 值1:// 当变量等于值1时执行break;case 值2:// 当变量等于值2时执行break;default:// 如果没有匹配到任何值,执行这里的代码
}

示例

char grade = 'B';
switch (grade) {case 'A':System.out.println("优秀");break;case 'B':System.out.println("良好");break;case 'C':System.out.println("及格");break;default:System.out.println("不及格");break;
}

2、循环语句

循环语句用于重复执行一段代码,直到满足特定条件。Java 提供了几种类型的循环,包括 for 循环、while 循环和 do-while 循环。

2.1 for 循环

for 循环用于在特定次数内重复执行代码块。它通常用于需要明确迭代次数的情况。基本语法

for (初始化; 条件; 更新) {// 循环体
}

示例

for (int i = 1; i <= 5; i++) {System.out.println("第 " + i + " 次循环");
}
2.2 while 循环

while 循环在给定条件为真时重复执行代码块。它适用于在循环开始前不确定迭代次数的情况。基本语法

while (条件) {// 循环体
}

示例

int count = 1;
while (count <= 5) {System.out.println("第 " + count + " 次循环");count++;
}
2.3 do-while 循环

do-while 循环与 while 循环类似,但它至少执行一次循环体,因为条件是在循环体执行后检查的。基本语法

do {// 循环体
} while (条件);

示例

int count = 1;
do {System.out.println("第 " + count + " 次循环");count++;
} while (count <= 5);

3、控制循环的语句

在循环中,有时需要提前跳出循环或者跳过当前迭代。Java 提供了 breakcontinue 关键字来实现这些功能。

3.1 break 语句

break 语句用于提前终止循环或 switch 语句。示例

for (int i = 1; i <= 10; i++) {if (i == 6) {break; // 当 i 为 6 时,终止循环}System.out.println("第 " + i + " 次循环");
}
3.2 continue 语句

continue 语句用于跳过当前循环的剩余部分,并立即开始下一次循环迭代。示例

for (int i = 1; i <= 10; i++) {if (i == 6) {continue; // 当 i 为 6 时,跳过本次循环}System.out.println("第 " + i + " 次循环");
}

4、嵌套控制结构

在 Java 中,可以将控制结构嵌套在其他控制结构中。例如,可以在 if 语句中使用 for 循环,也可以在 for 循环中使用 while 循环。示例

for (int i = 1; i <= 3; i++) {System.out.println("外层循环 " + i);for (int j = 1; j <= 2; j++) {System.out.println("  内层循环 " + j);}
}

5、总结

控制结构是 Java 编程中实现逻辑决策与循环执行的关键组成部分。通过条件语句(ifswitch)和循环语句(forwhiledo-while),程序员可以根据不同的输入和条件控制程序的流向。掌握这些控制结构将极大提高代码的灵活性和可读性。在后续的学习中,我们将会结合控制结构与其他 Java 特性,例如数组和对象,进一步构建更复杂的逻辑和功能。

六、示例:结合变量与控制结构

在本节中,我们将通过一个具体示例来演示如何结合变量与控制结构,以实现一个实际应用程序。我们将创建一个简单的程序,该程序将根据用户输入的分数,评估学生的成绩并输出相应的评价。同时,我们还将使用循环来处理多个学生的评分。

1、程序需求

程序需要完成以下功能:

  1. 提示用户输入学生的分数。
  2. 根据分数输出相应的成绩等级:
    • 90 分及以上:优秀
    • 75 分至 89 分:良好
    • 60 分至 74 分:及格
    • 60 分以下:不及格
  3. 用户可以选择继续输入下一个学生的分数,直到选择退出。

2、编码实现

以下是实现上述需求的 Java 程序示例:

import java.util.Scanner;public class GradeEvaluation {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String continueInput; // 变量用于控制是否继续输入分数do {System.out.print("请输入学生的分数(0-100):");int score = scanner.nextInt(); // 声明并初始化分数变量// 评分等级判断if (score < 0 || score > 100) {System.out.println("输入无效,请输入 0 到 100 之间的分数。");} else if (score >= 90) {System.out.println("成绩等级:优秀");} else if (score >= 75) {System.out.println("成绩等级:良好");} else if (score >= 60) {System.out.println("成绩等级:及格");} else {System.out.println("成绩等级:不及格");}// 询问用户是否继续输入System.out.print("是否继续输入?(y/n):");continueInput = scanner.next(); // 用户输入} while (continueInput.equalsIgnoreCase("y")); // 忽略大小写进行比较System.out.println("感谢使用成绩评估系统!");scanner.close(); // 关闭 Scanner 对象}
}

3、代码解析

1. 导入 Scanner 类
import java.util.Scanner;

我们使用 Scanner 类来获取用户的输入。通过导入 java.util.Scanner,我们可以在程序中创建一个 Scanner 对象,以便从控制台读取数据。

2. 主方法和变量声明
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String continueInput; // 变量用于控制是否继续输入分数

main 方法中,我们创建了一个 Scanner 对象 scanner,用于读取用户输入。我们还声明了一个 String 类型的变量 continueInput,用于存储用户是否继续输入的选择。

3. do-while 循环
do {// ...
} while (continueInput.equalsIgnoreCase("y"));

使用 do-while 循环可以确保程序至少执行一次,并在用户选择继续输入时重复执行。循环体内包含了获取分数和输出成绩等级的逻辑。

4. 获取分数并判断等级
System.out.print("请输入学生的分数(0-100):");
int score = scanner.nextInt(); // 声明并初始化分数变量// 评分等级判断
if (score < 0 || score > 100) {System.out.println("输入无效,请输入 0 到 100 之间的分数。");
} else if (score >= 90) {System.out.println("成绩等级:优秀");
} else if (score >= 75) {System.out.println("成绩等级:良好");
} else if (score >= 60) {System.out.println("成绩等级:及格");
} else {System.out.println("成绩等级:不及格");
}

程序提示用户输入分数,并将输入的分数存储在变量 score 中。通过一系列的 if-else if 语句,根据用户输入的分数判断并输出对应的成绩等级。此外,我们还添加了对无效输入的处理,确保用户输入的分数在合理范围内。

5. 继续输入的提示
System.out.print("是否继续输入?(y/n):");
continueInput = scanner.next(); // 用户输入

用户输入 yn 来决定是否继续输入。如果输入 y(不区分大小写),程序将再次提示输入分数。

6. 结束语和资源管理
System.out.println("感谢使用成绩评估系统!");
scanner.close(); // 关闭 Scanner 对象

在程序结束时,我们输出一条感谢消息,并关闭 Scanner 对象以释放资源。

4、运行实例

假设用户的输入过程如下:

请输入学生的分数(0-100):85
成绩等级:良好
是否继续输入?(y/n):y
请输入学生的分数(0-100):45
成绩等级:不及格
是否继续输入?(y/n):n
感谢使用成绩评估系统!

5、总结

通过这个示例,我们展示了如何结合使用变量与控制结构,以实现一个简单的成绩评估系统。程序中使用了变量来存储用户的输入,以及条件语句对输入进行判断处理。此外,利用循环结构允许用户多次输入分数,从而提高了程序的灵活性和实用性。掌握这种结合使用的方式,将为开发更复杂的应用程序打下基础。在后续的学习中,您可以尝试扩展该程序,例如增加更多的功能,处理不同类型的输入等。

七、总结

今天我们学习了Java编程的基础知识,包括基本语法、数据类型、变量与控制结构。这些概念是编写Java程序的基石。掌握这些基础知识后,您将能够编写更复杂的Java程序。

相关文章:

Java大师成长计划之第1天:Java编程基础入门

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 欢迎来到“Java大师成长计划”系列文…...

Java线程中断机制详解

中断机制是Java中一种协作式的线程停止方式&#xff0c;它提供了一种优雅的线程间通信机制&#xff0c;用于请求另一个线程停止当前工作。 中断机制的核心概念 中断标志位(Interrupt Status) 每个线程都有一个boolean类型的中断状态标志&#xff08;native方法控制&#xff09…...

gem5-gpu教程06 回归测试

gem5-gpu包括gem5风格的回归测试,以避免常见错误,并在变更集之间保持模拟系统性能的一致性。如果你想为gem5-gpu做出贡献,你必须确保你的更改通过了包含的回归测试。 回归测试是一种软件测试类型,其主要目的是确保新代码的更改没有对现有功能造成影响。在软件开发过程中,当…...

查询Hologres或postgresql中的数据

因Hologres使用postgresql的语法.所以两者查询一样. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一个使用简单连接池管理PostgreSQL连接的工具类。*/ publi…...

C# 文件读取

文件读取是指使用 C# 程序从计算机文件系统中获取文件内容的过程。将存储在磁盘上的文件内容加载到内存中&#xff0c;供程序处理。主要类型有&#xff1a;文本文件读取&#xff08;如 .txt, .csv, .json, .xml&#xff09;&#xff1b;二进制文件读取&#xff08;如 .jpg, .pn…...

On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其一CLT与LLM知识推理

这个学习笔记&#xff0c;是在精读Anthropic的博客 On the Biology of a Large Language Model 的过程中留下的笔记。 由于原文非常长&#xff0c;我会分2-3 个博客来写。 作者的思路 作者对常用的LLM特征解读工具 SAE/Transcoder 进行了优化&#xff0c;增加了跨层连接的能力…...

Postman忘记密码访问官网总是无响应

1.Header Editor插件下载 百度网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1EV6cY7TYQVgPjip3v-vhfQ 提取码&#xff1a;yyds 2.插件配置 下载规则url&#xff1a;https://azurezeng.github.io/static/HE-GoogleRedirect.json ![在这里插入图片描述](htt…...

NEUOJ网格路径

​ 在一个 77 的网格中&#xff0c;从左上方的方格走到左下方的方格&#xff0c;共有 88418 条路径。每条路径对应一个由字符 D&#xff08;向下&#xff09;、U&#xff08;向上&#xff09;、L&#xff08;向左&#xff09;和 R&#xff08;向右&#xff09;组成的 48 字符描…...

深度学习中的黑暗角落:梯度消失与梯度爆炸问题解析

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4o-mini模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…...

【数字图像处理】机器视觉(1)

判别相对应的点 1. 图像灰度化 2. 局部特征 3. 仿射不变性特征 图像变化的类型 【1】几何变化&#xff1a;旋转、相似&#xff08;旋转 各向相同的尺度缩放&#xff09;、仿射&#xff08;非各向相同的尺度缩放&#xff09; 【2】灰度变化&#xff1a;仿射灰度变化 角点 角…...

# 构建和训练一个简单的CBOW词嵌入模型

构建和训练一个简单的CBOW词嵌入模型 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词嵌入是一种将词汇映射到连续向量空间的技术&#xff0c;这些向量能够捕捉词汇之间的语义关系。在这篇文章中&#xff0c;我们将构建和训练一个简单的Continuous Bag of Words…...

Ubuntu20.04下GraspNet复现流程中的问题

pytorchcudacudnn的版本问题相对于GraspNet来说至关重要&#xff01;&#xff01;&#xff01;至关重要&#xff01;&#xff01;&#xff01;至关重要&#xff01;&#xff01;&#xff01;&#xff08;重要的事情说三边&#xff09; 我的显卡是3070 那么首先说结论 使用30系…...

【ROS2】机器人操作系统安装到Ubuntu简介

主要参考&#xff1a; https://book.guyuehome.com/ROS2/1.系统架构/1.3_ROS2安装方法/ 官方文档&#xff1a;https://docs.ros.org/en/humble/Installation.html 虚拟机与ubuntu系统安装 略&#xff0c;见参考文档 ubutun换国内源&#xff0c;略 1. 设置本地语言 确保您有…...

从0到1掌握机器学习核心概念:用Python亲手构建你的第一个AI模型(超多代码+可视化)

&#x1f9e0; 一、开始 真正动手实现一个完整的AI项目&#xff01;从数据预处理、特征工程、模型训练&#xff0c;到评估与调优&#xff0c;一步步还原你在动画视频中看到的所有核心知识点。 &#x1f4e6; 二、环境准备 建议使用 Python 3.8&#xff0c;推荐工具&#xff1…...

Java面试题汇总

1王二哥 https://javabetter.cn/sidebar/sanfene/redis.html#_10-redis-%E6%8C%81%E4%B9%85%E5%8C%96%E6%96%B9%E5%BC%8F%E6%9C%89%E5%93%AA%E4%BA%9B-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB 2.小林 https://www.xiaolincoding.com/redis/data_struct/command.html#…...

Ollama API 应用指南

1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST&#xff08;主要&#xff09;、GET&#xff08;部分接口&#xff09; 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…...

React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案

一条“Hydration failed”的错误&#xff0c;让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用&#xff0c;一切顺利&#xff0c;直到打开了 SSR&#xff08;服务端渲染&#xff09;&#xff0c;突然看到这个令人头皮发麻的报错&#xff1a; …...

【论文精读】Reformer:高效Transformer如何突破长序列处理瓶颈?

目录 一、引言&#xff1a;当Transformer遇到长序列瓶颈二、核心技术解析&#xff1a;从暴力计算到智能优化1. 局部敏感哈希注意力&#xff08;LSH Attention&#xff09;&#xff1a;用“聚类筛选”替代“全量计算”关键步骤&#xff1a;数学优化&#xff1a; 2. 可逆残差网络…...

iOS18 MSSBrowse闪退

iOS18 MSSBrowse闪退 问题方案结果 问题 最近升级了电脑系统(15.4.1)&#xff0c;并且也升级了xcode(16.3)开发工具。之后打包公司很早之前开发的项目。 上线之后发现在苹果手机系统18以上&#xff0c;出现了闪退问题。 涉及到的是第三方MSSBrowse&#xff0c;在选择图片放大的…...

create_function()漏洞利用

什么是 create_function() create_function() 是 PHP 早期提供的一个用来创建匿名函数的函数&#xff1a; $func create_function($a,$b, return $a $b;); echo $func(1, 2); // 输出 3 第一个参数是函数的参数列表&#xff08;字符串形式&#xff09;&#xff0c;第二个参…...

leetcode-数组

数组 31. 下一个排列 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大…...

Tailwind CSS 实战:基于 Kooboo 构建个人博客页面

在现代 web 开发中&#xff0c;Tailwind CSS 作为一款实用优先的 CSS 框架&#xff0c;能让开发者迅速搭建出具有良好视觉效果的页面&#xff1b;Kooboo 则是一个强大的快速开发平台&#xff0c;提供了便捷的页面管理和数据处理功能。本文将详细介绍如何结合 Tailwind CSS 和 K…...

C#学习1_认识项目/程序结构

一、C#项目文件的构成 1.新建一个项目 2.运行项目 3.认识文件 1&#xff09;解决方案&#xff08;Solution&#xff09;&#xff1a;组织多个项目的容器 抽象理解&#xff1a;餐厅 解决方案.sln文件&#xff0c;点击即可进入VS编辑 2&#xff09;项目&#xff08;…...

边缘计算在工业自动化中的应用:开启智能制造新时代

在工业4.0的浪潮中&#xff0c;智能制造成为推动工业发展的核心驱动力。随着物联网&#xff08;IoT&#xff09;技术的广泛应用&#xff0c;工业设备之间的互联互通变得越来越紧密&#xff0c;但这也带来了数据处理和传输的挑战。边缘计算作为一种新兴技术&#xff0c;通过将计…...

《MySQL:MySQL表的内外连接》

表的连接分为内连接和外连接。 内连接 内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选&#xff0c;之前的文章中所用的查询都是内连接&#xff0c;也是开发中使用的最多的连接查询。 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件&#xff1…...

人工智能催化民航业变革:五大应用案例

航空业正在经历一场前所未有的技术革命&#xff0c;人工智能正成为变革的主要催化剂。从停机坪到航站楼&#xff0c;从维修机库到客户服务中心&#xff0c;人工智能正在从根本上重塑航空公司的运营和服务方式。这种转变并非仅仅停留在理论上——全球主要航空公司已从人工智能投…...

机器视觉中有哪些常见的光学辅助元件及其作用?

在机器视觉领域&#xff0c;光学元件如透镜、反射镜和棱镜扮演着至关重要的角色。它们不仅是高精度图像捕获的基础&#xff0c;也是提升机器视觉系统性能的关键。深入了解这些光学元件的功能和应用&#xff0c;可以帮助我们更好地掌握机器视觉技术的精髓。 透镜&#xff1a;精…...

Stream API 对两个 List 进行去重操作

在 Java 8 及以上版本中&#xff0c;可以使用 Lambda 表达式和 Stream API 对两个 List 进行去重操作。以下是几种常见的去重场景及对应的 Lambda 表达式实现方式&#xff1a; 1. 合并两个 List 并去重 List<String> list1 Arrays.asList("A", "B"…...

lerna 8.x 详细教程

全局安装 lerna npm install lerna -g初始化项目 mkdir lerna-cli-do cd lerna-cli-do npm init -y初始化项目 lerna init --packages="packages/*"lerna create 创建子项目 lerna create core lerna create util...

ROS第十二梯:ros-noetic和Anaconda联合使用

1) 概述 ros-noetic默认Python版本是Python2.7,但在使用过程中,通常需要明确调用python3进行编译。 Anaconda: 支持创建独立的python2/3环境,避免系统库冲突; 方便安装ROS依赖的科学计算库(如Numpy,Pandas)和机器学习框架; 核心目标:在anaconda环…...

网络原理 - 5(TCP - 2 - 三次握手与四次挥手)

目录 3. 连接管理 建立连接 - 三次挥手 三次握手的意义 断开连接 - 四次挥手 握手和挥手的相似和不同之处 连接管理过程中涉及到的 TCP 状态转换 完&#xff01; 3. 连接管理 连接管理分为建立连接 和 断开连接~&#xff08;important 重点&#xff01;&#xff09; 建…...

【开源】STM32HAL库移植Arduino OneWire库驱动DS18B20和MAX31850

项目开源链接 github主页https://github.com/snqx-lqh本项目github地址https://github.com/snqx-lqh/STM32F103C8T6HalDemo作者 VXQinghua-Li7 &#x1f4d6; 欢迎交流 如果开源的代码对你有帮助&#xff0c;希望可以帮我点个赞&#x1f44d;和收藏 项目说明 最近在做一个项目…...

【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性

在Maven项目中&#xff0c;POM (Project Object Model) 文件是核心配置文件&#xff0c;而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置&#xff0c;并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…...

DC-2寻找Flag1、2、3、4、5,wpscan爆破、git提权

一、信息收集 1、主机探测 arp-scan -l 探测同网段2、端口扫描 nmap -sS -sV 192.168.66.136 80/tcp open http Apache httpd 2.4.10 ((Debian)) 7744/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u7 (protocol 2.0)这里是扫描出来两个端口&#xff0c;80和ssh&…...

数据结构手撕--【栈和队列】

目录 1、栈 2、队列 1、栈 先进后出&#xff08;都在栈顶进行操作&#xff09; 使用数组结构比使用链式结构更优&#xff0c;因为数组在尾上插入数据的代价更小。并且采用动态长度的数组来表示。 定义结构体 #include <stdio.h> #include <stdlib.h> #include &l…...

八大排序——选择排序/堆排序

八大排序——选择排序/堆排序 目录 一、选择排序 二、堆排序 2.1 大顶堆&#xff08;升序&#xff09; 2.1.1 步骤 2.1.2 代码实现 2.2 小顶堆&#xff08;降序&#xff09; 一、选择排序 每一趟从待排序序列中找到其最小值&#xff0c;然后和待排序序列的第一个值进行交换&am…...

【KWDB 创作者计划】_深度学习篇---归一化反归一化

文章目录 前言一、归一化(Normalization)1. 定义2. 常用方法Min-Max归一化Z-Score标准化(虽常称“标准化”,但广义属归一化)小数缩放(Decimal Scaling)3. 作用4. 注意事项二、反归一化(Denormalization)1. 定义2.方法3. 应用场景三、Python示例演示四、归一化 vs. 标准…...

windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页

背景 对于一些只能在ubuntu上运行的脚本&#xff0c;并且这个脚本会在ubuntu上通过网页展示运行结果。我们希望可以使用windows远程操控ubuntu&#xff0c;在windows上查看网页内容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…...

推荐系统(二十四):Embedding层的参数是如何在模型训练过程中学习的?

近来有不少读者私信我关于嵌入层&#xff08;Embedding层&#xff09;参数在模型训练过程中如何学习的问题。虽然之前已经在不少文章介绍过 Embedding&#xff0c;但是为了读者更好地理解&#xff0c;笔者将通过本文详细解读嵌入层&#xff08;Embedding Layer&#xff09;的参…...

【Ubuntu】关于系统分区、挂载点、安装位置的一些基本信息

在ubuntu22及以前的版本中&#xff0c;最好是手动配置分区及其挂载点&#xff0c;通常我们会配置成3/4个分区&#xff1a; 引导区&#xff0c;交换区&#xff0c;根挂载点&#xff0c;home挂载点&#xff08;有时根挂载点和home合二为一&#xff09; 配置各种环境所占用的内存 …...

概率dp总结

概率 DP 用于解决概率问题与期望问题&#xff0c;建议先对 概率 & 期望 的内容有一定了解。一般情况下&#xff0c;解决概率问题需要顺序循环&#xff0c;而解决期望问题使用逆序循环&#xff0c;如果定义的状态转移方程存在后效性问题&#xff0c;还需要用到 高斯消元 来优…...

深入解析:RocketMQ、RabbitMQ和Kafka的区别与使用场景

互联网大厂Java求职者面试&#xff1a;RocketMQ、RabbitMQ和Kafka的深入解析 故事场景&#xff1a;严肃且专业的面试官与架构师程序员马架构 在一家知名的互联网大厂&#xff0c;Java求职者正在接受一场严格的面试。面试官是一位经验丰富的技术专家&#xff0c;他将通过多轮提…...

探秘Transformer系列之(30)--- 投机解码

探秘Transformer系列之&#xff08;30&#xff09;— 投机解码 文章目录 探秘Transformer系列之&#xff08;30&#xff09;--- 投机解码0x00 概述0x01 背景1.1 问题1.2 自回归解码 0x02 定义 & 历史2.1 投机解码2.2 发展历史 0x03 Blockwise Parallel Decoding3.1 动机3.2…...

【CSS】层叠,优先级与继承(三):超详细继承知识点

目录 继承一、什么是继承&#xff1f;2.1 祖先元素2.2 默认继承/默认不继承 二、可继承属性2.1 字体相关属性2.2 文本相关属性2.3 列表相关属性 三、不可继承属性3.1 盒模型相关属性3.2 背景相关属性 四、属性初始值4.1 根元素4.2 属性的初始值4.3 得出结论 五、强制继承5.1 in…...

SpringBoot中6种自定义starter开发方法

在SpringBoot生态中,starter是一种特殊的依赖,它能够自动装配相关组件,简化项目配置。 自定义starter的核心价值在于: • 封装复杂的配置逻辑,实现开箱即用 • 统一技术组件的使用规范,避免"轮子"泛滥 • 提高开发效率,减少重复代码 方法一:基础配置类方式 …...

时间自动填写——电子表格公式的遗憾(DeepSeek)

now()/today()缘源来&#xff0c;人肉值粘胜无依。用函数抓取系统时间&#xff0c;人肉CTRLC“永葆青春”——直接时间数据存储。 笔记模板由python脚本于2025-04-23 23:21:44创建&#xff0c;本篇笔记适合想要研究电子表格日期自动填写的coder翻阅。 【学习的细节是欢悦的历程…...

AUTODL关闭了程序内存依然占满怎么办

AutoDL帮助文档 关闭了程序&#xff0c;使用nvidia-smi查看&#xff0c;内存任然爆满&#xff1a; 执行 ps -ef | grep train | awk {print $2} | xargs kill -9...

Spark集群搭建之Yarn模式

1.把spark安装包复制到你存放安装包的目录下&#xff0c;例如我的是/opt/software cd /opt/software&#xff0c;进入到你存放安装包的目录 然后tar -zxvf 你的spark安装包的完整名字 -C /opt/module&#xff0c;进行解压。例如我的spark完整名字是spark-3.1.1-bin-hadoop3.2.…...

CSS-跟随图片变化的背景色

CSS-跟随图片变化的背景色 获取图片的主要颜色并用于背景渐变需要安装依赖 colorthief获取图片的主要颜色. 并丢给背景注意 getPalette并不是个异步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…...

一,开发环境安装

环境安装选择的版本如下 Python3.7 Anaconda5.3.1 CUDA 10.0 Pycharm Anaconda安装:下载地址 CUDA 10.0安装,包下载地址...