自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一些八股总结

7.ConcurrentHashMap 是如何保证线程安全的?41.从 innodb的索引结构分析,为什么索引的key使用B+树?9.synchronized 是如何保证原子性、可见性、有序性的?20.一次insert操作,MySQL的几种log的写入顺序?16.InnoDB如何解决脏读、不可重复读和幻读的?18.InnoDB的一次更新事务过程是怎么样的?36.MySQL是如何保证唯一性索引的唯一性的?29.InnoDB中的表级锁、页级锁、行级锁?40.什么是前缀索引,使用的时候要注意什么?

2025-08-31 23:49:56 664

原创 SpringBoot自动配置原理

核心作用导入一个选择器:AutoConfigurationImportSelector。这个文件里面定义了一系列需要自动配置类的列表。最后会自动配置这些定义的制动配置类。它会决定哪些类需要进行自动配置。

2025-08-24 15:27:33 396

原创 出现OOM怎么排查

排查代码,确定是否显示使用死循环创建线程,或者隐式调用第三方接口创建线程。报错信息StackOverflowError。使用工具:VisualVM,MAT等。

2025-08-03 16:06:54 409

原创 Spring事务失效场景

Spring事务是通过动态代理实现的,非public修饰的方法不能被代理。

2025-08-02 18:25:23 1833

原创 java集合

2025-08-02 17:54:30 219

原创 认识String、StringBuffer、StringBuilder

2025-07-13 15:15:46 413

原创 Spring事务失效场景

如果Spring 使用了 Cglib 代理实现 (比如你的代理类没有实现接口),而你的业务方法敲好使用了 final 或者 static 关键字,那么事务也会失败。更具体的说,它应该抛出异常,因为 Cglib 使用字节码增强技术生成被代理类的子类并重写代理类的方法来实现代理。如果被代理的方法使用 final 或 static 关键字,则子类不能重写被代理的方法。如果 Spring 使用 JDK 动态代理实现,JDK动态代理是基于接口实现的,那么 final 和 static 修饰的方法也就无法被代理。

2025-07-12 18:16:26 562

原创 Spring事务传播机制

在代码中。

2025-07-12 10:57:58 896

原创 SQL优化常用方法

2025-07-05 19:49:03 363

原创 软件工程经济与伦理

经济学是研究人类在生产,消费,分配,交换等经济活动过程中的资源配置与资源利用的学科,属于社会科学。经济学的分支学科主要有,工程经济学,信息经济学,法律,管理,公共,发展,金融,政治,行为,社会经济学等。

2025-07-05 17:37:57 199 2

原创 解决哈希冲突的办法

链地址法(Chaining)和开放地址法(Open Addressing)是哈希表中解决哈希冲突(不同键映射到相同位置)的两种主要策略。

2025-07-04 21:30:38 1525

原创 创建线程的常见方式

继承Thread类重写run()方法。

2025-06-29 14:39:05 386

原创 MySQL为什么要使用b+树

查询5的过程:从顶层开始5小于7找到页号6,5大于4,找到页号105,然后二分查找找到5.

2025-06-28 16:28:30 514

原创 浅析JVM

如图:JVM由四个部分构成:其中, 方法区 是各个线程共享的一块逻辑内存区域,它用于存储已经被虚拟机加载的类型信息、常量、静态变量、即使编译器编译后的代码缓存等数据。方法区的实现在 Java8后的HotSpot虚拟机采用的是元空间(元空间在本地内存)。在Java8之前,HotSpot虚拟机采用的是永久代(永久代在堆内存)来实现的方法区,这样HotSpot的垃圾收集器能够像管理Java堆内存一样管理这部分内存,省去了为方法区编写内存管理代码的工作。但是其他虚拟机实现方法区时不存在永久代的概念。Java

2025-06-28 14:31:09 1014

原创 ConcurrentHashMap

ConcurrentHashMap (CHM) 是 Java 并发包 (java.util.concurrent) 中提供的高并发、线程安全的 Map 实现。它的设计目标是在高并发读写场景下提供高性能,同时保证线程安全。其底层实现经历了显著演变(主要分 JDK 7 和 JDK 8+ 两个阶段),核心思想是减小锁的粒度和利用 CAS 操作。

2025-06-26 17:20:44 1075

原创 HashMap

基于泊松分布:哈希冲突达到 8 的概率极低(小于千万分之一),避免不必要的树化开销。

2025-06-24 20:43:01 933

原创 Spring IoC

在Spring上下文中,由IoC容器管理其生命周期的对象被称为Bean。

2025-06-22 17:22:22 1269

原创 jwt登录

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以JSON对象安全地传递信息。这些信息可以被验证和信任,因为它是数字签名的。

2025-06-22 15:10:48 393

原创 数据库的隔离级别

规则 2: 如果 DB_TRX_ID >= max_trx_id,说明该版本是由在 Read View 创建之后才开始的事务修改的(即该事务在当前事务开始之后才启动),不可见。规则 4: 如果 DB_TRX_ID == creator_trx_id,说明该版本是当前事务自己修改的,可见(即使还没提交)。规则 1: 如果 DB_TRX_ID < min_trx_id,说明该版本是在当前事务开始之前就已提交的,可见。对于 age=30 的记录:锁定间隙 (25, 30] 和记录30 -> (25, 30]

2025-06-21 17:31:34 1336

原创 Redis常见数据结构

Redis常见的数据结构:String,List,Set,Zset,Hash。

2025-06-20 16:34:24 886

原创 缓存与数据库一致性问题

先删除数据库、再删缓存,如果删除失败就发可靠MQ不断重式删除,直到删除成功或者到一定次数人工处理。先删除缓存,再更新数据库,大概在数据库更新完后再删一次缓存。缺点:一直删除失败,一直读取的是缓存的旧数据。缺点:不好控制第二次删除的时间。

2025-06-19 20:38:25 314

原创 Redis分布式锁

只要线程一加锁成功,就会启动一个watch dog看门狗,它是一个后台线程,会每隔10秒检查一下,如果线程1还持有锁,那么就会不断的延长锁key的生存时间,默认情况下,看门狗的续期时间是30s,也可以通过修改Config.lockWatchdogTimeout来另行指定。该命令是原子性的,避免了死锁的情况,但是释放锁的时候如果自己的锁已经到了过期时间自动释放了,然后客户端再进行一次释放,可能会将其他线程的锁释放了。所以要在每个线程加锁是设置一个唯一的锁标志,释放时根据自己的标志进行释放。

2025-06-19 18:58:38 523

原创 AQS理解

AQS(AbstractQueuedSynchronizer)是 Java 并发包 (java.util.concurrent.locks) 中一个核心的底层框架,用于构建锁(如 ReentrantLock)和其他同步器(如 Semaphore, CountDownLatch, ReentrantReadWriteLock 等)。

2025-06-19 16:43:38 847

原创 ThreadLocal

5. 在 ThreadLocalMap 中查找当前 ThreadLocal 对象作为键的值。6. 如果找到了对应的值,则返回该值;如果没有找到,则返回默认值(通常是 null)。4. ThreadLocal 会获取当前线程的 ThreadLocalMap。

2025-06-18 20:47:23 595

原创 常见设计模式

工厂模式可以细分为三种:1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式。

2025-06-18 16:41:28 1414

原创 Spring循环依赖问题

Spring循环依赖是指两个或多个Bean相互注入形成依赖闭环。

2025-06-17 18:31:39 397

原创 解决超卖问题

多个请求同时到达数据库读取数据库的值,然后扣减库存导致超卖。

2025-06-16 22:05:39 449

原创 RabbitMQ保证消息消费一次并且只消费一次

由于网络原因,或者系统崩溃,导致消费者已近消费后但是Ack没有发送出来或者丢失,会导致Broker认为发送失败而进行重发,这可能导致消费者重复消费的问题。

2025-06-16 16:20:03 297

原创 Spring AOP

AOP面向切面编程,是一种编程思想。AOP可以拦截指定方法并对其增强,无需侵入到业务代码中,使业务和非业务处理逻辑分离。

2025-06-16 15:37:39 594

原创 CAS笔记

先读取内存中的数据,再通过比较是否符合预期,符合就跟新为新值。其实现是基于硬件提供的原子操作指令,实现无锁并发,提高了效率的同时还保证原子性。1.synchronized争夺同一共享资源时,未获得锁的线程会等待,线程挂起与唤醒需要在用户态和内核态进行切换,影响性能。线程2:在线程1读取后还未修改时线程2将1改成3有改回1后,线程1才进行修改。解决:JVM提供的pause指令,让cpu在自旋失败时睡眠一段时间再继续自旋。2.volatile可以保证内存的可见性和指令有序性,但是不能保证原子性。

2025-06-15 18:55:33 373

原创 synchronized锁升级

jdk1.5及以前,加锁和释放锁的过程jvm底层都是由操作系统的mutex lock实现的-》涉及上下文切换(用户态和内核态转换)-》synchronized是重量级锁jdk1.6引入了偏向锁和轻量级锁用synchronized加锁影响性能:1.需要jvm层介入2.重量级锁是通过操作系统对线程的挂起和恢复来实现的,涉及内核态和用户态切换1.在类的普通方法上2.类的静态方法3.代码块在jdk1.5及以前只有两种:无锁和重量级锁----jdk1.6及以后加了偏向锁和轻量级锁1.无锁:对于共享资源,没有多个线程同

2025-06-13 20:40:49 430 1

空空如也

空空如也

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

TA关注的人

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