跳过正文

博客

2024

Redis 分布式锁笔记

·258 字·2 分钟
Redis 分布式锁踩坑记 # 分布式锁这个东西,面试必问,实际开发也经常用。我做课程项目的时候在这上面栽了好几个跟头,今天把踩过的坑总结一下。 最简单的实现:SETNX # 分布式锁的核心思路很简单:大家抢同一个 key,谁抢到谁执行。

MyBatis SQL 执行流程

·387 字·2 分钟
MyBatis 一条 SQL 的执行之旅 # 从 Mapper 接口说起 # 用 MyBatis 写代码,日常就是定义一个 Mapper 接口,写个 XML 或注解,然后调用方法就完事了。但你有没有想过,你调 userMapper.selectById(1) 的时候,MyBatis 背后到底干了啥?

Redis 五种数据结构

·270 字·2 分钟
Redis 五种数据结构,各有各的妙用 # Redis 谁都用过吧?但我发现很多人(包括之前的我)用 Redis 就只会 SET 和 GET,把它当个 key-value 缓存使。其实 Redis 有五种基本数据结构,每种都有自己的应用场景,选对了效率翻倍,选错了可能还不如不用。 String——最简单但别小看它 # String 是最基础的数据类型。一个 key 对应一个 value,value 最大 512MB。

Java Stream API 使用笔记

·230 字·2 分钟
Stream API 用起来真香,但别乱用 # 自从学了 Stream API,写 Java 的风格变了不少。以前过滤加转换要写十几行 for 循环,现在一行链式搞定,确实香。 但用了一段时间也踩了不少坑,特别是并行流和性能方面,今天来聊聊。 基本操作过一遍 # Stream 操作分两种:中间操作(返回新 Stream,可以链式调用)和终端操作(触发计算,产出结果)。

2023

Java 反射机制与性能

·269 字·2 分钟
反射慢?慢多少你测过吗 # “反射很慢,尽量别用。“这话你肯定听过。但到底慢多少?慢在哪?大部分人说不清楚,我之前也说不清楚,干脆自己测了一下。 怎么获取 Class 对象 # 反射的入口是 Class 对象,三种方式:

Spring Boot 自动配置原理

·278 字·2 分钟
Spring Boot 自动配置,看完你就不慌了 # 用 Spring Boot 写项目的时候,你有没有想过:我就加了个 spring-boot-starter-web 依赖,Tomcat 怎么就自己跑起来了?数据源我就配了个 URL,连接池怎么就自动用上 HikariCP 了? 这背后全是自动配置在搞事情。 @SpringBootApplication 背后藏了什么 # 启动类上那个 @SpringBootApplication,其实是个组合注解:

Java 泛型常见问题

·301 字·2 分钟
Java 泛型这几个坑你肯定踩过 # Java 泛型这东西,看着简单用着顺手,直到踩坑才发现自己根本没搞懂。上周写作业一个泛型编译错误折腾了我一个多小时,气得把泛型重新学了一遍。 类型擦除到底擦了啥 # Java 的泛型是假泛型。编译之后泛型信息就没了,全变成 Object(或上界类型),这叫类型擦除。

Spring AOP 原理

·291 字·2 分钟
AOP 这东西,说难不难说简单不简单 # AOP,面向切面编程。第一次听到这个词的时候我满脸问号——什么切面?切什么? 后来我换了个理解方式就通了:你有一堆业务方法,想在每个方法执行前后都打个日志,怎么办?一个个方法里加 log.info()?那要是有 200 个方法呢?改到吐。AOP 就是帮你把这种"横切"的逻辑抽出来,统一处理。 什么是 AOP,为什么需要它 # OOP 的核心是纵向的继承和封装,但有些逻辑是横向的——日志、事务、权限校验,跟具体业务没关系,但到处都要用。如果每个方法都写一遍,代码重复不说,后续改起来也要命。

JVM 垃圾回收机制

·167 字·1 分钟
JVM 垃圾回收看这篇就够了 # JVM 垃圾回收是面试八股文里的重头戏,也是我觉得最难啃的一块。概念多、算法多、收集器也多,第一次看的时候感觉脑子不够用。这篇把我学到的整理一下,尽量讲人话。 堆内存长什么样 # JVM 的堆分两大块:新生代(Young Generation)和老年代(Old Generation)。