自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis 九大数据结构:从原理到实战场景

提到 Redis 的数据结构,很多人第一反应是 String、List、Hash、Set、Sorted Set 这五种。但在实际企业级应用中,Redis 还提供了另外四种强大的扩展数据结构,它们在某些特定场景下能发挥奇效。本文系统梳理 Redis 的九大数据结构,包括5种核心结构4种扩展结构,重点剖析每个结构的特点、底层实现以及在真实业务中的应用场景。这不仅是一篇技术分享,也是我自己的复习笔记,希望能帮助你在实际项目中做出更合适的数据结构选型。

2026-03-31 20:28:10 125

原创 力扣刷题【3】相交链表

就是两个链表,如果他们相交,他们就共享交点之后的节点,然后要返回第一个相交的点,如果没有相交就返回NULL。思路:像这种链表相关的题我们一般都可以想想指针,这道题我们可以用双指针。如果两个链表相交那最终他们PA和PB一定会相遇并且在第一次相交的点相遇。PA走过的总路程是A不相交的点+共享节点+B不相交的节点。PB走的是B不相交的点+共享节点+A不相交的点。

2026-03-31 19:58:04 16

原创 【搞定面试之mysql】第三篇 mysql的锁

锁这个词语大家都不陌生吧,在并发的情况下,它可谓是神通广大,没有它那我们对于许多软件,网站的使用体验就会大打折扣,今天我们一起学习mysql的锁,来探究大名鼎鼎的mysql数据库是如何保证并发安全的。在进行学习的时候一定要构建知识网络,索引,锁,mvcc,事务他们都是有关联的,因为事务隔离性所以来了锁和mvcc,索引也会影响锁,比如没索引行锁变表锁,都是有关联的,内容确实多,但是把他们联系起来然后多看几遍我相信你的收获一定不小。

2026-03-26 23:11:04 409

原创 【面试问题】java小厂

现代 JVM 将堆分为新生代(Young)和老年代(Old),针对不同代使用不同算法:新生代使用复制算法(因为存活对象少),老年代使用标记-清除或标记-整理。:将内存分为两块(如 Eden 和 Survivor),只使用其中一块,垃圾回收时将存活对象复制到另一块,再清空原区域。字段是整数类型,使用字符串查:会将字符串转为数字,索引通常仍有效(因为转换发生在查询值上,而不是字段上)。:数据和键都在内部节点,范围查询需要中序遍历,性能稍差,但点查询可能稍快(命中节点即可返回)。默认每隔 30 秒续期一次。

2026-03-24 22:09:13 363

原创 【搞定面试之mysql】第二篇:事务和MVCC

这篇文章介绍了mysql的事务和实现原理,以及mvcc及其实现原理,如果这篇文章对你有帮助请给个支持一下。

2026-03-24 21:57:45 507

原创 从LLM到RAG一文带你搞明白ai的核心概念!

RAG 是一种结合信息检索与大语言模型生成的技术框架。它的核心思想是:在 LLM 生成答案之前,先从外部知识库中检索与问题相关的信息片段,然后将这些信息作为上下文(context)提供给 LLM,让 LLM 基于真实、最新的外部知识生成回答,而不是仅依赖模型参数中存储的“记忆”。这样可以显著减少模型“幻觉”(编造事实),并让回答更加准确、可溯源。

2026-03-23 21:06:32 475

原创 【搞定面试之mysql】第一篇:mysql的优化和索引

可以在MySQL的系统配置文件中开启慢查询日志,并设置SQL执行时间超过多少就记录到日志文件,比如我们之前项目设置的是2秒,超过这个时间的SQL就会记录在日志文件中,我们就可以在那里找到执行慢的SQL。首先查询数据的ID字段进行分页,然后根据ID列表用子查询来过滤只查询这些ID的数据,因为查询ID时使用的是覆盖索引,所以效率可以提升。在使用索引时,我们遵循索引创建原则,确保索引字段是查询频繁的,使用复合索引覆盖SQL返回值,避免在索引字段上进行运算或类型转换,以及控制索引数量。

2026-03-23 19:48:59 341

原创 【面试问题】java字节八股部分

(Segment数组,继承ReentrantLock),把数据分成一段一段的,每段独立加锁,这样不同线程可以同时操作不同段,提高并发。:不是单独算法,而是结合上述算法,把堆分成新生代(复制算法)、老年代(标记-整理或标记-清除),根据不同代的特点用不同算法。操作,比如从集合里取元素,可以当成T类型来用,但不能往里放(除了null),因为不知道具体是哪个子类,放任何东西都不安全。操作,比如往集合里放元素,可以放T类型或T的子类型,但读取的时候只能当成Object,因为不知道具体是哪个父类。

2026-03-19 20:12:19 530

原创 【java基础高频易错题盘点】第一篇

基础不牢,地动山摇。今天整理的这几个Java基础高频易错题,希望能帮大家在面试前扫清雷区。记住,面试官考基础题,往往不是想听你背出API,而是想通过追问看你对底层原理的理解深度。希望大家在准备时,不仅要知道“是什么”,更要弄懂“为什么”。如果你觉得本文对你有帮助,欢迎,后续我会继续更新JVM、并发编程等进阶模块的易错题解析!

2026-03-19 19:57:56 447

原创 【java基础内容】ConcurrentHashmap源码万字解析

在 JDK 1.8 中,的数据结构与HashMap数组 + 链表 + 红黑树。数组的每个元素是一个Node节点,当链表长度超过阈值(8)时,会转换为红黑树(TreeNode但Node类:基础的链表节点。TreeNode:红黑树节点。TreeBin:用于包装红黑树的根节点,充当锁的角色。:扩容时出现在旧数组中的特殊节点,表示该桶已迁移。

2026-03-17 22:32:55 522

原创 【面试问题】java小厂

当插入键值对时,先计算key的hashCode(),再通过扰动函数(高低位异或)减少碰撞,得到hash值,然后根据hash值与数组长度-1进行位与运算得到桶索引。当元素个数超过阈值(数组长度*负载因子,默认0.75)时,会进行扩容(resize),容量翻倍,并重新计算每个元素的位置(rehash)。确保同一事务多次读取同一数据结果一致,通过MVCC(多版本并发控制)实现,避免脏读和不可重复读,但可能存在幻读(新插入的行)。原因包括:恶意攻击(如请求大量不存在的key)、业务逻辑误查(如查询不存在的用户)。

2026-03-17 16:40:30 415

原创 【面试问题】java小厂

Java有8种基本数据类型:byte、short、int、long、float、double、char、boolean。我一般用Runnable,因为Java单继承,实现接口更灵活,而且方便多个线程共享同一个任务。Collection下面有List、Set、Queue这些子接口,Map独立一套,像HashMap、TreeMap都实现它。我个人习惯:命名清晰规范,关键地方写注释,尽量用设计模式,写单元测试,避免重复代码,时不时重构优化。${}是直接字符串替换,有注入风险,一般用在动态表名、列名这种地方。

2026-03-16 18:37:38 242

原创 【java基础篇】详解BigDecimal

在一些需要高精度的计算中,比如涉及到钱的业务场景,就可以使用BigDecimal。它不会造成精度损失。直接使用它定义我们的小数即可由于java的小数运算会产生精度损失,所以就有了BigDecimal,它可以防止精度的损失,在实际开发中涉及到钱相关的,就可以采用它来计算。同时我们要注意它的创建方式,不然同样会产生精度损失。

2026-03-16 18:29:08 308

原创 【面试问题第二篇】小厂面试

常见的如:@Controller/@RestController、@Service、@Repository、@Component、@Autowired、@Qualifier、@Value、@Configuration、@Bean、@SpringBootApplication、@RequestMapping系列、@Transactional等。可以从几个层面:SQL优化(索引、避免全表扫描)、索引优化(正确建索引、覆盖索引)、库表结构优化(分库分表、字段类型选择)、配置优化(buffer大小)、硬件升级。

2026-03-15 16:17:17 278

原创 【面试问题第一篇】快手后端java一面

原理是用ASM字节码操作框架,在内存里构建目标类的子类,然后重写父类的方法,在里面织入增强逻辑。因为是有序的,还能做分页展示,比如取最新的N条粉丝。我打个比方,你想给某个类的某些方法进行扩展,但又不想改原来的代码,这时候就可以用动态代理。消息发到特殊的延迟交换机,交换机不立马投递,而是根据你设置的延迟时间(比如 30 分钟)把消息暂存起来,时间一到,才扔到队列里,消费者就能消费了。这些是面试比较常见的问题,在看看自己还有那些不懂,背的时候,自己总结着背,祝你们都能获取到想要的offer。

2026-03-15 15:33:23 594

原创 【java基础难点:“反射“】别再觉得它难了!一文让你彻底理解!

本文深入解析Java反射机制,通过动物类示例演示反射的动态特性。反射允许程序运行时获取类信息并操作成员,核心是通过Class对象实现。文章详细介绍了反射的4个步骤:获取Class对象、获取成员、设置访问权限、调用方法。反射广泛应用于Spring依赖注入、JUnit测试框架、AOP动态代理和JSON转换等场景。虽然反射提高了灵活性和扩展性,但存在性能损耗、破坏封装等缺点。建议在需要动态处理未知类型或开发通用框架时使用反射,性能敏感场景则应避免。文章通过具体代码示例帮助读者理解反射的实际应用与适用场景。

2026-03-13 16:09:13 531

原创 微服务,不仅仅是“小服务”

那么,微服务架构,到底该如何定义?根据微服务概念的提出者的描述:“微服务架构风格是将单个应用程序作为一组小型服务开发的方法,每个服务程序都在自己的进程中运行,并与轻量级机制进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机器独立部署。拆:不再把所有功能塞进一个巨大的、臃肿的“单体应用”中,而是按照业务边界(如用户服务、订单服务、库存服务)进行切割。独:每个被拆出来的“小块”都是一个独立的项目。它拥有自己的数据库、自己的代码库,甚至可以使用不同的编程语言(Java写订单,Go写实时推荐)和技术栈。

2026-03-11 20:16:13 560

原创 一文吃透OpenClaw:别跟风“养虾”,谨防被割韭菜

OpenClaw本身是一款优秀的开源AI工具,其核心价值在于自动化执行、提升效率,适合有实际需求的技术人员和用户。但近期的“养虾”热潮,本质是资本和不法分子的炒作,无数普通人抱着“踩风口、赚快钱”的心态跟风入局,最终沦为被收割的韭菜。作为CSDN博主,真心提醒各位同行和普通用户:理性看待科技风口,不盲目跟风、不贪小便宜,专注于工具本身的价值,才是避免被割韭菜的关键。如果确实有需求,先研究官方教程,掌握基础部署和安全知识后再尝试,切勿被商家的噱头冲昏头脑。科技的价值在于赋能,而非收割。

2026-03-10 15:10:17 801

原创 力扣刷题【2】无重复字符的最长字串

摘要:本文介绍了一种使用哈希表和双指针算法来求解字符串中最长无重复字符子串长度的方法。通过维护一个滑动窗口(left和right指针)和哈希表记录字符位置,当遇到重复字符时更新左边界,并始终保持窗口内无重复字符。时间复杂度为O(n),空间复杂度为O(字符集大小)。关键点在于使用Math.max防止左指针回退,确保窗口只向右移动。该方法高效解决了经典的无重复字符最长子串问题。

2025-07-05 18:29:20 268

原创 力扣刷题记录【1】146.LRU缓存

摘要:本文介绍了LRU缓存的设计与实现,通过双向链表维护访问顺序(头部为最新数据,尾部为最久未使用)和哈希表提供O(1)查找。关键点包括哨兵节点简化边界处理,以及get/put操作时节点移动的O(1)时间复杂度处理。当容量超限时自动移除尾部节点。作者分享了自己首次通过AI辅助理解算法并成功实现的经历,强调数据结构基础的重要性,并鼓励读者持续刷题提升能力。全文包含完整Java代码实现和复杂度分析。

2025-07-04 15:59:51 406

原创 痛定思痛:大二下期的自救之路

这导致了我现在的基础很差很差,什么都会一点儿什么都不精。我觉得要有一种这个项目是我自己创造的感觉,不要只是机械式的抄代码,其实这样的人很多,我发现网上很多人现在一样忘记了自己在苍穹外卖或者黑马点评中学到了什么,哎,不要太焦虑没用的,现在我敢打赌很多学习java的大学生其实对于java的技术都是一知半解,都只会表面的,深一点的东西都不会了,这其实就是拉开与别人差距的地方,大家都是一知半解,用着大差不差的项目,学着大差不差的技术,都是同一班流水线中出来的,如果你的学历还不行,跟我一样,那么你将淹没在人群中。

2025-06-30 03:17:01 294 1

原创 【java基础重要内容|第二篇】深入探寻Threadlocal类一看就懂

ThreadLocal是Java中用于实现线程局部变量的类,它为每个线程提供独立的变量副本,实现线程隔离。文章详细分析了ThreadLocal的内部结构,包括ThreadLocalMap的实现机制、哈希冲突的线性探测法解决方案,以及弱引用key的设计原因。重点探讨了可能存在的内存泄漏问题,强调使用后必须调用remove()方法清理数据。通过源码解析,文章展示了set/get方法的实现逻辑,并解答了关于弱引用回收、Entry清理等常见问题。最后提醒开发者正确使用ThreadLocal以避免内存泄漏,确保多线程

2025-06-19 21:55:57 1439

原创 【从零学习JVM|第九篇】常见的垃圾回收算法和垃圾回收器

本文介绍了Java堆内存中的垃圾回收算法与实现。主要内容包括:1)四种核心算法:标记清除(简单但有碎片)、标记整理(消除碎片但效率低)、复制算法(高效但内存利用率低)、分代回收(综合运用);2)常见回收器:年轻代的Serial、ParNew、ParallelScavenge,老年代的SerialOld、ParallelOld、CMS;3)G1回收器的创新设计,包括分区管理、可预测停顿和并发处理等特性。文章详细分析了各算法与回收器的优缺点、适用场景及实现原理,帮助开发者根据应用特点选择合适的垃圾回收策略。

2025-06-16 15:09:37 1178

原创 【从零学习JVM|第八篇】深入探寻堆内存

Java堆回收机制通过自动清理无效对象来管理内存,核心算法包括引用计数法和可达性分析法。引用计数法实时性强但存在循环引用问题,可达性分析通过GC Roots对象(如虚拟机栈引用、静态变量等)判断对象是否存活。Java提供五种引用类型:强引用(不会被回收)、软引用(内存不足时回收)、弱引用(GC运行时回收)、虚引用(仅用于回收通知)和终结器引用(finalize方法调用)。开发者应合理使用引用类型优化内存管理,避免内存泄漏。堆内存参数(-Xms/-Xmx)的设置直接影响程序性能,理解回收机制有助于提升应用稳定

2025-06-12 21:06:12 1544

原创 【从零学习JVM|第七篇】快速了解直接内存

Java直接内存是JVM堆外的操作系统内存区域,通过ByteBuffer操作,核心优势是零拷贝和减轻GC压力。它避免了I/O操作时的数据复制,提升大文件传输性能,并减少堆内存占用。但需手动管理释放,否则易内存泄漏,且分配成本较高。使用时需设置内存上限(MaxDirectMemorySize),评估场景合理使用。直接内存适合高性能I/O和大内存管理,但需谨慎管理生命周期。

2025-06-12 16:13:14 1120

原创 【从零开始学习JVM | 第六篇】运行时数据区

JVM运行时数据区是Java程序执行的核心内存管理结构,主要包括堆、方法区、虚拟机栈、本地方法栈和程序计数器五大区域。堆是最大且线程共享的区域,用于存储对象实例,由垃圾回收器管理;方法区存储类元数据、常量等共享信息,在JDK8后改为元空间实现;虚拟机栈和本地方法栈均为线程私有,分别处理Java方法和本地方法调用;程序计数器记录线程执行位置。这些区域协同工作,通过不同的内存分配策略支持Java程序运行,其中堆和方法区需特别注意内存溢出问题。理解这些区域的特性对于Java性能调优和内存管理具有重要意义。

2025-06-11 20:28:15 1390

原创 【从零学习JVM|第五篇】打破双亲委派机制

文章摘要:双亲委派机制虽能避免重复加载类并保护核心类库安全,但在实际开发中常需打破以满足业务需求。打破该机制主要为了:1)实现模块化系统中不同版本类库共存;2)解决多应用环境下的类冲突;3)支持动态加载/卸载和热部署;4)满足特殊业务需求。实现方法包括:自定义类加载器重写loadClass方法、使用线程上下文类加载器(如JDBC的SPI机制)以及OSGi框架的"本地优先"加载策略。这些方式突破了传统类加载限制,实现了更灵活的类管理,但需权衡安全性与灵活性。

2025-06-10 20:04:08 1149

原创 【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

双亲委派机制是Java类加载的核心机制,采用层级委托方式实现类加载。主要包含启动类加载器(Bootstrap)、扩展类加载器(Extension)和应用类加载器(Application)三级结构。其工作流程是:子加载器先委托父加载器尝试加载,只有当父加载器无法完成时才自行加载。这种机制保证了类的唯一性,防止核心API被篡改,同时实现类的隔离。源码中通过loadClass()方法实现逐层委托,findClass()完成具体查找。该机制是Java安全模型的基础,既能避免类重复加载,又能确保核心类库安全。

2025-06-09 21:21:09 1282

原创 【从零学习JVM|第三篇】类的生命周期(高频面试题)

Java类的生命周期包括:加载(将字节码加载到内存,生成Class对象)、连接(验证字节码、准备静态变量内存并赋默认值、解析符号引用)、初始化(执行静态代码块和赋值)、使用(创建实例、调用方法)、卸载(类不再使用时被回收)

2025-06-09 19:40:16 1850

原创 【从零学习JVM|第二篇】字节码文件

摘要:本文介绍了Java字节码文件(.class)的结构与组成。主要内容包括:字节码文件的基本组成(魔数、版本号、常量池等8个部分);各部分的具体作用与存储方式;字节码指令的执行示例(如i++与++i的区别);以及使用jclasslib工具查看字节码的方法。通过分析字节码底层实现,帮助开发者更深入理解JVM工作原理和代码执行机制。文章最后强调了学习字节码对掌握Java底层逻辑的重要性。

2025-06-04 19:19:11 993

原创 【从零学习JVM|第一篇】初识jvm

Java虚拟机(JVM)是现代软件开发的核心组件,Java虚拟机这块的知识很重要,不仅仅是体现在面试当中,更是体现在技术上,如果你想成为一个技术大牛,那这块的知识必须好好理解

2025-06-03 19:14:04 1398

原创 【从零学习Rabbitmq第三篇】消费可靠性和延迟消息和业务米

让你了解什么叫消费者可靠性并如何保障,了解业务幂等性和延迟消息

2025-05-29 21:03:47 1103

原创 【从零学习Rabbitmq第二篇】确保生产者和mq的消息可靠性

如何确保我们的生产者可靠性和mq可靠性

2025-05-28 20:45:09 986

原创 【从零学习Rabbitmq第一篇基础篇】初识Rabbitmq

简单了解Rabbitmq本篇文章等待你的阅读,来吧小伙子

2025-05-27 21:00:15 468

原创 【java基础重要内容|第一篇】HashMap源码解析

从源码上了解hashmap的底层原理

2025-05-22 22:37:58 982

原创 苍穹外卖—万字总结

  苍穹外卖写完了,作为我的第一个项目,可谓是收获满满。不管是知识上的收获,还是思维上的收获,都是非常多的,所以我现在回头来好好看看这个项目,总结一下我的这个项目。

2025-04-15 14:18:32 2692

原创 苍穹外卖第九和第十天

昨天写了一整天的接口,今天完成了一点功能,还是有收获的。

2025-04-06 22:02:46 981

原创 苍穹外卖第七天和第八天

今天放假了,上午有点摆,一直玩,然后下午两点才开始学,昨天的项目日记今天一起补上。

2025-04-04 20:06:14 1011

原创 苍穹外卖第六天

今天下午没课,然后课上补了一些之前javaweb没听懂的知识,今天学下来的感受就是有些听不懂有一点懵。

2025-04-01 19:58:59 673

原创 苍穹外卖项目第五天

今天课不多,然后下午体育课直接润,待在寝室写代码,这一周的课都不多,所以这一周加上清明节,就准备完成苍穹外卖这个项目。

2025-03-31 18:56:45 1491

空空如也

空空如也

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

TA关注的人

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