Java
文章平均质量分 91
分享 Java 有趣知识
Lorin 洛林
一枚 Java 服务端码农 | 技术交流 | 技术分享 | 拥抱开源 | 开源作者 article-sync-tool | Technology has the power to make the world a better place.
展开
-
什么是协程?协程和线程的区别
协程从一定程度来讲,可以说是“用同步的语义解决异步问题”,即业务逻辑看起来是同步的,但实际上并不阻塞当前线程(一般是靠事件循环处理来分发消息)。原创 2024-07-01 17:53:18 · 1408 阅读 · 0 评论 -
直接调用 Java 线程的 run() 方法会发生什么?
`直接调用 run() 方法不会启动一个新的线程,它只是普通方法调用,代码在当前线程中同步顺序执行。`原创 2024-06-25 13:31:33 · 906 阅读 · 0 评论 -
Java 日期字符串格式化:请不要乱用 YYYY 和 yyyy
理解 YYYY 和 yyyy 的区别,避免常见的格式化陷阱,可以帮助开发者编写更准确和可靠的代码。通过充分的测试和明确的文档,可以有效地避免由于日期格式化问题导致的错误。原创 2024-06-14 15:57:29 · 809 阅读 · 0 评论 -
Spring 中类似 aBbb 单字母单词序列化与反序列问题
最近在使用 `spring boot mvc` 实现 HTTP 接口时出现了大小写异常转换的神秘现象原创 2024-04-07 22:02:37 · 1047 阅读 · 0 评论 -
Java8 Optional 的正确用法以及在 Java9 中的增强
Optional 是 Java 8 中引入的一个有趣类,它的设计目的是解决空指针异常(NullPointerException)问题,我们应该好好掌握它,从而让我们在程序代码中更加优雅的处理空指针异常(NullPointerException)问题,使我们的代码具备更好的可读性以及更加健壮。原创 2024-03-15 14:03:14 · 908 阅读 · 0 评论 -
一文读懂函数式接口、Lambda表达式、Stream
Java 8 中引入很多有意思的新特性,本篇文章我们来聊聊其中三个比较重要的特性:`函数式接口、Lambda表达式、Stream流`,我们分别从示例用法、底层原理、最佳实践三个方面来了解这些特性。原创 2024-02-21 18:06:45 · 892 阅读 · 0 评论 -
Java 对象字段基本类型和包装类型的选择以及 null 处理的一些思考
一般情况我们可以直接使用方案二(包装类型) + `Optional` 的组合,但在一些有性能要求的场景我们可以适当考虑方案三,减少频繁的拆箱和装箱带来的性能损耗以及减少内存占用。原创 2024-02-05 18:44:19 · 1474 阅读 · 0 评论 -
探究 MySQL 中使用 where 1=1 是否存在性能影响
最近在项目中使用 `mybatis 写 SQL 使用了 where 1=1` 来简化多条件拼接的写法,案例如下,借此聊聊多条件拼接的常见的一些写法以及 `where 1=1` 是否存在性能影响。原创 2024-02-01 13:23:29 · 846 阅读 · 0 评论 -
Java 异常处理下篇:11 个异常处理最佳实践
在前两篇文章中,我们深入研究了 `Java` 异常处理中的 `Throwable` 类和异常处理常用关键字以及 `finally` 使用中的陷阱。在本文中,我们将探讨异常处理的一些最佳实践,这些实践有助于编写更健壮和可维护的程序代码。原创 2024-01-31 17:52:26 · 721 阅读 · 0 评论 -
Java 异常处理中篇:finally 中的陷阱(finally 中 return 会发生什么)
在上一篇文章中,我们介绍了 `Java` 异常的基本概念,`Throwable` 、异常处理关键字:`try-catch-finally、throw、throws`;本篇文章我们将更加深入的了解 `finally` 在异常处理中的常见问题和底层原理。原创 2024-01-30 19:33:37 · 1290 阅读 · 0 评论 -
Java 异常处理上篇: Throwable 详解
Java异常处理是编写稳健、可靠程序的关键组成部分。在Java中,异常是一种程序运行时可能发生的错误或异常情况的表示。异常处理的核心是Throwable类及其子类,它们为我们提供了处理程序执行中出现的问题的机制。本文将深入探讨Throwable类,探索其层次结构、常见的子类以及异常处理的常用关键字。Java异常处理是构建健壮程序的关键组成部分。Throwable类及其子类为我们提供了处理程序执行中出现的问题的框架。通过合理使用和throw,我们能够更好地控制程序的流程,增强程序的可维护性和稳定性。原创 2024-01-29 13:15:30 · 2412 阅读 · 0 评论 -
【IDE】【实战系列】掌握这些技巧发现阅读源码不过如此简单
不知道大家对这样一张图片是不是很熟悉,当我们的程序需要排查一个很隐蔽的问题时,各处打印日志进行排查错误,排查完之后又将所有的排查日志进行一个一个删除。不知道你们有没有干过,我以前是经常这么干哈哈哈。在分享之前,大家可以先思考一下以下几个问题,看看大家在日常工作中是怎么处理的,我会在文章末尾给出一些解决思路供大家参考:1、排查一个隐蔽错误时到处打印日志?如果是第三方源码怎么办呢?下载源码调试?2、源码调试时,一个类有多个实现,我们想知道调用了哪个实现?一步步断点进去?原创 2023-11-13 18:54:32 · 178 阅读 · 0 评论 -
【Java对象】一文读懂 Java 对象庐山真面目及指针压缩
一个 Java 对象由三部分组成:对象头、实例数据、对齐数据,其中对象头分为 mark word 标记字和 class point 类元数据指针。原创 2023-11-04 22:34:51 · 365 阅读 · 0 评论 -
轻量级内部组件解耦神器 Spring Event(Spring 事件)最佳实践
大家好,我是 Lorin,上一篇文章我们介绍了 Spring Event 的基本使用、底层原理以及适应场景,这篇文章我们来看一下 Spring Event 在实际项目的一些使用示例和最佳实践推荐。原创 2023-10-23 07:51:19 · 239 阅读 · 0 评论 -
Java 为什么不推荐在 while 循环中使用 sleep() 我悟了
最近逛 CSDN 看到一篇文章,文章大意是说为什么在循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService 方案进行优化,下面我简单复现一下具体代码,大家思考一下,原文的原因以及解决方案是否合理:原创 2023-11-03 19:46:38 · 2323 阅读 · 0 评论 -
单例模式下双重校验锁 DCL 的灵魂三问
hello,大家好,我是 Lorin,今天给大家带来双重校验锁的灵魂三问?以及我们如何一步步实现一个懒汉式单例。开始阅读前,大家可以思考下面三个问题:原创 2023-10-31 12:43:54 · 1040 阅读 · 0 评论 -
你真的了解 Java 普通数组?
大家好,我是 Lorin,数组是我们日常开发中使用非常广泛的一种数据结构,但是大家真的已经了解它了?我们最大可以开辟多大的数组?数组底层如何存储?什么时候我们应该选择数组?接下来我和大家一起来一一解决这些问题。原创 2023-10-29 23:30:06 · 165 阅读 · 0 评论 -
轻量级内部组件解耦神器 Spring Event(Spring 事件)
Spring事件(Spring Events)是Spring框架的一项功能,基于观察者模式实现,适用于内部组件之间的通信和解耦,常用于用户注册事件、库存更新事件等轻量级事件的处理。Spring事件本身不提供强制的可靠性保证机制,可靠性需要由应用开发者来保证。跨应用、跨服务、分布式系统以及异步处理、或者高并发场景,不适合Spring事件,此时考虑消息队列更加合适。原创 2023-10-19 08:45:00 · 202 阅读 · 0 评论 -
揭秘 Java 字符串类:String、StringBuffer 和 StringBuilder 的奥秘
String、StringBuffer、StringBuilder 在 JVM 内存中的分布,以及面试常问:Java 不同字符类会创建几个对象?原创 2023-10-13 13:26:50 · 200 阅读 · 0 评论 -
字节面试官:你知道 CAS,那你有了解过 CLH 和 MCS?和 AQS 又是什么关系呢?
普通自旋锁可能存在的一些问题:饥饿、如何实现公平、CPU 高速缓存频繁同步CLH 锁 和 MCS 锁是什么?如何解决这些问题以及使用场景原创 2023-10-12 13:16:05 · 230 阅读 · 0 评论 -
面试官:Java 对象是值传递还是引用传递?
Java 值传递和引用传递一直值讨论比较多的话题,本文将结合概念和案例做一个详细的介绍。原创 2023-10-11 18:41:42 · 135 阅读 · 0 评论 -
经典面试题:多线程如何循环顺序打印 123
今天继续带来了多线程系列知识分享,想必大家面试时都遇到一个经典的面试题:用多线程实现循环打印123?原创 2023-09-25 12:45:21 · 636 阅读 · 1 评论 -
从入门到精通:Java线程池原理 3W 字长文全面指南
大家好,我是 Lorin。随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。本文从线程池概念和用途开始介绍,然后接着结合线程池的源码,领略线程池的设计思路,最后结合实践介绍线程使用的一些常见案例以及线程池参数配置难题引出动态线程池。原创 2023-10-10 20:34:27 · 143 阅读 · 1 评论 -
提高 Java 开发效率不可或缺的插件:Maven Helper、Lombok、Tabnine...
上述插件是我们日常开发的必备基础插件,实际上不同的开发场景和需求可能需要不同的插件,因此根据项目的需求选择合适的插件,将大大提升我们的开发体验。原创 2023-10-09 13:28:50 · 243 阅读 · 1 评论 -
聊聊 Java 21 中的结构化并发(预览版)
hello,大家好,我是 Lorin,今天和大家一起聊聊 Java 21 中另一个有意思的预览特性 - 结构化并发。原创 2023-10-07 16:48:44 · 524 阅读 · 1 评论 -
Actor 模型使我想到了王者荣耀对战伤害控制实现
Actor 模型是一种并发编程模型,用于处理多线程和分布式系统中的并发问题。它将并发计算分解为独立的、可并行执行的"角色"(Actors),这些角色之间通过消息传递进行通信,从而实现高度并发和分布式计算。原创 2023-10-05 10:50:45 · 203 阅读 · 0 评论 -
基于 AQS 实现的系列同步器源码精讲(ReentrantLock、ReentrantReadWriteLock)
基于 AQS 实现的系列同步器源码精讲(ReentrantLock、ReentrantReadWriteLock)原创 2023-10-01 18:27:51 · 136 阅读 · 0 评论 -
JUC 中的另一重要大杀器 AQS 抽象队列同步器
AQS 全称是 AbstractQueuedSynchronizer,是 Java 并发包中的一个抽象类,用于构建各种同步器和锁,如 ReentrantLock、CountDownLatch、Semaphore 等。原创 2023-09-30 08:51:31 · 145 阅读 · 0 评论 -
高效的 CAS (Compare and Swap)
CAS 全称 Compare and Swap,是 Java 中提供的一个原子操作,是一种高效且线程安全的并发编程技术。原创 2023-09-29 10:19:48 · 156 阅读 · 1 评论 -
终于理解了多线程中不得不谈的并发三大性质
并发是计算机科学领域的重要概念,它涉及到多个任务或操作在同一时间段内执行的能力。并发有三大性质,分别是:原子性、有序性、可见性。原创 2023-09-27 10:16:08 · 158 阅读 · 1 评论 -
终于懂了 Java 中的各种锁
Java 中提供了种类丰富的锁,每种锁因有不同的特性在不同的场景能够展现出较高的性能,本文在概念的基础上结合源码 + 使用场景进行举例,让读者对 Java 中的锁有更加深刻的认识原创 2023-09-26 12:59:23 · 119 阅读 · 0 评论 -
Java 21正式发布 小小使用一下期待已久的虚拟线程
虚拟线程是一种轻量级的并发编程机制,它在代码中提供了一种顺序执行的感觉,同时允许在需要时挂起和恢复执行。虚拟线程可以看作是一种用户级线程,与操作系统的线程或进程不同,它是由编程语言或库提供的,而不是由操作系统管理的。原创 2023-09-24 09:30:58 · 390 阅读 · 0 评论