- 博客(517)
- 问答 (7)
- 收藏
- 关注
原创 windows使用nvm管理node版本
2.安装,下载完成后,以管理员身份运行 nvm-setup.exe,选择默认安装,一路next。3.使用,安装完成后会打开一个命令行窗口,下面是它一些常用命令。选择nvm-setup.exe。
2025-04-01 22:27:40
201
原创 vue2修改窗口字典回显
场景:用户在列表选中一条数据,点击修改,在弹出的修改窗口中由于后台返回的是字典值0,1,2,想把它转换为中文的字典标签。这样页面加载的时候就会将字典值转换为标签。
2025-04-01 19:59:06
153
原创 使用Redis实现轻量级消息队列
使用消息中间件如RabbitMQ或kafka虽然好,但也给服务器带来很大的内存开销,当系统的业务量,并发量不高时,考虑到服务器和维护成本,可考虑使用Redis实现一个轻量级的消息队列,实现事件监听的效果。下面介绍下Redis实现消息队列的三种形式。
2025-03-31 20:37:17
349
原创 观察者模式在Java微服务间的使用
Spring Cloud Stream 结合 Kafka 或 RabbitMQ,可以简化微服务间的事件驱动架构。二. 使用 Spring Cloud Stream。(3) 配置 RabbitMQ 交换机和队列。一.、使用RabbitMQ来实现。(1) 生产者(订单微服务)(2) 消费者(通知微服务)
2025-03-31 20:18:22
258
原创 观察者模式在Java单体服务中的运用
观察者模式主要用于一个对象发生改变,其关联的所有对象都会收到通知,属于事件驱动类型的设计模式,可以对事件进行监听和响应。下面简单介绍下它的使用:2 事件发布者3 事件监听者注意事项:观察者模式只能在同一个微服务中使用,跨服务中将失效。
2025-03-31 20:08:09
265
原创 多线程开发中List的使用
2.弱一致性:迭代器创建后,其他线程的修改可能不会立即反映到遍历中。3. 无阻塞:操作立即返回,不会因锁竞争导致线程挂起。1.写操作开销大(需复制数组)。高并发队列操作(如任务分发),基于 CAS 无锁实现。2.线程安全:多线程并发添加无需额外同步。特点:可实现高性能随机访问,需要设置KEY.:读取的是某一时刻的快照,可能读到旧数据。:适合多核 CPU 环境,避免线程阻塞。:复制新数组,修改后替换旧数组(适合。4. 无容量限制:队列会动态扩展。:无锁,直接访问底层数组;:无需手动同步,减少错误。
2025-03-30 19:51:55
555
原创 内网穿透工具
1.花生壳:这是我最早和最多使用的工具,本次对接支付宝时,使用它解析都正常,诊断也没有问题,但就是访问不了;3.natapp:卡在实名验证环节,实名验证时提示实名信息已存在,创建隧道时又提示未实名,只好弃用。4.ngrok,实名验证时发现要要购买点数,并提示购买了不代表能实名验证成功,好吧....,貌似已被花生壳收购了;
2025-03-30 16:56:31
633
原创 Java对接支付宝实现在线支付(二)
支付宝异步回调通知接口,对应上面AlipayTemplate配置的notify_url,使用上面工具类中验证签名的方法,防止数据伪造。3.支付宝工具类,主要实现验证签名和关闭交易。本文主要介绍代码实现主要过程。
2025-03-30 15:51:55
170
原创 Java对接支付宝实现在线支付(一)
注意:1.本文使用的是支付宝新版沙箱环境,支付宝也推荐使用新版沙箱环境,旧版将不再维护。2.要对接支付宝开放平台需要完成个人或企业实名验证。
2025-03-30 15:08:40
429
原创 MongDB适用场景和简单使用示例
MongoDB作为一种流行的NoSQL数据库,在项目开发中有许多适用场景,特别是在需要处理非结构化或半结构化数据、需要高可扩展性或灵活数据模型的场景中表现优异。
2025-03-25 09:32:29
301
原创 mysql外键设置
在mysql表设计时,如果巧用外键设置,可以给我们的开发带有很大的便利。应用场景:子表依赖于父表,或父子表存在某种关联;那么就存在父表或子表数据发生变化时,对应的子表或父表的数据应该作何改变;主要涉及以下处理:CASCADE,NO ACTION,RESTRICT,SET NULL;
2025-03-24 11:14:16
474
原创 python学习笔记--实现简单的爬虫(二)
需要注意的是:网页的代码并非一成不变,爬取时一定要使用F12分析其代码结构。任务:爬取B站上最爱欢迎的编程课程。
2025-03-22 21:44:28
1351
原创 python学习笔记--实现简单的爬虫(一)
1.电影名位于class为hd的div中,里边嵌套中一层a标签和span标签,最终目的地为<span class="title"></span>;1.导入2个第三方库:requests用于发送请求,bs4用于将复杂的网页代码结构解析成可读性强的书籍目录索引结构;2.headers必不可少,很多网页都有反爬机制,使用headers能在一定程度绕开反爬机制,温馨提示:爬虫一定要遵守网站的robot协议,友好爬取,别把对方的网站爬崩了。3.按照上面分析出,提取出电影名,评分和电影资料,并存储到各自的集合中;
2025-03-22 21:32:57
477
原创 python学习笔记-开发第1个简单web应用
3.启动运行,访问http://localhost:5000?name=Python,返回Hello,Python!1.安装flask库。
2025-03-13 20:07:02
93
原创 python学习笔记-mysql数据库操作
使用navicat将json数据导入本地数据库,生成表中name,level,adcode,citycode,center的值。现有一个需求,调用高德api获取全国县级以上行政区数据并保存为json文件,"阿坝藏族羌族自治州","msg": "操作成功",
2025-03-13 19:49:55
349
原创 ruoyi-vue为普通用户添加菜单和按钮权限
普通用户的角色权限标识为common,现在要为普通用户添加菜单和按钮的权限,其中菜单包括普通菜单和动态路由菜单。最后去设置角色的权限,在后台管理系统中选择角色管理,点击修改,配置按钮权限即可。在meta属性中配置roles数组,指定要添加的角色权限字符,如common。使用admin账号先在后台管理中的菜单管理为指定菜单添加按钮,为菜单配置权限字符,需要与后台配置的权限字符保持一致,然后为按钮指定权限字条,须与后台的权限字符保持一致。然后到角色管理中,配置菜单权限。点击修改,勾选 要赋予权限的菜单。
2025-03-12 11:08:02
390
原创 VUE2异步开发
this.spu.brandId,this.spu.seriesId,this.spu.levelId的值不为空时,再分别执行getSeriesList、getLevelList、getModelList这3个函数的查询。在上面的方法中,getSpuInfo方法采用异步,只有在getSpuInfo获取到this.spu的值并且。进行异步开发,确保方法的执行顺序。在vue2中可以使用。
2025-03-11 11:21:27
192
原创 ruoyi-vue使用线程池进行异步开发
需要注意的地方:如果项目采用多数据源,在异步线程中,由于多数据源的动态切换通常依赖于线程本地变量(如。中的数据源信息),因此需要额外的处理来确保数据源的一致性。2.在需要使用异步操作的service实现类注入上面的类。),而异步线程会丢失主线程的上下文(包括。需要手动传递和设置数据源,代码侵入性较强。如果异步任务嵌套较多,容易遗漏数据源的设置。3.使用线程池进行异步操作。适用于少量异步任务的场景。1.异步线程池工具类。简单直接,易于理解。
2025-03-08 11:53:31
245
原创 VUE2关闭弹窗时销毁数据的方法
指令,可以在窗口关闭时完全销毁组件,从而清除组件内的所有数据。,可以在每次打开窗口时强制重新渲染组件,从而销毁之前的数据。方法,用于重置数据,并在每次打开窗口时调用该方法。监听这个状态的变化,并在窗口关闭时清理数据。)来控制窗口的显示与隐藏,可以使用。通过给组件绑定一个唯一的。如果是通过某个状态(如。在组件销毁前,可以在。钩子中手动清理数据。可以在组件中定义一个。
2025-03-07 16:02:17
370
原创 创建自定义的Spingboot启动器
首先,创建一个Maven项目,在pom.xml中添加Spring Boot相关的依赖。通常需要添加和。</project>创建一个自定义功能类,这个类将被自动配置类使用。开发Spring Boot启动器的主要步骤包括创建Maven项目、添加依赖、创建自动配置类、注册自动配置类、创建自定义功能类、打包发布以及在项目中使用。通过这些步骤,可以封装和复用自定义功能,简化Spring Boot应用的开发。
2025-03-05 14:31:31
235
原创 Java中使用for和Iterator遍历List集合的区别
在 Java 中,遍历List可以使用和两种方式。它们各有优缺点,适用于不同的场景。
2025-03-01 18:24:10
421
原创 nginx配置文件分解为多个子配置
在nginx配置时,如果需要配置的项目过多,全部配置信息都写在nginx.conf的话,会使得nginx.conf文件过于臃肿,可读性和可维护性差。咱们可以将一个项目为单位,为每个项目配置nginx的子配置文件,这样方便管理。1.在nginx.conf的http模块,server节点上方,添加inclue部分的内容,红色加粗部分。root表示:会将 URL 路径直接附加到指定的。#须替换为自己实际的conf.d地址。# 服务配置内容,略。指令用于将 URL 路径。
2025-02-28 16:01:06
792
原创 Java开发中如何避免在for循环中频繁访问数据库
通过上方正反两个例子说明,在实际开发中,在避免在for循环里进行大量的数据库访问,正确的方式是进行一次查询,将id收集成一个集合,然后再根据id逐个查询,并保存在map集合中,id作为map集合的key,取值时根据id这个key,取出对应的value,如何使用请参考上方的正例。Java开发中要避免在for循环中进行数据库的频繁访问,如果数据量大,那么for循环里就是频繁进行数据库操作,带来很大的IO开销,从而降低了应用的性能和响应的速度。下面通过举正反两个例子验证一下。经测试,共耗时1956毫秒。
2025-02-25 10:25:43
219
原创 Java多线程开发中控制线程执行顺序
一般在多线程编程时,需要控制线程的先后执行顺序,比如:主线程中写了子线程t1,想要的效果是需要t1先执行,然后再执行接下来的主线程操作,但是默认的是主线程先执行,所以问题就出现了,执行结果与预期结果不一致。代码中executor.submit依次添加了t1 t2 t3线程,按照FIFO的特性,执行顺序也就是t1 t2 t3的执行结果,从而保证了执行顺序。一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。线程池的底层原理就是一个先进先出(FIFO)的队列。
2025-02-23 17:56:08
274
原创 docker中常用的命令
docker system prune -a 清理所有未使用的资源(包括未使用的镜像)docker rmi -f $(docker images -aq) 删除所有镜像。docker push <镜像名>:<标签> 将镜像推送到 Docker Hub。docker rm -f $(docker ps -aq) 删除所有容器。docker stop $(docker ps -aq) 停止所有容器。docker top <容器ID或容器名> 查看容器内运行的进程。从容器复制文件到主机。
2025-02-23 11:27:38
701
原创 使用Hutool发送简易Post请求
如上面代码所示,该Post请求,请求头只是设置了Content_Type值,请求体是json,然后接收和解析响应体。
2025-02-22 11:52:35
500
原创 使用python脚本批量删除redis缓存
接下来,创建一个 Python 脚本来连接到 Redis 并删除匹配的键。假设 Redis 端口是 6379,密码是。请根据自己需要将要删除的键的前缀,redis host,port,auth替换为自己的配置。这样,Python 脚本会连接到 Redis 容器并批量删除所有以。将该 Python 脚本保存为。(如果有密码的话)。
2025-02-10 19:55:58
192
原创 python学习笔记5-函数的定义
def 是英⽂ define 的缩写def 函数名([参数1],[参数2]....[参数n]):函数体关于函数名的定义,有几项需要注意的地方:•函数名命名规则同变量名,要满⾜标识符命名规则•不能和系统函数重名,否则系统函数⽆法使⽤•命名⻛格:⼀般建议⽤下划线分隔的⼩写单词组成:say_hello•函数名称应该能够表达 函数封装代码 的功能,⽅便后续的调⽤•可以由 字⺟、下划线 和 数字 组成 ,不能以数字开头 ,不能与关键字重名•不能将函数调⽤放在函数定义 的上⽅•。
2025-02-04 17:54:50
764
原创 python学习笔记4-字符串和字节转换
Bytes 对象是由单个字节作为基本元素(8位,取值范围 0-255)组成的序列,为不可变对象。可以通过调⽤bytes()⽣成bytes实例,其值形式为 b'xxxxx',其中 'xxxxx' 为⼀⾄多个 转义的⼗六进制字符串(单个 x 的形式为:\x12,其中\x为⼩写的⼗六进制转义字符,12为⼆位⼗六 进制数)组成的序列,每个⼗六进制数代表⼀个字节(⼋位⼆进制数,取值范围0-255),对于同⼀个 字符串如果采⽤不同的编码⽅式⽣成bytes对象,就会形成不同值。设置python⽂件编码格式。
2025-01-22 17:18:06
333
原创 python学习笔记2-简单数据类型
原理:按顺序从两个字符串中从左侧开始获取字符,⽐较两个字符,谁的ascII值⼤那么就是哪个字符 串⼤,如果相等,则继续⽐较下⼀个。科学计数法: ⽤e来表⽰10的指数,1e2就代表了100,注意e前⾯必须有数值,e后⾯必须为整数。Python可以处理任意⼤⼩的整数,当然包括负整数,在程序中的表⽰⽅法和数学上的写法⼀模⼀样。空值,表⽰变量没有确定的值 表⽰空对象,⼀般⽤于判断,不同于0和空字符。表⽰两种状态,男⼥、阴晴、亮暗等,它只有两个值:True,False。在 Python 中,字符串之间可以使⽤。
2025-01-22 16:41:28
314
原创 python学习笔记1-变量
变量的声明每个变量 在使⽤前都必须赋值,变量 赋值以后该变量才会被创建。标⽰符就是程序员定义的 变量名、函数名 ,名字 需要有⻅名知义的效果。中,如果 变量名需要由⼆个或多个单词 组成时,可以按照以下⽅式命名。当 变量名 是由⼆个或多个单词组成时,还可以利⽤驼峰命名法来命名。在程序中,变量的值是可以改变的,所以叫变量,不能改变的叫常量;命名空间中存储的是数据存放的地址,类似于⽼师的花名册。不同类型的变量也可以进⾏修改、重新赋值,与类型⽆关。数据空间中存储真实的数据值,类似于每个学⽣的真实座位。
2025-01-20 20:20:44
716
原创 使用消息队列可能遇到的问题及其解决办法
概括起来就是:1.做好消息确认机制,包括生产者和消费者两端(public,consumer【手动ack】);2.每一个发送的消息都在数据库做好记录,定期将失败的消息再次发送一次。幂等性通俗来说,就是消息在进行处理时,判断数据的状态,如果是已处理过的则不再进行处理。消息发送出去,由于网络问题或系统异常没有抵达服务器;
2025-01-04 15:53:09
526
原创 Springboot使用RabbitMQ实现关闭超时订单的一个简单示例
order.delay.queue队列通过路由键order.create.order绑定到order-event-exchange交换机,order.release.order.queue队列通过路由键order.release.order也绑定到order-event-exchange交换机。使用rabbitTemplate将订单数据通过交换机order-event-exchange和路由键order.create.order将订单数据order发送给队列order.delay.queue。
2025-01-01 10:30:46
562
原创 使用seata实现分布式事务管理
双击上图圈中的bat文件,如果一切正常,将会看到started的提示,如果双击后闪退,可采用cmd的方式打开,即可看到启动失败的原因。当前在订单服务,由于我们添加了@Transactional注解,异常发生时触发订单服务数据回滚,而库存服务属于远程调用的服务,数据在另一个数据库中,此时实现库存服务事务回滚依靠的就是seata了,通过引入@GlobalTransactional来实现。--需要排除掉自带的seata-spring-boot-starter,否则无法启动,并提示jar冲突-->
2024-12-29 16:37:40
1194
原创 Springboot @Transactional使用时需注意的几个问题
mysql定义的事务隔离级别为可重复读,在使用 Spring Boot 和 MySQL 的组合时,如果你不特别指定隔离级别,那么实际使用的将是 MySQL 的默认值 REPEATABLE READ。当你通过 Spring 容器获取这个类的实例并调用其方法时,实际上是调用了代理对象的方法,而不是原始类的方法。嵌套事务是外部事务的一部分,但可以独立于外部事务进行提交或回滚。然而,当你在一个类的非静态方法中直接调用另一个 @Transactional 方法时,调用并没有经过代理对象,而是直接调用了原始类的方法。
2024-12-21 13:39:32
486
空空如也
$.messager.alert()中文显示成???
2017-08-24
在前端页面格式化显示日期
2017-08-22
多文件上传文件数组不为空的判断
2017-08-19
恢复linux系统里的/bin/sh文件
2017-07-08
使用canvas绘制心电图
2017-05-06
内网怎样使用Maven管理JAVA WEB项目
2017-03-24
怎样将一个新的Web项目绑定到已备案的域名
2017-03-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人