自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Ai智能文件分类器demo

收集数据:准备不同类别的文件(如文档、图片、代码等)作为训练数据。特征提取:从文件中提取特征(如文件扩展名、大小、内容关键词等)。文件夹操作,设计一个项目:使用机器学习对文件进行自动分类。训练模型:使用机器学习算法训练分类模型。预测新文件:使用模型对新文件进行分类。

2025-09-23 22:17:00 211

原创 为什么要为 Kafka 增加一个 Wrapper

Wrapper”(包装器),顾名思义,就是用一个东西把另一个东西包起来。在编程中,它指的是创建一个新的接口、类或层,将现有复杂系统或库的功能封装起来,对外提供更简单、统一、易用的访问方式。你不直接调用复杂的原始库(比如 Kafka 客户端),而是调用你自己写的一个“包装”过后的、更好用的工具类。它是一种设计模式的应用(外观模式、适配器模式),其核心目的是:封装:将 Kafka 客户端的复杂细节隐藏起来。抽象:提供一个更简单、更符合业务语义的接口(例如而不是泛泛的send增强。

2025-09-16 19:17:00 926

原创 Java生态中的AI应用开发

与多种LLM(OpenAI, Azure, Local...)集成、模板管理、记忆管理、智能体(Agent)构建、文档加载与切割(RAG核心)。(8.0+支持向量搜索)等向量数据库,实现RAG(检索增强生成)架构,这是解决大模型幻觉和知识滞后问题的关键。:在IDE中,尝试将AI助手作为第一咨询对象,然后再去搜索引擎验证,这会极大缩短查找解决方案的时间。:让AI机器人可以调用外部API,例如“查询天气”、“下订单”等,实现自动化智能体。:将用户问题向量化,并在向量库中执行相似性搜索,找到最相关的文档片段。

2025-09-15 23:33:24 1040 1

原创 分析数据库表设计考量方案

如果数据量极大,可以提一句“如果数据量未来会非常大,在设计初期我就会考虑好分库分表的方案,比如选择一个合理的分片键(如。:已过时,基本不再使用。:分析该实体有哪些属性,它与其他实体之间的关系(一对一、一对多、多对多)。:首先会考虑满足第三范式(3NF),以减少数据冗余,保证数据一致性。:用空间换时间,增加了数据冗余和更新复杂度(可能需要同步更新)。:首先确定要表示的业务对象是什么(例如:用户、订单、商品)。:支持完整的UTF-8,包括表情符号(emoji)。:保证业务唯一性的字段(如用户名、手机号)。

2025-09-11 20:52:38 496

原创 Redis分布式锁

比如客户端A加锁,一段时间之后客户端A解锁,在进入unlock后执行jedis.del()之前,锁突然过期了,此时客户端B尝试加锁成功,然后客户端A再执行del()方法,这时候客户端A已经执行过Random_Value的判断,虽然和客户端B的不一样,但我们总不能每一行代码都做一个值判断吧,这时候客户端A就会将客户端B的锁给解除了。Redis只能保证单个指令进入redis是单线程原子性的,但不能保证多个命令之间的顺序是原子性的,但是Lua指令可以将这个命令绑定,相当于只有一个执行命令,保证它们是顺序执行的。

2025-08-20 21:03:03 263

原创 常见问题处理

禁止在本地打包,统一在 jenkins 打包,方便追踪打包记录使用环境分支打环境包,建议直接 环境名-SNAPSHOT 作为版本号。来指定字段序列化成字符串。反序列化不需要担心,jackson 会自动转换。项目在拉发布分支之前不需要更新 pom 版本号。一个发布分支一个版本号。例如:dev-SNAPSHOT。

2025-08-19 16:39:39 160

原创 缓存双写一致性问题

如果有多个服务同时调用,就用MQ获取Mysql的binlog中的修改顺序,依次发送消息给redis,MySQL的顺序记录就是先后更改的执行顺序,MQ根据这个顺序即可保证先后的更新顺序,让redis的更新顺序不出问题。为了防止在读写的过程中出现高并发问题,还需要加上ReentrantReadWriteLock读写锁,ReentrantLock只能进入一个线程,ReentrantReadWriteLock允许多个线程访问,提高高并发,但只支持多个线程读,不支持同时读写或写写。两种方式:第一种是硬编码方式;

2025-08-15 21:55:00 174

原创 Redis的持久化方式RDB和AOF

AOF是过程命令形式,数据体量大(可以用AOF重写解决该问题),效率低于RDB,记录每个操作,存储格式也更复杂,但数据相对完整(最快可以每秒同步一次),且弥补了RDB不能实时存储的缺点。AOF重写其实是一个同步开启的子进程,Redis执行指令时,子进程也会开启重写,主进程会将写入的数据同步到子进程,子进程则开始重写AOF文件,写完后再返回给主进程,完成AOF重写。Redis中引入了AOF重写机制可以压缩文件体积——执行压缩命令即可。选用:如果对数据非常敏感用AOF,如果追求大数据集的恢复速度选RDB。

2025-08-14 19:25:02 230

原创 Redis过期删除策略

如果某一时刻,有大量key同时过期,Redis 会持续扫描过期字典,造成客户端响应卡顿,因此设置过期时间时,就尽量避免这个问题,在设置过期时间时,可以给过期时间设置一个随机范围,避免同一时刻过期。创建一个定时器,当key设置过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。面对这种情况,redis在操作一个key时,会先判断这个值是否过期,若已过期,则删除该key;Redis 默认会每秒进行十次过期扫描,过期扫描不会遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。

2025-08-11 22:23:29 132

原创 JVM调优

年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为MajorGC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带即方法区的回收(JDK8中无永生带了),出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。'k'或'K'千字节;

2025-08-06 19:59:31 843

原创 一致性哈希算法和数据结构

但是一致性哈希会有数据倾斜的问题,也就是可能多台服务器聚集在相近的地方,这时就需要将服务器多构建几个虚拟节点,来分散到Hash环上的各个位置,来使数据分配的服务器较为均衡,设置的虚拟节点约多,数据分配的越是相对均匀。使用一致性哈希算法时,多个服务器也会落在这个Hash环上,并且能确定各自的位置,这样用户访问的时候,会根据用户IP计算出哈希值,对应到哈希环上,并顺时针行走,遇到的第一台服务器就是该用户被分配到的服务器。

2025-08-04 21:07:26 119

原创 分布式架构—RPC

微服务架构是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。因为要保证不同节点的数据一致,会有一个同步的过程,在这个同步过程中必须保证各个节点均不可被使用(读、写),如果保证可用性(随时可读写),那就可能出现数据同步过程中被读写,导致数据不一致。分布式架构,是指在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务,供其他调用者消费,以实现服务的共享和重用。,都可以正常的获取数据值。

2025-08-02 21:30:40 906

原创 String基础面经

每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。equals 一般都是重写了 equals()方来来对两个对象的内容比较,如果不重写,使用的就是 Object 中的。String 常量池就是“字符串常量池”,位于 JVM 的堆内存中,专门用来存储字符串常量,可以提。量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中 ,String 中的对象是不可变的,也就可以理解为常量,线程安全。

2025-08-01 21:54:26 212

原创 集合常用基础知识

再底层则是采用C语言的指针原理。在HashMap的底层对于数组的操作其实是(n-1)&hash,当数组的长度为2的n次时,减1转为二进制后,他被任何数字&上都不会超过这个数字,比如数组长度为8,减1后为7,那么它的数组长度就是0-7,共8个,即元素可以在这个数组上全部排满,而如果是奇数,或者不是2的n次的偶数,一定会有一个二进制为0,也就是无论另一个数是什么,都不会被存入数组,会浪费掉的位置。在添加第一个元素的时候是直接添加进数组的,而不会进入到红黑树转化的判断的,所以里面的binCount并没有创建。

2025-07-31 22:02:56 259

原创 锁机制及其使用场景分析

1.锁的分类2.乐观锁和悲观锁的区别3.java本地锁详解以及案例分析4.数据库锁详解以及案例分析##1.锁的分类###(1)按照类型划分####a.线程要不要锁住资源---乐观锁/悲观锁(今日重点)乐观锁与悲观锁不是指具体的什么类型的锁,而是指看待并发同步的角度。悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题。

2025-07-29 21:55:26 739

原创 数据库优化

如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20。如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0。在一个千万级的数据库查寻中,如何提高查询效率?

2025-07-28 20:25:54 416

原创 Tomcat部署运行模式

至此,我们已经对Tomcat的整体架构有了大致的了解,从图A、B、C、D可以看出来每一个组件的基本要素和作用。我们在脑海里应该有一个大概的轮廓了!如果你面试的时候,让你简单的聊一下Tomcat,上面的内容你能脱口而出吗?当你能够脱口而出的时候,面试官一定会对你刮目相看的!

2025-07-24 19:35:24 872

原创 ThreadLocal 原理分析

其实在ThreadLocal类中有一个静态内部类ThreadLocalMap(其类似于Map),用键值对的形式存储每一个线程的变量副本,ThreadLocalMap中元素的key为当前ThreadLocal对象,而value对应线程的变量副本,每个线程可能存在多个ThreadLocal。平时我们在解决线程问题的时候我们都是用锁将多个线程都要访问的数据放在锁对象中,但是还有另外一种思想就是最原始的思想,在每一次线程中都有一个要使用的对象,每个线程都是用自己线程中的那个对象这样也就避免了线程问题。

2025-07-22 23:37:07 306

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除