Day1| Java基础 | 1 面向对象特性
Day1 | Java基础 | 1 面向对象特性
- 基础补充版
- Java中的开闭原则
- 面向对象
- 继承
- 实现继承
- this和super关键字
- 修饰符
- Object类和转型
- 子父类初始化顺序
- 多态
- 一个简单应用
- 在构造方法中调用多态方法
- 多态与向下转型
- 问题回答版
- 面向对象
- 面向对象的三大特性是什么?
- 多态特性你是怎么理解?
- 什么是向上转型和向下转型?
- Java可以多继承吗?为什么只能单继承?
- 抽象类和接口
- 接口和抽象类有什么区别?
- 方法重写和重载
- 方法重写和重载有什么区别?
- 内部类
- 为什么需要内部类?什么是匿名内部类?
- 静态内部类和非静态内部类有什么区别?
- 静态内部类的使用场景是什么?
基础补充版
Java中的开闭原则
Open-Closed Principle, OCP:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
这意味着,当需求变化时,应该通过添加新的代码(扩展)来满足,而不是修改现有的代码(特别是那些已经经过验证并投入使用的代码)。
一些实现开闭原则的方法:抽象化(接口或抽象类)、策略模式、装饰器模式、工厂方法/抽象工厂、使用配置而非硬编码、依赖注入、模板方法。(具体不展开)
SOLID原则
- 单一职责(Single Responsibility),类或者对象最好是只有单一职责,在程序设计中如果发现某个类承担着多种义务,可以考虑进行拆分。
- 开关原则(Open-Close, Open for extension, close for modification),设计要对扩展开放,对修改关闭。换句话说,程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出些回归(regression)问题。
- 里氏替换(Liskov Substitution),这是面向对象的基本要素之一,进行继承关系抽象时,凡是可以用父类或者基类的地方,都可以用子类替换。
- 接口分离(Interface Segregation),我们在进行类和接口设计时,如果在一个接口里定义了太多方法,其子类很可能面临两难,就是只有部分方法对它是有意义的,这就破坏了程序的内聚性。对于这种情况,可以通过拆分成功能单一的多个接口,将行为进行解耦。在未来维护中,如果某个接口设计有变,不会对使用其他接口的子类构成影响。
- 依赖反转(Dependency Inversion),实体应该依赖于抽象而不是实现。也就是说高层次模块,不应该依赖于低层次模块,而是应该基于抽象。实践这一原则是保证产品代码之间适当耦合度的法宝。
面向对象
面向对象特性简介:
封装:利用抽象将数据和基于数据的操作封装在一起,使其构成一个不可分割的实体。把一个对象的属性私有化,对外提供接口以访问该对象。有4大好处:
-
良好的封装能够减少耦合
-
类内部的结构可以自由修改
例如将某一属性的数据类型由int改为String,只需要稍微改动接口方法(内部实现),而无需修改使用了该类的代码。
-
可以对成员进行更精确的控制
-
隐藏信息,实现细节
继承:子类继承父类的属性和方法,使子类对象(实例)具有父类的属性和方法;或子类从父类继承方法,使得子类具有父类相同的方法。分为两类:
- 单继承:一个子类只拥有一个父类。
- 优点:在类层次结构上比较清晰
- 缺点:结构的丰富度有时不能满足使用需求
- 多继承:一个子类拥有多个直接的父类。
- 优点:子类的丰富度很高
- 缺点:容易造成混乱
多态:同一个类的对象在不同情况下表现出来的不同行为和状态。(即,同一个行为具有不同的表现形式)
- 目的:提高代码的灵活性和可扩展性,使得代码更容易维护和扩展。
- 前提条件有三个:
- 子类继承父类
- 子类重写父类的方法
- 父类引用指向子类的对象
理解:
- 子类可以继承父类的字段和方法,子类对象可以直接使用父类中的字段和方法(非私有)
- 子类可以重写父类的方法,从而子类对象调用该方法时表现出不同的行为
- 将子类对象赋给父类类型的引用,从而通过父类类型的引用调用子类中重写的方法,实现多态
继承
实现继承
extends关键字
、implements关键字
(可以变相实现多继承的效果)
// 1.
class 子类名 extends 父类名{}
// 2.
class 子类名 implements 接口1,接口2{@override //必须重写接口内的方法public void 方法(){……}
}
子类抛出的异常必须是父类抛出的异常,或,父类抛出的异常的子异常。
this和super关键字
// this表示当前对象,是指向自己的引用
this.属性 // 调用成员变量,(区别于局部变量)
this.方法() // 调用本类的某个方法
this() // 表示调用本类构造方法
// super表示父类对象,是指向父类的引用
super.属性 // 父类对象中的成员变量
super.方法() // 父类对象中定义的方法
super() // 【调用】父类的构造方法
父类的构造方法不能被继承,子类的构造过程必须调用父类的构造方法。
修饰符
用来定义类、方法或变量。分两类:
- 访问权限修饰符:
public
、protected
、private
、default
等- 用来控制访问权限。
- Java子类重写继承的方法时,不可以降低方法的访问权限,访问修饰符的作用域不能比父类的小。所以在继承中需要重写的方法不能用
private
修饰。
- 非访问修饰符:
static
、final
、abstract
等- 每个都有各自的作用。
static 静态/类变量、静态/类方法
: 可以直接通过类访问,不需要创建一个类的对象来访问成员。- 构造方法不允许被声明为static
- 静态方法中不存在当前对象,因此不能用this和super
- 静态方法能被静态方法重写,不能被非静态方法重写
final
:final变量必须显示指定初始值,一旦赋值后,不能被重新赋值。父类中的final方法可以被子类继承,但不能被重写。final类不能被继承。abstract 抽象类/方法
:有抽象方法的类必须是抽象类,指可以表达概念但无法构造实体。抽象方法指可以表达概念但无法具体实现(只能抽取声明,没有具体的方法体)。
Object类和转型
Object类
:所有类的根类,是最抽象的一个类。java.lang.Object
。
- 所有的类都隐式的继承自Object类。任何类都可以可以使用Object类的方法,创建的类也可以和Object类进行向上、向下转型。
- Java中,所有的对象都拥有Object的默认方法。如,
toString()返回该对象的字符串
、equals()比较两个对象是否相等
、hashCode()
、wait()
、notify()
、getClass()
等 - 该类有一个构造方法,并且是无参构造方法。
子父类初始化顺序
在Java继承中,初始化先后顺序为:
- 父类中静态成员变量和静态代码块
- 子类中静态成员变量和静态代码块
- 父类中普通成员变量和代码块,父类的构造方法
- 子类中普通成员变量和代码块,子类的构造方法
静态>非静态、父类>子类、非构造方法>构造方法
理解:
- 静态变量也称类变量,可以看成一个全局变量。静态成员变量和静态代码块在类加载的时候就初始化,而非静态变量和代码块在对象创建的时候初始化。∴静态>非静态。
- 调用构造方法时,是对成员变量进行初始化操作。∴普通成员变量和代码块>构造方法。
多态
一个简单应用
在运行时根据对象的的类型进行后期绑定,能使编译器在只有一个Wanger
引用的情况下,知道应该调用父类的write方法还是子类的write方法。虽然编译器在编译阶段并不知道对象的类型,但是Java的方法调用机制能找到正确的方法体并执行。
多态的一个简单应用(多态使程序具有良好的可扩展性,能使我们将改变的与未改变的分离开来。例如在子类中添加eat()方法,也不会影响write()的调用):
//子类继承父类
public class Wangxiaoer extends Wanger {public void write() { // 子类覆盖父类方法System.out.println("记住仇恨,表明我们要奋发图强的心智");}public void eat() {System.out.println("我不喜欢读书,我就喜欢吃");}public static void main(String[] args) {// 父类引用指向子类对象Wanger[] wangers = { new Wanger(), new Wangxiaoer() };for (Wanger wanger : wangers) {// 对象是王二的时候输出:勿忘国耻// 对象是王小二的时候输出:记住仇恨,表明我们要奋发图强的心智wanger.write();}}
}class Wanger {public void write() {System.out.println("勿忘国耻");}public void read() {System.out.println("每周读一本好书");}
}
在构造方法中调用多态方法
在创建子类对象时,会先去调用父类的构造方法。而父类构造方法中又调用了被子类覆盖的多态方法。由于父类并不清楚子类对象中的字段值是什么,于是把 int 类型的属性暂时初始化为0。最后,再调用子类的构造方法。子类构造方法知道age的值是4。
public class Wangxiaosan extends Wangsan {private int age = 3;public Wangxiaosan(int age) {this.age = age;System.out.println("王小三的年龄:" + this.age);}public void write() { // 子类覆盖父类方法System.out.println("我小三上幼儿园的年龄是:" + this.age);}public static void main(String[] args) {new Wangxiaosan(4);
// 上幼儿园之前
// 我小三上幼儿园的年龄是:0
// 上幼儿园之后
// 王小三的年龄:4}
}class Wangsan {Wangsan () {System.out.println("上幼儿园之前");write();System.out.println("上幼儿园之后");}public void write() {System.out.println("老子上幼儿园的年龄是3岁半");}
}
多态与向下转型
向下转型是指将父类引用强转为子类类型。这是不安全的:
- 若父类引用指向的是父类对象:类型转换失败。抛出ClassCastException。
- 若父类引用指向的是子类对象:向下转型成功。
public class Wangxiaosi extends Wangsi {public void write() {System.out.println("记住仇恨,表明我们要奋发图强的心智");}public void eat() {System.out.println("我不喜欢读书,我就喜欢吃");}public static void main(String[] args) {Wangsi[] wangsis = { new Wangsi(), new Wangxiaosi() };// wangsis[1]能够向下转型((Wangxiaosi) wangsis[1]).write();// wangsis[0]不能向下转型((Wangxiaosi)wangsis[0]).write();}
}class Wangsi {public void write() {System.out.println("勿忘国耻");}public void read() {System.out.println("每周读一本好书");}
}
另一个实例:
问题回答版
面向对象
面向对象的三大特性是什么?
- 封装
是对类的属性和方法进行封装,只对外暴露方法而不暴露具体使用细节。∴我们一般设计类成员变量的时候,大多设为私有,然后通过一些get、set方法去读写。 - 继承
子类继承父类,“子承父业”。子类拥有父类除私有外的所有属性和方法,自己还能在此基础上拓展自己新的属性和方法。主要目的是复用代码。 - 多态
是同一个行为具有不同表现形式或形态的能力。也就是说,一个父类可能有若干子类,各子类实现的父类方法多种多样。调用父类方法时,父类引用变量指向不同子类实例,从而执行不同方法。这样就称这个父类方法是多态的。
多态特性你是怎么理解?
多态,Polymorphism,字面意思“多种状态”。在面向对象语言中,指接口的多种不同的实现方式。用白话说,就是多个对象调用同一个方法,得到不同的结果。
语法格式:父类类名 引用名称 = new 子类类名()
当是多态时,该引用名称只能访问父类中的属性和方法,但是访问的时候,会优先访问子类重写以后的方法。
满足多态需要三个条件:子类必须继承父类、子类必须重写父类的方法、父类引用指向子类对象。
使用多态,可以使代码之间的耦合度(关联程度)降低,减少冗余代码的同时,提高项目的扩展能力。
Java 多态中,有两种类型转换,
- 向上转型:自动类型转换,子类型赋值给父类型,构成多态()
- 向下转型:强制类型转换,父类型赋值给子类型。当使用多态、并访问子类独有的属性或方法时,必须进行向下转型。(先使用
instance of
关键字判断该对象合法性,即是否属于某一个类或其子类的实例)
具体过程
- 编译阶段:编译器首先检查父类中是否有该方法,如果没有,则编译错误
java.lang.ClassCastException
。如果有,(引用名称绑定的是父类中的方法,Java多态的静态绑定)- 运行阶段:再去调用子类重写后的方法(引用名称绑定的是子类中的方法,Java多态的动态绑定)
参考链接
什么是向上转型和向下转型?
向上转型:通过子类对象(小范围)实例化父类对象(大范围),属于自动转换。Father f = new Son()
,父类引用变量指向子类对象后,只能使用父类已声明的方法,但方法如果被重写会执行子类的方法,如果方法未被重写将执行父类的方法。
向下转型:通过父类对象(大范围)实例化子类对象(小范围),属于强制转换。Son s = (Son)f
,但父类引用变量实际引用必须是子类对象才能成功转型。子类引用变量指向父类引用变量指向的对象后(一个Son()
对象),就可以调用一些子类特有而父类没有的方法。
案例:
Object object=new Integer(666);//向上转型Integer i=(Integer)object;//向下转型Object->Integer,object的实质还是指向IntegerString str=(String)object;//错误的向下转型,虽然编译器不会报错但是运行会报错
Java可以多继承吗?为什么只能单继承?
不能,Java语言在设计时考虑到类层次的复杂性及其实际意义禁止了多继承,但可以通过内部类、多层继承或实现接口的方式达到多继承的目的。
参考链接
Java实现多继承效果的方式有三种:
- 内部类:可以继承一个与外部无关的类,保证了内部类的独立性。在类中分别继承多个内部类,以达到多继承的效果。
- 多层继承:子类继承父类,父类还继承其他类。这样子类就能拥有所有被继承类的属性和方法。
- 实现接口:接口可以看作是一组方法。
抽象类和接口
接口和抽象类有什么区别?
接口类和抽象类是Java面向对象设计的两个基础机制。
接口是对行为的抽象,是抽象方法的集合。利用接口可以达到API定义和实现分离的目的。接口不能实例化,不能包含任何非常量成员,任何filed
都是隐藏着public static final
的意义;同时,没有非静态方法实现,也就是说,要么是抽象方法,要么是静态方法。Java标准库中,定义了非常多的接口,比如java.util.List
。实现接口,使用implements
关键词。
抽象类是不能实例化的类,用abstract
关键字修饰class,目的主要是代码重用。除了不能实例化,形式上和一般的Java类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取相关Java类的共用方法实现,或者是共同成员变量,然后通过继承的方式达到代码复用的目的。Java标准库中,比如collection框架,很多用用部分就被抽取成为抽象类,例如java.util.AbstractList
。继承抽象类,使用extends
关键词。
参考Java标准库中的ArrayList。
public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//...
}
方法重写和重载
方法重写和重载有什么区别?
方法重写 override
:子类中出现和父类一模一样的方法(包括方法名、参数书列表、返回值类型)。外壳不变,核心内容重写。方法重载 overload
:在一个类中定义了多个方法名相同,但参数的数量、次序或类型不一致不同的方法。
方法重写是子类与父类的一种多态性表现,而方法重载是一个类的多态性表现。
方法重载的好处就是让类以统一的方式处理不同类型的一种手段,调用方法时通过传递给他们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
内部类
为什么需要内部类?什么是匿名内部类?
- 接口和内部类提供了一种将接口与实现分离的更加结构化的方法:由于内部类拥有对其外部类的所有成员的访问权,因此可以隐藏实现的细节。
每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
- 内部类有效地实现了“多重继承”:内部类允许继承多个非接口类型(译注:类或抽象类)。
匿名内部类是局部内部类的一种简要写法,可以在不声明的情况下,继承其它类并创建对象。
局部内部类是定义在方法里面的内部类。对外来说,只有该方法内能调用局部内部类。对内来说,局部内部类可以任意访问该方法内的局部变量。
静态内部类和非静态内部类有什么区别?
- | 静态内部类 | 非静态内部类 |
---|---|---|
访问权限 | 四种:public、protected、default、private | 三种:public、protected、default |
实例化 | 可以直接通过类名访问,不依赖于外部类的实例 | 只能在外部类的实例方法中创建,必须依赖于外部类的实例 |
关系 | 只是被包含在外部类中,与外部类没有任何联系 | 可以访问外部类的成员和方法,可以使用外部类的引用来访问外部类的成员 |
应用场景 | 不需要访问外部类实例的情况下使用,例如实现一些独立的功能 | 需要访问外部类实例的情况下使用,例如实现一个事件监听器 |
静态内部类的使用场景是什么?
参见上一题。
相关文章:

Day1| Java基础 | 1 面向对象特性
Day1 | Java基础 | 1 面向对象特性 基础补充版Java中的开闭原则面向对象继承实现继承this和super关键字修饰符Object类和转型子父类初始化顺序 多态一个简单应用在构造方法中调用多态方法多态与向下转型 问题回答版面向对象面向对象的三大特性是什么?多态特性你是怎…...
Spring 事务失效的几种情况
目录 1. 事务方法不是public 2. 自调用问题 3. 异常处理不当 4. 数据源或事务管理器配置错误 5. 事务传播行为不当 6. 代理方式不正确 7. 事务同步问题 1. 事务方法不是public 在Spring中,默认情况下,只有public方法上的Transactional注解才会被代…...

【Linux 命令操作】如何在 Linux 中使用多行注释呢?
文章目录 1. 给代码进行多行注释2. 给代码取消多行注释 1. 给代码进行多行注释 🐧① 首先用 vim 打开代码,按 Esc进入命令模式(Normal mode); 🐧② 然后按住 ctrl v 进入列模式; 🐧③ 再通过按 h(左)、j(…...

【RPC】Dubbo接口测试
关于rpc,推荐看看这篇 : 既然有HTTP协议,为什么还要有RPC 一、Dubbo 是一款alibaba开源的高性能服务框架: 分布式服务框架高性能和透明化的RPC远程服务调用方案SOA服务治理方案 二、Dubbo基础架构 三、 Dubbo接口测试 1、jme…...

PVZ2 植物克僵尸【第二期】
众所周知,PVZ2(植物大战僵尸2)中有许多恶心的僵尸,而我们不得不派出它们的————克星!(*为建议方法) 5.战机小鬼 战机小鬼,恶心会发射子弹,所以: 1&…...

libcity笔记:libcity/data/batch.py
1 Batch 2 BatchPAD...

【Java EE】多线程(二)Thread 类与常用方法
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…...

AGV无人叉车 | 我们为什么要投资“智慧生产”
AGV 作为一种智能工业车辆机器人,无人叉车充分融合叉车技术和AGV技术,近年来在仓储物流领域的应用逐步扩大。在传统叉车厂商、传统AGV厂商、物流集成商及仓储机器人企业等各方力量推动下,无人叉车市场在竞合中快速发展,并促使无人…...

【C++】滑动窗口:将x减到0的最小操作数
1.题目 2.算法思路 这个题目难在要转化一下才能用滑动窗口。 题意是需要在数组的前后两段区间进行解题,但同时对两段区间进行操作是比较困难的,我们可以将中间这段区间只和与nums_sum-x(数组总和-x)进行比较,这样就可…...
运动控制“MC_MoveVelocity“功能块详细应用介绍
1、运动控制单位u/s介绍 运动控制单位[u/s]介绍-CSDN博客文章浏览阅读91次。运动控制很多手册上会写这样的单位,这里的u是英文单词unit的缩写,也就是单位的意思,所以这里的单位不是微米/秒,也不是毫米/秒,这里是一个泛指,当我们的单位选择脉冲时,它就是脉冲/秒,也就是…...

9种单片机常用的软件架构
长文预警,加代码5000多字,写了4个多小时,盘软件架构,这篇文章就够了! 可能很多工程师,工作了很多年,都不会有软件架构的概念。 因为我在做研发工程师的第6年,才开始意识到这个东西,在…...

PyQt5中重要的概念:信号与槽
PyQt中信号与槽概念定义如下(网络上引用的): 信号(signal)和槽(slot)是Qt的核心机制,也是在PyQt编程中对象之间进行通信的机制。在创建事件循环之后,通过建立信号和槽的…...

MacOS快速安装FFmpeg,并使用FFmpeg转换视频
前言:目前正在接入flv视频流,但是没有一个合适的flv视频流地址。网上提供的flv也都不是H264AAC(一种视频和音频编解码器组合),所以想通过fmpeg来将flv文件转换为H264AAC。 一、MacOS环境 博主的MacOS环境(…...

docker部署nginx并配置https
1.准备SSL证书: 生成私钥:运行以下命令生成一个私钥文件。 生成证书请求(CSR):运行以下命令生成证书请求文件。 生成自签名证书:使用以下命令生成自签名证书。 openssl genrsa -out example.com.key 2048 …...

五一小长假,景区智慧公厕发挥了那些作用?
五一小长假已经过去,在旅途中相信大家非常开心,其中也不乏一些细节让你有了更好的体验,而在您享受美景、畅游风光的同时,或许并未留意到那个角落里,默默为您服务的智慧公厕。是的,它们将成为您旅途中不可或…...

Spring - 9 ( 10000 字 Spring 入门级教程 )
一: MyBatis XML 配置文件 Mybatis 的开发有两种方式: 注解XML 我们已经学习了注解的方式, 接下来我们学习 XML 的方式 MyBatis XML 的方式需要以下两步: 配置数据库连接字符串和 MyBatis写持久层代码 1.1 配置连接字符串和 MyBatis 此步骤需要进…...

shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)
目录 一、GeoJSON是什么 二、GeoJSON的结构组成 2.1、点(Point)数据示例 2.2、线(LineString)数据示例 2.3、面(Polygon)数据示例 2.4、特征(Feature)数据示例 2.5、特征集合&…...
没有强有力的科技支撑,就没有保密工作的高质量发展。新修订的《中华人民共和国保守国家秘密法》在总则中新增保密科技创新有关内容包括()
没有强有力的科技支撑,就没有保密工作的高质量发展。新修订的《中华人民共和国保守国家秘密法》在总则中新增保密科技创新有关内容包括() 点击查看答案内容: A.国家鼓励和支持保密科学技术研究和应用B.提升自主创新能力 C.明确依法保护保密领…...

【快速入门】数据库的增删改查与结构讲解
文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内,有组织的,可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储,具有较小的冗余性,较高的独立性和易扩展性,并为…...

使用AIGC生成软件类图表
文章目录 如何使用 AI 生成软件类图表什么是 MermaidMermaid 的图片如何保存?mermaid.liveDraw.io Mermaid可以画什么图?流程图时序图 / 序列图类图状态图甘特图实体关系图 / ER图 如何使用 AI 生成软件类图表 ChatGPT 大语言模型不能直接生成各类图表。…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...