重返JAVA之路——面向对象
目录
面向对象
1.什么是面向对象?
2.面向对象的特点有哪些?
3.什么是对象?
4.什么是类?
5.什么是构造方法?
6.构造方法的特性有哪些?
封装
1.什么是封装?
2.封装有哪些特点?
数据隐藏
接口简化
可维护性增强
复用性提高
3.为什么需要使用封装?
继承
1.什么是继承?
2.继承有哪些特点?
3.为什么要继承?
方法的重写
1.什么是方法的重写?
2.方法重写的要求是什么?
3.什么是重载?
4.重载的特点是什么?
5.重写和重载的区别是什么?
6.重写的设计原则是什么?
多态
1.什么是多态?
2.多态有哪些特点?
多态的缺陷:
3.为什么要使用多态?
4.实现多态的条件有哪些?
5.什么是多态中的向上转型和向下转型?
面向对象
1.什么是面向对象?
面向对象是解决问题的一种思想,主要是依靠对象之间的交互完成一件事情。
面向对象(Object-Oriented Programming, OOP)将现实世界中的事物抽象为具有状态(数据)和行为(功能)的对象,并通过对象之间的交互来设计和构建程序。
2.面向对象的特点有哪些?
面向对象的特点是:封装、继承和多态。
3.什么是对象?
定义:对象是现实世界中事物的抽象,是面向对象的基本单元,包含 状态(属性) 和 行为(方法)。
状态:举个例子,我现在创建了一个“学生”对象,这个对象他的年龄,性别,籍贯等等属于他的属性,也就是对象的状态(数据)。又或者说大家玩儿游戏,游戏中的角色的各种生命值,攻击力等等,这些属性属于“状态”。
行为:那么我这个学生或者某个游戏角色他们干了什么,这个属于我这个对象所执行的操作,比如他考试或者打怪。这就是用方法(函数)描述对象能执行的操作。
总的来说就是,它(对象),它中包含了(它的信息(属性),以及它要干什么(行为)。
4.什么是类?
定义:类是对象的模板(蓝图),定义了一类对象共有的属性和方法。
我们可以这样理解,类中其实就打包了这个对象的信息以及他要干什么。
那么我们就说对象是类的实例(Instance),通过 new
关键字创建。
//定义学生类
class Student{String name; //属性int age;void study(){System.out.println(name+"在学习");//状态}}
Scanner sc = new Student();
5.什么是构造方法?
定义:构造方法(Constructor)是类中的一种特殊方法,主要用于在创建对象时对对象进行初始化操作。
构造方法的主要作用是在创建对象时为对象的属性赋初始值。
如果我们使用构造方法,便可以初始化这个学生对象的属性。
// 构造方法,用于初始化学生对象的属性public Student(String name, int age) {this.name = name;this.age = age;
完整示例:
class Student {String name;int age;// 构造方法public Student(String name, int age) {this.name = name;this.age = age;}void study() {System.out.println(name + "在学习");}public static void main(String[] args) {// 创建 Student 对象,调用构造方法进行初始化Student stu = new Student("李四", 22);stu.study();}
}
6.构造方法的特性有哪些?
- 名字必须与类名相同
- 没有返回值类型,设置为void也不行
- 创建对象时由编译器自动调用,并在对象的生命周期内只调用一次。(也就是说创建对象之后只能调用一次构造方法。)
- 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
封装
1.什么是封装?
封装(Encapsulation)是将数据(类的属性)和操作数据的方法(类的方法)封装在一个独立的类中,并通过访问修饰符控制外部对内部数据的访问,从而实现数据隐藏和接口控制。
类的使用者不需要知道类是如何实现的。实现的细节被封装并且对用户隐藏起来,这被称为类的封装。
2.封装有哪些特点?
(1)数据隐藏:通过访问控制(如私有属性)禁止外部直接操作数据,确保数据安全与完整性,仅允许类内方法交互。
(2)接口简化:提供公共方法作为外部交互接口,隐藏内部实现细节,降低使用复杂度,提升代码易读性。
(3)可维护性增强:内部实现修改不影响外部调用(只要接口不变),减少代码耦合,降低维护成本与风险。
(4)复用性提高:封装后的类作为独立模块,可重复应用于不同场景,避免重复开发,提升代码利用率。
下面我们来详细讲解:
数据隐藏
想象你有一个存钱罐,里面装着你的零花钱。这个存钱罐就像是一个被封装起来的东西,它有一个小口子,你只能通过这个口子把钱放进去或者拿出来。存钱罐里面具体有多少钱,外面的人是看不到的,这就相当于数据被隐藏起来了。只有你自己知道怎么去操作这个存钱罐(就像类里面的方法可以操作数据),别人没办法直接把手伸进去动你的钱,这样就能保证你钱的安全,不会被别人乱花。
接口简化
还是拿存钱罐来说,对于其他人来讲,他们不需要知道存钱罐内部的构造是什么样的,也不用管钱在里面是怎么摆放的。他们只需要知道,把钱从那个小口子放进去,存钱罐就能帮他们把钱存起来;想取钱的时候,从那个小口子把钱拿出来就行。这就好比类提供了公共的方法,外部的人只需要知道怎么使用这些方法,而不用去了解类内部是怎么实现这些功能的,这样使用起来就简单多了。
可维护性增强
假如你觉得现在这个存钱罐不太好用了,想换一个新的存钱罐。只要新存钱罐也有同样的小口子,能实现存钱和取钱的功能,那么对于那些用这个存钱罐存钱取钱的人来说,他们根本不需要做任何改变,还是像以前一样把钱放进去、拿出来就行。在编程里,这就相当于修改类的内部实现,只要公共的接口(方法)不变,外部的代码就不用跟着改,维护起来就很方便。
复用性提高
你可以想象存钱罐是一个很实用的东西,在不同的地方都能用到。比如在家里,你可以用它存零花钱;在学校,你也可以用它存一些买文具的钱。同样的道理,封装好的类就像这个存钱罐一样,可以在不同的程序或者代码场景中被重复使用,不用每次都重新去设计一个存钱罐(编写相同的代码),这样能节省很多时间和精力。
3.为什么需要使用封装?
我们使用封装,可以保证数据的安全性,方便我们操作类中的数据。
举个例子:你有一个“银行卡”盒子,里面的余额是秘密,外面不能直接看或改。但盒子提供了“查询余额”“存钱”“取钱”按钮,每次取钱时按钮会检查余额够不够,确保不会取出负数。这就是封装!
继承
1.什么是继承?
定义:子类(派生类)可以继承父类(基类)的属性和方法,实现代码复用,并可以扩展或重写父类功能。
继承(inheritance)机制:它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生的类叫派生类。
继承主要解决的问题是:共性的抽取,实现代码复用。
就比如说,我现在有个学生类,此为父类,大学生为父类中的(子类),他继承了学生类所具有的所有所有的属性和行为。
又或者说你爸爸会开车(定义一个 “人类” 类,里面有 “开车” 的方法),你作为儿子(子类),可以直接继承爸爸的 “开车” 能力,不用自己重新学。
同时,你还能自己新增能力,比如 “开赛车”(子类独有的方法),或者把 “开车” 升级(比如爸爸开车很慢,你开车很快,重写父类方法)。
我们需要注意的是:子类并不是父类的一个子集。实际上,一个子类通常比它的父类包含更多的信息和方法。
2.继承有哪些特点?
(1)代码复用
(2)方法重写(覆盖,Override)
(3)扩展性与封装性
(4)在 Java 中一个类只能直接继承一个父类。
3.为什么要继承?
当然是为了实现共性抽取,代码的复用啦!同时支持在父类基础上扩展或修改功能,
继承使得你可以定义一个通用的类(父类),之后可以扩充为一个更加特定的类(子类)。
当子类继承父类之后,一定要先帮助父类进行构造,然后再构造子类自己。只能在子类当中,调用父类的构造方法。(注意:只能在子类当中,调用父类的构造方法!)
方法的重写
1.什么是方法的重写?
方法重写(Method Overriding)是面向对象编程里的一个关键特性,其指的是在子类中对父类里已有的方法进行重新定义。重写后的方法名、参数列表和返回类型与父类中的方法相同,不过方法体内容有所不同。
所以,方法的重写也被称为覆盖,重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
打个比方说,假设我目前定义了一个学生类和大学生类,大学生类是学生类的子类,我现在想更改大学生类,这时就可以使用方法的重写。通过方法重写,大学生(子类)能够重新定义从学生(父类)继承而来的方法,从而让大学生(子类)展现出和学生(父类)不一样的行为。
2.方法重写的要求是什么?
(1)方法名必须相同
(2)参数列表必须相同(类型,个数,顺序)
(3)返回值必须相同
(4)必须基于继承关系
(5)使用 @Override
注解标识重写的方法
我们需要注意的是,当我们想使用方法的重写,那么就必须遵守规则:
(1)被private修饰的方法不能进行重写;
(2)被static修饰的方法不能进行重写;
(3)被final修饰的方法不能进行重写(密封方法);
(4)子类重写父类方法时,访问修饰限定符不能比父类被重写方法的权限更严格(即范围更小),但可以更宽松(即范围更大)
-
若父类方法是
private
:
因private
权限最小(仅类内可见),子类无法访问该方法,不能重写。 -
若父类方法是默认权限(无修饰符,包内可见):
子类若与父类在同一包中,重写时可使用默认权限或更宽松的protected
、public
;若不在同一包中,因默认权限对子类不可见,不能使用默认权限重写,需选择protected
或public
(权限更宽泛)。 -
若父类方法是
protected
:
子类重写时,可选择protected
或更宽松的public
,但不能使用默认权限或private
(权限更严格)。 -
若父类方法是
public
:
因public
权限最大,子类重写时必须保持public
,不能缩小为protected
、默认权限或private
。
(5)方法的返回值之前可以不同,但是必须是父子类关系(协变返回类型)
(6)构造方法不能发生重写
3.什么是重载?
重载(Overload)是指在同一个类中定义多个方法(行为),这些方法名字相同,不过参数列表不同。
重载的目的是让类能够根据不同的参数类型或参数数量来执行不同的操作。
重载就是你在一个类中,让多个方法共用一个名字,但根据参数(比如数量、类型)的不同,执行不同的操作。
举个例子,假如说我们在餐厅中,有个“做面条”的操作,做面条是方法名,如果顾客想吃素面,就只需要“面条”这一个参数;假如顾客想吃鸡蛋面,就需要“鸡蛋”+“面条”这两个参数。两个同样都是“做面条”的方法名,但由于参数不同(一个参数是面条,另一个是面条+鸡蛋),这就是重载。
4.重载的特点是什么?
(1)发生在同一个类中:同一个类里可以定义多个同名方法。
(2)参数列表不同:参数的类型、数量或者顺序不一样。
(3)编译时确定调用:编译器会根据调用时传入的参数来决定调用哪个方法
5.重写和重载的区别是什么?
- 重写:发生在子类和父类之间,方法签名相同,用于实现多态,运行时确定调用的方法。
- 重载:发生在同一个类中,方法名相同但参数列表不同,用于提供多种不同的调用方式,编译时确定调用的方法。
方法的重载是一个类的多态性表现,而方法的重写是子类对父类的一种多态性表现。
在重载中,我们必须修改参数列表、返回类型、访问修饰限定符。
区别点 | 重写(override) | 重载(overload) |
参数列表 | 一定不能修改 | 必须修改 |
返回类型 | 一定不能修改(除非可以构成父子关系) | 可以修改 |
访问限定符 | 一定不能做更严格的限制(可以降低限制) | 可以修改 |
6.重写的设计原则是什么?
- 静态绑定:也称为前期绑定(早绑定),在编译时,根据用户所传递实参类型就确定了具体调用哪个方法,典型的代表就是函数重载。
- 动态绑定:也称为后期绑定(婉绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定调用哪个类的方法,一般用于重写。
静态绑定一般发生在编译阶段,根据变量的声明类型确定调用的方法,由编译器直接生成对应的方法调用地址。一般我们在同一类里的方法重载会使用。
我们来看一个例子,假如你有一个同学,他既是程序员(声明类型),也是游戏高手(实际身份)。如果你叫“程序员来修电脑”(调用方法),不管他是不是程序员,编译器只会让他使用“程序员修电脑”的方法,不会管它是不是游戏高手。
那么动态绑定,一般发生在运行阶段,程序根据对象的实际类型,决定调用哪个方法。典型的代表就是方法的重写。
比如说,你说“我是一个人”(父类声明),但实际上你可能是“学生”、“老师”、“医生”(子类对象),当你需要工作时(调用重写的方法),你到底是学生写作业、老师讲课,还是医生看病,取决于你是谁。
所以,如果我们是 静态绑定 ,就要看 编译时 变量声明的类型。
当然,如果我们是 动态绑定 , 就要看 运行时 对象实际的类型。
多态
1.什么是多态?
定义:同一操作(如方法调用)在不同对象上表现的行为。
用通俗的话来讲,就是“同样的指令,不同的对象有不同的反应”。
举个例子,我们现在定义了一个动物类,猫、都是这个动物类的子类,他们都有会叫的“方法”,那么我们使用多态的话,就可以让不管是猫还是狗,都可以通过动物类来让这些子类使用它们的“方法(会叫)”,代码更简单,并且能实现代码复用。
2.多态有哪些特点?
多态的优点:
(1)能够降低代码的 "圈复杂度", 避免使用大量的 if - else
(2)可扩展能力更强
什么叫 "圈复杂度" ?
多态的缺陷:
3.为什么要使用多态?
我们使用多态,就可以在同一个接口下,统一处理不同的对象,并且减少大量的if-else的使用。
在面向对象编程中,多态是静态绑定(编译时绑定)和动态绑定(运行时绑定)的结合体。
所以多态能同时满足 “代码复用”(静态多态简化重载逻辑)和 “灵活扩展”(动态多态支持子类新增行为)的需求。
多态的本质是 “通过抽象接口隔离变化”:将不变的逻辑(父类定义的通用规则)与变化的实现(子类的具体行为)分离,使代码更易维护、扩展和复用。
当需要新增功能(如子类)时,只需定义新的子类并实现父类接口 / 方法,无需修改已有调用逻辑。
通过多态,可以将现实世界中的复杂对象抽象为统一模型(如 “动物”“图形”),忽略具体细节,聚焦共性行为,使代码更贴近真实场景的逻辑。
多态允许用自然语言中的 “泛化” 概念(如 “所有动物都会叫”)来设计程序,而非针对每个具体类型(“狗会叫、猫会叫”)编写重复逻辑,代码更易理解和维护。
使用多态我们就无需显式将子类对象转换为具体类型即可调用其重写的方法(通过父类引用直接调用),避免了大量冗余的类型检查和强制转换。
4.实现多态的条件有哪些?
(1)必须在继承体系下
(2)子类必须要对父类中的方法进行重写
(3)通过父类的引用调用重写的方法
5.什么是多态中的向上转型和向下转型?
向上转型是多态的实现基础,而向下转型是多态的补充手段。
多态依赖向上转型实现动态绑定,通过向下转型扩展功能。
向下转型: 将父类引用还原成子类对象。
举个例子:我们把 “大学生”(子类)看作 “学生”(父类),用 “学生” 的身份活动。此时能调用重写后的 “考试”(子类实现的考试形式)。但 “大学生特有的技能,用‘学生’身份(向上转型后)就用不出来”,(向上转型后,它只 “暴露” 父类的功能。)比如 “大学生实习” 这个技能,因为 “学生” 这个身份(父类)没定义这个功能。如果想使用 “实习”,就得向下转型把 “学生” 再转回 “大学生”(且得先确认这个 “学生” 本质上是 “大学生”)。
总结:
- 向上转型:把子类当父类用,隐藏子类特有的功能,用统一的 “大身份” 活动。
- 向下转型:把父类转回子类,但得先确认它 “本质” 是这个子类,才能用子类特有的功能。
相关文章:
重返JAVA之路——面向对象
目录 面向对象 1.什么是面向对象? 2.面向对象的特点有哪些? 3.什么是对象? 4.什么是类? 5.什么是构造方法? 6.构造方法的特性有哪些? 封装 1.什么是封装? 2.封装有哪些特点? 数据隐…...
docker 安装 jenkins
拉取镜像 docker pull jenkins/jenkins:2.426.3-lts-jdk17 创建数据卷 # 创建时即设置安全权限(SGID确保组权限继承) sudo mkdir -p /var/jenkins_home sudo chmod -R 777 /var/jenkins_home 拉取镜像并运行容器 # 生产环境推荐(JDK17…...
sql 向Java的映射
优化建议,可以在SQL中控制它的类型 在 MyBatis 中,如果返回值类型设置为 java.util.Map,默认情况下可以返回 多行多列的数据...
探索Streamlit在测试领域的高效应用:文档读取与大模型用例生成的完美前奏
大模型用例生成前置工作之文档读取——构建你的自动化测试基础 在群友的极力推荐下,开始了streamlit的学习之旅。本文将介绍如何使用Streamlit开发一个多功能文档处理工具,支持读取、预览、格式转换和导出多种测试相关文档(YAML、JSON、DOCX…...
Python中数值计算、表格处理和可视化的应用
1.数值计算:Numpy import numpy as np 1.1创建数组 import numpy as np arr1 np.array([[1,2,3,4,5]]) print(arr1) print(type(arr1)) print("数组形状",arr1.shape) arr2 np.array([[1,2,3],[2,3,4]]) print(arr2) print(type(arr1)) print("…...
【数据可视化艺术·实战篇】视频AI+人流可视化:如何让数据“动”起来?
景区游玩,密密麻麻全是人,想找个拍照的好位置都难;上下班高峰挤地铁,被汹涌的人潮裹挟着,只能被动 “随波逐流”。这样的场景,相信很多人都再熟悉不过。其实,这些看似杂乱无章的人群流动现象&am…...
038-flatbuffers
flatbuffers FlatBuffers技术调研报告 一、核心原理与优势 FlatBuffers通过内存直接访问技术实现零拷贝序列化,其核心优势如下: 内存布局:数据以连续二进制块存储,包含VTable(虚拟表)和Data Object&…...
探索 Go 与 Python:性能、适用场景与开发效率对比
1 性能对比:执行速度与资源占用 1.1 Go 的性能优势 Go 语言被设计为具有高效的执行速度和低资源占用。它编译后生成的是机器码,能够直接在硬件上运行,避免了 Python 解释执行的开销。 以下是一个用 Go 实现的简单循环计算代码: …...
Pinia最基本用法
1. 定义 Store 首先,定义一个 Pinia Store,使用组合式 API 风格和 ref 来管理状态。 示例:stores/ids.js import { defineStore } from pinia; import { ref } from vue;export const useIdsStore defineStore(ids, () > {const ids …...
MySQL中的UNION和UNION ALL【简单易懂】
一、前言 UNION 和 UNION ALL 是 SQL 中用于合并多个查询结果集的关键字。 二、核心作用 两者均用于将多个 SELECT 语句的结果集纵向合并(列结构需相同),但行为存在关键差异: 三、使用场景对比 需要去重时:例如合并…...
ConcurrentHashMap 源码分析
摘要 介绍线程安全集合类 ConcurrentHashMap 源码,包括扩容,协助扩容,红黑树节点读写线程同步,插入元素后累加键值对数量操作原子性实现。 1 成员变量及其对应的数据结构 底层由数组红黑树链表实现volatile long baseCount 和 v…...
一种基于学习的多尺度方法及其在非弹性碰撞问题中的应用
A learning-based multiscale method and its application to inelastic impact problems 摘要: 我们在工程应用中观察和利用的材料宏观特性,源于电子、原子、缺陷、域等多尺度物理机制间复杂的相互作用。多尺度建模旨在通过利用固有的层次化结构来理解…...
【DE2-115】Verilog实现DDS+Quartus仿真波形
【DE2-115】Verilog实现DDSQuartus仿真波形 一、任务要求二、实现步骤2.1 相位累加器2.2 波形存储器ROM2.2.1 方波模块2.2.2 正弦波形存储器 2.3 3锁相环倍频电路2.4 顶层电路设计 三、设计实现四、实验总结 一、任务要求 采用数字频率合成(Direct Digital Frequen…...
StickyNotes,简单便签超实用
日常工作中是不是经常需要记点东西,但又不想用太复杂的工具?今天给你推荐一款超简单的桌面便签软件——StickyNotes。 下面是动图: 简单到极致的便签工具 StickyNotes真的是简单到不能再简单了。打开软件,直接输入你的便签内容&a…...
深度探索 C 语言:指针与内存管理的精妙艺术
C 语言作为一门历史悠久且功能强大的编程语言,以其高效的性能和灵活的底层控制能力,在计算机科学领域占据着举足轻重的地位。 指针和内存管理是 C 语言的核心特性,也是其最具挑战性和魅力的部分。深入理解指针与内存管理,不仅能够…...
【C++】深拷贝与浅拷贝
重开也不是不可能 ~.~ 浅拷贝 #include <iostream> #include <cstring>class ShallowCopyExample { public:int m_nValue;int* m_pData;// 构造函数,初始化指针成员ShallowCopyExample(int value) : m_nValue(value) {m_pData new int(0);*m_pData va…...
【3】k8s集群管理系列--包应用管理器helm之chart资源打包并推送到harbor镜像仓库
一、chart资源打包 helm package ./web-chart # 当前目录会生成一个tgz的压缩文件二、安装help push插件(用于推送前面打包的文件,到镜像仓库) .1 下载help-push二进制文件 wget https://github.com/chartmuseum/helm-push/releases/down…...
React与Vue:选择哪个框架入门?
React与Vue:选择哪个框架入门? 作为前端开发者,我在React和Vue两个框架间切换多次,常被新手问到应该从哪个入手。不同于网上那些详尽的技术比较,这里我想从实用角度给你一个简明对比。 两大框架核心差异 特性ReactV…...
pycharm已有python3.7,如何新增Run Configurations中的Python interpreter为python 3.9
在 PyCharm 中,如果你已经安装了 Python 3.9,并且希望在 Run Configurations 中新增一个 Python 3.9 的解释器,可以按照以下步骤操作: 步骤 1:打开 PyCharm 设置 点击 PyCharm 左上角的 File 菜单。选择 Settings&am…...
STL之迭代器(iterator)
迭代器的基本概念 迭代器(iterator)模式又称为游标(Cursor)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式&#…...
Mysql5.7配置文件
Mysql5.7配置文件 初始化数据库之前修改my.cnf----配置持久化键(persistence key) 初始化数据库之前修改my.cnf----配置持久化键(persistence key) 使用utf8mb4而不是utf8: https://blog.csdn.net/omaidb/article/details/106481406 https://blog.csdn.net/fdipzo…...
HarmonyOS-ArkUI V2装饰器: @Provider和@Consumer装饰器:跨组件层级双向同步
作用 我们在之前学习的那些控件中,各有特点,也各有缺陷,至今没有痛痛快快的出现过真正能跨组件的双向绑定的装饰器。 比如 @Local装饰器,不能跨组件@Param装饰器呢,能跨组件传递,但是仅仅就是下一层组件接收参数。另外,它是单向传递,不可被重新赋值。如果您非要改值则…...
【HarmonyOS 5】敏感信息本地存储详解
【HarmonyOS 5】敏感信息本地存储详解 前言 鸿蒙其实自身已经通过多层次的安全机制,确保用户敏感信息本地存储安全。不过再此基础上,用户敏感信息一般三方应用还需要再进行加密存储。 本文章会从鸿蒙自身的安全机制进行展开,最后再说明本地…...
0x03.Redis 通常应用于哪些场景?
回答重点 1)缓存(Cache): Redis 最常用的场景是作为缓存层,以减少数据库的负载,提高数据读取速度。例如,常用的用户会话数据和页面渲染结果可以存储在 Redis 中。2)分布式锁(Distributed Lock): Redis 可以用作分布式锁的实现,确保在分布式系统中资源的安全访问,避免…...
Keil创建自定义的STM32标准库工程
注:以下工程创建将以STM32F103ZET6为例 1 下载需要的资料包 1.1 下载 Keil 的 STM32F103 芯片支持包 1.1.1 手动下载安装包 Keil官网:https://www.keil.com/ (1)进入官网,点击 Download。 (2…...
React(1)基础入门
React(1)基础入门 Author: Once Day Date: 2025年4月10日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: FullStack开发_Once-Day的博客-CSDN博客 …...
Mysql8配置文件
Mysql8配置文件 修改my.cnf----配置持久化键(persistence key)配置表名不区分大小写 修改my.cnf----配置持久化键(persistence key) MySQL8初始化数据库之前配置好这些变量值,初始化数据库之后可能无法修改这个值。 # 服务端配置 [mysqld] ######## 数据目录和基…...
c/c++ 使用libgeotiff读取全球高程数据ETOPO
#include <geotiff.h> #include <geotiffio.h> #include <tiffio.h> #include <iostream> #include <xtiffio.h> void MyTIFFErrorHandler(const char* module, const char* fmt, va_list args) {// 格式化错误消息char buffer[1024];vsnprintf(…...
Spring Boot集成Nacos
1. 添加依赖 在pom.xml文件中添加Nacos相关依赖。根据Spring Boot版本选择合适的依赖版本: Spring Boot 3.2.x版本 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artif…...
CAP理论 与 BASE理论
一、分布式系统存在的问题 1.分布式系统 20世纪90年代,随着互联网应用的快速扩张,传统单机系统难以支撑高并发、跨地域的数据处理需求。分布式系统(Distributed System) 逐渐成为主流架构,分布式系统是由多台计算机&…...
C++(21)—类和对象(下) ⑥匿名对象
文章目录 一、匿名对象的定义与基本特性二、匿名对象与有名对象的对比1. 有名对象2. 匿名对象 三、匿名对象的构造与析构时机1. 构造与析构规则2. 示例分析 四、匿名对象的适用场景1. 临时调用对象方法2. 作为函数参数 五、总结 一、匿名对象的定义与基本特性 匿名对象&#x…...
Go环境变量配置
Go环境变量配置 一、下载 进入The Go Programming Language 点击下载对应操作系统的 安装成功界面如下图,默认安装到: usr/local/go/ 安装完成之后,在终端运行 go version,如果显示类似下面的信息,表明安装成功(备注:darwin(其实…...
AI推理强,思维模型也有功劳【58】二八定律思维
giszz的理解:二八定律,我们说的和听的都比较多。20%的关键,是事物本质,做人不要贪心,也不要胡子眉毛一把抓。当然,也不要轻视那80%。 一、定义 二八定律思维模型,也被称为帕累托法则࿰…...
文件上传靶场
文件上传靶场 项目结构 upload-lab/ ├── Dockerfile └── www├── index.php└── upload└── flag.txt执行命令流程(逐行执行) 创建目录结构 # 创建目录结构 mkdir upload-lab;cd upload-lab mkdir -p www/upload# 创建flag文件 echo &qu…...
RV1106 OCR 识别算法
一 题记 目标是在某款 RV1106 低算力小板下跑通OCR文字识别算法,做个简单的应用,RK 官方模型库rk_model_zoo 有PP-OCR 的例子,但在 rv1106 上尚未支持。于是便打算折腾一吧。 二 方案甄选 参考国外某大佬的比较: 对比了几种方案…...
Linux实现翻译以及群通信功能
1.翻译功能实现 UdpServer.hpp文件 构造函数 接收一个端口号和一个回调函数,回调函数是传入一个执行方法,比如翻译方法。 UdpServer(uint16_t port,func_t func):_sockfd(defaultfd),_port(port),_isrunning(false),_func(func){}Init函数 首先创建了…...
[MRCTF2020]ezpop wp
本题考点:php反序列化的pop链 首先来了解一下pop链是什么,它类似于多米诺骨牌一环套一环,要调用这个成员方法然后去找能调用这个方法的魔术方法,最后一环接一环,完成一个链子,最终形成payload。 那么来了解一下这些魔术方法 __construct() //类的构造函数࿰…...
机器学习入门之Sklearn基本操作
、 Sklearn全称:Scipy-toolkit Learn是 一个基于scipy实现的的开源机器学习库。它提供了大量的算法和工具,用于数据挖掘和数据分析,包括分类、回归、聚类等多种任务。本文我将带你了解并入门Sklearn在机器学习中的基本用法。 获取方式 pip install sc…...
(二十二)安卓开发中的数据存储之SQLite简单使用
在Android开发中,SQLite是一种非常常用的数据库存储方式。它轻量、简单,非常适合移动设备上的数据管理。本文将通过通俗易懂的语言,结合代码示例和具体场景,详细讲解SQLite在Android中的使用。 1. 什么是SQLite? SQLite是一个开…...
docker compose搭建博客wordpress
一、前言 docker安装等入门知识见我之前的这篇文章 https://blog.csdn.net/m0_73118788/article/details/146986119?fromshareblogdetail&sharetypeblogdetail&sharerId146986119&sharereferPC&sharesourcem0_73118788&sharefromfrom_link 1.1 docker co…...
信息学奥赛一本通 1498:Roadblocks | 洛谷 P2865 [USACO06NOV] Roadblocks G
【题目链接】 ybt 1498:Roadblocks 洛谷 P2865 [USACO06NOV] Roadblocks G 【题目考点】 1. 图论:严格次短路径 严格次短路的路径长度必须大于最短路的路径长度。 非严格次短路的路径长度大于等于最短路的路径长度。 【解题思路】 每个交叉路口是一…...
学习笔记—C++—类和对象(三)
目录 类和对象 再探构造函数 类型转换 隐式类型转换 显式类型转换 C语言风格类型转换 C风格类型转换 static_cast dynamic_cast const_cast reinterpret_cast static成员 友元 友元函数 友元类 友元成员函数 内部类 匿名对象 匿名对象的使用场景:…...
句句翻译。
对这些单词整理,格式为:“overall /əʊvərɔːl/ adj.全面的,综合的,总体的adv.全部,总 计,一般来说,大致上,总体上n.外套,罩衣,工装连衣裤,工装 服 ” 4,4 A review published in January in Experimental Dermatology found that ceramide made sk…...
LeetCode 2999.统计强大整数的数目:上下界数位DP
【LetMeFly】2999.统计强大整数的数目:上下界数位DP 力扣题目链接:https://leetcode.cn/problems/count-the-number-of-powerful-integers/ 给你三个整数 start ,finish 和 limit 。同时给你一个下标从 0 开始的字符串 s ,表示一…...
具身导航中的视觉语言注意力蒸馏!Vi-LAD:实现动态环境中的社会意识机器人导航
作者:Mohamed Elnoor 1 ^{1} 1, Kasun Weerakoon 1 ^{1} 1, Gershom Seneviratne 1 ^{1} 1, Jing Liang 2 ^{2} 2, Vignesh Rajagopal 3 ^{3} 3, and Dinesh Manocha 1 , 2 ^{1,2} 1,2单位: 1 ^{1} 1马里兰大学帕克分校电气与计算机工程系, 2…...
FreeRTOS入门与工程实践-基于STM32F103(一)(单片机程序设计模式,FreeRTOS源码概述,内存管理,任务管理,同步互斥与通信,队列,信号量)
裸机程序设计模式 裸机程序的设计模式可以分为:轮询、前后台、定时器驱动、基于状态机。前面三种方法都无法解决一个问题:假设有A、B两个都很耗时的函数,无法降低它们相互之间的影响。第4种方法可以解决这个问题,但是实践起来有难…...
算法思想之位运算(二)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之位运算(二) 发布时间:2025.4.13 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题判定字符是否唯一题目链接题目描述算法思路代码实现 汉明距离题目链接题目…...
软考笔记day04
寻址方式 CISC RISC 流水线技术 存储系统 1、层次化存储系统 2、Cache 3、主存编址计算 输入输出技术 I/O 总线...
本地电脑如何连接windows云服务器
进行远程连接需要几个数据:用户名、密码、公网IP 打开本地cmd,输入命令mstsc打开远程连接面板, 在计算机输入框中输入云服务器的IP地址 点击“选项”展开,点击“本地资源”,然后点击“详细信息” 用户名通常为admin…...
Linux内核常见的调度策略
在 Linux 内核中,调度策略决定了任务如何被分配 CPU 时间以及任务之间的优先级关系。以下是五种常见的调度策略:STOP、DL(Deadline)、RT(Real-Time)、CFS(Completely Fair Scheduler)…...