- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 ThreadLocal
线程池的问题是 “线程会被复用,容易混用上一次的连接”;ThreadLocal 的优势是 “线程内副本隔离 + 手动 remove 清空”,既保证同一个线程内的连接唯一,又避免线程复用时的连接混用。连接池解决 “连接创建 / 销毁开销大” 的问题;ThreadLocal 解决 “线程内连接统一、事务原子性、代码解耦” 的问题。这也是 Spring 事务管理()的底层核心逻辑 ——Spring 正是通过 ThreadLocal 将 Connection 绑定到当前线程,保证事务内所有操作复用同一个连接。
2025-12-17 13:02:09
679
原创 常用的锁机制与对比
用户态 CAS 操作 → 调用 Java 的Unsafe类(如) → JVM 调用本地方法(JNI) → 操作系统调用 CPU 原子指令(如 x86 的cmpxchg) → CPU 通过总线锁 / 缓存锁保证指令原子性 → 完成 “比较并交换”。无锁本质:CAS 本身不使用操作系统的内核态锁(如互斥量 Mutex),而是依赖 CPU 硬件原子指令,避免了线程阻塞和用户态→内核态切换的开销;乐观体现:冲突时不阻塞,仅重试(用户态循环),重试开销远小于线程阻塞 / 唤醒;性能根源。
2025-12-01 11:56:23
983
原创 【Java数据结构】——堆(找出用于解决最大/最小的n个元素,或者求中位数)
堆是一种基于树的数据机构,用完全二叉树实现(除了最后一层都必须填满)由于它的特性可以。
2025-09-30 17:17:35
242
原创 【Java数据结构】——动态规划,分治,回溯
因为全排列如1,1,3和3,1,1是不同的排列,而在组合中则是一种,所以不需要固定。你截一个子串,里面的重复出现的字母必须大于k,并求出最长子串的长度。优化为一维数组时,要从右往左处理(与完全背包问题的不同)n:1-n的数字,k:从中选k个进行组合。问题:为什么全排列需要固定,组合却不用?还是之前那个visited固定的思想。
2025-09-22 18:27:37
421
原创 【Java高级基础】——反射,IO流
1. 类名.class;(一般不用,我们都不知道类名)2.对象.getClass()3.Class clazz = Class.forName("全限定名")原理是:通过全限定名找到对应的类加载器,将源代码文件编译成字节码文件后,进行加载到内存中,然后将这个字节码文件赋给clazz这个对象。
2025-09-17 16:50:15
246
原创 【数据结构】——队列,栈(基于链表或数组实现)
E value;@Override//判满//先赋值再++//++要避免越界@Override//判空//先赋值再++//++要避免越界return e;@Override//判空return e;= tail;
2025-09-16 20:28:00
178
原创 【数据结构】——二叉树
一开始一直往左走,直到为空,要回头,怎么回头?2.如果有右子树,栈顶元素的右孩子等于刚刚弹栈的元素,也就知道右子树也处理完了。因为要记住来时的路,为什么要记住来时的路,因为当前节点还没处理完。问题2:开始处理右子树:怎么处理右子树?1.拿到的这个栈顶元素就没有右子树,当然就算处理完了,pop掉就完了。中序遍历可以得到一个二叉搜索树的递增序列,所以使用中序遍历。先打印出当前节点,然后往左走到底,走到底后再往右走。往右走之前,或者就没有右子树时,打印当前节点。右子树处理完成了,也就是弹栈了,打印弹栈节点。
2025-09-16 20:07:45
693
原创 【SpringBoot】——原理篇
初始化环境:自定义的bean 如@bean注解 以及导入的坐标 maven,形成初始化的环境设置集A:扫描出的META-INF中全部文件,但不是真的加载,还需要看条件满不满足。与初始化的环境进行比对,满足就加载,不满足就不加载。设置集B:加载满足加载条件技术的配置文件,有带默认值的,也有不带的,完全取决于给你配置成什么样。默认加载,如果想覆盖,你就修改即可。可选依赖:optional:不被别人知道我有这个排除依赖:exclude:主动不要别人这个。
2025-09-12 19:51:24
1074
原创 【Java】——网络编程
计算机与计算机之间的通讯serverSocket 可以为服务端注册对象,以便客户端可以找到它,同时可以调用这个对象的方法来等待客户端的连接请求,以及建立与客户端的连接管道,就可以与客户端进行通信了。1.多收多发案例//开启一个SocketSystem.out.println("请输入数据:->" );//使用IO流发数据//包装成数据流//发出System.out.println("已结束,欢迎下次再来!");break;//建立socket连接//接收客户端信息。
2025-08-27 09:21:27
743
原创 【JUC】——并发编程
访问时间是错开的(没有竞争),可以就使用轻量级锁这里的代码有些什么问题?如果我再次调用getInstance方法,(其实只有第一次需要线程安全保护)那就又会锁一次进行判断instance是否为空,性能低了。这时就引入double-check的方法t1先进入锁,创建了对象,t2再进入的时候,判空时就会发现instance对象已经被创建了,就不会再次创建了。线程数不足导致饥饿,一个又需要等另一个的结果才能执行。用两个不同类型的线程池来解决即可。
2025-06-30 16:57:41
814
原创 【Java基础】——集合篇
直接加在类后面即可与在类上定义相似,加在接口名后面。但格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }/*** @param t 传入泛型的参数* @param <T> 泛型的类型* @return T 返回值为T类型* 说明:* 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。* 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
2025-05-09 21:47:13
1063
原创 一文带你弄懂Java虚拟机——JVM(循序渐进,层层突破!)
摘要 本文系统阐述了JVM的核心运行机制,包含三大核心内容:类加载机制、内存管理模型和垃圾回收体系。在类加载方面,详细解析了双亲委派机制及其打破场景(如JDBC案例);内存管理部分剖析了运行时数据区结构,包括堆栈内存分配、对象存储方式;垃圾回收章节重点讲解可达性分析算法、分代回收策略及主流回收器(CMS/G1)的工作原理。特别指出G1回收器采用卡表技术解决跨代引用问题,并通过三色标记法实现并发标记。全文通过技术原理与实战案例结合,揭示了JVM实现"一次编译,到处运行"的关键技术路径。
2025-05-09 19:22:22
1831
原创 【Redis】——持久化,高可用集群
文章主要介绍了Redis的持久化机制和集群高可用性策略。在持久化方面,详细阐述了RDB(Redis Database)和AOF(Append Only File)两种方式。RDB通过定期保存数据快照实现持久化,而AOF则记录所有写操作。文章还讨论了RDB的异步持久化原理,以及如何通过fork子进程减少对主进程的阻塞。在集群高可用性方面,文章介绍了主从集群的数据同步原理,包括全量同步和增量同步,以及哨兵机制的作用和原理,哨兵负责监控节点状态并在主节点故障时进行故障转移。此外,还探讨了分片集群的结构、散列插槽的
2025-04-10 13:03:38
357
原创 【学成在线】——认证授权
身份认证,告知系统你的身份是什么。比如用户名密码登录,微信扫描登录等你是否有权限去访问系统的资源,有权限才可以访问,或者说有权限做某件事,如发布课程。/*** @description 认证service*//*** @description 认证方法* @param authParamsDto 认证参数* @return com.xuecheng.ucenter.model.po.XcUser 用户信息*/下面就要开始实现不同的认证方式了。
2025-04-08 13:09:55
1160
原创 【学成在线】——选课支付模块
本模块实现了学生选课、下单支付、学习的整体流程。网站的课程有免费和收费两种,对于免费课程学生选课后可直接学习,对于收费课程学生需要下单且支付成功方可选课、学习。选课:是将课程加入我的课程表的过程。我的课程表:记录我在网站学习的课程,我的课程表中有免费课程和收费课程两种,对于免费课程可直接添加到我的课程表,对于收费课程需要下单、支付成功后自动加入我的课程表。
2025-03-27 11:47:35
1117
原创 【Redis】——原理篇——网络模型(带你深入理解Redis的网络模型,手撕LRU,LFU算法!)
本文主要探讨了IO模型、Redis网络模型及内存回收策略。首先,文章介绍了用户空间与内核空间的概念,并指出提高IO效率的关键在于减少等待时间和缓冲区拷贝。接着,详细分析了阻塞IO、非阻塞IO、IO多路复用(包括select、poll、epoll)和异步IO的特点。随后,文章深入探讨了Redis的网络模型,包括单线程和多线程的实现,以及通信协议RESP。最后,文章介绍了Redis的内存回收策略,包括过期key的回收(惰性删除和周期删除)和内存淘汰策略(LRU和LFU),并提供了手写LRU和LFU算法的实现!
2025-03-25 16:06:29
1202
原创 【Redis】——原理篇——数据结构
Dict会产生内存碎片,而且大量的指针会占用大量的内存。所以就引出ziplist。它是一片连续的内存空间,而且没有指针。那么又没有指针,而且每个entry占的大小又不一样,它是如何找到每个entry的呢?首尾操作。
2025-03-24 19:12:16
557
原创 【学成在线】——内容管理
在controller层定义接口Mapper测试:分页查询需要两个参数:page:一个当前页码,一个总页数querywrapper:就是查询条件该地址正是前端获取课程分类的接口地址。响应回来的json数据"label" : "移动开发","name" : "移动开发","label" : "微信开发","name" : "微信开发",当然childrentreenode还有很多个可能,比如1-2-2等等。
2025-03-20 13:07:05
939
原创 【Java基础】——面向对象
比如一个鼠标就是封装,内部怎么实现的我们不知道,只要会用即可,提供了左右键滚轮来供我们使用。合理隐藏,合理暴露this.age = age 这里不能省略的原因就是为了区分实例变量和局部变量。
2025-02-20 17:49:25
621
原创 【java基础】——异常
异常是以什么形式存在的?异常就是以类和对象的形式存在的。类是一种抽象,对象是一个实际存在实例。自己定义自己的异常(这里是编译时异常,后面要处理哦)
2025-01-09 14:45:07
549
原创 【学成在线】——媒资管理
通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成,需要客户重新上传,用户体验非常差,所以对于大文件上传的要求最基本的是断点续传。流程如下:1、前端上传前先把文件分成块2、一块一块的上传,上传中断后重新上传,已上传的分块则不用再上传3、各分块上传完成最后在服务端合并文件首先什么是分布式?含义。
2025-01-08 12:40:51
874
原创 【MySQL】——sql语句,以及mybatis的关键知识
一对多多对多一对一直接将两个查询的结果直接合并起来这里发现有重复的元素,想要去重就用union一级缓存默认开启,不需要任何配置原理:只要使用的是同一个sqlSession对象执行同一条sql语句,就会走缓存。sqlsession对象不是同一个,不走缓存。一级缓存失效:第一次DQL和第二次DQL之间做了以下两件事的任意一件,都会让以及缓存清空1.执行了sqlSession的clearCache()方法,这是手动清空缓存2.执行了INSERT或DELETE或UPDATE语句。
2024-12-27 15:47:07
1084
原创 【Spring】深入理解Spring——AOP(非常重要的内容!)
提到Spring便离不开提到AOP,文章中解答了许多在大家开发中的疑虑,为什么我们需要代理设计模式,那么什么是代理设计模式,静态代理与动态代理的区别,AOP编程的过程步骤,它实现的底层原理是什么。都会一一讲到。后续也会继续更新Spring框架下的各种常见问题,如IOC,DI,循环依赖,Bean的生命周期等问题,敬请期待!
2024-10-19 22:45:34
2001
原创 【Spring】——IOC,DI,Bean的生命周期
javaEE:Java 平台企业版(Java Platform Enterprise Edition)。是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件。JavaEE 是在 JavaSE 的基础上,额外提供的一套工具和规范,专门用来开发大型企业级应用(比如银行系统、电商网站)。对找到的配置资源进行解析,若是 XML 文件,会解析出各个 Bean 的定义信息(如类名、属性、依赖关系等);若是注解,也会识别出被注解标注的类及相关属性等情况,从而得到 Bean 的元数据。
2024-10-17 18:13:35
2116
原创 Redis【黑马点评】项目——1 短信登录,缓存
缓存就是数据交换的缓冲区(称作Cache[kaJ]),是存贮数据的临时地方,一般读写性能较高。将一些经常读写的东西放在缓存里,就不需要每次从数据库查。方法后续讲解(cloud课程中也有)
2024-10-17 15:26:57
1234
原创 Redis【黑马点评】——2 秒杀
秒杀是该项目中非常重要的一个模块,涵盖的知识点以及代码质量非常之高,里面有许多细节值得反复学习观看,能帮助我们获得非常有用的知识。这篇文章除了对该秒杀功能进行了总计,还包括许多细节的分析,如:如何加锁,为什么加这个锁,加在哪里,以及涉及了动态代理等知识,对这个模块有疑问的小伙伴可以来学习,大家一起进步学习。
2024-10-16 14:33:08
2292
原创 【MySQL】——一篇文章带你彻底弄懂事务,循序渐进!(包含MVCC)
事务在mysql中占据非常重要的地位,是十分重要的知识。文章从事务的介绍到事务的特性,再到事务的隔离性以及隔离级别。并介绍了MVCC及其实现原理。循序渐进
2024-10-10 15:20:20
951
原创 【MySQL】——锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是-种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。Mysql中也我们提供了各种各样的锁,来应对不同的场景。行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。
2024-09-29 13:43:19
1334
原创 【MySQL】——索引(一篇文章带你彻底弄懂这个难懂的索引!!!)
索引在MySQL中是一块非常重要的知识,也是十分常问的问题。那么这篇文章带你彻底弄懂索引这一块系统的知识。从索引是什么,索引的数据结构,以及它的底层实现。再到索引的分类,对于SQL语句性能的分析,索引使用的规则。十分全面,读完一定会有所收获。
2024-09-28 17:05:35
1216
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅