- 博客(69)
- 资源 (1)
- 收藏
- 关注
原创 工作中常用的软件架构设计方法
这些软件设计方法是经过实践验证的最佳实践,开发者在实际工作中应根据具体的业务场景灵活选择合适的设计方法,而不是强行套用。掌握这些设计方法可以帮助开发者构建高性能、高可用、可扩展的高质量软件系统。
2026-02-24 23:26:48
962
原创 深入理解MySQL三大日志:binlog、undolog、redolog,吃透事务与数据安全核心
MySQL数据库通过binlog、undolog和redolog三大日志协同工作,保障数据安全与一致性。redolog作为物理日志确保事务持久性,通过WAL机制防止宕机数据丢失;undolog作为逻辑日志支持事务回滚和MVCC多版本控制;binlog则用于主从复制和数据恢复。三者在事务执行中分工明确:redolog记录物理修改,undolog保存反向操作,binlog存储SQL逻辑。理解它们的差异与协作机制(如两阶段提交)对排查主从同步、数据恢复等问题至关重要,也是掌握MySQL核心原理的关键。
2026-02-01 19:05:32
1070
原创 详解 RabbitMQ防止数据丢失问题
RabbitMQ消息防丢失机制主要包括三个方面:1)消息持久化,通过设置Exchange和Queue的持久化属性防止服务器重启导致数据丢失;2)生产者确认机制(confirm模式),利用回调函数确保消息成功投递到服务器;3)消费者ACK机制,通过手动确认模式确保消息被正确处理。文章详细介绍了每种机制的实现方式,并指出了实际应用中可能遇到的坑,如消息重试导致的死循环、性能下降等问题。最后强调需要根据业务场景在数据可靠性和系统性能之间做出权衡。
2026-01-20 13:26:24
607
原创 深入浅出MySQL InnoDB MVCC机制:高并发的核心密码
MVCC是InnoDB高并发能力的基石,其本质是“通过多版本存储+可见性判断,实现读写解耦”。核心依赖三大组件:隐藏列标记版本身份,Undo Log存储历史版本,Read View控制可见性;而Read View的生成时机,决定了事务隔离级别的表现。理解MVCC不仅能应对面试,更能在实际开发中排查并发问题(如脏读、不可重复读)、优化SQL性能。希望本文能帮你彻底吃透这一核心机制,欢迎留言讨论交流~
2026-01-16 20:00:00
1348
原创 PostgreSQL项目必备扩展清单:从基础到进阶,覆盖80%开发场景
shared_preload_libraries = 'pg_stat_statements' # 开启扩展(若已有其他值,用逗号分隔)shared_preload_libraries = 'pg_stat_statements' # 开启扩展(若已有其他值,用逗号分隔):bf算法的强度(第二个参数,如$2a$06$中的06)可调整,范围04-31,数值越大加密/验证耗时越长,建议选06-10。SELECT soundex('张三') = soundex('张叁') AS is_match;
2026-01-07 16:39:48
962
原创 Camunda实战指南:从入门到进阶
Camunda是企业级流程自动化平台,基于BPMN2.0、DMN1.3和CMMN1.1标准构建,提供流程执行、决策管理和案例处理能力。核心架构包含引擎层(BPMN/DMN/CMMN)、服务层(5大核心服务)和工具链(建模/运维工具)。特色功能包括:事务子流程、动态决策规则管理、非结构化案例处理;支持多种部署方式(Docker/集群);提供消息中间件集成和性能优化方案。典型应用场景涵盖金融审批、电信工单等业务系统,未来将向AI集成、云原生方向发展。
2025-11-04 09:49:30
1037
原创 Vue 事件总线深度解析:从实现原理到工程实践
推荐使用场景不推荐使用场景简单的兄弟组件通信全局状态管理(如用户登录态)跨页面轻量数据传递(H5 / 小程序)复杂状态逻辑(需要 mutation/action)临时的组件间协作多层级、多组件共享状态事件总线的核心价值在于快速实现轻量通信,但随着项目规模扩大,需注意:事件命名空间化(避免命名冲突)严格的监听器移除机制与 Vuex 等方案的合理结合。
2025-07-05 09:01:50
656
原创 【无标题】微信支付 v3请求构造异常! Illegal key size问题解决
本地测试微信支付正常,但线上环境报错"v3请求构造异常"和"Illegal key size"。经排查发现是Java环境加密策略限制导致。解决方法:根据不同JDK版本,下载Java Cryptography Extension (JCE)无限制权限策略文件,替换$JAVA_HOME/jre/lib/security目录下的jar文件;或对于JDK8u151+版本,只需修改java.security配置文件解除注释crypto.policy=unlimited即可。该问题是由于默认Java加密策略对密钥长度有
2025-05-30 15:01:19
946
原创 Redis SETNX:分布式锁与原子性操作的核心
Redis中的SETNX命令(Set if Not Exists)是一种原子性操作,用于在键不存在时设置值,常用于分布式锁和幂等性控制。其核心特性是保证并发环境下只有一个客户端能成功设置值(返回1),其他客户端失败(返回0)。典型应用包括分布式锁、防止重复操作和资源抢占。但早期方案存在死锁风险(无法自动释放锁)和过期时间设置非原子性问题。现代Redis推荐使用带NX和EX参数的SET命令替代,实现加锁与设置过期时间的原子操作,避免死锁。SETNX虽被取代,但仍是理解分布式锁底层机制的关键。<|end▁
2025-05-21 18:48:40
1861
原创 Fastjson 从多层级的JSON数据中获取特定字段的值
使用 Fastjson 的可以通过直接定位多层级 JSON 中的目标字段,避免逐层调用的繁琐操作。
2025-05-06 17:29:49
1540
原创 Vue 3 reactive 和 ref 区别及 失去响应性问题
在 Vue 3 中,reactive和ref是实现响应式数据的两个核心 API,它们的设计目标和使用场景有所不同。ProxyvalueProxyReflectreactive.valuereactive仅用于(包括普通对象、数组、MapSet等),无法直接处理基本类型(如stringnumberbooleanjavascript可处理(基本类型或对象)。对于对象,ref内部会自动通过reactive转为响应式代理(即 “自动解包”)。
2025-04-17 18:33:55
3336
原创 切面相关知识回顾
AOP代理(AOP Proxy):由AOP框架创建的对象,用于实现切面功能。连接点(Joinpoint):程序执行过程中的特定点,如方法调用。@After:后置通知,在方法执行后执行(无论是否抛出异常)@Around:环绕通知,可以控制方法执行的全过程。@target:匹配目标对象带有指定注解的连接点。@within:匹配带有指定注解的类型内的连接点。@annotation:匹配带有指定注解的连接点。通知(Advice):在特定连接点执行的动作。@args:匹配参数带有指定注解的连接点。
2025-04-16 10:55:02
390
原创 记一次gitlab服务器负载过高问题处理
调整 Unicorn 配置:unicorn.rb 是 Unicorn 服务器的配置文件,可尝试减少 Unicorn 工作进程的数量。编辑 /var/opt/gitlab/gitlab - rails/etc/unicorn.rb 文件,降低 worker_processes 的值。服务器上进程 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru。
2025-04-07 20:42:16
696
原创 fastadmin图片前台导出
参考 https://github.com/hhurz/tableExport.jquery.plugin#options。exportOptions:参数如下。
2025-02-11 16:05:55
411
原创 uniapp button按钮去掉默认样式
有时候要使用uniapp官方提供的客服和分享功能,需要用到button按钮,里面属性open-type正好可以实现这些功能,不得不使用这种方式。但是这种方式,uniapp官方默认为button按钮加了些样式,自己写的样式也无法进行完全覆盖,所以今天分享一个覆盖官方button按钮的样式。
2025-01-20 10:22:19
1440
原创 华为云检查服务器状态
VNC方式登录云服务器正常,但无法通过远程桌面连接方式登录云服务器时,推荐您按照以下思路排查问题。以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。可能原因处理措施资源状态异常:资源冻结;未开机。只有状态为“运行中”的云服务器才允许用户登录,详细操作请参考。登录使用的用户名称或密码错误。Linux实例用户名:root,密码错误通过“重置密码”重新设置登录密码。详细操作请参考。
2024-12-18 21:18:50
1430
原创 MyBatis 中 Association 和 Collection 的使用方法及区别
主要用于处理一对一的关联关系。例如,在一个简单的用户系统中,一个用户可能对应一个用户详情(如用户的扩展信息),这种关系就可以通过。是两个非常重要的概念。它们能够帮助我们高效地获取和处理与主实体相关的其他实体信息。用于处理一对多的关联关系。例如,一个用户可能有多个订单,这种用户和订单之间的一对多关系就可以通过。,在实际的开发中能够根据具体的关联关系类型灵活地选择和应用它们。)的关系,正确地使用它们可以让我们的持久层代码更加清晰和高效。在 MyBatis 的世界里,当处理数据库中的关联关系时,
2024-11-08 15:56:00
1440
原创 Java 中的 Arrays.sort () 方法:排序的利器
是一个静态方法,位于类中。它的主要功能就是对数组进行排序,无论是基本数据类型的数组还是对象数组,都能轻松应对。当对象没有实现Comparable接口或者我们想要自定义排序规则时,可以传入一个Comparator接口的实现。例如,我们有一个自定义的Person类:javaCopyreturn age;如果我们想根据年龄对Person对象数组进行排序,可以这样做:javaCopy@Override});在这个示例中,我们通过自定义的Comparator实现了根据年龄对。
2024-11-05 21:13:04
1445
原创 加油站问题(134)
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。
2024-11-05 21:07:46
634
原创 HttpClient
HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。发送HTTP请求接收响应数据</</</</HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。HttpClients:可认为是构建器,可创建HttpClient对象。CloseableHttpClient:实现类,实现了HttpClient接口。
2024-10-16 21:49:07
550
原创 Spring Cache基础使用
1.1 介绍1.2 常用注解1.3 入门案例Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。EHCacheCaffeineRedis(常用)</</</</
2024-10-16 21:48:40
984
原创 DTO VO 与 POJO
定义:VO是视图层传的数据的模型,表示值的对象。目的:VO的主要目的是封装一些数据,并将其作为单个不可变实体进行传递和使用,在软件开发中用于在视图层展示和传输数据。目的:DTO的主要目的是在不同层之间传递数据,实现层与层之间的解耦,降低层之间的耦合度,提高代码的可维护性和可读性。定义:PO是持久化对象的简称,与数据库表中的记录相对应的对象。它通常用于数据访问层或持久层,表示数据库中的实体。DTO的属性通常与业务实体对象(如数据库实体)相对应,但可能只包含业务实体的子集,用于满足特定层的数据需求。
2024-09-29 08:58:41
602
原创 Swagger 使用介绍
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(它的主要作用是:使得前后端分离开发更加方便,有利于团队协作接口的文档在线自动生成,降低后端开发人员编写接口文档的负担功能测试Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。
2024-09-25 21:23:51
1515
原创 springBoot 异常处理
定义全局异常处理器非常简单,就是定义一个类,在类上加上一个注解@RestControllerAdvice,加上这个注解就代表我们定义了一个全局异常处理器。在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注解@ExceptionHandler。通过@ExceptionHandler注解当中的value属性来指定我们要捕获的是哪一类型的异常。//处理异常@ExceptionHandler(Exception.class) //指定能够处理的异常类型//打印堆栈中的异常信息。
2024-09-25 17:53:56
410
原创 spring AOP
什么是AOP?AOP英文全称:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。AOP的作用:在程序运行期间在不修改源代码的基础上对已有方法进行增强(无侵入性: 解耦)AOP面向切面编程和OOP面向对象编程一样,它们都仅仅是一种编程思想,而动态代理技术是这种思想最主流的实现方式。而Spring的AOP是Spring框架的高级技术,旨在管理bean对象的过程中底层使用动态代理机制,对特定的方法进行编程(功能增强)。
2024-09-24 13:50:22
835
原创 Spring事务
当调用 deptLogService.insert(deptLog) 时,也会创建一个新的事务,那此时,当insert方法运行完毕之后,事务就已经提交了。即使外部的事务出现异常,内部已经提交的事务,也不会回滚了,因为是两个独立的事务。@Transactional注解:我们一般会在业务层当中来控制事务,因为在业务层当中,一个业务功能可能会包含多个数据访问的操作。Propagation.REQUIRES_NEW :不论是否有事务,都创建新事务 ,运行在一个独立的事务中。什么是事务的传播行为呢?
2024-09-24 11:11:29
1554
原创 过滤器Filter 与 拦截器Interceptor
Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能使用了过滤器之后,要想访问web服务器上的资源,必须先经过滤器,过滤器处理完毕之后,才可以访问对应的资源。过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。第1步,定义过滤器 :1.定义一个类,实现 Filter 接口,并重写其所有方法。
2024-09-19 21:57:04
1021
原创 cookie session 与 JWT
签名的目的就是为了防jwt令牌被篡改,而正是因为jwt令牌最后一个部分数字签名的存在,所以整个jwt 令牌是非常安全可靠的。一旦jwt令牌当中任何一个部分、任何一个字符被篡改了,整个令牌在校验的时候都会失败,所以它是非常安全可靠的。PS:Session 底层是基于Cookie实现的会话跟踪,如果Cookie不可用,则该方案,也就失效了。JWT的组成: (JWT令牌由三个部分组成,三个部分之间使用英文的点来分割)稍后我们再来学习如何来生成jwt令牌,以及如何来校验jwt令牌。
2024-09-19 21:30:38
912
原创 mybaits相关基础
如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)在xml映射文件中配置的SQL,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码。XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。:动态的在SQL语句中插入set关键字,并会删掉额外的逗号。标签:就是用于编写select查询语句的。
2024-09-11 22:55:45
1195
原创 lombok 相关基础
Lombok是一个实用的Java类库,可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。注解作用为所有的属性提供get/set方法@ToString会给类自动生成易阅读的 toString 方法根据类所拥有的非静态字段自动重写 equals 方法和 hashCode 方法@Data。
2024-09-11 22:28:57
491
原创 Spring IOCDI相关注解
指定当前要注入的bean对象。在@Qualifier的value属性中,指定注入的bean的名称。@Primary(当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现)那如果在IOC容器中,存在多个相同类型的bean对象,会出现什么情况呢?是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作)面试题 : @Autowird 与 @Resource的区别。@Autowired注解,默认是按照。
2024-09-07 14:50:53
613
原创 spring请求参数获取
通过Servlet中提供的API:HttpServletRequest(请求对象),获取请求的相关信息。2. SpringBoot方式2.1 参数名不一致注意事项:@RequestParam中的required属性默认为true(默认值也是true),代表该请求参数必须传递,如果不传递将报错如果该参数是可选的,可以将required属性设置为false2.2 实体参数在使用简单参数做为数据传递方式时,前端传递了多少个请求参数,后端controller方法中的形参就要书写多少个。如果请求参数
2024-09-06 23:45:00
1173
原创 explain 详解
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈。在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL。注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。
2022-12-22 19:11:06
434
1
原创 Mysql生成环境常见问题及解决方案
max_connections参数,用来控制一个MySQL实例同时存在的连接数的上限,超过这个值,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。max_connections参数,用来控制一个MySQL实例同时存在的连接数的上限,超过这个值,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。有的业务代码会在短时间内先大量申请数据库连接做备用,如果现在数据库确认是被连接行为打挂了,那么一种可能的做法,是让数据库跳过权限验证阶段。
2022-12-13 23:15:50
449
原创 幻读与间隙锁
幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。幻读的相关说明:在可重复读隔离级别下,普通的查询是快照读,是不会看到别的事务插入的数据的。因此,幻读在“当前读”下才会出现。上面session B的修改结果,被session A之后的select语句用“当前读”看到,不能称为幻读。幻读仅专指“新插入的行”。
2022-12-13 22:08:31
510
原创 简单的sql语句 执行特别慢
为了便于描述,我先构造一个表,基于这个表来说明今天的问题。这个表有两个字段id和c,并且我在里面插入了10万行记录。第一类:查询长时间不返回执行下面的SQL语句一般碰到这种情况的话,大概率是表t被锁住了。接下来分析原因的时候,一般都是首先执行一下show processlist命令,看看当前语句处于什么状态。然后我们再针对每种状态,去分析它们产生的原因、如何复现,以及如何处理。使用 show processlist 命令查看出现这个状态表示的是,现在有一个线程正在表t上请求或者持有MDL写锁,把s
2022-12-06 22:48:00
493
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅