- 博客(32)
- 收藏
- 关注
原创 Executors类创建四种常见线程池
线程池架构Java里面线程池的顶级接口是,Executor并不是一个线程池,只是一个执行线程的工具。真正的线程池接口是ExecutorService。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在Executors类里面提供了一些静态工厂,生成一些常用的线程池。Java通过Executors工厂类提供四种线程池,分别为:创建一个统一的线程任务,方便测试四种线程池。
2025-04-02 17:10:04
563
原创 Java异步编程-CompletableFuture
一、什么是CompletableFuture?Future异步执行任务:可以使用CompletableFuture来执行一个耗时的任务,而不会阻塞主线程。:可以将多个CompletableFuture串联起来,以便在它们都完成后执行一些操作。处理异常情况:可以使用CompletableFuture来处理异步任务中可能出现的异常情况。并发执行多个任务:可以使用CompletableFuture来同时执行多个任务,并等待它们全部完成。二、CompletableFuture的结构。
2025-04-02 14:20:40
880
原创 java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.util.Link
这块需要的是 resultType="java.util.LinkedHashMap"。这个错误,也会在你当前调用的这块报错(真离谱!浅谈下mybatis这个查询报错,困扰了我好久!哪怕全局其他xml有。
2025-03-19 18:41:12
154
原创 Argument for @NotNull parameter ‘path‘ of org/jetbrains/jps/incremental/relativizer/PathRelativizerS
【代码】Argument for @NotNull parameter ‘path‘ of org/jetbrains/jps/incremental/relativizer/PathRelativizerS。
2025-03-18 09:05:43
147
原创 Notepad++删除带指定字符的行(通过excel导入数据库)
例如从微信批量拷贝的聊天内容粘贴在notepead中ctrl+H 打开替换,在查找目标输入框中输入,替换为 输入框保持空白,勾选下方查找模式中的正则表达式,如图:效果如下 带有目标字符的整行一整行都被替换更进一步想去掉空行的话按图操作效果如下。
2025-02-18 17:36:09
318
原创 Spring设计模式(9种)(详细篇)
1.1 定义工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。1.2 主要作用将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。1.3 解决的问题工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了“开放 - 关闭原则。
2025-02-06 18:27:44
1268
原创 MQ 消息丢失、重复、积压问题以及解决办法
做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如:优惠劵服务系统的需求无论如何变化,交易服务不用做任何改变,即使当优惠劵服务出现故障,主交易流程也可以将优惠劵服务降级,实现交易服务和优惠劵服务的解耦,做到了系统的高可用。遇到秒杀等流量突增的场景,通过 MQ 还可以实现流量的“削峰填谷”的作用,可以根据下游的处理能力自动调节流量。1.引入 MQ 消息中间件实现系统解耦,会影响系统之间数据传输的一致性。
2025-01-23 18:33:42
521
原创 Kafka的生产者、消费者、broker的基本概念
kafka是一款基于的消息系统。它一般被称为“”或者“文件系统或者数据库提交日志用来提供所有事物的持久化记录,通过重建这些日志可以重建系统的状态。同样,kafka的数据是按照一定顺序持久化保存的,可以按需读取。
2025-01-23 17:24:55
746
原创 RocketMQ 的两种消息消费模式:Pull 和 Push
在RocketMQ 中一般有两种获取消息的方式:Pull(拉取,消费端主动去broker拉取)和Push(推送,主动推送给消费端pull:取消息的过程需要用户自己写,首先通过打算消费的Topic拿到MessageQueue的集合,遍历MessageQueue集合,然后针对每个MessageQueue批量取消息,一次取完后,记录该队列下一次要取的开始offset,直到取完了,再换另一个MessageQueue。push:consumer把轮询过程封装了,并注册。
2025-01-23 17:02:23
1170
原创 Kafka 和 MQ 的区别
1.1.MQ简介消息中间件,其实准确的叫法应该叫消息队列(message queue),简称MQ。其本质上是个队列,有FIFO的性质,即first in first out,先入先出。RabbitMQRocketMQKafka1.2.MQ的应用场景流量削锋应用解耦异步任务1.流量削锋流量过大的时候,用MQ作为一个中间层,暂时存储流量,让流量在队列中排队去访问服务,从而控制直接访问服务的流量,减轻服务的实时流量压力。2.应用解耦使用MQ作为应用之间的中间层,从而使得应用之间不存在。
2025-01-21 15:21:52
1915
1
原创 Spring Bean的提前加载和懒加载
是Spring框架中的一种机制,用于在需要时才创建Bean,而不是在容器启动时立即创建。注解注入了一个延迟加载的Service类,那么在程序初始化时,Controller会被初始化,同时Service也会被初始化,从而导致懒加载失效。Spring在扫描加载Bean时,会读取@Lazy和@Component注解的相应值,并设置Bean定义的。,否则会导致延迟加载失效。在Spring框架刷新时,会初始化非延迟加载的单例Bean。,需要确保调用链前都不存在非延迟加载类,否则延迟加载会失效。在配置类中也可以使用。
2025-01-16 16:17:47
458
原创 Spring Boot中yml和properties的区别
定义和定位不同:properties 是“属性”的意思,它在创建之初,就是用来在 Spring Boot 中设置属性的。yml 是 YAML 是缩写,它的全称 Yet Another Markup Language,中文是“另一种标记语言”。所以从二者的定义可以看出:它们的定位和层次是完全不同的,properties 只是用来设置一些属性配置的,而 yml 的格局和愿景更大,它的定位是“另一种标记语言”,从格局上来讲 yml 就甩 properties 好几条街。
2025-01-16 13:35:44
593
原创 Java List按1000条数据切割处理
/执行数据库插入操作。将所需数据按照每1000条插入一次数据库(单次插入1000条以上数据库会拒绝),现有数据一万多条。
2025-01-15 14:01:59
388
原创 Spring Bean的生命周期
但是对于一些复杂的bean的创建,Spring会在Bean的生命周期中开放很多的接口,能够让你加载Bean的时候对Bean做一些改变。: 在普通bean属性之后调用,在初始化调用afterPropertiesSet 或者自定义初始化方法之前调用,在 ApplicationContextAware 之前调用。在创建此bean的bean工厂中设置bean的名称,在普通属性设置之后调用,在InitializinngBean.afterPropertiesSet()方法之前调用。或者自定义的初始化方法)之后调用。
2025-01-15 11:22:12
848
原创 mysql、oracle、sqlserver的区别
体积小、速度快、总体拥有成本低,开放源码,搭配“L(Linux)A(Apache)M(MySQL)P(PHP/Perl/Python)“或“LN(Nginx)MP”就可以建立起一个稳定、免费的网站系统,适合中小型网站。MySQL数据库被广泛地应用在Internet上的中小型网站中。MySQL数据库体积小、速度快、总体拥有成本低、开放源码。使用方便、功能强大,可靠性好、安全性好、可移植性好、适应高吞吐量,适用于各类大、中、小、微机环境。ORACLE数据库适用于业务逻辑较复杂、数据量大的较大型项目开发。
2025-01-13 18:19:24
1374
原创 InnoDB和MyISAM的区别
例如,在一个在线购票系统中,不同用户可以同时购买不同场次的电影票(假设场次信息存储在同一表中,以场次 ID 为主键),InnoDB 通过行级锁可以保证每个用户在操作自己所选场次的票务信息时,不会受到其他用户操作的干扰,从而大大提高了并发性能。这意味着其他用户在这个操作完成之前,无法对该表进行写操作。在上述用户表和订单表的例子中,InnoDB 可以通过外键约束确保订单表中的用户 ID 引用了用户表中有效的用户 ID,当违反这种约束时(如插入一个不存在用户 ID 的订单记录),数据库会自动报错,拒绝该操作。
2025-01-13 16:02:35
868
原创 Redis雪崩以及解决方法
Redis中大量缓存数据在同一时间过期(失效)或者Redis故障宕机时,如果此时有大量的用户请求,都无法在Redis中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个。2.缓存空值或者默认值,当发现缓存穿透的现象时,可以针对查询的数据,在缓存中设置一个空值或者默认值,这样后续请求就可以从缓存中读取到空值或者默认值,返回给应用,使其不会继续查询数据库。,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据。
2025-01-11 19:09:36
543
原创 关于SQL的使用规范(筑基篇)
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。当n个表连接时,需要n-1个连接条件。修改一个表的缺省值时只能影响后插入到表中的数据,不影响原有的数据 大表删除一个字段时需要较长的时间,可以先给unused后再进行删除。2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
2025-01-10 14:06:47
691
原创 SQL语句中in和exists用法
次,它并不缓存exists()结果集,因为exists()结果集的内容并不重要,重要的是结果集中是否有记录,如果有则返回true,没有返回false. 它的查询过程类似于以下过程。in在查询的时候,首先查询子查询的表,然后会将内表和外表做一个笛卡尔积,按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。(口诀:外大内小用in)循环遍历外表,然后看外表中的记录有没有和内表的数据一样的。(口诀:外小内大用exists)以上查询使用了exists语句,exists()会执行。.id是否有记录返回。
2025-01-09 17:48:05
300
原创 java前台传递时间到后台相差8个小时的时区问题处理
2. @DateTimeFormat用于接收 前端传的时间值自动转换 可以是Date/Timestamp 可以是string 注意 格式要一样 如yyyy-MM-dd HH:mm:ss。在spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟。1. @JsonFormat用于输出的时候解析,并且设置解析时区。国内相差了8个小时,所以在时间换算上出现了这样的现象。
2025-01-06 18:01:17
246
原创 Jenkins构建报UNSTABLE异常
2-清理磁盘(查看磁盘空间占用命令:df -lh,对占用空间大的不怎么使用的删除掉。再次执行jenkins)1-查看目标服务器的磁盘空间是否占满。构建执行时报Finished: UNSTABLE。
2024-06-11 11:07:44
1179
原创 Mysql修改表字段名
ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型;用于修改已经创建好的mysql表的字段(不修改数据)举例:(颜色标注地方即需修改)
2024-05-08 14:18:15
519
原创 spring boot热部署相关pom依赖
spring boot项目添加热部署只需在总pom文件中添加如下依赖,刷新maven即可生效。顺便推荐一个巨好用的注解----@Data (自动生成构造方法--get set等)
2024-05-08 14:09:10
415
原创 在Tomcat上实现HTTPS访问
在本机Tomcat上实现通过HTTPS访问,需要创建或获得SSL证书,并以使用该证书。还需要在Tomcat配置文件中启用HTTPS连接,并指定SSL证书的位置和其他相关设置。然后,就可以通过HTTPS协议来访问Tomcat服务器,确保通信是安全加密的。
2024-04-15 14:50:07
625
原创 数据库sql篇——sql慢查询优化
记录下今日开发中一个慢查询的优化,关联查询表中其中某个表的数据量达到若百万,sql的筛选条件失效,引发了全表扫描导致了查询时间一直在60秒左右徘徊,经过简单优化后查询时间降到了6秒,达到了可容忍范围。一,索引失效1. 避免使用!或等比较操作符2. 避免使用orin、between来作为连接条件使用or并不一定会导致索引失效,如果or 前后存在非索引的列,才会导致索引失效IN、between这些其实都会走索引,关键在于随机IO的高低(between的范围,以及in条件字符串的长度。
2024-04-08 14:42:40
364
原创 数据库sql篇——关于select*和select全部字段的区别
记录今日开发中的优化sql优化项。介绍 select * 和 select 字段的区别,建议不要使用 在千万级表中查询数据的时候,首要任务是提升查询效率,为用户带来极致的体验;今天开发组领导提到了 的效率会低于select字段,且推荐使用select字段。就连《阿里Java开发手册》也明确表示不得使用 作为查询的字段列表,更是对此进行了背书。 select * 在系统解析时,会多一个步骤(从系统表获取具体字段、权限、属性等相关内容),即优先执行 Query Table Metadata For Col
2024-04-08 13:17:20
2598
原创 微信小程序开发 ——(服务部署篇)
此程序为转盘抽奖demo,设计前后端交互以及上线运营服务器部署等大致流程(本篇为服务部署篇,将尽量以最简化的步骤来记录),观看此文章的小伙伴都默认为有一定的前后端以及部署项目等知识储备。声明因本人没有租服务器 仅有一个备案过的域名,并且在域名管理里添加了A记录,且指向本机IP,服务器为tomcat,在自己电脑上,本文没有涉及动态域名绑定IP的问题。
2024-04-03 21:53:04
7508
原创 微信小程序开发 ——(后端Java篇)
此程序为转盘抽奖demo,设计前后端交互以及上线运营服务器部署等大致流程(本篇为后端Java篇,将尽量以最简化的步骤来记录),观看此文章的小伙伴都默认为有一定的前后端以及部署项目等知识储备。一,拉取一套ruoyi模板代码 本次演示为springboot版本1,增加三个接口基本可以满足抽奖小程序调用需求(1-保存微信用户信息 2-查询微信用户信息 3-查询奖品信息)2,数据库使用的时MySQL 设计了两张表(分别为奖品表和用户表)
2024-04-03 17:58:34
3257
原创 微信小程序开发 ——(微信开发者工具篇)
此程序为转盘抽奖demo,设计前后端交互以及上线运营服务器部署等大致流程(本篇为小程序开发工具篇,将尽量以最简化的步骤来记录),观看此文章的小伙伴都默认为有一定的前后端以及部署项目等知识储备。
2024-04-03 16:52:13
13908
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人