Java面试黄金宝典3
1. 什么是 NIO
- 原理
- 缓冲区(Buffer):
- 它是一个线性的、有限的基本数据元素序列,本质上是一块内存区域,被包装成了一个对象,以便于进行高效的数据读写操作。不同类型的基本数据都有对应的
Buffer
子类,如ByteBuffer
、IntBuffer
等。 Buffer
有三个重要属性:capacity
(容量)、position
(位置)和limit
(界限)。capacity
表示缓冲区的最大容量;position
指示下一个要读写的元素的位置;limit
表示缓冲区中可以读写的元素的上限。在读写操作过程中,这些属性会动态变化。
- 它是一个线性的、有限的基本数据元素序列,本质上是一块内存区域,被包装成了一个对象,以便于进行高效的数据读写操作。不同类型的基本数据都有对应的
- 通道(Channel):
- 通道是双向的,既可以进行读操作,也可以进行写操作,这与传统的流(
Stream
)不同,流通常是单向的(输入流或输出流)。 - 通道可以与多种数据源进行连接,如文件、网络套接字等。例如,
FileChannel
用于文件的读写,SocketChannel
用于网络套接字的读写。
- 通道是双向的,既可以进行读操作,也可以进行写操作,这与传统的流(
- 选择器(Selector):
- 选择器可以让一个线程同时监听多个通道的事件。它通过
Selector
对象的select()
方法来检查是否有通道发生了感兴趣的事件(如读就绪、写就绪等)。 - 当有事件发生时,
select()
方法会返回发生事件的通道的数量,然后可以通过selectedKeys()
方法获取发生事件的通道的SelectionKey
集合,进而处理这些通道的事件。
- 选择器可以让一个线程同时监听多个通道的事件。它通过
- 要点
- 非阻塞 I/O 模型使得一个线程可以处理多个连接,大大提高了系统的并发处理能力和资源利用率。
- 基于缓冲区和通道的操作方式,减少了数据的复制次数,提高了数据传输效率。
- 适用于构建高性能的网络服务器,如 HTTP 服务器、即时通讯服务器等。
- 应用
- NIO.2 引入了异步 I/O 操作,通过
AsynchronousFileChannel
和AsynchronousSocketChannel
等类,实现了真正的异步文件和网络 I/O,进一步提高了系统的性能和响应速度。 - 在实际应用中,Netty 框架是基于 Java NIO 构建的高性能网络编程框架,它简化了 NIO 编程的复杂性,提供了更强大的功能和更好的性能。
2. 什么是 ThreadLocal
- 原理
ThreadLocal
内部维护的ThreadLocalMap
是一个自定义的哈希表,它的键是ThreadLocal
对象的弱引用。当ThreadLocal
对象没有其他强引用时,垃圾回收器会自动回收该对象,从而避免了内存泄漏的风险。- 每个
Thread
对象都有一个ThreadLocalMap
实例,当调用ThreadLocal
的set()
方法时,会首先获取当前线程的ThreadLocalMap
,如果ThreadLocalMap
为空,则会创建一个新的ThreadLocalMap
,并将当前ThreadLocal
对象作为键,要存储的值作为值存储到ThreadLocalMap
中;当调用get()
方法时,会从当前线程的ThreadLocalMap
中获取对应的值。
- 要点
- 为每个线程提供独立的变量副本,避免了多线程之间的变量共享问题,提高了代码的线程安全性。
- 常用于存储与线程相关的上下文信息,如数据库连接、用户会话信息等。
- 应用
- 在使用
ThreadLocal
时,需要注意内存泄漏问题。除了及时调用remove()
方法清除数据外,还可以使用弱引用的ThreadLocal
对象,让垃圾回收器自动回收不再使用的ThreadLocal
对象。 - 在 Java 8 中,
ThreadLocal
提供了withInitial()
方法,用于创建一个带有初始值的ThreadLocal
对象,简化了ThreadLocal
的使用。
3. 什么是 finalize, finalization, finally,有什么区别
- 原理
- finalize:
Object
类中的finalize()
方法是一个受保护的方法,当垃圾回收器确定对象没有任何引用时,会在回收对象之前调用该对象的finalize()
方法。finalize()
方法的目的是让对象在被回收之前有机会进行一些资源清理工作,如关闭文件、释放数据库连接等。 - finalization:指的是对象的终结过程,包括垃圾回收器标记对象为可回收对象、调用对象的
finalize()
方法(如果有的话)以及回收对象占用的内存。 - finally:
finally
是 Java 中的一个关键字,用于try-catch
语句块中。无论try
块中的代码是否抛出异常,finally
块中的代码都会被执行。这是因为finally
块的执行是由 Java 虚拟机(JVM)保证的,即使在try
或catch
块中使用了return
、break
或continue
语句,finally
块中的代码也会在这些语句执行之前被执行。
- 要点
finalize
方法的执行时间不确定,且不保证一定会被调用,因此不建议依赖它进行资源清理。finalization
是对象的整个终结过程,包括多个步骤。finally
用于确保某些代码一定会被执行,常用于资源的释放,如关闭文件、释放数据库连接等。
- 应用
- 在 Java 7 及以后的版本中,引入了
try-with-resources
语句,它可以自动关闭实现了AutoCloseable
接口的资源,进一步简化了资源管理的代码。 - 由于
finalize()
方法的性能开销较大,且可能导致内存泄漏,从 Java 9 开始,finalize()
方法被标记为@Deprecated
,建议使用其他方式进行资源清理。
4. 什么是 Object
- 原理
- 在 Java 中,所有的类都直接或间接地继承自
Object
类。这意味着所有的类都可以使用Object
类中定义的方法,如equals()
、hashCode()
、toString()
、clone()
等。 - 当创建一个对象时,该对象会自动继承
Object
类的所有方法和属性。如果子类没有重写这些方法,则会使用Object
类中默认的实现。
- 要点
Object
类是 Java 类层次结构的根,为所有类提供了一些通用的方法,这些方法是 Java 面向对象编程的基础。- 可以将任何类型的对象赋值给
Object
类型的变量,这体现了 Java 的多态性。
- 应用
- 在实际开发中,经常需要重写
Object
类的一些方法,以满足特定的业务需求。例如,重写equals()
方法可以实现对象内容的比较,重写toString()
方法可以方便地输出对象的信息。 Object
类的clone()
方法用于创建对象的副本,但默认的clone()
方法是浅克隆,即只复制对象的基本数据类型和引用,而不复制引用指向的对象。如果需要深克隆,则需要在子类中重写clone()
方法。
5. equals 和 == 的区别
- 原理
- ==:对于基本数据类型,
==
比较的是两个变量的值是否相等;对于引用数据类型,==
比较的是两个对象的引用是否相等,即它们是否指向同一个内存地址。 - equals:在
Object
类中,equals()
方法的默认实现是比较两个对象的引用是否相等,与==
的作用相同。但很多类(如String
、Integer
等)会重写equals()
方法,以实现自定义的内容比较逻辑。例如,String
类的equals()
方法会比较两个字符串的内容是否相等。
- 要点
==
比较的是对象的引用或基本数据类型的值,而equals()
比较的是对象的内容。- 在比较对象时,应该根据具体需求选择使用
==
还是equals()
方法。
- 应用
- 在重写
equals()
方法时,通常需要遵循以下几个原则:自反性、对称性、传递性、一致性和非空性。 - 重写
equals()
方法时,通常也需要重写hashCode()
方法,以保证相等的对象具有相同的哈希码,这在使用哈希表(如HashMap
、HashSet
等)时非常重要。
6. 什么是 public, private, default, protected,有什么区别
- 原理
- public:被
public
修饰的类、方法和变量可以被任何其他类访问,无论这些类是否在同一个包中。 - private:被
private
修饰的类、方法和变量只能在其所在的类内部访问,其他类无法直接访问。 - default:当没有使用任何访问修饰符时,默认就是
default
权限。被default
修饰的类、方法和变量只能在其所在的包内访问,不同包的类无法访问。 - protected:被
protected
修饰的类、方法和变量可以在其所在的包内访问,也可以在不同包的子类中访问。在不同包的子类中,可以通过子类对象访问父类的protected
成员。
- 要点
public
的访问权限最大,private
的访问权限最小。default
和protected
的区别在于,protected
允许不同包的子类访问。
- 应用
- 合理使用访问修饰符可以提高代码的封装性和安全性,隐藏类的实现细节,只暴露必要的接口给外部使用。
- 在设计类和接口时,应该根据类和成员的使用场景和安全性要求,选择合适的访问修饰符。
7. 什么是异常
- 原理
- 在 Java 中,异常是指程序在运行过程中出现的错误或意外情况,它会导致程序的正常执行流程被打断。Java 中的异常是通过异常类来表示的,所有的异常类都继承自
Throwable
类。 Throwable
类有两个重要的子类:Error
和Exception
。Error
表示系统级的错误,如内存溢出(OutOfMemoryError
)、栈溢出(StackOverflowError
)等,这些错误通常是不可恢复的,程序无法处理;Exception
表示程序可以处理的异常,又分为检查异常(Checked Exception)和非检查异常(Unchecked Exception)。
- 要点
- 异常分为检查异常和非检查异常。检查异常必须在方法的声明中使用
throws
关键字声明,或者在方法内部使用try-catch
语句进行处理;非检查异常(如RuntimeException
及其子类)不需要进行声明或处理。 - 异常处理可以提高程序的健壮性,避免程序因意外情况而崩溃。
- 应用
- Java 中提供了
try-catch
、try-with-resources
、throws
和throw
等关键字来进行异常的捕获、处理和抛出。在实际开发中,应该根据具体情况选择合适的异常处理方式。 - 自定义异常类可以继承自
Exception
或RuntimeException
,用于表示特定的业务异常,提高代码的可读性和可维护性。
8. 什么是 Comparable 接口和 Comparator 接口
- 原理
- Comparable 接口:该接口只有一个
compareTo()
方法,用于定义对象的自然排序规则。实现了Comparable
接口的类的对象可以进行比较和排序。compareTo()
方法返回一个整数值,如果返回值小于 0,表示当前对象小于参数对象;如果返回值等于 0,表示当前对象等于参数对象;如果返回值大于 0,表示当前对象大于参数对象。 - Comparator 接口:该接口有多个方法,常用的是
compare()
方法,用于定义对象的自定义排序规则。Comparator
接口可以在不修改对象类的情况下,为对象提供不同的排序方式。compare()
方法的返回值规则与compareTo()
方法相同。
- 要点
Comparable
接口是类内部的排序规则,而Comparator
接口是类外部的排序规则。- 当需要对对象进行排序时,可以根据具体情况选择使用
Comparable
接口或Comparator
接口。
- 应用
- 在使用
Collections.sort()
或Arrays.sort()
方法对对象进行排序时,如果对象类实现了Comparable
接口,则可以直接进行排序;如果需要自定义排序规则,则可以传入一个Comparator
对象。 Comparator
接口还提供了一些静态方法,如comparing()
、thenComparing()
等,用于方便地创建和组合比较器。
9. 什么是接口和抽象类
- 原理
- 接口:是一种抽象类型,它定义了一组方法的签名,但没有提供方法的实现。接口中的方法默认是
public abstract
的,变量默认是public static final
的。一个类可以实现多个接口,通过实现接口中的方法来满足接口的规范。 - 抽象类:是一种不能被实例化的类,它可以包含抽象方法(只有方法签名,没有方法体)和具体方法。抽象类的主要作用是为子类提供一个通用的模板,子类必须实现抽象类中的抽象方法,同时可以继承抽象类中的具体方法。
- 要点
- 接口强调的是行为的规范,而抽象类强调的是类的抽象和继承。
- 接口用于实现多继承的效果,而抽象类用于代码的复用和扩展。
- 应用
- 在 Java 8 及以后的版本中,接口可以包含默认方法和静态方法,默认方法提供了方法的默认实现,静态方法可以通过接口名直接调用。
- 在设计类和接口时,应该根据具体需求选择使用接口还是抽象类。如果需要定义一组规范,让不同的类去实现,并且类之间没有太多的代码复用,可以使用接口;如果需要对一些类进行抽象和复用代码,可以使用抽象类。
10. 什么是 Socket
- 原理
- 客户端(Socket):通过创建
Socket
对象,指定服务器的 IP 地址和端口号,与服务器建立连接。连接建立后,就可以通过Socket
的输入输出流进行数据的读写操作。Socket
的输入流用于接收服务器发送的数据,输出流用于向服务器发送数据。 - 服务器端(ServerSocket):通过创建
ServerSocket
对象,指定监听的端口号,等待客户端的连接请求。当有客户端连接时,ServerSocket
会返回一个Socket
对象,用于与客户端进行通信。服务器端可以通过该Socket
对象的输入输出流与客户端进行数据的读写操作。
- 要点
Socket
是基于 TCP 协议的,提供可靠的、面向连接的通信。- 适用于需要确保数据准确传输的场景,如文件传输、邮件发送等。
- 应用
- 除了基于 TCP 协议的
Socket
,Java 还提供了基于 UDP 协议的DatagramSocket
和DatagramPacket
类,用于实现无连接的、不可靠的网络通信,适用于对实时性要求较高、对数据准确性要求较低的场景,如视频直播、实时游戏等。 - 在实际应用中,为了提高网络通信的性能和可扩展性,可以使用线程池来处理多个客户端的连接请求,避免创建过多的线程导致系统资源耗尽。
友情提示:本文已经整理成文档,可以到如下链接免积分下载阅读
https://download.csdn.net/download/ylfhpy/90496058
相关文章:
Java面试黄金宝典3
1. 什么是 NIO 原理 缓冲区(Buffer): 它是一个线性的、有限的基本数据元素序列,本质上是一块内存区域,被包装成了一个对象,以便于进行高效的数据读写操作。不同类型的基本数据都有对应的Buffer子类…...
vue3 报错 Could not find a declaration file for module ‘/App.vue‘
vue3 报错 Could not find a declaration file for module /App.vue.app.vue路径.js implicitly has an any type 问题描述原因分析:解决方案: 问题描述 Could not find a declaration file for module /App.vue.app.vue路径.js implicitly has an any …...
linux对串口设备文件进行重命名(删除、重建)
0.前言 最近在弄3562的自制板,有很多串口,然后发现设备文件名编号有些跳跃,不方便用户使用,因此,需要对这些设备文件进行重命名 1.查看设备号 我们需要知道目标设备文件的设备号,通过ls -l /dev/tty*查看…...
Linux内核传输层UDP源码分析
一、用户数据包协议(UDP) 1.UDP数据报头 UDP 提供面向消息的不可靠传输,但没有拥塞控制功能。很多协议都使用 UDP,如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol,RTP),此类型…...
GitHub 超火的开源终端工具——Warp
Warp 作为近年来 GitHub 上备受瞩目的开源终端工具,以其智能化、高性能和协作能力重新定义了命令行操作体验。以下从多个维度深入解析其核心特性、技术架构、用户评价及生态影响力: 一、背景与核心团队 Warp 由前 GitHub CTO Jason Warner 和 Google 前…...
【Java基础巩固系列】异常
业务背景 业务开发中,总会遇到代码出现异常的情况,不合理的异常处理或不处理异常除了影响业务功能和中断业务功能外,还会增加排查问题的难度。所以我们要学会正确的使用异常处理。合理的异常处理能减少很多潜在的问题,是提高代码…...
sass介绍
1、Sass简介 Sass 是一种 CSS 的预编译语言。它提供了 变量(variables)、嵌套(nested rules)、 混合(mixins)、 函数(functions)等功能,并且完全兼容 CSS 语法。Sass 能…...
第1章:云原生时代:容器技术的发展历程与核心价值
第1章:云原生时代:容器技术的发展历程与核心价值 作者:DogDog_Shuai 阅读时间:约15分钟 难度:入门级 目录 1. 引言2. 容器技术的发展历程3. 容器技术的核心价值4. 云原生时代的机遇与挑战5. 总结1. 引言...
软考程序员考试知识点汇总
软考程序员考试(初级资格)主要考察计算机基础理论、编程能力及软件开发相关知识。以下是核心知识点总结及备考建议: 一、计算机基础 数制与编码 二进制、八进制、十进制、十六进制转换原码、反码、补码表示(整数与浮点数…...
JVM OOM问题如何排查和解决
在 Java 开发中,JVM OOM(OutOfMemoryError)问题通常是指程序运行时,JVM 无法为对象分配足够的内存空间,导致发生内存溢出的错误。这个问题往往和内存的配置、内存泄漏、或者资源过度使用等因素有关。 1. OOM 错误类型…...
折叠树报表
折叠树报表中包含了三种信息: 1.树组织信息-可展开、收拢 2.节点的统计信息(汇总求和) 3.每个节点对应的数据信息 一、准备数据 mysql8 数据库中存在两张表 org和store表。 org表和部分数据如下,其中orgname是组织的名称,codepath是完整的组织代码,seq是每个节点的顺序,可…...
python 数据可视化matplotib库安装与使用
要使用 matplotlib 库进行数据可视化,首先你需要确保已经安装了该库。如果你还没有安装,可以通过 Python 的包管理器 pip 来安装它。在你的命令行工具中运行以下命令来安装 matplotlib: pip install matplotlib安装完成后,你就可以…...
Springdoc配置参数详解
文章目录 **1. 基础配置****API 文档路径-springdoc.api-docs.path****Swagger UI 路径-springdoc.swagger-ui.path****是否启用 API 文档-springdoc.api-docs.enabled****是否启用 Swagger UI-springdoc.swagger-ui.enabled** **2. 全局元信息-info****应用标题-springdoc.inf…...
抖音视频数据获取实战:从API调用到热门内容挖掘
在短视频流量为王的时代,掌握抖音热门视频数据已成为内容运营、竞品分析及营销决策的关键。本文将手把手教你通过抖音开放平台API获取视频详情数据,并提供完整的代码实现及商业化应用思路。 一、抖音API权限申请与核心接口 抖音API需企业资质认证&…...
【数学建模】灰色关联分析模型详解与应用
灰色关联分析模型详解与应用 文章目录 灰色关联分析模型详解与应用引言灰色系统理论简介灰色关联分析基本原理灰色关联分析计算步骤1. 确定分析序列2. 数据无量纲化处理3. 计算关联系数4. 计算关联度 灰色关联分析应用实例实例:某企业生产效率影响因素分析 灰色关联…...
Spring Boot 与 Couchbase 整合教程
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 与 Couchbase 整合教程 环境要求 JDK 8Spring Boot 2.7.xCouchbase Server 7.xMaven/Gradle 步骤 1:创建Spring Boot项目 使用 st…...
Oracle ASM Failgroup故障组
Oracle ASM Failgroup故障组 1. 故障组的核心作用2. 故障组的配置规则3. 故障组的设计最佳实践4. 故障组的实际示例场景1:普通冗余(2个故障组)场景2:高冗余(3个故障组,跨数据中心) 关键注意事项…...
深度学习框架PyTorch——从入门到精通(2)张量
又名:张亮的一生~~ 张量(Tensors)初始化张量张量的属性张量上的操作与NumPy桥接 张量(Tensors) 张量是一种专门的数据结构,类似Python中的数组或者矩阵。在Torch中,我们使用张量来编码模型的输…...
pytorch小记(十三):pytorch中`nn.ModuleList` 详解
pytorch小记(十三):pytorch中nn.ModuleList 详解 PyTorch 中的 nn.ModuleList 详解1. 什么是 nn.ModuleList?2. 为什么不直接使用普通的 Python 列表?3. nn.ModuleList 的基本用法示例:构建一个包含两层全连…...
C语言-动态内存管理
1.为什么要有动态内存分配 我们现如今已经掌握的内存开辟方式有 int main() {int a 0;int arr[30] { 0 };return 0; } 这两种方式,但是这种开辟空间的方式有两个特点: 1.空间开辟大小是固定的 2.数组在申明的时候,必须指定数组的长度&…...
深入解析MySQL数据库分库分表技术
友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。 随着互联网应用的快速发展,单一数据库在面对大规模数据时可能会遇到性能瓶颈。因此,数据库分库分表作为一种…...
【Embedded World 2025:边缘 AI、存储革新与 1X nm 工艺重塑嵌入式未来】
Embedded World 2025于3月11-13日在德国纽伦堡举办,作为全球嵌入式系统领域顶级盛会,汇聚超千家展商与3万专业观众,聚焦嵌入式智能、安全管理及行业解决方案。展会呈现边缘AI、低功耗MCU、5G RedCap、新型存储及车规级技术等前沿方向…...
【人工智能基础2】机器学习、深度学习总结
文章目录 一、人工智能关键技术二、机器学习基础1. 监督、无监督、半监督学习2. 损失函数:四种损失函数3. 泛化与交叉验证4. 过拟合与欠拟合5. 正则化6. 支持向量机 三、深度学习基础:深度神经网络1、概念与原理2、多层神经网络训练方法 一、人工智能关键…...
MySQL如何存储表情符号?
存储表情符号 默认mysql的字符集是utf8,排序规则为 utf8_general_ci INSERT INTO department (name) VALUES (😄)在存储表情的时候会报 1366 - Incorrect string value: \xF0\x9F\x98\x84 for column name at row 1, Time: 0.007000s 这时需要修改字符…...
Unity Shader 学习16:全局光照 概念理解
- 全局光照 直接光 间接光,在没有开启GI的情况下是不计算间接光的(如果放了光照探针 倒是可以模拟间接光 <光照探针只影响动态物体>); - 处理对象:静态物体(static) 、 非静态(动态)物体; - 计算方…...
Jobby、Quarkus 和 Spring Boot对比
Jobby、Quarkus 和 Spring Boot 是三种不同的 Java 框架,各自有不同的设计目标和适用场景。以下是对它们的详细对比: 1. 设计目标 框架设计目标Jobby轻量级的任务调度框架,专注于任务调度和执行。Quarkus面向云原生和 Kubernetes 的 Java 框…...
Dubbo 服务发现
总览 学习 Dubbo 的服务发现机制,可以从以下几方面入手: 注册中心的配置服务的注册客户端拉取服务列表服务列表的本地缓存服务提供者列表变更的监听机制服务发现的接口设计 注册中心的配置 Dubbo 通过解析用户配置决定使用的注册中心。比如用户配置了…...
Pytorch使用手册—自定义 C++ 和 CUDA 运算符(专题五十一)
你将学到什么 如何将用 C++/CUDA 编写的自定义运算符与 PyTorch 集成如何使用 torch.library.opcheck 测试自定义运算符先决条件 1. PyTorch 2.4 或更高版本 2. 对 C++ 和 CUDA 编程有基本了解 注意 本教程也适用于 AMD ROCm,无需额外修改。 PyTorch 提供了一个庞大的运算符库…...
Linux 实时同步服务实现(Rsync 结合 Inotify)
文章目录 1. 实时同步服务介绍2. Inotify 机制介绍3. Inotify-toolRsync 实时同步实践3.1 确认远程数据传输服务部署完成3.2 检查Linux系统是否支持Inotify实时监控3.3 安装inotify-tools3.4 命令测试3.5 重要监控事件汇总3.6 使用步骤 4. Sersync 工具使用(重点&am…...
用Java写斗地主前期工作的一些小想法
目前我们并不是要实现一个游戏,而是要对斗地主游戏做准备,主要是做牌+洗牌+发牌+给发的牌进行排序。在这个过程中我希望通过集中方式来实现: 1. 使用集合+方法+字符串的运用完成以上功能 2. 使用面向对象思想,对1做改进,主要是对其排序的改进,从而理解面向对象的真正意…...
鸿蒙数据持久化之首选项
场景介绍 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取…...
将bin文件烧录到STM32
将bin文件烧录到STM32 CoFlash下载生成hex文件hex2bin使用下载bin到单片机 CoFlash下载 选择需要安装的目录 在Config中可以选择目标芯片的类型 我演示的是 stm32f103c8t6 最小系统板 Adapter:烧录器类型 Max Clock:下载速度 Por:接口类型&am…...
AtCoder Beginner Contest 397(ABCDE)
目录 A - Thermometer 翻译: 思路: 实现: B - Ticket Gate Log 翻译: 思路: 实现: C - Variety Split Easy 翻译: 思路: 实现: D - Cubes 翻译:…...
jasypt-spring-boot-starter项目如何使用jasypt加密密码
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.iv.RandomIvGenerator; import org.jasypt.salt.RandomSaltGenerator;/*** 加密密码的工具** author xxx* since 2025-03-17*/ public class JasyptTest {public static void main(String[] a…...
[AI速读]混合语言IP集成:挑战与高效解决方案
在现代SoC(系统级芯片)设计中,IP(知识产权模块)复用是提升开发效率的关键。然而,当设计涉及多种硬件描述语言(如SystemVerilog、VHDL、SystemC)时,如何高效集成不同语言的IP模块成为一大难题。本文将从实际设计场景出发,探讨混合语言IP集成的核心挑战,并介绍一套方法…...
SpringSecurity——如何获取当前登录用户的信息
目录 1. 直接注入 Principal 2. 直接注入 Authentication 3. 注入 UsernamePasswordAuthenticationToken 4. 通过 SecurityContextHolder 获取 5. 使用自定义工具方法 总结 如何获取更多的用户信息 自定义用户实体类 如何忽略某些字段(不返回前端ÿ…...
ospf动态路由
一、为什么使用动态路由 OSPF(open shortest path first开放最短路径优先)是内部网关协议(IGP)的一种,基于链路状态算法(LS)。 OSPF企业级路由协议(RFC2328 OSPFv2),核心重点协议 OSPF共三个版本,OSPFV1主要是实验室…...
在react当中利用IntersectionObserve实现下拉加载数据
目录 一、传统的下拉加载方案 二、存在问题 1.性能较差 2.不够精确 三、IntersectionObserve版本下拉加载 1、callback 2、options 四、IntersectionObserver实例 1、Intersection的优势 2、实现思路 3、代码实现 在进行前端开发的过程中,常常会碰到下拉…...
SpringBoot之如何集成SpringDoc最详细文档
文章目录 一、概念解释1、OpenAPI2、Swagger3、Springfox4、Springdoc5. 关系与区别 二、SpringDoc基本使用1、导包2、正常编写代码,不需要任何注解3、运行后访问下面的链接即可 三、SpringDoc进阶使用1、配置文档信息2、配置文档分组3、springdoc的配置参数**1. 基…...
Transaction rolled back because it has been marked as rollback-only问题解决
transaction rolled back because it has been marked as rollback-only 简略总结> 发生场景:try-catch多业务场景 发生原因:业务嵌套,事务管理混乱,外层业务与内层业务抛出异常节点与回滚节点不一致。 解决方式:修…...
单片机写的小液晶屏驱动+汉字滚屏
单片机写的小液晶屏驱动汉字滚屏 stm32f401freertos内置HZK16 单片机汉字滚屏...
SpringBoot整合LangChain4j操作AI大模型实战详解
一、引言 在当今这个人工智能飞速发展的时代,AI大模型已经逐渐渗透到我们生活的方方面面,为企业和开发者带来了前所未有的机遇。然而,如何高效地接入并利用这些AI大模型,成为了摆在许多开发者面前的一道难题。SpringBoot作为一款…...
深度解析 | Android 13 Launcher3分页指示器改造:横线变圆点实战指南
一、需求背景与技术挑战 在Android 13系统定制开发中,我们面临将Launcher3桌面从传统双层架构优化为现代单层布局的挑战。原生系统采用的分页横线指示器在视觉呈现上存在两点不足: 风格陈旧不符合Material You设计规范 空间占用较大影响屏幕利用率 通…...
【Qt】private槽函数可以被其他类中的信号连接
private槽函数可以被其他类中的信号连接。 即使 B 类的槽函数是 private 的,A 类通过信号连接 B 类的槽函数也没有问题。这是因为 Qt 的信号和槽机制是通过元对象系统(Meta-Object System)实现的,而不是直接调用函数。只要信号和…...
C语言每日一练——day_7
引言 针对初学者,每日练习几个题,快速上手C语言。第七天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…...
Python --**kwargs
在 Python 中,**kwargs 是一个特殊语法,用于在函数定义中接收任意数量的关键字参数(即键值对参数),并将这些参数以字典形式存储。它是 Python 中处理动态参数的强大工具,适用于需要灵活传递参数的场景。 1.…...
网络编程之客户端通过服务器与另外一个客户端交流
服务器使用select模型搭建,客户端1使用线程搭建,客户端2使用poll模型搭建, 使用时需要先运行服务器,具体编译可看我最后的图片 head.h头文件 #ifndef __HEAD_H_ #define __HEAD_H_ #include <stdio.h> #include <string…...
mybatis集合映射association与collection
官方文档:MyBatis的一对多关联关系 一、用途 一对一:association 一对多:collection 二、association 比较容易理解,可参考官方文档 三、collection <?xml version"1.0" encoding"UTF-8"?> &l…...
windows克隆项目找不到,修改git bash中存储的账号密码
git clone项目找不到,提示:remote: The project you were looking for could not be found. 有可能是地址错误、没有权限、账号密码错误 1.地址错误 从新检查git地址,确保地址是正确的。 2.没有权限 确保你有访问该项目的权限 3.账号密码…...
Linux中安装redis
Redis的安装包,从官方下载下来的是c语言的源码包,我们需要自己编译安装。具体操作步骤如下: 安装redis 上传redis资源包 安装C语言的编译环境 gcc yum install -y gcc-c 解压redis源码在当前目录 tar -zxvf redis-6.2.4.tar.gz 进入解压目录…...