尚硅谷面向对象篇笔记记录

第四章 面向对象编程(上)

1. 面向过程 vs. 面向对象

1.1 编程思想

  • 面向过程 (POP, Procedure-Oriented Programming)
    • 强调功能行为,以函数为最小单位,关注如何做
  • 面向对象 (OOP, Object-Oriented Programming)
    • 强调对象,将功能封装进对象,以类/对象为最小单位,关注谁来做
    • 三大特性
      • 封装 (Encapsulation)
      • 继承 (Inheritance)
      • 多态 (Polymorphism)

1.2 示例:人把大象装进冰箱

面向过程面向对象
1. 打开冰箱类:打开(冰箱)
2. 放入大象大象类:进入(冰箱)
3. 关上冰箱冰箱类:关门()
class{void 打开(冰箱 b) { b.开门(); }void 操作(大象 e, 冰箱 b) { e.进入(b); }void 关闭(冰箱 b) { b.关门(); }
}
class 冰箱 { void 开门() {} void 关门() {} }
class 大象 { void 进入(冰箱 b) {} }

2. Java 语言的基本元素:类与对象

2.1 类与对象

  • 类 (Class):对一类事物的抽象描述,是概念
  • 对象 (Object):类的具体实例,是实际存在的个体。
    • = “人”,对象 = “张三、李四”

2.2 Java 类的成员

  • 属性 (成员变量, Field)
    • 对象的特征,如姓名、年龄
  • 方法 (Method)
    • 对象的行为,如吃饭、跑步
class Person {String name;int age;void eat() { System.out.println(name + " 在吃饭"); }
}

3. 对象的创建与使用

3.1 创建对象

Person p1 = new Person();
  • 访问对象的属性/方法:
p1.name = "张三";
p1.eat();

3.2 内存分配

内存区域存储内容
栈 (Stack)局部变量
堆 (Heap)new 出来的对象
方法区 (Method Area)类信息、静态变量

4. 类的成员之一:属性

4.1 属性的声明

class Person {String name; // 实例变量int age = 18; // 显式初始化
}
  • 分类
    • 成员变量(属性)
      • 实例变量(不加 static):属于对象,存于堆内存
      • 类变量(加 static):属于类,存于方法区
    • 局部变量
      • 方法、代码块、形参内部声明的变量,存于
类别声明位置默认值
成员变量类中有默认值
局部变量方法或代码块中无默认值,需手动赋值

5. 类的成员之二:方法

5.1 方法的定义

class Person {String name;void show() { System.out.println("姓名:" + name); }
}
  • 方法声明格式
修饰符 返回值类型 方法名(参数列表) { 方法体; return 返回值; }
  • 方法的分类

    分类有返回值无返回值
    无参数int getAge()void sayHello()
    有参数int add(int a, int b)void print(String msg)

6. 方法的重载

  • 定义:在同一个类中,多个方法名相同,但参数列表不同
  • 特点
    • 返回值类型无关!
    • 参数类型、个数、顺序至少有一个不同。
class MathUtil {int add(int a, int b) { return a + b; }double add(double a, double b) { return a + b; }
}

7. 方法的参数传递

  • 值传递
    • 基本数据类型:传递值的副本
    • 引用数据类型:传递地址的副本
void change(int x) { x = 3; } // 不影响原变量
void change(Person p) { p.age = 3; } // 修改对象属性

8. 类的成员之三:构造器

  • 作用:初始化对象。
  • 语法
class Person {String name;Person(String n) { name = n; }
}
  • 构造器重载
    • 根据不同参数定义多个构造器。

9. 关键字 this

  • 作用
    • 指代当前对象
    • 调用本类的构造器 (this(...))
class Person {String name;Person(String name) { this.name = name; }
}

10. 关键字 package、import

  • package:声明类所在包
package com.atguigu.oop;
  • import:导入其他包的类
import java.util.Scanner;

11. 面向对象特性之一:封装

  • 封装的作用
    • 隐藏细节,只提供访问接口。
    • 提高安全性,防止外部直接修改属性。
class Person {private int age;public void setAge(int a) { if (a >= 0 && a <= 130) age = a; }public int getAge() { return age; }
}
访问权限同类同包子类其他包
private
缺省 (default)
protected
public

12. 练习题

  1. 定义 Person 类,封装 age 属性,并提供 setAge()getAge() 方法。
  2. 定义 Circle 类,计算圆的面积。
  3. 定义 Student 数组,按成绩排序。
  4. 编写 AccountCustomer 类,使用 Bank 管理账户信息。

第五章 面向对象编程(中)

1. 面向对象特性之二:继承 (Inheritance)

1.1 继承的概念

  • 作用

    • 减少代码冗余,提高代码复用性。
    • 便于功能扩展,提高程序的维护性。
    • 提供多态的前提,增强灵活性。
  • 语法

    class 子类 extends 父类 { }
    
  • 示例

    class Person {String name;int age;public String getInfo() { return "姓名: " + name + ", 年龄: " + age; }
    }class Student extends Person {String school;public String getInfo() { return super.getInfo() + ", 学校: " + school; }
    }
    

1.2 继承的规则

  • 子类继承了父类的 publicprotected 成员。
  • 不能继承 private 成员,但可以通过 getter/setter 访问。
  • Java 只支持单继承,不支持多重继承,但支持多层继承
继承类型描述
单继承一个子类只能继承一个父类。
多层继承子类可以继续被其他类继承。

1.3 继承的示例

class Animal { void eat() { System.out.println("动物在吃饭"); } }
class Dog extends Animal { void bark() { System.out.println("狗在叫"); } }
class Puppy extends Dog { void weep() { System.out.println("小狗在哭"); } }

调用示例:

Puppy myPuppy = new Puppy();
myPuppy.eat();   // 继承自 Animal
myPuppy.bark();  // 继承自 Dog
myPuppy.weep();  // Puppy 自己的方法

2. 方法的重写(Override)

2.1 方法重写的规则

  • 子类必须与父类的方法:
    • 方法名相同
    • 参数列表相同
    • 返回值类型相同或为子类型(Java 5+)。
    • 访问权限不能比父类更严格public > protected > default > private)。
    • 不能重写 privatestatic 方法

示例

class Parent {void show() { System.out.println("父类方法"); }
}class Child extends Parent {@Overridevoid show() { System.out.println("子类重写方法"); }
}

方法调用

Parent p = new Child();
p.show();  // 输出:子类重写方法

3. 访问权限修饰符

修饰符类内部同包不同包的子类其他包
private
缺省 (default)
protected
public

示例

class Parent {private int a = 1;int b = 2;             // 默认(default)protected int c = 3;public int d = 4;
}

4. 关键字 super

4.1 super 关键字的作用

  • 访问父类的属性
  • 调用父类的方法
  • 调用父类的构造器

示例

class Parent {String name = "父类";void show() { System.out.println("父类方法"); }
}class Child extends Parent {String name = "子类";void display() {System.out.println(super.name); // 访问父类的 namesuper.show(); // 调用父类方法}
}

调用

Child c = new Child();
c.display();  // 输出:父类  父类方法

4.2 super 调用父类构造器

class Animal {Animal(String name) { System.out.println("Animal: " + name); }
}class Dog extends Animal {Dog(String name) {super(name);  // 调用父类构造器System.out.println("Dog: " + name);}
}

5. 面向对象特性之三:多态(Polymorphism)

5.1 多态的定义

  • 同一个引用,指向不同子类的对象
  • 父类引用可以指向子类对象(向上转型)。
  • 方法调用时,执行的是子类重写的方法(动态绑定)。

示例

class Animal {void sound() { System.out.println("动物发出声音"); }
}class Dog extends Animal {@Override void sound() { System.out.println("狗叫"); }
}public class Test {public static void main(String[] args) {Animal a = new Dog();  // 向上转型a.sound();  // 输出:狗叫}
}

6. instanceof 关键字

  • 用于判断对象是否属于某个类
if (obj instanceof Dog) {System.out.println("obj 是 Dog 类型");
}

7. Object 类的使用

7.1 equals() 方法

  • 默认实现比较引用地址
  • 需要重写以比较内容。
@Override
public boolean equals(Object obj) {if (this == obj) return true;if (obj instanceof Person) {Person p = (Person) obj;return this.name.equals(p.name) && this.age == p.age;}return false;
}

8. 包装类(Wrapper Class)

8.1 基本数据类型与包装类

基本类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

8.2 装箱与拆箱

// 自动装箱
Integer num = 10;// 自动拆箱
int value = num;

9. 练习题

  1. 编写 Order 类,重写 equals() 方法,判断 orderId 是否相等。
  2. 定义 GeometricObject(几何形状),子类 CircleMyRectangle,重写 equals()toString()
  3. 利用 Vector 处理学生成绩,找出最高分,并计算等级(A/B/C/D)。

第6章 面向对象编程(下)

6.1 关键字:static

当创建一个类时,只是描述了对象的属性和行为,并没有产生实质上的对象。只有通过new关键字才会创建对象并分配内存空间。有时候,我们希望某些特定的数据无论有多少个对象都只存在一份,这时候就需要使用static关键字。

static修饰的成员变量(类变量)

  • 类变量由该类的所有实例共享
  • 随着类的加载而加载,优先于对象存在
  • 可以通过"类名.类变量"的方式访问,不需要创建对象
  • 存储在方法区的静态域中
class Person {private int id;public static int total = 0;public Person() {total++;id = total;}
}

static修饰的方法(类方法)

  • 类方法可以直接通过类名调用,不需要创建对象
  • 在static方法内部只能访问类的static成员(属性和方法)
  • 不能使用this关键字和super关键字
  • 不能被重写

static的使用范围

可以用static修饰:

  • 属性
  • 方法
  • 代码块
  • 内部类

类属性、类方法的设计思想

  • 类属性作为该类各个对象之间共享的变量
  • 在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性
  • 如果方法与调用者无关,则可以声明为类方法
静态 vs 非静态成员对比表
特性静态成员非静态成员
内存分配时间类加载时分配对象实例化时分配
访问方式类名.成员对象.成员必须通过对象访问
存储位置方法区静态域堆内存对象实例中
是否共享所有对象共享同一份每个对象独立
生命周期与类同生命周期与对象同生命周期
能否访问非静态成员❌ 不能直接访问✅ 可以访问

单例(Singleton)设计模式

单例模式确保一个类只有一个实例,并提供一个全局访问点。

饿汉式单例模式
class Singleton {// 1.私有化构造器private Singleton() {}// 2.内部提供一个当前类的实例// 3.此实例必须静态化private static Singleton single = new Singleton();// 4.提供公共的静态的方法,返回当前类的对象public static Singleton getInstance() {return single;}
}
懒汉式单例模式
class Singleton {// 1.私有化构造器private Singleton() {}// 2.内部提供一个当前类的实例// 3.此实例必须静态化private static Singleton single;// 4.提供公共的静态的方法,返回当前类的对象public static Singleton getInstance() {if(single == null) {single = new Singleton();}return single;}
}

注意:懒汉式单例模式存在线程安全问题,需要在多线程环境下进行修复。

饿汉式 vs 懒汉式对比表
特性饿汉式懒汉式(基础版)
对象创建时机类加载时立即创建首次调用getInstance()时创建
线程安全✅ 安全❌ 不安全(需额外处理)
资源利用率类加载即占用资源延迟加载,节省资源
实现复杂度简单需处理线程安全问题

单例模式优化实现

1. 饿汉式(线程安全)

java

复制

class Singleton {
private static final Singleton INSTANCE = new Singleton();

private Singleton() {}public static Singleton getInstance() {return INSTANCE;
}

}

2. 懒汉式(双重检查锁)

java

复制

class Singleton {
private static volatile Singleton instance;

private Singleton() {}public static Singleton getInstance() {if (instance == null) {                    // 第一次检查synchronized (Singleton.class) {      // 同步锁if (instance == null) {            // 第二次检查instance = new Singleton();}}}return instance;
}

}

  • volatile作用:防止指令重排序,保证可见性

  • 双重检查意义:减少同步代码执行次数

单例模式的应用场景

  • 网站的计数器
  • 应用程序的日志应用
  • 数据库连接池
  • 项目中的配置文件读取类
  • Windows的任务管理器
  • Windows的回收站

6.2 理解main方法的语法

main方法是Java程序的入口点,JVM需要调用该方法来启动程序。其特点:

  • 访问权限必须是public
  • 必须是static的(JVM调用时不需要创建对象)
  • 接收一个String[]类型的参数(命令行参数)
  • main方法中不能直接访问非静态成员,需要先创建对象
public class CommandPara {public static void main(String[] args) {for (int i = 0; i < args.length; i++) {System.out.println("args[" + i + "] = " + args[i]);}}
}

6.3 类的成员之四:代码块

代码块(初始化块)用于初始化类或对象,分为两种:

静态代码块

  • 使用static修饰
  • 随着类的加载而加载,且只执行一次
  • 优先于非静态代码块执行
  • 只能访问静态成员
class Person {public static int total;static {total = 100; // 初始化静态变量System.out.println("静态代码块执行");}
}

非静态代码块

  • 没有static修饰
  • 每次创建对象时都会执行
  • 先于构造器执行
  • 可以访问静态和非静态成员

代码块的执行顺序

  1. 静态成员变量的默认初始化
  2. 静态代码块和静态成员变量的显式初始化(按照它们在类中出现的顺序)
  3. 非静态成员变量的默认初始化
  4. 非静态代码块和非静态成员变量的显式初始化(按照它们在类中出现的顺序)
  5. 构造器的执行

执行顺序示意图

类加载阶段
静态成员默认初始化
静态代码块/静态变量显式初始化
按代码顺序执行
对象实例化阶段
非静态成员默认初始化
非静态代码块/非静态变量显式初始化
构造器执行

典型示例

public class BlockTest {static int staticVar = 1;int instanceVar = 2;// 静态代码块static {System.out.println("静态代码块执行:" + staticVar);// System.out.println(instanceVar); // 错误!不能访问非静态成员}// 非静态代码块{System.out.println("非静态代码块执行:" + instanceVar);System.out.println("可以访问静态变量:" + staticVar);}public static void main(String[] args) {new BlockTest();}
}

6.4 关键字:final

final关键字表示"最终的",在Java中可以用于修饰类、方法和变量。

final修饰类

  • 表示该类不能被继承
  • 提高安全性和程序可读性
  • 例如:String类、System类、StringBuffer类

final修饰方法

  • 表示该方法不能被子类重写
  • 例如:Object类中的getClass()方法

final修饰变量

  • 表示该变量是常量,只能被赋值一次
  • 常量名通常使用大写字母
  • final修饰的成员变量必须在声明时、构造器中或代码块中显式赋值
final double MY_PI = 3.14;

6.5 抽象类与抽象方法

随着继承层次的深入,父类可能会变得越来越抽象,以至于无法创建具体的实例。这种类就称为抽象类。

抽象类的特点

  • 使用abstract关键字修饰
  • 不能被实例化
  • 可以包含抽象方法和非抽象方法
  • 子类必须重写所有抽象方法,否则也必须声明为抽象类

抽象方法的特点

  • 使用abstract关键字修饰
  • 只有方法声明,没有方法体
  • 只能在抽象类中声明

抽象类的限制

  • 不能用abstract修饰变量、代码块、构造器
  • 不能用abstract修饰私有方法、静态方法、final方法、final类

模板方法设计模式

模板方法是一种行为设计模式,它定义了一个算法的骨架,而将一些步骤延迟到子类中实现。

abstract class Template {public final void getTime() {long start = System.currentTimeMillis();code();long end = System.currentTimeMillis();System.out.println("执行时间是:" + (end - start));}public abstract void code();
}class SubTemplate extends Template {public void code() {for (int i = 0; i < 10000; i++) {System.out.println(i);}}
}

模板方法设计模式在各种框架中都有广泛应用,如:

  • 数据库访问的封装
  • Junit单元测试
  • JavaWeb的Servlet
  • Hibernate和Spring框架

6.6 接口(interface)

接口是一种特殊的抽象类,只包含常量和抽象方法的定义。接口代表了一种规范,定义了一组规则,体现了"能不能"的关系。

接口的特点

  • 使用interface关键字定义
  • 所有成员变量默认都是public static final修饰的
  • 所有方法默认都是public abstract修饰的
  • 接口不能有构造器
  • 接口可以多继承
public interface Runner {int ID = 1; // 默认为public static finalvoid start(); // 默认为public abstractvoid run();void stop();
}

类实现接口

  • 使用implements关键字
  • 一个类可以实现多个接口
  • 实现类必须提供接口中所有抽象方法的实现,否则必须声明为抽象类
  • 先写extends,后写implements
class Person implements Runner {public void start() {// 实现}public void run() {// 实现}public void stop() {// 实现}
}

接口的多重继承

接口可以继承多个其他接口。

interface SubInterface extends MyInterface {void absM2();
}

接口的应用:代理模式

代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。

interface Network {void browse();
}// 被代理类
class RealServer implements Network {@Overridepublic void browse() {System.out.println("真实服务器上网浏览信息");}
}// 代理类
class ProxyServer implements Network {private Network network;public ProxyServer(Network network) {this.network = network;}public void check() {System.out.println("检查网络连接等操作");}public void browse() {check();network.browse();}
}

应用场景:

  • 安全代理
  • 远程代理
  • 延迟加载

Java 8中的接口新特性

Java 8为接口引入了两个新特性:

  1. 默认方法(Default Method)
    • 使用default关键字修饰
    • 可以有方法体
    • 可以通过实现类对象调用
public interface AA {default void method() {System.out.println("北京");}
}
  1. 静态方法(Static Method)
    • 使用static关键字修饰
    • 可以通过接口名直接调用
public interface AA {public static void method2() {System.out.println("hello lambda!");}
}
接口默认方法的冲突处理
  • 如果一个类实现了两个接口,这两个接口中有相同的默认方法,实现类必须覆盖该方法
  • 如果一个类继承的父类中有方法与接口默认方法同名,遵循"类优先"原则

6.5 抽象类 vs 6.6 接口

对比表格(Java 8+)

特性抽象类接口
成员变量普通变量或常量只能是public static final
方法实现可包含抽象和具体方法默认方法(default)和静态方法
构造器✅ 有❌ 无
多继承❌ 单继承✅ 多实现
设计理念"是什么"的抽象"能做什么"的规范
新特性支持Java 8默认方法Java 8默认/静态方法

接口新特性示例

public interface SmartDevice {// 传统抽象方法void connectWifi();// 默认方法(Java8+)default void showBrand() {System.out.println("Default Brand");}// 静态方法(Java8+)static void printVersion() {System.out.println("1.0.0");}
}class SmartWatch implements SmartDevice {@Overridepublic void connectWifi() {System.out.println("智能手表连接WiFi");}// 可选择是否重写默认方法@Overridepublic void showBrand() {System.out.println("Apple Watch");}
}

6.7 类的成员之五:内部类

内部类是定义在另一个类内部的类,它可以更好地封装,并且可以直接访问外部类的所有成员。

内部类的分类

  1. 成员内部类
    • 静态成员内部类
    • 非静态成员内部类
  2. 局部内部类
  3. 匿名内部类
内部类
成员内部类
局部内部类
匿名内部类
静态成员内部类
非静态成员内部类

成员内部类

作为外部类成员:

  • 可以被privateprotecteddefaultpublic修饰
  • 可以被static修饰
  • 可以访问外部类的所有成员,包括私有成员

作为一个类:

  • 可以定义属性、方法、构造器等
  • 可以被abstractfinal修饰
class Outer {private int s;public class Inner {public void mb() {s = 100; // 可以直接访问外部类的私有成员System.out.println("在内部类Inner中s=" + s);}}public void ma() {Inner i = new Inner();i.mb();}
}

局部内部类

  • 定义在方法或代码块中
  • 只能在定义它的方法或代码块中使用
  • 不能使用publicprotectedprivatestatic修饰符
  • 可以访问外部类的所有成员,包括私有成员
  • 可以访问外部方法的局部变量,但这些变量必须是final

匿名内部类

匿名内部类是没有名字的内部类,必须在创建时继承一个类或实现一个接口。

interface A {void fun1();
}public class Outer {public static void main(String[] args) {new Outer().callInner(new A() {public void fun1() {System.out.println("implement for fun1");}});}public void callInner(A a) {a.fun1();}
}

特点:

  • 匿名内部类必须继承父类或实现接口
  • 匿名内部类只能有一个对象
  • 匿名内部类对象只能使用多态形式引用
  • 不能定义静态成员和方法

关键总结图表

Java修饰符作用域总览

修饰符成员变量方法代码块内部类
public
protected
private
static
final
abstract

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

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

相关文章

【湖北工业大学2025年ACM校赛(同步赛)】题解

比赛链接 A. 蚂蚁上树 题目大意 给定一棵 n n n 个结点的树&#xff0c;根结点为 1 1 1。每个 叶结点 都有一只蚂蚁&#xff0c;每过 1 1 1 秒钟&#xff0c;你可以选一些蚂蚁往其 父结点 走一步&#xff0c;但是要求任意两只蚂蚁都不能在同一个 非根结点 上。 问至少要…

CS2 DEMO导入blender(慢慢更新咯)

流程&#xff1a;cs2-sourcefilmmaker-blender 工具&#xff1a;cs2tools&#xff0c;cs2manager&#xff0c;blender&#xff0c;blender插件sourceio&#xff0c;source2viewer 导入sfm 工具界面 选择这个 sourceio插件 sourceIO其中新版本导入相机路径不见了&#xff0c…

一周学会Flask3 Python Web开发-SQLAlchemy数据迁移migrate

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 模型类(表)不是一成不变的&#xff0c;当你添加了新的模型类&#xff0c;或是在模型类中添加了新的字段&#xff0c;甚至是修改…

Postman CORS 测试完全指南:轻松模拟跨域请求,排查 CORS 相关问题

在使用 Postman 进行 API 测试时&#xff0c;通常不会遇到跨域问题&#xff0c;因为 Postman 是一个独立的客户端应用程序&#xff0c;不同于在浏览器中运行的 JavaScript 代码&#xff0c;它没有同源策略&#xff08;SOP&#xff09;的限制。跨域资源共享&#xff08;CORS&…

【图像处理基石】什么是refocus?

1. Refocus 的定义 Refocus&#xff08;重新对焦&#xff09;是一种通过算法调整图像或视频焦点的技术&#xff0c;允许用户在拍摄后选择焦点&#xff0c;实现类似光场相机的“先拍照后对焦”效果。其核心是通过多视角信息或深度估计&#xff0c;生成不同焦平面的图像&#xff…

kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂

场景&#xff1a;群里有小伙伴向我求助如何调用web service接口&#xff0c;趁着周末时间&#xff0c;给兄弟们搞demo。 1、本次使用的web service服务接口地址是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?opgetSupportCityDataset&#xff0c; 此接口根据用户输入…

电子电气架构 --- 域控架构下,汽车连接器的挑战和变化

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

[MySQL] 库的操作 表的操作

1.库的操作 1.创建数据库 这里就是一个创建数据库的例子&#xff0c;框内的东西可以不填&#xff0c;因为有默认设置&#xff0c;而这些东西是什么呢&#xff1f; 2.字符集和校验规则 2.1查看字符集校验规则 show variables like ‘character_set_database’; show variable…

Let’s Encrypt 宣布推出短期证书与 IP 地址支持,推动 Web 安全迈向新高度

2025 年 1 月 16 日&#xff0c;全球领先的免费 SSL/TLS 证书颁发机构 Let’s Encrypt 正式宣布两项重大功能更新计划&#xff1a;推出六天有效期证书&#xff08;Short-Lived Certificates&#xff09;及支持以 IP 地址为主体的证书申请。两项功能将于 2025 年起陆续开放&…

十二、Cluster集群

目录 一、集群简介1、现状问题2、集群作用 二、集群结构设计1、集群存储设2、消息通信设计 三、Cluster集群三主三从结构搭建1、redis.conf配置文件可配置项2、配置集群3、链接集群4、命令客户端连接集群并使用 四、集群扩容1、添加节点2、槽位分配3、添加从节点 五、集群缩容1…

Linux进程管理之子进程的创建(fork函数)、子进程与线程的区别、fork函数的简单使用例子、子进程的典型应用场景、父进程等待子进程结束后自己再结束

收尾 进程终止&#xff1a;子进程通过exit()或_exit()终止&#xff0c;父进程通过wait()或waitpid()等待子进程终止&#xff0c;并获取其退出状态。&#xff1f;其实可以考虑在另一篇博文中来写 fork函数讲解 fork函数概述 fork() 是 Linux 中用于创建新进程的系统调用。当…

【AI论文】挑战推理的边界:大型语言模型的数学基准测试

摘要&#xff1a;近年来&#xff0c;大型推理模型的迅猛发展导致现有用于评估数学推理能力的基准测试趋于饱和&#xff0c;这凸显出迫切需要更具挑战性和严谨性的评估框架。为填补这一空白&#xff0c;我们推出了OlymMATH&#xff0c;这是一项全新的奥林匹克级数学基准测试&…

典范硬币系统(Canonical Coin System)→ 贪心算法

【典范硬币系统】 ● 典范硬币系统&#xff08;Canonical Coin System&#xff09;是指使用贪心算法总能得到最少硬币数量解‌的货币面值组合‌。 ● 给定一个硬币系统 &#xff0c;若使其为典范硬币系统&#xff0c;则要求其各相邻面值比例 &#xff0c;及各开区间 内各金额…

Android7 Input(二)Linux 驱动层输入事件管理

概述 在Linux系统中&#xff0c;将键盘&#xff0c;鼠标&#xff0c;触摸屏等这类交互设备交由Linux Input子系统进行管理&#xff0c;Linux Input驱动子系统由于具有良好的和用户空间交互的接口。因此Linux Input驱动子系统&#xff0c;不止于只管理输入类型的设备。也可以将其…

高清壁纸一站式获取:海量分类,免费无弹窗

软件介绍 在如今这个追求个性化与高品质视觉体验的时代&#xff0c;一款出色的壁纸应用无疑能为我们的电子设备增添别样魅力。此刻&#xff0c;要给大家重磅推荐的便是Wallpaper这款应用&#xff0c;它犹如一个绚丽多彩的壁纸宝库&#xff0c;全方位满足你的审美需求。 海量壁…

Linux安装Cmake (Centos 7.9)

cmake安装 这个虽然已经更新到了4.0.0版本了&#xff0c;但是我们要用3.5版本的&#xff0c;因为这个比较稳定 官方地址&#xff1a;https://github.com/Kitware/CMake/releases/tag/v3.5.0&#xff0c;选择那个cmake-3.5.0-Linux-x86_64.tar.gz下载&#xff0c; 首先解压文…

Centos7,tar包方式部署rabbitmq-3.7.6

1. 环境准备 安装编译工具和依赖包 yum -y install make gcc gcc-c glibc-devel m4 perl openssl openssl-devel ncurses-devel ncurses-devel xz xmlto perl 2. Erlang环境搭建 版本对应&#xff1a;https://www.rabbitmq.com/docs/which-erlang 解压到指定目录 tar -xv…

【MySQL篇】事务管理,事务的特性及深入理解隔离级别

目录 一&#xff0c;什么是事务 二&#xff0c;事务的版本支持 三&#xff0c;事务的提交方式 四&#xff0c;事务常见操作方式 五&#xff0c;隔离级别 1&#xff0c;理解隔离性 2&#xff0c;查看与设置隔离级别 3&#xff0c;读未提交&#xff08;read uncommitted&a…

C++Primer学习(14.1 基本概念)

当运算符作用于类类型的运算对象时&#xff0c;可以通过运算符重载重新定义该运算符的含义。明智地使用运算符重载能令我们的程序更易于编写和阅读。举个例子&#xff0c;因为在Sales_item类中定义了输入、输出和加法运算符&#xff0c;所以可以通过下述形式输出两个Sales_item…

循相似之迹:解锁协同过滤的核心推荐逻辑

目录 一、引言二、协同过滤的基本原理三、协同过滤的算法类型&#xff08;一&#xff09;基于用户的协同过滤&#xff08;二&#xff09;基于物品的协同过滤 四、协同过滤的应用案例&#xff08;一&#xff09;电商平台的商品推荐&#xff08;二&#xff09;音乐平台的歌曲推荐…