自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java IO核心知识提问点

本文介绍了Java IO的核心概念和应用。首先解释了IO(输入输出)的基本含义,然后详细对比了Java中的三种IO模型:BIO(阻塞式)、NIO(非阻塞式)和AIO(异步式)。文章重点分析了字节流与字符流的区别及各自核心类,并深入探讨了BIO与NIO的本质差异。此外,还阐述了NIO的三大核心组件(Buffer、Channel、Selector)及其作用,解释了同步IO与异步IO的区别,并介绍了Java实现异步IO的方法。最后,详细说明了Buffer类中flip()、rewind()、clear()方法的不同

2025-09-18 19:27:41 424

原创 Java锁机制核心知识提问点

定义:允许同一线程在持有锁的情况下,多次(递归地)获取同一把锁,且不会导致死锁的锁。作用示例:避免递归场景下的死锁。例如:Java 中的和都是可重入锁。若一个递归函数被修饰,线程在第一次获取锁后,递归调用时可直接再次获取该锁,无需等待,避免了 “线程自己等待自己释放锁” 的死锁问题。定义:线程获取锁失败时,不立即阻塞(放弃 CPU),而是通过循环重试的方式等待锁释放,直到获取到锁或重试达到阈值。优缺点优点:减少线程上下文切换的开销(阻塞 / 唤醒需切换 CPU 状态),响应速度快。

2025-09-18 19:05:51 804

原创 Java Lambda 表达式详解:从入门到实战,彻底搞懂函数式编程

Java 8的Lambda表达式是革命性的新特性,引入函数式编程思想,通过简化行为传递大幅提升代码可读性和开发效率。本文系统讲解了Lambda的核心概念、语法规则及实战应用场景。 核心内容包括:函数式接口的定义与标识方法;Lambda语法从完整形式到各种简化规则的演变;在集合操作、线程创建和策略模式等场景中的实际应用;与匿名内部类的本质区别;以及Lambda的优缺点分析。 文章建议:优先在简单行为场景使用Lambda,复杂逻辑应抽为单独方法;可结合方法引用进一步简化代码。Lambda将行为作为一等公民,是J

2025-09-16 18:41:58 2544

原创 MySQL 核心知识体系:从基础到底层优化全解析

本文系统介绍了MySQL的核心知识点,包括常用SQL函数(聚合、字符串、日期函数)、多表联查方式(内连接、左连接、右连接)和数据库设计三大范式。重点解析了MySQL底层机制:事务ACID特性、InnoDB与MyISAM引擎的区别(事务支持、锁机制等)、关键日志(RedoLog、UndoLog、Binlog)的作用。在索引优化方面,详细讲解了B+树索引结构原理、各类索引特点及最左前缀原则,并给出索引设计技巧和失效场景。文章最后建议通过实践练习和性能分析工具EXPLAIN来巩固MySQL知识体系。

2025-09-16 18:31:04 1273

原创 Java 常见设计模式详解:从理论到代码实现

设计模式是解决特定问题的最佳实践,掌握这些模式能帮助我们写出更优雅、可维护的代码。单例模式:控制对象创建,适合全局资源管理工厂模式:封装对象创建逻辑,解耦创建与使用观察者模式:实现对象间的联动通信,适合事件驱动场景装饰器模式:动态扩展功能,避免继承层次过深策略模式:封装不同算法,实现灵活切换适配器模式:解决接口不兼容问题,便于集成第三方组件代理模式:控制对象访问,实现延迟加载和功能增强如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!

2025-09-15 12:22:49 1086

原创 深入理解 String.intern ():从原理到内存优化实战

摘要: String.intern()是Java中的native方法,用于将字符串对象存入常量池或返回已存在的引用。JDK6及之前会在永久代创建副本,JDK7+改为存储堆对象引用。合理使用可节省内存(如处理重复字符串),但滥用会导致性能问题。关键点包括:1)常量池位置变迁;2)JDK版本差异;3)适用场景(大量重复字符串);4)避免内存泄漏。通过代码案例展示了不同JDK版本的行为差异和内存优化效果。面试常见问题涉及对象创建数量、版本区别和实际应用场景。

2025-09-15 11:26:24 1198

原创 搞定 Java 并发死锁:原理拆解 + 工具实操 + 预防落地

死锁是多个线程互相持有对方所需资源而导致的永久阻塞状态。文章从死锁概念入手,通过生活案例形象说明,并列举产生死锁的四个必要条件(互斥、持有并等待、不可剥夺、循环等待)。重点演示了用Java代码模拟死锁场景,并介绍jstack、VisualVM、Arthas三种排查工具的使用方法。最后提出五种预防方案:统一资源获取顺序、一次性获取所有资源、超时自动释放、使用共享资源以及采用并发工具类。全文通过理论结合实践的方式,帮助开发者理解、排查和预防死锁问题。

2025-09-14 18:28:24 1080

原创 Redis的过期策略

Redis通过"惰性删除+定期删除+内存淘汰"三重机制管理键过期问题。惰性删除在访问时检查过期键,定期删除每100ms随机扫描清理部分过期键,当内存达到阈值时则触发LRU/LFU等淘汰策略。建议合理配置maxmemory和删除策略,并给过期时间添加随机偏移避免缓存雪崩。掌握这些机制能有效平衡内存使用和CPU消耗,保障Redis高性能运行。

2025-09-14 13:45:13 1107

原创 Java 泛型详解:从基础到高级应用

本文全面解析Java泛型特性,包括基本概念、泛型类/接口定义、泛型方法、通配符使用(无界/上界/下界)、类型擦除机制及最佳实践。泛型通过参数化类型实现编译时类型检测,提高代码安全性和复用性。文章详细演示了泛型的具体应用场景,并指出类型擦除带来的限制。最后强调合理使用泛型能编写更优雅安全的代码,是理解Java集合框架的基础。

2025-09-12 14:39:33 867

原创 Redis 持久化详解:RDB 与 AOF 原理、配置及选型

Redis 持久化是保障数据安全的核心手段,没有 “绝对最优” 的方案,只有 “最适合业务” 的选择:​追求性能与安全平衡:优先选择 “RDB+AOF 混合持久化”;​追求极致恢复速度:侧重 RDB,搭配定时备份;​追求极致数据安全:侧重 AOF,配置everysec同步策略。​实际生产中,还需结合定时备份(如将.rdb/.aof文件同步到远程存储)、监控(如监控文件大小、重写频率),形成完整的 Redis 数据保障体系。

2025-09-12 11:41:27 789

原创 Java 面向对象三大核心思想:封装、继承与多态的深度解析

面向对象编程三大特性:封装、继承、多态。封装通过私有化属性和提供公共接口确保数据安全;继承实现代码复用,构建类层级关系;多态让子类对象可赋值给父类引用,实现同一行为不同表现。三者相互支撑:封装是基础,继承是桥梁,多态是目标,共同实现高内聚低耦合的设计目标。

2025-09-11 16:37:26 1510

原创 深入解析HashMap原理与使用

本文全面介绍了Java中HashMap的实现原理和使用方法。主要内容包括:1) HashMap的基本使用,如put/get操作;2) 多种遍历方式;3) 正确重写equals()和hashCode()方法的重要性;4) 底层数据结构(数组+链表+红黑树);5) hash函数的设计;6) 数组容量的计算规则;7) 扩容机制(阈值和2倍扩容);8) 总结HashMap的核心特性。文章详细解析了HashMap如何通过哈希算法高效存取数据,以及如何处理哈希冲突,适合Java开发者深入学习HashMap的实现原理。

2025-09-11 15:02:32 782

原创 深入解析ThreadLocal:线程数据隔离利器

摘要:ThreadLocal是Java中实现线程数据隔离的关键类,通过ThreadLocalMap存储线程专属数据。其核心方法包括set()、get()和remove(),使用时需注意内存泄露问题,建议在finally块中调用remove()。典型应用场景包括线程数据隔离(如SqlSession绑定)和跨函数数据传递。使用InheritableThreadLocal可实现父子线程数据共享。ThreadLocal采用高效的哈希算法定位数据,以ThreadLocal对象为key确保多变量场景下的准确性。合理使用

2025-09-10 17:11:31 1136 1

原创 深入浅出 MySQL 事务:从 ACID 到实战,一篇搞定!

MySQL事务是一组不可分割的SQL操作序列,具备ACID特性:原子性(操作全部成功或全部回滚)、一致性(数据始终合法)、隔离性(并发事务互不干扰)和持久性(提交后永久保存)。操作语法包括START TRANSACTION、COMMIT和ROLLBACK。MySQL提供4种隔离级别(读未提交、读已提交、可重复读和串行化)解决并发问题,默认是可重复读。常见问题包括默认隔离级别选择、MVCC机制和死锁处理。事务确保数据一致性,如银行转账必须同时完成扣款和收款操作。

2025-09-10 15:23:58 753

原创 Java List 集合全解析:ArrayList、LinkedList、Vector 底层原理与实战指南

本文介绍了Java集合框架中的List接口及其三大实现类。ArrayList基于动态数组实现,查询快但增删慢;LinkedList采用双向链表结构,增删快但查询慢;Vector是线程安全的动态数组,但性能较低。文章对比了三者的底层结构、线程安全性、查询和增删效率等特性,并给出了选择建议:优先ArrayList,频繁头尾操作选LinkedList,线程安全场景推荐CopyOnWriteArrayList替代Vector。理解这些实现类的底层原理有助于开发者根据具体场景选择最合适的List实现类。

2025-09-09 21:56:54 193

原创 Linux 入门必备:20 个最常用指令详解(附实战案例)

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!Linux 的终端就是控制台, 是用户与内核交互的平台, 通过输入指令。:压缩 / 解压文件(如。:查看指令的手册(如。

2025-09-09 18:37:11 519

原创 Serializable序列化

序列化是指把一个Java对象变成二进制内容,本质上就是一个byte[]数组。为什么要把Java对象序列化呢?因为序列化后可以把byte[]保存到文件中,或者把byte[]通过网络远程传输。这样,就相当于把Java对象存储到文件或者通过网络传输出去了。有序列化,就有反序列化,即把一个二进制内容(也就是byte[]数组)变回Java对象。有了反序列化,保存到文件中的byte[]数组又可以“变回”Java对象,或者从网络上读取byte[]并把它“变回”Java对象。

2025-09-08 17:13:40 1108

原创 Seate的XA模式和AT模式

本文介绍了分布式事务处理的两种主流模式:XA模式和AT模式。XA模式基于两阶段提交协议,保证强一致性但性能较差;AT模式通过数据快照和全局锁机制,在保证最终一致性的同时提升了性能。文章详细对比了两种模式的实现原理、优缺点及适用场景,并给出了Seata框架下的具体配置方法。XA适合强一致性场景,AT则更适合高并发需求。两种模式各有侧重,开发者可根据业务需求选择合适的分布式事务解决方案。

2025-09-08 12:55:01 828

原创 深入理解 Sentinel:从基础到实战的微服务治理

一、初识Sentinel一、初识Sentinel【1】雪崩问题及解决方案1.雪崩问题微服务中,服务间调⽤关系错综复杂,⼀个微服务往往依赖于多个其它微服务。如图,如果服务提供者I发生了故障,当前的应⽤的部分业务因为依赖于服务I,因此也会被阻塞。此时, 其它不依赖于服务I的业务似乎不受影响。服务器支持的线程和并发数有限,请求⼀直阻塞,会导致服务器资源耗尽,从⽽导致所有其它服务都不可用,那么当前服务也就不可用了。

2025-09-07 18:21:43 837

原创 Jmeter快速入门

本文介绍了JMeter的安装与基本使用方法。首先需确保已安装JDK并配置环境变量,然后从官网下载JMeter压缩包解压后即可使用,注意启动时需耐心等待且不能关闭命令行窗口。接着介绍了如何将界面语言改为中文(临时和永久两种方式),并演示了基本操作流程:创建测试计划、添加线程组、配置HTTP取样器以及添加监听结果树来查看测试结果。文中还提供了百度网盘下载链接方便用户获取软件。

2025-09-07 16:57:18 409

原创 JVM如何排查OOM

如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!当JVM(Java虚拟机)出现OOM(OutOfMemoryError)时,可以按照以下步骤和方法,用于帮助定位和解决JVM中的OOM问题。1.查看异常堆栈信息。2.分析内存使用情况。

2025-09-06 21:40:27 760 3

原创 详解 Java 中的 CopyOnWriteArrayList

《CopyOnWriteArrayList并发容器详解》摘要 本文系统介绍了Java并发容器CopyOnWriteArrayList的核心原理与应用。其底层采用写时复制机制,通过复制数组实现写操作线程安全,同时支持无锁读取,适合读多写少场景。文章分析了添加、获取、删除等核心方法的实现逻辑,并指出其读写分离思想带来的性能优势(读高效、迭代安全)与局限(内存占用高、写性能差)。典型应用场景包括缓存和配置管理等低频写操作需求,但不适用于高频写或大数据量场景。最后强调需根据业务特点权衡使用这一并发解决方案。

2025-09-06 19:50:33 830

原创 深入剖析 ConcurrentHashMap:Java 并发编程的基石

ConcurrentHashMap是Java中支持高并发的哈希表实现。Java7采用分段锁(Segment)机制,通过16个Segment实现并发控制,每个Segment内部维护链表结构。Java8进行了重大改进:引入红黑树优化查询性能,采用CAS操作减少锁竞争,并取消Segment直接使用Node数组。它提供put、get、computeIfAbsent等线程安全方法,适用于缓存系统、计数器等并发场景。随着Java版本迭代,ConcurrentHashMap不断优化以提高并发性能和稳定性,是多线程环境下高

2025-09-05 19:09:15 910

原创 输入网址到网页显示的整个过程

本文详细介绍了HTTP请求从生成到发送的完整网络传输过程:首先浏览器解析URL生成HTTP请求报文;然后通过DNS解析获取服务器IP地址;接着协议栈中的TCP协议将数据分割成MTU大小的网络包,并添加TCP头部信息;IP协议再进行封装,添加源/目标IP地址;最后通过MAC地址和ARP协议完成两点间传输,由网卡将数据转换为电信号发送。整个过程涉及DNS解析、TCP/IP协议栈、ARP协议等多个网络协议的分层协作,最终实现数据的可靠传输。

2025-09-05 12:33:13 629

原创 计算机网络模型入门指南:分层原理与各层作用

所以,需要首先通过ARP协议获取对方的MAC地址,然后将收发双方的MAC地址形成一个MAC头部,加入到IP数据包(包)的前面,形成一个数据帧(Data Frame),最后发送到以太网。如果没有分层,网络通信的所有功能(从物理信号传输到应用数据解析)都需要由一个模块完成,就像用一个程序实现 “快递打包 + 运输 + 配送 + 签收” 的全流程 —— 任何一个环节的改动(如包装规格变化)都可能影响整个系统,开发和维护几乎不可能实现。:负责 “用户数据的格式处理”(类似 “快递里的物品包装与拆封”)。

2025-09-04 18:46:56 1226

原创 Java 垃圾回收知识体系总结:从对象判断到垃圾收集器

本文系统介绍了Java垃圾回收机制的核心内容:1. 垃圾判断的两种算法:引用计数算法(存在循环引用问题)和可达性分析算法(JVM默认使用);2. Java四种引用类型:强引用、软引用(内存不足回收)、弱引用(GC必回收)和虚引用;3. 垃圾收集算法:标记-清除(碎片化)、复制算法(适合新生代)和标记-整理(适合老年代),基于分代收集理论;4. 主流垃圾收集器:包括新生代的Serial/ParNew/ParallelScavenge,老年代的SerialOld/ParallelOld/CMS,以及跨代的G1收

2025-09-04 14:45:56 1118

原创 TCP 协议全解析:从三次握手到拥塞控制的核心原理

TCP(Transmission Control Protocol,传输控制协议)是面向连接、可靠、基于字节流的传输层协议,运行在 IP 协议之上(TCP/IP 协议族的核心协议之一),主要用于在两台主机之间建立稳定的通信链路,确保数据有序、无丢失、无重复地传输。核心特性面向连接:通信前需通过 “三次握手” 建立连接,通信结束后通过 “四次挥手” 释放连接,类似 “打电话先拨号、挂电话先道别” 的过程。确认机制(ACK):接收方收到数据后会发送确认报文,发送方未收到确认则重传;序列号。

2025-09-04 00:02:14 1146

原创 HTTP 协议核心组件与安全扩展深度解析

超文本传输协议)是一种用于在客户端和服务器之间传输数据的应用层协议,基于 TCP/IP 通信。HTTP是一个属于应用层的协议,同时也是一个双向协议,基于浏览器-服务器架构模型进行工作。浏览器 与 服务器之间,基于http协议进行通信 ,浏览器发送请求数据给服务器,服务器根据接收到并处理请求后,向浏览器发送响应信息。HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是HTTP 协议的安全增强版本,核心是在 HTTP 的基础上加入了SSL/TLS 加密层。

2025-09-03 17:43:54 1535

原创 AQS 同步框架的底层机制

AQS(AbstractQueuedSynchronizer)是Java并发编程中的核心同步框架,提供原子式管理同步状态、线程阻塞和唤醒机制。它通过维护volatile变量state表示同步状态,并使用CLH双向队列管理等待线程。ReentrantLock基于AQS实现,其加锁/解锁过程通过tryAcquire和tryRelease方法控制。当线程获取锁失败时会被封装成Node加入等待队列,并在适当时机被唤醒。ReadWriteLock则通过AQS实现读写分离:允许多线程并发读,但写操作具有排他性。

2025-09-03 14:47:31 947

原创 解析synchronized实现原理与优化

摘要:本文深入解析Java中synchronized的实现机制。首先介绍synchronized的三种使用形式(实例方法、静态方法、代码块)及其对应的字节码指令(monitorenter/monitorexit和ACC_SYNCHRONIZED标志)。其次详细分析Java对象内存结构,重点说明MarkWord在不同锁状态下的变化,以及监视器锁(Monitor)的工作原理。最后阐述锁的优化策略,包括偏向锁、轻量级锁、重量级锁的特点及升级过程,展现了JVM如何根据竞争情况动态调整锁策略以提升性能。

2025-09-03 09:23:44 803

原创 Shiro安全框架:认证与授权

综上,Shiro 作为一款优秀的安全框架,在认证与授权领域为开发者提供了强大且灵活的支持。从核心概念的梳理,到认证、授权流程的深入解析,再到与 SpringBoot 的集成实践,我们能清晰看到它如何保障系统安全。无论是简单的单体应用,还是复杂的分布式系统,Shiro 都能通过简洁的配置和自定义扩展,轻松实现用户身份验证与资源权限控制,助力开发者构建安全可靠的应用系统。如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!😊😊。

2025-09-02 17:33:35 1182

原创 JVM三色标记算法

在JVM的垃圾回收机制中,准确识别哪些对象是垃圾(即不再被引用的对象)是核心任务之一,通常采用根可达性分析算法。传统的垃圾回收算法如标记-清除(Mark-Sweep)、标记-整理(Mark-Compact)等在标记阶段通常会产生STW(Stop The World)方式,这会导致应用程序出现明显的停顿。为了减少这种停顿时间,JVM引入了三色标记算法,它是现代垃圾回收器(如CMS、G1、ZGC等)的核心算法之一。

2025-09-02 11:00:11 454

原创 SpringMVC的执行流程

MVC模式 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将请求处理控制、业务逻辑、数据封装、数据显示等流程节点分离的思想来组织代码。所以,MVC 是一种设计模式,而Spring MVC 是一款基于MVC设计模式思想实现的的 MVC 框架,属于Spring技术栈的一部分。Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,并且它天生与 Spring框架集成,更利于架构的设计与搭建。

2025-09-01 19:14:36 445

原创 Redis五大核心数据类型

本文系统介绍了 Redis 五种核心数据类型(),围绕每种类型的底层实现(如 String 的 SDS、List 的 quicklist 等,含版本差异)、高频操作命令及企业级应用场景展开:String 适用于缓存、计数与分布式锁;Hash 是结构化对象存储最优解;List 可实现消息队列与最新列表;Set 擅长去重与社交关系运算;ZSet 核心用于排行榜与权重队列。整体核心是帮助开发者根据业务场景匹配对应数据类型,以提升 Redis 性能、节省内存。

2025-09-01 18:49:29 880

原创 SpringBoot的自动配置:原理与实践

1.自定义的启动器中删除启动类和测试类2.在resources目录下建一个META-INF目录,再建一个spring.factories文件,写键值对:键:值:配置文件的全限定名3.配置文件需要用@Configuration 修饰4.配置文件中写用@Bean 修饰的方法5.以配数据源为例5.1配置类:5.2还可以将参数设置为动态5.3那么在自定义启动器中还需要导入该项目的坐标6.在主项目的pom.xml中导入自定义启动器的坐标。

2025-08-24 15:36:19 992

原创 详解Spring框架中Bean的生命周期管理与核心环节

(1)Spring框架是一款轻量级的开发框架,两大核心思想:IOC(控制反转)和AOP(面向切面编程),用于组件之间的解耦以及简化第三方JavaEE中间件技术的使用。(2)IOC:控制反转。即将创建对象的控制权转移给Spring框架进行管理,使对象间形成松散耦合的关系,实现解耦。(3)SpringIOC容器负责创建和管理Bean的生命周期,以及根据Bean之间的依赖关系,完成Bean之间的注入。(4)所以,Bean就是被IOC容器管理的对象。

2025-08-17 15:19:03 738

原创 MyBatis实战:学生表CRUD操作详解

梳理思路(思维导图)

2025-08-09 18:59:37 356

原创 MyBatis三大Executor执行器

Executor执行器的作用是用于执行MyBatis框架底层的JDBC操作。Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。

2025-08-09 18:04:57 357

原创 MyBatis中Mapper的实现原理

前言:在 MyBatis 中,Mapper 接口(也称为映射器接口)是实现 SQL 操作与 Java 方法绑定的核心组件,其工作原理主要依赖和机制,无需手动编写实现类即可完成数据库操作。

2025-08-09 16:01:22 414

原创 Java线程状态与生命周期

线程的生命周期包含多个状态,从创建到终止依次经历:首先是新建状态,当通过 new 关键字创建线程对象后,线程便处于此状态,此时它仅存在但未开始执行。在调用start()方法后,线程处于RUNNABLE状态(就绪状态),获得时间片后开始执行,此时依旧是RUNNABLE状态(运行中)。线程调用了Object的wait()方法或者Thread的join()方法,线程就进入等待状态。在RUNNABLE状态执行完run()方法后,或因异常退出后,线程进入终止状态,至此生命周期结束。线程执行完成后进入终止状态。

2025-07-25 16:16:48 324

空空如也

空空如也

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

TA关注的人

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