自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1106)
  • 资源 (1)
  • 收藏
  • 关注

原创 ThreadLocal被问出了花?一篇彻底搞懂它的终极指南

ThreadLocal被问出了花?一篇彻底搞懂它的终极指南

2025-06-13 07:45:00 405

原创 你真的会用 Java 中的线程池吗?内含多个企业级线程池工具类封装实践

在 Java 多线程编程领域,线程池是一项极为重要的技术。它通过复用已创建的线程,避免频繁创建和销毁线程带来的开销,从而提升系统性能和资源利用率。然而,在实际企业级开发中,许多开发者对线程池的使用仅仅停留在基础层面,未能充分发挥其潜力。本文将深入探讨 Java 线程池的核心原理,并分享企业级线程池工具类的封装实践,帮助你掌握线程池的高级应用。

2025-06-12 19:26:32 598

原创 原理分析:信号量隔离 vs 线程池隔离!

《信号量隔离与线程池隔离的对比分析》 本文深入探讨了两种常见的并发控制策略:信号量隔离和线程池隔离。信号量隔离通过Semaphore限制对共享资源的并发访问数量,适用于数据库连接等场景;线程池隔离则通过为不同任务类型分配独立线程池,实现任务间的资源隔离。文章通过Java代码示例展示了两种隔离方式的具体实现,并对比了它们的特性、适用场景和风险。在实战演示中,作者将两种策略结合使用,分别控制数据库查询的并发量和隔离IO/CPU任务,为高并发系统中的资源管理提供了有效的解决方案。

2025-06-12 05:15:00 621

原创 农银一面:Filter、Interceptor、Spring AOP 的执行顺序

Filter、Interceptor和Spring AOP的执行顺序与区别 在日常开发中,Filter、Interceptor和AOP是三种常用的请求处理技术。Filter是Servlet规范的一部分,工作在Servlet容器层面;Interceptor是Spring MVC框架特有的,工作在Controller层面;AOP则提供更细粒度的切面编程能力。执行顺序为:Filter->Interceptor->AOP->Controller业务逻辑。三者在处理时机、作用范围和使用场景上各有不同

2025-06-11 05:15:00 1521

原创 面试官:你知道select * from users where id > 5 for update时会发生什么吗?

摘要:本文详细介绍了MySQL中的行锁机制,重点分析了在不同查询场景下的加锁行为。对于唯一索引,探讨了等值查询和范围查询的加锁规则;对于非唯一索引,解释了等值查询时的临键锁和间隙锁机制。文章还说明了如何通过performance_schema查看加锁情况,并强调无索引查询会导致表级锁,影响并发性能。通过具体例子,帮助读者深入理解MySQL在不同条件下的锁处理方式。

2025-06-10 05:15:00 935

原创 Java灵魂拷问13个为什么,你都会哪些?

摘要: 本文分析了Java开发中的4个常见问题,包括:1)禁止使用BigDecimal的equals方法进行等值比较,建议改用compareTo;2)避免直接用double构造BigDecimal,推荐使用字符串或valueOf方法;3)不推荐使用Apache BeanUtils进行属性拷贝,建议使用Spring BeanUtils或MapStruct等更高效的工具;4)日期格式化时必须使用y表示年份而非Y,因为两者语义不同,Y可能造成年份计算错误。这些规范有助于提高代码的精度、性能和安全性。

2025-06-09 05:15:00 1107

原创 13个 @Transactional 注解的错误使用场景

摘要: 本文总结了13个常见的@Transactional注解错误使用场景,分为"不必要"和"不生效"两大类。重点包括:1)在无需事务的方法或范围过大的类上滥用注解;2)注解在private/final/static方法上失效;3)同类方法内部调用导致事务失效;4)Bean未被Spring管理等问题。文章还提供了同类调用问题的三种解决方案:独立Service类、自注入和手动获取代理对象。正确使用@Transactional需要注意方法权限、代理机制和Spring管理等

2025-06-07 05:15:00 621

原创 你以为搞懂了 HTTP?那这些 Headers 的妙用你肯定不知道!

咱们先快速过一下基础。HTTP Headers 就是跟在请求行(比如 `GET /index.html HTTP/1.1`)或响应行(比如 `HTTP/1.1 200 OK`)后面的一堆键值对(Key-Value Pairs)。

2025-06-06 05:15:00 487

原创 你真的会用 RedisTemplate 吗?含有企业级 Redis 工具类封装

本文深入探讨了RedisTemplate在企业级应用中的正确使用方法,涵盖四大核心场景:缓存、数据存储、分布式协调和实时数据处理。通过典型业务案例(如电商商品缓存、用户会话存储、分布式锁和秒杀系统)展示了RedisTemplate的具体实现方案,并提供了完整的代码示例。 文章还介绍了封装RedisUtils工具类的必要性,以提升开发效率和代码可读性。重点强调要理解Redis的数据结构与原子性操作,避免误用,才能真正发挥其威力。最后提出了典型场景与核心API的对照表,帮助开发者系统掌握RedisTemplat

2025-06-05 05:15:00 785

原创 面试官:介绍一下 PageHelper 实现分页原理

PageHelper实现分页的原理主要基于Mybatis拦截器机制。在查询前调用startPage方法时,PageHelper会将分页参数存储在ThreadLocal中。其核心是通过实现Mybatis的Interceptor接口,拦截StatementHandler对SQL的预处理过程,自动将原始SQL改写为带有LIMIT的分页查询语句。具体实现步骤为:1)使用ThreadLocal保存分页参数;2)通过Mybatis拦截器机制拦截SQL执行;3)根据ThreadLocal中的参数动态修改SQL语句,添加分

2025-06-04 09:47:05 895

原创 SpringBoot中13种设计模式应用案例

本文介绍了SpringBoot中三种经典设计模式的应用案例: 单例模式 - Spring默认以单例方式管理Bean,确保全局唯一实例,减少内存占用并简化共享资源管理。 工厂方法模式 - 通过BeanFactory和自定义工厂类(如PaymentProcessorFactory)实现对象创建逻辑的封装,支持松耦合和扩展性。 抽象工厂模式 - 在多环境配置和数据源场景中,通过抽象工厂(如DatabaseFactory)创建一系列相关对象,实现不同数据库产品的无缝切换。 这些模式在SpringBoot中提供了灵活

2025-06-04 05:15:00 871

原创 饭票、图书馆、GC:这样理解 Java 引用,谁还不会?

饭票、图书馆、GC:这样理解 Java 引用,谁还不会?

2025-06-03 19:18:03 655

原创 Java并发编程:守护线程

摘要:Java守护线程解析 Java守护线程(Daemon Thread)是特殊的后台线程,其核心特性是:当JVM中只剩守护线程时,虚拟机将自动退出。与普通线程不同,守护线程会随主线程结束而强制终止,即使正在执行任务(如无限循环)。典型应用场景包括垃圾回收、日志记录等后台服务。通过Thread.setDaemon(true)可设置守护线程,需注意其任务应设计为可中断的,避免影响程序稳定性。守护线程机制为Java提供了高效的后台任务支持方案。

2025-06-01 05:15:00 395

原创 token是用来鉴权的,session是用来干什么的?

JWT用于无状态用户认证和授权,而Session作为补充安全层提供额外保护。JWT实现无状态认证便于系统扩展,Session则用于管理Token生命周期、防止滥用、支持主动注销和状态追踪。两者结合既保持了JWT的无状态优势,又通过Session增强了安全性。代码示例展示了登录时同时生成JWT和创建Session,并在验证时双重检查的流程。这种混合模式平衡了安全性与扩展性需求。

2025-05-31 05:15:00 420

原创 一招搞定Java线程池炸弹,系统吞吐量暴增10倍!

文章介绍了一个解决Java线程池问题的监控工具,通过该工具可以有效提升系统吞吐量。文章首先描述了系统响应慢的问题,经过排查发现是线程池被占满导致任务队列堵塞。为了解决这一问题,作者开发了一款线程池监控工具,并展示了其效果。该工具能够实时监控线程池的关键指标,如活跃线程数、队列使用率、任务完成率等,并支持告警和自动调整线程池参数。文章还提供了核心代码实现,展示了如何注册线程池、收集统计数据以及进行趋势分析和自动调整。该工具已在公司内部推广,显著提升了系统性能。

2025-05-29 05:15:00 491

原创 用deepseek写了一个简单的叫号系统

要实现一个基于 ThinkPHP 6.1 的排队叫号系统,我们可以按照以下步骤进行开发。系统将使用 Redis 作为队列存储,WebSocket 实现实时推送,并提供 API 接口供用户和管理员操作。

2025-05-28 05:15:00 844

原创 面试复盘:Java为什么有这么多“O”?——从请求链路看清楚

在Java开发中,常见的“O”如PO、DTO、VO、BO等,各自承担不同的职责,确保代码结构清晰、职责分离。以Spring Boot + MyBatis的用户查询接口为例,请求链路如下:Controller层:接收前端请求,使用DTO(Data Transfer Object)封装参数,便于校验和扩展。Service层:将DTO转换为BO(Business Object),进行业务逻辑处理,如计算注册天数。DAO层:通过Mapper查询数据库,返回PO

2025-05-27 05:15:00 831

原创 SpringBoot中内置的49个常用工具类

SpringBoot内置了49个常用工具类,涵盖了字符串处理、集合操作、反射、I/O等多个领域。字符串处理工具类如StringUtils提供了空值检查、文本内容判断、字符串分割等功能;AntPathMatcher用于路径匹配和变量提取;PatternMatchUtils支持简单的模式匹配。集合工具类如CollectionUtils提供了集合的空值检查、交集计算等操作;MultiValueMap支持多值映射。反射工具类如ReflectionUtils和ClassUtils简化了字段访问、方法调用和类信息获取。

2025-05-26 05:15:00 325

原创 掌握 Java 枚举,提升代码质量

Java 枚举是一种强大的工具,能够提升代码的可读性和可维护性。通过enum关键字定义枚举,可以为常量添加属性和方法,增强其功能。枚举支持遍历、条件判断和静态方法,适用于多种设计模式,如策略模式、工厂模式、观察者模式、状态模式和单例模式。最佳实践包括使用枚举代替常量、为每个常量提供具体行为以及避免依赖外部状态。合理使用枚举可以有效提高代码质量,减少错误,并增强代码的扩展性。

2025-05-25 05:15:00 1048

原创 这9个工具库让我的Java开发效率提升了80%

在Java开发中,使用一些高效的工具库可以显著提升开发效率。本文介绍了几个常用的工具类,包括Collections、CollectionUtils和Lists。Collections类提供了排序、获取最大/最小值、返回空集合、转换为不可修改集合和线程安全集合等功能。CollectionUtils类则提供了检查集合是否为空、对两个集合进行交集、并集等操作的方法。Lists类则提供了快速初始化集合、笛卡尔积、分割集合和流处理等功能。这些工具类能够帮助开发者避免重复编写代码,提升开发效率。

2025-05-24 05:15:00 763

原创 面试官:代码里System.out.println比较多,该怎么办?

在Java开发中,System.out.println常用于调试和输出信息,但随着项目复杂度的增加,过多的使用会带来性能、维护和安全问题。面试中,面试官可能会询问如何处理这一问题。解决方案包括引入日志框架(如Log4j、SLF4J、Logback)来替代System.out.println,通过代码审查和重构减少不必要的打印语句,以及使用静态代码分析工具(如SonarQube、Checkstyle、PMD)自动检测和规范代码。这些方法不仅能提升代码质量,还能优化日志管理,增强项目的可维护性和安全性。

2025-05-23 05:15:00 795

原创 别再背线程池的七大参数了,现在面试官都这么问

文章探讨了线程池的核心机制,指出面试官不再满足于机械记忆线程池的七大参数,而是更关注参数背后的设计思想和源码实现。通过医院分诊系统的类比,文章解释了线程池的基本概念,如核心线程、任务队列和拒绝策略。随后,深入源码解析了Worker的生命周期、getTask()方法的实现以及线程池状态机的设计,揭示了核心线程保活、超时控制和状态联动等关键机制。文章还讨论了动态参数调整的复杂性,并提供了高频面试题的源码级回答。最后,总结了线程池设计的哲学启示,强调空间换时间、惰性创建、优雅降级和状态驱动等设计原则。

2025-05-21 05:15:00 916

原创 synchronized的用法

synchronized 是 Java 中用于实现线程同步的关键字,确保多个线程对共享资源的互斥访问。其主要用法包括: Synchronized 方法:修饰方法时,线程获取对象锁,其他线程需等待锁释放。 Synchronized 代码块:通过指定锁对象,精确控制同步范围,提升灵活性。 静态 Synchronized 方法:获取类锁,即使多个实例访问也互斥。 锁的可重入性:同一线程可多次获取同一锁,避免死锁。 锁的粒度:锁的粒度越小,性能越好,减少线程竞争。 通过合理使用 synchronized,可以有效解

2025-05-20 05:15:00 778

原创 暴论:2025年,程序员必学技能就是MCP

2025年,程序员必须掌握的关键技能之一是MCP(Model Context Protocol),这是由Anthropic公司推出的开放协议,旨在连接大语言模型与外部数据和行为。MCP类似于USB或Type-C接口,提供了一种通用标准,使得不同系统能够无缝交互。它通过客户端、MCP服务端和LLM(大语言模型)三方协作,弥补了大模型在数学、实时数据获取等方面的短板。MCP的重要性在于它能够访问本地资源和个性化API,实现定制化需求,如操作本地数据库或整合个人知识库。与Function Calling和Agen

2025-05-19 05:15:00 670

原创 Netty 的零拷贝实现?

Netty 通过多种方式实现零拷贝,以提升数据传输效率。首先,利用 Linux 的 sendfile 系统调用,Netty 通过 DefaultFileRegion 的 transferTo 方法,直接在内核态将文件数据发送到网络套接字,避免了用户空间的数据拷贝。其次,使用 CompositeByteBuf 将多个 ByteBuf 组合成一个逻辑缓冲区,减少数据复制操作。最后,通过 Direct ByteBuf 使用直接内存,Netty 能够更高效地与操作系统进行 I/O 操作,减少数据拷贝。这些技术在处理

2025-05-18 05:15:00 286

原创 Netty的核心组件是什么?

Netty 是一个高性能的网络通信框架,其核心组件包括 EventLoopGroup、Channel、Handler、ChannelPipeline 以及 Bootstrap 和 ServerBootstrap。EventLoopGroup 管理线程池,处理网络事件;Channel 表示网络连接,支持读写操作;Handler 处理业务逻辑,分为入站和出站处理器;ChannelPipeline 是处理器链,定义事件处理流程;Bootstrap 和 ServerBootstrap 用于配置客户端和服务器的引导过

2025-05-17 05:15:00 244

原创 sql执行时, 连接器校验和执行器校验, 这两次权限校验用的是同一个校验数据吗?

文章摘要:连接器校验和执行器校验是数据库权限管理的两个关键环节。连接器校验在用户连接数据库时进行,主要验证用户名、密码及全局权限,确保用户有权访问数据库。执行器校验则在SQL语句执行时进行,针对具体操作(如查询、插入)和对象(如表、字段)进行细粒度权限验证。两者的区别在于校验时机、范围和依据:连接器校验在连接阶段,范围较广,依据用户名和全局权限;执行器校验在执行阶段,范围更细,依据具体操作和对象权限。通过代码示例展示了用户连接、权限授予及操作执行时的校验过程,体现了两种校验机制在不同阶段对用户权限的验证作用

2025-05-16 05:15:00 389

原创 synchronized 用法及示例代码

synchronized 是 Java 中用于实现线程同步的关键字,主要用于控制多线程对共享资源的访问。它可以通过修饰方法或代码块来确保同一时间只有一个线程执行被锁定的代码。synchronized 方法会自动获取对象锁,而 synchronized 代码块可以指定锁对象,灵活性更高。静态 synchronized 方法则获取类锁,适用于类级别的同步。此外,synchronized 具有可重入性,允许同一线程多次获取同一锁。为了提升性能,应尽量减小锁的粒度,只锁定必要的代码段,以减少线程阻塞时间。

2025-05-15 05:15:00 353

原创 Netty的线程模型?

【代码】Netty的线程模型?

2025-05-14 05:15:00 647

原创 Netty性能好的原因是什么?

BIO:是一种阻塞式 I/O 模型。当客户端连接到服务器并发送请求后,服务器会为每个客户端请求创建一个新的线程来处理该请求,在处理过程中,线程会被阻塞,直到请求完全处理完毕。例如,在传统的 Web 服务器中,每个客户端请求都会启动一个线程进行处理,如果并发请求过多,线程数量也会随之增加,导致系统资源消耗过大。NIO:提供了非阻塞式 I/O 功能,基于通道(Channel)和缓冲区(Buffer)进行操作。它使用选择器(Selector)来监听多个通道上的事件,如连接打开、数据到达等。

2025-05-13 05:15:00 375

原创 BIO、NIO 和 AIO 的区别?

BIO:是一种阻塞式 I/O 模型。当客户端连接到服务器并发送请求后,服务器会为每个客户端请求创建一个新的线程来处理该请求,在处理过程中,线程会被阻塞,直到请求完全处理完毕。例如,在传统的 Web 服务器中,每个客户端请求都会启动一个线程进行处理,如果并发请求过多,线程数量也会随之增加,导致系统资源消耗过大。NIO:提供了非阻塞式 I/O 功能,基于通道(Channel)和缓冲区(Buffer)进行操作。它使用选择器(Selector)来监听多个通道上的事件,如连接打开、数据到达等。

2025-05-12 05:15:00 686

原创 spring三级缓存怎么具体操作解决循环依赖的

不过,如果其中一个是通过构造方法注入,另一个是通过 setter 方法注入或者字段注入,并且合理设置依赖关系,有可能解决循环依赖。当两个或多个 bean 互相之间存在依赖关系,例如 A bean 依赖 B bean,同时 B bean 又依赖 A bean,就会产生循环依赖。这在实际开发中是比较常见的问题。这样在 bean 初始化过程中,如果遇到循环依赖,Spring 会先完成一部分初始化,然后在合适的时机通过 setter 方法来设置依赖的 bean。定义两个类 A 和 B,它们都有对方的引用。

2025-05-11 05:15:00 1460

原创 为什么中国央行和世界大行都使用ISO20022,而微信支付和支付宝却不用

现代金融服务中,支付、结算、清算、证券交易等复杂的金融业务越来越依赖于标准化的数据交换。ISO20022为银行提供了更加灵活、丰富的数据结构,能够处理多种类型的金融交易。例如,支付清算系统中的多币种支付、汇款、电子票据等都可以通过ISO20022标准来支持和处理。

2025-05-10 05:15:00 663

原创 新一代DOM操作神器:Chrome 133 moveBefore()深度解析

在Web开发中,DOM操作从来都是性能优化的重点战场。Chrome 133带来的新API将彻底改变我们操作DOM节点的方式。本文将结合真实场景,带你深度探索这个革命性的API。

2025-05-09 05:15:00 232

原创 事务一致性

事务一致性是事务的ACID特性之一,它保证事务执行前后的数据满足业务规则和完整性约束。通过使用事务,可以确保在发生错误或系统故障时,数据能够保持一致状态。

2025-05-08 18:05:20 239

原创 Linux_进程理解、状态与优先级(详细版)

课本概念:程序的一个执行实例,正在执行的程序等。内核观点:担当分配系统资源(CPU时间,内存)的实体。是描述进程的结构体,是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

2025-05-08 05:15:00 863

原创 中国移动 Java 一面,直接秒了。。。

首先,Java的优势,我记得跨平台应该是一个大点,因为JVM的存在,一次编写到处运行。然后面向对象,这个可能也是优势,不过现在很多语言都支持面向对象,但是Java的设计从一开始就是OOP的。还有强大的生态系统,比如Spring框架,Hibernate,各种库和工具,社区支持大,企业应用广泛。另外,内存管理方面,自动垃圾回收机制,减少了内存泄漏的问题,对开发者友好。还有多线程支持,内置的线程机制,方便并发编程。安全性方面,Java有安全模型,比如沙箱机制,适合网络环境。

2025-05-07 09:16:07 803

原创 瞧瞧别人家的日期处理,那叫一个优雅!

境界代码特征典型问题修复成本初级大量使用String拼接格式混乱/解析异常高进阶熟练运用JDK8新API时区处理不当中高手预编译+缓存+防御性编程性能瓶颈低大师结合领域模型设计时间类型业务逻辑漏洞极低终极建议:在微服务架构中,建议建立统一的时间处理中间件,通过AOP拦截所有时间相关操作,彻底消除代码层面的时间处理差异。

2025-04-30 05:15:00 803

原创 抽象类有什么作用呢?比如在一个类中,可以直接通过接口调用其 实现类,但是也可以直接调用 实现类,这两者调用有什么区别呢?

抽象类是一种特殊的类,它不能直接被实例化(不能创建对象),但可以被继承。抽象类通常用于定义一个通用的模板或规范,具体的实现由子类完成。

2025-04-29 05:15:00 288

原创 谈谈你对单点登录的理解?

其中,OAuth2 + JWT 方案适合于需要对外提供 API 接口的应用,而 CAS 方案则更适合于内部系统之间的单点登录。Spring Session 方案则更适合于需要将会话信息共享到多个应用之间的场景,它也是最早和最简单的单点登录实现方式。单点登录(Single Sign-On,简称 SSO)是一种身份验证机制,允许用户在一个地方登录后,无需重新输入凭据,即可访问多个相关联的应用程序或系统。,同时也提高了安全性,因为用户可以减少记住多个密码的需求,从而降低密码被泄露的风险。

2025-04-28 05:15:00 1013

day01_项目介绍和工程搭建.md

day01_项目介绍和工程搭建.md

2021-09-04

空空如也

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

TA关注的人

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