- 博客(39)
- 收藏
- 关注
原创 认识 Promise
最常见的一个场景就是 ajax 请求,通俗来说,由于网速的不同,可能你得到返回值的时间也是不同的,这个时候我们就需要等待,结果出来了之后才知道怎么样继续下去。在 ajax 的原生实现中,利用了 事件,当该事件触发并且符合一定条件时,才能拿到想要的数据,之后才能开始处理数据,这样做看上去并没有什么麻烦,但如果这个时候,我们还需要另外一个 ajax 请求,这个新 ajax 请求的其中一个参数,得从上一个 ajax 请求中获取,这个时候我们就不得不等待上一个接口请求完成之后,再请求后一个接口。当出现第三个 a
2025-04-03 21:30:09
414
原创 原生 AJAX
XML可扩展标记语言。XML 被设计用来传输和存储数据。XML 和 HTML 类似,不同的是 HTML 中都是预定义标签,而 XML 中没有预定义标签,全都是自定义标签,用来表示一些数据。用途XML:主要用作数据存储和数据交换的格式。通常用于各类应用程序之间的数据传递。例如,网络服务(Web Services)中,SOAP(简单对象访问协议)使用 XML 格式来封装消息内容。HTML:主要用于展示数据和内容。HTML 文档定义了网页的结构,它和浏览器一起使得用户可以在互联网上浏览各种信息和资源。
2025-04-03 21:25:56
961
原创 缓存 “三剑客”
布隆过滤器(Bloom Filter)是一种数据结构,用于快速判断一个元素是否属于一个集合中。它使用多个 Hash 函数将一个元素映射成一个位阵列(Bit array)中的一个点,将 Bit array 理解为一个二进制数组,数组元素是 0 或 1。当一个元素加入集合时,通过 N 个散列函数将这个元素映射到一个 Bit array 中的 N 个点,把它们设置为 1。
2025-03-31 11:12:19
1164
原创 Canal + MQ 环境配置
在 MySQL 中需要创建一个用户,并授权授权*.*表示所有库在 MySQL 配置文件 my.cnf 设置如下信息binlog 日志最大保存 100M,是为了方便测试,根据项目需求进行修改。
2025-03-31 10:50:49
708
原创 Elasticsearch 高级
Elasticsearch 中的nested类型允许你在文档内存储复杂的数据结构,比如一个用户可能有多个地址,或者一个博客文章可能有多个标签等。nested类型可以让你索引这些复杂数据,并且允许你对嵌套的数据进行查询。在设置索引映射时自定义同义词分词器,并且用于 “title” 字段的搜索。},},"title": {是自定义的词汇过滤器;是自定义的分析器,包含并引用了;updateable指示能否动态更新,必须为true才能动态更新同义词;指示同义词文件的位置;分析器里用ik_smart。
2025-03-29 22:36:30
871
原创 Elasticsearch 搜索高级
大多数情况下,我们采用普通分页就可以了。查看百度、京东等网站,会发现其分页都有限制。例如百度最多支持 77 页,每页不足 20 条。京东最多 100 页,每页最多 60 条。因此,一般我们采用限制分页深度的方式即可。所谓的地理坐标查询,其实就是根据经纬度查询携程:搜索我附近的酒店滴滴:搜索我附近的出租车微信:搜索我附近的人。
2025-03-28 21:03:03
1304
原创 Elasticsearch 的搜索功能
使用 Elasticsearch 最终目的是为了实现搜索功能,现在先将文档添加到索引中,接下来完成搜索的方法。叶子查询:叶查询子句在特定字段中查找特定值,例如matchterm或range查询。精确查询:根据精确词条值查找数据,一般是查找 keyword、数值、日期、boolean 等类型字段。例如:ids:根据文档 ID 查找文档range:返回包含指定范围内的文档,比如:查询年龄在 10 到 20 岁的学生信息。term:根据精确值(例如价格、产品 ID 或用户名)查找文档。
2025-03-27 00:15:39
1328
原创 Elasticsearch 入门
查询效率较低由于数据库模糊查询不走索引,在数据量较大的时候,查询性能很差。功能单一数据库的模糊搜索功能单一,匹配条件非常苛刻,必须恰好包含用户搜索的关键字。
2025-03-25 21:49:23
1022
原创 MQ 消息幂等性保证
在程序开发中,是指同一个业务,执行一次或多次对业务状态的影响是一致的。在实际业务中,避免不了出现用户连续点击退款、重复点击删除等情况,这种情况下,就需要对多个消息进行处理,避免短时间内多次执行相同业务(类似于如:幂等性操作非幂等性操作增加:多次执行,会插入多条数据即使使用唯一约束,也只能解决一部分情况更新。
2025-03-24 22:49:51
606
原创 MQ 消息持久化方案
创建交换机、队列、消息进行持久化交换机、队列默认就是持久化的消息持久化生产者开启确认机制开启消息发送失败的重试策略设置重试次数和重试间隔比例耗尽重试次数后,依旧失败,记录失败消息到数据库失败消息表,用于后期执行补偿错误。如使用定时任务去扫描这个表,重新发送消息开启 confirm 机制:保证消息正确到达交换机返回 ack,正确到达返回 nack,没有到达交换机,写入数据库,后期重试开启 return 机制保证消息正确到达队列。
2025-03-24 22:21:46
791
原创 微服务的网关配置
Component@Slf4j@Override// 编写过滤器逻辑log.info("打印全局过滤器");// 放行// 拦截// 修改状态码@Override// 过滤器执行顺序,值越小,优先级越高return 0;全局过滤器不用在路由中配置。// 配置拦截路径@Data:路由过滤器作用范围比较灵活,可以是任意指定的路由Route继承,并在路由配置中指定过滤器。过滤器的名称规则:以作为后缀。:全局过滤器作用范围是所有路由,不可配置。
2025-03-19 00:08:45
1055
原创 解决分布式事务的方案 —— Seata
解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在 2019 年开源的 Seata 了。
2025-03-17 23:50:47
1071
原创 MySQL 的索引机制
索引是数据库管理系统(DBMS)中用于加快数据检索速度的一种数据结构。它通过创建一个指向数据库表中数据值的 “快照” 来提高查询效率,使得数据库能够更快地找到和访问所需的数据行,而无需扫描整个表。创建索引在创建表时,如果添加了主键和唯一约束,就会默认创建:主键索引、唯一索引。查看索引删除索引。
2025-03-11 23:16:17
1051
原创 数据库存储引擎中 InnoDB 和 MyISAM 的区别?
InnoDB 和 MyISAM 是MySQL数据库中两种常用的存储引擎,它们各自具有不同的特点和适用场景。:允许更高的并发性,因为只有修改的特定行被锁定,其他行仍可以进行读写操作;自 MySQL 5.5 起,InnoDB 成为了默认的存储引擎。综上所述,选择哪种存储引擎应根据应用的具体需求来决定。从 MySQL 5.6 版本开始支持全文索引。:提供了完整的提交、回滚和崩溃恢复能力;:有助于保持数据的参照完整性;:索引跟数据在同一个文件;
2025-03-10 00:18:16
404
原创 Java 中数据脱敏的实现
*** 举例:身份证号脱敏处理* @return: String 脱敏后的结果* @param: value 需要被序列化的字符串对象* @param: jsonGenerator Json 生成器对象,用于生成 JSON 字符串* @param: serializerProvider 序列化提供者,用于提供序列化相关的上下文信息*/@Overrideif(value!这里以身份证号进行举例在需要脱敏的字段上添加注解/** 姓名 */
2025-03-08 23:35:32
684
原创 什么是 spring 的循环依赖?
Spring 通过三级缓存机制解决了单例 Bean 之间的循环依赖问题,但对于原型 Bean 或构造器注入的场景,Spring 无法解决循环依赖。开发时应尽量避免循环依赖,保持代码的清晰性和可维护性。
2025-03-07 23:43:53
1171
原创 java中实体类常见的设计模式
虽然使用了 Set 链式编程、构建者设计模式 能更方便快捷的实现一个类,但是也产生了与 Lombok 之间的冲突,导致不能直接使用类似@Data等注解生成一些方法,但这个问题总的来说,是可以忽略的。毕竟鱼和熊掌不可兼得,合适的场景使用合适的方法即可。
2025-03-06 22:19:54
935
原创 SpringTask 引起的错误
在使用 SpringBoot 编写后台程序时,当在浏览器页面中发起请求时,MP 自动填充来完成一些字段的填充,例如创建时间、创建人、更新时间、更新人等。但是当编写微信小程序时,由于一些字段无法进行自动填充,例如创建人、更新人等,这时需要进行处理,来区分是否为微信端的请求但是此时,就会产生一个:当在浏览器端(后台管理端)使用定时任务时(这里以 SpringTask 举例),就会出现异常提示 “当前请求并未为 Web 请求”,后来经过层层排查,发现是自动填充处使用了来获取当前请求详情。在场景中,
2025-03-06 00:07:38
1000
原创 SpringBoot 中测试类找不到主配置类
注解的类来确定应用程序的上下文。通常,Spring Boot 测试需要能够找到主应用程序类(通常是带有。注解进行 Spring Boot 测试时,特别是在多模块开发中,容易出现 Spring Boot。:如果你的主应用程序类不在自动查找的路径下,或者你希望明确指定,可以在。:确保你的项目中有一个主应用程序类,该类通常位于项目的根包下,并带有。注解的类),以便正确地加载应用程序上下文。:如果你有自定义的配置类,可以使用。替换为你的实际主应用程序类名。(主配置类通常是指带有。替换为你的实际类名。
2025-03-03 23:20:34
290
原创 JUnit 版本影响 Bean 找不到
这时运行测试方法时,提示 “No ParameterResolver registered for parameter” 的错误。这是由于 JUnit 5 默认情况下并不提供自动解析构造函数参数的能力。在为实现类编写测试类时,在测试类中使用。最简单的解决方法:换为。
2025-03-03 23:15:14
249
原创 @Autowired 和 构造器 注入 Bean 有什么区别
构造器注入是更推荐的方式,尤其在注重代码质量、可测试性和可维护性的场景中。@Autowired注解可以作为补充,在特定场景下简化开发流程。在实际开发中,根据项目的复杂度和需求选择合适的注入方式,并遵循良好的设计原则,能够帮助写出更优雅、更健壮的代码。
2025-03-03 23:14:19
848
原创 如何保证 Redis 缓存和数据库的一致性?
具体选择哪儿种解决方案,要根据具体业务场景、项目的需求,以及整体的架构等多种因素去综合考虑,比如是否是高并发、是否要考虑低延迟等等因素。脱离业务谈技术,就是耍流氓。
2025-03-01 15:10:01
1454
原创 SpringBoot 中的 Redis 序列化
除了默认的序列化方式,开发者还可以根据具体需求自定义序列化方式。例如,可以使用 JSON 格式将 Java 对象转换为字符串,然后再将字符串转换为字节数组进行存储和传输。这种方式可以提高数据的可读性和跨平台性。// 使用 StringRedisSerializer 来序列化和反序列化 redis 的 key 值// Hash 的 key 也采用 StringRedisSerializer 的序列化方式节省内存空间。
2025-02-27 22:26:38
1057
原创 IOC 和 DI 详解及其简单用法
IOC 控制反转,就是将对象的控制权交给 Spring 的 IOC 容器,由 IOC 容器创建及管理对象。IOC 容器创建的对象称为 bean 对象。
2025-02-26 23:44:58
1148
原创 Linux 常用命令
作用:vi 命令是 Linux 系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于 Windows 中的记事本说明:vim 是从 vi 发展来的一个功能更加强大的文本编辑工具,编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,所以实际工作中 vim 更加常用。要使用 vim 命令,需要我们自己完成安装。
2025-02-25 23:25:17
783
原创 Springboot 自动化装配的原理
SpringBoot 主要作用为:起步依赖、自动装配。而为了实现这种功能,SpringBoot 底层主要使用了。这个注解通常被用在主启动类上,用于开启 SpringBoot 的自动配置和组件扫描。
2025-02-25 23:11:58
447
原创 若依框架集成阿里云OSS
由于之前的图片访问是本地的路径和服务,需要向后端发起请求才能获取图片,现在我们使用了 OSS,图片可以直接通过互联网访问,无需再次访问后端服务,所以需要修改前端的图片访问逻辑。基于以上原因,企业中很多的文件都会存储到 OSS 中,OSS 可以解决以上所有的问题,并且成本也不高,下面我们就把阿里的 OSS 集成到若依项目中。在导入依赖操作时,不要着急依赖刷新,由于 OSS 模块并没有创建,肯定会报错!在 zzyl-common 模块中导入依赖。在 zzyl-admin 模块中导入依赖。
2025-02-23 12:19:51
1274
原创 MyBatis-Plus 的自动填充 —— 值为null
MyBatis-Plus 提供的字段自动填充功能是一种非常实用的特性,它能够在插入或更新数据库记录时自动填充一些公共字段,如创建时间(createTime)、更新时间(updateTime)、创建人(createBy)、更新人(updateBy)等。注解,来标明哪些字段是需要自动填充的,并且需要指定填充策略。这个方法会强制在更新操作时填充字段,只要字段存在。在前端传递的数据中,直接将要填充的字段清除,即不传递。但是在这种填充情况下,可能会遇到一个问题,在使用。方法在更新的时候对指定字段填充时,即使。
2025-02-23 11:11:13
804
原创 自定义 starter - SpringBoot 的起步依赖
所谓 starter 指的就是 SpringBoot 当中的起步依赖。在 SpringBoot 当中已经给我们提供了很多的起步依赖了,我们为什么还需要自定义 starter 起步依赖?这是因为在实际的项目开发当中,我们可能会用到很多第三方的技术,并不是所有的第三方的技术官方都给我们提供了与 SpringBoot 整合的 starter 起步依赖,但是这些技术又非常的通用,在很多项目组当中都在使用。首先先了解官方、第三方提供的起步依赖的框架是怎么设计的。在 Springboot 中,官方提供的起步依赖 或 第
2025-01-21 00:26:43
998
原创 AOP 进阶
execution切入点表达式根据我们所指定的方法的描述信息来匹配切入点方法,这种方式也是最为常用的一种方式如果我们要匹配的切入点方法的方法名不规则,或者有一些比较特殊的需求,通过execution切入点表达式描述比较繁琐annotation切入点表达式基于注解的方式来匹配切入点方法。这种方式虽然多一步操作,我们需要自定义一个注解,但是相对来比较灵活。我们需要匹配哪个方法,就在方法上加上对应的注解就可以了根据业务需要,可以使用&&||!来组合比较复杂的切入点表达式。
2025-01-17 20:38:01
1367
原创 AOP 基础
AOP:AspectOrientedProgramming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。:Spring支持AOP,允许开发者定义方法拦截器和切入点,从而干净地分离横切关注点(如日志记录、事务管理等),而不需要修改业务逻辑。
2025-01-17 20:33:42
581
原创 java 中的身份校验技术,配合使用 Filter 技术、Interceptor 技术
,用于在网络应用环境间安全地传输信息,特别是在身份验证和授权机制中广泛应用。JWT定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能使用了过滤器之后,要想访问web服务器上的资源,必须先经过滤器,过滤器处理完毕之后,才可以访问对应的资源。
2025-01-16 23:56:33
928
原创 会话技术介绍
什么是会话?知道了会话的概念了,接下来我们再来了解下会话跟踪。:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
2025-01-16 20:50:45
853
1
有人知道这两个孔是干什么用的吗
2023-05-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人