
Java
文章平均质量分 70
不加冰的红茶要热的
丝竹声悠悠,教人忘忧,若南柯一梦。
展开
-
Java ReentrantLock 深度解析:为什么它比 synchronized 更灵活?
何时选择 ReentrantLock?需要可中断、超时获取锁。需要公平锁策略。需要复杂的线程协作(多个条件变量)。何时选择 synchronized?简单同步需求,代码简洁优先。JDK 5 之前性能敏感场景(现代 JDK 差距已缩小)。核心思想:根据需求权衡灵活性与复杂度!原创 2025-04-02 01:12:15 · 959 阅读 · 0 评论 -
SpringBoot 启动过程解析
启动入口main()方法调用。初始化过程:加载配置,创建。自动配置:根据项目依赖自动配置组件。Bean 初始化:加载 Bean,完成依赖注入。Web 应用启动:启动嵌入式 Web 服务器,监听 HTTP 请求。事件监听:监听应用启动过程中的各种事件。应用运行:处理 HTTP 请求,执行应用逻辑。优雅关机:应用接收到关闭信号时进行平稳退出。通过理解这些步骤,我们不仅能够更好地掌握 Spring Boot 的启动过程,还可以更高效地调试和优化我们的应用程序。原创 2025-04-02 02:37:48 · 820 阅读 · 0 评论 -
Java ReadWriteLock 详解:用“图书馆管理员”模型实现高并发读写分离
ReadWriteLock 的核心价值通过读写分离显著提升读多写少场景的性能。需谨慎处理锁升级/降级逻辑。适用场景缓存系统配置中心实时数据监控(高频读取,低频更新)慎用场景写操作频繁需要锁升级的逻辑技术选型建议优先使用解决读多写少问题。在极端高并发读场景下考虑(接受更高复杂度)。原创 2025-04-02 02:27:02 · 287 阅读 · 0 评论 -
保姆级教程:synchronized 同步方法 vs 同步代码块,看完彻底懂锁!
特性同步方法同步代码块锁对象默认是this(对象锁)可自由指定(更灵活)锁粒度粗粒度(整个方法)细粒度(仅关键代码)性能较低(锁范围大,竞争多)较高(锁范围小,竞争少)适用场景简单逻辑,方法整体需要保护需要精细化控制锁的代码段同步方法:简单粗暴,适合保护整个方法。同步代码块:灵活高效,适合精细化控制。核心思想:用最小的锁范围,实现线程安全,同时最大化并发性能!原创 2025-04-02 00:16:22 · 426 阅读 · 0 评论 -
Java 锁机制详解:用“厕所门”和“防盗门”轻松理解多线程同步
锁类型特点适用场景自动加锁/释放,简单但性能较低简单同步需求手动控制,支持公平锁/条件变量复杂同步场景读写分离,提升读性能读多写少(如缓存)乐观读,性能最高但实现复杂极高并发读,极少写提示:实际开发中优先选择,需要高级功能时再考虑其他锁。原创 2025-04-01 23:45:56 · 246 阅读 · 0 评论 -
探索Java数组底层原理
当我们创建一个数组时,JVM在堆内存中为数组分配一段连续的空间,每个数组元素在内存中占据一定的连续空间。对于基本数据类型,元素的内存空间大小是固定的,而对于引用数据类型,每个元素实际上存储的是对象的引用,也占据固定大小的内存空间。因此,无论数组的长度是多少,通过索引进行数组元素的随机访问所需的时间是恒定的。在内存中,数组的第一个元素被放置在数组的起始地址处,后续元素依次排列在前一个元素之后。可以看到,数组元素0的地址加上4等于数组元素1的地址,其它元素也是一样,因此可以知道,这是一块连续的内存。原创 2023-08-24 23:45:20 · 613 阅读 · 1 评论 -
Java中的自动“装箱”和“拆箱”操作
这意味着,当我们需要将一个int,float,double等基本数据类型的值赋给一个Integer,Float,Double等包装类对象时,编译器会自动进行转换操作。但是在进行自动拆箱时,需要注意避免空指针异常,因为一个包装类对象可能为空。这意味着,当我们需要将一个包装类对象赋给一个基本数据类型变量时,编译器会自动进行拆箱操作。为了避免空指针异常,需要在进行自动拆箱之前,确保包装类对象非空。在Java中,自动装箱和拆箱是指基本数据类型和对应的包装类之间的转换操作。,然后在进行自动拆箱操作时,尝试将。原创 2023-08-23 18:04:07 · 189 阅读 · 0 评论 -
Java基础知识(初学)
1. 历史和发展Java是由James Gosling和Sun Microsystems团队于1995年开发的一种计算机编程语言。最初被设计为一种用于家用电器控制的嵌入式语言,而后应用范围逐渐扩展到Web开发、企业应用、移动应用等领域。Java最初命名为Oak,但后来改名为Java,以和其他同名语言区分开来。Java的版本演进中引入了许多功能和增强,以提高性能、安全性和开发效率。2. 特点和优势面向对象编程语言:Java通过类和对象的概念支持面向对象编程,强调代码的组织、可重用性和灵活性。原创 2023-08-21 20:58:03 · 614 阅读 · 2 评论 -
实体类与数据库字段不匹配问题:java.sql.SQLSyntaxErrorException: Unknown column ‘user_name‘ in ‘field list‘
是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中,此属性也将用于生成最终的 SQL 的 select body。错误意思是“字段列表”中的数据字段“user_name”未知列,真的是奇了怪了,我命名时用的是驼峰命名,明明没有用到。这样的下划线命名,为啥会报这样的错呢?在运行代码的时候却报了如下的错误。原创 2023-08-23 00:36:04 · 1391 阅读 · 0 评论 -
JVM(Java虚拟机)
JVM(Java虚拟机)是Java平台的核心组成部分之一。它是一个虚拟的计算机,可以在不同的操作系统上运行Java字节码(.class文件),实现了Java的跨平台特性。JVM负责将Java字节码翻译成特定平台的本地机器码,以便在操作系统上执行。以下是一些与JVM相关的重要概念:Java字节码:Java源代码经过编译生成的中间代码,它是在JVM上执行的指令集。Java字节码是平台无关的,可以在任何支持JVM的操作系统上运行。原创 2023-08-23 16:54:11 · 86 阅读 · 0 评论 -
浅谈“垃圾回收”机制中的“压缩”
需要注意的是,内存压缩可能会导致一定的性能开销,因为需要移动对象并更新相应的引用。因此,不是所有的垃圾回收器都会进行内存压缩操作。具体使用何种垃圾回收器以及是否进行内存压缩,取决于JVM的实现和配置。在垃圾回收的过程中,为了提高内存的利用效率,一些垃圾回收器会执行内存压缩(Compacting)操作。内存压缩的目的是将存活的对象移动到一端,使得剩余的内存空间保持连续,从而解决内存碎片化的问题。通过内存压缩,剩余的内存空间变为连续的,可以充分利用内存来存储新的对象,减少内存碎片化的问题。原创 2023-08-22 23:20:24 · 140 阅读 · 0 评论 -
Java中的常量池
在Java编译过程中,编译器会将源代码中出现的字面量常量(如字符串、整数、浮点数等)和符号引用(如类和方法的全限定名、字段的名称和类型描述符等)保存在常量池中。常量池由多个常量表(Constant Tables)组成,每个常量表存储特定类型的常量。常见的常量表类型包括字符串常量表、类常量表、字段常量表、方法常量表等。通过在字节码中保存常量的索引和引用,可以避免重复存储相同的常量数据,并且在运行时可以通过索引快速定位和访问常量。通过在运行时动态修改和访问常量池中的常量,可以实现一些高级的编程技巧和特性。原创 2023-08-22 23:08:55 · 247 阅读 · 1 评论