自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 日常开发小Tips:后端返回带颜色的字段给前端

我们可以通过ANSI转义序列来改变文本的颜色。ANSI转义序列是一种特殊的转义字符,用于控制文本的显示方式,包括颜色、字体等。在Java中,我们可以使用System.out.print()方法来输出带有颜色的文本。但是当要表示某些字段的数据为异常数据,或者将一些关键信息以不同颜色的形式呈现给用户时,而前端又不好判断,那么就可以由后端来控制。一般来说,展示给用户的字体格式,都是由前端控制,展现给用户;

2025-04-29 16:24:41 484

原创 Idea集成AI:CodeGeeX开发

当入职新公司,或者调到新项目组进行开发时,需要快速熟悉项目代码而新的项目代码,可能有很多模块,很多的接口,很复杂的业务逻辑,更加有与之前自己的代码风格不一致的现有复杂代码更别提很多人写代码不喜欢写注释所以,我们要快速读、快速理解项目代码时,可以使用AI来帮助我们我在网上搜了一圈后,发现CodeGeeX是比较主流的AI工具,可以直接集成进Idea中有: 解释代码、自动生成注释、bug分析、等功能选取一段代码,即可让AI解释,操作迅速便捷,基本上可以说是到手就会的AI工具。

2025-04-16 19:44:10 441

原创 类加载器、双亲委派

JVM只会运行二进制文件,类加载器的作用是将字节码文件加载到JVM中,从而让Java程序能够启动起来。

2025-03-21 16:11:39 301

原创 JVM的组成--运行时数据区

1、类加载器(ClassLoader)类加载器负责将字节码文件从文件系统中加载到JVM中,分为:加载、链接(验证、准备、解析)、和初始化三个阶段2、运行时数据区运行时数据区包括:程序计数器、虚拟机栈、堆、本地方法栈、方法区(元空间)3、执行引擎执行引擎负责将字节码(.class)解释或编译为机器码并执行。包括:解释器、即时编译器(JIT)、垃圾回收器4、本地方法接口本地方法接口提供JVM与本地方法库(如C/C++库)的交互能力,使得Java程序可以调用本地方法。

2025-03-20 16:54:53 775

原创 记录一次Spring事务失效导致的生产问题

1、如果被@Transactional修饰的方法,不是public的,那么事务会失效;2、一个类中的方法 自调用(即类内部方法A调用方法B)时,如果方法B上标注了 @Transactional 事务注解,事务会失效。3、如果一个方法是final的,那么加@Transactional事务也是无法生效的4、被try-catch捕获了异常,没有往外抛出,那么spring事务会认为方法,没有发生异常,就不会回滚,事务失效5、数据库表本身不支持事务,导致事务失效,例如InnoDB就不支持事务

2025-03-06 00:13:57 984

原创 Mybatis的一级、二级缓存

基于perpetualCache的HashMap本地缓存,其作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。我们可以看到,明明调用了两次select语句,但是实际上只查询了一次数据库,证明后面一次直接走的是缓存,这就是一级缓存。因为他们用的是同一个session,走了一级缓存,用两个session就会查询两次数据库了。那如果我两个session,也想使用Mybatis的缓存,可以不可以呢?手动二级缓存后,缓存生效。

2025-02-25 23:16:01 707

原创 数据库-分库分表的概念

(单表业务达到1000W或20G以后)(主从读写分离、查询索引等已经没用了)当满足以上条件后,可以考虑使用分库分表我上一家公司,有使用,但是这个查询库严格意义上并不能叫做分库分表,只能算一个slave节点,保存了所有表的所有数据备份一样;由于对时效性要求也不高,只用来查询、统计数据等;应用里配置多数据源进行使用;还有使用一个表的功能:订单表每天800-3000W的数据,结算表每天超500-2000W的数据;数据量过大,而且很明显可以。

2025-02-23 20:21:35 703

原创 MVCC(多版本并发控制)

事务中,隔离性是如何保证的呢?1、排他锁(当一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁)2、mvcc(多版本并发控制)

2025-02-20 22:44:13 997

原创 MySQL事务的特性和隔离级别

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作,即这些操作要么同时成功,要么同时失败A给B转钱:A减钱,B加钱的操作要么一起成功,要么一起失败A给B转钱:A少了多少钱,B多了多少钱,在客观世界要逻辑一致A给B转钱:不受其他转钱操作,或者其他各种操作的影响A给B转钱:只要转成功了(提交了),A就永久的扣钱了,B就永久的加了钱,不会变回去。

2025-02-19 21:57:46 451

原创 SQL优化可以从哪些方面入手

表的设计优化,参照阿里开发手册,例如:1、字段选择合适的类型(verchat, number)等,字符串,金额等根据业务决定2、选择合适的长度,比如性别等可以用一个字符表示的,就不要设值很长的空间,或者使用verchar这些可变长度的字符了。

2025-02-18 22:33:45 305

原创 什么情况下索引会失效

单表超过10万数据,即可增加索引例如下图中的address,区分度太小就不适合作为索引索引越多,维护索引结构的代价越大,在增删改的时候效率也越低6、如果要建立索引的列不能存储null值,请在创建表时,使用not null约束,可以增加查询效率。

2025-02-17 23:40:49 824

原创 聚簇索引和非聚簇索引

聚集索引选取规则:将上表中的主键索引(聚集索引)拿取出来就是:所有的key(灰色部分)对应的都是表中的主键叶子节点保存的是整行的数据(row),也就意味着,绿色部分保存的是表中那一整行的数据,我们通过主键就可以直接查询这一行数据如果给表中的name属性,添加了一个普通索引(二级索引),那么这个索引的数据结构如下:所有的key(灰色部分)对应的就是name的值到了叶子节点上,对应存储的就不是整行数据,而是他们所对应的主键的值回表查询,也称(二次查询),当我们执行以下sql时:要通过名称,来查询所有字段,

2025-02-16 23:14:57 861

原创 索引以及索引底层数据结构

如图中所示,如果要查询12 这个数据,由于B树的非叶子节点也是包含数据的,所以B树会加载出38中的(指针、key、数据),再加载出16和29中的(指针、key、数据),最后查询到12中的(指针、key、数据);而B+树只有在叶子节点存储数据,非叶子节点只保存 指针和key值,只会查询12中的数据,前面的38和16则只和他们对比了key值,还有就是使用了38和16中的指针。由于B+树的数据都保存在叶子节点,所以要查询什么数据,所要查询的层级(高度)是差不多的,查询效率更稳定。蓝色部分表示数据(key,键值)

2025-02-16 22:10:32 396

原创 MySQL如何定位慢查询

1、使用Prometheus(普罗米修斯)、集团自研的SQL统计的工具等去查看慢SQL2、查看应用日志,我们的应用执行SQL都会打印执行时间,可以帮助我们定位到哪些SQL太慢。

2025-02-16 21:28:17 733

原创 Redis的哨兵集群、分片集群

Redis有三种集群模式,分别是主从模式、哨兵集群、分片集群主从模式上文已经讲过了,这篇文章记录一下哨兵模式和分片模式。

2025-02-15 18:50:20 991

原创 Redis主从同步的原理

单节点Redis的并发能力是有上限的,要进一步提高redis的并发能力,就需要搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据主从同步有两种同步:1、全量同步:指的是,从节点因为宕机,重启,或新增的从节点等需要从主节点同步全量数据的同步场景2、增量同步:指的是,从节点定时从主节点获取过去一段时间内写入的数据。

2025-02-15 17:22:02 368

原创 Redis实现分布式锁

1、如果你公司的业务,各个应用都只部署了一台机器,那么完全用不着分布式锁,直接使用Java的锁即可2、可是当你们的业务量大,多台机器并发情况下争夺一个资源的时候,就必须要保证业务的原子性了。举例:例子1、超卖问题:一共100个商品待抢购,当还有最后一个库存的时候,实例1,2,3.....10都查询到还有库存,用户同时都下单成功;那么就出现了超卖问题:你一共100的库存,哪来的110个商品发货?怎么解决呢?

2025-02-12 22:41:10 677

原创 Redis的数据过期策略和数据淘汰策略

(Least Recently Used):Least(最少的)Recently(最近)

2025-02-09 21:55:27 1182 2

原创 Redis持久化的两种方式:RDB和AOF

redis中的数据存储在缓存中,如果没有持久化的策略,Redis一旦宕机,那么将会导致数据丢失;因此redis提供了以下两种持久化方式:RDB和AOF一般来说,大部分公司对这两种方式都是同时开启的。

2025-02-09 20:53:13 736

原创 Redis双写一致性(数据库与redis数据一致性)

当修改了数据库(MySQL)中的数据,也要同时更新缓存(redis)中的数据,缓存中的数据要和数据库中的数据保持一致双写一致性,根据业务对时间上的要求,可以分为三种情况:1、延时双删:较为准时的一致性,Redis中的数据和MySQL较为准时的一致,不会超过很长的时间2、redissson锁:保证强一致性;准时3、异步写入redis:如果业务允许短暂时间内redis与MySQL数据库中数据的不一致,但是保持最终一致的情况;

2025-02-07 23:36:23 1301 2

原创 Redis缓存穿透、击穿、雪崩介绍以及解决方案

缓存穿透当给某一个热点数据,设置了过期时间,当key过期时,恰好这段时间有大量的并发请求进来,那么可能会把数据库压垮疑问:key过期了,Redis中查询不到,会去数据库查询,查询完成后不是又会写入redis中吗?为什么会导致大量请求到数据库呢?解答:查询数据库并写入redis也是需要时间的,有些写入redis的结果集,是需要多表查询的结果,比如需要50ms的,甚至几秒钟才能从数据库查询出来的,那么这段时间就太长了。

2025-02-06 00:10:14 1221

原创 k8s及docker语雀-大佬笔记地址

k8s(v1.18.0,不维护了,请看云原生) (yuque.com)

2024-10-07 14:52:35 358

原创 springboot里直接测试某个方法

springboot里直接测试某个方法,可直接写main方法,调用即可。

2023-07-24 19:15:21 339

原创 前后端分页查询好大的一个坑(已解决)

初步想法:本地DEBUG运行后台和页面,打断点尝试,进行重现时,SQL语句一模一样,就是有的条件能查到结果(第一页的查询结果的条件,当时没注意到),有的查不到(后面几页的查询结果做查询条件)当前页面在第一页时,pageIndex=1,你在这个页面,拿到查询出来的字段作为查询条件,传到后台的pageIndex也是1。==但是当页面在第5页时,你拿着第5页展示的字段,去直接作为查询条件查询时,传到后台的pageIndex=5!以第5页的查询结果,作为查询条件,放入搜索框进行查询,显示结果为空,查不到!

2023-03-02 17:32:08 876

原创 AMQP协议:消费者、生产者与RibbitMQ节点之间的交互流程,RibbitMQ的核心组成部分

当Broker往消费者发送消息时,使用“即发即完”方式的话,当消费者还未收到消息,TCP连接已经断掉,这样消费者没有收到消息,而在Broker节点(也就是RibbitMQ服务器)认为消费者已经消费了;生产者将ip、端口、用户名、密码等信息打包在Protocol Header(协议头)中,向Broker(节点)发起连接请求,两者建立连接。,如果遇到使用高峰,性能瓶颈也随之显现,rabbitmq采用类似nio的做法,连接tcp连接复用,不仅可以减少性能开销,同时也便于管理。1、与生产者类似,建立连接。

2022-12-26 23:03:23 795 1

原创 消息队列的持久化、分发策略、高可用和高可靠

高可靠简单来说就是将数据存入磁盘,而不是存在内存中随服务器重启断开而消失,使数据能够永久保存。常见的持久化方式MQ消息队列有如下几个角色1:生产者2:存储消息3:消费者那么生产者生成消息以后,MQ进行存储,消费者是如何获取消息的呢?一般获取数据的方式无外乎推(push)或者拉(pull)两种方式,典型的git就有推拉机制,我们发送的http请求就是一种典型的拉取数据库数据返回的过程。而消息队列MQ是一种推送的过程,而这些推机制会适用到很多的业务场景也有很多对应推机制策略。消息分发:

2022-12-05 22:55:10 1081 1

原创 消息队列协议

消息中间件负责数据的传递,存储,和分发消费三个部分,数据的存储和分发的过程中肯定要遵循某种约定成俗的规范,不管是采用底层的TCP/IP,UDP协议还是其他的自己去构建等,而这些约定成俗的规范就称之为:协议。

2022-11-29 23:20:11 524

原创 什么是中间件

中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件=平台+通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软件和实用软件区分开来。中间件处于操作系统软件与用户的应用软件的中间。消息队列中间件= 平台 + 通信中间件都要遵从底层协议或自定义的协议:TCP/IP协议、UDP协议进行通讯。

2022-11-22 23:54:54 4801

原创 idea使用gradle编译不通过的解决办法之一

gradle版本低,可能造成项目无法编译,就是那种明明看着有jar,就是报找不到;各种刷新,重新引入jar包都没用,jdk卸载重装都没用,试试这个方法吧。使用idea自动选择gradle版本,勾选之后确认,然后编译就通过了。

2022-10-28 18:26:30 1113

原创 Nginx快速入门

狂神-Nginx快速入门

2022-09-05 23:39:20 606

原创 Xxl-job的使用

项目开发中,常常以下场景需要分布式任务调度:1、同一服务多个实例的任务存在互斥时,需要2、的执行需要支持高可用、监控运维、故障告警3、需要统一管理和追踪各个服务节点定时任务的运行情况,以及任务属性信息,例如任务所属服务、所属责任人因此,XXL-JOB应运而生: XXL-JOB是一个开源的轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用,其中“XXL”是主要作者,大众点评许雪里名字的缩写。...

2022-08-26 11:25:22 7358

原创 定时任务之基础实现方式(分布式任务调度)

这些单机任务调度有很多不足之处在单机环境下,上面的这种定时任务实现方式问题主要有一个,无法进行管理,没有容错机制。但是在集群环境下,如果不对代码作控制,就会导致集群的每一台机器都会执行一次定时任务。常见的解决方式,我通过配置文件进行控制,只让定时任务在某一台机器上执行,如果项目比较小,就几台机器组成的集群环境,这样的方式确实可以,只不过在任务的管理上需要想办法解决。如果是一个很庞大的分布式微服务系统,可能会有成千上万个定时任务,那上面的方法就不合理了。

2022-08-22 23:16:08 619

原创 gradle配置文件

gradle和maven一样是用来做项目结构管理和jar包管理的我们来看看如何使用gradle进行项目和jar包管理。

2022-08-14 23:34:16 2169

原创 项目构建工具-Gradle入门介绍与基础groovy语法

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它。Gradle其实本身就是个java小程序,由java语言开发,运行在jvm上的一个小程序面向Java应用为主。当前其支持的语言C++、Java、Groovy、Kotlin、Scala和Swift,计划未来将支持更多的语言。下图就是代表Gradle的小象了,如果你在IDEA看到项目中这个小象标志的配置文件,就说明这个项目是由Gradle进行管理的。...

2022-08-10 23:24:18 890

原创 连接工具和idea能查询出数据库数据,项目中查不到数据库数据:解决办法之一

代码,SQL语句一切都正常,用数据库连接工具,idea连接数据库都能查到,就是用代码查询,项目运行查询不到数据?

2022-08-08 16:41:16 1550

原创 feign的性能优化、Feign的使用-最佳优化两种方案

设userservice为服务提供者,orderservice为服务消费者,那我只需要新增(抽取)一个模块,对userservice所有的对外接口、实体类都写到这个模块(feign接口模块)里面来,那么其他所有的模块要使用userservice模块,向userservice发送请求,只需引入userservice的那个feign接口模块,即可使用,所有的服务消费者都使用userservice提供的这一套feign接口。在实际开发项目使用feign的过程中,各公司逐渐对feign的使用方式有了更优的实践。..

2022-08-07 23:18:36 2954

原创 http客户端:Feign的使用 与 日志配置

在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。feign的日志,根据级别不同,会输出发送请求时间,响应时间,请求头,响应头,请求body等内容。feign的依赖中,包含了ribbon。...

2022-08-07 00:00:08 940

原创 Nacos集群搭建

讲不清楚,看视频吧:b站黑马程序员的简易教学

2022-08-03 23:20:51 111

原创 Nacos配置文件管理、微服务获取Nacos配置文件、热更新、配置共享、配置优先级等

传统项目中,当我们需要修改配置文件时,需要修改配置文件,停掉服务,重启服务,这样不利于提升用户体验;而使用Nacos进行项目的配置文件管理,则可以实现热更新配置文件,在Nacos中修改之后,Nacos会通知项目新的配置文件。......

2022-08-02 23:31:48 10337

原创 Nacos的集群配置、NacosRule负载均衡、权重设置、namespace

当我们的服务越来越多,服务实例越来越多(比如说userservice,有8081、8082、8083端口三个实例),我们在同一个机房部署所有的服务很不安全,应对突发状况时,就像鸡蛋放在一个篮子里;很不安全,很不友好,所有我们需要分开部署机房与服务器;一个服务可以分多个集群部署,一个服务器可以部署多个服务(但是一般不会这么做,一般一台服务器就只部署一个服务实例),一个集群可以有多个实例;那我们该如何配置集群呢?服务启动前,配置好集群属性,再进行启动例如。.........

2022-07-28 23:32:11 4697 4

空空如也

空空如也

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

TA关注的人

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