解释下什么是面向对象?面向对象和面向过程的区别?
看着很基础是吧,你还真不一定会
4-Java 中创建对象的几种方式?
1、使用new关键字,最常见的创建方式,通过调用类的构造方法(构造器)来创建对象。
2、使用反射,通过java的反射API可以动态的创建对象,反射允许在运行时获取类的信息,并且可以调用类的构造方法创建对象。
3、使用克隆,如果一个类实现了Cloneable接口并重写了Object类的clone()方法,那么可以通过调用对象的clone()方法来创建该对象的一个副本。
4、使用序列化和反序列化,,如果一个类实现了Serializable接口,那么可以通过序列化(将对象转换为字节流)和反序列化(将字节流转换回对象)来创建对象。这种方式常用于对象的持久化存储和传输。
5、使用依赖注入,在依赖注入中,对象的创建和管理是由框架负责。通过配置或注解,框架会自动创建所需要的对象,并将其注入到所需要的地方。
6、工厂模式,工厂模式是一种创建对象的设计模式,它隐藏了对象创建的具体逻辑,并通过一个统一的接口来创建对象。工厂模式可以分为简单工厂、工厂方法和抽象工厂等
7、使用构建器模式,构建器模式(Builder Pattern)是一种对象构建的设计模式,它允许你以更加灵活的方式创建复杂对象。构建器模式通常用于构造具有多个可选参数的类
在 Java 中,创建对象的方式有多种,常见的几种方法包括:
1. 使用 new
关键字创建对象
这是最常见的一种创建对象的方法。通过 new
关键字实例化一个类,并调用类的构造函数来创建一个对象。
public class Person {String name;int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}
}
public class Main {public static void main(String[] args) {// 使用 new 关键字创建对象Person person1 = new Person("Alice", 30);System.out.println(person1.name); // Alice}
}
2. 通过反射机制创建对象
反射是 Java 提供的一种强大的机制,允许程序在运行时获取类的信息,并动态地创建对象。可以通过 Class.forName()
或 Constructor.newInstance()
方法来实现反射创建对象。
import java.lang.reflect.Constructor;
public class Person {String name;int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}
}
public class Main {public static void main(String[] args) throws Exception {// 使用反射创建对象Class<?> clazz = Class.forName("Person");Constructor<?> constructor = clazz.getConstructor(String.class, int.class);Person person2 = (Person) constructor.newInstance("Bob", 25);System.out.println(person2.name); // Bob}
}
3. 通过 clone()
方法创建对象
如果类实现了 Cloneable
接口并重写了 clone()
方法,那么就可以使用该方法来创建一个对象的副本。这个副本是通过复制原始对象的字段来创建的。
class Person implements Cloneable {String name;int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}// 重写 clone() 方法@Overridepublic Person clone() throws CloneNotSupportedException {return (Person) super.clone();}
}
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Person person1 = new Person("Alice", 30);// 使用 clone() 方法创建副本Person person2 = person1.clone();System.out.println(person2.name); // Alice}
}
4. 通过工厂方法创建对象
工厂方法是一种设计模式,通常通过静态方法来创建对象。工厂方法可以根据不同的条件返回不同类型的对象,避免直接使用 new
关键字。
class Person {String name;int age;private Person(String name, int age) {this.name = name;this.age = age;}// 工厂方法public static Person createPerson(String name, int age) {return new Person(name, age);}
}
public class Main {public static void main(String[] args) {// 通过工厂方法创建对象Person person = Person.createPerson("Alice", 30);System.out.println(person.name); // Alice}
}
5. 通过序列化和反序列化创建对象
Java 中可以通过序列化和反序列化机制来“克隆”一个对象。通过将对象写入流,然后再从流中读取,可以恢复原始对象。
import java.io.*;
class Person implements Serializable {String name;int age;// 构造函数public Person(String name, int age) {this.name = name;this.age = age;}
}
public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {// 创建对象Person person1 = new Person("Alice", 30);// 序列化对象到文件ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"));out.writeObject(person1);out.close();// 反序列化对象ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.ser"));Person person2 = (Person) in.readObject();in.close();System.out.println(person2.name); // Alice}
}
6. 通过对象反序列化创建对象
这个方法类似于序列化和反序列化创建对象,通过将对象的字节流传输并恢复对象的状态,来创建对象。
public class Person implements Serializable {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}
}
public class Test {public static void main(String[] args) throws Exception {// 通过序列化和反序列化来创建对象Person originalPerson = new Person("Alice", 25);// 序列化ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ObjectOutputStream out = new ObjectOutputStream(byteArrayOutputStream);out.writeObject(originalPerson);out.flush();// 反序列化ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());ObjectInputStream in = new ObjectInputStream(byteArrayInputStream);Person newPerson = (Person) in.readObject();System.out.println(newPerson.getName()); // 输出: Alice}
}
总结
在 Java 中,有多种方式可以创建对象,常见的包括:
-
使用
new
关键字:最直接的方式,创建对象并调用构造方法。 -
使用反射 (
Class.forName()
和Constructor.newInstance()
):动态创建对象。 -
通过
clone()
方法:复制现有对象(需要实现Cloneable
接口)。 -
工厂方法模式:通过工厂方法创建对象,封装了创建对象的过程。
-
序列化与反序列化:通过序列化和反序列化对象来创建新对象。
-
对象反序列化:通过将对象的字节流传输并恢复对象状态,创建对象。
不同的创建方式适用于不同的场景,选择合适的方法可以提高代码的可维护性和灵活性。
3-JDK、JRE、JVM三者之间的关系?
1.JVM
JVM:Java 虚拟机(Java Virtual Machine, JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。
JVM的主要功能包括:
加载类:通过类加载器(ClassLoader)将Java类文件加载到内存中。
字节码执行:JVM将Java字节码(.class文件)翻译成具体操作系统的机器码并执行。
内存管理:JVM管理内存,包括堆(Heap)、栈(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(Program Counter)。其中,堆用于存储对象,栈则保存方法调用和局部变量。
垃圾回收:JVM自动管理内存中的垃圾回收(Garbage Collection, GC),释放不再使用的对象占用的内存。
跨平台性:Java的“编写一次,处处运行”正是通过JVM实现的。JVM为不同的操作系统提供了不同的实现,确保相同的字节码可以在任何支持JVM的平台上运行。
2.JRE
JRE:JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、Java 基础类库(Class Library)。
JRE的主要组成部分:
JVM(Java虚拟机): JVM是JRE的核心部分,负责执行Java字节码(.class文件),将其翻译为特定操作系统的机器码。JVM是实现Java跨平台特性的关键,使得Java程序能够在不同的操作系统上运行。
类库(核心类库): JRE包含了一系列标准的Java类库,这些类库为Java应用提供了常用功能,比如:
基础数据结构:如集合(List、Set、Map等)。
I/O操作:文件读写、输入输出流操作等。
网络通信:如Socket、HTTP连接等。
多线程和并发:Java中的线程和并发控制。
图形界面:如AWT、Swing等用于图形用户界面的库。
Java类加载器: JRE包含的类加载器(Class Loader)负责将Java类文件加载到内存中。它的作用是根据程序的需求,动态加载需要的类。
垃圾回收机制(Garbage Collection, GC): JRE管理应用程序的内存分配和释放,自动回收不再使用的对象,避免内存泄漏和手动内存管理带来的复杂性。
JRE的主要用途:
JRE的主要作用是为Java程序提供一个运行时环境,而不是开发环境。如果你只想运行Java应用程序,安装JRE就足够了。它是:
用户端环境:对于普通用户来说,他们不需要编写Java代码,安装JRE即可运行Java应用。
跨平台支持:通过JVM,JRE保证了Java程序在不同平台上的一致运行行为。
3.JDK
JDK:JDK(Java Development Kit),它是功能齐全的 Java SDK,是提供给开发者使用,能够创建和编译 Java 程序的开发套件。它包含了 JRE,同时还包含了编译 java 源码的编译器 javac 以及一些其他工具比如 javadoc(文档注释工具)、jdb(调试器)、jconsole(基于 JMX 的可视化监控⼯具)、javap(反编译工具)等等。
JDK的主要组成部分:
JVM(Java Virtual Machine,Java虚拟机): JDK包含JVM,用于运行编译后的Java字节码。虽然JDK内含JVM,但它不仅仅是用于运行Java程序,还包含了开发相关的工具和库。
JRE(Java Runtime Environment,Java运行时环境): JRE是JDK的一部分,它包含了JVM和一些基础类库,主要用于运行Java应用程序。没有开发工具,是运行时的环境。
开发工具: JDK提供了许多开发工具,帮助开发人员完成从源代码编写到程序运行的全过程:
javac:Java编译器,用于将Java源代码(.java文件)编译成字节码(.class文件)。
java:JVM的入口,用于运行编译后的字节码。
javadoc:用于生成Java文档的工具,它可以从源代码中的注释生成HTML格式的API文档。
jdb:Java调试器,用于调试Java应用程序。
jar:打包工具,可以将多个.class文件打包成一个.jar文件(Java归档文件)。
javap:Java反汇编工具,用于查看字节码文件的内部结构。
类库(Libraries): JDK还包含了大量的标准类库,这些库为Java程序提供了各种基础功能,如数据结构、文件操作、网络通信、图形界面、并发编程等。这些类库使得开发人员不必从零开始编写这些功能,大大提高了开发效率。
3.JVM、JRE、JDK关系与区别
JVM(Java Virtual Machine)、JRE(Java Runtime Environment)和JDK(Java Development Kit)是Java开发和运行环境中的三个重要组成部分,它们之间既有联系又有区别。下面是它们的关系与区别:
三者的定义:
JVM(Java虚拟机): JVM是Java虚拟机,它是Java运行时环境中的核心部分。JVM负责执行Java字节码,将其翻译为具体平台上的机器指令。JVM是Java跨平台特性的实现者,确保同一个Java程序可以在不同操作系统上运行。
JRE(Java运行时环境): JRE包含JVM以及Java标准类库等资源。它提供了运行Java应用程序所需的所有环境,但不包括开发工具。JRE专为普通用户运行Java程序设计,比如桌面应用程序或Java Web应用。它包含JVM,并且负责Java应用的执行。
JDK(Java开发工具包): JDK是开发人员使用的工具包,它包含JRE、JVM,以及用于编写、编译、调试和打包Java程序的开发工具(如javac编译器、javadoc文档生成器、jar打包工具等)。JDK是编写和构建Java应用的必备工具。
三者关系:
JVM是JRE的一部分:JVM负责执行Java字节码,是Java程序运行的核心,但它并不包括Java类库和其他运行环境所需的资源。JVM由JRE包裹,JRE通过提供标准类库、类加载器、垃圾回收机制等,来支持JVM运行Java程序。
JRE是JDK的一部分:JRE是用于运行Java程序的环境,而JDK是用于开发Java程序的工具包。JDK不仅包含JRE(也就是运行Java程序的能力),还包含了开发工具,如编译器、调试器等。
因此,JDK包含JRE,JRE包含JVM,它们的层级关系如下:
JDK
└── JRE
└── JVM
JVM:执行Java字节码,翻译为机器码。
JRE:包含JVM和Java标准类库,提供运行Java程序的环境。
JDK:包含JRE和开发工具,提供开发和运行Java程序的完整工具包
总结:
JVM是核心,用于执行Java字节码;
JRE在JVM的基础上,提供运行环境,使得Java程序可以运行;
JDK不仅包含JRE,还提供开发工具,供开发人员编写、编译和调试Java程序。
JVM负责程序的执行,JRE确保Java程序能运行,而JDK则是为Java开发提供工具。
2-在 Java 中,定义一个不做事且没有参数的构造方法(无参构造方法)有什么作用?
在 Java 中,定义一个不做事且没有参数的构造方法(无参构造方法)有着重要的作用。尽管表面上看它没有直接的功能,但它在类的可实例化性、与框架或工具的兼容性、子类的灵活性以及简化类的使用方面都有显著的价值。
保持类的可实例化性:当类中定义了带参数的构造方法时,显式定义无参构造方法可以避免代码因缺少默认构造方法而无法编译。
与框架或工具的兼容性:许多 Java 框架和工具依赖无参构造方法来实例化类,因此显式定义无参构造方法可以确保这些框架或工具正常工作。
允许子类实例化:无参构造方法为子类提供了更大的灵活性,简化了子类的构造过程。
简化类的使用:无参构造方法使得类的实例化变得更加简单和直观,特别适用于测试或原型设计阶段。
1-解释下什么是面向对象?面向对象和面向过程的区别?
什么是面向对象 (Object-Oriented Programming, OOP)?
面向对象是一种程序设计思想,它将现实世界中的对象映射到程序中的对象,通过对象的属性和方法来组织程序。面向对象的核心概念包括:
-
类 (Class):类是对象的蓝图或模板。类定义了对象的属性和行为。
-
对象 (Object):对象是类的实例,包含属性和方法。
-
封装 (Encapsulation):将数据(属性)和对数据的操作(方法)封装在一起,通过公开的接口访问数据。
-
继承 (Inheritance):通过继承可以使一个类继承另一个类的属性和方法,从而实现代码复用。
-
多态 (Polymorphism):多态允许对象通过不同的方式响应相同的消息。方法的重载和方法的重写是多态的表现。
-
抽象 (Abstraction):抽象是指隐藏实现细节,仅保留重要特征,暴露必要的接口。
面向对象与面向过程的区别
-
面向过程 (Procedural Programming):
-
程序由函数组成,数据和操作分离。
-
强调的是执行的步骤(即过程)。
-
程序是通过函数调用来完成任务的,数据是独立的。
-
-
面向对象 (Object-Oriented Programming):
-
程序由对象组成,每个对象包含属性和方法。
-
强调的是对象之间的交互,数据和方法是结合在一起的。
-
面向对象将数据和功能捆绑在一起,通过对象间的交互来完成任务。
-
面向对象与面向过程的示例
面向过程的例子
// 面向过程编程 public class ProcessExample { // 数据 private static int radius = 5; // 过程:计算圆的面积
public static double calculateArea(int r) { return Math.PI * r * r; }
public static void main(String[] args) {
// 调用过程
double area = calculateArea(radius);
System.out.println("Circle area: " + area);
}
}
解释:
-
面向过程的编程思维将数据(
radius
)与操作(calculateArea
)分开处理。calculateArea
函数执行一个特定的任务,但它不关心数据如何存储,数据本身也不具备行为。
面向对象的例子
// 面向对象编程
class Circle {
// 属性:数据
private int radius;
// 构造器:初始化对象
public Circle(int radius) { this.radius = radius; }
// 方法:行为
public double calculateArea() { return Math.PI * radius * radius;
}
// 获取半径
public int getRadius() { return radius; }
// 设置半径
public void setRadius(int radius) { this.radius = radius; } }
public class ObjectOrientedExample { public static void main(String[] args) { // 创建对象:将数据和行为组合在一起 Circle circle = new Circle(5); // 通过对象访问属性和方法 double area = circle.calculateArea(); System.out.println("Circle area: " + area); }
}
解释:
-
在面向对象的例子中,我们定义了一个
Circle
类,封装了属性radius
和方法calculateArea
。对象circle
不仅包含数据(radius
),还包含执行操作的行为(calculateArea
)。 -
我们通过对象的接口(
calculateArea
)来操作数据,而不直接暴露数据(radius
)。
总结
-
面向过程:关注步骤和功能,数据和功能分离。代码通常是由一系列函数组成的。
-
面向对象:关注对象和它们之间的交互,数据和行为结合在一起。对象是程序的基本单位,通过对象的属性和方法来完成任务。
面向对象通过封装、继承、多态等特性,使得代码更加模块化、可扩展和可维护。
相关文章:
解释下什么是面向对象?面向对象和面向过程的区别?
看着很基础是吧,你还真不一定会 4-Java 中创建对象的几种方式? 1、使用new关键字,最常见的创建方式,通过调用类的构造方法(构造器)来创建对象。 2、使用反射,通过java的反射API可以动态的创建对…...
【CDN】快速了解CDN是什么?以及工作原理和应用场景
快速了解CDN是什么?以及工作原理和应用场景 一、什么是CDN?CDN相关的术语解释 二、CDN工作原理三、CDN与传统网站的区别四、CDN的作用和意义五、CDN的应用场景 一、什么是CDN? CDN英文全称Content Delivery Network,中文翻译即为内…...
【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用
引言 在上一篇文章中,我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型,特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤,读…...
WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)
文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…...
Git进阶:本地或远程仓库如何回滚到之前的某个commit
在Git的使用过程中,我们经常会遇到需要回滚到之前某个commit的情况。无论是为了修复错误、撤销更改,还是为了重新组织代码,回滚到特定commit都是一个非常有用的技能。本文将介绍几种常用的回滚方法,帮助读者更好地掌握Git版本控制…...
Django 后端数据传给前端
Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb()Step7 简单创建两列…...
Docker 技术系列之安装多版本Mysql5.6和Mysql5.7
image 大家好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关。所以这个教程对于在linux系统还是macOS都是通用的,不用担心。 上一篇,我们安装好对应的Docker之后,感受到了它的便利。接…...
C# 范围判断函数
封装范围函数 public static class CommonUtil {/// <summary>/// 范围判断函数,检查给定的值是否在指定的最小值和最大值之间。/// 例如,可以用来判断当前日期是否在开始日期和结束日期之间。/// 该方法适用于任何实现了 IComparable 接口的类型…...
技术速递|使用 Dependabot 管理 .NET SDK 更新
作者:Jamie Magee - 高级软件工程师 排版:Alan Wang 保持 .NET SDK 版本的更新对于维护安全高效的应用程序至关重要。现在 Dependabot 可以在 global.json 中更新 .NET SDK 版本,这使您可以比以往更轻松地确保自己的应用程序始终运行最新的安…...
笔记本通过HDMI转VGA线连接戴尔显示器,wifi不可用或网速变慢
早上开开心心的来使用我的分屏显示器,结果winP开拓展,我的wifi就断掉了,琢磨了好一阵我以为是wifi的问题,发现不进行拓展,网络又好了,一上午就研究这个了,说是hdmi信号干扰了wifi信号啥的额&…...
Excel中match()函数
函数功能概述 MATCH 函数是 Excel 中用于在指定区域中查找特定值的位置的函数。它返回指定数值在指定数组区域中的位置。这个位置是相对于查找区域的相对位置,而不是绝对的单元格位置。语法结构 MATCH(lookup_value, lookup_array, match_type)lookup_value…...
ACl访问控制列表
ACL的原理 ACL也称为访问控制列表,主要有包过滤的功能,同时也是包过滤防火前的本质 其方式主要是定立规则,这些规则控制着数据包的允许或者通过 ACL的场景 如下图,在全网互通的情况下,控制特定的数据包走向 例如控…...
android 用户空间切换流程
在Android开发中,创建和切换用户是一个重要的功能,特别是在需要多用户支持的应用中,下面讲述一下用户切换的流程。 一、CarUserManager.java 准备创建新用户,可以减少真正创建用户的时间 @RequiresPermission(anyOf = {Manifest.permission.MANAGE_USERS,Manifest.permis…...
突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向
随着我国经济快速发展和人民生活水平不断提升,汽车保有量截至2023年9月底就已达到了3.3亿,同比增长6.32%。庞大的汽车保有量对我国的环境和能源都产生了巨大的压力,具备节能环保优势的新能源汽车对于有效解决环境恶化和能源危机问题具有重要意…...
51单片机仿真摇号抽奖机源程序 12864液晶显示
资料下载地址:51单片机仿真摇号抽奖机源程序12864液晶显示仿真程序 一、功能介绍 单片机连接12864(st7920)液晶显示器和1个按键接INT0,模拟一个抽奖机。 实现效果: 1、液晶初始显示“祝你好运!”ÿ…...
路由器的原理
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网路安全入门系列 目录 路由器的原理一,路由器基础及相关…...
Vue(四)
1.Vuex 1.1 Vuex是什么 Vuex 是一个插件,可以帮我们管理 Vue 通用的数据。例如:购物车数据、个人信息数据。 1.2 vuex的使用 1.安装 vuex 安装 vuex 与 vue-router 类似,vuex 是一个独立存在的插件,如果脚手架初始化没有选 v…...
今日总结 2024-12-23
项目初始化 拉取代码与环境配置: 难点:Git 命令不熟悉,依赖文件定位不准,启动脚本含义不明。解决办法:系统学习 Git 基础操作,如通过官方文档、优质的 Git 教程视频,反复练习克隆、分支切换等常…...
Vue常用指令
1. 插值表达式 {{}} <script setup> let msg="hello vue!" </script> <template> <h1>{{ msg }}--{{ 1+1 }}--{{ msg+sb }}</h1> </template> 2. Vue 常用指令 (以v- 开头) 2.1 v-html 替换标签元素内容,包含标签…...
欢乐力扣1-10
文章目录 前言1、合并两个有序数组1.1.描述 2、移除元素2.1.描述2.2.思路 3、删除有序数组中的重复元素3.1.描述3.2.思路 4、输出有序数组中的重复项二4.1.描述4.2.思路 5、多数元素5.1.描述5.2.思路 6、轮转数组6.1.描述6.2.思路 7、买卖股票最佳时机一7.1.思路 8、买卖股票最…...
[创业之路-204]:《华为战略管理法-DSTE实战体系》- 5-平衡记分卡绩效管理
目录 一、平衡计分卡概述 1、平衡计分卡的基本概念 2、平衡计分卡的发展阶段 3、平衡计分卡在华为的应用 4、平衡计分卡的优缺点 五、财务(股东)、顾客(用户)、内部运营(内部)及学习与发展࿰…...
算法设计期末复习
文章目录 1. 什么是算法,算法有哪些特征,算法设计的基本步骤,算法的时间复杂度的确定2. 什么是算法分析,算法分析的主要内容是什么?怎么确定算法的时间复杂度?3. 什么是分治算法,分治算法通常用…...
芝法酱学习笔记(2.2)——sql性能优化2
一、前言 在上一节中,我们使用实验的方式,验证了销售单报表的一些sql性能优化的猜想。但实验结果出乎我们的意料,首先是时间查询使用char和datetime相比,char可能更快,使用bigint(转为秒)和cha…...
Linux 安装 nvm
Linux 安装 nvm 网上用curl命令安装的方式都下载不成功,直接使用压缩包安装 ####### wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz mkdir -p /root/.nvm tar xvf nvm-0.39.1.tar.gz -C /root/.nvm#######vi ~/.bashrc,在~/.bashrc的末尾…...
图像处理基础 | 查看两张图像的亮度差异,Y通道相减
两张图像的Y通道相减通常用于图像差异分析或比较,尤其是在亮度方面。具体来说,这一操作是基于YCbCr颜色空间中的Y通道进行的,其中Y通道代表图像的亮度信息(亮度成分),而Cb和Cr通道分别代表色度成分…...
机器学习-43-可解释性机器学习库LIME
文章目录 1 LIME1.1 LIME的特点1.2 LIME的步骤2 应用LIME2.1 分类模型2.1.1 创建模型和解释器2.1.2 解释样本2.2 回归模型2.2.1 创建模型和解释器2.2.2 解释样本2.3 文本模型2.3.1 创建模型和解释器2.3.2 解释样本2.4 图像模型2.4.1 创建模型和解释器2.4.2 解释样本3 附录3.1 l…...
RestTemplate关于https的使用详解
RestTemplate关于https的使用详解 一、restTemplate注入到bean里面。 Configuration public class RestTempleConfig {BeanPrimarypublic RestTemplate restTemplate() {return new RestTemplate();}/*** https 请求的 restTemplate* return* throws Exception*/Beanpublic R…...
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
Hiヽ(゜▽゜ )-欢迎来到蓝染Aizen的CSDN博客~ 🔥 博客主页: 【✨蓝染 の Blog😘】 💖感谢大家点赞👍 收藏⭐ 评论✍ 文章目录 行为型模式1、模板方法模式(1)概述(2&…...
CNN、RNN、LSTM和Transformer之间的区别和联系
文章目录 CNN、RNN、LSTM和Transformer之间的区别和联系前言CNN(卷积神经网络)RNN(循环神经网络)LSTM(长短期记忆网络)Transformer四者之间的联系与区别Yolo算法简介Yolo和CNN的关系YOLO各版本 CNN、RNN、L…...
sqlite3,一个轻量级的 C++ 数据库库!
宝子们,今天咱来唠唠 sqlite3 这个超棒的轻量级 C 数据库库。它就像是一个小巧但功能齐全的“数据仓库”,能帮咱们轻松地存储、查询和管理数据,无论是开发小型的桌面应用,还是做一些简单的数据处理程序,它都能派上大用…...
重温设计模式--观察者模式
文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject…...
基于Java+Swing+Mysql的超市客户关系管理系统
基于JavaSwingMysql的超市客户关系管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 系统实现管理员对客户信息进行增删改查,信息包括客户编号,姓名,手机号,会员评级;可以对客户消费记录…...
JavaWeb Servlet的反射优化、Dispatcher优化、视图(重定向)优化、方法参数值获取优化
目录 1. 背景2. 实现2.1 pom.xml2.2 FruitController.java2.3 DispatcherServlet.java2.4 applicationContext.xml 3. 测试 1. 背景 前面我们做了Servlet的一个案例。但是存在很多问题,现在我们要做优化,优化的步骤如下: 每个Fruit请求都需…...
基础I/O -> 如何谈文件与文件系统?
文件的基础理解 空文件也要在磁盘上占据空间。文件 文件内容文件属性。文件操作 对内容的操作 对属性的操作或者是对内容和属性的操作。标定一个文件,必须使用:文件路径 文件名(具有唯一性)。如果没有指明对应的文件路径&…...
安装配置git
1、下载git:https://git-scm.com 2、配置git,进入git bash #配置用户名 git config-global user.name "petter7226" #配置邮箱 git config-global user.email "894266014qq.com" 3、配置ssh免密登录 可参考这个文档 https://gitee.com/help/article…...
cad学习 day4 day5
平面布置 客厅平面布置 端景柜: 一般玄关区域、走廊、过道尽头做造型端景柜,可以组展示、柜体、艺术品陈设窗帘盒 200mm 电动窗帘盒 250mm, 镜像命令: MI 做对称使用沙发: 归类FF - 移动家私木门: 归类FF - 平面内门地台床: 使用bo快速生成, 绘制后外围偏移O 50mm pl连接作为灯…...
Java的基础概念(一)
一、注释 **注意!:**注释内容不会参与编译和运行,仅仅是对代码的解释说明。 Java支持单行注释、多行注释、文档注释。 单行注释 以//开头 ,格式【 //注释内容 】 例子如下: 多行注释 格式【 / 注释内容 / 】 例…...
Qt5 cmake引用private头文件
Qt5 cmake引用private头文件 如何引用Qt的qzipreader_p.h头文件 、xlsxzipreader_p.h头文件 使用 target_include_directories target_include_directories(TestQtXlsx PRIVATE${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}${Qt${QT_VERSION_MAJOR}Xlsx_PRIVATE_INCLUD…...
重温设计模式--代理、中介者、适配器模式的异同
文章目录 1、相同点2、不同点 1、相同点 目的都是为了更好地处理对象之间的关系:这三种模式都是在软件设计中用于处理对象之间的关联和交互,以达到优化系统结构、增强可维护性等目的。它们都在一定程度上隐藏了对象之间的某些细节或者复杂性,…...
拦截器魔法:Spring MVC中的防重放守护者
目录 简介HandlerInterceptorAdapter vs HandlerInterceptor创建一个防重放拦截器注册拦截器路径模式匹配适配器模式的魅力总结 简介 在构建安全可靠的Web应用程序时,防止请求重放攻击是一项关键任务。当用户或系统发出的请求被恶意第三方捕获并重复发送给服务器…...
MVC 发布
关于MVC发布,我为您整理了以下信息: SpringMVC发布:SpringMVC是Spring框架的一部分,它基于MVC架构,具有解耦合、轻量级和对注解的广泛支持等优点。发布SpringMVC项目通常涉及配置中央调度器、编写控制器类和设置视图解…...
AI在传统周公解梦中的技术实践与应用
本文深入探讨了人工智能在传统周公解梦领域的技术实践与应用。首先介绍了传统周公解梦的背景与局限性,随后详细阐述了 AI 技术如何应用于梦境数据的采集、整理与分析,包括自然语言处理技术对梦境描述的理解,机器学习算法构建解梦模型以及深度…...
Go怎么做性能优化工具篇之基准测试
一、什么是基准测试(Benchmark) 在 Go 中,基准测试是通过创建以 Benchmark 开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的…...
社区管理系统:实现社区信息数字化管理的实践
3.1可行性分析 开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该社区管理系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同…...
Java设计模式 —— 【结构型模式】外观模式详解
文章目录 概述结构案例实现优缺点 概述 外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这…...
基于 Python 的二手电子设备交易平台
标题:基于 Python 的二手电子设备交易平台 内容:1.摘要 基于 Python 的二手电子设备交易平台的摘要:本文介绍了一个基于 Python 的二手电子设备交易平台。该平台旨在为用户提供一个便捷、安全的交易环境,促进二手电子设备的流通和再利用。文章首先介绍了…...
Vue.js组件开发-插槽(Slots)的使用
插槽(Slots)是 Vue.js 中一个非常强大的特性,允许在组件内部指定可重用的内容片段,这些内容片段可以由父组件动态地填充。它能够让父组件决定组件内部应该渲染什么内容。 默认插槽 默认插槽是最简单的插槽类型。在子组件的模板中…...
python:面向对象简单示例
编写 se2ball.py 如下 # -*- coding: utf-8 -*- """ python 面向对象简单示例 """ import randomclass Random_ball(object):""" 随机选双色球 """def __init__(self, reds33, blues16):""" 初始…...
Stealthy Attack on Large Language Model based Recommendation
传统RS依赖id信息进行推荐,攻击:生成虚假用户,这些用户对特定目标物体给于高评价,从而影响模型的训练。 基于llm的RS:llm利用语义理解,将用户兴趣转化为语义向量,通过计算用户兴趣向量与物品向…...
云原生周刊:利用 eBPF 增强 K8s
开源项目推荐 Slurm-operator Slurm-operator 是一个高效可扩展的框架,用于在 K8s 环境中部署和运行 Slurm 工作负载。 它结合了 Slurm 的可靠性和 Kubernetes 的灵活性,支持快速部署 Slurm 集群、动态扩展 HPC 工作负载,并提供高度灵活的定…...