自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 LocalCache带过期时间的本地缓存

LocalCache带过期时间的本地缓存

2024-04-09 08:56:45 1253 1

原创 foreach批量插入大量数据太慢解决方法

mapper.xml文件中使用foreach批量插入数据效率太慢,使用ExecutorType.BATCH 的插入方式

2024-02-02 16:17:57 1431

原创 AQS原理

AQS的全称为 AbstractQueuedSynchronizer,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面AQS就是一个抽象类,是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的同步器,比如我们提到的 ReentranLock,Semaphore,ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于AQS的。

2024-01-19 16:12:08 910

原创 StopWatch

StopWatch替换System.currentTimeMillis() 统计代码耗时getLastTaskInfo().getTaskName() 返回最后一个任务TaskInfo对象的名称。getTotalTimeSeconds() 获取总耗时秒,同时也有获取毫秒的方法。prettyPrint() 优雅的格式打印结果,表格形式。getTaskCount() 返回统计时间任务的数量。shortSummary() 返回简短的总耗时描述。

2024-01-19 08:53:46 494

原创 token过滤器 验证token有效性

token过滤器 验证token有效性。

2023-12-11 18:41:59 512

原创 自定义异步任务管理器和线程

自定义异步任务管理器、线程相关工具类、线程池配置、应用退出时关闭后台线程类、自定义异步应用、异步注解@Async直接在方法上使用即可

2023-12-11 17:08:33 600

原创 Spring系列注解补充

这就导致了一个非常严重的分布式问题:在每一台机器上都会在同时执行定时调度任务,可能产生很多重复数据或者导致系统出现其他的业务逻辑BUG,所以在使用@Scheduled进行任务调度时,一定要配合redis的分布式锁来使用,让定时调度任务只在一台机器上执行,避免BUG出现。这个参数是最经常使用的参数,表示接收一个cron参数,cron它是一个表达式,最多接收7个参数,从左到右分别表示:秒 分 时 天 月 周 年;该注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名(多一个名字来识别)

2023-12-05 17:28:26 992

原创 并行流(Parallel Streams)

例如,使用数据库的事务管理机制来管理并行流中的表更新操作。如果需要在并行流中共享状态,确保对共享状态的访问是线程安全的,例如使用同步机制或线程安全的数据结构。避免死锁:如果并行流中的操作涉及到锁定资源,确保在设计时考虑到可能的死锁情况,并采取适当的预防措施,例如按照一定的顺序获取锁或使用避免死锁的算法。使用线程安全的操作:确保在并行流中执行的操作和使用的数据结构是线程安全的。死锁:如果并行流中的操作涉及到锁定资源,并且在多个线程之间存在死锁的可能性,那么并行流可能会增加死锁的风险。

2023-12-05 16:02:47 752

原创 Stream流

stream和parallelStream的简单区分:stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。Stream是将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。归约,也称缩减,是把一个流缩减成一个值,能实现对集合求和、求乘积和求和最值操作。筛选,是按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中的操作。

2023-11-16 20:09:29 189

原创 @Builder注解

设置为true可以对这个对象进行拷贝生成新的对象,可以再修改,默认为fasle。@Builder //用来生成对象,并可以为对象链式赋值。@Builder注解的属性介绍。

2023-11-15 10:53:52 516

原创 Spring事务@Transactional即便生效也不一定能回滚

打开Spring的DefaultTransactionAttribute类能看到如下代码块,可以发现相关证据,通过注释也能看到Spring这么做的原因,大概的意思是受检异常一般是业务异常,或者说是类似另一种方法的返回值,出现这样的异常可能有业务还未完成,所以不会主动回滚;通过AOP实现事务处理可以理解为,适用try...catch... 来包裹标记了@Transactional注解的方法,当方法出现了异常并且满足一定条件的时候,在catch里面我们可以设置事务回滚,没有异常则直接提交事务。

2023-11-05 16:57:50 301

原创 权限信 息

*** 权限信息*/

2023-11-02 20:49:27 218

原创 Swagger3的接口配置

/ 扫描所有 .apis(RequestHandlerSelectors.any())// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)/* 设置安全模式,swagger可以设置访问token */// 扫描所有有注解的api,用这种方式更灵活。// 设置哪些接口暴露给Swagger展示。// 扫描指定包中的swagger注解。// 是否启用Swagger。// 用ApiInfoBuilder进行定制。/** 是否开启swagger *//** 设置请求的统一前缀 */

2023-11-02 20:47:46 237

原创 IDEA常用快捷键

全局查找和替换:Ctrl + Shift + F(Windows/Linux)格式化对齐代码:Ctrl + Alt + L(Windows/Linux)复制当前行或选定的代码块:Ctrl + D(Windows/Linux)删除当前行或选定的代码块:Ctrl + Y(Windows/Linux)跳出方法:Shift + F8(Windows/Linux/macOS)查找和替换:Ctrl + F(Windows/Linux)注释代码:Ctrl + /(Windows/Linux)

2023-11-01 17:04:27 366

原创 C#中的async

async、await、异步操作、Task、C#

2023-08-16 10:49:56 1327

原创 FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read)介绍

FileStream、FileMode.open、FileAccess.Read、FileStream.Read、FileStreaM.Write

2023-08-04 09:45:42 900

原创 exits和in的区别

exits是子查询为被驱动表,外面的表为驱动表,故适用于子查询结果集大而外面的表结果集小的情况;in 是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况;如果两个表中一个表较小,一个较大,那么子查询表大的用exits,子查询小的用in,效率会更高。关联子查询:先执行外层查询,接着对所有通过过滤条件的记录,执行内层查询。非关联子查询:先完成内层查询之后,外层查询才能介入。exits一般是关联子查询,in一般是非关联子查询。

2023-06-29 17:45:42 526

原创 MySql慢查询问题原因及优化

跨多表扫描数据,可以减少join的使用,并适当反范式化,增加冗余数据,以空间换时间(范式化:拆表,减少冗余数据,在查询主表信息的时候,就会去查询关联多张表;· 缓存失效:SQL查询会保存到缓存中,而SQL大小写敏感,所以一定保证写sql时大小写 一致、超过了缓存空间大小、内存不足、缓存超时、数据修改。· 索引数据类型简单且合适、占用空间少、尽可能避免空值。· 索引没有建立,索引优化不当,或为应用到最佳索引(联合索引使用最左匹配原则)

2023-06-26 16:08:04 218

转载 mysql启动问题:Can‘t open the mysql.plugin table. Please run mysql_upgrade to create it.

2、清空C:\Program Files\MySQL\MySQL Server 5.7\data目录,里面的信息一会通过命令会自动生成的;完成上面的操作之后,用navicat和CMD登录时,用密码都会报1045-access denied for user 'root'@错,直接输入MySQL反而登录成功;3、执行 mysqld --initialize --user=mysql --console。执行命令:mysqld --skip-grant-tables。以管理员身份重开个命令窗口。

2023-02-02 15:08:46 15666 3

原创 Redis学习

NoSQL、配合关系型数据库做高速缓存,存储持久化数据、Redis内存管理,Redis删除策略、RDB持久化、RDB创建快照时会阻塞主线程吗、AOF持久化、AOF日志实现、Redis事务、缓存穿透、布隆过滤器、缓存无效key,缓存雪崩、Redis主从同步,哨兵模式

2022-11-24 18:02:52 235

原创 volatile如何保证可见性

如上图:线程1在它的工作内存1对共享变量修改,更新到主内存中,将主内存中最新的共享变量更新到线程2 的工作内存2中。2.不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成。1.线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接在主内存中读写。在Java中, volatile关键字可以保证变量的可见性,如果我们将变量声明为。指令,即强迫线程将最新的值刷新到主内存中;而在读操作时,会加入一条。可见性:一个线程对共享变量的修改,能够及时的被其他线程看到的。

2022-11-17 10:37:15 744

原创 Git常用命令

如果是 本地创建的仓库,加入以上参数后跳转页面,点击Insert键盘,输入之后 按Esc 输入:wq(即保存退出)回车。电脑第一次push时需要登录git的用户名和密码。进入指定文件夹右键打开。

2022-11-14 09:53:58 94

原创 二叉查找树、平衡二叉树、红黑二叉树简单概念

如果x = T − > d a t a x=T->datax=T−>data,则查找成功,返回查询到的当前节点T。最短路径都是黑节点,最长路径就是一个红节点一个黑节点,最后黑节点相同时,最长路径正好是最短路径的两倍。如果x > T − > d a t a x>T->datax>T−>data,则递归查找右子树。如果x < T − > d a t a xdataxdata,则递归查找左子树。如果插入节点的父节点为黑色,则直接插入,若为红色,则需要判断。3.其左右子树都是一颗二叉查找树。

2022-11-03 16:39:25 291

原创 Java实现CAS的原理

CAS的概念,Java实现CAS 的原理Unsafe类,CAS实现原子操作的三大问题:循环时间长,CPU开销过大,只能保证一个共享变量的原子操作,自旋锁和互斥锁ABA问题

2022-11-01 15:22:33 1056

原创 MVCC及实现原理

当前读、快照读和MVCC之间的关系,MVCC实现原理:隐式字段、undo日志、Read View,数据可见性算法,RC和RR隔离级别下的MVCC的差异、解决不可重复读问题,在RC下Read View 生成情况、在RR下Read View生成情况,MVCC+Next-Key Lock防止幻读

2022-10-28 13:38:28 1716

原创 外键一定是另一个表的主键吗

外键约束并不仅仅可以与另一张表的主键约束相连接,还可以定义为引用另一张表的UNIQUE约束。外键并不一定是另一张表的主键,但一定是唯一性索引;主键约束和唯一性约束都是唯一性索引。

2022-10-27 10:42:06 3000

原创 mysql间隙锁、表锁、行锁,读锁(共享锁)、写锁(排他锁),意向锁

共享锁=读锁、排他锁=写锁,确切来说mysql没有读锁和写锁概念的,但是在实际应用中,读锁表示并发操作,写锁不支持并发,必须阻塞,因此可以这样划等号。(X):排他锁又称为写锁,简称X锁,排他锁就是不能与其他锁并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据进行读取和修改。注意:普通查询是快照读,不需要加锁。(s):共享锁又称为读锁,简称S锁,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

2022-10-25 11:37:20 1839

原创 Linux常见命令

Linux常用指令

2022-10-20 21:21:40 231

原创 Javaweb——查询语句和约束

1.where在分组之前进行限定,如果不满足条件,则不参与分组。--按照性别分组。分别查询男、女同学的平均分,人数要求分数低于70分的人,不参与分组,分组之后。--按照性别分组。分别查询男、女同学的平均分,人数要求分数低于70分的人,不参与分组。2.where后不可以跟聚合函数,having可以进行聚合函数的判断。2.公式开始的索引=(当前的页码-1)*每页显示的条数。1.分组之后查询的字段分组字段、聚合函数。1.语法limit开始的索引,每页查询的条数;...

2022-10-17 09:32:05 235

原创 Cookie

setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享。2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?* 可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。将Cookie数据写到硬盘的文件中。

2022-10-17 09:31:30 68

原创 Maven基础

◆本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源远程仓库:非本机电脑上 的仓库,为本地仓库提供资源。中央仓库中的jar都是开源的,不能存储具有版权的资源一定范围内共享资源,仅对内部开放,不对外共享。Maven的本质是一个项目管理的工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题。中央仓库: Maven团队维护,存储所有资源的仓库。

2022-10-17 09:31:01 70

原创 设计模式——代理模式

2. 代理对象 = Proxy.newProxyInstance();此处返回代理对象,因为代理对象和真实对象实现相同的接口,所以可以对返回的代理对象进行强制类型转换为接口类。3.在生成的invoke方法中编写代理逻辑,在此处增强。3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的。3. 增强方法体执行逻辑。4. 使用代理对象调用方法。1. 静态代理:有一个类文件描述代理模式。2. 动态代理:在内存中形成代理类。1. 真实对象:被代理的对象。* 设计模式:一些通用的解决固定问题的方式。

2022-10-17 09:30:19 49

原创 Redis中对key的操作命令

String是Redis中最常用的一种数据类型,也是Redis中最简单的一种数据类型。首先,表面上它是字符串,但其实他可以灵活的表示字符串、整数、浮点数3种值。实际上是一个链表,before Node after , left,right 都可以插入值。消息队列 (Lpush Rpop), 栈( Lpush Lpop)!总结:成绩表排序,工资表排序、年龄排序等需求可以用zset来实现!如果移除了所有值,空链表,也代表不存在!Ipop(左移除)、rpop(右移除)操作。如果key 不存在,创建新的链表。

2022-10-15 17:49:58 3151

原创 Java面试复习

Java基础、自动拆箱装箱、重载和重写、equals和==的区别、hashcode的作用、hash冲突、String、StringBuffer、StringBuilder、ArrayList和LinkedList的区别、创建对象的几种方式、隐式自动类型转换,transient 阻止被序列化,final的用法;MySql事物,四大特性,redolog,undolog,binlog,刷盘时机、binlog写入机制,binlog日志刷盘流程,MySql锁技术,读写锁,脏读、不可重复度、幻读、高性能优化规范,索引

2022-10-15 15:29:08 416

原创 自定义注解(元注解)

被 @Inherited 注解修饰的注解,如果作用于某个类上,其子类是可以继承的该注解的。这个注解的意思是让Auth注解在Java源文件(.java文件)中存在,编译成.class文件后注解还存在,被Auth注解类标识的类被类加载器加在到内存中后Auth注解就不存在了。:在定义注解 (Auth)类时使用了另一个注解类(Inherited、Target、Retention),那么被使用的注解类就称为元注解。这个注解的意思是让Auth注解在Java源文件中存在,编译成.class文件后注解就不存在了。

2022-10-15 09:54:04 201

原创 Java集合

ArrayList、LinkedList、Vector、HashSet、LinkedHashSet、HashMap、HashTable、

2022-10-15 09:06:58 57

原创 Api接口文档

生成的api 文档会根据tags分类,直白的说就是这个controller中的所有接口生成的接口文档都会在tags这个list下;3.@ApiOperation(value = “接口说明”,httpMethod = "接口请求方式",response = "接口返回参数;使用在类上,表明是swagger资源,@API拥有两个属性:value、tags;使用在方法上或者参数上,字段说明;使用在方法,字段上,表示对model属性的说明或者数据操作更改。使用在类上,表示对类进行说明,用于参数用实体类接收。

2022-10-12 18:11:10 1354

原创 hashmap为什么线程不安全

当进行putval方法时,第六行操作判断是否发生hash碰撞,如果没有则直接添加;当两个线程经过hash算法算出来的hash值相同时,假设A线程先执行,当执行完这一部操作时,时间片刚好用完,B线程执行直接添加进去,等A线程再次获得时间片时,因为已经执行了判断,则也直接添加进去,覆盖了线程B的值,造成了覆盖,线程不安全。另外,putval方法里面有一个++size,这里是判断是否给table数组扩容的,在进行这个判断之前假设size=10,当线程A执行++size时,先去主内存里读这个size,然后+1,

2022-09-23 07:55:59 89

原创 网络通信-

网络的五层协议:应用层(Application Layer)、传输层(Transport Layer)、网络层(Network Layer)、链接层(Link Layer)、实体层(Physical Layer) --自上而下一、实体层: 实体层,就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。二、链接层: 通过以太网协议在同一个子网络里发送数据包。 以太网协议:(不是Http协议) 以太网规定,一组电信号构成

2022-09-19 15:45:41 2267

原创 Java多线程并发

程序计数器私有,并发、并行、同步和异步、线程的生命周期、上下文切换、线程死锁、产生死锁的四个必要条件、sleep()方法和wait方法对比、volitile、synchronized、单例模式、ThreadLocal、线程池,七个参数:核心线程数、最大线程数、工作队列、最大存活时间、时间单位unit、线程工厂、拒绝策略handler

2022-09-14 15:46:42 732

空空如也

空空如也

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

TA关注的人

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