- 博客(23)
- 收藏
- 关注
原创 redis中redis.windows.conf和redis.windows-service.conf文件的区别
指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区。由于安装版的Redis服务自启动,是直接通过redis-server.exe启动的,但是,启动时并没有加载Redis的配置文件(redis.windows.conf),导致redis 中bind配置和密码设置不生效。
2026-02-06 14:52:02
429
原创 三个常问面试题
JPA/Hibernate默认使用预编译,天然防注入;2.非受检异常: 默认情况下,Spring对非受检异常(RuntimeException或其子类)进行回滚处理,这意味着当事务方法中抛出这些异常时,事务会回滚。5.跨方法调用事务问题: 如果一个事务方法内部调用另一个方法,而这个被调用的方法没有 @Transactional 注解,这种情况下外层事务可能会失效。1.未捕获异常: 如果一个事务方法中发生了未捕获的异常,并且异常未被处理或传播到事务边界之外,那么事务会失效,所有的数据库操作会回滚。
2026-02-04 00:17:43
282
1
原创 Spring IOC 实现机制
容器实现:Spring IOC容器是实现IOC的核心,通常使用BeanFactory或ApplicationContext来管理Bean。容器作为工厂负责实例化Bean并管理它们的生命周期,将Bean的实例化过程交给容器来管理。依赖注入:IOC的核心概念是依赖注入,即容器负责管理应用程序组件之间的依赖关系。反射:Spring IOC容器利用Java的反射机制动态地加载类、创建对象实例及调用对象方法,反射允许在运行时检查类、方法、属性等信息,从而实现灵活的对象实例化和管理。
2026-02-02 22:03:30
82
原创 两条update语句处理一张表的不同的主键范围的记录,一个<10,一个>15,会不会遇到阻塞?底层是为什么的?
因为如果 update 没有用到索引,在扫描过程中会对索引加锁,所以全表扫描的场景下,所有记录都会被加锁,也就是这条 update 语句产生了 4 个记录锁和 5 个间隙锁,相当于锁住了全表。如果2个范围查询的字段不是索引的话,那就代表 update 没有用到索引,这时候触发了全表扫描,全部索引都会加行级锁,这时候第二条 update 执行的时候,就会阻塞了。第二条 update sql 的话(id >15),锁住的范围是(15,+♾️)不会,因为锁住的范围不一样,不会形成冲突。
2026-01-31 01:15:04
314
原创 hashCode和equals
如果重写equals()必须重写hashCode(),比如在HashMap中,key如果是String类型,String如果只重写了equals()而没有重写hashcode()的话,则两个equals()比较为true的key,因为hashcode不同导致两个key没有出现在一个索引上,就会出现map中存在两个相同的key。所以两个对象相等,他们的hashCode和equals一定相等,但是hashCode相等的两个对象未必相等。
2026-01-21 04:53:38
414
原创 注解解析的底层实现
通过 @Retention 元注解可以控制注解的保留策略,当使用 RetentionPolicy.RUNTIME 时,可以在运行时通过反射 API 来解析注解信息。在 JVM 层面,会从字节码文件中读取注解信息,并创建注解的代理对象来获取注解的属性值。2、底层原理:反射机制的核心类是 java.lang.reflect.AnnotatedElement,它是所有可以被注解修饰的元素(如 Class、Method、Field 等)的父接口。注解的解析主要依赖于 Java 的反射机制。
2026-01-21 02:57:13
235
原创 为什么Java解释和编译都有?
解释性: JVM中一个方法调用计数器,当累计计数大于一定值的时候,就使用JIT进行编译生成机器码文件。否则就是用解释器进行解释执行,然后字节码也是经过解释器进行解释运行的。所以Java既是编译型也是解释性语言,默认采用的是解释器和编译器混合的模式。编译性: Java源代码首先被编译成字节码,JIT 会把编译过的机器码保存起来,以备下次使用。首先在Java经过编译之后生成字节码文件,接下来进入JVM中,就有两个步骤编译和解释。
2026-01-20 09:26:30
405
原创 SELECT语句的执行顺序是固定的,与SQL书写顺序不同
6. SELECT u.name, COUNT(o.id) AS order_count → 确定返回列并生成别名。◦ 示例:ON u.id = o.user_id 在此阶段过滤不符合连接条件的行。2. JOIN ON u.id = o.user_id → 按ID合并两表数据。◦ 注意:ORDER BY可使用SELECT中的别名(因执行顺序在后)。◦ 处理表连接逻辑(内连接、外连接等),根据连接条件合并数据。◦ 对连接后的结果集应用过滤条件,筛选出符合条件的行。
2025-06-26 02:56:44
352
原创 String、StringBuffer、StringBuilder 三者之间的区别
(2)多线程操作字符串缓冲区下操作大量数据用 StringBuffer;(3)单线程操作字符串缓冲区下操作大量数据用StringBuilder。(1)如果要操作少量的数据用 String;字符串变量(非线程安全)字符串变量(线程安全)
2025-06-18 21:01:34
242
原创 事务的隔离级别有哪些
按隔离水平高低排序如下:针对不同的隔离级别,并发事务时可能发生的现象也会不同。接下来,举个具体的例子来说明这四种隔离级别,有一张账户余额表,里面有一条账户余额为 100 万的记录。然后有两个并发的事务,事务 A 只负责查询余额,事务 B 则会将我的余额改成 200 万,下面是按照时间顺序执行两个事务的行为:这四种隔离级别具体是如何实现的呢?
2025-06-18 11:00:23
725
原创 MySQL可能会出现哪些并发问题
假设有 A 和 B 这两个事务同时在处理,事务 A 先开始从数据库中读取小林的余额数据,然后再执行更新操作,如果此时事务 A 还没有提交事务,而此时正好事务 B 也从数据库中读取小林的余额数据,那么事务 B 读取到的余额数据是刚才事务 A 更新后的数据,即使没有提交事务。假设有 A 和 B 这两个事务同时在处理,事务 A 先开始从数据库查询账户余额大于 100 万的记录,发现共有 5 条,然后事务 B 也按相同的搜索条件也是查询出了 5 条记录。
2025-06-18 10:34:23
227
原创 MediaType类
MediaType 是 Spring 框架中用于表示 HTTP 请求或响应的内容类型(Content-Type) 的类,全限定类名为:org.springframework.http.MediaType。返回值类型是 MediaType,表示请求体的媒体类型(如 JSON、表单、文件上传等)
2025-06-11 10:42:01
442
原创 Redisson分布式锁底层原理
Redisson是当前最流行的Redis分布式锁实现方案,其核心原理是通过Lua脚本保证加锁操作的原子性,并引入看门狗机制自动续期锁的过期时间。它解决了传统SETNX方案的两个关键问题:1) 通过Lua脚本将加锁和设置过期时间合并为原子操作;2) 通过后台线程定期检查并延长锁持有时间,避免业务未完成时锁被释放。此外,Redisson还实现了可重入锁机制,并通过客户端ID确保只有锁持有者才能解锁。不过该方案仍存在主从切换时可能产生多客户端同时加锁的问题,这是Redis异步复制架构带来的固有缺陷。
2025-06-07 11:20:50
1852
原创 在mybatis中<association> 和<collection>区别
因此,<association> 和 <collection> 是相对的两个标签,分别用于处理 单个对象 和 集合对象 的映射。<association> 用于 映射对象属性(一对一 或 多对一)<collection> 用于 映射集合属性(一对多)<association> 标签。<collection> 标签。
2025-05-13 17:19:21
572
原创 HashMap的键值对存储要点
首先介绍 HashMap 的基本原理,即它是如何工作的 HashMap 是一种基于哈希表的数据结构,它通过将键映射到表中的位置来实现快速的数据检索探讨哈希函数的选择和冲突解决策略对 HashMap 性能的影响;这是最常见的解决哈希冲突的方法之一在这种方法中,HashMap 的每个桶(bucket)不再是一个单一的位置,而是一个链表当发生哈希冲突时,新的键值对会被添加到相应桶的链表上这样,每个桶可以容纳多个键值对,它们。这是因为 HashMap 并没有内置同步机制来保证其线程安全性。
2025-04-30 22:44:10
1753
原创 6种 Spring 依赖注入方式
Spring框架提供了多种依赖注入方式,包括构造器注入、Setter方法注入、接口注入、自动装配、注解注入和Java配置等。不同的注入方式适用于不同的场景,开发人员可以根据具体需求选择合适的方式。依赖注入使得应用程序的组件之间解耦合,提高了代码的可测试性、可维护性和可扩展性。通过灵活使用Spring框架提供的依赖注入方式,可以更加方便地管理和维护应用程序的依赖关系,从而提升开发效率和代码质量。在实际开发中,根据具体的需求和项目特点,我们可以组合使用不同的依赖注入方式。
2025-04-24 17:10:52
1939
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅