自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 dockerCompose部署xxl-job踩坑

这里配置xxl-job的数据库部分,我设想的是docker中xxl-job容器使用的Mac 本地通过安装包下载的mysql,所以GPT建议我是使用host的形式进行连接(host的含义是容器和宿主共用端口,容器没有自己的 IP 地址 ,不存在端口映射),这里使用host.docker.internal 来代替 127.0.0.1确保容器内部的服务正确连接到运行在主机上的 MySQL 实例。注意如果要测试局域网内的其他主机访问到本机的Mysql,是需要先开启内网穿透的。在my.cnf中也需要制定位置。

2025-04-05 23:38:44 738 1

原创 使用cpolar 进行内网穿透

当然内网穿透还可以用来做远程连接,Linux服务器实际上就是这种形式,因为每一个服务器都是一个公网ip,能够直接访问到。我们的项目都是本地开发,所以都是localhost来做的,但要其他主机也能访问到搭建的服务,就需要用到内网穿透。它的原理就是创建一条隧道,然后将你的主机ip 映射生成一个公网ip,这样我们访问这个公网ip就可以访问到服务了。

2025-04-05 23:19:41 255

原创 java.lang.IllegalStateException: For queries with named parameters you need to use provide names for

原因:引入的@Param的包错误导致。

2025-03-14 23:57:47 122

原创 Mac 设置Jmeter环境变量,快捷打开

如果用的终端是 zsh。需要修改文件 ~/.zshrc。添加的内容和上面一样。JMETER_HOME 的值要替换成 JMeter 所在目录。

2025-03-02 16:24:39 272

原创 Sentinel配置完毕,控制板不显示问题解决

第一次打开Sentinel是没有任何显示,这是因为Sentinel属于懒加载,它需要你先对该服务进行一次访问才会出现操作界面。

2025-02-14 11:56:04 559

原创 python基础

代码中被写下来的固定的值Python中常用的有6种值(数据)的类型:定义:在程序代码中对程序代码进行解释说明的文字。作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用。单行注释:以 #开头,#右边 的所有文字当作说明,起辅助说明作用。#号和注释内容一般建议以一个空格隔开.多行注释: 以 一对三个双引号 引起来 (“”" “”")来解释说明一段代码的作用使用方法注:三引号即能用做 多行注释 又能用做 字符串定义在程序运行时,能储存计算结果或能表示值的抽象概念 (记录

2025-02-13 15:30:36 704

原创 启动项目后断点打不上,测试路径报404,控制台没有反应

原因:启动的主类,因为之前修改过一次,启动的时候并没有修改成一致,所以一直启动,即便成功也无法打上断点。

2025-02-12 10:45:56 158

原创 测试使用mapStruct进行转换报错ClassNotFoundException

原因:在对应的转换工具类中,引入的@mapper注解是mybatis的,而非mapstruct导致。

2025-02-12 10:44:54 326

原创 java.lang.NoSuchMethodError: ‘void io.swagger.v3.oas.models.OpenAPI.<init>(io.swagger.v3.oas.models.

swagger2 和 springdoc 在于使用的注解名称不一样,例如 swagger2 使用@ApiModelProperty(value=“”)来标明,而springdoc使用@Schema(title=“”)来标明。原因:在由springboot2.x升级到springboot3.x的时候,中间有部分注解还是用到的是swagger2的,在拆分成微服务之后,引用的是common包中的依赖,这里没有删除之前的swagger的依赖。版本问题不兼容,SpringBoot 3.x + Swagger3。

2025-02-12 10:44:18 453

原创 接口能够正常访问,但实际返回结果是404

加上 @ResponseBody 注解时,Spring 会直接将返回的对象序列化为响应体,而不是解析为视图。所以,添加了 @ResponseBody 后,接口返回的内容就能正确显示了。原因: Spring MVC 的视图解析机制导致,因为Spring 默认会将返回的结果当作视图名称来解析(页面),如果没有找到对应的视图文件就会返回一个 404 错误。或者直接使用@RestController 替换 @Controller 使用。解决办法:添加@ResponseBody注解。

2025-02-12 10:43:30 528 1

原创 mybatis BindingException无法找到定义的sql语句

MyBatis 在运行时无法找到 PmsBrandMapper.xml 中定义的 SQL 语句 selectByExample。

2025-02-12 10:42:16 218

原创 创建实体类无法从其他类获取解决办法

无法访问,本质原因就是需要设置一个公共的构造方法。

2025-02-12 10:38:09 222

原创 引入Amqb依赖导致objectMapper改变,导致出现Jackson 反序列化失败

原因:引入的amqp依赖,它会自动修改全局的ObjectMapper配置,在之前我们已经在redis中进行了修改,所以这里引入RabbitMqConfig ,即便我们没有配置什么,但它默认修改了 Jackson 的配置,影响了 Spring Boot 的序列化机制。当然这里报错,最开始是和redis没有太大联系,因为报错的是在测试原先的一个登录接口逻辑,它是基于sa-token来实现的,而主要是在将用户信息存放至sa-token的会话中导致。顺带一提,在配置redis中使用。

2025-02-10 21:14:35 433

原创 编写测试类无法正确注入Bean

尤其要注意引入@Test注解是包:org.junit.jupiter.api.Test,不要引错了否则导致无法注入bean。

2025-02-10 21:05:17 700

原创 redis配置类启动报错

springboot 在启动时会优先加载 springboot 框架自带的 spring.factories 文件中的定义的自动配置类, 把框架原本的 redisTemplate 作为 bean 注入到 容器中, 之后才会加载我们自定义的 RedisTemplateAutoConfiguration, 并且再次把我们魔改过 redisTemplate 注入到 bean 中, 这样容器中出现了2个名字一样的 redisTemplate,

2025-02-10 21:00:11 427

原创 整合网关踩坑

但现在是在控制台什么报错信息都没有,直接在postman中报404了。Spring Cloud Gateway 是基于 响应式编程 的,依赖于 spring-webflux,而 spring-boot-starter-web 是基于 Spring MVC 的,二者不能共存,因为它们使用不同的编程模型(MVC 是阻塞的,WebFlux 是响应式的)。输入对应的路径但直接访问服务,网关层中打了断点甚至都没有进入,网关也是正常启动且也配置拦截器,原因在于测试的时候,端口忘改成网关的端口了,自然不会走网关.

2025-02-09 10:22:27 555

原创 spring2.x升级spring3.x 踩坑

但实际上还是报错,最后常用升级依赖进行解决。

2025-02-09 10:04:03 506

原创 优先队列、最小堆、最大堆

其实排列顺序就是从上到下,从左到右进行排列,例如{1,2,3,4,5,6,7},看第一张图就是按照顺序进行排列,当然对照下面公式也可以来做,例如 1 的索引为0,要确定它的左子节点就是 0* 2 +1 = 1,也就是索引1,对应元素值2,同理右子节点就是 0*2+2=2,索引2也就是元素值3.这样,对于下标为i的节点,其左子节点的下标为2i,右子节点的下标为2i+1,而其父节点的下标为i/2。对应的数组为[10, 20, 15, 30, 40],符合小顶堆的定义,即每个节点的值都小于或等于其子节点的值。

2025-02-09 10:02:53 769

原创 RabbitMq-windows安装,无法启动管理web页面解决方案

找到rabbit@DESKTOP-8DP7D3H-mnesia 的目录,删除整个文件夹即可,再重新启动即可正常运行。RabbitMQ 的数据库 schema 可能损坏了,导致 rabbit_listener 表丢失。在网上找的大多都是保证.erlang.cookie是一致的,经过这种方式尝试不行。说下我的解决方法,首先是通过指令。

2025-01-31 16:09:04 556

原创 FFmpeg常用命令

的版本信息,则说明 Python 已经安装。,这是一个开源的语音识别模型,支持多种语言并且可以在本地进行处理。,你可以通过以下命令将视频的音频提取为一个单独的音频文件(比如。后,你就可以使用它来安装 Python 库了,例如安装。如果你希望本地运行而不依赖云服务,可以使用。首先,确保你的 macOS 上已经安装了。安装完 Python 后,你可以通过。如果已经安装了 Python 3,但。安装完后,你可以通过以下命令确认。仍然无法使用,你可以手动安装。可以通过以下命令安装或升级。来安装 Python 包。

2025-01-15 09:29:22 1143

原创 Iterm终端设置代理

【代码】Iterm终端设置代理。

2025-01-15 09:26:29 348

原创 并查集检查图是否构成环

这里是无向图,观察上面数组的元素就代表一条边,[1,2] 就代表 1 -> 2,也就是父节点,当然这里是一个环,可以发现 1->3,所以要检查是否是环,也就很明显了。但我们为了使合并后的树不产生退化(即:使树中左右子树的深度差尽可能小),那么对于每一个元素 x ,增设一个rank[x]数组,用以表达子树 x 的高度。在合并操作的时候,假设需要合并的两个集合的代表根节点分别为 x 和 y,则只需要令pre[x] = y 或者pre[y] = x 即可。,表示该节点的邻接节点(代表它们之间有一条边的关系)

2025-01-07 15:20:12 798

原创 树的遍历、二叉排序树--笔试题

因为查询路径肯定是按照层次来做的,所以17为左子树的节点,83>17 查询以17为节点的右子树,24<83 查询以83为根节点的左子树,此时要求该左子树要满足所有节点都要小于83。其中17为根节点,那么其右子树(即便是其下的左节点18,22),也都是大于根节点的,同样其左子树都小于根节点,但左子树的右节点(11,15,16)也是要大于其根节点和左节点的。以A为例:首先90为根节点,我们看下一节点的值是小于根节点的,那么说明我们查询的是左子树,后续值都小于根节点无误。延伸:最大堆、最小堆。

2025-01-07 15:16:12 411

原创 执行操作可获得的最大总奖励--动态规划

考虑能否使用动态规划处理,最终目标通常是寻找最优解,这个最优解的产生条件就是通过选择指定元素,同样每个元素都有选或不选(经典就是背包问题),这一题本质上也是如此,但较为不同的是它在选择元素的时候加了限制条件,也就是当前元素可以选择需要满足限定条件。,这里数组遍历完毕,在这个过程中我们所做的也就是在填充子问题的最优解,而最后子问题[1,2,3,4,5,6]的解其实也就是整体问题的解,在背包问题也是如此我们最需要返回。即代表满足条件的最大价值,只不过这里我们还需要判断我们假设的这个最大奖励数是否能够选择得到。

2025-01-07 14:00:03 822

原创 ClickHouse+Kafka+FlieBeat的日志收集系统

【代码】ClickHouse+Kafka+FlieBeat的日志收集系统。

2025-01-01 11:23:30 182

原创 callable基础使用

是一个,它的作用是返回一个 String 类型的结果(不需要任何传参),其对应的形式可能就是这样定义:这里用一个List 来存放多个任务,例如这里单个任务就是打印内容,之后引入Future对象(异步操作),Future对象通常是通过Executor框架提交的异步任务返回的,可以使用Future.get()方法来获取异步任务的执行结果。如果异步任务尚未完成,则调用Future.get()方法将会阻塞线程,直到异步任务执行完毕并返回结果。

2025-01-01 11:16:55 1159

原创 Stream流学习

(oldValue, newValue) -> newValue:这是一个合并函数。(oldValue, newValue) -> newValue 的意思是,如果有重复的 userId,就选择 newValue(即后一个 User 对象),丢弃 oldValue(即先前的 User 对象)。处理List数据,List中每个元素都是一个对象,现在需要将其转换为一个Map,Key为每个对象的id,Value为对应对象。核心:编写toMap中的业务逻辑,提取原对象Id作为key,将对象信息设置value。

2025-01-01 11:08:19 315

原创 ConditionalOnProperty注解介绍

其中 prefix+name/value 对应配置文件的名称,其中havingValue 需要和配置文件中设置的属性要匹配才能创建Bean(如果不一致时,此时就不会创建Bean)@ConditionalOnBean 注解会检查 IOC 容器中是否存在一个或多个指定的 Bean,只有在满足条件的情况下才会进行后续的自动配置。作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到Spring的IOC容器中。value:用于指定配置属性的名称,与 name 属性类似。

2025-01-01 11:01:42 485

原创 位运算应用

代表将 n和k 都转换为二进制,能否将n转换为k,假如 n 为13(1110),k 为 4(0100),那么这里首先判断是否能够转换,也就是将第1、3为转换为0,则n和k保持一致。:返回 n ^ k 的二进制表示中 1 的个数,也就是 n 需要多少次 1 变成 0 来变成 k。:这个操作是按位异或,产生一个新的二进制数,表示 n 和 k 在每一位上的差异。:按位与运算,检查 n 和 k 的二进制位是否在相同位置都为 1。

2024-12-31 09:23:15 240

原创 双端队列实现滑动窗口

当然主流程肯定还是一次遍历(数组、字符串都是如此),针对遍历的当前元素现在框定的窗口中的元素做校验判断,等达到窗口的限定大小之后,此时应该做扩大、收缩窗口处理(移动指针),当然这个过程也像是队列,队头弹出,队尾进入,我们本质上是不会保存所有的窗口信息,如果这样做的话就是暴力解法了,复杂度太高了,所以我们是在新旧窗口更替的时候做些操作,筛选出符合条件的值到最终的result中即可。不同的目标采用不同的数据结构,例如用滑动窗口找不重复的子串,可以用Map来做。明白双端队列是如何进行筛选值,也就是上面的那张图。

2024-12-31 09:20:20 619

原创 @Transactional注解失效场景

由于事务传播的特性,testB() 的事务会合并到上层方法的事务中(因为@Transactional的propagation默认参数为REQUIRED,它是自动合并事务的–共享事务)。testB()方法可以回滚,因为 Spring 的事务管理是基于 线程本地存储 的(通过 ThreadLocal 实现),新线程的事务上下文是独立的,事务管理器无法在新线程中找到当前的事务。Spring 的默认事务传播行为是 REQUIRED,这就说明A、B事务将包裹为一个事务,假如其中一者出现异常就会导致整体事务的回滚。

2024-12-25 09:57:27 854

原创 PlatformTransactionManager编程式事务

虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

2024-12-25 09:56:17 481

原创 同类调用导致的@Transactional失效

我们在a()中通过this调用b()方法,不是通过代理来调用的,this指向目标对象,因此调用this.b()将不会执行b事务切面,但是a()却是通过代理模式来做的,所以只对a方法进行了事务增强,没有对b方法进行增强。注意这里并不是因为代理对象生效,而是 Spring 会认为 a() 和 b() 依然是在事务的上下文中执行(由事务的传播性),所以testMerge()是认为事务生效的,但不建议这样写的。不会,a的事务会生效,b中不会有事务,因为a中调用b属于内部调用,没有通过代理,所以不会有事务产生。

2024-12-25 09:41:56 1024

原创 电商系统核心实现讲解,八股常客

因为秒杀属于高并发写操作,下单成功之后需要扣减库存,这个过程在mysql中实际是update,就是先查后写操作,这里导致性能问题,mysql遭不住,所以必须要引入第三方技术来兜底。我们先将库存任务信息保存在mysql,该表本质上就是一个用户登记表,它是不做库存扣减的操作(只负责记录),这里库存扣减实际上是延后执行的,而前面的秒杀相当于只是登记哈。当然redis挂了这个问题显然更严重,假设在秒杀期间redis挂了,我们所有库存扣减信息都放在redis中,redis又是基于内存的,挂了就全丢失了。

2024-12-24 10:50:01 520

原创 服务定位模式--避免switch写法(工厂模式基础上升级)

当然在我之前一篇文章中也讲了可以利用工厂模式来进行优化,但用工厂模式最好是一开始就搭好架子,假如之前用的是if-else这种形式,改造起来也是蛮麻烦的,因为工厂模式总体来说是将原来的接口类中不同处理器单独抽离出来为一服务类。工厂模式,在处理动态值时,其实也不需要switch语句哈,传统来说我们用一个Map来存放处理器实现类和枚举类的绑定关系,传入动态值就直接找Map的key,有则直接定位到对应实现类了。将枚举类中新增的枚举,去与接口类中的服务去绑定,也就是做的switch这个动作,只不过交由程序来执行了。

2024-12-24 10:46:36 315

原创 微服务Maven项目打包

踩坑:在maven中的引入的依赖出现冲突,导致版本不兼容,需要将乱添加的依赖删掉即可。,打包完成以后的 jar 包会出现在模块各自的 target 目录下。打包:在父工程中执行。

2024-12-24 10:40:18 511

原创 异步调用AI接口并存入数据库

【代码】异步调用AI接口并存入数据库。

2024-12-24 10:38:03 132

原创 分布式事务基础讲解

一个全流程的执行,需要依赖多个服务来完成,它是多个节点之间进行的事务操作。例如用户在下单时,需要同时创建订单信息和减库存的操作,然而创建订单信息和减库存是分布在不同服务器和不同数据库中的。两阶段提交(Two-Phase Commit,简称 2PC)是一种分布式事务协议,确保所有参与者在提交或回滚事务时都处于一致的状态。注意这里取决于划分微服务的架构,如果是个人项目通常为了方便就是将创建订单信息和减库存写在一个服务中,这样就不涉及到分布式事务了。

2024-12-24 10:36:39 230

原创 二维数组上下左右方向探索

二维数组类似于一个地图,通常算法题就是围绕如何移动元素来寻找符合条件的个数,或者将整个矩阵做些处理转换。通过一个数组按照x、y轴来定义,例如(-1,0)就是左。这里主要是方向的处理,如何实现上下左右的移动呢?

2024-12-24 10:35:19 334

原创 根据当前Spring执行环境(开发、测试、生产)执行不同逻辑处理

这里是一个双检锁实现的单例模式,这样的好处是后续全局都可以使用instance来进行调用处理,这里的RocketMQ是基于apache来实现的,其核心部分就是做了client的初始化(当然建议单独抽出来一个类进行配置)建议是使用另外一个变量来接受该参数,可以全局使用,避免每次都通过@Value的形式来读,下面使用@PostConstruct注解,它的意思是在实例化该类之后,就立即调用init方法。

2024-12-24 10:34:08 239

空空如也

空空如也

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

TA关注的人

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