spring6-bean的生命周期与循环依赖
bean的生命周期
粗略划分5步
实例化bean
调用的是无参数的构造方法
bean属性赋值
执行set注入
初始化bean
调用bean的init()方法,需要自己写,自己配
使用bean
销毁bean
调用bean的destroy(),需要自己写,自己配
注意:自定义的init()和destroy()需要在配置文件配置
<!-- init-method指定初始化方 ...
一种多选项的高效存取(存储、查询)解决方案
本文主要内容
对于多选项的值,如何保存?本文提供了一种非常规的方案。
对于记录在数据库中的多选项的值,如何快速查询那些记录是包含了某个(某些)选项?本文使用了“与位运算”解决查询问题。
源码地址:https://github.com/HackyleShawe/JavaBackEndDemos/tree/master/BusinessCommonSolution/multi-options-storage- ...
剑指offer-71、剪绳子(进阶版)
题⽬描述
给你⼀根⻓度为 n 的绳⼦,请把绳⼦剪成整数⻓的 m 段( m 、 n 都是整数, n > 1 并且 m >
1 , m <= n ),每段绳⼦的⻓度记为 k[1] ,..., k[m] 。请问 k[1] * k[2] * ... * k[m] 可能的最⼤乘积是多少?例如,当绳⼦的⻓度是 8 时,我们把它剪成⻓度分别为 2 、3 、3 的三段,此时得到的最⼤乘积是 18 。
由于 ...
Java中的数据类型
Java 数据类型详解
目录
数据类型分类
基本数据类型
引用类型
基本类型 vs 引用类型
包装类
String 详解
字符串常量池
内存布局
对象生命周期
常见问题
数据类型分类
Java 数据类型
├── 基本类型(8种)
│ ├── 整数类型:byte, short, int, long
│ ├── 浮点类型:float, double
│ ├── 字符类型:ch ...
线程如何停止?线程之间如何协作?线程之间的异常如何处理?
线程停止
stop方法
stop 方法虽然可以停止线程,但它已经是不建议使用的废弃方法了,这一点可以通过 Thread 类中的源码发现,stop 源码如下:
stop 方法是被 @Deprecated 修饰的不建议使用的过期方法,并且在注释的第一句话就说明了 stop 方法为非安全的方法。
原因在于它在终止一个线程时会强制中断线程的执行,不管run方 ...
收入写RAFT算法(一)Leader选举
Raft Leader 选举实现文档
目录
1. 概述
2. 核心概念
3. 涉及的类及其职责
4. 实现细节
4.1 节点状态与转换
4.2 选举超时机制
4.3 投票请求处理
4.4 选举发起流程
4.5 投票响应处理
4.6 心跳机制
4.7 安全性保证
5. 测试指南
6. 使用示例
7. 常见问题
1. 概述
1.1 目的
本文档详细说明了 LingRaft-Lite 模块中 Raft L ...
keycloak~分布式部署中会话过期清理机制
Keycloak 分布式部署中会话过期清理机制
在 Keycloak 分布式部署(使用外部独立部署的 Infinispan)的架构下,sessions 和 clientSessions 的过期清理涉及两种不同的部署模式,机制略有不同:
架构模式 1:Embedded + Remote Store(嵌入式缓存 + 远程存储)
这种模式下,Keycloak 节点有本地嵌入式缓存,同时配置了远程存 ...
BlockingQueue:阻塞操作与条件队列的高效结合
BlockingQueue和BlockingDeque
BlockingQueue
BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的阐述:
一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue。
一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。也就是说,它是有 ...
剑指offer-70、把数字翻译成为字符串
题⽬描述
有⼀种将字⺟编码成数字的⽅式:'a'->1, 'b->2', ... , 'z->26'。
现在给⼀串数字,返回有多少种可能的译码结果
示例1
输⼊:"12"
返回值:2
说明:2种可能的译码结果(”ab” 或”l”)
示例2
输⼊:"31717126241541717"
返回值:192
说明:192种可能的译码结果
仔细观察,就会发现上⾯的编码从 1 到 26,也就是 ...
Mac电脑上传ZIP图片压缩包时垃圾文件清理问题解决
问题解决记录:Mac系统上传目录时的垃圾文件清理
问题背景
在上传图片系统中,当用户使用苹果本(Mac)压缩并上传目录时,系统出现异常。经过排查发现,Mac 系统在压缩时会自动生成大量隐藏文件和元数据目录,这些"垃圾文件"在解压后会干扰系统的正常业务逻辑。
Mac 系统自动生成的垃圾文件包括:
.DS_Store - 存储文件夹 ...
剑指offer-69、数字序列中某⼀位的数字
题⽬描述
数字以 0123456789101112131415... 的格式作为⼀个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
示例1
输⼊:0
返回值:0
示例2
输⼊:2
返回值:2
示例3
输⼊:13
返回值:1
思路及解答
暴力法
通过逐步构造数字序列来找到第 ...
剑指offer-68、调整数组顺序使奇数位于偶数前⾯(⼆)
题⽬描述
输⼊⼀个⻓度为 n 整数数组,数组⾥⾯可能含有相同的元素,实现⼀个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前⾯部分,所有的偶数位于数组的后⾯部分,对奇数和奇数,偶数和偶数之间的相对位置不做要求,但是时间复杂度和空间复杂度必须如下要求。
数据范围:0 ≤ n ≤ 50000,数组中每个数的值 0 ...
wso2~通过三方IDP的token置换wso2的token
参数:https://datatracker.ietf.org/doc/html/rfc7523
oauth2.0中的三方另类授权
了解OAuth 2.0中特定的授权类型(Grant Type)对于构建安全的认证流程至关重要。下面为你详细介绍这三种基于URN声明的扩展授权类型。
🔐 设备代码授权 (urn:ietf:paramsauth:grant-type:device_code)
这种授权模式专为输入能力受限或没有浏 ...
CopyOnWriteArrayList:写时复制机制与高效并发访问
前言
Vector无论是add方法还是get方法都加上了synchronized修饰,当多线程读写List必须排队执行,很显然这样效率比较是低下的,CopyOnWriteArrayList是读写分离的,好处是提高线程访问效率。
CopyOnWrite容器即写时复制的容器。通俗的理解是当往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器里的值Copy ...
JAVA自学之路1.1:JAVA入门纠错
1.1、JAVA入门纠错
在JAVA入门这篇文章里有些问题和错误需要纠正,懒得再改那篇文章了,直接写在这好了。
package test.test1;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
在之前的文章里,我将HelloWorld.java文件放在了E盘根目录下 ...
java研发工程师必知必会
java作为一种跨平台、面向对象的编程语言,广泛应用于企业级Web开发和移动应用开发。其核心特性包括可移植性(一次编写,到处运行)、安全性、分布式支持以及泛型编程能力。又因其简单易学深受广大程序员所喜爱。自1995年推出以来,语言也经历了多次的迭代更新,而对于一些较早接触该语言的老程序员来说,对一些新特征甚至 ...
Spring AI学习:工具调用实践(基于和风天气api)
工具调用总体实现:
设计工具类:
@Component
public class WeatherInquiryTools {
@Autowired
private WeatherService weatherService;
@Tool(description = "根据城市名称查询城市LocationID")
public String getLocationId(@ToolParam(description = "城市名称") String cityName){
return w ...
Queue & Stack:实现机制与使用场景深度分析
为什么不推荐使用Stack
Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque
为什么不推荐使用
性能低:是因为 Stack 继承自 Vector, 而 Vector 在每个方法中都加了锁。由于需要兼容老的项目,很难在原有的基础上进行优化,因此 Vector 就被淘汰掉了,使用 ArrayList 和 CopyOnWriteArrayList 来代替,如果在非线程 ...
Spring AI学习:配置redis向量数据库&RAG实践
配置redis向量数据库:
配置依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-redis</artifactId>
</dependency>
配置redis数据库属性:
RAG实践:
使用spring ai提供的环绕增强(advisor)功能实现RAG。
配置依赖:
<depen ...
一个月搞定100+表迁移:我的“偷师”Navicat实战复盘
个人声明:本文所有代码示例均已脱敏处理,仅保留核心技术逻辑,不涉及任何敏感业务信息。
前情提要:一个堪称"社死"的工期
还记得那天,老板把我叫到办公室,递过来一份需求文档:"下个月要把项目迁移到新平台,数据这块你来搞定。"
我打开文档,扫了一眼,差点当场石化:
需求清单:
100+张数据表要迁移(还要支持后 ...