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

解析Java根基:Object类核心方法

Object类常见方法解析

在Java编程中,Object类是所有类的根类,它包含了许多实用的方法,这些方法在不同的场景下发挥着重要作用。下面我们来详细了解一下Object类中的一些常见方法。

1. toString方法

toString方法是用于将对象转换为字符串表示形式的方法。在默认情况下,toString方法返回的结果是类名加上@符号,再跟上该对象对应哈希码的十六进制表示。例如,当我们打印一个对象时,如果没有重写toString方法,就会得到类似这样的结果:com.example.MyClass@12345678

然而,在实际开发中,我们通常需要根据对象的具体属性来定制它的字符串表示形式,以便更清晰地展示对象的信息。这时,我们就需要重写toString方法。比如,对于一个表示学生信息的类Student,我们可以这样重写toString方法:

public class Student {private String name;private int age;// 构造方法和其他方法省略@Overridepublic String toString() {return "Student{name='" + name + "', age=" + age + "}";}
}

这样,当我们打印一个Student对象时,就会得到包含学生姓名和年龄信息的字符串。

2. equals和hashcode方法

equals方法和hashcode方法在对象比较和集合操作中起着关键作用。

  • equals方法:在进行对象比较的时候,我们通常会使用equals方法。如果不重写equals方法,默认情况下它会根据对象的地址进行比较,即只有两个引用指向同一个对象时,它们才被认为是相等的。但在很多实际场景中,我们需要根据对象的属性和方法来判断它们是否相等。例如,对于两个表示学生信息的对象,如果它们的姓名和年龄都相同,我们就认为这两个学生是相等的。这时,我们就需要重写equals方法,如下所示:
@Override
public boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass()!= obj.getClass()) return false;Student student = (Student) obj;return age == student.age && Objects.equals(name, student.name);
}

  • hashcode方法hashcode方法用于返回对象的哈希码值。哈希码是一个整数,它在许多数据结构中都有重要作用,比如HashMapHashSet。当我们对对象进行存储和查找操作时,哈希码可以帮助我们快速定位对象的位置。

需要注意的是,当我们重写equals方法时,通常也需要同时重写hashcode方法。这是因为如果两个对象根据equals方法判断是相等的,那么它们的哈希码也必须相等。如果不重写hashcode方法,可能会导致哈希冲突的概率增大。例如,在HashMap中,如果只重写了equals方法而没有重写hashcode方法,那么具有相同属性的两个对象可能会被存储在不同的哈希桶中,这会使得一些哈希桶中的对象个数过多,从而降低搜索效率。

另外,如果只重写了hashcode方法而没有重写equals方法,当发生哈希冲突时,会导致对象的安全性受到威胁。因为在哈希冲突的情况下,不同的对象可能会被存储在同一个哈希桶中,如果不重写equals方法,就无法正确判断这些对象是否真的相等,从而可能导致一些错误的结果。

3. wait、notify和notifyAll方法

waitnotifynotifyAll方法是用于线程间通信的方法,它们只能在同步代码块或同步方法中使用。 

  • wait方法:当一个线程调用某个对象的wait方法时,它会解除对该对象的锁,并进入等待状态,直到其他线程调用该对象的notifynotifyAll方法来唤醒它。例如,在生产者-消费者模型中,当消费者发现缓冲区为空时,它会调用缓冲区对象的wait方法进入等待状态,直到生产者生产了新的数据并调用notifynotifyAll方法来唤醒它。
  • notify方法notify方法用于唤醒陷入等待状态的某一进程。它会随机选择一个正在等待该对象锁的线程,并将其唤醒。需要注意的是,notify方法只会唤醒一个线程,如果有多个线程在等待,那么具体唤醒哪个线程是不确定的。
  • notifyAll方法notifyAll方法用于唤醒陷入等待状态的所有进程。它会唤醒所有正在等待该对象锁的线程,这些线程会竞争获取对象的锁,然后继续执行。

在这个示例中,生产者线程先生产数据,然后通过notify方法唤醒消费者线程,消费者线程在收到通知后开始消费数据。

Java为什么被称为平台无关性语言

Java实现平台无关性的核心机制在于JVM(Java虚拟机)的中间层设计。当Java源代码通过javac编译器生成字节码文件(.class文件)后,这些包含平台中立中间代码的文件可以在任何安装有对应平台JVM的设备上运行。各个操作系统虽然使用不同的机器指令集,但通过针对特定平台实现的JVM,字节码会被实时转换为所在系统的本地机器指令执行。这种"一次编译,到处运行"的特性,使得开发者无需针对不同操作系统修改源代码,JVM作为抽象层有效隔离了底层硬件和操作系统的差异

= =和equals有什么区别?

== 和 equals 的区别

  1. 基本概念
    • == 是一个操作符,用于比较两个变量的值或引用。
    • equalsObject 类的一个方法,用于比较两个对象的内容。如果 equals 方法没有被重写,它的默认行为与 == 相同。
  1. 比较规则
    • 对于基本数据类型(如 intchar 等)
      == 比较的是变量的值。例如:
int a = 5;
int b = 5;
System.out.println(a == b); // 输出 true
    • 对于对象类型(如 StringInteger 等)
      == 比较的是对象的引用(即内存地址)。例如:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // 输出 false

equals 方法比较的是对象的内容。例如:

System.out.println(str1.equals(str2)); // 输出 true
  1. equals 方法的重写
    • 默认情况下,equals 方法比较的是对象的引用(与 == 相同)。
    • 如果类重写了 equals 方法,则可以根据自定义的逻辑比较对象的内容。例如,String 类重写了 equals 方法,用于比较字符串的内容。
    • 重写 equals 方法时,通常需要同时重写 hashCode 方法,以确保对象在哈希表等数据结构中的行为一致。

equals()与hashcode()

equals和hashCode属于Object的方法,equals默认情况下和==等效,hashCode()是根据一定的规则根据对象返回的值,比如对象的地址,经过处理,返回哈希值

在进行对象的比较的时候,可以进行自定义比较方法,需要重写equals方法,为了使HashMap、HashSet等方法正常存储,还需要对HashCode()进行重写

HashMap存储对象的时候,会先调用HashCode方法进行比较,当HashCode值相等的时候,再使用equals方法再进行比较

Student对象,有name和height两个成员变量,使用HashSet存储两个name和height相等的对象,判断Student对象是否相等就看这两个变量,当没有重写HashCode的时候,存储到HashSet中也会当作两个不同的对象,调用HashCode方法,因为没有重写,默认哈希值不会相同,所以会被认为两个对象不相同

解决方法就是重写HashCode(),最简单的就是返回两个变量哈希值的积

equals() 与 hashCode() 的核心机制

equals() 和 hashCode() 是定义在 java.lang.Object 类中的基础方法。

equals() 方法:默认实现与 == 运算符等价,用于判断两个对象是否严格相等(即是否指向同一内存地址)。开发中需根据业务需求重写此方法,以实现自定义的相等性逻辑。

hashCode() 方法:默认返回对象的内存地址经过哈希算法处理后的整数值。其作用是为对象生成一个紧凑的哈希标识,主要用于快速定位数据存储位置(如哈希表)。

集合框架中的关键作用

当使用 HashMap、HashSet 等基于哈希的集合存储对象时:

哈希优先原则:集合会先调用对象的 hashCode() 方法计算哈希值,若哈希值冲突,则进一步通过 equals() 方法比较对象的实际内容。

一致性要求:若重写了 equals(),必须同步重写 hashCode()。若二者逻辑不一致(例如两个对象通过 equals() 判断相等,但 hashCode() 返回不同值),会导致集合无法正确维护元素唯一性,引发潜在 bug。

Student 对象的典型场景分析

假设存在如下 Student 类:

public class Student {

        private String name;

        private int height;

}

未重写 hashCode() 的问题

向 HashSet<Student> 中添加两个属性完全相同的对象时:

Student s1 = new Student("Alice", 160);

Student s2 = new Student("Alice", 160);

Set<Student> students = new HashSet<>();

students.add(s1);

students.add(s2); // 实际执行结果:s2 会被视为新元素加入集合

原因:默认的 hashCode() 实现基于对象内存地址,两次 new 操作生成的 s1 和 s2 地址不同,导致哈希值冲突被判定为不同对象。

解决方案:重写 hashCode()

通过覆盖 hashCode() 方法,将关键字段纳入哈希值计算:

@Override

public int hashCode() {

return Objects.hash(name, height); // 或简化为 name.hashCode() * 31 + height

}

原理:将 name 和 height 的哈希值按规则组合,确保内容相同的对象生成相同的哈希码,从而解决集合存储异常问题。

重载和重写

重载(Overloading)

重载指的是在同一个类中,允许存在多个方法名相同但参数列表不同的方法。这些方法的参数个数、顺序或类型必须有所区别。通过这种方式,可以为同一操作提供多种不同的实现方式,以适应不同的输入需求。

特点:

方法签名不同:方法名相同,但参数列表(参数的个数、顺序或类型)不同。

编译时决定:重载的解析是在编译期间完成的,编译器根据调用方法时提供的参数类型来决定具体调用哪一个重载的方法。

静态绑定:由于在编译时已经确定了调用的具体方法,因此重载属于静态绑定。

重写(Overriding)

重写是指子类对父类中已有的方法进行重新定义,方法名、参数列表以及返回类型都必须与父类中的方法完全一致。通过重写,子类可以改变父类方法的行为,以适应子类的特定需求。

特点:

方法签名相同方法名、参数列表和返回类型必须与父类中的方法完全一致。

运行时决定:重写的解析是在运行期间完成的,具体执行哪一个方法取决于对象的实际类型。

动态绑定:由于在运行时才确定调用的具体方法,因此重写属于动态绑定。

抽象和接口

抽象类与接口的对比分析

【核心概念】

抽象类使用 abstract 关键字修饰,用于定义具有部分实现的基类;接口使用 interface 关键字声明,作为纯粹的行为契约。二者在代码组织层面存在本质区别:

【抽象类的应用】

当多个类存在代码复用需求时,通过抽象类进行逻辑抽取可提升代码简洁性与可维护性。其核心价值体现在:

代码复用:将公共实现逻辑提取到抽象基类中,子类通过继承复用代码

强制约束:通过抽象方法(public abstract 修饰)强制子类实现特定功能

类型标识:表达严格的继承关系,体现"是"(is-a)的语义特征

修改时只需调整抽象基类即可影响所有子类,但需注意普通类也能实现类似效果,抽象类的核心区别在于其无法实例化并具有强制约束力。

【接口的演进】

接口作为规范标准,体现"具有...能力"(like-a)的语义特征,其发展历经多个阶段:

传统接口(Java 7-)

包含隐式 public abstract 修饰的抽象方法

允许声明 public static final 常量

增强接口(Java 8+)

引入 default 方法(含具体实现)

支持静态方法定义

允许定义私有方法(Java 9+)

【实现规范】

类实现接口时需遵循:

必须实现所有抽象方法(未实现则类需声明为 abstract)

选择性覆盖 default 方法

常量字段自动继承且不可修改

支持多接口实现,体现灵活的组合特性

Final


final 是 Java 的关键字,用于限制类、方法或变量的可修改性,具体用法如下:

修饰类


当类被 final 修饰时,该类不能被继承
核心目的:防止通过子类继承修改原有类的行为,常用于保护核心 API 的稳定性。


示例:
public final class String { ... } // String 类不可被继承

修饰方法


当方法被 final 修饰时,该方法不能被子类重写
核心目的:确保关键方法的行为不被破坏,常用于模板方法模式中的固定步骤。


示例:
public class Parent {
        public final void lock() { ... } // 子类无法重写 lock()
}

修饰变量


基本类型变量:

变量值初始化后不可修改,成为常量


示例:
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 编译报错
引用类型变量:

引用类型变量

变量指向的内存地址不可变,但对象内部状态可以修改。


示例:
final List list = new ArrayList<>();

list.add("Java"); // 允许修改内容 // list = new LinkedList<>();  编译报错(地址不可变)

 static final 联合使用 static final 修饰的变量为全局常量,在类加载时初始化。 优势: 编译时常量(如字符串字面量)会被 JVM 优化,直接存入常量池,提升访问效率。 示例: public static final String VERSION = "1.0";

不可变设计的经典案例:

String 类的不可变性: String 类被 final 修饰,禁止继承。 内部存储数据的 char[] value 数组被 private final 修饰,且不提供修改方法(如 setter)。 所有修改操作(如 substring、replace)均返回新对象,原对象不变。 优势: 线程安全(无需同步锁)。 哈希值可缓存,提升性能。

多线程场景下的应用

使用 final 修饰变量可确保该变量的值在线程间可见且不可变,避免数据竞争问题。

示例:

        public class SafePublication {

                private final int safeValue; // 安全发布,防止指令重排序

                public SafePublication(int value) {

                this.safeValue = value;

        }

}

异常的理解

异常是指在程序运行过程中可能发生的非正常事件,这类事件会中断程序的正常执行流程。通过异常处理机制,开发者可以捕获并处理这些异常,在保障程序核心功能不受致命影响的前提下完成错误恢复操作。

异常的种类

Java 的异常类继承体系以 Throwable 为顶层父类,具体分为两类:

Error(错误)

由 JVM 或底层系统资源引发的严重问题(如 StackOverflowError 栈溢出、OutOfMemoryError 内存耗尽),属于不可恢复的致命错误。

Exception(异常)

可被捕获处理的非致命性问题,进一步细分为:

编译时异常(Checked Exception)

编译器强制要求处理的异常类型,如 FileNotFoundException(文件未找到)、IOException(输入输出异常)。

运行时异常(Runtime Exception)

由代码逻辑缺陷引发的异常,编译器不强制处理,如 NullPointerException(空指针异常)、IndexOutOfBoundsException(数组越界异常)。

thow和throws的区别

throw是在方法内部使用,进行抛出异常,是一个动作。throws是在方法声明的后面,表示可能会抛出的异常,是一种声明

那么直接try-catch不就行了,为什么还要抛出异常呢?

首先我们要分情况说明,如果该异常可以被try-catch处理的话,就可以直接try-catch,比如说虽然A方法抛出了一个异常,但是基于他异常处理的方法在其他地方,并不需要处理,不需要处理的情况下,就抛出异常给调用者。其次,当调用的几个方法中都存在相同的异常,如果在这几个方法内部进行try-catch的话,会使得整体变得冗余,可以让调用方统一进行捕获异常,并进行处理,简洁化。最后还有可能就是上层调用方处理

String

  1. 不可变类的核心优势
    线程安全:String的不可变性天然规避了多线程同步问题,无需额外锁机制即可保证线程安全。
    哈希缓存:首次计算哈希值后缓存,作为Map键时无需重复计算,显著提升查找效率(如HashMap的键比较场景)。
  2. 字符串创建与常量池机制
    共享优化:常量池通过引用复用已存在的字符串,避免重复创建。例如:
    String s1 = "hello"; // 常量池新建对象(若不存在)
    String s2 = "hello"; // 直接引用常量池现有对象
    对象创建示例:String a = new String("aa") + "bb"; 的详细过程:
    常量池新建"aa"对象(若不存在)。
    new String("aa")在堆中创建新对象(非池引用)。
    常量池新建"bb"对象(若不存在)。
    拼接生成"aabb",堆中创建新对象并可能更新常量池(若未存在),共创建了四个对象
  3. 字符串存储与内存限制
    底层结构:使用char[]存储,理论最大长度为Integer.MAX_VALUE(2³¹-1)。
    实际限制:
    编译期:最大长度为2¹⁶-2(65534,受CONSTANT_Utf8_info限制)。
    运行时:受JVM可用内存限制(如堆大小)。
  4. 字符串常量池的演进
    Java 7前:位于永久代(PermGen),易引发OOM。
    Java 8+:迁移至元空间(Metaspace),降低内存溢出风险。

字符串拼接效率对比


String的+操作:

String result = "a" + "b"; // 编译后等效于:
String result = new StringBuilder().append("a").append("b").toString();
隐含创建StringBuilder和临时String对象,效率较低。

StringBuffer:

直接操作内部可变数组,避免频繁对象创建。
线程安全(同步开销),适合多线程场景。
StringBuilder(补充建议):单线程下更高效(非线程安全)。

相关文章:

解析Java根基:Object类核心方法

Object类常见方法解析 在Java编程中&#xff0c;Object类是所有类的根类&#xff0c;它包含了许多实用的方法&#xff0c;这些方法在不同的场景下发挥着重要作用。下面我们来详细了解一下Object类中的一些常见方法。 1. toString方法 toString方法是用于将对象转换为字符串表…...

LabVIEW 中 JSON 数据与簇的转换

在 LabVIEW 编程中&#xff0c;数据格式的处理与转换是极为关键的环节。其中&#xff0c;将数据在 JSON 格式与 LabVIEW 的簇结构之间进行转换是一项常见且重要的操作。这里展示的程序片段就涉及到这一关键功能&#xff0c;以下将详细介绍。 一、JSON 数据与簇的转换功能 &am…...

K8s常用基础管理命令(一)

基础管理命令 基础命令kubectl get命令kubectl create命令kubectl apply命令kubectl delete命令kubectl describe命令kubectl explain命令kubectl run命令kubectl cp命令kubectl edit命令kubectl logs命令kubectl exec命令kubectl port-forward命令kubectl patch命令 集群管理命…...

每日算法-250411

这是我今天的 LeetCode 刷题记录和心得&#xff0c;主要涉及了二分查找的应用。 3143. 正方形中的最多点数 题目简述: 思路 本题的核心思路是 二分查找。 解题过程 为什么可以二分&#xff1f; 我们可以对正方形的半边长 len 进行二分。当正方形的半边长 len 越大时&…...

NO.90十六届蓝桥杯备战|动态规划-区间DP|回文字串|Treats for the Cows|石子合并|248(C++)

区间dp也是线性dp的⼀种&#xff0c;它⽤区间的左右端点来描述状态&#xff0c;通过⼩区间的解来推导出⼤区间的解。因此&#xff0c;区间DP的核⼼思想是将⼤区间划分为⼩区间&#xff0c;它的状态转移⽅程通常依赖于区间的划分点。 常⽤的划分点的⽅式有两个&#xff1a; 基于…...

【大模型LLM第十六篇】Agent学习之浅谈Agent loop的几种常见范式

anthropics agent https://zhuanlan.zhihu.com/p/32454721762 code&#xff1a;https://github.com/anthropics/anthropic-quickstarts/blob/main/computer-use-demo/computer_use_demo/loop.py sampling_loop函数 每次进行循环&#xff0c;输出extract tool_use&#xff0…...

数列分块入门4

题目描述 给出一个长为 n n n 的数列&#xff0c;以及 n n n 个操作&#xff0c;操作涉及区间加法&#xff0c;区间求和。 输入格式 第一行输入一个数字 n n n。 第二行输入 n n n 个数字&#xff0c;第 i 个数字为 a i a_i ai​&#xff0c;以空格隔开。 接下来输入…...

学术分享:基于 ARCADE 数据集评估 Grounding DINO、YOLO 和 DINO 在血管狭窄检测中的效果

一、引言 冠状动脉疾病&#xff08;CAD&#xff09;作为全球主要死亡原因之一&#xff0c;其早期准确检测对有效治疗至关重要。X 射线冠状动脉造影&#xff08;XCA&#xff09;虽然是诊断 CAD 的金标准&#xff0c;但这些图像的人工解读不仅耗时&#xff0c;还易受观察者间差异…...

程序化广告行业(77/89):融资、并购与上市全景洞察

程序化广告行业&#xff08;77/89&#xff09;&#xff1a;融资、并购与上市全景洞察 大家好呀&#xff01;一直以来&#xff0c;我都希望能和大家一起在技术知识的海洋里畅游、学习进步。前面我们已经了解了程序化广告行业的发展态势、PC端和移动端投放差异以及行业融资的大致…...

2025年慕尼黑上海电子展前瞻

年岁之约&#xff0c;齐聚慕展&#xff1b; 乘风而起&#xff0c;畅联未来。 2025 年 4 月 15 - 17 日&#xff0c;备受瞩目的慕尼黑上海电子展即将在上海新国际博览中心盛大启幕。回首2024年展会的场景&#xff0c;那热烈非凡的氛围、精彩纷呈的展示仍历历在目&#xff0c;也…...

第十九:b+树和b-树

优点一&#xff1a; B树只有叶节点存放数据&#xff0c;其余节点用来索引&#xff0c;而B-树是每个索引节点都会有Data域。 优点二&#xff1a; B树所有的Data域在叶子节点&#xff0c;并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据&#xff0c;这样…...

前沿科技:社会性交互技术原理与核心概念解析

社会性交互中的**情感识别(Emotion Recognition)与拟人化行为生成(Human-like Behavior Generation)**是构建自然、可信人机交互的核心技术,尤其在虚拟助手、社交机器人、元宇宙角色等场景中至关重要。以下是其技术原理、核心方法与实际应用的系统解析: 一、情感识别:从…...

深入浅出Redis 缓存使用问题 | 长文分享

目录 数据一致性 先更新缓存&#xff0c;后更新数据库【一般不考虑】 先更新数据库&#xff0c;再更新缓存【一般不考虑】 先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后删除缓存【推荐】 怎么选择这些方案&#xff1f;采用哪种合适&#xff1f; 缓存…...

操作系统 3.6-内存换出

换出算法总览 页面置换算法 FIFO&#xff08;先进先出&#xff09;&#xff1a; 最简单的页面置换算法&#xff0c;淘汰最早进入内存的页面。 优点&#xff1a;实现简单。 缺点&#xff1a;可能会导致Belady异常&#xff0c;即增加内存反而降低性能。如果刚换入的页面马上又要…...

【Amazon EC2】为何基于浏览器的EC2 Instance Connect 客户端连接不上EC2实例

文章目录 前言&#x1f4d6;一、报错先知❌二、问题复现&#x1f62f;三、解决办法&#x1f3b2;四、验证结果&#x1f44d;五、参考链接&#x1f517; 前言&#x1f4d6; 这篇文章将讲述我在 Amazon EC2 上使用 RHEL9 AMI 时无法连接到 EC2 实例时所遇到的麻烦&#x1f616; …...

Java并发编程:深入解析原子操作类与CAS原理

一、原子操作类概述 Java并发包(java.util.concurrent.atomic)提供了一系列原子操作类&#xff0c;这些类通过无锁算法实现了线程安全的操作&#xff0c;相比传统的锁机制具有更高的性能。原子类基于CAS(Compare-And-Swap)指令实现&#xff0c;是现代并发编程的重要基础。 原…...

新一代AI低代码MES,助力企业数字化升级

随着DeepSeek低成本AI模型的火热&#xff0c;对于传统的MES而言&#xff0c;在这场AI的盛宴中&#xff0c;该如何去调整产品的定位&#xff0c;让MES更符合工业企业的需求呢&#xff1f; 工业互联网、AI、数字孪生等技术加速与MES融合&#xff0c;实现生产全流程的实时监控与智…...

位运算与实战场景分析-Java代码版

一、为什么每个程序员都要掌握位运算&#xff1f; 在电商秒杀系统中&#xff0c;位运算可以快速判断库存状态&#xff1b;在权限管理系统里&#xff0c;位运算能用极小的空间存储复杂权限配置&#xff1b;在算法竞赛中&#xff0c;位运算更是高频出现的性能优化利器。这项看似…...

面试之《前端信息加密》

前端代码是直接暴漏给用户的&#xff0c;请求的接口也可以通过控制台network看到参数&#xff0c;这是不够安全的&#xff0c;如果遇到坏人想要破坏&#xff0c;可以直接修改参数&#xff0c;或者频繁访问导致系统崩溃&#xff0c;或数据毁坏。 所以信息加密在某些场合就变得非…...

CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤

在使用 CentOS 系统时&#xff0c;经常会遇到需要扩展磁盘空间的情况。例如&#xff0c;当虚拟机的磁盘空间不足时&#xff0c;可以通过增加磁盘容量并将其挂载到根目录&#xff08;/&#xff09;来解决。以下是一个完整的操作流程&#xff0c;详细介绍了如何将新增的 10G 磁盘…...

HTML应用指南:利用GET请求获取全国汉堡王门店位置信息

在当今快节奏的都市生活中&#xff0c;餐饮品牌的门店布局不仅反映了其市场策略&#xff0c;更折射出消费者对便捷、品质和品牌认同的追求。汉堡王&#xff08;Burger King&#xff09;作为全球知名的西式快餐品牌之一&#xff0c;在中国市场同样占据重要地位。自进入中国市场以…...

浅入浅出 GRPO in DeepSeekMath

GRPO in DeepSeekMath GRPO 通过在生成组内进行比较来直接评估模型生成的响应&#xff0c;以优化策略模型&#xff0c;而不是训练单独的价值模型&#xff0c;这种方法显著降低了计算成本。GRPO 可以应用于任何可以确定响应正确性的可验证任务。例如&#xff0c;在数学推理中&a…...

计算机网络起源

互联网的起源和发展是一个充满创新、突破和变革的历程&#xff0c;从20世纪60年代到1989年&#xff0c;这段时期为互联网的诞生和普及奠定了坚实的基础。让我们详细回顾这一段激动人心的历史。 计算机的发展与ARPANET的建立&#xff08;20世纪60年代&#xff09; 互联网的诞生…...

HTML 嵌入标签对比:小众(<embed>、<object>) 与 <iframe> 的优缺点及使用场景和方式

需求背景 在网页开发中&#xff0c;嵌入外部资源预览&#xff08;如视频、PDF、地图或其他网页&#xff09;是常见的需求。HTML 提供了多种标签来实现这一功能&#xff0c;其中 <embed>、<object> 和 <iframe> 是最常用的三种。本文将对比它们的优缺点&…...

[python] 作用域

Python中查找变量的顺序遵循LEGB规则(Local->Enclosing->Global->Built-in)。Python中的if/elif/else、for/while等代码块不会创建新的作用域&#xff0c;只有def、class、lambda才会改变作用域。这和C中不同&#xff0c;C中在{}代码块中创建的变量离开这个代码块后就…...

AICon 2024年全球人工智能与大模型开发与应用大会(脱敏)PPT汇总(36份).zip

AICon 2024年全球人工智能与大模型开发与应用大会&#xff08;脱敏&#xff09;PPT汇总&#xff08;36份&#xff09;.zip 1、面向开放域的大模型智能体.pdf 2、企业一站式 AI 智能体构建平台演进实践.pdf 3、PPIO 模型平台出海实战&#xff0c;跨地域业务扩展中的技术优化之道…...

51电子表

设计要求&#xff1a; 基本任务&#xff1a; 用单片机和数码管设计可调式电子钟&#xff0c;采用24小时制计时方式&#xff0c;要求能够稳定准确计时&#xff0c;并能调整时间。发光二极管每秒亮灭一次。电子钟显示格式为&#xff1a;时、分、秒各两位&#xff0c;中间有分隔…...

9-函数的定义及用法

一.前言 C 语⾔强调模块化编程&#xff0c;这⾥所说的模块就是函数&#xff0c;即把每⼀个独⽴的功能均抽象为⼀个函数来实现。从⼀定意义上讲&#xff0c;C 语⾔就是由⼀系列函数串组成的。 我们之前把所有代码都写在 main 函数中&#xff0c;这样虽然程序的功能正常实现&…...

高清视频会议系统BeeWorks Meet,支持私有化部署

在数字化办公时代&#xff0c;视频会议已成为企业协作的关键工具。然而&#xff0c;随着信息安全意识的不断提高&#xff0c;传统的公有云视频会议软件已难以满足企业对数据安全和隐私保护的严格要求。BeeWorks Meet凭借其独特的私有化部署模式、强大的功能集成以及对国产化的适…...

用HTML和CSS绘制佩奇:我不是佩奇

在这篇博客中&#xff0c;我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力&#xff0c;仅用样式就能创造出复杂的图形&#xff0c;而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…...