自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java的堆如何分代的?

正常情况下,对象在新生代进行分配,当Eden区内存耗尽,无法分配新的对象时候,会触发YoungGC进行垃圾回收,没有被回收的对象搬运到Survivor区,这个过程叫做晋升。1、很多对象都是创建在Eden区,Eden区内存用完的时候,会触发GC,非活对象会被标记死亡,活着的对象移动到Survivor区。1、躲过15次GC,每次垃圾回收的时候,没有被回收掉的对象年龄就会+1,累计到15次(jdk1.8默认),就会进入到老年代。新生代和老年代,新生代存放新创建的对象,老年代存放长期存在的对象。

2024-03-06 23:51:40 520 2

原创 sql执行计划需要关注那些内容?

执行计划

2024-03-06 23:30:11 637

原创 设计模式的7大基本原则

一个类只负责一种职责,如果一个类有两个不同的职责, 如果职责1的需求发生变更而需要改变时,可能会造成职责2的执行错误。要求程序要依赖于抽象接口,而不是具体的实现,该原则通过引入抽象接口和抽象类来将高层模块和低层模块解耦。对于拓展是开放的,对于修改是关闭的。任何父类出现的地方,都可以用它的字类来替代,而不会导致系统出错,强调正确使用继承关系。客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。接口应该小而专注,不应该包含其他多余的方法,不要使用一个大的总接口。

2024-01-10 14:43:54 646

原创 什么是设计模式?有什么好处?

设计模式可以降低对象之间的交互的耦合性,让系统更容易拓展和维护,增加代码可读性。通过抽象层和接口,将变化的部分抽离出来,从而不影响其他业务,增加代码的可拓展性。设计模式是在软件开发过程中经常遇到的问题的通用解决方案。

2024-01-10 12:57:26 349

原创 如何使用自定义注解

RetentionPolicy.CLASS:停留在class文件,但是会被jvm丢弃(默认)ElementType.TYPE:类、接口(包括注解类型)或者是enum声明。ElementType.LOCAL_VARIABLE:局部变量声明。ElementType.PARAMETER:参数声明(废弃)ElementType.CONSTRUCTOR:构造器声明。ElementType.METHOD:方法声明。ElementType.PACKAGE:包声明。

2024-01-10 12:23:28 389

原创 策略模式解决if-else问题

这种模式支持开闭原则,在不修改现有代码的前提下,动态的添加、删除、替换算法。策略模式是一种行为设计模式,它允许在运行时根据不同的情况来选择不同的策略。:它是一个接口,具体的策略实现类去实现这个接口,就可以提供不同的实现方式。2、提高代码可读性:不同的业务处理在不同的策略实现类中,易于理解和维护。1、易于拓展:不需要修改原有代码,方便的增加、删除算法。可以根据需要来修改策略,或者定义一个工厂类。以Strategy接口实现某具体算法。3、避免大量的if-else语句。

2024-01-10 11:55:24 812

原创 线程池线程数设置多少为合适?

5、可根据公式先设置一个数值,然后再根据实际的业务场景来调整。N是CPU的总和数。CPU密集型:线程池大小设置为N+1。IO密集型:线程池大小设置为2N+1。4、一次业务的整体耗时。2、服务器的配置情况。

2024-01-02 23:52:38 724

原创 binlog、redolog、undolog的区别

在事务进行的全过程中,Mysql会将事务做了什么改动存储到redolog中,当系统发生异常情况时,Mysql会通过redolog中的记录来进行恢复操作,将事务所做的操作持久化到磁盘上。用于事务回滚或者是服务崩溃时回滚事务所做的操作,当一个事务执行完成之后,Mysql会将事务修改前的数据记录到undolog中,如果事务需要回滚,则会从undolog中找到对应的记录用来撤销事务所做的修改。主要用于对于数据库的数据备份,容灾恢复,数据复制等操作。undolog主要是保证事务的原子性和一致性,主要用于事务回滚。

2024-01-02 22:52:39 535

原创 MySQL聚簇索引和非聚簇索引的区别

对于聚簇索引来说,他的非叶子节点上存储的是存储数据的值,而它的叶子节点上存储的是这条记录的整行数据。2、对于非聚簇索引,它的非叶子节点存储的都是索引值,它的叶子节点上存储的是主键的值所以,非聚簇索引的查询,需要进行一次回表,就是先查到主键ID,在去查询需要的字段。,它是将表数据按照主键的顺序存储在磁盘上的一种方式,这种索引方式保证了行的物理存储顺序和主键的逻辑顺序相同,所以查找聚簇索引的速度非常快。1、对于聚簇索引,它的非叶子节点存储的是索引值,它的叶子节点存储的是整行记录。

2023-12-29 23:58:40 689

原创 什么是RabbitMQ死信队列?如何实现?

当消息变成“死信”之后,如果配置了死信队列,那么它将会被发送到死信交换机,死信交换机将死信发送到一个队列上,这个队列就是死信队列。2、消息过期:RabbitMQ中消息可以设置过期时间,如果在规定时间内没有被消费,它可以被认为是死信并被发送到死信队列。4、消息无法路由:当消息不能被路由到任何队列时,例:没有绑定关系或者是路由键,消息可以被发送到死信队列。3、死信队列和死信交换机进行绑定:将死信队列和死信交换机进行绑定,以便消息发送到死信队列上。1、创建死信队列:用来存储死信消息的队列。

2023-12-28 22:56:10 738

原创 MySQL事务中的隔离级别有哪些?

不可重复读,是一个事务范围内的两次查询返回了不同的数据。事务在做范围查询时,有其他事务对这个范围的数据做了新增或者删除操作,导致范围内查询的结果条数不一致。读到了其他事务未提交的数据,比如A事务在操作数据,但是未提交,B事务处理的时候使用到了这条数据,因为事务A还未提交,所以事务B读到的数据就是脏数据。由于读已提交的隔离级别会产生不可重复读的现象,所以更高一级别的隔离级别可以解决不可重复读的问题,没办法彻底解决幻读。最低的隔离级别,A事务可以读取到B事务未提交的数据,会存在幻读、脏读、不可重复读的问题。

2023-12-28 14:00:59 479

原创 Mysql主从复制的实现过程

半异步复制是全同步复制和异步复制之间的一种复制方式,主库执行完事务之后,不会立马给客户端返回,也不会等所有从库都进行复制完成,而是等其中一个从库完成数据复制之后,再反馈给客户端。2、从服务器的I/O线程会尝试和主服务器建立连接,主服务器中有一个binlog dump线程,专门和从服务器的I/O线程交互。5、当dump线程检测到binlog发生变化时,会从指定位置开始读取内容,然后会被从服务器的I/O线程拉取过去。全同步复制中,当主库执行完一个事务之后,会等待所有的从库完成数据复制之后,才会给客户端反馈。

2023-12-28 00:28:27 545

原创 Redis和Memcached有什么区别?

2、持久化方式不同:redis支持rdb和aof方式持久化,可以将数据持久化到磁盘上,Memcached不支持持久化。1、数据结构不同:redis支持多种数据结构,Memcached只支持简单的键值对。3、Memcached是将数据全部存储到内存中,断电之后就会挂掉。Redis适应于数据结构复杂、需要更高级功能和数据持久化的场景。Redis和Memcached都是常见的缓存服务器。Memcached适应于简单的键值存储场景。

2023-12-26 23:32:33 602 1

原创 缓存穿透、击穿、雪崩

访问一个缓存和数据库都不存在的key,此时会直接打到数据库上,并且查询不到数据,没办法根据查询结果写入缓存,所以下一次请求过来还是直接访问到数据库,并且缓存也起不到作用了,每次请求都会走到数据库,流量大的话数据库可能就会挂掉。某一个热点key,在缓存过期的一瞬间,同时有大量的请求进来,由于缓存过期了,所以这些请求都会走到数据库,造成瞬时数据库的请求量增大,导致数据库挂掉。使用锁的时候,添加锁时,要按照请求key的维度来加锁,如果使用“固定的key”加锁,会导致不同的key之间也会互相阻塞。

2023-12-26 17:19:06 450

原创 什么是线程池

4、CallerRunsPolicy:当有新任务提交后,如果线程池没被关闭且没有能力执行,则把这个任务交于提交任务的线程执行,也就是谁提交任务,谁就负责执行任务。2、newCachedThreadPool():创建一个可缓存的线程池,调用execute将重用以前构造的线程,如果没有可用的线程则创建一个新得线程并添加到线程池中,终止并从缓存中移除那些超过60s没有被使用得线程。线程池就是提前创建好一批线程,保存到线程池中,当有任务需要执行的时候,从线程池中选一个线程来执行任务。线程池、连接池、对象池。

2023-12-26 00:32:22 363

原创 创建多线程有几种方式?

Future是一个接口,代表一个异步执行的结果,接口中的方法用来检查执行是否完成、等待完成和得到执行的结果。当执行完成后,只能通过get方法得到结果,get方法会阻塞到有结果,可以通过cancel方法取消。Runnable和Callable都可以创建多线程,但是Runnable需要重写run方法,Callable需要实现call方法。Runnable的run方法无返回值,Callable的call方法有Object类型的返回值。2、实现Runnable接口实现多线程。1、继承Thread类重写run方法。

2023-12-25 23:55:59 487

原创 线程的几种状态?状态之间流转

WAITING是线程等待状态,调用wait方法,线程进入WAITING状态,当线程执行sleep方法时,线程进入TIMED_WAIT状态。就绪:线程创建后,调用了start()方法,等待线程调度并且分配cpu使用权。4、等待状态(WAITING):进入该状态的线程需要等待其他线程做出动作(通知)5、超时等待(TIMED_WAIT):该状态和等待状态不同,指定时间到了自动返回。运行中:就绪状态中的线程获取到了cpu时间片,开始执行代码。1、初始状态(new):新创建了一个线程,还没调用start()方法。

2023-12-25 23:27:32 314

原创 Linux上安装Redis教程

本篇文章是基于CentOS7,安装Redis版本为redis-6.2.6。

2023-09-21 15:03:27 49

原创 通过nginx访问服务器指定目录下图片资源

通过nginx反代访问服务器图片资源

2023-06-05 15:20:20 4965

原创 基于AOP实现接口请求的入参和返回日志打印

鉴于日常开发过程中,很多排查问题的情况下,需要二次操作业务流程进行入参的获取,实际操作起来增加排查问题的处理时间,为了提高效率,可以通过Aop实现接口入参以及返回的日志打印,方便快速解决问题。

2023-03-29 14:34:58 509

原创 Multipartfile转成file文件方法

multipartfile转成file文件

2022-11-21 19:34:37 288

原创 git将A分支的某个提交log合并到B分支

git将A分支的某个提交log合并到B分支

2022-11-01 10:33:35 1454

原创 java实现WebSocket客户端&&断线重连机制

java实现websocket客户端websocket客户端重连机制

2022-07-01 13:54:37 5657 1

原创 CountDownLatch一个或者多个线程去等待其他线程完成操作统一返回

一个或者多个线程去等待其他线程完成操作统一返回;java开启多个线程,等待所有线程都执行完毕之后接口统一返回

2022-06-20 22:21:51 814 1

原创 根据url路径获取输入流

根据附件的url路径建立连接,从连接对象中获取输入流

2022-06-09 11:39:27 1304

原创 JAVA通过EasyPoi根据模板导出word文档

1、引入依赖备注:如果没有jar包冲突,可以忽略jar排重(<exclusions>标签内内容) <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.3.0</version>

2022-03-24 12:06:00 1489 1

原创 使用MybatisPlus对List集合进行分页

public class PageListUtils { /** * 分页函数 * @param currentPage 当前页数 * @param pageSize 每一页的数据条数 * @param list 要进行分页的数据列表 * @return 当前页要展示的数据 */ public Page getPages(Integer currentPage, Integer pageSize, List list) .

2022-03-23 14:55:40 1873

原创 List<bean> 转换成List<Map>

//将listmap转换成list实体类 List<OaAttachment>list=new ArrayList<OaAttachment>(); if(Func.isNotEmpty(attachments)){ for(Map<String,Object> map:attachments){ OaAttachment fileInfo=new OaAttachment(); .

2022-02-15 17:09:20 1633 1

原创 java执行linux命令

列举个例子,其他类推:1.java删除linux服务器某个目录下的文件夹Process process =null;//文件夹路径String path = "/var/www/uploadFileResource/temp";String[] cmd = new String[] { "/bin/sh", "-c", "rm -rf "+path };try { //执行命令 process = Runtime.getRuntime().exec(cmd); lo

2022-02-14 17:09:30 5386

原创 java下载附件到本地目录

需要注意的点:/** * 下载的是图片 本地路径则是 名称.png/jpg等等 * 下载的是文档或者是pdf 本地路径则是 名称.doc/xls/pdf * */★★★本地目录后面一定要跟着文件名称String path="E:\\image\\123.jpg"; public static void main(String[] args) throws Exception { String url = "https:

2021-10-11 15:42:42 486

原创 idea远程debug调试

使用原因:由于本地环境服务正常运行,部署到linux服务器之后,服务出现报错的情况,这个时候不好排查问题,只能在本地通过以打log的方式再次将服务部署到linux服务器,以查看日志的方式来排查错误点;此办法耗时耗力,事倍功半。那么我们就可以通过远程debug的方式来直接调试linux服务器上的代码首先在服务器上的服务启动指令中设置jvm参数: nohup java -Xdebug -Xrunjdwp:transport=dt_socket,address=5500,serv...

2021-09-09 10:13:23 801 1

原创 原生js生成标签云

/** 3d标签云* 功能:鼠标移入标签,当前标签静止放大* 说明:* */window.tagcloud = (function(win, doc) { // ns // 判断对象 function isObject (obj) { return Object.prototype.toString.call(obj) === '[object Object]'; } // 构造函数 function TagCloud (options.

2021-09-03 12:25:00 556

原创 java手机号正则校验工具类

public class RegexUtils { /** * 大陆号码或香港号码均可 */ public static boolean isPhoneLegal(String str)throws PatternSyntaxException { return isChinaPhoneLegal(str) || isHKPhoneLegal(str); } /** * 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任.

2021-08-28 13:03:34 662

原创 RabbitMq创建队列绑定交换机

声明交换机@Beanpublic TopicExchange exchange() { return new TopicExchange(exchange);}声明队列@Beanpublic Queue delayedQueue(){ return new Queue(queue);}@Beanpublic Queue delayedQueue1(){ return new Queue(queue1);}队列绑定交换机@Beanpublic

2021-08-25 11:32:56 5116 1

转载 最详细的centos7安装jdk

jdk、mysql :https://blog.csdn.net/qq_36178165/article/details/90645085膜拜大佬

2021-08-20 11:41:09 107

原创 mysql5.7及以下版本,删除因批量新增出现的数据重复问题,多条重复数据,只保留一条。

适用范围:mysql5.7及以下版本,mysql8.0+ 可以直接使用窗口函数其中crossRecordSyscode 是唯一编码,自行根据sql语句进行改造。DELETE FROM ${tableName} where id in( SELECT t2.id FROM( SELECT t.id FROM ( SELECT @num := IF(@crossRecordSyscode = crossRecord..

2021-08-20 11:37:17 191

原创 java websocket使用@Autowired注入为null得问题

SpringBoot项目集成websocket,建立连接之后发现自动注入为NullException。因为spring是单例而websocket是多对象(每建立一次连接就生成一个对象)所以在项目启动的时候,会初始化websocket,并且注入到spring容器中,这个时候注入的service是不为null的,但是spring是单例,所以只会注入一次,当再次建立websocket连接时,这个时候对象就为NullException了。解决方案:可以通过spring上下文获取获取bean获取上下文

2021-08-20 11:16:22 797

原创 java的BigDecimal大小比较方法

//a、b均不能为nullif(a.compareTo(b) == -1){ System.out.println("a小于b");} if(a.compareTo(b) == 1){ System.out.println("a大于b");} if(a.compareTo(b) > -1){ System.out.println("a大于等于b");} if(a.compareTo(b) < 1){ System.out.println("a.

2021-08-20 11:01:15 855

原创 在线Cron表达式

https://cron.qqe2.com/

2021-08-20 10:59:28 334

原创 java后台访问第三方图片资源,过滤证书信任问题,并且返回文件流(直接访问第三方资源,需要在浏览器安装证书)

过滤证书信任工具类:public class SslVerifyUtil { public static void trustAllHttpsCertificates() throws Exception { javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1]; javax.net.ssl.TrustManager tm = new miTM();

2021-08-20 10:57:34 336

原生js标签云.zip

原生js生成标签云

2021-09-01

空空如也

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

TA关注的人

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