- 博客(56)
- 收藏
- 关注

原创 揭秘Java NIO:为什么它能让你的数据访问快如闪电?文件和网络NIO的原理大不同!
Java NIO(New I/O 或 Non-blocking I/O)是 Java 1.4 引入的一套新的 I/O API,旨在解决传统 I/O(BIO)在高并发场景下的性能瓶颈。传统 I/O 采用阻塞模式,一个线程只能处理一个请求,导致资源浪费和系统性能下降。NIO 通过引入非阻塞 I/O、缓冲区(Buffer)、通道(Channel)和选择器(Selector)等机制,实现了更高效的 I/O 操作。 核心组件: 通道(Channel): 双向数据传输管道,支持异步读写。 缓冲区(Buffer): 数据
2025-05-10 12:27:06
1761

原创 Java 中 String 转 Integer 的方法与底层原理详解
考点解答parseInt和valueOf的区别?一个返回int,一个返回Integer,后者有装箱过程哪个方法更推荐?valueOf推荐用于对象封装,parseInt更轻量用于原始类型有缓存机制吗?✅ 有,范围是为什么 new Integer() 不推荐?每次都会创建新对象,浪费内存,不走缓存池。
2025-04-23 16:07:00
2961

原创 面向对象编程的四大特性详解:封装、继承、多态与抽象
抽象是指从一类事物中提取共性特征,隐藏实现细节,仅保留对外功能定义。fill:#333;color:#333;color:#333;fill:none;面向对象特性 OOP封装 Encapsulation继承 Inheritance多态 Polymorphism抽象 Abstraction隐藏实现细节通过方法对外访问数据子类复用父类功能代码更少更清晰同一接口多种实现父类引用指向子类对象定义共性行为使用 abstract/interface 实现。
2025-04-20 11:39:40
1086

原创 深入浅出 MVCC:MySQL 并发背后的多版本世界
项目内容目的解决高并发下的读写冲突,提高性能核心机制数据可见性通过版本链 + Read View 判断适用场景快照读,不加锁对应隔离级别。
2025-04-18 12:40:01
1324

原创 MySQL 事务隔离级别全解析:从脏读到幻读的防线之战
事务的(Isolation Level)是指:多个事务并发执行时,数据库为保证事务隔离所采取的措施强度。不同的隔离级别会影响系统的和。
2025-04-17 17:44:08
1384

原创 MySQL 锁机制全景图:分类、粒度与示例一图掌握
可以通过在数据表中使用版本号(Version)或时间戳(Timestamp)来实现,每次读取记录时,同时获取版本号或时间戳,更新时检查版本号或时间戳是否发生变化。如果检测到冲突(即版本号或时间戳与之前读取的不同),则拒绝更新。可以直接使用数据库的锁机制,如行锁或表锁,来锁定被访问的数据。✅ 作用:告诉系统“我要在某些行上加 S 锁/X 锁”,避免和表锁冲突。语句,它在读取数据时就加上了锁,直到当前事务提交或回滚后才释放。悲观锁假设冲突是常见的,因此在数据处理过程中,它会。,如果更新失败,说明有竞争,
2025-04-16 20:59:48
1277

原创 聚簇索引 vs 非聚簇索引:一文讲透核心原理与区别
聚簇索引(Clustered Index)是一种数据和索引“绑在一起”的结构聚簇索引的叶子节点存储的就是完整的行数据本身!所以在 InnoDB 中,主键索引(PRIMARY KEY)就是聚簇索引。非聚簇索引(Secondary Index)叶子节点并不直接存储数据行,而是存储主键值(row id)。也就是说:查找时你要先查二级索引 → 再通过主键回表去聚簇索引查真正数据。这个过程叫做回表查询。特性聚簇索引(主键)非聚簇索引(二级索引)是否保存整行数据✅ 是❌ 否(只存主键)是否按顺序排列。
2025-04-15 15:29:40
1077

原创 慢 SQL 定位与优化实践
慢 SQL 也就是执行时间较长的 SQL 语句。在实际的数据库开发和运维中,慢 SQL 是一个常见的问题,可能会导致数据库性能瓶颈,从而影响应用的响应速度和用户体验。通过分析执行计划,你可以了解 SQL 的执行步骤、索引是否被使用、是否有不必要的全表扫描等。大多数关系型数据库都提供了慢查询日志功能,通过它可以记录执行时间较长的 SQL 语句,帮助我们定位慢 SQL。)查看数据库的运行状态,进一步分析 SQL 执行时的负载情况,找出可能的瓶颈。通过以上步骤,你可以有效地定位和优化慢 SQL,提高数据库性能。
2025-04-14 13:31:36
1031

原创 Redis 分布式锁实现原理与实战全解析
实现方式原理优点缺点基础加锁简单易实现需要手动续期、防误删Lua 脚本解锁原子性校验安全释放需要脚本支持RedLock多节点投票机制容错高实现复杂,不推荐自研Redisson封装式实现简单、安全、功能全引入第三方依赖。
2025-04-13 11:30:36
955

原创 一文搞懂缓存穿透、缓存击穿、缓存雪崩(含真实场景与解决方案)
在高并发系统中,为了减轻数据库压力,我们通常会引入缓存(如 Redis),将热点数据提前放到内存中,加快访问速度。但是缓存并非万能,它在一些特殊场景下会失效或导致系统雪崩式崩溃,这时就要理解缓存三大问题:缓存穿透、缓存击穿、缓存雪崩。指的是客户端请求的 key 根本不存在于缓存和数据库中,每次请求都会绕过缓存打到数据库,造成数据库压力暴增。指的是一个热点 key 刚好过期了,在大量请求同时到达时,这个 key 不在缓存里,所有请求一起打到数据库,造成数据库短时间内被击穿。指的是。
2025-04-12 10:55:56
1063

原创 Spring Boot 自动配置与启动原理全解析
Spring Boot 的“自动配置”靠的是配合条件注解。启动流程的核心是,它完成了环境准备、Bean 加载、容器创建、Web 容器启动等步骤。灵活可扩展:你可以随时覆盖默认配置,也可以通过监听器、初始化器参与启动流程。
2025-04-10 20:39:55
2701
1

原创 Spring 框架的核心基础:IoC 和 AOP
IoC(Inversion of Control,控制反转),就是把对象创建和依赖关系的管理交给 Spring 容器,而不是由程序员手动去创建对象和管理依赖。IoC 以前是我们想要什么就自己创建什么,现在是我们需要什么容器就帮我们送来什么。IoC 是一种思想,DI 是实现 IoC 的具体方式,将一个对象所依赖的其他对象以参数的形式传入,由外部容器(如 Spring)来“注入”依赖,而不是对象自己创建。打个比方,你现在想吃炒菜和饭,点个外卖这时候就有人把炒好的菜和煮好的饭送到你手上。
2025-04-09 21:11:59
1453
1

原创 Class 文件和类加载机制
Java 源码(.java)经过javac 编译器编译生成的字节码文件(.class由 JVM 识别执行,包含类的完整结构信息(如字段、方法、常量池、访问权限等);是平台无关的中间代码。JVM 的操作对象是 Class 文件,JVM 把 Class 文件中描述类的数据结构加载到内存中,并对数据进行校验、解析和初始化,最终形成可以被 JVM 直接使用的类型,这个过程被称为类加载机制。其中最重要的三个概念就是:类加载器、类加载过程和类加载器的双亲委派模型。类加载器。
2025-04-09 14:08:39
1439

原创 synchronized 和 ReentrantLock 的区别
是关键字,底层由 JVM 直接实现,代码简洁,自动释放锁,适合简单同步逻辑。是类,功能更强大,支持中断、公平、定时获取锁、多条件变量等,但需要手动释放锁。从 JDK1.6 开始性能大幅优化,常规使用场景下不输。若需要更精细的控制同步逻辑或用于并发度很高的系统,更适合。
2025-04-06 01:39:24
966

原创 管理线程:线程池
通俗易懂的说:1. 默认拒绝策略;2. 让调用者自己执行;3. 淘汰最老的任务,重新提交新任务;4. 丢弃所有新来的任务。避免频繁创建和销毁线程带来的资源开销,特别适用于任务量大且执行时间短的场景。不推荐直接用 Executors 创建线程池,因为不够灵活、容易 OOM。核心线程会⼀直运行,而超出核心线程数的线程,会在 60 秒后回收。:当系统启动后,有 10 个任务提交到线程池。:如果此时再有 100 个任务提交到线程池。
2025-04-05 18:24:15
993

原创 HashMap 的底层结构以及线程安全性
当链表长度超过阈值(默认值为 8)且数组长度大于等于 64 时,链表会转换为红黑树,以提高查找效率。当多个键的哈希值映射到同一数组索引时,这些键值对会以链表的形式链接在该索引位置。会将新的键值对以链表的形式链接在该索引位置的后面。包含四个属性:键(key)、值(value)、哈希值(hash)和指向下一个节点的引用(next)。类型的数组,称为表(table)。中的键值对数量超过容量(数组长度)与负载因子(默认值为 0.75)的乘积时,扩容时,数组长度翻倍,并重新计算每个键值对在新数组中的位置。
2025-04-03 20:55:49
1215
原创 Java 面试杀手锏:Static 一文吃透!
static 关键字在 Java 中用于定义类级别的变量和方法,使其不依赖于对象实例。主要应用场景包括全局计数器、配置信息和工具类方法。静态变量在类加载时初始化,存储在方法区,所有对象共享同一份拷贝。静态方法可以直接通过类名调用,且只能访问静态变量和其他静态方法。使用 static 可以避免内存浪费、状态不同步和使用不便的问题。代码示例展示了如何定义和使用静态变量、方法及静态代码块,帮助理解其核心实现方式。
2025-05-19 11:36:05
427
原创 揭秘小绿锁:HTTPS如何守护你的网络隐私与数据安全
HTTPS是HTTP协议的安全升级版本,通过SSL/TLS协议为网络通信提供加密、身份验证和数据完整性校验,确保传输过程中的信息安全。相较于HTTP的明文传输,HTTPS有效防止了数据泄露、篡改和身份冒充等风险。其核心原理包括非对称加密用于密钥交换,对称加密用于数据传输,以及数字证书用于验证服务器身份。后端工程师需获取并配置数字证书,并强制使用HTTPS,以保障用户数据安全和系统可靠性。
2025-05-17 22:34:58
889
原创 后端面试必知:TCP vs. UDP,高速公路和邮局的区别
TCP 和 UDP 是互联网中两种主要的传输层协议,分别适用于不同的应用场景。TCP 是一种面向连接的、可靠的协议,适用于需要确保数据完整性和顺序的场景,如文件下载和网页浏览。它通过三次握手建立连接,使用序列号和确认应答机制确保数据可靠传输,并通过流量控制和拥塞控制优化网络性能。UDP 则是一种无连接的、不可靠的协议,适用于对实时性要求高、允许少量数据丢失的场景,如在线游戏和视频直播。UDP 不保证数据包的顺序和可靠性,但传输速度更快,延迟更低。
2025-05-17 14:51:40
1099
原创 【后端面试通关秘籍】大白话彻底搞懂 TCP 三次握手与四次挥手,让面试官对你刮目相看!
TCP 三次握手是建立可靠数据传输通道的关键步骤,广泛应用于浏览器访问网站、即时通讯、文件传输、远程操作和数据库连接等场景。其核心目的是确保通信双方具备收发数据的能力,并同步初始序列号,避免资源浪费和无效连接。三次握手过程包括客户端发送SYN报文、服务器回复SYN+ACK报文、客户端发送ACK报文,最终双方进入ESTABLISHED状态,开始数据传输。在编程中,开发者通过Socket API间接触发这一过程,无需直接处理底层报文。
2025-05-11 16:48:02
915
原创 解密多线程“僵局”:一文搞懂死锁检测的原理与Java实现,让你的应用不再“卡死”!
死锁检测是一种用于识别系统中已发生死锁的机制,确保系统能够恢复正常运行。死锁通常发生在多个线程或进程因争夺资源而相互等待,导致系统挂起或资源浪费。死锁检测的核心原理是通过资源分配图或等待图来判断是否存在环路,从而确定是否发生死锁。在Java中,可以通过ThreadMXBean接口进行死锁检测,使用findDeadlockedThreads()方法识别死锁线程,并获取详细信息以便采取相应措施。死锁检测虽然是一种事后补救手段,但在复杂系统中不可或缺,能够有效避免系统崩溃和资源浪费。
2025-05-10 16:25:01
907
原创 零基础也能秒懂!Java后端面试核心“事务隔离性”深度剖析与场景实战
事务 (Transaction)简单理解就是一系列数据库操作(比如增删改查)的集合,这些操作要么全部成功执行,要么全部失败回滚,是一个不可分割的工作单元。比如银行转账,A 转给 B 100元,这至少包含两个操作:A账户减100,B账户加100。这两个操作必须捆绑在一起,要么都成功,要么都失败(比如A账户钱扣了,但B账户没加上,这是绝对不允许的)。这就是事务的原子性 (Atomicity)。事务的隔离性 (Isolation)
2025-05-09 20:20:27
1028
原创 工作中如何正确使用 ThreadLocal(深度版)
/ ⭐避免内存泄漏不是锁,它是以空间换时间的线程隔离工具,正确使用能极大提升代码优雅度,但错误使用会带来严重问题。
2025-04-27 00:41:09
780
原创 如何保证线程安全(含典型手段与应用场景)
线程安全指的是:当多个线程同时访问同一块代码时,无论运行时环境采用怎样的调度方式或者这些线程将怎样交替执行代码的行为都能正确执行,且不会出现数据不一致、脏数据或异常崩溃。// 非线程安全示例count++;多线程同时调用,因为count++不是原子操作,可能导致最终结果不正确。
2025-04-26 21:15:29
298
原创 Java 线程的六种状态与完整生命周期详解
在 Java 中,线程状态(Thread State)是由枚举定义的,NEWstart()start()WAITINGnotify()join()也就是说,线程的生命周期可以分为五个主要阶段:新建、就绪、运行、阻塞和终止。线程在运行过程中会根据状态的变化在这些阶段之间切换。
2025-04-26 18:46:12
961
原创 揭开并发的面纱:零基础弄懂进程与线程的本质区别
进程和线程是操作系统进行任务管理和资源调度的核心概念。进程是资源分配的基本单位,拥有独立的内存空间和系统资源,类似于一个独立的公司。线程是调度的最小单位,属于进程内的执行流,共享进程的资源,类似于公司内的员工。线程的创建和切换开销较小,但需要处理并发访问共享资源的问题。在后端开发中,多线程模型常用于提升并发处理能力。例如,在Java中可以通过实现Runnable接口来创建线程,每个线程执行独立的任务,共享进程的资源,但拥有各自的栈、程序计数器和寄存器。理解进程和线程的差异有助于优化系统设计,提高资源利用效率
2025-04-25 16:15:05
798
原创 常见的 Spring Boot 注解汇总
问题建议思路包含了哪些注解?如何使用?创建类绑定配置,使用激活和的区别?前者自动加了,常用于 REST 接口返回 JSON注入 Bean 时@Autowired和@Resource有啥区别?前者按类型注入,后者默认按名称,建议构造方法注入提升可测试性。
2025-04-24 12:50:52
769
原创 彻底搞懂 Java 字符串三兄弟:String、StringBuilder 与 StringBuffer
类名是否可变线程安全性能适用场景String❌ 不可变✅ 安全(不可变特性)最慢少量字符串拼接、常量使用场景✅ 可变❌ 不安全最快单线程场景下大量字符串拼接✅ 可变✅ 安全中等多线程下的字符串操作场景推荐使用字符串常量、不变性要求✅ String单线程拼接字符串多线程拼接字符串✅ StringBuffer(或使用线程安全的构建方式)
2025-04-23 13:39:16
367
原创 为什么重写 equals() 方法时必须重写 hashCode() 方法?
一定记住:重写equals()就必须重写hashCode(),否则你就违反了 Java 的对象契约。推荐使用IDEA自动生成equals和hashCode方法,防止遗漏。利用简化写法,提高健壮性。
2025-04-22 21:29:25
346
原创 Java 中的 final 关键字详解:作用、场景与常见误区一网打尽!
使用位置作用是否可修改常见用途变量(基本类型)值不可变❌ 不可重新赋值常量、不可变参数变量(引用类型)引用不可变✅ 对象可改,引用不可变防止指针篡改方法不可被重写✅ 子类仍可继承模板方法、安全性类不可被继承✅ 类内方法可用不可扩展工具类、安全类方法参数形参只读❌ 不可在方法体内改提升代码规范。
2025-04-22 19:50:16
453
原创 掌握常见 HTTP 方法:GET、POST、PUT 到 CONNECT 全面梳理
今天面试还问了除了 get 和 post 方法还有其他请求方法吗,一个都不知道,这里记录下。
2025-04-21 18:42:34
1006
原创 Spring MVC 执行流程全解析:从请求到响应的七步走
Spring MVC 中,DispatcherServlet 是核心协调者,通过一系列策略接口(HandlerMapping、HandlerAdapter、ViewResolver 等)完成从请求分发到视图渲染的完整链路。
2025-04-21 16:19:18
1110
原创 抽象类是“模板”,接口是“契约”——深度对比 Java 两大抽象机制
项目抽象类(接口(interface定义目标提供一组具有共性行为的类的父类定义行为规范/能力约定,关注“能做什么”抽象程度部分抽象,可包含非抽象方法完全抽象(Java 8 之前),只包含方法签名设计哲学是一种“is-a”关系是一种“can-do”关系举例狗是动物(Dog is-a Animal)飞行能力(Flyable:能飞的)使用场景推荐使用存在共性功能和状态的类群抽象类(可提供基础实现)为多个类提供统一能力/功能扩展接口(能力型规范)需要支持多继承。
2025-04-20 14:56:35
393
原创 面向对象(OOP) vs 面向过程(POP):一文彻底理解编程思想的核心差异
概念面向过程(POP)面向对象(OOP)编程思想以过程(函数)为核心,强调“做什么、怎么做”以对象(类)为核心,通过对象交互完成任务,程序结构是类和对象组成的模块化结构,代码可以通过继承、组合、多态等方式复用,强调“谁来做、具有什么行为”核心关注点流程控制、功能拆解封装、继承、多态举个例子做饭:准备 → 切菜 → 烧水 → 下锅做饭:让厨师对象去调用“炒菜”、“煮饭”等方法例如:编年体是以时间推移为核心,纪传体是以主人公的故事为核心。graph LR。
2025-04-19 20:27:58
360
原创 自动装箱 & 拆箱全解析:语法糖背后的陷阱与技巧
考点示例或说明装箱/拆箱机制原理编译器生成.valueOf()和的调用Integer 缓存机制,面试常问==比较陷阱空指针拆箱问题拆箱 null 会抛异常,常用于判断包装类型安全性性能影响包装类频繁创建对象,集合中大量装箱会影响效率fill:#333;color:#333;color:#333;fill:none;类型映射自动装箱自动拆箱IntegerintLonglongDoubledoubleFloatfloatCharactercharBoolean。
2025-04-19 12:35:07
694
原创 MySQL 事务的四大特性(ACID)
原子性子性意味着事务中的所有操作要么全部完成,要么全部不完成,它是不可分割的单位。如果事务中的任何一个操作失败了,整个事务都会回滚到事务开始之前的状态,如同这些操作从未被执行过一样。一致性确保事务从一个一致的状态转换到另一个一致的状态。隔离性意味着并发执行的事务是彼此隔离的,一个事务的执行不会被其他事务干扰。就是事务之间是井水不犯河水的。隔离性主要是为了解决事务并发执行时可能出现的问题,如脏读、不可重复读、幻读等。
2025-04-17 11:43:41
809
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人