自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql锁表的原因及mysql行锁

只有执行计划真正使用了索引,才能使用行锁:即便在条件中使用了索引字段,但是否使用索引来检索数据是由 MySQL 通过判断不同执行计划的代价来决定的,如果 MySQL 认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下 InnoDB 将使用表锁,而不是行锁。因此,在分析锁冲突时,可以通过 explain 检查 SQL 的执行计划,以确认是否真正使用了索引。

2024-04-24 11:23:46 319

原创 使用easyExcel导出数据

2024-04-18 17:35:50 195

原创 多线程-AQS

通过维护一个volatile变量state表示同步状态,当state为0时表示没有线程占用同步状态,当state为1时表示有一个线程占用同步状态。当多个线程竞争同步状态时,只有一个线程可以成功占用同步状态,其余线程将加入到AQS的同步队列中等待。当占用同步状态的线程释放同步状态时,AQS会从同步队列中选择一个线程唤醒,使其重新尝试获取同步状态。使用模板方法设计模式的思想,将同步状态的管理 、 阻塞队列和线程的阻塞唤醒等处理流程定义成固定的模板。组件开发者无需关注底层细节,只需要重写少数几个相关方法即可。

2024-03-11 16:41:44 400

原创 多线程-原子类实现

Atomic 原子操作类是基于无锁 CAS + volatile 实现的,并且类中的所有方法都使用 final 修饰,进一步保证线程安全。用带版本号的原子引用类AtomicStampedReference解决ABA问题。CAS会带来一个问题:ABA问题。

2024-03-11 16:23:05 415

原创 Mysql隔离级别的实现

1.针对快照读,通过 MVCC 方式解决了幻读 补充:串行化所有的数据库都没做,不过mvcc实现的效果跟串行化差不太多了,可以说是伪串行化解决,2.针对当前读,记录锁+间隙锁解决。

2024-03-11 16:13:32 538

原创 多线程-死锁和避免死锁的方式

线程A、B,资源C、D,线程A持有C请求D,线程B持有D请求C,形成一个相互等待的状态,即为死锁。确保线程请求和释放锁顺序相同、超时释放锁、避免一个线程在持有一个锁的同时去请求另一个锁。

2024-03-08 09:57:22 414

原创 多线程并发-volatile

volatile用在变量上,保证可见性、有序性,通过内存屏障保障有序性。

2024-03-07 14:45:32 320

原创 分布式事务-分布式事务协调器

分布式事务协调器:通知参与者都会尝试执行事务操作、通知参与者发送提交请求、然后每个参与者都会提交他们的事务。如果任何参与者在出现失败,协调器则会通知所有参与者进行事务的回滚。在分布式事务中通常使用两段提交、三段提交协议进行,这其中就涉及分布式协调器。

2024-03-07 14:39:59 484

原创 RabbitMq常见问题

消息全局 ID 或者写个唯一标识(如时间戳、UUID 等) :每次消费消息之前根据消息 id 去判断该消息是否已消费过,如果已经消费过,则不处理这条消息,否则正常消费消息,并且进行入库操作。难道消息还会丢失,没错,系统是在一个复杂的环境,不要想的太简单了,虽然以上的三种方案,基本可以保证消息的高可用不丢失的问题。使用rabbitmq提供的ack机制,这样就解决了,即使一个消费者出了问题,但不会同步消息给服务端,会有其他的消费端去消费,保证了消息不丢的场景。刚消费到,还没处理,结果进程挂了,比如重启了。

2024-03-06 09:53:07 585

原创 nginx负载均衡算法

轮询、加权、ip_hash。

2024-02-28 11:20:48 389

原创 自旋锁的概念

是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的获取锁,直到获取到锁才会退出循环。

2024-02-28 11:17:06 379

原创 concurrent包下常用类

CAS 操作包含三个操作数 —— 内存值(V)、预期值(A)和新值(B)。如果内存值(V)和预期值(A)的值是一样的,那么才会将内存里面的值更新成新值(B)CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取内存值(V)被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。JDK8 HashMap的实现,采用了数组+链表+红黑树的实现方式来设计,内部大量采用CAS操作。在JDK1.7中ConcurrentHashMap采用了数组+Segment+分段锁的方式实现。

2024-02-28 11:13:51 356

原创 线程池使用场景

异步发送邮件、异步数据入库。

2024-02-28 11:04:30 370

原创 设计模式分类

被问到常用的设计模式可回答:工厂模式、单例模式、建造者模式、适配器模式、策略模式、模板方法模式、责任链模式。设计模式分为三大类:创建型、结构型、行为型三大类。

2024-02-28 10:48:51 360

原创 反射机制的应用场景

ORM(对象关系映射):对象关系映射,底层也是用发射实现的。动态代理:jdk动态代理底层是用发射实现的。

2024-02-28 10:42:14 323

原创 @Transactional底层原理

Transactional注解底层是基于Spring AOP来进行实现的,而Spring AOP,是基于动态代理实现JDK代理和Cglib代理实现的,常考记住。当发生方法内调用的时候,被调用的函数尽管看起来加了事务注解,但是被调用的函数是没有被执行代理到的,导致注解跟没写一样。把@Transactional注解加在private修饰的方法也会一样的现象。解决方案是把方法放到另外一个类里,让Spring自动为其生成代理对象。

2024-02-28 10:38:03 655

原创 JVM之类加载器

进行加载规避这一问题。

2024-02-28 10:23:09 356

原创 JVM-垃圾回收器和垃圾回收算法

g1垃圾回收器:G1(Garbage First):是一款垃圾优先的回收器,使用复制算法,G1将堆内存分为很多更小的(Region)区域(物理上不连续,逻辑上连续),然后有计划地对堆内存进行垃圾回收,回收时,优先回收垃圾最多的区域。cms垃圾回收器:使用标记清除算法,会从产生内存碎片,当大作业到来时,可能会提前出发full gc,cms标记垃圾和清除垃圾都是和用户线程并发执行,这时用户线程产生的新垃圾对象就是浮动对象。jvm中垃圾回收算法有四种:标记整理、标记清除、复制算法、分代收集算法。

2024-02-28 10:09:25 978

原创 excel拼接sql

=“INSERT INTO SYS_USER_PRIVILEGE VALUES('”&A1&“‘,’”&B1&“')”

2024-01-16 16:48:18 411

原创 mysql生成到当前时间的时间序列,报表按时间补0

SELECTFROMWHEREORDER BY有疑问可参考。

2024-01-09 15:41:02 643

原创 Springboot无法访问JSP 404问题

还需要加入下面这段代码。

2023-05-17 22:20:33 531

原创 Springboot 添加拦截器

2.实现WebMvcConfigurer 接口把拦截器添加到其中。1.实现HandlerInterceptor 接口。

2023-05-17 17:39:20 359

原创 @ExceptionHandler(value = Exception.class)

【代码】@ExceptionHandler(value = Exception.class)

2023-05-17 17:38:03 260

原创 静态代理做个日志记录demo

使用静态代理做个日志记录

2022-12-08 11:25:37 205

原创 Springboot将所有文件包括dependencies打成jar包

在pom中加入如下配置。

2022-11-27 14:46:32 221

原创 SpringBoot统一LocalDateTime日期格式化输出

SpringBoot统一LocalDateTime日期格式化输出

2022-07-15 11:29:59 1827 1

原创 spring-cache的基本使用

spring-cache可以用来进行缓存穿透、缓存击穿、缓存雪崩

2022-07-13 10:57:06 535

原创 mybatis map作为参数使用foeach批量update数据

在日常中也会遇到需要使用map作为参数使用foreach更新update数据的情况,此时该如何用呐?

2022-07-13 10:19:53 2011

原创 COUNT统计未支付、待确认订单

COUNT通常用来对某个字段做统计,通常用来统计未支付、待确认订单数值

2022-07-12 10:42:24 356

原创 List Stream flatMap的使用

平时通常会用到Stream做数据处理

2022-07-11 11:20:13 1603

原创 分库分表,Sharding-JDBC水平分表

随着数据量的增大,就可能会达到性能瓶颈,比如千万数据,增删改都很慢,这时候就需要考虑分库分表了了解一下水平分表,数据库、表不变,创建相同结构的数据库 称为水平分库 创建相同结构的表 称为水平分表...

2022-07-08 16:37:03 226

原创 SpringBoot使用Junit做单元测试

测试类的好处是直接点击即可测试,减少了在Controller层调用使用首先引入相应的

2022-07-08 11:40:06 408

原创 INSET INTO SELECT语句

INSET INTO SELECT语句的简单写法

2022-07-04 16:22:30 139

原创 Spring基础知识整理

Spring基础知识整理

2022-06-24 09:59:31 128

原创 SpringBoot基础知识整理1.1

SpringBoot基础知识整理

2022-06-24 09:53:43 182

原创 Redis基础整理1.1

redis基础知识整理

2022-06-24 09:38:27 323

原创 Redis排行榜简单实现

最近在学Redis,用Redis实现一个简单的排行榜功能排行榜初始化类:主要功能是在项目启动时将表数据添加到Redis中,Redis中有的数据不做处理,Redis中无的数据将数据添加到Redis中测试类有两个,一个用于给商品的score值加分,模拟用户操作,用户点击一次,该商品的score值加一次,这样榜单排名的效果就出来了reverseRangeWithScores方法:逆序(从大到小)取出榜单的前5名incrementScore方法,给指定商品加score值...

2022-06-23 15:41:04 687

原创 mysql开启慢查询日志及死锁排查

慢查询日志通常用于SQL优化中,以windows为例,来看看如何开启慢查询日志

2022-06-22 17:48:41 570

原创 mysql基础整理1.1

mysql基础知识整理

2022-06-22 17:30:21 166

原创 Redis数据同步到Mysql

秒杀系统中总需要在启动时将数据放到redis中,即缓存预热,在秒杀开始时则需要通过redis进行库存的扣减,为保证redis和mysql数据一致性,通过可通过定时任务将redis中的数据同步回mysql中

2022-06-22 11:27:36 3685

空空如也

空空如也

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

TA关注的人

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