- 博客(45)
- 收藏
- 关注
原创 Redis面试小结
延迟双删的第一次删除并没有实际意义,第二次采用延迟删除主要是解决数据库主从同步的延迟问题,我认为这是数据库主从的一致性问题,与缓存同步无关。当然,这个过程也要加互斥锁,但由于重建缓存是异步的,而且获取锁失败也无需等待,而是返回旧数据,这样性能几乎不受影响。,当发现缓存未命中时需要先获取互斥锁,再重建缓存,缓存重建完成释放锁。时,大量请求涌入同时查询,发现缓存未命中都会去访问数据库,导致数据库压力激增。:缓存穿透,具体来说是因为请求访问到了数据库不存在的值,这样缓存无法命中,必然访问数据库。
2025-03-30 17:36:44
347
原创 RabbitMQ消息相关
答:RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;可以用它来:解耦、异步、削峰添谷。主要特性可伸缩性:集群服务【主从模式的】消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存**【队列的持久化、交换机的持久化、消息持久化】**为了提高并发能力,MQ的数据默认是在内存中存储的,包括交换机、队列、消息。这样就会出现数据安全问题,如果服务宕机,存储在MQ中未被消费的消息都会丢失。所以我们需要将交换机、队列、消息持久化到硬盘,以防服务宕机。
2025-03-29 11:57:19
1264
1
原创 缓存击穿【热点key问题】
缓存击穿就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
2025-03-28 08:00:00
210
1
原创 dubbo
*** @Description: 定义接口*//*** 定义远程调用方法* @return*/可能在以往的开发中我们只是知道三层架构【mapper、service、web】,那这里的face层是什么意思呢?- 被服务提供方依赖,按照face层的dubbo接口定义实现业务- 被服务消费方依赖,从face层的dubbo中选择自己的业务接口首先我们需要定义一个dubbo接口,那我们在哪里写能?从餐掌柜maven分层构建中我们可用发现,每个以开头的项目都是一个二级模块,并且模块中都有一个。
2025-03-27 07:32:44
921
原创 分布式事务
是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合。
2025-03-26 08:00:00
1202
1
原创 Mybatis中的动态SQL标签之foreach
foreach> foreach标签可以把传入的集合对象进行遍历,然后把每一项的内容作为参数传到sql语句中.这个if判断,集合的size要大于0。
2025-03-25 09:00:00
134
原创 SpringCloud之Gateway网关
扩展性:与 Spring Cloud 其他组件无缝集成,支持动态路由、限流、熔断等功能。高性能:基于 Reactor 和 Netty,性能优于传统的 Servlet 容器。3、过滤器链执行:在请求转发前后执行一系列过滤器(如日志记录、权限校验)2、路由匹配:根据预定义的路由规则,匹配目标服务。易用性:通过 YAML 配置即可完成复杂的功能。1、接收请求:网关接收到客户端到HTTP请求。5、返回响应:将目标服务的响应返回给客户端。灵活性:支持自定义过滤器和路由规则。4、转发请求:将强求转发到目标服务。
2025-03-25 08:30:00
886
原创 Mybatis中的动态SQL标签之include
include> include可以把大量的重复代码整理起来,当使用的时候直接include即可,减少重复代码的编写。这里是将太长的语句拆分出来,本质是一样的。
2025-03-25 08:00:00
139
原创 finally一定会执行嘛
finally 块通常用于释放资源或执行清理操作(如关闭文件流、数据库连接等),无论 try 块中的代码是否抛出异常,finally 块都会被执行。在 Java 中,finally 块的执行具有很高的优先级,但并不是绝对一定会执行。如果 finally 块位于一个守护线程中,而所有非守护线程已经结束,JVM 会退出,导致 finally 块无法执行。因此,在编写代码时,尽量避免上述特殊情况,确保 finally 块能够正常执行以完成必要的清理工作。
2025-03-25 07:15:00
245
原创 Spring Cloud 相关面试题
当微服务中,高并发的数据库访问量导致服务线程阻塞,使单个服务宕机,服务的不可用会蔓延到其他服务,引起整体服务灾难性后果,使用服务降级能有效为不同的服务分配资源。雪崩效应是在大型互联网项目中,当某个服务发生宕机时,调用这个服务的其他服务也会发生宕机,大型项目的微服务之间的调用是互通的,这样就会将服务的不可用逐步扩大到各个其他服务中,从而使整个项目的服务宕机崩溃。提供的成熟对的路由方案,他会根据请求的路径不同,网关会定位到指定的微服务,并代理请求到不同的微服务接口,他对外隐蔽了微服务的真正接口地址。
2025-03-21 08:30:00
739
原创 JVM相关、一千万条数据的表, 如何分页查询
数据量过大的情况下, limit offset 分页会由于扫描数据太多而越往后查询越慢. 可以配合当前页最后 一条ID进行查询, SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT} . 当然, 这种情况下ID必须 是有序的, 这也是有序ID的好处之一。
2025-03-21 07:23:49
548
原创 MySQL查询语句之like
创建一张user表,并插入数据,脚本如下:执行完脚本后打开user表: 如下图:查询语句:查询结果:查询语句:查询结果:查询语句:查询结果:
2025-03-16 17:57:33
137
原创 JVM相关面试题
共享: 堆 方法区私有: Java虚拟机栈 本地方法栈 程序计数器程序计数器:当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令;Java虚拟机栈: 描述方法相关数据执行方法前创建栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息;执行方法时:栈帧入栈执行完毕方法:栈帧出栈。
2025-03-09 17:13:02
785
1
原创 什么是单例模式?有几种?
单例模式有饿汉式单例模式、懒汉式单例模式和双检锁单例模式三种。单例模式:某个类的实例在 多线程环境下只会被创建一次出来。懒汉式:非线程安全,延迟初始化。:线程安全,一开始就初始化。双检锁:线程安全,延迟初始化。
2025-02-22 20:55:05
163
原创 Mybatis缓存机制
它们的作用是减少数据库查询次数,提高性能。然而,在某些情况下,缓存会失效或被清空。了解这些缓存失效的情形有助于更好地控制缓存行为,避免因缓存不一致导致的数据错误。在 MyBatis 中,缓存分为。9. 自定义缓存实现问题。2. 执行增删改操作。1. 未启用二级缓存。4. 执行增删改操作。8. 跨命名空间访问。
2025-02-22 16:39:18
699
原创 Mybatis常用动态 SQL 相关标签
上述示例中,如果name不为null,并且不为空时,则拼接条件name进行查询。通过这些标签,MyBatis 可以灵活地生成动态 SQL,满足复杂的业务需求。用于在 SQL 中创建变量,通常结合其他标签使用,比如正则表达式匹配。用于自定义动态 SQL 的前缀和后缀,可以灵活控制生成的 SQL。如果name不为空且email不为空,则根据email查询。如果name和email都为空,则查询age大于0的。用于条件判断,当满足条件时执行对应的 SQL 片段。如果name不为空,则根据name查询。
2025-02-22 12:21:12
467
原创 spring框架中Spring Validation的注解校验
在进行业务分析时发现当前业务所有的属性都应当有值,因此在设置数据库中的表结构时,也设置了所有属性都是必填。属性又比较多,如果通过一个个的if判断会显得代码比较多,因此考虑到使用注解进行校验属性是否为空。
2024-08-17 16:35:13
296
3
原创 async、await和Promise
当一个函数被声明为异步函数时,它会返回一个Promise对象。即使函数内部没有显式地返回一个Promise,它也会返回一个解析为。是 JavaScript 中用于异步编程的一个对象,它代表了一个最终可能完成(fulfilled)或失败(rejected)的异步操作及其结果值。在调用API返回的数据前添加,getInfo方法本身不会返回Promise结果,而是仅仅在.then()内部处理。在方法前添加即可,这表明整个方法是一个异步函数,该函数能够返回一个Promise的结果。方法来处理成功和失败的情况。
2024-08-17 11:36:48
497
转载 CompletableFuture原理与实践-外卖商家端API的异步化
CompletableFuture是由Java 8引入的,在Java8之前我们一般通过Future实现异步。
2024-06-02 23:00:00
132
1
原创 Java的基础入门
数据结构+扩容情况+put查找的详细过程+哈希函数+容量为什么始终都是2^N,JDK1.7与1.8的区别。参考:https://www.jianshu.com/p/9fe4cb316c05HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据。默认的负载因子是0.75,如果数组中已经存储的元素个数大于数组长度的75%,将会引发扩容操作。【1】创建一个长度为原来数组长度两倍的新数组。【2】1.7采用Entry的重新hash运算,1.8采用高于运算。
2024-06-01 15:05:19
681
原创 前端el-table-column使用template的新发现哈哈哈
在 Vue 和 Element UI 中,不能在同一个 el-table-column 中直接放置多个 template 标签,除非每个 template 标签都使用了不同的具名插槽。通过使用具名插槽(slot)区分它们
2024-06-01 12:19:14
1918
原创 前端splice函数学习
第二个参数代表要删除【几个】元素(注意是几个元素,不是第几个)第三个参数【...item】代表后面可以添加多个元素;使用场景:动态列删除。第一个参数代表处理的数组中下标值,
2024-05-29 22:31:10
360
原创 前端使用el-table自带排序功能注意
前端排序如果不考虑分页数据,则不用处理。如果需要考虑到分页后的数据也要排序,那么要考虑调用后端重新排序了。那就要使用到在 Table 上监听sort-change事件进行处理了
2024-05-29 22:12:45
800
原创 后端如何保证接口的幂等性
说在前面:这个只是简单的测试而已,好多都没有考虑.以上只是简单的一个demo,在实际开发中,我们还要考虑的更多,比如说方法名称是不是可能重复即方法是否重载等。我这里只是最简单的自我测试和学习。
2024-05-19 19:11:33
205
原创 集合(必会)
Java集合框架是Java平台的核心特性之一,它提供了用于存储和操作对象的高效、灵活的工具。集合框架包括一系列接口和类,它们定义了存储、检索、遍历和操作对象的标准方法。
2024-05-19 19:05:55
810
原创 java根据模板导出数据XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCellStyle
使用XSSFWorkbook、XSSFCellStyle、XSSFSheet、XSSFRow、CellRangeAddress根据模板导出excel数据
2024-04-21 12:15:03
1490
2
原创 前端表单防抖\节流
前端防抖是一种常用的技术,用于减少频繁触发的事件的性能消耗。当一个事件频繁触发时,可以使用防抖来限制事件的触发频率,只在指定的时间间隔内执行一次。setTimeout和clearTimeout来控制定时器的执行和清除。前端在utils报下创建一个validate.js文件,写如下函数。前端节流的主要方式是通过控制函数的执行频率来减少函数的调用次数。在提交表单处引入该文件,并调用该函数方法。
2024-04-14 18:48:33
218
1
原创 springboot整合EasyRules读取规则文件rule.json【简单实现】,EasyRules规则引擎读取配置json文件
规则引擎EasyRules入门。springboot整合EasyRules读取规则文件rule.json【简单实现Demo】
2024-01-07 16:05:33
1318
1
原创 表单验证输入框必填校验,输入框中存在值时,校验的提示还一直展示,校验如果有值则是必填项,并且输入的值是正确的;如果没有值,不校验
form表单校验,表单校验某个指定属性,表单校验有值时,校验提示信息没有清除。表单中如果有值必须校验,没有值不校验
2024-01-07 15:28:03
1656
1
原创 org.springframework.web.util.NestedServletException:PlainSelect.getGroupByColumnReferences()Ljava/ut
pagehelper-spring-boot-starter和mybatis依赖org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError:net.sf.jsqlparser.statement.select.PlainSelect.getGroupByColumnReferences()Ljava/util/List
2023-08-12 14:46:49
1044
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人