自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL面经整理

此时,事务B读取的id =1 的这条数据,之后事务A回滚了,修改的数据从未真正存在过,却被事务B读取到了。比如 : 事务A开启第一次读取id =1的数据,此时事务B开启,修改了id = 1的这条数据,并提交事务。其次,InnoDB支持行级锁和MVCC,而MyISAM只支持表级锁,因此在高并发写入场景下,InnoDB的性能更好。一个事务读取到了另一个事务未提交的数据,如果对方回滚,那么读取到的数据就是无效的。同一事务中,两次读取同一条数据,由于其他事务提交了更新操作,导致两次读取结果不同。

2026-06-08 18:08:33 264

原创 矩阵快速幂

【代码】矩阵快速幂。

2026-06-01 16:10:42 186

原创 Kafka基础篇

Kafka 集群中的一台服务器。

2026-05-11 16:57:55 329

原创 SpringSecurity+RABC模型+JWT

按照官方文档的话说,Spring Security 是一个Java框架,用于保护程序的安全性。主要作用体现在以下方面认证授权保护第三方身份验证单点登陆会话管理密码编码Spring Security基于过滤器链的概念,可以轻松集成到任何基于Spring的应用程序中。

2026-05-06 19:59:29 493

原创 布隆过滤器实战

布隆过滤器(Bloom Filter,BF)本质就是用空间换时间的概率型数据结构,用来判断一个元素是否可能存在于集合中。可能存在一定不存在。

2026-04-23 21:53:30 270

原创 拓扑排序(Kahn算法)

拓扑排序是对有向无环图(DAG, Directed Acyclic Graph)的顶点进行的一种线性排序,使得对于每一条有向边 (u, v),顶点 u 在排序结果中都出现在顶点 v 的前面。核心前提:图必须是 DAG(无环),若图中存在环,则无法进行拓扑排序。

2026-04-20 13:11:12 990

原创 基于 Redis + Lua,实现“多维度原子限流”(令牌桶 + 滑动窗口)

以固定速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃请求进入以后,必须尝试从桶中获取令牌,获取到令牌之后才可以被处理如果令牌桶中没有令牌,则请求等待或丢弃所以每秒产生的令牌数量基本就是QPS上限。

2026-04-07 13:16:08 464

原创 JVM八股

当类加载器收到一个加载任务时,会先把这个人物委派给父加载器, 父加载器在尝试加载这个类,如果不能,自己才会去尝试加载这个类。把内存分为两部分,当一部分使用完时,触发GC,使用可达性分析法标记存活对象,将存活对象移动到另一部分内存,然后直接清理先前的那一部分。对象中放置一个引用计数器,当一个地方引用到它,引用计数器值+1,当这个引用失效,引用计数器-1,当值为0,就认为这个对象已经死亡。在survivor区的对象会有一个年龄属性,初始值为1,没熬过一个GC,年龄会加1,达到阈值(16),就会进入永久代。

2026-03-30 13:44:08 426

原创 sentinel

访问http://localhost:8090 ,即可打开控制台,默认账号和密码都是sentinel。不想每次运行都写代码,直接创建一个windows批处理文件即可。1.导入依赖和配置yml。

2026-03-23 14:20:34 274

原创 JVM垃圾回收那些事

还有一种“和稀泥式”解决方案可以不在内存分配和访问上增加太大额外负担,做法是让虚 拟机平时多数时间都采用标记-清除算法,暂时容忍内存碎片的存在,直到内存空间的碎片化程度已经 大到影响对象分配时,再采用标记-整理算法收集一次,以获得规整的内存空间。如果移动存活对象,尤其是在老年代这种每次回收都有大量对象存活区域,移动存活对象并更新 所有引用这些对象的地方将会是一种极为负重的操作,而且这种对象移动操作必须全程暂停用户应用 程序才能进行[1],这就更加让使用者不得不小心翼翼地权衡其弊端了。

2025-12-22 14:50:35 924

原创 minio分片上传

为什么要选择将一个大文件拆分成许多小文件来上传?对于许多服务器和应用框架来说,单次HTTP请求的大小有严格的限制。上传一个10GB的大文件可能需要数个小时,单一的http请求连接不稳定,造成上传失败。降低服务器的压力其次分片上传可以实现断点续传、秒上传等功能/*** 创建分片上传任务 - 在MinIO服务器上初始化一个分片上传会话* 获取uploadId - 返回一个唯一的uploadId,用于标识这次分片上传会话* @param bucket 存储桶名称。

2025-12-15 11:35:25 683

原创 JUC并发编程

调用 start()方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。但是,直接执行 run() 方法,会把 run() 方法当成一个普通方法在调用该方法的线程去执行,所以这并不是多线程工作。前三种都会发生线程切换,线程切换时,要保留当前线程的上下文,等下次该线程占用cpu时,可以继承执行。并加载将要占用cpu的线程的上下文。特性 Callable。

2025-12-08 11:58:14 572

原创 redis分片集群的部署和使用

我想睡觉

2025-12-01 10:32:12 856

原创 初识RabbitMQ

太想进步了

2025-11-16 22:12:08 836

原创 JVM学习第一章

运行时数据区,即JVM运行时对内存的管理模型。对于日志的解读问了ai,后续看完在说吧。引用计数法和可达性分析算法。

2025-10-27 10:47:28 1042

原创 【链表一些基本操作】

对于非头节点来说,我们只需要把第N个节点的前驱节点指向第N个节点的后继节点即可,但是头节点没有前驱节点,需要进行特殊判断。设置一个dummy节点,把它当作头节点的前驱节点,这样头节点就可以当作普通节点来看待。

2025-10-20 10:40:02 430

原创 堆的粗浅了解

往堆中添加元素可能会破坏原来的结构,因此需要执行从堆底到堆顶执行堆化过程(heapify)对应java代码中的siftup。● 是一个完全二叉树,除了最底层外,每一个节点的度都是2,最底层是从最左侧开始填充。步骤:先取出堆顶元素和堆底元素,堆底置为null,从上到下执行堆化siftDown。● 我们将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”。● 对于大顶堆(小顶堆),堆顶元素(根节点)的值是最大(最小)的。步骤:先交换堆顶与堆底的元素,在推出堆底,然后从顶到底进行堆化。

2025-10-12 20:59:54 186

原创 hashMap源码学习

1.java本身的序列化并不会忽略null值,而table会预留一部分空间方便元素的插入,所以table数组会有很多的空值,在序列化时,这些空值会占用内存空间和不必要的网络传输。2.hashMap重写了readObject和writeObject方法,在序列化时,是按照size即元素的数量进行序列化的,而不是容量(table数组的长度)。e.next== null,直接该该元素在新数组中的位置,插入数组。jdk 7之前是数组+链表 ,jdk8之后是数组+链表+红黑树。是红黑树:红黑树处理规则。

2025-09-28 11:23:45 1047

原创 redis缓存的基础知识

数据交换的缓冲区,临时存储数据的地方,读写性能高。可以减轻数据库的压力,降低后端负载,提高读写效率,降低响应时间。但是同时,我们要保持数据一致性也就要付出一定成本。由缓存的调用者,在更新数据库的同时更新缓存客户查询的数据在缓存和数据库中都不存在,导致每次查询都会访问数据库,给数据库带来压力缓存中大量数据在同一时间失效、或者redis服务宕机,大量请求到达数据库也叫热点key问题,一个被高并发访问并且缓存重建业务复杂的key失效了,无效的请求访问在瞬间给数据库带来巨大冲击。

2025-06-15 18:08:06 805

原创 初识redis

因此如果key和value都使用string类型的序列化器,spring中有一个类StringRedisTemplate ,他的key与value序列化方式默认就是string方式。这样有一个弊端,存储java对象时会把java对象的字节码对象也存进去,会导致占用的空间太大,影响速率,按crtil+c 可以快速关闭服务,新开启命令行,输入。-h -p 可以省略 ,默认连接到本地的redis客户端。检查给定key是否存在 存在返回1 ,不存在返回 0。返回key所存储的值的类型。需要手动序列化和反序列化。

2025-06-07 22:24:30 1180 1

原创 【springboot中PageHelper分页插件的使用】

【代码】【springboot中PageHelper分页插件的使用】

2025-06-03 10:02:00 240

原创 【springboot整合minio上传文件】

springboot整合minio

2025-05-26 11:00:11 362

原创 【git 】

Git 更像是把数据看作是对小型文件系统的一系列快照。在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git 对待数据更像是一个 快照流。通俗来说,就是,每次提交都是项目的一张"全景照片",所有未变动的文件都会复用之前的存档。如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。

2025-05-12 14:34:23 462

原创 【springboot项目发送邮件验证码】

运用Thymeleaf模板。

2025-04-27 23:09:37 374

原创 【正则表达式】

3.检验邮箱或者是密码是否符合格式。2.字符串直接使用正则。

2025-04-20 23:35:27 341

原创 学习小总结

【代码】学习小总结。

2025-04-13 23:20:01 474

原创 springMVC学习

通过统一的响应结构来封装业务操作的结果,无论是失败还是成功,均以标准化的结果返回,便于前后端协作和错误处理。

2025-03-30 21:29:59 507

原创 【学习总结】

AOP(Aspect-Oriented Programming,面向切面编程) 是一种编程范式,用于将程序中分散的横切关注点(如日志、事务、权限等)模块化。通过 AOP,可以将这些与核心业务逻辑无关的功能“横向”抽取到独立的模块中,从而提升代码的可维护性和复用性。

2025-03-24 00:18:33 835

原创 【学习总结】

给定一个长度为 n的数组 nums ,元素按从小到大的顺序排列且不重复。请查找并返回元素 target 在该数组中的索引。若不包含该数字,则返回-1;

2025-03-16 23:14:26 205

原创 【el学习】

用于在jsp页面访问和操作数据。

2025-03-09 18:44:01 450

原创 过滤器、session和cookie

用户首次访问时,服务器创建唯一的Session ID,通过Set-Cookie将Session ID发送给浏览器(如:JSESSIONID=xyz789),浏览器后续请求携带Session ID,服务器根据Session ID查找对应的Session数据。行为:存在有效Session → 返回现有Session,无有效Session → 创建新Session并返回。行为:存在有效Session → 返回现有Session,无有效Session → 返回null。作用:获取当前请求关联的Session。

2025-03-02 20:30:52 914

原创 javaweb学习

事务就是将一组SQL语句放在同一批次内去执行如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。

2025-02-23 19:12:01 371

原创 java学习

1.Stream流的中间方法是指那些对流中的元素进行处理,并返回一个新的Stream流的方法。类是 Java 中用于处理文件和目录路径的类。它提供了多种方法来操作文件和目录,例如创建、删除、重命名、检查文件或目录是否存在等。终结方法是指那些执行最终操作的方法,它们会触发流的处理过程,并产生一个结果。stream流只能调用一次终结方法,因为流一旦调用了终结方法就会被关闭。的文件,然后打印了它的一些属性,最后尝试删除这个文件。以下是一个简单的示例,展示了如何使用。类时,需要注意处理可能抛出的。

2024-12-15 23:12:51 1058

原创 学习周总结

如果需要按照自定义的规则对元素进行排序,可以在创建。

2024-12-09 07:59:38 346

原创 java学习

3.iterator迭代一次后指针不会自动回到最初的位置,因此只能进行一次遍历,如果超了,依然调用next方法,会报错Nosuchelement。迭代器遍历时,不能用集合方法进行添加或删除,只能用迭代器方法remove();contains底层是依赖equals方法实现的,在比较对象时,是比较的地址值,因此在判断一个对象是否包含于集合中,要重写equals方法。在添加set集合时,若添加重复元素则返回false。1.特点:查找快,添加或删除元素慢。1.在遍历时需要删除元素,可以用迭代器遍历。

2024-12-01 20:13:43 846

原创 css和html学习

after伪类在 CSS 中用于在被选元素的内容后面插入内容。这个伪类通常与content属性一起使用,content属性用于指定要插入的内容。after伪类可以用于所有元素,并且可以通过 CSS 样式来设置插入内容的样式。以下是after/* 这里是要插入的内容 *//* 其他样式属性 */

2024-11-24 21:04:34 746

原创 【无标题】

scroll:会为父元素添加滚动条,自动添加水平和垂直滚动条。3.设置float属性后,他的下边元素会立即向左上、右上移动,直至遇到父元素的边框或其他浮动元素。若浮动元素上面是一个块元素,则浮动元素不会超过块元素。福哦的那个元素不会超过它上边的兄弟元素,最多一边齐。3.可选值:inline(内联元素),block(块元素),inline-block(二者兼容,既不会独占一行,也可以设置宽高)1.子元素最大可以等于父元素内容去的大小,如果超过,超过的大小会在父元素意外的位置展示,找出父元素的内容为溢出内容。

2024-11-18 07:59:02 468

原创 【无标题】

泛型是Java中一个非常强大的特性,它可以帮助你编写更加灵活和可重用的代码。通过使用泛型,你可以避免类型转换的麻烦,同时提高代码的安全性和可读性。在运行时,泛型信息会被擦除,只保留原始类型。这意味着在运行时无法获取泛型类型参数的具体信息。1.在创建泛型类的对象必须指定参数类型,而调用泛型方法时则无须指定。对象、获取和设置时间、比较日期以及使用其他一些常用方法。类提供了一系列方法来操作和处理日期和时间。包中的一个类,用于表示特定的瞬间,精确到毫秒。3.remove()移除最后一个元素。

2024-11-10 23:00:37 963

原创 【无标题】

1.getClass()方法即获得调用方法对象的所属的类名。结果是一个Class类型。getSuperClass()方法即获取调用方法对象的父类名。在Class类中getName()方法获取对象的类名。

2024-11-03 20:16:01 337

原创 【无标题】

this和就近原则字符串实例成员与静态成员引用变量作为方法的返回值类的继承调用父类中的有参构造方法。

2024-10-27 10:12:28 478

空空如也

空空如也

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

TA关注的人

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