- 博客(103)
- 资源 (9)
- 收藏
- 关注
原创 吐血推荐,提高 github 访问速度
这里主要是推荐 github上的一个开源项目, 让你“爱”上 GitHub,解决访问时图裂、加载慢的问题。目前已经有 22.5k star了,关键是作者非常用心维护了这个项目。
2024-11-17 15:45:11
175
原创 机考题,持续更新
有一种简易压缩算法,针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。要求编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串,若输入合法则输出解压缩后的字符串,否则输出字符串“!若“压缩”后的字符串没有变短,则返回原先的字符串。解释:“abbccd"压缩后为"a1b2c2d1”,比原字符串长度更长。有压缩,就有解压缩,题目是这样的。输出:“abbccd”
2024-11-10 23:35:36
262
原创 Oracle从入门到放弃
序列是 ORACLE提供的用于产生一系列唯一数字的数据库对象,类似于MYSQL的自增主键,对于 Oracle来说,表的主键只是序列的一个应用场景。分为 while 循环和 for 循环,for循环上面已经见过了…上面是直接通过SQL执行存储过程,但实际项目都是通过JDBC调用的。上面写的是不是比较复杂,有没有更简洁的方式呢?select子句的子查询为单行子查询。from子句的子查询为多行子查询。下面演示不带参数的游标用法。
2024-09-15 23:20:37
617
原创 RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析
使用注解的形式记录操作日志,肯定是用 AOP 思想来做的,所以一定有个切面,LogAspect 这个切面用是前置通知和后置通知组合,当然也可以使用 around 环绕通知来做。在日常编程中,记录日志是我们的得力助手,尤其在处理关键业务时,它能帮助我们追踪和审查操作过程,那 RuoYi 是怎么记录操作日志的呢?前端页面,不同的用户登录会显示不同的操作权限,这是因为每个用户拥有的角色权限可能不一样,怎么判断的呢,使用。查询用户信息,可以看下这个接口,其实就是获取当前用户拥有的角色和权限集合。
2024-08-28 13:30:37
2680
原创 likeadmin本地开发环境部署
likeadmin 是由广州码多多信息科技公司出品的一款快速开发通用管理后台,基于Vue3、elementPlus,结合PHP、Java、Python、Go等主流后端语言搭建,集成用户权限、代码生成器、表单设计、岗位部门、云存储、素材中心、微信配置、API模块等一系列开箱即用功能。
2024-08-27 14:55:26
1258
2
原创 Spring父子容器
HierarchicalBeanFactory 接口就表示带有层级关系的父子容器了,实现了该接口,就表示这个容器带有层级关系,即具备父子容器的功能。那么接下来,在 Bean 查找的过程中,首先就在当前容器中查找,如果找不到,就去父容器中查找。当从 child 中查找 bean 的时候,首先去 child 容器中查找,这个容器中如果不存在该 bean,那么就去父容器中查找,父容器中不存在,就去爷爷容器中查找。要实现父子容器的效果,有一个前提,就是我们的容器本身要支持父子容器,而我们日常开发中最常用的。
2024-08-23 17:11:56
576
原创 BeanFactoryPostProcessor 和 BeanPostProcessor
这种写法实际上就是一个自定义标签,在这个标签中,会进行一些默认的 Bean 属性的配置,但是,一般来说,这些属性,如果想要自己去配置,也是可以的,比如。后置处理器,在这个后置处理器中,会找到所有的 ${} 格式的 value,并将之替换为真正的值,后面再去创建 bean 的时候,用到的就是真实的值了。这个属性配置的含义表示,对于无法解析的 value,就不解析(默认情况下,如果遇到无法解析的 value,会抛出异常)。创建完毕,Bean 尚未创建的时候,想要去修改 Bean 的属性,那么就可以通过。
2024-08-22 23:06:44
1237
原创 AOP+ 自定义注解 +SpringElExpress自研缓存组件
先查缓存,缓存里面有,直接返回;缓存没有,查数据库,并更新到缓存。最后 service 层的效果,简便多了是不是。思考下这段代码,想想项目中是不是到处存在。不要忘了重写 redisTemplate。可以把这部分通过AOP来统一处理。
2024-08-18 21:58:07
308
原创 RabbitMQ 消息可靠保障
我们都知道 MQ 有削峰填谷的效果,假设有下面的场景,消息队列里面有10000条消息,但是消费端的并发能力只有 1000,为了避免一次性把这1万条消息全部取出,导致消费端压力太大,我们可以做个设置,每次最多取1000条消息,对消费端也是一种保护。因为 RabbitMQ 客户端默认是 自动返回 ACK 确认的,也就是不管是处理成功还是失败,默认都按成功来处理,这样就不太好,所以这个配置要改成手动确认。为目标交换机指定备份交换机,当目标交换机投递失败时,把消息投递至备份交换机(实际项目中很少用,一般用思路A)
2024-08-17 21:03:43
853
原创 Spring声明式事务失效场景
那你可能会想到,把 insertUser 方法变成 public 不就行了,然后重新测试,发现依然不行哈哈,因为Spring 通过 AOP 技术对方法进行增强,要调用增强过的方法必然是调用代理后的对象,而 this 指针代表对象自己,Spring 不可能注入 this,所以通过 this 访问方法必然不是代理。来包裹标记了 @Transactional 注解的方法,当方法出现了异常并且满足一定条件的时候,在 catch 里面我们可以设置事务回滚,没有异常则直接提交事务。
2024-08-09 11:56:55
1159
原创 分布式事务一站式解决方案-Seata
本次学习会用到如下三个模块,对应三个微服务,每个服务用的单独的数据库,其中 cloud-seata-order-service2001 是订单微服务、cloud-seata-storage-service2002 是库存微服务、cloud-seata-account-service2003 是账户微服务,具体的代码可以去 github 上获取。一般来说,如果是微服务架构,会采用分布式系统开发,既然是多个微服务,那肯定是有多个独立的数据库的,那问题来了,,打开 undo_log 表,发现此时有数据。
2024-08-07 22:40:54
1257
原创 mybatis-plus批量插入优化
但是,到这里并没有结束,mybatisPlus官方提供的 insertBatchSomeColumn 方法不支持分批插入,**也就是有多少直接全部一次性插入,这就可能会导致最后的 sql 拼接语句特别长,超出了mysql 的限制,**于是我们还要实现一个类似于saveBatch 分批的批量插入方法。mybatis-plus -core 核心包提供了基本的增删查改注入器,在批量插入数据这里显然不够,所以可以看到在 mybaits-plus-extension 包下还额外提供了批量插入的可注入方法。
2024-08-01 14:35:06
3468
2
原创 javascript定时器重叠,无法清除定时器
鄙人是一名后端开发,最近写了一些前端代码, 发现定时器总是无法清楚,网上查了半天,原来是命名的问题,我丢。将clearInterval()函数的返回值设成了timer,换成别的值就好了。
2024-06-30 22:51:44
349
原创 windows脚本监听java程序是否在运行
下面这段脚本的目的是:如果程序已经在运行,那就提示服务正在运行,就,如果程序挂了,就提示服务未运行,然后重启。循环监听检测,60s监听一次,并处理了乱码问题。
2024-01-28 13:44:49
382
原创 Redis7.x 高级篇
Redis7.x 高级篇Redis版本发行时间Redis单线程说的是什么东西Redis版本发行时间Redis单线程说的是什么东西
2023-11-04 19:13:03
352
原创 @Configuration注解
如果配置类上添加了@Configuration 注解的话,那么在配置类内部方法调用的时候,例如上面的 ser 中调用 dog 方法的时候,并不会直接调用 dog 方法,而是先去 Spring 容器中查找是否存在 dog 对象,如果存在,则直接拿来使用,如果Spring 容器中不存在 dog 对象,才会调用 dog 方法,调用的时候,不仅 user 自己使用,也会 Spring 容器注册dog 对象。当然,对于没有添加 @Configuration 注解的配置类来说,其实也有另外一种方式实现上面的效果,
2023-10-24 09:34:18
86
原创 Vue3学习
App.vue引入了中间层,中间层引入了底层,可以直接在底层组件通过 inject 获取App.vue组件传过来的值。比如说底层组件要更新count的值,那么必须底层来触发,顶层来更新(因为count是在顶层定义的嘛)3、数据 和 函数,需要在 setup 最后 return,才能模板中应用。概念:通过 ref 标识获取真实的dom对象或者组件实例对象。作用和场景:顶层组件向任意的底层组件传递数据和方法,顶层组件,通过 provider向底层组件传值。再比如获取组件里面数据或方法,
2023-09-06 21:47:23
484
原创 Vue2基础学习
这里的请登录注册,对于已经登录的用户是不需要展示的;而购物车,当鼠标移入的时候会显示,鼠标移出隐藏…作用:动态设置html标签属性->src、title、url,可使用简写,作用:给表单元素使用,双向数据绑定,可以快速获取或设置表单元素内容。以下演示了如何定义方法,如何获取data中的变量。
2023-09-05 11:02:13
953
原创 IDEA 报 Cannot resolve symbol ‘HttpServletResponse‘ 解决
springboot2版本换成springboot3之后,代码这里突然报红了,首先要淡定,把原先Import的引入删掉,重新引入试试呢,是不是很简单哈哈。
2023-08-30 17:08:46
1861
原创 观察者模式实战
假设创建订单后需要发短信、发邮件等其它的操作,放在业务逻辑会使代码非常臃肿,可以使用观察者模式优化代码。假设后面还需要做其它的监听,再重新定义一个监听类即可,创建订单业务逻辑无需修改,对扩展开放,修改关闭。最后再创建订单的业务逻辑进行监听,创建订单。
2023-08-12 11:12:10
889
原创 策略模式实战应用
这样就是利用了策略模式改造,如果后续还有其它的什么vip,只需要再重新定义一个接口的实现类即可,CourseRelationService这里面的逻辑无需修改,达到了对扩展开放,对修改关闭的目的。假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现。最后,在业务层注入bean对象,并进行方法调用,可以看到,这里没有使用@Autowired来进行bean的注入,而是定义了一个。
2023-08-12 10:30:15
880
原创 IDEA设置Maven自动编译model
假设我们的项目结构是下图这样,也就是一个父工程下包含多个子模块,其中。是公共模块,其它两个模块要想使用必须在pom文件中引入。idea把这两个勾选上,就无须每个模块都。本地开发要想不会报错,一般情况。
2023-08-09 21:43:28
1122
原创 asdfsdfsdfd
赛道积分将看法看法狂风ejejh计划反馈空客虐民残虐夫帕托让他每三年热帅防空单方可刷我扽尽快经济就看江老家反复框架老单飞了
2022-09-14 07:41:49
337
原创 安装harbor
Generate a Certificate Authority Certificate1、openssl genrsa -out ca.key 40962、yourdomain.com 替换成 ip,下面步骤同理openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \ -key ca.key \ -
2022-03-08 22:27:03
244
原创 单链表的 Java 语言实现
之前有写过一篇单链表的 C 语言实现,现在写一篇 Java 的实现链表节点单独定义成一个静态内部类public class TestListNode { public static void main(String[] args) { ListNode head = createListNode(8); trverseNodeList(head.next); ListNode newHead = reverseNodeList(head.next);
2021-12-18 19:00:37
1142
原创 线程池-lhg
线程池线程池为什么要用线程池Executors 线程池工具类线程池原理线程池原理总结:为什么不用 Java 自带的线程池?手写一个线程池?线程池为了更好地实现用户级的线程调度,更有效地帮助开发人员进行多线程开发,Java 提供了一套 Executor 框架。这个框架中包括了 ScheduledThreadPoolExecutor 和 ThreadPoolExecutor 两个核心线程池。前者是用来定时执行任务,后者是用来执行被提交的任务为什么要用线程池1.减少了创建和销毁线程的次数,每个工作线程都
2021-12-01 20:29:11
417
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人