- 博客(69)
- 收藏
- 关注
原创 SpringBoot自动装配原理
我们在创建springboot项目的时候,发现只需要一个主启动类就可以运行整个springboot项目,我们一起来看一下springboot是如何自动装配和启动的。一、springboot的主启动类调用方法run()来启动项目。run方法传了3个参数,appName(启动类名称),source(资源),而这个source是通过@SpringBootApplication来指定配置资源,并返回一个ApplicationContext对象。二、@SpringbootApplica
2022-02-10 08:37:50
460
原创 ThreadLocal的底层结构和内存泄漏问题
1、ThreadLocal的作用:提供线程内的局部变量,不同线程之间不会相互干扰,线程之间相互隔离。2、ThreadLocal的原理:在多线程下操作共享变量,如果不加ThreadLocal,那么多个线程操控的是同一个共享变量,加了ThreadLocal,每个线程会保存一份共享变量,各个线程操控自己线程的变量,线程之间相互隔离,互不影响。3、ThreadLocal的基本使用:package com.zx.threadlocaldemo;public class threadloca.
2022-01-21 10:34:57
894
原创 Redis学习笔记
一、持久化(rdb和aof)1、rdb存储的数据(快照)跟拍照一样,aof存储的过程(日志) 。2、rdb通过save指令进行持久化,会在data目录下生成dump.rdb文件,但是使用rdb会出现阻塞问题。可以通过使用bgsave指令解决。3、rdb的弊端4、aof 写数据三种策略5、aof重写6、aof对比rdb7、redis事务工作流程...
2022-01-12 14:36:59
358
原创 线程池的基本参数和工作原理
1、常用的创建线程池的方式ExecutorService threadPool= Executors.newFixedThreadPool(5);//创建固定长度的线程池ExecutorService threadPool= Executors.newSingleThreadExecutor();//创建单个线程的线程池ExecutorService threadPool= Executors.newCachedThreadPool();//创建带缓存的线程池ExecutorService th
2021-12-27 17:59:24
636
原创 Redis分布式锁
以卖票为例,票数存储在redis数据库中,卖一张票,redis数据库库存减一,在多线程单机系统下,可以采用syncnized关键字或者使用Rentrelock加锁保证安全性,但在微服务高并发的情况下,就会出现重复卖票的情况,这里就要用到Redis分布式锁。1、上redis中的分布式锁setnx,只加了锁,如果代码出现异常,可能就无法释放锁,所以需要在finally中释放锁。2、假如redis宕机了,没有释放锁,需要给它设置一个过期时间。加锁和设置过期时间必须是原子操作。3、假设分布式锁.
2021-12-24 16:15:59
564
原创 SpringSecurity框架的认证和授权过程
一、认证过程1、编写自定义的过滤器TokenLoginFilter,继承UsernamePasswordAuthenticationFilter,重写attemptAuthentication、successfulAuthentication、unsuccessfulAuthentication方法,attemptAuthentication方法获取前端提交的用户名和密码,封装成Authentication对象。successfulAuthentication方法认证成功时调用,unsucces
2021-12-22 16:54:48
4350
原创 JVM笔记
一、四大垃圾回收算法1、引用计数法2、复制算法3、标记清除法4、标记整理法二、垃圾收集器垃圾回收方式大致分为四种:1、串行垃圾回收器(Serial):它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程。2、并行垃圾回收器(Parallel):多个垃圾收集线程同时工作,暂停用户线程,暂停时间比串行回收短。3、并发垃圾回收器(CMS):用户线程和垃圾收集线程同时执行,不需要停顿用户线程4、G1垃圾回收器(G1):G1垃圾回收器把堆内存分割成不同的...
2021-12-15 17:53:50
298
原创 synchronized中的锁升级
过程:当只有单线程访问的时候,就会升级成偏向锁(if版的CAS)当有多个线程访问的时候,会升级为轻量级锁(CAS)当CPU消耗过大,线程在3-5秒内抢不到锁,就会升级为重量级锁不同锁的性能比较:...
2021-12-15 16:45:15
400
原创 SpringData JPA集成ElasticSearch及其使用
1、导入相关的依赖<!--elasticsearch-rest-high-level-client --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.3.2&l
2021-12-13 11:23:19
2241
原创 js页面懒加载
通过jquery实现根据滚动页面加载相关数据。$(function() { getCount(); // 设置布尔值用于判断是否该DIV到达过可视区域 var scrollflaga = true; var page=1; //ajax请求第一页数据 getFinishList(page); var flag=true; // 监听滚轮事件 $(window.
2021-11-26 17:33:10
697
原创 springboot集成websocket及其使用
1、导入websocket相关jar包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>2、新建WsConfig配置类3、先导入stomp.js和sockJs.js文件...
2021-11-23 22:30:21
879
原创 InterlliJ Debug方式启动:method breakpoints may dramatically show down debugging
使用idea在DEBUG的时候出现Method breakpoints may dramatically slow down debugging,如图:根据语义可能是断点打在方法上面了,导致在某个断点卡住了。重启服务器和重启idea已然无解。打开Breakpoints面板看看,(快捷键:Ctrl - Shift -F8 )将前面选择框的"勾勾"去掉点击Done即可。...
2021-10-23 10:26:45
171
原创 如何使用线程池对接口进行性能调优?
今天在工作中遇到一个问题,当接口中的列表长度太长,for循环遍历时间就会变得很长,接口的响应速度就会变得很慢,于是我就想,如何使用线程池来优化接口响应时间呢?一、1、创建一个固定长度的线程池ExecutorService pool=Executors.newFixedThreadPool(courseList.size());2、在for循环创建线程任务并提交给线程池for (int i=0;i<courseList.size();i++){ Runnable ...
2021-10-22 16:37:06
1313
原创 spring中bean的生命周期和作用域
1、生命周期(1)从对象创建到对象销毁的过程,2、bean生命周期(5步)(1)通过构造器创建bean实例(无参数构造)。(2)为bean的属性设置值和对其他bean引用(调用set方法)中(3)调用bean的初始化的方法(需要进行配置初始化的方法),(4) bean可以使用了(对象获取到了),(5)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)。3、bean生命周期(7步)【在初始化前后调用后置处理器的方法】(1)通过构造器创建bean实例(无参数构
2021-10-14 10:24:53
621
原创 @Scheduled注解 定时任务
@Scheduled cron表达式一、Cron详解:Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:1.Seconds Minutes Hours DayofMonth Month DayofWeek Year2.Seconds Minutes Hours DayofMonth Month DayofWeek每一个域可出现的字符如下:Seconds:可出现", - * /"四个字符,有效范围为0-59的整数...
2021-10-08 11:29:41
131
原创 使用Springboot+websocket实现简单的聊天室
1、导入websocket相关的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>2、新建WebSocketStompConfig配置类,内容如下package com.zx;import org.s
2021-09-16 09:21:05
239
原创 mybatis-generator逆向工程
在日常的项目中经常需要自己手动去编写业务层、持久层等等一些文件,大大的消耗了我们很多时间,而mybatis提供了一种插件,可以自动帮我们逆向生成domain实体类、dao接口以及相关的xml映射文件。下面就介绍一下应该如何去使用mybatis.generator插件逆向生成文件。1、导入依赖<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis...
2021-08-28 17:30:57
510
原创 fastdfs下载文件出现乱码,文件大小不一致
fastdfs文件下载一直出现乱码,并且文件大小始终偏大,检查一下后端代码:byte[] fileBuff = FastDFSClient.downloadFile(groupName,remoteName);// 设置下载信息头文件String downloadName = messageAttachment.getOriginalName();String contentType = "application/octet-stream; charset=UTF-8";return Re
2021-08-26 10:33:41
1295
原创 springboot启动Error(3,1) java:程序包XXX不存在,找不到符号解决
idea突然启动找不到包和类网上找了好多方法,clean,install,改字符编码都无济于事解决办法切换到项目目录输入命令 mvn idea:module然后Buildrun完美解决!!!
2021-08-19 08:48:31
566
原创 使用minio实现文件上传、文件下载
1、导入minio依赖:<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.0.2</version></dependency>2、application.yml添加配置# MinIo文件服务器minio: # bucket名称 bucket: "t
2021-08-12 11:55:10
7025
2
原创 Xshell链接错误:Could not connect to ‘192.168.1.2‘ (port 22): Connection failed.
1、xshell连接linux服务器失败2、检查windows下和linux是否都可以ping通3、检查防火墙是否开启4、检查是否开启ssh服务5、若都没问题,但还是连接不上,则是需要修改一下网络配置将红色框中的ip地址和linux中的ip修改为不一致即可!再尝试连接连接成功!...
2021-08-11 14:28:25
9651
7
原创 centos7 在NAT模式下连接网络
1、查看本地网络(vmnet8),设置-->控制面板-->网络和 Internet-->网络连接2、打开虚拟网络编辑器,设置子网ip(需和vmnet8和ipv4地址前三项相似)3、点击NAT设置,设置网关IP(需要和vmnet8的网关一致)4、打开centos7,进入到/etc/sysconfig/network-scripts 目录cd /etc/sysconfig/network-scriptsvi ifcfg-ens335...
2021-08-10 16:21:32
635
原创 如何解决数据库死锁问题?
1、在Navicat中新建查询,输入以下语句:SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX得到以下结果2、杀死进程输入语句:kill 33489(图中红框中的线程id)问题解决!
2021-08-04 09:02:39
2344
原创 如何将本地jar包放入maven仓库
进入到该jar包的文件目录下,在该目录下输入cmd,进入dos界面以fastdfs-client-java-1.27-SNAPSHOT.jar为例:在dos界面下输入以下命令:mvn install:install-file -Dfile="参数一" -DgroupId="参数二" -DartifactId="参数三" -Dversion=参数四 -Dpackaging=jar1、参数一:本地jar包的路径2、参数二:group标签里面的内容3、参数三:artifactId标签里面.
2021-08-03 23:26:25
134
原创 linux环境下安装rabbitmq
一、下载erlang和rabbitmq的相关文件 二、利用xftp软件将这2个文件上传到 /mnt目录下三、安装erlang环境1、安装erlang依赖yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel2、解压opt文件tar -zxvf otp_src_23.3.tar.gz...
2021-08-01 00:54:53
94
原创 volatile底层工作原理
Volatile缓存可见性实现原理底层实现主要是通过汇编lock前缀指令,它会锁定这块内存区域的缓存(存行锁定)并回写到主内存IA-32架构软件开发者手册对lock指令的解释:1)会将当前处理器缓存行的数据立即写回到系统内存。2)这个写回内存的操作会引起在其他CPU里缓存了该内存地址的数据无效(MESI协议)...
2021-06-17 23:18:32
183
原创 利用mybatis的分页插件实现分页
一、后端分页:1、首先在pom文件中导入依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.12</version> </depend...
2021-06-17 23:06:05
278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人