- 博客(753)
- 资源 (2)
- 收藏
- 关注
原创 数据库:索引相关基本知识点
索引是一种。。。对于复合索引:Mysql从左到右的使用索引中的字段,。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .。
2025-05-23 06:00:00
289
原创 java属性映射工具:MapStruct
官方代码仓库:https://github.com/mapstruct/mapstruct官方文档:https://mapstruct.org/在开发过程中,我们。
2025-05-22 10:10:19
711
原创 计算机网络:常见的网络协议基本概念(IP、TCP、UDP、HTTP、HTTPS、ICMP(ping原理)、DNS)
对比维度客户端服务端定义发起请求或消费服务的终端设备或应用程序。接收请求、处理数据并返回响应的后台系统或程序。示例浏览器、手机App、智能设备Web服务器(Nginx)、数据库服务器角色定位请求的发起方请求的响应方资源依赖依赖服务端提供数据或功能提供数据、计算能力或存储资源运行环境用户终端(PC、手机、IoT设备)远程服务器(物理机、虚拟机、云服务)性能要求侧重交互体验(如响应速度、界面流畅度)侧重稳定性、并发处理能力、安全性典型技术栈。
2025-05-21 06:00:00
777
原创 mysql和java数据类型的对应关系
BLOB:是MySQL中专门用于存储二进制大对象的数据类型,适合存储原始字节流数据。使用:JPA/Hibernate:通过@Lob注解声明大字段。:TEXT存储字符数据(有字符集),BLOB存储二进制数据。通俗点讲,就是看有多少个数字,,适合完全确定长度的数据(如邮编、固定编码)这只是举一个例子,来说明M,D是什么,,比如加、减,谁大谁小,这样的操作,会。,很可能在值比较的时候得到的结果有误。比如上面的5.6789 ,D就是4。比如,5.6789,M就是5。区别一:数值大小区别。
2025-05-20 06:00:00
555
原创 浏览器请求的整个缓存过程
当第一次请求的时候,浏览器本地缓存库没有缓存数据,会从服务器取数据,并且放到浏览器的缓存库中下次再进行请求的时候会根据缓存的策略来读取本地或者服务的信息。一般信息的传递通过 HTTP 请求头 Header 来传递。目前比较常见的缓存方式有两种,分别是:强制缓存、对比缓存HTTP 缓存主要是对静态数据进行缓存,把从服务器拿到的数据缓存到客户端/浏览器。
2025-05-19 06:00:00
587
原创 Caffeine:基本原理及使用
readBuffer 的类型是 BoundedBuffer,它的实现是一个 Striped Ring (条带隔离的 环形) 的 bufferBoundedBuffer它是一个 striped、非阻塞、有界限的 buffer,继承于StripedBuffer类。StripedBuffer设计的思想是跟Striped64类似的,通过扩展结构把分散操作热点(/竞争热点分离)。实现是这样的,StripedBuffer维护一个Buffer[]数组,每个元素就是一个RingBuffer,
2025-05-18 06:00:00
920
原创 数据结构:树、二叉树(排序/查找/平衡)、红黑树、BTREE、B+TREE
简称BST(Binary Search Tree),也称为二叉查找树。其或是一棵空树,或是一棵具有下列特性的非空二叉树:1)若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值。2)若右子树非空,则右子树上所有结点关键字值均大于根结点的关键字值。3)左、右子树本身也分别是一棵二叉排序树。是一个递归的数据结构:左子树结点值 < 根结点值 < 右子树结点值后面直接将“结点关键值”简称为“结点值”
2025-05-17 06:00:00
606
原创 自平衡二叉查找树的旋转操作:左旋、右旋、左右旋、 右左旋
LL 旋转和 RR 旋转分别用于处理左左和右右失衡,LR 旋转和 RL 旋转则用于处理左右和右左失衡在使用 AVL 树时,每个树节点仅存储一个数据,而每次进行磁盘 IO 时只能读取一个节点的数据,如果需要查询的数据分布在多个节点上,那么就需要进行多次磁盘 IO。磁盘 IO 是一项耗时的操作,需要优先考虑如何最大限度地减少磁盘 IO 操作的次数。AVL树通过严格的平衡保证了高效的查询性能,适合读多写少的内存级数据管理场景。在需要更高写入效率或持久化存储时,红黑树或B+树通常是更优选择。
2025-05-16 06:00:00
234
原创 spring框架中的本地缓存:spring cache基本使用
自定义缓存过去时间等# 使用 Redis 作为缓存组件# 缓存过期时间为 3600s# 缓存的键的名字前缀# 是否使用缓存前缀# 是否缓存控制,防止缓存穿透在 @Cacheable 注解里面加上 key 的值 #root.method.name。这是一种特有的表达式,称作 SpEL 表达式,这里代表用方法名作为缓存 key 的名字如果按上述去配置的话,缓存的key的名称便是这个方法名可以自定义条件来决定是否将缓存功能关闭。
2025-05-15 06:00:00
1097
原创 Redis分布式锁实现
如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。
2025-05-14 06:00:00
1553
原创 Redis的持久化:RDB和AOF机制
Redis 提供,它们在数据安全性、性能、恢复速度等方面有显著差异。为什么要进行持久化?如果是大数据量的恢复,会有下述的影响。
2025-05-13 06:00:00
978
原创 缓存(5):常见 缓存数据淘汰算法/缓存清空策略
TinyLFU 就是其中一个优化算法,专门为了解决 LFU 上的三个问题而被设计出来的。LFU 上的三个问题如下如何减少访问频率的保存,所带来的空间开销如何减少访问记录的更新,所带来的时间开销如果提升对局部热点数据的 算法命中率解决第1个问题/第2个问题是采用了 Count–Min Sketch 算法Count-Min Sketch算法将一个hash操作,扩增为多个hash,这样原来hash冲突的概率就降低了几个等级,且当多个hash取得数据的时候,取最低值,也就是Count Min的含义所在。
2025-05-11 17:29:35
920
原创 缓存(4):常见缓存 概念、问题、现象 及 预防问题
缓存穿透是**指用户查询数据,在数据库没有,自然在缓存中也不会有**。这样就导致用户查询的时候,在缓存中找不到对应key的value,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库缓存穿透是指:用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在 缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请 求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。缓存击穿与 缓存穿透的简单区别。
2025-05-11 16:25:50
1225
原创 缓存(3):本地缓存作用 及 数据一致性 实现策略
在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,「先操作数据库,再操作缓存」。读取缓存中是否有相关数据如果缓存中有相关数据value,则返回如果缓存中没有相关数据,则从数据库读取相关数据放入缓存中key->value,再返回如果有更新数据,则先更新数据库,再删除缓存为了保证第四步删除缓存成功,使用binlog异步删除如果是主从数据库,binglog取自于从库。
2025-05-11 15:49:12
1217
原创 缓存(2):数据一致性
在分布式系统中,。强一致性最符合用户直觉弱一致性缓存可以提升性能、缓解数据库压力,但是使用缓存也会导致数据不一致性的问题。
2025-05-09 00:37:18
1098
原创 缓存(1):三级缓存
三级缓存就是在Bean生成流程中保存Bean对象三种形态的三个Map集合这个三级缓存就是为了解决循环依赖当创建相互依赖的对象时,会形成死循环,例如下图无缓存中的情况。而Spring通过增加缓存,将未完全创建好的A提前暴露在缓存中,当相互依赖的对象B对属性A赋值时,可以直接从缓存中获取A,而不需要再创建A。如下所示应用架构三级缓存的时候,一般说JVM级别的、分布式缓存级别的、数据库级别的JVM级别:一般常见本地缓存框架有Guava Cache和Caffeine Cache分布式缓存级别:一般用的。
2025-05-08 23:02:27
1265
原创 spring的事件监听
/ 事件A// 事件BSpring 容器启动时:通过 ApplicationContext 自动扫描所有实现了 ApplicationListener 接口的 Bean。底层机制在 Bean 初始化阶段,Spring 检测到 Bean 实现了 ApplicationListener 接口。将该 Bean 注册到 ApplicationEventMulticaster 的监听器列表中。
2025-05-07 23:01:11
961
原创 设计模式基础概念(结构型模式):适配器模式(Adapter Pattern)
适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。适配器模式。 被。适配器。它的运作方式如下:实现时使用了构成原则: 适配器实现了其中一个对象的接口, 并对另一个对象进行封装。所有流行的编程语言都可以实现适配器。这一实现使用了继承机制: 适配器同时继承两个对象的接口。请注意, 这种方式仅能在支持多重继承的编程语言中实现, 例如 C++。使用示例: 适配器模式在 Java 代码中很常见。 基于一些遗留代码的系统常常会使用该模式。 在这种情况下, 适配器让遗留代码与现代的类得以相互合作。
2025-04-24 02:33:29
962
原创 设计模式基础概念(创建型模式):工厂模式
简单工厂模式:⼀个抽象的接⼝,多个抽象接口的实现类,⼀个工厂类,⽤来实例化抽象的接⼝简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式。简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例。简单工厂模式是一种对象创建型模式。但是简单工厂模式不属于23 种 Gof 设计模式之一优缺点:优点:简单工厂模式的工厂类是整个模式的关键。其中包含了必要的逻辑判断,根据外部信息,决定究竟应该创建哪个具体类的对象。
2025-04-24 02:04:49
754
原创 设计模式基础概念(行为模式):观察者模式(Observer)
我们可以发现这样一个场景:如果你订阅了一份杂志或报纸, 那就不需要再去报摊查询新出版的刊物了。观察者模式(Observer)是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。其具体的结构如下当一个对象状态的改变需要改变其他对象, 或实际对象是事先未知的或动态变化的时, 可使用观察者模式。当应用中的一些对象必须观察其他对象时, 可使用该模式。 但。应用示例: 观察者模式在 Java 代码中很常见, 特别是在 GUI 组件中。 它提供了在不与其他对象所属类
2025-04-23 03:28:23
659
原创 java及mysql日期问题
优先使用 java.time:在Java 8+中,应优先使用 java.time.LocalDate、LocalTime、LocalDateTime。兼容旧代码:若需与遗留代码或旧JDBC驱动交互,使用 java.sql.Date/Time/Timestamp。避免混用:不要将 java.util.Date 和 java.sql.Date 混用,它们的语义不同。类父类用途时间精度时区处理无通用日期时间(含日期和时间)毫秒无时区(依赖JVM默认)
2025-04-21 17:16:06
986
原创 JAVA的泛型
Java 泛型通过**类型擦除(Type Erasure)**实现,编译后泛型信息会被擦除,替换为原始类型(如 Object)或边界类型。泛型接口的边界控制:通过 extends 或 super 约束泛型类型,增强安全性。泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)通用数据存储接口:定义一个泛型接口用于存储和检索不同类型的数据。示例:限制类型为数值类型。
2025-04-19 19:05:12
787
原创 序列化和反序列化
Java类通过实现java.io.Serialization接口来启用序列化功能,未实现此接口的类将无法将其任何状态或者信息进行序列化或者反序列化。
2025-04-19 18:06:31
913
原创 设计模式基础概念(行为模式):责任链模式(Chain Of Responsibility)
是一种行为设计模式, 允许你。收到请求后,。该模式建议你将这些处理者连成一条链。链上的。除了处理请求外, 处理者还负责沿着链传递请求。请求会在链上移动, 直至所有处理者都有机会对其进行处理。
2024-10-27 20:45:07
957
1
原创 Pair的基本概念
实例化:实例化时可以使用MutablePair(可变二元组)和ImmutablePair(不可变二元组),一个可变,一个不可变。
2024-10-20 18:08:58
962
原创 三大编程思想(POP、OOP、AOP、FOP)及oop 五大设计原则
POP:面向过程编程(Procedure Oriented Programming)OOP:面向对象编程(Object Oriented Programming)AOP:面向切面编程(Aspect Oriented Programming)FOP:面向函数式编程(Functional Oriented Programming)
2024-10-19 22:01:56
1818
原创 限流是什么?如何限流?怎么限流?
上述方式使用RateLimiter的方式不够优雅,尽管我们可以把RateLimiter的逻辑包在service里面,controller直接调用即可,但是如果我们换成:自定义注解+切面 的方式实现的话,会优雅的多如何自定义注解?/*** 自定义注解可以不包含属性,成为一个标识注解*/@Inherited/*** 资源的key,唯一* 作用:不同的接口,不同的流量控制*//*** 最多的访问限制次数*//*** 获取令牌最大等待时间*//**
2024-10-17 22:44:09
2419
原创 设计模式基础概念(结构型模式):装饰模式 (Decorator)
是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。
2024-09-26 21:53:35
928
原创 一篇博客搞懂spring.factories的基本概念和使用
spring.factories 是,用于定义和加载 Spring Boot 自动配置类、监听器、环境后处理器等。它通常位于 META-INF 目录下。
2024-08-07 00:47:32
4309
原创 自定义注解基本概念和使用
interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)可以通过default来声明参数的默认值。语义清晰:自定义注解可以使代码的意图更加明确和可读。例如,使用 @Transactional 注解可以清晰地表明某个方法需要事务支持,而不需要查看AOP配置或切面代码。简化配置:可以简化配置,减少样板代码。
2024-08-06 23:49:13
932
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人