From 0a783809377043d05610d1c8e40f06df6f4ebe71 Mon Sep 17 00:00:00 2001 From: taoking <980512523@qq.com> Date: Sun, 31 Aug 2025 00:24:29 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 10 + .idea/AugmentWebviewStateStore.xml | 10 + .idea/JavaHome.iml | 9 + .idea/inspectionProfiles/Project_Default.xml | 5 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/vcs.xml | 7 + ...1-\346\226\260\347\211\271\346\200\247.md" | 294 +++++++ .../README.md" | 71 ++ ...4\347\240\201\345\233\276\347\211\207.png" | Bin 8943 -> 0 bytes ...7\345\244\251\347\232\204\351\243\216.jpg" | Bin 316886 -> 0 bytes .../\350\265\236\350\265\217\347\240\201.jpg" | Bin 73206 -> 0 bytes ...70\350\277\234\350\256\260\345\276\227.md" | 49 -- ...10\345\222\214\347\255\226\347\225\245.md" | 809 ++++++++++++++++++ 14 files changed, 1229 insertions(+), 49 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/AugmentWebviewStateStore.xml create mode 100644 .idea/JavaHome.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 "PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/PHP-8.1-\346\226\260\347\211\271\346\200\247.md" create mode 100644 "PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/README.md" delete mode 100644 "image/\345\205\254\344\274\227\345\217\267\344\272\214\347\273\264\347\240\201\345\233\276\347\211\207.png" delete mode 100644 "image/\345\244\217\345\244\251\347\232\204\351\243\216.jpg" delete mode 100644 "image/\350\265\236\350\265\217\347\240\201.jpg" delete mode 100644 "\345\216\237\345\210\233\350\257\227\351\233\206/\345\244\217\345\244\251\347\232\204\351\243\216\346\210\221\346\260\270\350\277\234\350\256\260\345\276\227.md" create mode 100644 "\347\274\223\345\255\230Redis\346\200\273\347\273\223/\347\274\223\345\255\230\344\270\200\350\207\264\346\200\247\346\226\271\346\241\210\345\222\214\347\255\226\347\225\245.md" diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..7d05e99 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# 依赖于环境的 Maven 主目录路径 +/mavenHomeManager.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml new file mode 100644 index 0000000..cea712d --- /dev/null +++ b/.idea/AugmentWebviewStateStore.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/JavaHome.iml b/.idea/JavaHome.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/JavaHome.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..8d66637 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..31e1ebc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f8fcfea --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..8306744 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git "a/PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/PHP-8.1-\346\226\260\347\211\271\346\200\247.md" "b/PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/PHP-8.1-\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..5def176 --- /dev/null +++ "b/PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/PHP-8.1-\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,294 @@ +# PHP 8.1 新特性详解 + +PHP 8.1 于2021年11月25日发布,是PHP语言的一个重大更新,引入了许多令人兴奋的新特性。 + +## 🎯 核心新特性 + +### 1. 枚举 (Enums) + +PHP 8.1引入了原生枚举支持,提供了类型安全的常量集合。 + +```php +// 纯枚举 +enum Status +{ + case PENDING; + case RUNNING; + case COMPLETED; +} + +// 支持值的枚举 +enum StatusCode: int +{ + case PENDING = 1; + case RUNNING = 2; + case COMPLETED = 3; + + public function label(): string + { + return match($this) { + self::PENDING => '待处理', + self::RUNNING => '运行中', + self::COMPLETED => '已完成', + }; + } +} + +// 使用示例 +function processTask(Status $status): void +{ + match($status) { + Status::PENDING => echo "任务待处理", + Status::RUNNING => echo "任务运行中", + Status::COMPLETED => echo "任务已完成", + }; +} +``` + +### 2. 纤程 (Fibers) + +纤程提供了轻量级的协程支持,允许在任意点暂停和恢复执行。 + +```php +$fiber = new Fiber(function (): void { + $value = Fiber::suspend('fiber'); + echo "Value used to resume fiber: ", $value, PHP_EOL; +}); + +$value = $fiber->start(); +echo "Value from fiber suspending: ", $value, PHP_EOL; + +$fiber->resume('test'); + +// 实际应用示例 +function fetchData($url) { + $fiber = new Fiber(function() use ($url) { + $data = Fiber::suspend($url); + return processData($data); + }); + + $suspendedUrl = $fiber->start(); + $response = httpRequest($suspendedUrl); + return $fiber->resume($response); +} +``` + +### 3. 只读属性 (Readonly Properties) + +只读属性只能在声明时或构造函数中初始化一次。 + +```php +class User +{ + public readonly string $id; + public readonly string $name; + + public function __construct(string $id, string $name) + { + $this->id = $id; + $this->name = $name; + } +} + +$user = new User('123', 'John'); +echo $user->name; // 可以读取 +// $user->name = 'Jane'; // 错误:不能修改只读属性 +``` + +### 4. 一等可调用语法 (First-class Callable Syntax) + +新的语法使得创建可调用对象更加简洁。 + +```php +// 旧语法 +$fn = 'strlen'; +$fn = Closure::fromCallable('strlen'); + +// 新语法 +$fn = strlen(...); +$fn = $obj->method(...); +$fn = $obj::staticMethod(...); + +// 使用示例 +$numbers = [1, 2, 3, 4, 5]; +$strings = array_map(strval(...), $numbers); + +class Calculator +{ + public function add($a, $b) { return $a + $b; } +} + +$calc = new Calculator(); +$addFunction = $calc->add(...); +echo $addFunction(5, 3); // 输出: 8 +``` + +### 5. 交集类型 (Intersection Types) + +允许指定一个值必须同时满足多个类型约束。 + +```php +interface Loggable +{ + public function log(): void; +} + +interface Cacheable +{ + public function cache(): void; +} + +class Service implements Loggable, Cacheable +{ + public function log(): void { /* ... */ } + public function cache(): void { /* ... */ } +} + +// 交集类型 +function process(Loggable&Cacheable $service): void +{ + $service->log(); + $service->cache(); +} + +process(new Service()); // 正确 +``` + +### 6. never 返回类型 + +表示函数永远不会正常返回。 + +```php +function redirect(string $url): never +{ + header('Location: ' . $url); + exit(); +} + +function throwException(): never +{ + throw new Exception('Something went wrong'); +} +``` + +## 🔧 其他重要改进 + +### 新的数组函数 + +```php +// array_is_list() - 检查数组是否为列表 +$list = [1, 2, 3]; +$map = ['a' => 1, 'b' => 2]; + +var_dump(array_is_list($list)); // true +var_dump(array_is_list($map)); // false +``` + +### 新的字符串函数 + +```php +// str_contains() 的补充函数 +str_starts_with('Hello World', 'Hello'); // true +str_ends_with('Hello World', 'World'); // true +``` + +### 新的文件系统函数 + +```php +// fsync() 和 fdatasync() +$file = fopen('data.txt', 'w'); +fwrite($file, 'Hello World'); +fsync($file); // 强制写入磁盘 +fclose($file); +``` + +## 📈 性能改进 + +- **JIT编译器优化**: 改进了即时编译器的性能 +- **继承缓存**: 减少了类继承的开销 +- **更快的类解析**: 优化了类和函数的解析速度 +- **内存使用优化**: 减少了内存占用 + +## ⚠️ 向后不兼容的变更 + +### 1. 资源到对象的迁移 + +许多资源类型已转换为对象: + +```php +// PHP 8.0 及之前 +$stream = fopen('file.txt', 'r'); +var_dump(is_resource($stream)); // true + +// PHP 8.1 +$stream = fopen('file.txt', 'r'); +var_dump($stream instanceof \GdImage); // 对于GD资源 +``` + +### 2. 默认错误报告级别变更 + +```php +// PHP 8.1 默认包含 E_ALL +error_reporting(E_ALL); // 新的默认值 +``` + +## 🚀 升级建议 + +1. **测试枚举兼容性**: 确保现有代码不与新的enum关键字冲突 +2. **检查只读属性**: 评估在现有类中使用只读属性的机会 +3. **性能测试**: 利用新的性能改进进行基准测试 +4. **代码审查**: 使用新的语法特性改进代码质量 + +## 📚 实际应用示例 + +### 状态机实现 + +```php +enum OrderStatus: string +{ + case PENDING = 'pending'; + case CONFIRMED = 'confirmed'; + case SHIPPED = 'shipped'; + case DELIVERED = 'delivered'; + case CANCELLED = 'cancelled'; + + public function canTransitionTo(self $status): bool + { + return match([$this, $status]) { + [self::PENDING, self::CONFIRMED] => true, + [self::PENDING, self::CANCELLED] => true, + [self::CONFIRMED, self::SHIPPED] => true, + [self::SHIPPED, self::DELIVERED] => true, + default => false, + }; + } +} +``` + +### 不可变数据对象 + +```php +class Point +{ + public readonly float $x; + public readonly float $y; + + public function __construct(float $x, float $y) + { + $this->x = $x; + $this->y = $y; + } + + public function distance(Point $other): float + { + return sqrt( + pow($this->x - $other->x, 2) + + pow($this->y - $other->y, 2) + ); + } +} +``` + +--- + +*PHP 8.1 为现代PHP开发带来了强大的新工具,特别是枚举和纤程为构建更安全、更高效的应用程序提供了基础。* diff --git "a/PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/README.md" "b/PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/README.md" new file mode 100644 index 0000000..573284e --- /dev/null +++ "b/PHP\347\211\210\346\234\254\346\233\264\346\226\260\346\200\273\347\273\223/README.md" @@ -0,0 +1,71 @@ +# PHP 8.1-8.4 版本更新总结 + +本目录整理了PHP 8.1到8.4版本的主要更新内容,包括新特性、改进和重要变更。 + +## 目录结构 + +- [PHP 8.1 新特性](./PHP-8.1-新特性.md) - 枚举、纤程、只读属性等 +- [PHP 8.2 新特性](./PHP-8.2-新特性.md) - 只读类、DNF类型等 +- [PHP 8.3 新特性](./PHP-8.3-新特性.md) - 类型化类常量、json_validate等 +- [PHP 8.4 新特性](./PHP-8.4-新特性.md) - 属性钩子、非对称可见性等 +- [版本对比总结](./版本对比总结.md) - 各版本特性对比表 + +## 版本发布时间线 + +| 版本 | 发布日期 | 支持状态 | +|------|----------|----------| +| PHP 8.1 | 2021-11-25 | 安全修复支持至2024-11-25 | +| PHP 8.2 | 2022-12-08 | 安全修复支持至2025-12-08 | +| PHP 8.3 | 2023-11-23 | 活跃支持至2025-11-23 | +| PHP 8.4 | 2024-11-21 | 活跃支持至2026-11-21 | + +## 主要特性概览 + +### PHP 8.1 核心特性 +- **枚举 (Enums)** - 原生枚举类型支持 +- **纤程 (Fibers)** - 轻量级协程支持 +- **只读属性 (Readonly Properties)** - 不可变属性 +- **一等可调用语法** - 简化回调函数语法 +- **交集类型** - 多类型约束 + +### PHP 8.2 核心特性 +- **只读类 (Readonly Classes)** - 整个类不可变 +- **DNF类型** - 析取范式类型 +- **敏感参数标记** - 隐藏敏感信息 +- **新的随机数扩展** - 更好的随机数生成 + +### PHP 8.3 核心特性 +- **类型化类常量** - 类常量类型声明 +- **json_validate()函数** - JSON验证函数 +- **深度克隆只读属性** - 只读属性的深度复制 +- **#[Override]属性** - 方法重写标记 + +### PHP 8.4 核心特性 +- **属性钩子 (Property Hooks)** - 属性访问器 +- **非对称可见性** - 不同的读写权限 +- **懒加载对象** - 延迟初始化对象 +- **#[Deprecated]属性** - 弃用标记 + +## 升级建议 + +1. **从PHP 8.1升级到8.2**: 主要关注只读类和DNF类型的使用 +2. **从PHP 8.2升级到8.3**: 注意类型化类常量的语法变化 +3. **从PHP 8.3升级到8.4**: 重点关注属性钩子和非对称可见性 + +## 性能改进 + +每个版本都包含了显著的性能改进: +- **PHP 8.1**: JIT编译器优化,性能提升5-10% +- **PHP 8.2**: 内存使用优化,启动时间减少 +- **PHP 8.3**: 类加载优化,运行时性能提升 +- **PHP 8.4**: 属性访问优化,整体性能提升8-15% + +## 兼容性注意事项 + +- 每个新版本都可能包含向后不兼容的变更 +- 建议在升级前进行充分测试 +- 查看各版本的迁移指南了解具体变更 + +--- + +*最后更新: 2025-01-25* diff --git "a/image/\345\205\254\344\274\227\345\217\267\344\272\214\347\273\264\347\240\201\345\233\276\347\211\207.png" "b/image/\345\205\254\344\274\227\345\217\267\344\272\214\347\273\264\347\240\201\345\233\276\347\211\207.png" deleted file mode 100644 index 9a37ae78795f2443a43fc3e5904e7d9fe31e491c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8943 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 diff --git "a/image/\345\244\217\345\244\251\347\232\204\351\243\216.jpg" "b/image/\345\244\217\345\244\251\347\232\204\351\243\216.jpg" deleted file mode 100644 index dcb4c3cd6ee10cf18e6db970ae1663c0daea70f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316886 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%0A0FeNB;TZ9SqXqe3|Y zt7%$Bd!$1}mV1HR(B?Q0;CLZ-;gtJ*7|NHrqr-k7=2`@RFw_9yeaS zA4}l*OUaE(_b>k0fajSW90$9KS@wF#aa44!YlXDY@TsflBAR;wDXKx93eNUap=j6B z%pDCL4ngp=jMG%k43PV+8QRP^&{)b_(btP>Vq2Eyf~MOveS-2uf&T!q(G;nR+)Y`^ zsw$|&H%H3$PtA$j*#I?wa)2Bh2p{Bt7}5#=U^F?(0OOI^AV&+}9yve_XaJu70Av96 z4{k*!1KKXFr~#V*$8-T-s74*rwL*z^rbzoC^flT%Bb&}UtWA)y&xI`67vXrSD+wdM z4HsJ&kPLFNvud$Z>3#mukD?UD;F(HIJsJyDDj00s z=W3qL$mF%6!(;`ZShOQfR#n!x2K&Edq!3w@Mpooj&I929iKJNQoLWO7(+eXY*g-5{ zaV#LIs&**Bc5^}*yioQUKPxtML8Es=DV43Y$vrwWX(M7Ap=&c478>#0Cd`^(NNn=5 zp307dIF0lvXGW{5EkFZZ%G#+IO}2-J)Pnf5893;>B^GWAqrIH*)1xz7&*AQH?}R>% z%rA6`x_Hg;i&#lEZ8nclqhO0lY-FyLsI$e)`Aj%t1RtX3Q6^HVLwak2H7{+CbWg9@ zclea0UxPm(Hw6CxDDq8q;pUegc6*gY?wsG@>!1Gs_~d@{w8i_IIeee&Uy~oI67H?2 zdF8|sZ{RO;3%qHw=Dehqc_se<-3i5EXmb;F@PGuqkCXu|kYIv<4)25k1>|I!KngPp zKnQ!mB;P0kw2mU`$^cN2#Nd`wtB6i?1$4} z4aOG&lWy6}w(Xf3m%K_I!%{SdH25H{>}heQ(=~BYPA}Q-bXu0`^s!Fd2^tU3ubj(` z~cStI3XZT3ggOJ#QtR`8!_zJ-Rl zrxqzq4KsmpcO?K=ZO|nlkk<+}genZS!gewPYXn!yVitJ#Kv32{6qO01oJHhdqKRW5 zhzoHa_-%6LmiVS{`FW{uOn7c+9_cJn^m#5z*=#U!1ut4KOK9eDZ?eQ}+CMb^7uxOwhF;=sZ(8RbG919DYOL{2^-Ldx5UP5r2S`&?$8hO4}(QP|K zGfoLb09T`fDoTtcA7FJ&6MC0Sn@aFK?Y1BAxNy6sr7U_|?FWsY=w?|LuKxgo6L~GMZ{|zw2I=?HD^p&qo$Y#1KD%Q9gu14y7C{#b(coPd0@#kX{SSJ zGP!^YuvKy=fIg0JQ&K014usbVxeJJs4>&69ngi3WaGGPGjfVdKoBAhZq*{hJm~85_ ztp5P^jB!8EAbLfI$q0;=NhJ0E0MUf8qwZ5-{1~%JWPOoe2r!hlLRA?Y4G=~XA*9i1 zlGwpmwMRUn(-_BwJS5ejD_b-fwpLLh%I9{Ou@2BU0^!FgtiG5N4aNw6BjqV=n!?j6 zJ6Pt(cK(o7s~V+ebY)v$NveFH1KBkMi{>mjQz=O8$x!(dxfC3ZyrCd(WL{Gy&IZyc zY&ITJWyOTt;U;Mv=xaPEX7Knox>i~WQ60(z`q5!hf@Tanw zS?6o6@}(N8dM@c5Z9BPCbL3ml?ezXo`!nNc(2SQy%H9sq%PlgVv#@s-uFdg$p;`tx z(&G70lWe@rD4vALvOWmH(oaW}qihFABZJ%C)=x^xQROX_bQ+zy@Y}!O%a5a1PmbzO z_+@8}!~CNLD=l*6v(wWzA&=1MI=7KdF}D8zaJnHHiRa{e^Fe-3HPj9D2~VA;`UULa z{gFH$GyeeClKwyNAesw9luVKg^GE@Hu)4BP0~;W}gaF;+$^Zw*PjmpXNhYu8fFO$; zS^!aw{{YY+4iJ!XKIj6>5dl^!;Q(EYxCC&38)C44D{8^oC1>hmttOLB#MPtI^iHH7 z0|2JvM^JA{=#y%J9kBTw$FRTs6j;)wEBFP9>H^E+M{ff7pS@`jy;4?l_5T; z!tREs+O&Fq!sodwz$N=KiIQq_TXTSDTKevM!mvypxH8#UPekf%NaH?C^3p zWaIKg(S4vjrLN(?g1)~W9FcK-G;+OddOm5?^e0KLngTG=NXKR7LAt4SwEqCX_5L`*Y+LIleUXmwb?u+vpz3!|eZX=oyA-MH`vb)H$$E-|-e-kp_#GFLVzl_ppWuIr

j)Z^}~J z7!LVKjR|l{hhUb9F0Z1^jI$FqM$um5lCCO{h7ow87K~OPw>Q~h*2@L+{T$$m*cDiTM{*~nO#q_1zfAD$7N4Fp>Q)jZJVm8x~*`?^Y zr(!xGlN$d3?#%w7AaMcE`~Lvrna?BoqUdfq zvn9;Rq|Rx>V#uXP#i{_RGiL%uZjeuXjP+fGJWz2hX>}48&^8uRib~4W8~SJ5V3Sy? zToY8tO){pk8+Hy4g{C=Cyjn|UM2*-;U5k4+O;9$dc8S~+muQ{Hq4Gy=!UD;~rA1n2 zUQiZDHc&L}gwvcUW|4c)P3I{x;x(LwEZzq1N(X4W<#FWw+BcU+ppEp{$*Yb5|ki?tvLYc`SXKo8t001v5-a)1TWSRnWAm7MhZYY7b@*gUTqGjNw@L|SO`zx+Vfdi_U3qZwo|8C_rE zcl?6&6z(=@1*1!(>4u+4)AWZDKBkoa0EX!2?LjPc#kbopE2y5jSd4MCoq)4l*0P5L zk%lL3&oR_=!MofqE6m86x;?xTx<*@NF|w(1OMRVkAsp zfbm!-IbAS}X1KXg%{=Zh=A(8qQTSEy={;t=9lxj(Ye{&`N0o{nsYX-c*JdkvbKb(> zMT1p&T$Fb|A}DsNp=&gevCn24+Z42x8OE%bd3fh^`WG7uA_3TO<#~B!%5U&_{#H&| z8eJjGWszlc_}EiwZJZe=ONjQ2fC#?p)Jb|dp2n~T5IGlVx=563=o(tXON%qMZyh5> zH3I)_h7*nQE1B_)JfD%2Vp@oTi zF?6Ml$%FKkj>+Tdg(5cstX4@FB?xvbw7Agvl9K@09_c`@YjRX2Y;DpUK((zQ5c8V5 zN=}A=J{!-KG%yQ&!J`$G4SGcjdD;kR`>dy>p`yFVy!TvFZp#B;JYi*Y##+$4v=)=X z>%}D2jHHcNWB`J@@XnpH87nLGoe=6>BT)-m@2&Bk;lXufYIvNht(W3u`Wd4u*H8F9 zZTh1eiwE~y>MD=1_95-g;1R^tKSahiI1dVFB|8^^#Rn@)Tu!L(Hs7+lCB(5DQIUS3Z^#8zlHvsJiHxJE zk=VfB{{SUcOH9F@jHbBxREOwQCKX_qfllbn;!H#0Ey!9aCUVacj?krM2XKLOS<{lw zaKTy5x*~F|BJ*`pIka%Fc-5GxG6tc=)=FFwS|2l|h)B}p;_1=8IlhVn7Md%gv!zPT zZIqcwlUYcjNG6i9nIu&q44jgJwh*wBW{ET#LA5N>J%l+(wb=OZZ{=prta>-}4;w6F zy5yFbO&Tni40l+zCmReM{H(6nx*FC{;Zjs)zBib@DRD|7@c5QGa z6lZp*vm5rvD}tJI?7~XXea8Zp?o8%Df<={-n;W4|W85x?3ogc_klkdBgGC%msLE}f-&^t!twx%*r8CqLOdYweX6l1WM?vtf=F(8EV1Xp%_D$;hp(kbki? zMz3_y3-g>I?my(y9Dmo3@XsNwa2lsq8$$JPf6|HK{-gf@?92Rr;70OCYFiv65#PE1 zfgPNVPy<;VQNjRVXccsTI8f%00~$Nh0BEYn2m%Y+_dp9WQNchEW;`1EpaD98XaR22 zS@=K#X2Jlgt0l}5H08NPUtrHu_+P0FLmCUX!OHNwoGug5QFWq^SqEA8u67<==-57( zT@5(nNgdE#9-~hIf8sctTp1JPaps1`j1T(%01DDDwv&1}^Ul>X+dZw7g7`cY-6W;i zf_1cGYjlm0I&c7sTvNoF+34cR)6wNMaQad?t)e`I<>ZArJ&aSeY@+DTb%h(*URb+P zKSin?ffr2FYK2D=oYxvAl`9j=7;UrLbnjWZC|jwqD_R=wpOy3eRzIhes?*v$Nu;Fs z^jchmgwsw*^dkP5{{YIp-_rAIfrdrwZn7gjk?bF;t$VrdSX*7Knc|X+(|sOA^UGus z>$*8y8}83_LOP&5NeSeSx}=&bj7WTMcsr<%lADWtjX17_v#0v9hI?9F#hz5CChE+x z`B22R#OkyIODJpEkh7jejq#C`eC%>o^mIKoIUL5c(dLOF(H!uTq(r>zXpL7zbU19T z4)7dR%OoQB$TkdOd zwn*()1y;*mL|fAl9;>KH6Ma^Udq5H#1)QbDHs3~zBv$ogxbAT$HoSyj-q_|eZ3Bhw z;Exz2am}{LECkr+;ccTmmNfA>#+!dtmQ0E&*-=)_XknHdo)0UD&C7IbS_c5uP#~E1 z1IlT%40~i89#*PL*)0Ss&J`_#IM*P6p1lYXNG8REn`odMEg=IDscXtmbiwo^Qy|m0 zxSAZ2v|G|8>tn$VXxp0@r2hZ|{DeS_zI>@;Lt~F)Gy0B7)+(07-IKPgpmr#<^0T4X z1SzqhZXQo68A7CR0QV~ywGpDZvToNCO}i}uO?;^01N720vW>#+Z;3i4MwBo2V6Lb( zyE2x`khpTaEE4u%G)Kk3>2z676f(TYdv z{);=a)c6y7TpSb^N~p5gL1+ZzDo)ItUDytF-;k{hDl6)Nb3?9(n(DF& zCoVl3=+bm`;d-a$1c77a10}2uzaJGyWs*n?zD#MWi>#Ox#qUdU&WO|C0BmC_*fp2 zqKxgQ610y;E=5cR-zlC;aME9k?NayX97{*BVJ;yzh?9sNB zBEwm=!iExS;Er0Op5o`U0-}X!AjYCLIjwVs;%E;k$vU%_CSE!;T3+_;s!?s6>S^q? z29?fu=807pJJ}P=k~QJ!j3fu(5#e@28nliX`7Lx{bxjlW`iWwFns9JFLagznN2B9S zPAQ_^k|xH=0*Mw>VT~eY>|UmCP1{&6KI=|WN$9+AwQQ->#@>P&GrLgIKFDuN`8379 zBK{HM^@KN8TGN2gy>B1>lusM=AO8Sp{{VqO!?Croz!Ohv2oTm#t-$~{cpP$o7WZEV z0RTXF@_-~rm>gvS&TSw8(`4lUEX)QF06Jd77(fbi{Dc4wm}mDu0qar#gEjJOAO`e( zWAvR(tZrL2;f}{|D;&7g(!WDW+C5WS8$TKA8zV03(m&yL2tTlL<#p`z8g--6^(_pM z^gTYRAbnOy$(?-dynolq)>!WquKPU9j^8gwql2kOJV1uIrvQ%%7nc|7WyURt)W6hc z00gBcBd->jfvwX~Bn8EiKF?1S^{_NuEt-i3=A~>g5kT>3AqY2l9~3;^Pt#v+*|7&j z>9Oh^rx9XP(svZ*wZE%Ll#&iO!#Fg}Xt@p64Ui{XKii+Q_!8 zl27NfE}S+^Gn&`7iLYoW{aiefaiN{6j%Ps}khPLAyaSV8RI*}nj9gWuS0;x=>d7oG z)9OPcaLXSaev5d;w;nR4Pa<`C&3M!nw?rI3$ZP04C6gw8b;Pg8jYLsP_3S6(Ke~O3KaKk7C&W_oox=RNPg*B2bBtca!9Ap9ZyLvzf0(8$PaVc zEyoQ6@>hS4yokdpxH9&arw*5-iVsxE@IB8Wto#oPr^tej+`XCNdZsar+;<)a0dht* z?VCMlW0saAEby~zqzCj-V-(^u-9u#|53}&GmdX(8?p6-{mMEK9v4BcdVPLVx)v?0f zI#h^zH1zNG@~M)|JvsfCcZ&TZ8KWQZj+gTtA+t1FwDMR!8gN$mlcdh?((-Z7!Sy6~ zS2Jk;0IV)*KA}4mx0=l@D$B7?_P871rR=4&Esi2)*96k5p}vdG(T5H!bA?~Qg3CrU zx@T_2MfX|ck=&%8Wyi=a+f-MweqwNa4E8`0*MLYJ&nbv7;aDRm0x}wLgaD`K9logm zt~e+HMovx;0fE^7cEWpIAOmR4iXU{qdmD_{Km|>q!T|IARkf;@wr}?f8TNV}JNprw z$u~b~Iqa~K_Ig;SdSW#Kk0^-pN7$k5R?L=(ywXh#GR~Gj*AB$2ryEB`Ia4$mXo_5{ z?L~%3jQ3fzXj9ZQiCtN>v^I@4)`bgHHDls50TuL6$z_H=Zz?E}FMX53(GbyAVP00K z&FP8=8aN*49g=~9;2bG6rbLpGpcv2tfaO)Q%krU1M-qg2mT>q$Aec!tl$h+DOSZDG zh%K5YLR!-1+P2bk&7ho>pu-#uICe_cqMB)JuJN_U3f9rhEienQg;Y-}IkGqkMIouQ zSY-I3Le0SJ#pJY-WsJN7{T5v_)5noXSs}Tktm%z0@G{;3=F~}-(V-|2!(e2E&mFT^ zZP8JnlY^DD(bHzPPh*@2Ij-e$WvkH=X&SmvS(kQLuI$2XHKDUlVCKTnyE92Gl|Z=x z28HDa&Tf^Oah8azkyNyC(aQ3u_RNh>QTLX{2sc;ZE;X~4Czji&fuM}Ps>ka(!<+?^ z!BX0Bqm9Y8XSjDxnXiQZ04CvoAxxm-S~FQ+rfTXS8hBb_84e3viN-0TE^be3zR*n) zD+{k0Zmh~rdMR~%D|I?&N(H_lpOCc49&m5kI=npGC&Bd0$`Hb2aJv)-g@UN;@BPxG zXG}d=L&kfoTeoQIkJ_n;>cq39=-Mz$h1mKO+ocpg9VePh@mj}`sIz%!UcZmLXz_nj zRpiU~LIdl9w>;q6C!SCPM5JcYSfM)r>@<0ITamoN$kb}wq68`{{0UQ2M2B+cpy={E5n<5qlgZ}^%oCo&afLf!{ z^+z2);yCpqiCEWP&I0pg@OrUUw0liIP>V!0nq7N{dnI!Lc&55B`hTMDj;!%5D@-UP zkJfRB0LL6x3(ClsH(eX!(l3)6Te;)`^0nm^8*fKKzeR0RL|Q|s4D}igDP@{zVtJyi z7xk2TW=B+v>vd2zDI4j&oB%oUyss-GoYGs?zsZ!R$lHTh?Jk@)NSN8$Hj-VF^1ET> zKN}i^qLh-WInuqO4f9R@(UM)|{?Z)Ra95G_+moByW~ox5o2HSc)B&Kz?Z5>O?{xi? zo9!FXxvyX?$TXg;v``wt&>KUo%@^0`oGijeMok5WK_yOh&2ADh)mIL zkDsCd^*{>0?DADgGhX!n0Q5RMESzV>^v^akka8C{X!UZzPA)Imq0>5P)HU)4G)Vg+ zIRfcUENdhCUe5=}!r>;7)BYZwSN{MM2RFOBr7sS5XD=Ci371Q$Y%Pp7Mn=zQaTj4r z$2zZqT5Hg_Mxp~FWrRr+O*qzV5sagDtq-omN3Paw5a^>GiFvrCzxoJ-q?Z`=@D1LP zI+^B{7ezt`HzXX_(5jTVDq0s^gx<40)!)buYi5^DWxmMl zvCQ>B9?huPb!!Ml+OtOJac*obhZWj0v2Fm2gq<;=MWh>TteR`0k=!E0Lz`nXo2CNY zA8_hXUks$c-77ph?xSdWU_ViKEuyoO-BTJuBAAJRIHzMggkg(vOj2}>NJwD!A;7U9mS@E;~t4tr29U*uf%&lz|C;EG%SN5>8e{ z5av1DCevV=0Kg7ODSaf$v2KJ86g)|EG{u-V1spyAuJB@Yau9&GrgNwar|gqb2{!Py z#gW12&QY{GTGq|ewNbo#Ukk>5i_?_X(|^I9C&w&h@X_+aEsUONa&*tP;#V(xa_*~X z=jB>;v}sAI8rVy~ak^0NvRu;AEPhlq*x)A2zNMo^Hn1>#DE$_R=;W2zo2Z4ROKU*0 z;bW7#J2B1GGaSCYi`+f{fb8&mAOdMMXaM~}+zKcVPLSjTz+K<^BnLEKHi3lDN&28e z18i`Z2e*p|0NWV?s_=jq)`8o)05C5I5rNi#ZnfC0&1qRpZ13^^0A&~wVfGehYV^*0 zf#7)xQlp|$QWO(2qpvA33~PxZ`y|a%vqCw+XbyJ+h0Q3t(c1|osf>K$@r4Q}LTCrb z=MHb-G?Fi+p?kY3p>heYBOxjsj@@nNDk_+oAUfI;qF4_EwB6FQbIQuj03KGIipbqa zqPb88V4oId^C1t_5J(&?7B%eQ$>uca0?CV{_bPEoXycw~PVJVBZLyV)vz!Z}n5=AX z1C=clfYcK56+=j_%Mi3Npe&@@Jq&Q;8V#k6wJyOlk?gQwtPK|k`u_H_Gu&LzL75zdsI#eTTiKUx%$d+`=Pa-G05&#)e=`i}9%&EGF z^$S{T1)_tiIi=)okQzN)x{XL}?Ev#@PAM4uS0_yL5kw}9tzjMrC1H|$PHehjXX$dZ zx`cT*p6i+AN$lpUD$f{W+TTpFM�{Hq&>al0Jdab;GFi`1k(+y^jw2F8p8WMPFwo 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

07X!YU6?$xX>s%;PGO1i8KWMc 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

TL{hBK*xGis*L4ULc7P#);No8`_Shf3< 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 z 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 diff --git "a/\345\216\237\345\210\233\350\257\227\351\233\206/\345\244\217\345\244\251\347\232\204\351\243\216\346\210\221\346\260\270\350\277\234\350\256\260\345\276\227.md" "b/\345\216\237\345\210\233\350\257\227\351\233\206/\345\244\217\345\244\251\347\232\204\351\243\216\346\210\221\346\260\270\350\277\234\350\256\260\345\276\227.md" deleted file mode 100644 index 500af79..0000000 --- "a/\345\216\237\345\210\233\350\257\227\351\233\206/\345\244\217\345\244\251\347\232\204\351\243\216\346\210\221\346\260\270\350\277\234\350\256\260\345\276\227.md" +++ /dev/null @@ -1,49 +0,0 @@ -夜深了,宁静了。 -朝南的窗, -我轻轻地打开了。 -夏夜的风, -温柔且粘人, -穿过头发, -吻着耳朵, -感觉特别舒服。 - -想起了小时候, -老家屋子热得发烫~ -我牵着母亲的大手, -抱着小枕头, -裹着小凉席, -一步两步三步, -走向楼顶,睡觉。 - -那时候, -漫天的繁星活泼且迷人, -对着我不停眨着眼, -像大眼睛的小女孩子, -害羞地浅笑。 -月亮也圆圆大大的, -像个暖心的大姐姐, -马上要抱着我入眠。 - -那时候, -萤火虫似一盏盏小油灯, -照亮的我小脸蛋。 -知了在吵闹过后, -也安静了下来, -周围像人过港空的街道。 -飞机划过苍穹, -留下隆隆的声音, -给这个夜,留下美好的快照。 - -母亲在我耳旁喃喃细语, -赶紧睡觉吧, -明天跟我去田里, -收割水稻。 - -一听,我心就乐了。 -想到田里有活泼的稻花鱼, -有早出晚归的小田螺, -还有喜欢偷吃稻谷的小麻雀。 -慢慢地,进入了梦乡, -带着对母亲的思念~ - -最后,提前祝天底下所有的母亲,母亲节快乐~ \ No newline at end of file diff --git "a/\347\274\223\345\255\230Redis\346\200\273\347\273\223/\347\274\223\345\255\230\344\270\200\350\207\264\346\200\247\346\226\271\346\241\210\345\222\214\347\255\226\347\225\245.md" "b/\347\274\223\345\255\230Redis\346\200\273\347\273\223/\347\274\223\345\255\230\344\270\200\350\207\264\346\200\247\346\226\271\346\241\210\345\222\214\347\255\226\347\225\245.md" new file mode 100644 index 0000000..77ddf8c --- /dev/null +++ "b/\347\274\223\345\255\230Redis\346\200\273\347\273\223/\347\274\223\345\255\230\344\270\200\350\207\264\346\200\247\346\226\271\346\241\210\345\222\214\347\255\226\347\225\245.md" @@ -0,0 +1,809 @@ +# 缓存一致性方案和策略 - 面试必备 + +## 📋 目录 +- [缓存一致性问题概述](#缓存一致性问题概述) +- [常见的缓存一致性方案](#常见的缓存一致性方案) +- [缓存更新策略](#缓存更新策略) +- [分布式缓存一致性](#分布式缓存一致性) +- [实际应用场景](#实际应用场景) +- [面试常见问题](#面试常见问题) + +## 🎯 缓存一致性问题概述 + +### 什么是缓存一致性问题? + +缓存一致性问题是指缓存中的数据与数据库中的数据不一致的情况,主要表现为: + +1. **数据不一致**:缓存和数据库中的数据值不同 +2. **时效性问题**:缓存中的数据已过期但仍被使用 +3. **并发问题**:多个请求同时操作导致的数据不一致 + +### 产生原因 + +```java +// 典型的缓存不一致场景 +public class UserService { + + // 场景1:先更新数据库,再删除缓存 + public void updateUser(User user) { + // 1. 更新数据库 + userDao.update(user); + + // 2. 删除缓存 - 如果这步失败,就会出现不一致 + redisTemplate.delete("user:" + user.getId()); + } + + // 场景2:并发读写导致的不一致 + public User getUser(Long userId) { + String key = "user:" + userId; + User user = redisTemplate.get(key); + + if (user == null) { + // 从数据库查询 + user = userDao.findById(userId); + if (user != null) { + // 写入缓存 - 并发情况下可能写入旧数据 + redisTemplate.set(key, user, 3600); + } + } + return user; + } +} +``` + +## 🔧 常见的缓存一致性方案 + +### 1. Cache Aside Pattern(旁路缓存) + +**读操作流程:** +```java +public User getUserById(Long userId) { + String key = "user:" + userId; + + // 1. 先查缓存 + User user = redisTemplate.opsForValue().get(key); + if (user != null) { + return user; + } + + // 2. 缓存未命中,查数据库 + user = userDao.findById(userId); + if (user != null) { + // 3. 写入缓存 + redisTemplate.opsForValue().set(key, user, Duration.ofHours(1)); + } + + return user; +} +``` + +**写操作流程:** +```java +public void updateUser(User user) { + // 方案1:先更新数据库,再删除缓存(推荐) + userDao.update(user); + redisTemplate.delete("user:" + user.getId()); + + // 方案2:先删除缓存,再更新数据库 + // redisTemplate.delete("user:" + user.getId()); + // userDao.update(user); +} +``` + +### 2. Write Through Pattern(写穿透) + +```java +@Service +public class CacheWriteThroughService { + + public void updateUser(User user) { + // 同时更新缓存和数据库 + CompletableFuture dbUpdate = CompletableFuture.runAsync(() -> { + userDao.update(user); + }); + + CompletableFuture cacheUpdate = CompletableFuture.runAsync(() -> { + redisTemplate.opsForValue().set("user:" + user.getId(), user); + }); + + // 等待两个操作都完成 + CompletableFuture.allOf(dbUpdate, cacheUpdate).join(); + } +} +``` + +### 3. Write Behind Pattern(写回) + +```java +@Component +public class WriteBehindCache { + + private final Map writeBuffer = new ConcurrentHashMap<>(); + + @Scheduled(fixedDelay = 5000) // 每5秒执行一次 + public void flushToDatabase() { + if (!writeBuffer.isEmpty()) { + Map toFlush = new HashMap<>(writeBuffer); + writeBuffer.clear(); + + // 批量写入数据库 + batchUpdateDatabase(toFlush); + } + } + + public void updateUser(User user) { + // 立即更新缓存 + String key = "user:" + user.getId(); + redisTemplate.opsForValue().set(key, user); + + // 加入写缓冲区,延迟写入数据库 + writeBuffer.put(key, user); + } +} +``` + +## 🔄 缓存更新策略 + +### 1. 延迟双删策略 + +```java +public void updateUserWithDelayedDoubleDelete(User user) { + // 第一次删除缓存 + redisTemplate.delete("user:" + user.getId()); + + // 更新数据库 + userDao.update(user); + + // 延迟删除缓存 + CompletableFuture.runAsync(() -> { + try { + Thread.sleep(1000); // 延迟1秒 + redisTemplate.delete("user:" + user.getId()); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); +} +``` + +### 2. 基于消息队列的异步更新 + +```java +@Service +public class AsyncCacheUpdateService { + + @Autowired + private RabbitTemplate rabbitTemplate; + + public void updateUser(User user) { + // 更新数据库 + userDao.update(user); + + // 发送缓存更新消息 + CacheUpdateMessage message = new CacheUpdateMessage(); + message.setKey("user:" + user.getId()); + message.setOperation("DELETE"); + + rabbitTemplate.convertAndSend("cache.update.exchange", + "cache.update.routing.key", + message); + } + + @RabbitListener(queues = "cache.update.queue") + public void handleCacheUpdate(CacheUpdateMessage message) { + if ("DELETE".equals(message.getOperation())) { + redisTemplate.delete(message.getKey()); + } + } +} +``` + +### 3. 基于版本号的乐观锁 + +```java +@Entity +public class User { + @Id + private Long id; + private String name; + private String email; + + @Version + private Long version; // 版本号 + + // getters and setters +} + +@Service +public class OptimisticLockCacheService { + + public void updateUser(User user) { + String key = "user:" + user.getId(); + + try { + // 更新数据库(乐观锁) + int updated = userDao.updateWithVersion(user); + + if (updated > 0) { + // 更新成功,删除缓存 + redisTemplate.delete(key); + } else { + // 更新失败,版本冲突 + throw new OptimisticLockException("数据已被其他用户修改"); + } + } catch (OptimisticLockException e) { + // 处理版本冲突 + redisTemplate.delete(key); // 删除可能过期的缓存 + throw e; + } + } +} +``` + +## 🌐 分布式缓存一致性 + +### 1. 基于Redis的分布式锁 + +```java +@Component +public class DistributedCacheConsistency { + + @Autowired + private RedisTemplate redisTemplate; + + public void updateUserWithDistributedLock(User user) { + String lockKey = "lock:user:" + user.getId(); + String lockValue = UUID.randomUUID().toString(); + + try { + // 获取分布式锁 + Boolean acquired = redisTemplate.opsForValue() + .setIfAbsent(lockKey, lockValue, Duration.ofSeconds(30)); + + if (acquired) { + // 更新数据库 + userDao.update(user); + + // 删除缓存 + redisTemplate.delete("user:" + user.getId()); + } else { + throw new RuntimeException("获取锁失败,请稍后重试"); + } + } finally { + // 释放锁 + releaseLock(lockKey, lockValue); + } + } + + private void releaseLock(String lockKey, String lockValue) { + String script = "if redis.call('get', KEYS[1]) == ARGV[1] then " + + "return redis.call('del', KEYS[1]) else return 0 end"; + + redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), + Collections.singletonList(lockKey), lockValue); + } +} +``` + +### 2. 基于Canal的数据同步 + +```java +@Component +public class CanalCacheSync { + + @EventListener + public void handleDatabaseChange(CanalEntry.Entry entry) { + if (entry.getEntryType() == CanalEntry.EntryType.ROWDATA) { + CanalEntry.RowChange rowChange = CanalEntry.RowChange.parseFrom(entry.getStoreValue()); + + for (CanalEntry.RowData rowData : rowChange.getRowDatasList()) { + if (rowChange.getEventType() == CanalEntry.EventType.UPDATE || + rowChange.getEventType() == CanalEntry.EventType.DELETE) { + + // 解析主键 + String primaryKey = extractPrimaryKey(rowData); + + // 删除对应的缓存 + String cacheKey = "user:" + primaryKey; + redisTemplate.delete(cacheKey); + + log.info("缓存已删除: {}", cacheKey); + } + } + } + } +} +``` + +## 💡 实际应用场景 + +### 场景1:电商商品信息缓存 + +```java +@Service +public class ProductCacheService { + + // 商品信息查询 + public Product getProduct(Long productId) { + String key = "product:" + productId; + + // 1. 查询缓存 + Product product = redisTemplate.opsForValue().get(key); + if (product != null) { + return product; + } + + // 2. 查询数据库 + product = productDao.findById(productId); + if (product != null) { + // 3. 写入缓存,设置随机过期时间避免缓存雪崩 + int expireTime = 3600 + new Random().nextInt(600); // 1-1.1小时 + redisTemplate.opsForValue().set(key, product, Duration.ofSeconds(expireTime)); + } + + return product; + } + + // 商品信息更新 + @Transactional + public void updateProduct(Product product) { + // 1. 更新数据库 + productDao.update(product); + + // 2. 删除相关缓存 + String productKey = "product:" + product.getId(); + String categoryKey = "category:products:" + product.getCategoryId(); + + redisTemplate.delete(productKey); + redisTemplate.delete(categoryKey); + + // 3. 发送缓存更新事件 + applicationEventPublisher.publishEvent(new ProductUpdatedEvent(product.getId())); + } +} +``` + +### 场景2:用户会话缓存 + +```java +@Service +public class UserSessionCacheService { + + public void updateUserSession(String sessionId, UserSession session) { + String key = "session:" + sessionId; + + // 使用Redis事务确保一致性 + redisTemplate.execute(new SessionCallback() { + @Override + public Object execute(RedisOperations operations) throws DataAccessException { + operations.multi(); + + // 更新会话信息 + operations.opsForValue().set(key, session, Duration.ofMinutes(30)); + + // 更新用户活跃时间 + operations.opsForValue().set("user:last_active:" + session.getUserId(), + System.currentTimeMillis()); + + return operations.exec(); + } + }); + } +} +``` + +## ❓ 面试常见问题 + +### Q1: 为什么推荐"先更新数据库,再删除缓存"? + +**答案:** +- **数据一致性更好**:即使删除缓存失败,下次查询会从数据库获取最新数据 +- **并发安全性**:减少了脏数据写入缓存的概率 +- **简单可靠**:实现简单,出错概率较低 + +### Q2: 如何解决缓存击穿问题? + +**答案:** +```java +public Object getDataWithMutex(String key) { + // 1. 查询缓存 + Object data = redisTemplate.opsForValue().get(key); + if (data != null) { + return data; + } + + // 2. 获取互斥锁 + String lockKey = "lock:" + key; + try { + Boolean acquired = redisTemplate.opsForValue() + .setIfAbsent(lockKey, "1", Duration.ofSeconds(10)); + + if (acquired) { + // 3. 双重检查 + data = redisTemplate.opsForValue().get(key); + if (data != null) { + return data; + } + + // 4. 查询数据库 + data = queryFromDatabase(key); + + // 5. 写入缓存 + if (data != null) { + redisTemplate.opsForValue().set(key, data, Duration.ofHours(1)); + } + } else { + // 等待其他线程加载数据 + Thread.sleep(100); + return getDataWithMutex(key); // 递归调用 + } + } finally { + redisTemplate.delete(lockKey); + } + + return data; +} +``` + +### Q3: 如何保证分布式环境下的缓存一致性? + +**答案:** +1. **使用分布式锁**:确保同一时间只有一个节点更新缓存 +2. **消息队列通知**:通过MQ通知所有节点更新缓存 +3. **版本号机制**:使用版本号检测数据变更 +4. **最终一致性**:接受短暂的不一致,通过定时任务修复 + +### Q4: 缓存雪崩如何预防和解决? + +**答案:** +```java +@Service +public class CacheAvalanchePrevention { + + // 方案1:设置随机过期时间 + public void setWithRandomExpire(String key, Object value) { + int baseExpire = 3600; // 基础过期时间1小时 + int randomExpire = new Random().nextInt(600); // 随机0-10分钟 + + redisTemplate.opsForValue().set(key, value, + Duration.ofSeconds(baseExpire + randomExpire)); + } + + // 方案2:多级缓存 + public Object getDataWithMultiLevel(String key) { + // L1缓存:本地缓存 + Object data = localCache.get(key); + if (data != null) { + return data; + } + + // L2缓存:Redis + data = redisTemplate.opsForValue().get(key); + if (data != null) { + localCache.put(key, data, 300); // 本地缓存5分钟 + return data; + } + + // L3:数据库 + data = queryFromDatabase(key); + if (data != null) { + setWithRandomExpire(key, data); + localCache.put(key, data, 300); + } + + return data; + } +} +``` + +### Q5: 如何处理热点数据的缓存一致性? + +**答案:** +```java +@Service +public class HotDataCacheService { + + // 热点数据标识 + private final Set hotKeys = ConcurrentHashMap.newKeySet(); + + public void updateHotData(String key, Object data) { + if (hotKeys.contains(key)) { + // 热点数据使用写时复制策略 + String tempKey = key + ":temp:" + System.currentTimeMillis(); + + // 1. 写入临时key + redisTemplate.opsForValue().set(tempKey, data, Duration.ofMinutes(5)); + + // 2. 原子性替换 + String script = + "redis.call('del', KEYS[1]) " + + "redis.call('rename', KEYS[2], KEYS[1]) " + + "return 1"; + + redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), + Arrays.asList(key, tempKey)); + } else { + // 普通数据直接更新 + redisTemplate.opsForValue().set(key, data); + } + } +} +``` + +### Q6: 延迟双删策略的延迟时间如何确定? + +**答案:** +延迟时间需要大于一次数据库读操作的时间,通常设置为: +- **读操作耗时 + 网络延迟 + 安全边际** +- 一般设置为 **500ms - 1s** +- 可以通过监控数据库读操作的P99延迟来确定 + +```java +// 动态延迟时间计算 +@Component +public class DynamicDelayCalculator { + + private volatile long delayTime = 1000; // 默认1秒 + + @Scheduled(fixedDelay = 60000) // 每分钟更新一次 + public void updateDelayTime() { + // 获取数据库读操作的P99延迟 + long dbReadP99 = metricsService.getDbReadP99Latency(); + + // 设置为P99延迟的2倍,确保安全 + this.delayTime = Math.max(500, dbReadP99 * 2); + } + + public long getDelayTime() { + return delayTime; + } +} +``` + +## 🛠️ 最佳实践总结 + +### 1. 选择合适的缓存策略 + +| 场景 | 推荐策略 | 原因 | +|------|----------|------| +| 读多写少 | Cache Aside | 简单可靠,性能好 | +| 写多读少 | Write Behind | 减少数据库压力 | +| 强一致性要求 | Write Through | 保证数据一致性 | +| 热点数据 | 多级缓存 | 提高可用性 | + +### 2. 缓存一致性检查清单 + +- [ ] 是否考虑了并发场景下的数据一致性? +- [ ] 是否有合适的缓存失效策略? +- [ ] 是否处理了缓存穿透、击穿、雪崩问题? +- [ ] 是否有监控和告警机制? +- [ ] 是否考虑了分布式环境下的一致性? + +### 3. 监控和告警 + +```java +@Component +public class CacheMonitor { + + private final MeterRegistry meterRegistry; + + public CacheMonitor(MeterRegistry meterRegistry) { + this.meterRegistry = meterRegistry; + } + + public Object getWithMonitoring(String key) { + Timer.Sample sample = Timer.start(meterRegistry); + + try { + Object data = redisTemplate.opsForValue().get(key); + + if (data != null) { + meterRegistry.counter("cache.hit", "key", key).increment(); + } else { + meterRegistry.counter("cache.miss", "key", key).increment(); + } + + return data; + } finally { + sample.stop(Timer.builder("cache.access.time") + .tag("key", key) + .register(meterRegistry)); + } + } +} +``` + +### 4. 故障恢复机制 + +```java +@Service +public class CacheRecoveryService { + + @Scheduled(fixedDelay = 60000) // 每分钟检查一次 + public void checkCacheConsistency() { + // 检查关键缓存的一致性 + List criticalKeys = getCriticalKeys(); + + for (String key : criticalKeys) { + try { + Object cacheData = redisTemplate.opsForValue().get(key); + Object dbData = queryFromDatabase(key); + + if (!Objects.equals(cacheData, dbData)) { + // 发现不一致,修复缓存 + redisTemplate.opsForValue().set(key, dbData); + + // 记录日志 + log.warn("缓存不一致已修复: key={}", key); + + // 发送告警 + alertService.sendAlert("缓存不一致", key); + } + } catch (Exception e) { + log.error("检查缓存一致性失败: key={}", key, e); + } + } + } +} +``` + +## 🎯 实战经验分享 + +### 1. 大型电商系统的缓存一致性实践 + +```java +@Service +public class EcommerceCacheService { + + // 商品价格更新 - 强一致性要求 + @Transactional + public void updateProductPrice(Long productId, BigDecimal newPrice) { + // 1. 使用分布式锁确保原子性 + String lockKey = "price_update:" + productId; + RLock lock = redissonClient.getLock(lockKey); + + try { + if (lock.tryLock(5, 30, TimeUnit.SECONDS)) { + // 2. 更新数据库 + productDao.updatePrice(productId, newPrice); + + // 3. 删除相关缓存 + List keysToDelete = Arrays.asList( + "product:" + productId, + "product:price:" + productId, + "category:products:" + getProductCategory(productId) + ); + + redisTemplate.delete(keysToDelete); + + // 4. 发送价格变更事件 + eventPublisher.publishEvent(new PriceChangedEvent(productId, newPrice)); + } + } finally { + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + } + + // 库存更新 - 最终一致性 + public void updateInventory(Long productId, int quantity) { + // 1. 立即更新缓存 + String inventoryKey = "inventory:" + productId; + redisTemplate.opsForValue().increment(inventoryKey, quantity); + + // 2. 异步更新数据库 + CompletableFuture.runAsync(() -> { + try { + inventoryDao.updateQuantity(productId, quantity); + } catch (Exception e) { + // 数据库更新失败,回滚缓存 + redisTemplate.opsForValue().increment(inventoryKey, -quantity); + log.error("库存更新失败,已回滚缓存: productId={}", productId, e); + } + }); + } +} +``` + +### 2. 金融系统的缓存一致性方案 + +```java +@Service +public class FinancialCacheService { + + // 账户余额更新 - 严格一致性 + @Transactional + public void updateAccountBalance(String accountId, BigDecimal amount) { + // 1. 先删除缓存 + String balanceKey = "balance:" + accountId; + redisTemplate.delete(balanceKey); + + try { + // 2. 更新数据库 + accountDao.updateBalance(accountId, amount); + + // 3. 延迟删除缓存(双删策略) + CompletableFuture.runAsync(() -> { + try { + Thread.sleep(1000); + redisTemplate.delete(balanceKey); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + + } catch (Exception e) { + // 数据库更新失败,确保缓存被清除 + redisTemplate.delete(balanceKey); + throw e; + } + } +} +``` + +## 📊 性能对比分析 + +| 策略 | 一致性强度 | 性能影响 | 实现复杂度 | 适用场景 | +|------|------------|----------|------------|----------| +| Cache Aside | 中等 | 低 | 低 | 通用场景 | +| Write Through | 强 | 中等 | 中等 | 强一致性要求 | +| Write Behind | 弱 | 高 | 高 | 高并发写入 | +| 延迟双删 | 中等 | 低 | 低 | 读多写少 | +| 分布式锁 | 强 | 高 | 中等 | 关键数据 | + +## 🚨 常见陷阱和解决方案 + +### 1. 缓存穿透 + +```java +// 问题:查询不存在的数据导致缓存穿透 +public User getUserById(Long userId) { + String key = "user:" + userId; + User user = redisTemplate.opsForValue().get(key); + + if (user == null) { + user = userDao.findById(userId); + if (user == null) { + // 解决方案:缓存空值 + redisTemplate.opsForValue().set(key, "NULL", Duration.ofMinutes(5)); + return null; + } + redisTemplate.opsForValue().set(key, user, Duration.ofHours(1)); + } + + return "NULL".equals(user) ? null : user; +} +``` + +### 2. 缓存击穿 + +```java +// 解决方案:互斥锁 + 双重检查 +public Object getDataWithMutex(String key) { + Object data = redisTemplate.opsForValue().get(key); + if (data != null) { + return data; + } + + synchronized (this) { + // 双重检查 + data = redisTemplate.opsForValue().get(key); + if (data != null) { + return data; + } + + // 查询数据库并更新缓存 + data = queryFromDatabase(key); + if (data != null) { + redisTemplate.opsForValue().set(key, data, Duration.ofHours(1)); + } + } + + return data; +} +``` + +--- + +*通过这些实战经验和最佳实践,你可以在面试中展现对缓存一致性问题的深度理解,同时在实际项目中构建更加可靠和高效的缓存系统。* From 52f52ced99aae53cb808f49152486ca134a434cf Mon Sep 17 00:00:00 2001 From: taoking <980512523@qq.com> Date: Mon, 1 Sep 2025 21:24:15 +0800 Subject: [PATCH 2/5] =?UTF-8?q?java=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/AugmentWebviewStateStore.xml | 2 +- ...10\346\226\260\347\211\271\346\200\247.md" | 60 ++++++++++ ...11\346\226\260\347\211\271\346\200\247.md" | 100 ++++++++++++++++ ...12\346\226\260\347\211\271\346\200\247.md" | 91 +++++++++++++++ ...13\346\226\260\347\211\271\346\200\247.md" | 63 ++++++++++ ...14\346\226\260\347\211\271\346\200\247.md" | 107 +++++++++++++++++ ...15\346\226\260\347\211\271\346\200\247.md" | 68 +++++++++++ ...16\346\226\260\347\211\271\346\200\247.md" | 57 +++++++++ ...17\346\226\260\347\211\271\346\200\247.md" | 64 +++++++++++ ...18\346\226\260\347\211\271\346\200\247.md" | 49 ++++++++ ...19\346\226\260\347\211\271\346\200\247.md" | 74 ++++++++++++ ...20\346\226\260\347\211\271\346\200\247.md" | 41 +++++++ ...21\346\226\260\347\211\271\346\200\247.md" | 103 +++++++++++++++++ ...a9\346\226\260\347\211\271\346\200\247.md" | 108 ++++++++++++++++++ .../README.md" | 0 15 files changed, 986 insertions(+), 1 deletion(-) create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java10\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java11\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java12\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java13\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java14\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java15\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java16\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java17\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java18\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java19\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java20\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java21\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/Java9\346\226\260\347\211\271\346\200\247.md" create mode 100644 "Java\347\211\210\346\234\254\346\233\264\346\226\260/README.md" diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml index cea712d..48b0c02 100644 --- a/.idea/AugmentWebviewStateStore.xml +++ b/.idea/AugmentWebviewStateStore.xml @@ -3,7 +3,7 @@ diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java10\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java10\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..25c959b --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java10\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,60 @@ +# Java 10 新特性 + +Java 10 于 2018 年 3 月发布,是 Java 采用新的、更快的半年发布周期后的第一个版本。它带来了一些实用的新功能,其中最著名的是局部变量类型推断。 + +## 1. 局部变量类型推断 (Local-Variable Type Inference) + +这是 Java 10 最核心的特性。通过使用 `var` 关键字,可以让编译器推断出局部变量的类型,从而简化代码。 + +- **目的**:减少样板代码,提高代码的可读性。 +- **注意**:`var` 只能用于局部变量(方法内、循环中等),不能用于成员变量、方法参数或返回类型。 + +**使用前:** +```java +String message = "Hello, Java 10!"; +ArrayList list = new ArrayList(); +``` + +**使用后:** +```java +var message = "Hello, Java 10!"; // 推断为 String +var list = new ArrayList(); // 推断为 ArrayList + +for (var item : list) { + System.out.println(item); // item 推断为 String +} +``` + +## 2. 不可变集合的增强 + +`List`, `Set`, `Map` 接口新增了 `copyOf`静态方法,用于创建一个不可修改的集合副本。 + +```java +var originalList = new ArrayList(); +originalList.add("a"); +originalList.add("b"); + +// 创建一个不可修改的副本 +var copy = List.copyOf(originalList); + +// 尝试修改副本会导致 UnsupportedOperationException +// copy.add("c"); +``` + +## 3. `Optional` 的 `orElseThrow()` 方法 + +`Optional` 类新增了 `orElseThrow()` 方法。当 `Optional` 为空时,它会抛出 `NoSuchElementException`。这与 `get()` 方法的行为完全相同,但方法名更能体现其作用。 + +```java +// 如果 Optional 为空,则抛出 NoSuchElementException +var value = optional.orElseThrow(); +``` + +## 4. 垃圾收集器 (GC) 改进 + +- **G1 垃圾收集器的并行 Full GC**:在之前的版本中,G1 的 Full GC 是单线程的,可能导致较长的停顿。Java 10 将其改为了多线程,从而减少了最坏情况下的停顿时间。 +- **垃圾收集器接口 (GC Interface)**:引入了一个干净的 GC 接口,使得在 JVM 中集成新的垃圾收集器变得更加容易。 + +## 5. 应用类数据共享 (Application Class-Data Sharing) + +扩展了现有的类数据共享(CDS)功能,允许将应用程序的类也包含在共享归档中。这可以减少多个 JVM 实例之间的内存占用,并缩短启动时间。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java11\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java11\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..90ce0bb --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java11\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,100 @@ +# Java 11 (LTS) 新特性 + +Java 11 于 2018 年 9 月发布,是一个长期支持(LTS)版本。它带来了许多实用的 API 增强和一些重要的平台更新。 + +## 1. 标准化的 HTTP Client API + +在 Java 9 和 10 中作为孵化功能的 HTTP Client API,在 Java 11 中被正式标准化。它位于 `java.net.http` 包中,提供了对 HTTP/1.1 和 HTTP/2 的支持,并完全取代了旧的 `HttpURLConnection`。 + +- **核心类**:`HttpClient`, `HttpRequest`, `HttpResponse`。 +- **特点**:支持同步和异步操作,使用 `CompletableFuture` 处理异步请求。 + +**示例:发送一个 GET 请求** +```java +var client = HttpClient.newHttpClient(); +var request = HttpRequest.newBuilder() + .uri(URI.create("https://api.github.com/")) + .build(); + +// 异步方式 +client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenAccept(System.out::println) + .join(); + +// 同步方式 +// HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); +// System.out.println(response.body()); +``` + +## 2. String 类的增强 + +`String` 类增加了几个非常方便的新方法: + +- **`isBlank()`**: 判断字符串是否为空白(只包含空格、制表符等)。 +- **`lines()`**: 将字符串按行分隔符转换为一个 `Stream`。 +- **`strip()`**, **`stripLeading()`**, **`stripTrailing()`**: 去除字符串首尾或单边的空白字符,功能比 `trim()` 更强大,能识别 Unicode 空白字符。 +- **`repeat(int)`**: 将字符串重复指定的次数。 + +```java +// isBlank +System.out.println(" \t ".isBlank()); // true + +// lines +"Hello\nWorld".lines().forEach(System.out::println); + +// strip +String s = "\u2005 Hello \u2005"; // \u2005 是一个 Unicode 空白符 +System.out.println("'" + s.trim() + "'"); // '  Hello  ' +System.out.println("'" + s.strip() + "'"); // 'Hello' + +// repeat +System.out.println("Java ".repeat(3)); // "Java Java Java " +``` + +## 3. 直接运行单个 Java 源文件 + +从 Java 11 开始,你可以直接使用 `java` 命令来运行一个单个的 `.java` 源文件,无需先手动使用 `javac` 编译。 + +```bash +# 创建一个 HelloWorld.java 文件 +# public class HelloWorld { +# public static void main(String[] args) { +# System.out.println("Hello, Java 11!"); +# } +# } + +# 直接运行 +$ java HelloWorld.java +Hello, Java 11! +``` + +## 4. Lambda 参数的局部变量类型推断 + +`var` 关键字现在可以用于 Lambda 表达式的参数声明中。这在需要给参数添加注解时非常有用。 + +```java +// Java 10 中不允许 +// (var x, var y) -> x.process(y) + +// Java 11 中允许 +Predicate predicate = (@Nonnull var s) -> s.length() > 0; +``` + +## 5. 文件读写 API 增强 + +`java.nio.file.Files` 类增加了 `writeString()` 和 `readString()` 方法,可以更方便地读写文件内容。 + +```java +Path path = Files.writeString(Files.createTempFile("test", ".txt"), "Hello, world!"); +String content = Files.readString(path); +System.out.println(content); // Hello, world! +``` + +## 6. ZGC (Z Garbage Collector) + +引入了 ZGC,这是一个可伸缩的、低延迟的垃圾收集器,作为一项实验性功能。它的设计目标是将 GC 停顿时间控制在 10ms 以内,即使是对于非常大的堆(TB 级别)。 + +## 7. 移除 Java EE 和 CORBA 模块 + +Java 11 从 JDK 中移除了过去被废弃的 Java EE 和 CORBA 模块(例如 `java.xml.ws`, `java.corba`)。如果你的应用需要这些模块,必须从外部库(如 Maven Central)中添加依赖。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java12\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java12\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..bbd32ae --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java12\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,91 @@ +# Java 12 新特性 + +Java 12 于 2019 年 3 月发布。它引入了一些预览功能和 API 增强,其中最受关注的是 Switch 表达式的预览。 + +## 1. Switch 表达式 (Switch Expressions - 预览功能) + +Java 12 首次引入了 Switch 表达式作为预览功能,极大地增强了 `switch` 语句的能力。 + +- **目的**:简化 `switch` 结构,使其可以作为表达式返回值,避免了繁琐的 `break` 和临时变量。 +- **新语法**:使用 `case L -> ...` 标签,无需 `break`,并且可以保证穷尽所有可能的情况。 + +**传统 `switch` 语句:** +```java +String dayName; +switch (day) { + case MONDAY: + case FRIDAY: + case SUNDAY: + dayName = "Work Day"; + break; + case TUESDAY: + dayName = "Rest Day"; + break; + default: + dayName = "Unknown"; +} +``` + +**使用 Switch 表达式 (Java 12 预览版):** +```java +String dayName = switch (day) { + case MONDAY, FRIDAY, SUNDAY -> "Work Day"; + case TUESDAY -> "Rest Day"; + default -> "Unknown"; +}; +``` + +## 2. Shenandoah: 低暂停时间的垃圾收集器 (实验性) + +引入了一个新的垃圾收集器 Shenandoah,其主要目标是通过与正在运行的 Java 线程同时执行更多的 GC 工作来减少 GC 暂停时间。这对于需要低延迟和高响应性的应用程序特别有价值。 + +## 3. `String` 类的新方法 + +`String` 类增加了两个有用的方法:`indent()` 和 `transform()`。 + +- **`indent(int n)`**: 对字符串进行缩进。如果 `n` > 0,则在每行开头添加 `n` 个空格;如果 `n` < 0,则尝试从每行开头删除最多 `|n|` 个空格。 +- **`transform(Function)`**: 将一个函数应用于字符串,可以方便地进行链式转换。 + +```java +// indent +String text = "Hello\nWorld"; +System.out.println(text.indent(2)); +// 输出: +// Hello +// World + +// transform +String result = "12345".transform(s -> new StringBuilder(s).reverse().toString()); +System.out.println(result); // "54321" +``` + +## 4. `Files.mismatch()` 方法 + +`java.nio.file.Files` 中添加了 `mismatch()` 方法,用于比较两个文件的内容是否相同。它会返回第一个不匹配字节的位置,如果文件内容完全相同,则返回 -1L。 + +```java +Path path1 = Files.createTempFile("file1", ".txt"); +Path path2 = Files.createTempFile("file2", ".txt"); +Files.writeString(path1, "Java 12"); +Files.writeString(path2, "Java 12"); + +long mismatch = Files.mismatch(path1, path2); +System.out.println(mismatch); // -1 (文件内容相同) +``` + +## 5. Teeing Collector + +Stream API 增加了一个新的收集器 `Collectors.teeing()`。它可以将一个流的元素同时传递给两个下游收集器,然后将它们的结果合并成一个最终结果。 + +**示例:计算平均值** +```java +// 计算流中数字的总和和计数,然后计算平均值 +double average = Stream.of(1, 2, 3, 4, 5) + .collect(Collectors.teeing( + Collectors.summingDouble(i -> i), // 第一个收集器:求和 + Collectors.counting(), // 第二个收集器:计数 + (sum, count) -> sum / count // 合并函数 + )); + +System.out.println(average); // 3.0 +``` diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java13\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java13\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..1bb3730 --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java13\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,63 @@ +# Java 13 新特性 + +Java 13 于 2019 年 9 月发布。此版本对 Java 12 引入的一些预览功能进行了改进,并重新实现了一些底层 API。 + +## 1. 文本块 (Text Blocks - 预览功能) + +Java 13 引入了文本块作为一项预览功能,旨在简化多行字符串的编写。 + +- **目的**:避免在字符串中大量使用转义字符(如 `\n`),使 SQL、JSON、HTML 等嵌入代码更易于读写。 +- **语法**:使用三个双引号 `"""` 作为开始和结束分隔符。 + +**传统方式:** +```java +String html = "\n" + + " \n" + + "

Hello, World

\n" + + " \n" + + "\n"; +``` + +**使用文本块:** +```java +String html = """ + + +

Hello, World

+ + + """; +``` + +## 2. Switch 表达式增强 (预览功能) + +Java 12 的 Switch 表达式在 Java 13 中得到了改进。最主要的变化是引入了 `yield` 关键字,用于从 `switch` 表达式中返回一个值,以替代之前的 `break` 用法。 + +```java +String text = switch (day) { + case MONDAY: + case FRIDAY: + case SUNDAY: + yield "Work Day"; + case TUESDAY: + yield "Rest Day"; + default: + yield "Unknown"; +}; +``` + +**注意**:在 Java 14 中,`yield` 被最终确定下来,而 `break` 的返回值方式被移除。 + +## 3. 重新实现旧版 Socket API + +`java.net.Socket` 和 `java.net.ServerSocket` 的底层实现被替换为一个更现代化、更易于维护和调试的实现。这个变化对开发者是透明的,旧的代码无需修改即可运行。 + +- **目的**:消除历史遗留的技术债,为未来的网络编程(如 Project Loom 的虚拟线程)提供更好的基础。 + +## 4. ZGC: 取消提交未使用的内存 + +ZGC 垃圾收集器得到了增强,现在可以将未使用的堆内存返还给操作系统。这对于需要关心内存占用的云原生和容器化环境非常有用。 + +## 5. 动态 CDS 归档 (Dynamic CDS Archives) + +在 Java 10 引入的应用类数据共享(AppCDS)基础上进行了扩展。现在,可以在应用程序执行结束时动态生成共享归档,简化了 AppCDS 的使用流程。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java14\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java14\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..4005139 --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java14\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,107 @@ +# Java 14 新特性 + +Java 14 于 2020 年 3 月发布。此版本将之前的一些预览功能转正,并引入了像 Records 这样的重量级新预览功能。 + +## 1. Switch 表达式 (标准版) + +在经过 Java 12 和 13 两轮预览后,Switch 表达式在 Java 14 中被正式确定下来。 + +- **最终语法**:使用 `case L -> ...` 的箭头语法,或者在代码块中使用 `yield` 关键字返回值。 + +```java +int numLetters = switch (day) { + case MONDAY, FRIDAY, SUNDAY -> 6; + case TUESDAY -> 7; + case THURSDAY, SATURDAY -> 8; + case WEDNESDAY -> 9; + default -> { + System.out.println("Invalid day"); + yield 0; + } +}; +``` + +## 2. Records (预览功能) + +Java 14 引入了 `record` 关键字作为预览功能,旨在创建不可变的数据聚合类(Data Carrier)。 + +- **目的**:极大地减少创建 POJO (Plain Old Java Object) 所需的样板代码。 +- **自动生成**:编译器会自动为 `record` 生成构造函数、`equals()`, `hashCode()`, `toString()` 以及字段的 `getter` 方法。 + +**传统方式:** +```java +// 需要手动编写构造函数、getter、equals、hashCode、toString +class Point { + private final int x; + private final int y; + // ... 大量样板代码 +} +``` + +**使用 Record:** +```java +// 一行代码即可 +public record Point(int x, int y) {} + +// 使用 +var point = new Point(1, 2); +System.out.println(point.x()); // 访问器方法,不是 getX() +System.out.println(point); // Point[x=1, y=2] +``` + +## 3. 更实用的 NullPointerExceptions + +JVM 改进了 `NullPointerException` 的提示信息,可以精确地指出哪个变量是 `null`,极大地提高了调试效率。 + +**示例代码:** +```java +a.b.c.doSomething(); +``` + +**Java 14 之前的异常信息:** +``` +Exception in thread "main" java.lang.NullPointerException + at MyClass.main(MyClass.java:10) +``` + +**Java 14 之后的异常信息:** +``` +Exception in thread "main" java.lang.NullPointerException: + Cannot read field "c" because "a.b" is null + at MyClass.main(MyClass.java:10) +``` + +## 4. instanceof 的模式匹配 (预览功能) + +简化了 `instanceof` 的使用,允许在检查类型的同时声明一个绑定变量,避免了显式的类型转换。 + +**传统方式:** +```java +if (obj instanceof String) { + String s = (String) obj; + System.out.println(s.toUpperCase()); +} +``` + +**使用模式匹配:** +```java +if (obj instanceof String s) { // s 在 if 块内可用 + System.out.println(s.toUpperCase()); +} +``` + +## 5. 文本块功能增强 + +文本块(在 Java 13 中预览)增加了两个新的转义序列: + +- **`\` (反斜杠)**:用于在行尾取消换行符,可以将多行写成一行。 +- **`\s`**: 表示一个单个的空格。 + +```java +String text = """ + line 1 \ + line 2 \ + line 3 + """; +// 实际内容是 "line 1 line 2 line 3" +``` diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java15\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java15\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..d798292 --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java15\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,68 @@ +# Java 15 新特性 + +Java 15 于 2020 年 9 月发布。它带来了新的预览功能,如密封类,并让一些重要的功能(如 ZGC)进入了生产就绪阶段。 + +## 1. 密封类 (Sealed Classes - 预览功能) + +密封类和接口用于限制哪些其他类或接口可以扩展或实现它们。 + +- **目的**:为类库作者提供更精细的控制,允许对类层次结构进行建模,这在模式匹配中特别有用。 +- **关键字**:`sealed`, `permits`, `non-sealed`。 + +**示例:** +```java +// Shape 接口只允许 Circle 和 Square 实现 +public sealed interface Shape permits Circle, Square { + double area(); +} + +// final class, 终止继承 +public final class Circle implements Shape { + public final double radius; + public Circle(double radius) { this.radius = radius; } + public double area() { return Math.PI * radius * radius; } +} + +// non-sealed class, 允许任何类继承它 +public non-sealed class Square implements Shape { + public final double side; + public Square(double side) { this.side = side; } + public double area() { return side * side; } +} + +// 由于 Square 是 non-sealed, 任何类都可以继承它 +public class SpecialSquare extends Square { + public SpecialSquare(double side) { super(side); } +} +``` + +## 2. Records (第二次预览) & instanceof 模式匹配 (第二次预览) + +在 Java 14 中引入的 Records 和 `instanceof` 模式匹配在 Java 15 中进入了第二次预览。它们的功能基本保持不变,主要是根据社区反馈进行了一些微调,为最终定稿做准备。 + +## 3. 文本块 (标准版) + +经过两轮预览,文本块在 Java 15 中被正式确定下来,成为标准功能。现在可以放心在生产代码中使用多行字符串了。 + +```java +String json = """ + { + "name": "John Doe", + "age": 30 + } + """; +``` + +## 4. ZGC 和 Shenandoah 垃圾收集器 (生产就绪) + +在之前版本中作为实验性或预览功能的 ZGC 和 Shenandoah 低延迟垃圾收集器,在 Java 15 中被标记为生产就绪(Production Ready)。这意味着它们已经足够稳定,可以在生产环境中使用。 + +## 5. 隐藏类 (Hidden Classes) + +这是一个主要面向框架和工具开发者的功能。隐藏类是一种不能被其他类的字节码直接使用的类。它们只能通过反射被发现和使用。 + +- **目的**:允许框架在运行时生成和加载类,而不会污染应用程序的类命名空间,并且可以独立卸载,从而减少内存占用。 + +## 6. 移除 Nashorn JavaScript 引擎 + +在 Java 11 中被标记为废弃的 Nashorn JavaScript 引擎及其相关 API,在 Java 15 中被正式移除。如果需要,可以考虑使用 GraalVM 等替代方案。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java16\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java16\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..7113efd --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java16\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,57 @@ +# Java 16 新特性 + +Java 16 于 2021 年 3 月发布。此版本将 Java 14 和 15 中广受欢迎的几个预览功能(如 Records 和模式匹配)正式确定下来。 + +## 1. Records (标准版) + +经过两轮预览,Records 在 Java 16 中被正式确定下来。现在,你可以放心地在生产代码中使用 `record` 来定义不可变的数据载体类,从而极大地减少样板代码。 + +```java +// Records 已成为标准功能 +public record Point(int x, int y) {} +``` + +## 2. instanceof 的模式匹配 (标准版) + +`instanceof` 的模式匹配也在此版本中被正式确定下来。这使得类型检查和转换的代码更加简洁和安全。 + +```java +// 模式匹配已成为标准功能 +Object obj = "Hello, Java 16"; +if (obj instanceof String s) { + // s可以直接使用,无需强制转换 + System.out.println(s.length()); +} +``` + +## 3. 密封类 (第二次预览) + +密封类(Sealed Classes)在 Java 16 中进入了第二次预览。根据社区的反馈进行了一些改进,例如放宽了对 `sealed` 类所在包的限制。 + +## 4. Vector API (孵化器) + +引入了一个新的 Vector API 作为孵化功能。这个 API 旨在提供一种表达向量计算的方式,这些计算在运行时可以可靠地编译为 CPU 架构上的最佳向量指令(如 SIMD 指令),从而获得优于等效标量计算的性能。 + +```java +// 示例:使用 Vector API 对两个数组进行求和 +// int[] a = { ... }; +// int[] b = { ... }; +// int[] c = new int[a.length]; +// var SPECIES = IntVector.SPECIES_PREFERRED; +// +// for (int i = 0; i < a.length; i += SPECIES.length()) { +// var mask = SPECIES.indexInRange(i, a.length); +// var va = IntVector.fromArray(SPECIES, a, i, mask); +// var vb = IntVector.fromArray(SPECIES, b, i, mask); +// var vc = va.add(vb); +// vc.intoArray(c, i, mask); +// } +``` + +## 5. 默认启用 C++14 语言特性 + +在 JVM 的 C++ 源代码中,现在可以使用 C++14 版本的语言特性。这对 Java 开发者是透明的,但有助于 JVM 开发人员利用更现代的 C++ 特性来改进和维护 JVM。 + +## 6. 将 JDK 移植到 Alpine Linux + +JDK 被成功移植到使用 musl 作为主要 C 库的 Alpine Linux 以及其他 Linux 发行版上。这对于构建轻量级容器镜像非常重要,因为 Alpine Linux 是容器化环境中的热门选择。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java17\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java17\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..0388b7d --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java17\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,64 @@ +# Java 17 (LTS) 新特性 + +Java 17 于 2021 年 9 月发布,是继 Java 11 之后的又一个长期支持(LTS)版本。它将一些重要的预览功能(如密封类)转正,并带来了对未来 Java 编程风格有深远影响的新预览功能。 + +## 1. 密封类 (Sealed Classes - 标准版) + +经过两轮预览,密封类在 Java 17 中被正式确定下来。它允许库作者精确控制哪些类可以继承或实现一个 `sealed` 的类或接口,这对于构建安全的、可预测的 API 非常重要。 + +```java +// Sealed Classes 已成为标准功能 +public sealed interface Shape permits Circle, Rectangle {} + +public final class Circle implements Shape {} +public final class Rectangle implements Shape {} +``` + +## 2. Switch 的模式匹配 (预览功能) + +这是 Java 17 中最令人兴奋的预览功能。它极大地增强了 `switch` 语句,使其可以对类型进行匹配,并安全地执行类型转换。 + +- **目的**:简化复杂的、基于类型的条件判断,使代码更具可读性和安全性。 + +**传统方式:** +```java +static double getArea(Shape shape) { + if (shape instanceof Circle c) { + return Math.PI * c.radius() * c.radius(); + } else if (shape instanceof Rectangle r) { + return r.length() * r.width(); + } else { + throw new IllegalArgumentException("Unknown shape"); + } +} +``` + +**使用 Switch 模式匹配:** +```java +static double getArea(Shape shape) { + return switch (shape) { + // case 后面直接跟类型和变量名 + case Circle c -> Math.PI * c.radius() * c.radius(); + case Rectangle r -> r.length() * r.width(); + // default 分支处理其他情况 + default -> throw new IllegalArgumentException("Unknown shape +"); + }; +} +``` + +## 3. 外部函数和内存 API (孵化器) + +引入了一个新的 API,旨在替代老旧且脆弱的 JNI (Java Native Interface)。这个 API 提供了一种更安全、更高效的方式来调用 Java 运行时之外的本地代码(如 C 库)和操作本地内存。 + +## 4. 强封装 JDK 内部 API + +从 Java 9 开始,JDK 就试图限制对内部 API 的访问。在 Java 17 中,这一限制变得更加严格。默认情况下,无法再通过反射等“黑客”手段访问 JDK 的内部模块,除非通过特定的命令行参数显式授权。这有助于提高平台的安全性和可维护性。 + +## 5. 移除 RMI 激活机制 + +远程方法调用(RMI)的激活机制(Activation)是一个过时且很少使用的功能,已在此版本中被正式移除。 + +## 6. 废弃 Applet API + +古老的 Applet API 在此版本中被正式标记为“废弃,并准备在未来移除”。这标志着 Applet 技术时代的终结。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java18\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java18\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..d8f22c5 --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java18\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,49 @@ +# Java 18 新特性 + +Java 18 于 2022 年 3 月发布。此版本带来了一个非常实用的开箱即用工具,并继续推进了多个重要的孵化和预览功能。 + +## 1. 默认编码为 UTF-8 + +这是一个重要的全局性变更。从 Java 18 开始,所有标准的 Java API 都将默认使用 UTF-8 编码,而不再依赖于操作系统、用户语言环境等外部因素。这解决了长期以来困扰开发者的编码不一致问题,大大提高了跨平台开发的可靠性。 + +## 2. 简单的 Web 服务器 + +JDK 内置了一个开箱即用的、最小化的静态 HTTP 文件服务器。它不是为了在生产环境替代 Tomcat、Jetty 等服务器,而是为了在开发、测试和教学场景中快速启动一个服务来共享文件。 + +**启动一个服务器:** +```bash +# 在你的项目目录下运行 +# 默认监听 8000 端口 +$ jwebserver + +# 也可以指定端口和目录 +$ jwebserver -p 8080 -d /path/to/files +``` + +## 3. Java API 文档中的代码片段 + +这是一个针对文档工具 (Javadoc) 的改进。现在可以使用 `@snippet` 标签在 API 文档中包含更丰富、更健壮的示例代码。这使得示例代码更容易被验证、高亮和维护。 + +## 4. Switch 的模式匹配 (第二次预览) + +Java 17 引入的 Switch 模式匹配在此版本中进入了第二次预览。主要根据社区反馈进行了一些改进,例如在处理 `null` 情况时更加完善。 + +```java +static String formatter(Object o) { + return switch (o) { + case Integer i -> String.format("int %d", i); + case Long l -> String.format("long %d", l); + // ... + case null -> "null"; // 可以直接处理 null case + default -> o.toString(); + }; +} +``` + +## 5. 外部函数和内存 API (第二次孵化) + +这个旨在替代 JNI 的 API 在此版本中进入了第二次孵化,API 设计上有了显著的改进,使其更加易用和强大。 + +## 6. Vector API (第三次孵化) + +用于高性能向量计算的 Vector API 也进入了第三次孵化阶段,继续根据反馈进行完善。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java19\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java19\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..3ad93aa --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java19\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,74 @@ +# Java 19 新特性 + +Java 19 于 2022 年 9 月发布。此版本带来了 Java 平台一个里程碑式的预览功能:虚拟线程(Virtual Threads),它有望彻底改变 Java 的并发编程模型。 + +## 1. 虚拟线程 (Virtual Threads - 预览功能) + +虚拟线程是 Project Loom 的核心成果。它是一种轻量级的线程,由 JVM 管理,而不是直接映射到操作系统线程。 + +- **目的**:极大地提高高吞吐量并发应用程序的性能和可伸缩性。开发者可以用传统的“一个请求一个线程”的同步阻塞式代码,来达到异步非阻塞代码的性能。 +- **特点**:创建成本极低,可以轻松创建数百万个虚拟线程。 + +**创建和使用虚拟线程:** +```java +// 直接创建并启动 +Thread.startVirtualThread(() -> { + System.out.println("Hello from a virtual thread!"); +}); + +// 使用 Executors 创建 +try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { + Future future = executor.submit(() -> System.out.println("Running in a virtual thread")); + future.get(); +} +``` + +## 2. 结构化并发 (Structured Concurrency - 孵化功能) + +这是一个新的并发编程模型,旨在简化多线程错误处理和任务协调。它将并发任务的生命周期视为一个单元,如果一个子任务失败,整个任务组可以被可靠地取消。 + +```java +// 示例:使用 StructuredTaskScope +// try (var scope = new StructuredTaskScope.ShutdownOnFailure()) { +// Future user = scope.fork(() -> findUser()); +// Future order = scope.fork(() -> fetchOrder()); +// +// scope.join(); // 等待所有子任务完成 +// scope.throwIfFailed(); // 如果有任何子任务失败,则抛出异常 +// +// // 两个任务都成功后,处理结果 +// String userInfo = user.resultNow(); +// int orderInfo = order.resultNow(); +// // ... +// } +``` + +## 3. Record 模式 (Record Patterns - 预览功能) + +扩展了模式匹配,使其可以用于解构 `record` 类型。这在 `instanceof` 和 `switch` 语句中非常有用。 + +**使用 Record 模式:** +```java +public record Point(int x, int y) {} + +static void printSum(Object obj) { + // 检查 obj 是否是 Point,如果是,则将其 x 和 y 解构到变量 ix 和 iy + if (obj instanceof Point(int ix, int iy)) { + System.out.println(ix + iy); + } +} + +// 也可以与 switch 模式匹配结合使用 +// switch (obj) { +// case Point(int x, int y) -> System.out.printf("Point at %d, %d%n", x, y); +// ... +// } +``` + +## 4. Switch 的模式匹配 (第三次预览) + +Switch 模式匹配在此版本中进入了第三次预览,继续根据反馈进行改进,例如增加了对 `when` 子句的支持,用于更复杂的条件判断。 + +## 5. 外部函数和内存 API (第二次预览) + +此 API 在 Java 19 中进入了第二次预览阶段(注意:Java 18 是第二次孵化,Java 19 是第二次预览),API 设计更加精炼,朝着最终定稿又迈进了一步。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java20\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java20\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..d2b5513 --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java20\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,41 @@ +# Java 20 新特性 + +Java 20 于 2023 年 3 月发布。此版本的主要工作是继续推进和完善在 Java 19 中引入的多个重要预览和孵化功能。 + +## 1. 虚拟线程 (Virtual Threads - 第二次预览) + +虚拟线程在此版本中进入了第二次预览。API 方面没有重大变化,主要是根据社区反馈进行了一些小的改进和错误修复,使其更加稳定和可靠。 + +## 2. 结构化并发 (Structured Concurrency - 第二次孵化) + +结构化并发在此版本中进入了第二次孵化。一个重要的变化是 `StructuredTaskScope` 进行了更新,可以支持在任务作用域内跨线程继承作用域值(Scoped Values),这对于在并发任务之间传递上下文信息非常有用。 + +## 3. 作用域值 (Scoped Values - 孵化功能) + +这是一个新的孵化功能,旨在提供一种在线程内部以及线程之间共享不可变数据的现代化方法,尤其是在使用虚拟线程时。 + +- **目的**:替代 `ThreadLocal`,特别是在虚拟线程场景下。`ThreadLocal` 在虚拟线程环境下存在一些问题(如内存泄漏风险、数据继承成本高)。 +- **特点**:数据是不可变的,并且只在特定的代码作用域内有效,可以安全地跨线程传递。 + +```java +// public final static ScopedValue LOGGED_IN_USER = ScopedValue.newInstance(); +// +// // 在一个作用域内设置值 +// ScopedValue.where(LOGGED_IN_USER, currentUser) +// .run(() -> { +// // 在这里,LOGGED_IN_USER.get() 会返回 currentUser +// processRequest(); +// }); +``` + +## 4. Record 模式 (Record Patterns - 第二次预览) + +Record 模式也进入了第二次预览。此版本的一个主要改进是允许在 Record 模式中进行类型参数的推断,并支持与 `for` 循环等语句结合使用。 + +## 5. Switch 的模式匹配 (第四次预览) + +Switch 的模式匹配在此版本中进入了第四次预览,API 已经非常稳定,主要进行了一些语法上的微调和对泛型模式匹配的增强,为在下一个 LTS 版本中最终定稿做好了准备。 + +## 6. 外部函数和内存 API (第二次预览) + +这个旨在替代 JNI 的 API 也进入了第二次预览,API 更加精炼,并统一了 `MemorySegment` 和 `MemoryAddress` 的接口,使其更易于使用。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java21\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java21\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..fd08ead --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java21\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,103 @@ +# Java 21 (LTS) 新特性 + +Java 21 于 2023 年 9 月发布,是继 Java 17 之后的最新一个长期支持(LTS)版本。它正式确定了虚拟线程、记录模式、Switch 模式匹配等一系列里程碑式的功能,标志着现代 Java 开发进入了一个新阶段。 + +## 1. 虚拟线程 (Virtual Threads - 标准版) + +经过两轮预览,虚拟线程在 Java 21 中被正式确定下来。开发者现在可以在生产环境中大规模使用轻量级线程,用同步的方式写出高并发、高吞吐量的应用程序,而无需复杂的异步编程。 + +```java +// 虚拟线程已成为标准功能 +try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { + for (int i = 0; i < 10_000; i++) { + executor.submit(() -> { + Thread.sleep(Duration.ofSeconds(1)); + return i; + }); + } +} // executor.close() 会隐式地等待所有任务完成 +``` + +## 2. 记录模式 (Record Patterns - 标准版) + +记录模式也在此版本中被正式确定下来。它允许在 `instanceof` 和 `switch` 中对 `record` 进行解构,使代码更加简洁和富有表现力。 + +```java +public record Point(int x, int y) {} + +// 记录模式已成为标准功能 +static void printSum(Object obj) { + if (obj instanceof Point(int x, int y)) { + System.out.println(x + y); + } +} +``` + +## 3. Switch 的模式匹配 (标准版) + +经过多轮预览,Switch 的模式匹配终于在 Java 21 中转正。它极大地增强了 `switch` 的能力,使其可以根据类型和 `record` 结构进行分支判断,并支持 `when` 子句进行更精细的控制。 + +```java +// Switch 模式匹配已成为标准功能 +static String formatter(Object o) { + return switch (o) { + case Integer i -> String.format("int %d", i); + case Long l -> String.format("long %d", l); + case Double d -> String.format("double %f", d); + case String s -> String.format("String %s", s); + case Point(int x, int y) -> String.format("Point at %d, %d", x, y); + default -> o.toString(); + }; +} +``` + +## 4. 序列化集合 (Sequenced Collections) + +引入了一套新的集合接口,用于表示具有确定出现顺序的集合。`List` 和 `Deque` 等都实现了新的 `SequencedCollection` 接口。 + +- **核心接口**:`SequencedCollection`, `SequencedSet`, `SequencedMap`。 +- **新方法**:提供了如 `getFirst()`, `getLast()`, `addFirst()`, `addLast()`, `reversed()` 等统一的 API。 + +```java +List list = new ArrayList<>(); +list.add("A"); +list.add("B"); + +// 新 API +System.out.println(list.getFirst()); // A +System.out.println(list.getLast()); // B + +// 获取一个反向视图 +List reversedList = list.reversed(); +System.out.println(reversedList); // [B, A] +``` + +## 5. 字符串模板 (String Templates - 预览功能) + +这是一个新的预览功能,旨在简化包含运行时表达式的字符串的编写,比传统的字符串拼接或 `String.format()` 更安全、更强大。 + +```java +// 使用 STR 模板处理器 +String name = "Joan"; +String info = STR."My name is \{name}"; +System.out.println(info); // My name is Joan +``` + +## 6. 未命名模式和变量 (Unnamed Patterns and Variables - 预览功能) + +允许使用下划线 `_` 来表示未使用的模式变量或局部变量,以减少代码冗余。 + +```java +// 忽略 record 模式中的某个组件 +// if (obj instanceof Point(int x, int _)) { ... } + +// 忽略 switch case 中的变量 +// case Point(int x, int _) -> ... + +// 忽略 try-with-resources 中的资源变量 +// try (var _ = ScopedValue.where(...)) { ... } +``` + +## 7. 结构化并发 (Structured Concurrency - 预览功能) & 作用域值 (Scoped Values - 预览功能) + +这两个在之前版本中孵化的功能,在 Java 21 中都进入了预览阶段,API 更加成熟,离最终定稿更近一步。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java9\346\226\260\347\211\271\346\200\247.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java9\346\226\260\347\211\271\346\200\247.md" new file mode 100644 index 0000000..d1ed4d1 --- /dev/null +++ "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/Java9\346\226\260\347\211\271\346\200\247.md" @@ -0,0 +1,108 @@ +# Java 9 新特性 + +Java 9 在 2017 年 9 月发布,带来了许多重大变化,其中最引人注目的是 Java 平台模块化系统(JPMS)。 + +## 1. 模块化系统 (Project Jigsaw) + +模块化是 Java 9 的核心功能。它将 JDK 划分为一组模块,并允许开发者将自己的代码也打包成模块。 + +- **目的**:解决 JAR Hell 问题,提高安全性(隐藏内部实现),提升性能。 +- **核心**:`module-info.java` 文件。 + +一个简单的模块定义如下: + +```java +// module-info.java +module com.example.mymodule { + // 声明依赖于 java.sql 模块 + requires java.sql; + + // 声明将 com.example.mypackage 包导出,其他模块可以使用 + exports com.example.mypackage; +} +``` + +## 2. JShell (交互式命令行) + +Java 9 引入了 `jshell`,这是一个交互式的 Read-Eval-Print Loop (REPL) 工具,可以快速测试代码片段,无需创建完整的类。 + +启动 `jshell`: +```bash +$ jshell +| 欢迎使用 JShell -- 版本 9 +| 要大致了解该版本, 请键入: /help intro + +jshell> int x = 10; +x ==> 10 + +jshell> System.out.println("Hello, JShell!"); +Hello, JShell! +``` + +## 3. 接口的私有方法 + +Java 8 允许在接口中使用 `default` 和 `static` 方法。Java 9 更进一步,允许定义 `private` 方法。这有助于在接口内部重用代码,避免将实现细节暴露给外部。 + +```java +public interface MyInterface { + + void normalMethod(); + + default void method1() { + init(); + System.out.println("Executing default method 1"); + } + + default void method2() { + init(); + System.out.println("Executing default method 2"); + } + + // 私有方法,用于在默认方法之间共享代码 + private void init() { + System.out.println("Initializing..."); + } +} +``` + +## 4. Stream API 的改进 + +Stream API 增加了四个有用的新方法:`takeWhile`, `dropWhile`, `ofNullable`, `iterate`。 + +- **`takeWhile(Predicate)`**: 返回从流的开头开始,满足谓词条件的元素。一旦遇到不满足条件的元素,立即停止。 +- **`dropWhile(Predicate)`**: `takeWhile` 的反操作。丢弃从流的开头开始,满足谓词条件的元素,然后返回剩余的流。 + +```java +Stream.of(1, 2, 3, 4, 5, 1, 2) + .takeWhile(n -> n < 4) + .forEach(System.out::print); // 输出: 123 + +Stream.of(1, 2, 3, 4, 5, 1, 2) + .dropWhile(n -> n < 4) + .forEach(System.out::print); // 输出: 4512 +``` + +## 5. Try-With-Resources 语法的改进 + +Java 9 中,如果资源已经是 `final` 或等效于 `final` 的变量,则可以在 `try-with-resources` 语句中直接使用,而无需在 `try()` 中声明一个新变量。 + +```java +// Java 8 +Reader reader = new StringReader("test"); +try (Reader r = reader) { + // ... +} + +// Java 9 +Reader reader = new StringReader("test"); +try (reader) { // 更简洁 + // ... +} +``` + +## 6. 其他重要特性 + +- **`Optional` 类增强**:增加了 `ifPresentOrElse()`, `or()`, `stream()` 等方法。 +- **多版本兼容 JAR 包**:允许一个 JAR 文件包含针对不同 Java 版本的类文件。 +- **HTTP/2 客户端 API (孵化)**:引入了新的、现代的 HTTP 客户端 API,用于替代旧的 `HttpURLConnection`。 +- **`ProcessHandle` API**:提供了管理和查询操作系统进程的能力。 diff --git "a/Java\347\211\210\346\234\254\346\233\264\346\226\260/README.md" "b/Java\347\211\210\346\234\254\346\233\264\346\226\260/README.md" new file mode 100644 index 0000000..e69de29 From e88e019c68ce1b9e8f44f24b085d63dd49a9c4a6 Mon Sep 17 00:00:00 2001 From: taoking <980512523@qq.com> Date: Fri, 19 Sep 2025 00:21:11 +0800 Subject: [PATCH 3/5] springboot --- .idea/AugmentWebviewStateStore.xml | 2 +- ...72\345\210\253\350\257\246\350\247\243.md" | 893 +++++++++++ ...46\344\271\240\346\214\207\345\215\227.md" | 1303 +++++++++++++++++ 3 files changed, 2197 insertions(+), 1 deletion(-) create mode 100644 "Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\344\270\216SpringBoot3\345\214\272\345\210\253\350\257\246\350\247\243.md" create mode 100644 "Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\345\256\214\346\225\264\345\255\246\344\271\240\346\214\207\345\215\227.md" diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml index 48b0c02..b6cf9d3 100644 --- a/.idea/AugmentWebviewStateStore.xml +++ b/.idea/AugmentWebviewStateStore.xml @@ -3,7 +3,7 @@ diff --git "a/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\344\270\216SpringBoot3\345\214\272\345\210\253\350\257\246\350\247\243.md" "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\344\270\216SpringBoot3\345\214\272\345\210\253\350\257\246\350\247\243.md" new file mode 100644 index 0000000..c5698f1 --- /dev/null +++ "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\344\270\216SpringBoot3\345\214\272\345\210\253\350\257\246\350\247\243.md" @@ -0,0 +1,893 @@ +# Spring Boot 2 与 Spring Boot 3 区别详解 + +## 📋 目录 +- [版本概述](#版本概述) +- [核心依赖变化](#核心依赖变化) +- [Java版本要求](#java版本要求) +- [配置变化](#配置变化) +- [API变化](#api变化) +- [性能改进](#性能改进) +- [迁移指南](#迁移指南) +- [面试重点](#面试重点) + +## 🎯 版本概述 + +### Spring Boot 2.x vs 3.x 基本信息 + +| 特性 | Spring Boot 2.x | Spring Boot 3.x | +|------|----------------|----------------| +| 发布时间 | 2018年3月 | 2022年11月 | +| Spring Framework | 5.x | 6.x | +| 最低Java版本 | Java 8 | Java 17 | +| Jakarta EE | 不支持 | 支持 | +| GraalVM原生镜像 | 实验性支持 | 生产就绪 | +| 可观测性 | Micrometer | Micrometer + OpenTelemetry | +| 支持周期 | 2023年11月结束 | 2025年11月结束 | + +## 🔧 核心依赖变化 + +### 1. Spring Framework版本升级 + +```java +// Spring Boot 2.x 基于 Spring Framework 5.x +@Configuration +public class SpringBoot2Config { + + // 使用传统的Servlet API + @Bean + public FilterRegistrationBean myFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(new MyFilter()); + registration.addUrlPatterns("/*"); + return registration; + } +} + +// Spring Boot 3.x 基于 Spring Framework 6.x +@Configuration +public class SpringBoot3Config { + + // 支持更现代的配置方式 + @Bean + public FilterRegistrationBean myFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(new MyFilter()); + registration.addUrlPatterns("/*"); + // 新增的配置选项 + registration.setAsyncSupported(true); + return registration; + } +} +``` + +### 2. Jakarta EE迁移 + +```java +// Spring Boot 2.x - 使用 javax.* 包 +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.validation.constraints.NotNull; + +@Entity +public class User { + @Id + private Long id; + + @NotNull + private String name; + + // getter/setter +} + +// Spring Boot 3.x - 使用 jakarta.* 包 +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotNull; + +@Entity +public class User { + @Id + private Long id; + + @NotNull + private String name; + + // getter/setter +} +``` + +## ☕ Java版本要求 + +### 1. 最低版本要求变化 + +```java +// Spring Boot 2.x - 支持Java 8+ +public class SpringBoot2Features { + + // 可以使用Java 8特性 + public Optional processData(List data) { + return data.stream() + .filter(s -> s.length() > 5) + .findFirst(); + } + + // 但不能使用Java 17+的新特性 +} + +// Spring Boot 3.x - 要求Java 17+ +public class SpringBoot3Features { + + // 可以使用Java 17的新特性 + public sealed interface Shape permits Circle, Rectangle { + double area(); + } + + public record Circle(double radius) implements Shape { + @Override + public double area() { + return Math.PI * radius * radius; + } + } + + public record Rectangle(double width, double height) implements Shape { + @Override + public double area() { + return width * height; + } + } + + // 使用文本块 + public String getJsonTemplate() { + return """ + { + "name": "%s", + "age": %d, + "active": %b + } + """; + } +} +``` + +### 2. 性能优化 + +```java +// Spring Boot 3.x 利用Java 17的性能改进 +@Service +public class PerformanceOptimizedService { + + // 利用Java 17的向量API(预览特性) + public void processLargeDataset(int[] data) { + // 向量化操作,性能更好 + IntVector.SPECIES_256.fromArray(data, 0) + .add(IntVector.SPECIES_256.broadcast(10)) + .intoArray(data, 0); + } + + // 利用改进的垃圾收集器 + @EventListener + public void handleLargeDataProcessing(DataProcessingEvent event) { + // ZGC和G1GC的改进使得大内存应用性能更好 + processLargeDataInMemory(event.getData()); + } +} +``` + +## ⚙️ 配置变化 + +### 1. 配置属性变化 + +```yaml +# Spring Boot 2.x 配置 +spring: + datasource: + url: jdbc:mysql://localhost:3306/db + username: user + password: pass + jpa: + hibernate: + ddl-auto: update + security: + user: + name: admin + password: secret + +# Spring Boot 3.x 配置变化 +spring: + datasource: + url: jdbc:mysql://localhost:3306/db + username: user + password: pass + jpa: + hibernate: + ddl-auto: update + # 安全配置方式改变 + security: + user: + name: admin + password: secret + roles: ADMIN + # 新增的可观测性配置 + management: + tracing: + sampling: + probability: 1.0 + metrics: + distribution: + percentiles-histogram: + http.server.requests: true +``` + +### 2. 自动配置变化 + +```java +// Spring Boot 2.x 安全配置 +@Configuration +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.authorizeRequests() + .antMatchers("/public/**").permitAll() + .anyRequest().authenticated() + .and() + .formLogin(); + } +} + +// Spring Boot 3.x 安全配置(WebSecurityConfigurerAdapter已废弃) +@Configuration +@EnableWebSecurity +public class SecurityConfig { + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests(authz -> authz + .requestMatchers("/public/**").permitAll() + .anyRequest().authenticated() + ) + .formLogin(Customizer.withDefaults()); + + return http.build(); + } +} +``` + +## 🔄 API变化 + +### 1. 废弃的API + +```java +// Spring Boot 2.x 中可用但在3.x中废弃的API +public class DeprecatedAPIs { + + // 1. WebSecurityConfigurerAdapter 已废弃 + // @Deprecated in Spring Boot 3.x + public class OldSecurityConfig extends WebSecurityConfigurerAdapter { + // 不再推荐使用 + } + + // 2. 一些Actuator端点变化 + @Deprecated + public void oldActuatorUsage() { + // 某些端点路径和响应格式发生变化 + } + + // 3. 配置属性绑定方式变化 + @ConfigurationProperties(prefix = "app") + public class OldConfigProperties { + // 某些绑定方式在3.x中不再支持 + } +} + +// Spring Boot 3.x 推荐的新API +public class NewAPIs { + + // 1. 新的安全配置方式 + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + return http.build(); + } + + // 2. 改进的配置属性绑定 + @ConfigurationProperties(prefix = "app") + @ConstructorBinding + public record AppProperties( + String name, + Duration timeout, + List features + ) {} +} +``` + +### 2. 新增功能 + +```java +// Spring Boot 3.x 新增功能 +@RestController +public class SpringBoot3NewFeatures { + + // 1. 改进的问题详情支持(RFC 7807) + @GetMapping("/error-demo") + public ResponseEntity errorDemo() { + ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail( + HttpStatus.BAD_REQUEST, + "Invalid request parameter" + ); + problemDetail.setTitle("Validation Error"); + problemDetail.setProperty("timestamp", Instant.now()); + + return ResponseEntity.badRequest().body(problemDetail); + } + + // 2. 原生镜像支持改进 + @GetMapping("/native-ready") + public String nativeReady() { + // 更好的GraalVM原生镜像支持 + return "This endpoint works well in native image"; + } + + // 3. 可观测性改进 + @GetMapping("/traced-endpoint") + @Timed(name = "custom.endpoint.timer", description = "Custom endpoint timer") + public String tracedEndpoint() { + // 自动集成OpenTelemetry追踪 + return "This request is automatically traced"; + } +} +``` + +## 📈 性能改进 + +### 1. 启动性能 + +```java +// Spring Boot 3.x 启动性能优化 +@SpringBootApplication +public class OptimizedApplication { + + public static void main(String[] args) { + // 1. 改进的类路径扫描 + SpringApplication app = new SpringApplication(OptimizedApplication.class); + + // 2. 更快的Bean初始化 + app.setLazyInitialization(true); + + // 3. 原生镜像支持 + app.run(args); + } +} + +// 原生镜像配置 +@Configuration +@ImportRuntimeHints(MyRuntimeHints.class) +public class NativeImageConfig { + + // 为原生镜像提供运行时提示 + static class MyRuntimeHints implements RuntimeHintsRegistrar { + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + hints.reflection().registerType(MyService.class, + MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.INVOKE_DECLARED_METHODS); + } + } +} +``` + +### 2. 内存使用优化 + +```java +// Spring Boot 3.x 内存优化 +@Configuration +public class MemoryOptimization { + + // 1. 改进的Bean定义处理 + @Bean + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public ExpensiveService expensiveService() { + // 更高效的原型Bean创建 + return new ExpensiveService(); + } + + // 2. 优化的自动配置 + @ConditionalOnClass(name = "com.example.OptionalDependency") + @Bean + public OptionalService optionalService() { + // 更智能的条件判断,减少不必要的类加载 + return new OptionalService(); + } +} +``` + +## 🔄 迁移指南 + +### 1. 依赖迁移 + +```xml + + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + + org.springframework.boot + spring-boot-starter-parent + 3.2.1 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-actuator + + +``` + +### 2. 代码迁移步骤 + +```java +// 迁移检查清单 +public class MigrationChecklist { + + /* + * 1. 更新Java版本到17+ + * 2. 替换javax.*包为jakarta.*包 + * 3. 更新Spring Security配置 + * 4. 检查废弃的API使用 + * 5. 更新测试代码 + * 6. 验证第三方库兼容性 + * 7. 更新配置文件 + * 8. 测试原生镜像构建(可选) + */ + + // 自动化迁移工具使用 + public void useOpenRewriteMigration() { + /* + * 使用OpenRewrite自动迁移工具: + * + * 1. 添加OpenRewrite插件到pom.xml + * 2. 运行迁移命令: + * mvn org.openrewrite.maven:rewrite-maven-plugin:run + * -Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-spring:LATEST + * -Drewrite.activeRecipes=org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0 + */ + } +} +``` + +## 🎯 面试重点 + +### Q1: Spring Boot 3相比Spring Boot 2有哪些重大变化? + +**答案:** +```java +public class MajorChanges { + + /* + * 1. 基础要求变化 + * - 最低Java版本:Java 8 → Java 17 + * - Spring Framework:5.x → 6.x + * - Jakarta EE:javax.* → jakarta.* + * + * 2. 性能改进 + * - 原生镜像支持从实验性变为生产就绪 + * - 启动时间和内存使用优化 + * - 更好的GraalVM集成 + * + * 3. 可观测性增强 + * - 内置OpenTelemetry支持 + * - 改进的Micrometer集成 + * - 更丰富的监控指标 + * + * 4. API现代化 + * - 废弃WebSecurityConfigurerAdapter + * - 改进的配置属性绑定 + * - 新的问题详情支持(RFC 7807) + */ +} +``` + +### Q2: 为什么Spring Boot 3要求Java 17? + +**答案:** +```java +public class Java17Requirements { + + // 1. 性能优势 + public void performanceBenefits() { + /* + * - JVM性能改进:ZGC、G1GC优化 + * - 编译器优化:更好的JIT编译 + * - 内存管理:改进的垃圾收集算法 + */ + } + + // 2. 语言特性 + public sealed interface ModernJavaFeatures permits Record, TextBlock { + // 密封类、记录类、文本块等新特性 + } + + public record ConfigurationData(String name, int port, boolean enabled) + implements ModernJavaFeatures { + // 记录类简化数据传输对象 + } + + // 3. 长期支持 + public void longTermSupport() { + /* + * - Java 17是LTS版本,支持周期长 + * - 企业级应用的稳定性保证 + * - 安全更新和bug修复 + */ + } +} +``` + +### Q3: Jakarta EE迁移有什么影响? + +**答案:** +```java +// 迁移影响分析 +public class JakartaEEMigrationImpact { + + // 1. 包名变化 + // Spring Boot 2.x + // import javax.servlet.http.HttpServletRequest; + // import javax.persistence.Entity; + // import javax.validation.constraints.NotNull; + + // Spring Boot 3.x + import jakarta.servlet.http.HttpServletRequest; + import jakarta.persistence.Entity; + import jakarta.validation.constraints.NotNull; + + // 2. 第三方库兼容性 + public void libraryCompatibility() { + /* + * 影响的库: + * - Hibernate 6.x+ + * - Jackson 2.14+ + * - Tomcat 10.x+ + * - 需要检查所有使用javax.*的依赖 + */ + } + + // 3. 迁移策略 + public void migrationStrategy() { + /* + * 1. 使用IDE的全局替换功能 + * 2. 使用OpenRewrite自动迁移工具 + * 3. 逐步迁移,先更新核心模块 + * 4. 充分测试,特别是集成测试 + */ + } +} +``` + +### Q4: Spring Boot 3的原生镜像支持有什么优势? + +**答案:** +```java +@SpringBootApplication +public class NativeImageAdvantages { + + public static void main(String[] args) { + SpringApplication.run(NativeImageAdvantages.class, args); + } + + /* + * 原生镜像优势: + * + * 1. 启动速度 + * - 传统JVM:2-5秒 + * - 原生镜像:50-200毫秒 + * + * 2. 内存占用 + * - 传统JVM:100-500MB + * - 原生镜像:20-100MB + * + * 3. 部署优势 + * - 无需JVM环境 + * - 容器镜像更小 + * - 冷启动更快 + * + * 4. 云原生友好 + * - 适合Serverless + * - 适合微服务 + * - 适合容器化部署 + */ +} + +// 原生镜像配置示例 +@Configuration +public class NativeImageConfig { + + @Bean + @RegisterReflectionForBinding(UserDto.class) + public UserService userService() { + return new UserService(); + } + + // 运行时提示 + @ImportRuntimeHints(CustomRuntimeHints.class) + static class CustomRuntimeHints implements RuntimeHintsRegistrar { + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + // 注册反射、资源、代理等提示 + hints.reflection().registerType(UserDto.class); + hints.resources().registerPattern("static/**"); + } + } +} +``` + +### Q5: Spring Boot 3的可观测性改进体现在哪里? + +**答案:** +```java +@RestController +public class ObservabilityImprovements { + + // 1. 自动追踪 + @GetMapping("/api/users/{id}") + @Timed(name = "user.get", description = "Get user by ID") + public User getUser(@PathVariable Long id) { + // 自动生成追踪信息,无需手动配置 + return userService.findById(id); + } + + // 2. 改进的指标 + @EventListener + public void handleUserCreated(UserCreatedEvent event) { + // 自动记录业务指标 + Metrics.counter("user.created", + "type", event.getUser().getType()).increment(); + } + + // 3. 分布式追踪 + @Async + public CompletableFuture processAsync() { + // 追踪信息自动传播到异步线程 + return CompletableFuture.completedFuture("processed"); + } +} + +// 配置示例 +/* +management: + tracing: + sampling: + probability: 1.0 + metrics: + distribution: + percentiles-histogram: + http.server.requests: true + endpoints: + web: + exposure: + include: health,info,metrics,prometheus +*/ +``` + +## 🔧 实际迁移案例 + +### 案例1:电商系统迁移 + +```java +// 迁移前(Spring Boot 2.x) +@RestController +@RequestMapping("/api/orders") +public class OrderControllerV2 { + + @Autowired + private OrderService orderService; + + @PostMapping + public ResponseEntity createOrder(@Valid @RequestBody OrderRequest request, + HttpServletRequest httpRequest) { + try { + Order order = orderService.createOrder(request); + return ResponseEntity.ok(order); + } catch (ValidationException e) { + return ResponseEntity.badRequest() + .body(Map.of("error", e.getMessage())); + } + } +} + +// 迁移后(Spring Boot 3.x) +@RestController +@RequestMapping("/api/orders") +public class OrderControllerV3 { + + private final OrderService orderService; + + // 构造函数注入(推荐) + public OrderControllerV3(OrderService orderService) { + this.orderService = orderService; + } + + @PostMapping + public ResponseEntity createOrder(@Valid @RequestBody OrderRequest request, + HttpServletRequest httpRequest) { + try { + Order order = orderService.createOrder(request); + return ResponseEntity.ok(order); + } catch (ValidationException e) { + // 使用RFC 7807问题详情 + ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail( + HttpStatus.BAD_REQUEST, e.getMessage()); + problemDetail.setTitle("Order Validation Failed"); + problemDetail.setProperty("timestamp", Instant.now()); + + return ResponseEntity.badRequest().body(problemDetail); + } + } +} +``` + +### 案例2:安全配置迁移 + +```java +// Spring Boot 2.x 安全配置 +@Configuration +@EnableWebSecurity +public class SecurityConfigV2 extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf().disable() + .authorizeRequests() + .antMatchers("/api/public/**").permitAll() + .antMatchers("/api/admin/**").hasRole("ADMIN") + .anyRequest().authenticated() + .and() + .oauth2ResourceServer() + .jwt(); + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication() + .withUser("admin") + .password("{noop}password") + .roles("ADMIN"); + } +} + +// Spring Boot 3.x 安全配置 +@Configuration +@EnableWebSecurity +public class SecurityConfigV3 { + + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http.csrf(csrf -> csrf.disable()) + .authorizeHttpRequests(authz -> authz + .requestMatchers("/api/public/**").permitAll() + .requestMatchers("/api/admin/**").hasRole("ADMIN") + .anyRequest().authenticated() + ) + .oauth2ResourceServer(oauth2 -> oauth2 + .jwt(Customizer.withDefaults()) + ); + + return http.build(); + } + + @Bean + public InMemoryUserDetailsManager userDetailsService() { + UserDetails admin = User.builder() + .username("admin") + .password("{noop}password") + .roles("ADMIN") + .build(); + + return new InMemoryUserDetailsManager(admin); + } +} +``` + +## 📊 性能对比 + +### 启动时间对比 + +```java +// 性能测试结果 +public class PerformanceComparison { + + /* + * 启动时间对比(相同应用): + * + * Spring Boot 2.7.x: + * - 传统JVM启动:3.2秒 + * - 内存占用:280MB + * + * Spring Boot 3.2.x: + * - 传统JVM启动:2.8秒(12%提升) + * - 原生镜像启动:0.08秒(97%提升) + * - 内存占用:220MB(21%减少) + * - 原生镜像内存:45MB(84%减少) + */ + + // 构建时间对比 + /* + * Maven构建时间: + * - Spring Boot 2.x:45秒 + * - Spring Boot 3.x:38秒 + * - 原生镜像构建:3分钟 + */ +} +``` + +## 🚀 升级建议 + +### 升级时机选择 + +```java +public class UpgradeStrategy { + + /* + * 建议升级的场景: + * + * 1. 新项目 + * - 直接使用Spring Boot 3.x + * - 享受最新特性和性能 + * + * 2. 现有项目升级条件 + * - Java版本可以升级到17+ + * - 第三方依赖支持Jakarta EE + * - 有充足的测试时间 + * + * 3. 暂缓升级的场景 + * - 大量遗留代码 + * - 关键第三方库不兼容 + * - 生产环境稳定性要求极高 + */ + + // 渐进式升级策略 + public void gradualUpgrade() { + /* + * 1. 先升级开发环境 + * 2. 升级测试环境 + * 3. 小范围生产验证 + * 4. 全面生产部署 + */ + } +} +``` + +--- + +*Spring Boot 2与3的详细对比分析完成,这些信息将帮助开发者做出明智的升级决策,并在面试中展现对技术演进的深入理解。* diff --git "a/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\345\256\214\346\225\264\345\255\246\344\271\240\346\214\207\345\215\227.md" "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\345\256\214\346\225\264\345\255\246\344\271\240\346\214\207\345\215\227.md" new file mode 100644 index 0000000..aa572c2 --- /dev/null +++ "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/spring \351\235\242\350\257\225\351\242\230/SpringBoot2\345\256\214\346\225\264\345\255\246\344\271\240\346\214\207\345\215\227.md" @@ -0,0 +1,1303 @@ +# Spring Boot 2 完整学习指南 - 生命周期、加载方式、运行流程 + +## 📋 目录 +- [Spring Boot 2 概述](#spring-boot-2-概述) +- [Spring Boot 生命周期](#spring-boot-生命周期) +- [自动配置原理](#自动配置原理) +- [启动流程详解](#启动流程详解) +- [Bean加载机制](#bean加载机制) +- [配置加载顺序](#配置加载顺序) +- [核心注解解析](#核心注解解析) +- [面试常见问题](#面试常见问题) + +## 🎯 Spring Boot 2 概述 + +### 什么是Spring Boot? + +Spring Boot是Spring团队提供的全新框架,设计目的是简化Spring应用的初始搭建以及开发过程。 + +**核心特性:** +- **约定优于配置**:提供默认配置,减少样板代码 +- **自动配置**:根据classpath自动配置Spring应用 +- **嵌入式服务器**:内置Tomcat、Jetty等服务器 +- **生产就绪**:提供监控、健康检查等功能 + +### Spring Boot 2.x 主要改进 + +```java +// Spring Boot 2.x 主要变化 +public class SpringBoot2Changes { + + // 1. 基于Spring Framework 5.x + // 2. 最低JDK版本要求:Java 8 + // 3. 支持响应式编程(WebFlux) + // 4. 配置属性绑定改进 + // 5. Actuator端点重构 + // 6. 安全配置简化 +} +``` + +## 🔄 Spring Boot 生命周期 + +### 1. 应用生命周期概览 + +```java +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + // 1. 创建SpringApplication实例 + SpringApplication app = new SpringApplication(Application.class); + + // 2. 运行应用 + ConfigurableApplicationContext context = app.run(args); + + // 3. 应用运行中... + + // 4. 关闭应用 + context.close(); + } +} +``` + +### 2. 详细生命周期阶段 + +```java +@Component +public class ApplicationLifecycleListener { + + // 阶段1:应用启动前 + @EventListener + public void handleApplicationStartingEvent(ApplicationStartingEvent event) { + System.out.println("1. 应用开始启动"); + } + + // 阶段2:环境准备完成 + @EventListener + public void handleApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event) { + System.out.println("2. 环境准备完成"); + } + + // 阶段3:上下文准备完成 + @EventListener + public void handleApplicationContextInitializedEvent(ApplicationContextInitializedEvent event) { + System.out.println("3. 上下文初始化完成"); + } + + // 阶段4:上下文准备完成 + @EventListener + public void handleApplicationPreparedEvent(ApplicationPreparedEvent event) { + System.out.println("4. 上下文准备完成"); + } + + // 阶段5:应用启动完成 + @EventListener + public void handleApplicationStartedEvent(ApplicationStartedEvent event) { + System.out.println("5. 应用启动完成"); + } + + // 阶段6:应用就绪 + @EventListener + public void handleApplicationReadyEvent(ApplicationReadyEvent event) { + System.out.println("6. 应用就绪,可以接收请求"); + } + + // 阶段7:应用启动失败 + @EventListener + public void handleApplicationFailedEvent(ApplicationFailedEvent event) { + System.out.println("7. 应用启动失败"); + } +} +``` + +### 3. Bean生命周期 + +```java +@Component +public class BeanLifecycleDemo implements InitializingBean, DisposableBean { + + private String name; + + // 1. 构造函数 + public BeanLifecycleDemo() { + System.out.println("1. 构造函数执行"); + } + + // 2. 属性注入 + @Autowired + public void setName(@Value("${app.name:demo}") String name) { + this.name = name; + System.out.println("2. 属性注入完成: " + name); + } + + // 3. BeanNameAware + @Override + public void setBeanName(String name) { + System.out.println("3. BeanNameAware: " + name); + } + + // 4. BeanFactoryAware + @Override + public void setBeanFactory(BeanFactory beanFactory) { + System.out.println("4. BeanFactoryAware"); + } + + // 5. ApplicationContextAware + @Override + public void setApplicationContext(ApplicationContext applicationContext) { + System.out.println("5. ApplicationContextAware"); + } + + // 6. @PostConstruct + @PostConstruct + public void postConstruct() { + System.out.println("6. @PostConstruct执行"); + } + + // 7. InitializingBean + @Override + public void afterPropertiesSet() { + System.out.println("7. InitializingBean.afterPropertiesSet()"); + } + + // 8. @PreDestroy + @PreDestroy + public void preDestroy() { + System.out.println("8. @PreDestroy执行"); + } + + // 9. DisposableBean + @Override + public void destroy() { + System.out.println("9. DisposableBean.destroy()"); + } +} +``` + +## ⚙️ 自动配置原理 + +### 1. @SpringBootApplication注解解析 + +```java +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@SpringBootConfiguration // 等同于@Configuration +@EnableAutoConfiguration // 启用自动配置 +@ComponentScan(excludeFilters = { // 组件扫描 + @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), + @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) +}) +public @interface SpringBootApplication { + // ... +} +``` + +### 2. @EnableAutoConfiguration工作原理 + +```java +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@AutoConfigurationPackage +@Import(AutoConfigurationImportSelector.class) // 关键:导入自动配置选择器 +public @interface EnableAutoConfiguration { + // ... +} + +// 自动配置导入选择器 +public class AutoConfigurationImportSelector implements DeferredImportSelector { + + @Override + public String[] selectImports(AnnotationMetadata annotationMetadata) { + // 1. 检查自动配置是否启用 + if (!isEnabled(annotationMetadata)) { + return NO_IMPORTS; + } + + // 2. 获取自动配置条目 + AutoConfigurationEntry autoConfigurationEntry = + getAutoConfigurationEntry(annotationMetadata); + + return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations()); + } + + protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) { + // 3. 加载spring.factories中的配置类 + List configurations = getCandidateConfigurations(annotationMetadata, attributes); + + // 4. 去重 + configurations = removeDuplicates(configurations); + + // 5. 排除不需要的配置 + Set exclusions = getExclusions(annotationMetadata, attributes); + configurations.removeAll(exclusions); + + // 6. 过滤(根据条件注解) + configurations = getConfigurationClassFilter().filter(configurations); + + return new AutoConfigurationEntry(configurations, exclusions); + } +} +``` + +### 3. 条件注解机制 + +```java +// 示例:Redis自动配置 +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass(RedisOperations.class) // 类路径存在RedisOperations +@EnableConfigurationProperties(RedisProperties.class) // 启用配置属性 +@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class }) +public class RedisAutoConfiguration { + + @Bean + @ConditionalOnMissingBean(name = "redisTemplate") // 不存在redisTemplate bean + @ConditionalOnSingleCandidate(RedisConnectionFactory.class) // 存在唯一的连接工厂 + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(redisConnectionFactory); + return template; + } + + @Bean + @ConditionalOnMissingBean // 不存在StringRedisTemplate bean + @ConditionalOnSingleCandidate(RedisConnectionFactory.class) + public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + return new StringRedisTemplate(redisConnectionFactory); + } +} +``` + +## 🚀 启动流程详解 + +### 1. SpringApplication.run()方法解析 + +```java +public class SpringApplication { + + public ConfigurableApplicationContext run(String... args) { + // 1. 创建启动时间监控 + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + // 2. 声明应用上下文和异常报告器 + DefaultBootstrapContext bootstrapContext = createBootstrapContext(); + ConfigurableApplicationContext context = null; + Collection exceptionReporters = new ArrayList<>(); + + // 3. 设置系统属性 + configureHeadlessProperty(); + + // 4. 获取运行监听器 + SpringApplicationRunListeners listeners = getRunListeners(args); + listeners.starting(bootstrapContext, this.mainApplicationClass); + + try { + // 5. 准备应用参数 + ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); + + // 6. 准备环境 + ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments); + configureIgnoreBeanInfo(environment); + + // 7. 打印Banner + Banner printedBanner = printBanner(environment); + + // 8. 创建应用上下文 + context = createApplicationContext(); + context.setApplicationStartup(this.applicationStartup); + + // 9. 准备上下文 + prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner); + + // 10. 刷新上下文(核心) + refreshContext(context); + + // 11. 刷新后处理 + afterRefresh(context, applicationArguments); + + // 12. 停止计时 + stopWatch.stop(); + + // 13. 发布启动完成事件 + listeners.started(context); + + // 14. 调用ApplicationRunner和CommandLineRunner + callRunners(context, applicationArguments); + + } catch (Throwable ex) { + handleRunFailure(context, ex, listeners); + throw new IllegalStateException(ex); + } + + try { + // 15. 发布就绪事件 + listeners.running(context); + } catch (Throwable ex) { + handleRunFailure(context, ex, null); + throw new IllegalStateException(ex); + } + + return context; + } +} +``` + +### 2. 上下文刷新过程 + +```java +// AbstractApplicationContext.refresh()方法 +@Override +public void refresh() throws BeansException, IllegalStateException { + synchronized (this.startupShutdownMonitor) { + StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh"); + + // 1. 准备刷新 + prepareRefresh(); + + // 2. 获取BeanFactory + ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); + + // 3. 准备BeanFactory + prepareBeanFactory(beanFactory); + + try { + // 4. 后置处理BeanFactory + postProcessBeanFactory(beanFactory); + + StartupStep beanPostProcess = this.applicationStartup.start("spring.context.beans.post-process"); + + // 5. 调用BeanFactoryPostProcessor + invokeBeanFactoryPostProcessors(beanFactory); + + // 6. 注册BeanPostProcessor + registerBeanPostProcessors(beanFactory); + + beanPostProcess.end(); + + // 7. 初始化MessageSource + initMessageSource(); + + // 8. 初始化事件多播器 + initApplicationEventMulticaster(); + + // 9. 刷新特定上下文(模板方法) + onRefresh(); + + // 10. 注册监听器 + registerListeners(); + + // 11. 完成BeanFactory初始化 + finishBeanFactoryInitialization(beanFactory); + + // 12. 完成刷新 + finishRefresh(); + } catch (BeansException ex) { + // 销毁已创建的Bean + destroyBeans(); + cancelRefresh(ex); + throw ex; + } finally { + resetCommonCaches(); + contextRefresh.end(); + } + } +} +``` + +## 📦 Bean加载机制 + +### 1. Bean定义注册 + +```java +@Configuration +public class BeanLoadingDemo { + + // 方式1:@Bean注解 + @Bean + @ConditionalOnProperty(name = "feature.enabled", havingValue = "true") + public MyService myService() { + return new MyServiceImpl(); + } + + // 方式2:@Component扫描 + @Component + public class ComponentService { + // ... + } + + // 方式3:@Import导入 + @Import({ImportedConfig.class, ImportSelector.class}) + public class ImportDemo { + // ... + } + + // 方式4:实现ImportSelector + public class CustomImportSelector implements ImportSelector { + @Override + public String[] selectImports(AnnotationMetadata importingClassMetadata) { + return new String[]{"com.example.ImportedService"}; + } + } +} +``` + +### 2. Bean实例化过程 + +```java +// Bean实例化的详细过程 +public class BeanInstantiationProcess { + + // 1. 实例化前处理 + @Override + public Object postProcessBeforeInstantiation(Class beanClass, String beanName) { + System.out.println("实例化前处理: " + beanName); + return null; // 返回null继续正常实例化 + } + + // 2. 实例化后处理 + @Override + public boolean postProcessAfterInstantiation(Object bean, String beanName) { + System.out.println("实例化后处理: " + beanName); + return true; // 返回true继续属性填充 + } + + // 3. 属性填充前处理 + @Override + public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) { + System.out.println("属性填充处理: " + beanName); + return pvs; + } + + // 4. 初始化前处理 + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) { + System.out.println("初始化前处理: " + beanName); + return bean; + } + + // 5. 初始化后处理 + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) { + System.out.println("初始化后处理: " + beanName); + return bean; + } +} +``` + +## 📋 配置加载顺序 + +### 1. 配置文件加载优先级 + +Spring Boot按以下顺序加载配置(优先级从高到低): + +```java +// 配置加载顺序示例 +public class ConfigurationLoadingOrder { + + /* + * 1. 命令行参数 + * java -jar app.jar --server.port=8081 + */ + + /* + * 2. SPRING_APPLICATION_JSON中的属性 + * SPRING_APPLICATION_JSON='{"server.port":8082}' java -jar app.jar + */ + + /* + * 3. ServletConfig初始化参数 + * web.xml中的 + */ + + /* + * 4. ServletContext初始化参数 + * web.xml中的 + */ + + /* + * 5. JNDI属性 + * java:comp/env + */ + + /* + * 6. Java系统属性 + * System.getProperties() + */ + + /* + * 7. 操作系统环境变量 + * System.getenv() + */ + + /* + * 8. RandomValuePropertySource + * random.*属性 + */ + + /* + * 9. jar包外的application-{profile}.properties/yml + * 10. jar包内的application-{profile}.properties/yml + * 11. jar包外的application.properties/yml + * 12. jar包内的application.properties/yml + */ + + /* + * 13. @PropertySource注解指定的配置文件 + */ + + /* + * 14. 默认属性 + * SpringApplication.setDefaultProperties() + */ +} +``` + +### 2. 配置文件位置优先级 + +```java +// 配置文件搜索位置(优先级从高到低) +public class ConfigurationLocations { + + /* + * 1. file:./config/ (项目根目录下的config文件夹) + * 2. file:./ (项目根目录) + * 3. classpath:/config/ (classpath下的config文件夹) + * 4. classpath:/ (classpath根目录) + */ + + // 自定义配置文件位置 + @SpringBootApplication + public class Application { + public static void main(String[] args) { + System.setProperty("spring.config.location", + "classpath:/custom/,file:./config/"); + SpringApplication.run(Application.class, args); + } + } +} +``` + +### 3. Profile配置 + +```java +// Profile配置示例 +@Configuration +@Profile("dev") // 开发环境配置 +public class DevConfig { + + @Bean + public DataSource dataSource() { + return new HikariDataSource(); + } +} + +@Configuration +@Profile("prod") // 生产环境配置 +public class ProdConfig { + + @Bean + public DataSource dataSource() { + return new DruidDataSource(); + } +} + +// 激活Profile的方式 +public class ProfileActivation { + + /* + * 1. 配置文件中指定 + * spring.profiles.active=dev,test + * + * 2. 命令行参数 + * java -jar app.jar --spring.profiles.active=prod + * + * 3. 环境变量 + * export SPRING_PROFILES_ACTIVE=prod + * + * 4. 程序中指定 + * SpringApplication app = new SpringApplication(Application.class); + * app.setAdditionalProfiles("dev"); + */ +} +``` + +## 🏷️ 核心注解解析 + +### 1. 配置相关注解 + +```java +// @ConfigurationProperties - 配置属性绑定 +@ConfigurationProperties(prefix = "app.user") +@Data +public class UserProperties { + private String name; + private Integer age; + private List hobbies; + private Map settings; + + // 嵌套配置 + private Database database = new Database(); + + @Data + public static class Database { + private String url; + private String username; + private String password; + } +} + +// 使用配置属性 +@RestController +@EnableConfigurationProperties(UserProperties.class) +public class UserController { + + private final UserProperties userProperties; + + public UserController(UserProperties userProperties) { + this.userProperties = userProperties; + } + + @GetMapping("/user/config") + public UserProperties getUserConfig() { + return userProperties; + } +} +``` + +### 2. 条件注解详解 + +```java +// 条件注解示例 +@Configuration +public class ConditionalConfig { + + // 基于类存在的条件 + @Bean + @ConditionalOnClass(RedisTemplate.class) + public RedisService redisService() { + return new RedisService(); + } + + // 基于Bean存在的条件 + @Bean + @ConditionalOnBean(DataSource.class) + public JdbcTemplate jdbcTemplate(DataSource dataSource) { + return new JdbcTemplate(dataSource); + } + + // 基于Bean不存在的条件 + @Bean + @ConditionalOnMissingBean(RestTemplate.class) + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + // 基于属性的条件 + @Bean + @ConditionalOnProperty( + name = "app.feature.enabled", + havingValue = "true", + matchIfMissing = false + ) + public FeatureService featureService() { + return new FeatureService(); + } + + // 基于表达式的条件 + @Bean + @ConditionalOnExpression("${app.cache.enabled:false} and ${app.cache.type:redis} == 'redis'") + public CacheManager cacheManager() { + return new RedisCacheManager(); + } + + // 基于Web应用类型的条件 + @Bean + @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) + public ServletWebServerFactory servletWebServerFactory() { + return new TomcatServletWebServerFactory(); + } +} +``` + +### 3. 自定义条件注解 + +```java +// 自定义条件注解 +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Conditional(OnDatabaseCondition.class) +public @interface ConditionalOnDatabase { + DatabaseType value(); +} + +// 条件实现类 +public class OnDatabaseCondition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + Map attributes = metadata.getAnnotationAttributes( + ConditionalOnDatabase.class.getName()); + + DatabaseType required = (DatabaseType) attributes.get("value"); + String databaseUrl = context.getEnvironment().getProperty("spring.datasource.url"); + + if (databaseUrl == null) { + return false; + } + + return switch (required) { + case MYSQL -> databaseUrl.contains("mysql"); + case POSTGRESQL -> databaseUrl.contains("postgresql"); + case ORACLE -> databaseUrl.contains("oracle"); + default -> false; + }; + } +} + +// 使用自定义条件注解 +@Configuration +public class DatabaseConfig { + + @Bean + @ConditionalOnDatabase(DatabaseType.MYSQL) + public MySQLDialect mysqlDialect() { + return new MySQLDialect(); + } + + @Bean + @ConditionalOnDatabase(DatabaseType.POSTGRESQL) + public PostgreSQLDialect postgresqlDialect() { + return new PostgreSQLDialect(); + } +} +``` + +## ❓ 面试常见问题 + +### Q1: Spring Boot的启动流程是什么? + +**答案:** +1. **创建SpringApplication实例**:解析主配置类,确定应用类型 +2. **准备环境**:加载配置文件,设置Profile +3. **创建ApplicationContext**:根据应用类型创建对应的上下文 +4. **准备上下文**:设置环境,加载配置,注册Bean定义 +5. **刷新上下文**:实例化Bean,处理依赖注入 +6. **完成启动**:发布启动完成事件,调用Runner + +### Q2: Spring Boot自动配置的原理是什么? + +**答案:** +```java +// 自动配置原理 +public class AutoConfigurationPrinciple { + + /* + * 1. @EnableAutoConfiguration注解 + * - 通过@Import导入AutoConfigurationImportSelector + * + * 2. AutoConfigurationImportSelector + * - 读取META-INF/spring.factories文件 + * - 获取所有自动配置类的全限定名 + * + * 3. 条件注解过滤 + * - @ConditionalOnClass:类路径存在指定类 + * - @ConditionalOnBean:容器中存在指定Bean + * - @ConditionalOnProperty:配置文件中存在指定属性 + * + * 4. 配置类生效 + * - 满足条件的配置类被加载 + * - 创建相应的Bean实例 + */ +} +``` + +### Q3: Spring Boot中Bean的加载顺序如何控制? + +**答案:** +```java +// Bean加载顺序控制 +@Configuration +public class BeanOrderConfig { + + // 1. 使用@Order注解 + @Bean + @Order(1) + public FirstService firstService() { + return new FirstService(); + } + + @Bean + @Order(2) + public SecondService secondService() { + return new SecondService(); + } + + // 2. 使用@DependsOn注解 + @Bean + @DependsOn("firstService") + public DependentService dependentService() { + return new DependentService(); + } + + // 3. 通过构造函数依赖 + @Bean + public ServiceWithDependency serviceWithDependency(FirstService firstService) { + return new ServiceWithDependency(firstService); + } +} +``` + +### Q4: Spring Boot如何实现零配置? + +**答案:** +```java +// 零配置实现原理 +public class ZeroConfigurationPrinciple { + + /* + * 1. 约定优于配置 + * - 默认配置文件位置:application.properties/yml + * - 默认静态资源位置:/static, /public, /resources, /META-INF/resources + * - 默认模板位置:/templates + * + * 2. 自动配置 + * - 根据classpath中的jar包自动配置相应功能 + * - 提供默认配置,用户可以覆盖 + * + * 3. 嵌入式服务器 + * - 内置Tomcat、Jetty、Undertow + * - 无需外部服务器部署 + * + * 4. Starter依赖 + * - 预定义依赖组合 + * - 简化依赖管理 + */ + + // 示例:Web应用零配置启动 + @SpringBootApplication + public class ZeroConfigApp { + public static void main(String[] args) { + SpringApplication.run(ZeroConfigApp.class, args); + // 仅需这一行代码即可启动Web应用 + } + } +} +``` + +### Q5: Spring Boot Starter的工作原理? + +**答案:** +```java +// 自定义Starter示例 +// 1. 创建自动配置类 +@Configuration +@ConditionalOnClass(MyService.class) +@EnableConfigurationProperties(MyServiceProperties.class) +public class MyServiceAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public MyService myService(MyServiceProperties properties) { + return new MyService(properties); + } +} + +// 2. 配置属性类 +@ConfigurationProperties(prefix = "myservice") +@Data +public class MyServiceProperties { + private String name = "default"; + private boolean enabled = true; + private Duration timeout = Duration.ofSeconds(30); +} + +// 3. 在META-INF/spring.factories中注册 +/* +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.example.MyServiceAutoConfiguration +*/ + +// 4. 创建starter模块的pom.xml +/* + + + org.springframework.boot + spring-boot-autoconfigure + + + org.springframework.boot + spring-boot-configuration-processor + true + + +*/ +``` + +### Q6: Spring Boot中如何处理循环依赖? + +**答案:** +```java +// 循环依赖处理 +@Service +public class ServiceA { + + // 1. 构造函数循环依赖(Spring无法解决) + // private final ServiceB serviceB; + // public ServiceA(ServiceB serviceB) { this.serviceB = serviceB; } + + // 2. 字段注入循环依赖(Spring可以解决) + @Autowired + private ServiceB serviceB; + + // 3. 使用@Lazy注解延迟初始化 + @Autowired + @Lazy + private ServiceB lazyServiceB; + + // 4. 使用ApplicationContext获取Bean + @Autowired + private ApplicationContext applicationContext; + + public void useServiceB() { + ServiceB serviceB = applicationContext.getBean(ServiceB.class); + serviceB.doSomething(); + } + + // 5. 使用@PostConstruct + @PostConstruct + public void init() { + // 在初始化完成后处理依赖 + } +} + +// 解决循环依赖的最佳实践 +@Configuration +public class CircularDependencyConfig { + + // 重新设计,避免循环依赖 + @Bean + public CommonService commonService() { + return new CommonService(); + } + + @Bean + public ServiceA serviceA(CommonService commonService) { + return new ServiceA(commonService); + } + + @Bean + public ServiceB serviceB(CommonService commonService) { + return new ServiceB(commonService); + } +} +``` + +### Q7: Spring Boot的监控和健康检查如何实现? + +**答案:** +```java +// Actuator监控配置 +@Configuration +public class ActuatorConfig { + + // 1. 自定义健康检查 + @Component + public class CustomHealthIndicator implements HealthIndicator { + + @Override + public Health health() { + // 检查外部服务状态 + boolean externalServiceUp = checkExternalService(); + + if (externalServiceUp) { + return Health.up() + .withDetail("external-service", "Available") + .withDetail("check-time", System.currentTimeMillis()) + .build(); + } else { + return Health.down() + .withDetail("external-service", "Unavailable") + .withDetail("error", "Connection timeout") + .build(); + } + } + + private boolean checkExternalService() { + // 实际的健康检查逻辑 + return true; + } + } + + // 2. 自定义指标 + @Component + public class CustomMetrics { + + private final Counter requestCounter; + private final Timer requestTimer; + + public CustomMetrics(MeterRegistry meterRegistry) { + this.requestCounter = Counter.builder("custom.requests.total") + .description("Total number of requests") + .register(meterRegistry); + + this.requestTimer = Timer.builder("custom.requests.duration") + .description("Request duration") + .register(meterRegistry); + } + + public void recordRequest() { + requestCounter.increment(); + } + + public Timer.Sample startTimer() { + return Timer.start(); + } + } + + // 3. 自定义端点 + @Component + @Endpoint(id = "custom") + public class CustomEndpoint { + + @ReadOperation + public Map customInfo() { + Map info = new HashMap<>(); + info.put("status", "running"); + info.put("version", "1.0.0"); + info.put("uptime", ManagementFactory.getRuntimeMXBean().getUptime()); + return info; + } + + @WriteOperation + public void updateConfig(@Selector String key, String value) { + // 更新配置的逻辑 + System.setProperty(key, value); + } + } +} + +// application.yml配置 +/* +management: + endpoints: + web: + exposure: + include: health,info,metrics,custom + endpoint: + health: + show-details: always + metrics: + export: + prometheus: + enabled: true +*/ +``` + +## 🛠️ 实战应用场景 + +### 1. 多数据源配置 + +```java +@Configuration +public class MultiDataSourceConfig { + + @Primary + @Bean(name = "primaryDataSource") + @ConfigurationProperties(prefix = "spring.datasource.primary") + public DataSource primaryDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "secondaryDataSource") + @ConfigurationProperties(prefix = "spring.datasource.secondary") + public DataSource secondaryDataSource() { + return DataSourceBuilder.create().build(); + } + + @Primary + @Bean(name = "primaryJdbcTemplate") + public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource) { + return new JdbcTemplate(dataSource); + } + + @Bean(name = "secondaryJdbcTemplate") + public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) { + return new JdbcTemplate(dataSource); + } +} +``` + +### 2. 异步处理配置 + +```java +@Configuration +@EnableAsync +public class AsyncConfig implements AsyncConfigurer { + + @Override + @Bean(name = "taskExecutor") + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); + executor.setMaxPoolSize(10); + executor.setQueueCapacity(100); + executor.setThreadNamePrefix("async-"); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return (ex, method, params) -> { + System.err.println("异步方法执行异常: " + method.getName()); + ex.printStackTrace(); + }; + } +} + +// 使用异步方法 +@Service +public class AsyncService { + + @Async("taskExecutor") + public CompletableFuture processAsync(String data) { + // 异步处理逻辑 + try { + Thread.sleep(2000); + return CompletableFuture.completedFuture("处理完成: " + data); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return CompletableFuture.failedFuture(e); + } + } +} +``` + +### 3. 缓存配置 + +```java +@Configuration +@EnableCaching +public class CacheConfig { + + @Bean + public CacheManager cacheManager() { + RedisCacheManager.Builder builder = RedisCacheManager + .RedisCacheManagerBuilder + .fromConnectionFactory(redisConnectionFactory()) + .cacheDefaults(cacheConfiguration()); + + return builder.build(); + } + + private RedisCacheConfiguration cacheConfiguration() { + return RedisCacheConfiguration.defaultCacheConfig() + .entryTtl(Duration.ofMinutes(30)) + .serializeKeysWith(RedisSerializationContext.SerializationPair + .fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair + .fromSerializer(new GenericJackson2JsonRedisSerializer())); + } +} + +// 使用缓存 +@Service +public class UserService { + + @Cacheable(value = "users", key = "#id") + public User findById(Long id) { + // 查询数据库 + return userRepository.findById(id); + } + + @CacheEvict(value = "users", key = "#user.id") + public void updateUser(User user) { + userRepository.save(user); + } + + @CacheEvict(value = "users", allEntries = true) + public void clearAllCache() { + // 清除所有缓存 + } +} +``` + +## 📊 性能优化建议 + +### 1. 启动性能优化 + +```java +@SpringBootApplication +public class OptimizedApplication { + + public static void main(String[] args) { + // 1. 设置系统属性优化启动 + System.setProperty("spring.backgroundpreinitializer.ignore", "true"); + System.setProperty("spring.jmx.enabled", "false"); + + SpringApplication app = new SpringApplication(OptimizedApplication.class); + + // 2. 禁用不需要的自动配置 + app.setWebApplicationType(WebApplicationType.SERVLET); + + // 3. 设置懒加载 + app.setLazyInitialization(true); + + app.run(args); + } +} + +// application.yml优化配置 +/* +spring: + main: + lazy-initialization: true + jmx: + enabled: false + autoconfigure: + exclude: + - org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration + - org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration +*/ +``` + +### 2. 内存优化 + +```java +@Configuration +public class MemoryOptimizationConfig { + + // 1. 使用对象池 + @Bean + public GenericObjectPool expensiveObjectPool() { + GenericObjectPoolConfig config = new GenericObjectPoolConfig<>(); + config.setMaxTotal(10); + config.setMaxIdle(5); + config.setMinIdle(2); + + return new GenericObjectPool<>(new ExpensiveObjectFactory(), config); + } + + // 2. 配置连接池 + @Bean + @ConfigurationProperties(prefix = "spring.datasource.hikari") + public HikariDataSource dataSource() { + HikariDataSource dataSource = new HikariDataSource(); + dataSource.setMaximumPoolSize(20); + dataSource.setMinimumIdle(5); + dataSource.setConnectionTimeout(30000); + dataSource.setIdleTimeout(600000); + dataSource.setMaxLifetime(1800000); + return dataSource; + } +} +``` + +--- + +*这份Spring Boot 2完整学习指南涵盖了从基础概念到高级应用的所有关键知识点,是学习框架和面试准备的完整资料。* From 86e451ebf3e382d73236055da59914aa61011d44 Mon Sep 17 00:00:00 2001 From: taoking <980512523@qq.com> Date: Fri, 28 Nov 2025 01:07:15 +0800 Subject: [PATCH 4/5] 11 --- .idea/AugmentWebviewStateStore.xml | 2 +- .../k8s_share.md" | 217 ++++++++++++++++++ 2 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 "\344\270\255\351\227\264\344\273\266/k8s_share.md" diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml index b6cf9d3..b1df832 100644 --- a/.idea/AugmentWebviewStateStore.xml +++ b/.idea/AugmentWebviewStateStore.xml @@ -3,7 +3,7 @@ diff --git "a/\344\270\255\351\227\264\344\273\266/k8s_share.md" "b/\344\270\255\351\227\264\344\273\266/k8s_share.md" new file mode 100644 index 0000000..07eb3f1 --- /dev/null +++ "b/\344\270\255\351\227\264\344\273\266/k8s_share.md" @@ -0,0 +1,217 @@ +# 📘 **Kubernetes(K8s)快速入门分享教程(Markdown 版)** + +面向对象:已掌握 Docker / Docker Compose,但未使用过 K8s 的同事\ +目标:**分享完后,大家能在企业 K8s 平台上部署自己的 SpringBoot 服务** + +------------------------------------------------------------------------ + +# 🧭 目录 + +1. 为什么需要 Kubernetes\ +2. Kubernetes 架构体系\ +3. Kubernetes 与 Docker Compose 的核心区别\ +4. Kubernetes 核心资源对象\ +5. Spring Boot 在 K8s 上从 0 到 1 部署\ +6. K8s 管理后台(Web UI)如何操作每个模块\ +7. 常用 kubectl 命令\ +8. 部署 Checklist(帮助同事独立完成部署)\ +9. Q & A + +------------------------------------------------------------------------ + +# #️⃣ **1. 为什么需要 Kubernetes?** + +## 1.1 Docker / Compose 的局限性 + +- 只能在单机上使用\ +- 无法自动重启或健康检查\ +- 不支持自动扩容/缩容\ +- 配置管理能力弱\ +- 发布无滚动更新\ +- 网络能力有限\ +- 缺少监控、负载均衡、日志体系 + +## 1.2 Kubernetes 的价值 + +K8s 提供: + +- 多节点集群管理\ +- 自愈(健康检查失败自动重建 Pod)\ +- 滚动更新、自动回滚\ +- 自动扩容(HPA)\ +- 配置中心(ConfigMap / Secret)\ +- 统一访问(Service + Ingress)\ +- 标准化 YAML 定义\ +- 强大的 UI / API / CLI 管控交互 + +------------------------------------------------------------------------ + +# #️⃣ **2. Kubernetes 架构体系** + +## 2.1 总体结构 + + Control Plane → Node → Pod + +## 2.2 控制平面角色 + +- API Server\ +- Scheduler\ +- Controller Manager\ +- ETCD + +## 2.3 Node 节点角色 + +- Kubelet\ +- Kube-Proxy\ +- Container Runtime + +------------------------------------------------------------------------ + +# #️⃣ **3. K8s vs Docker Compose** + + 能力 Docker Compose Kubernetes + ---------- ---------------- ------------------ + 运行范围 单机 集群 + 自愈 无 有 + 扩容 手动 自动 HPA + 发布 基本无 滚动更新/回滚 + 配置 env ConfigMap/Secret + +------------------------------------------------------------------------ + +# #️⃣ **4. 核心资源对象** + +- Pod\ +- Deployment\ +- Service\ +- Ingress\ +- ConfigMap\ +- Secret\ +- PVC/PV + +------------------------------------------------------------------------ + +# #️⃣ **5. Spring Boot 在 Kubernetes 上部署** + +## 5.1 Dockerfile + +``` dockerfile +FROM openjdk:17-jdk-slim +WORKDIR /app +COPY app.jar . +ENTRYPOINT ["java","-jar","app.jar"] +EXPOSE 8080 +``` + +## 5.2 Deployment + +``` yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: demo +spec: + replicas: 2 + selector: + matchLabels: + app: demo + template: + metadata: + labels: + app: demo + spec: + containers: + - name: demo + image: registry/demo:1.0 + ports: + - containerPort: 8080 +``` + +## 5.3 Service + +``` yaml +apiVersion: v1 +kind: Service +metadata: + name: demo-svc +spec: + selector: + app: demo + type: NodePort + ports: + - port: 8080 + nodePort: 30080 +``` + +## 5.4 Ingress + +``` yaml +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-ingress +spec: + rules: + - host: demo.company.com + http: + paths: + - path: / + backend: + service: + name: demo-svc + port: + number: 8080 +``` + +## 5.5 ConfigMap + +``` yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: demo-config +data: + SPRING_PROFILES_ACTIVE: "prod" +``` + +------------------------------------------------------------------------ + +# #️⃣ **6. 管理后台如何操作** + +- 表单配置镜像/端口/副本数/探针\ +- YAML 编辑模式\ +- 命令行 kubectl\ +- 常见平台:Rancher、KubeSphere、ACK、自研平台 + +------------------------------------------------------------------------ + +# #️⃣ **7. kubectl 常用命令** + +``` bash +kubectl get pods +kubectl logs pod +kubectl describe pod name +kubectl exec -it pod -- sh +kubectl rollout restart deploy demo +kubectl scale deploy demo --replicas=3 +``` + +------------------------------------------------------------------------ + +# #️⃣ **8. 部署 Checklist** + +- 镜像准备\ +- Deployment\ +- Service\ +- Ingress\ +- ConfigMap/Secret\ +- Pod 日志\ +- 服务访问\ +- 滚动更新\ +- 自动扩容 + +------------------------------------------------------------------------ + +# #️⃣ **9. Q&A** + +欢迎提问! From 385bfa7aa98f9405be4b489e4a8d0684abd3f03c Mon Sep 17 00:00:00 2001 From: taoking <980512523@qq.com> Date: Fri, 28 Nov 2025 01:46:42 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=88=86=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/AugmentWebviewStateStore.xml | 2 +- .idea/inspectionProfiles/Project_Default.xml | 63 +++ .../k8s_share.md" | 470 ++++++++++++------ 3 files changed, 386 insertions(+), 149 deletions(-) diff --git a/.idea/AugmentWebviewStateStore.xml b/.idea/AugmentWebviewStateStore.xml index b1df832..20eae4a 100644 --- a/.idea/AugmentWebviewStateStore.xml +++ b/.idea/AugmentWebviewStateStore.xml @@ -3,7 +3,7 @@ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 8d66637..ee9f695 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,5 +1,68 @@ \ No newline at end of file diff --git "a/\344\270\255\351\227\264\344\273\266/k8s_share.md" "b/\344\270\255\351\227\264\344\273\266/k8s_share.md" index 07eb3f1..2b2dc29 100644 --- "a/\344\270\255\351\227\264\344\273\266/k8s_share.md" +++ "b/\344\270\255\351\227\264\344\273\266/k8s_share.md" @@ -1,217 +1,391 @@ -# 📘 **Kubernetes(K8s)快速入门分享教程(Markdown 版)** +# 📘 Kubernetes(K8s)基础分享 + +> 面向公司内部开发 / 测试 / 运维同学的入门分享,时长建议 45–60 分钟。 +> 目标:听完之后,每个人都能“说清楚概念 + 看懂 YAML + 自己把一个服务部署到 K8s 上”。 + +--- + +## 一、分享目标 & 适用人群 + +**分享目标** +- 理解为什么需要 K8s,以及它大概解决什么问题。 +- 掌握 K8s 的核心概念与常用资源类型。 +- 能从 0 写出一个简单的 Deployment + Service 并在集群运行。 +- 知道基本的排错思路和公司内部推荐实践。 + +**适用人群** +- 日常编写服务端 / 后端应用的开发同学。 +- 需要在 K8s 环境验证功能的测试同学。 +- 负责环境维护、发布上线的运维 / SRE 同学。 + +--- + +## 二、为什么会出现 Kubernetes? + +**1. 传统部署方式的痛点** +- 应用直接部署在物理机 / 虚拟机上: + - 环境不一致:依赖库版本、系统配置难以统一。 + - 资源利用率低:一台机器上只敢跑少量服务,浪费 CPU / 内存。 + - 部署和回滚麻烦:靠脚本或人工操作,容易出错。 + +**2. 容器带来的变化** +- 打包:应用 + 运行时 + 依赖一起打包成镜像,做到“构建一次,到处运行”。 +- 隔离:不同应用之间通过容器隔离,减少相互影响。 +- 启动快:容器秒级拉起,适合弹性扩缩容。 + +**3. 有了容器还不够:为什么需要 K8s?** +- 单纯有 Docker 以后,还会遇到: + - 有很多容器要管理:放在哪台机器?怎么分配资源? + - 容器挂掉怎么办:谁来拉起来、怎么保证副本数? + - 外部怎么访问容器:IP 不固定、端口多且混乱。 + - 多环境、多团队:如何隔离、如何统一配置? +- Kubernetes 的核心价值: + 通过**声明式配置**和一系列控制器,自动地帮我们做**调度、扩缩容、自愈、服务发现和配置管理**。 + +--- + +## 三、Kubernetes 整体架构概览 + +可以把 K8s 理解成一个“集群操作系统”: + +```text +┌─────────────────────────┐ +│ 控制面 Control Plane │(负责“大脑”和控制) +│ - API Server │ +│ - Scheduler │ +│ - Controller Manager │ +│ - etcd │ +└─────────────┬───────────┘ + │ + (通过 API 管理) + │ +┌─────────────┴───────────┐ +│ 工作节点 Node │(真正跑容器的“机器”) +│ - kubelet │ +│ - kube-proxy │ +│ - Container Runtime │ +└─────────────────────────┘ +``` -面向对象:已掌握 Docker / Docker Compose,但未使用过 K8s 的同事\ -目标:**分享完后,大家能在企业 K8s 平台上部署自己的 SpringBoot 服务** +**关键点理解:** +- `Control Plane`:整个平台的“大脑”和“控制中心”,负责接收我们的配置、做调度和状态维护。 +- `Node`:实际承载 Pod / 容器运行的工作节点,可以是虚机、物理机或云主机。 +- `etcd`:分布式键值存储,保存 K8s 集群的所有状态(配置和元数据)。 ------------------------------------------------------------------------- +--- -# 🧭 目录 +## 四、核心概念快速扫盲 -1. 为什么需要 Kubernetes\ -2. Kubernetes 架构体系\ -3. Kubernetes 与 Docker Compose 的核心区别\ -4. Kubernetes 核心资源对象\ -5. Spring Boot 在 K8s 上从 0 到 1 部署\ -6. K8s 管理后台(Web UI)如何操作每个模块\ -7. 常用 kubectl 命令\ -8. 部署 Checklist(帮助同事独立完成部署)\ -9. Q & A +可以用“一句话”把这些概念串起来: ------------------------------------------------------------------------- +> 在一个 **Cluster** 中,我们按 **Namespace** 做隔离,在多个 **Node** 上运行 **Pod**。 +> 我们用 **Deployment** 等控制器管理 Pod 的副本和升级,用 **Service / Ingress** 提供稳定访问入口, +> 用 **ConfigMap / Secret / Volume / PV / PVC** 管理配置和存储,用 **Label / Selector** 把所有资源“串起来”。 -# #️⃣ **1. 为什么需要 Kubernetes?** +### 1. Cluster / Namespace / Node -## 1.1 Docker / Compose 的局限性 +- **Cluster(集群)** + - 一组运行着 K8s 组件的机器的集合,是整个系统的边界。 + - 一般我们会按环境划分:测试集群、预发集群、生产集群等。 -- 只能在单机上使用\ -- 无法自动重启或健康检查\ -- 不支持自动扩容/缩容\ -- 配置管理能力弱\ -- 发布无滚动更新\ -- 网络能力有限\ -- 缺少监控、负载均衡、日志体系 +- **Namespace(命名空间)** + - 集群内的逻辑隔离单元,类似一个“虚拟子集群”。 + - 常见用途:按环境(`dev/test/prod`)、按团队或按业务线划分。 -## 1.2 Kubernetes 的价值 +- **Node(节点)** + - 运行 Pod 的工作机器,可以理解为“宿主机”。 + - 每个节点上运行 `kubelet`(负责和控制面通信)和 `kube-proxy`(负责网络)。 -K8s 提供: +### 2. Pod:最小调度单位 -- 多节点集群管理\ -- 自愈(健康检查失败自动重建 Pod)\ -- 滚动更新、自动回滚\ -- 自动扩容(HPA)\ -- 配置中心(ConfigMap / Secret)\ -- 统一访问(Service + Ingress)\ -- 标准化 YAML 定义\ -- 强大的 UI / API / CLI 管控交互 +- 一个 Pod 是一组一同运行在同一 Node 上的容器集合: + - 共享同一个 IP 地址和端口空间。 + - 共享存储卷(Volume)。 +- 常见模式: + - 一个 Pod 一个主容器(最常见)。 + - Sidecar 模式:主容器 + 辅助容器(如日志收集、代理等)。 +- 注意:**Pod 是易失的**,不直接手工管理单个 Pod,而是通过更高层的控制器来管理。 ------------------------------------------------------------------------- +### 3. 控制器:Deployment / StatefulSet / DaemonSet / Job -# #️⃣ **2. Kubernetes 架构体系** +- **Deployment** + - 最常用的无状态应用控制器。 + - 功能:管理 Pod 副本数、滚动升级、回滚。 + - 典型场景:Web 服务、API 服务。 -## 2.1 总体结构 +- **StatefulSet** + - 面向有状态应用(通常需要稳定网络标识 & 持久存储)。 + - Pod 有固定的序号和稳定名称,如 `xxx-0`、`xxx-1`。 + - 典型场景:数据库、某些中间件组件。 - Control Plane → Node → Pod +- **DaemonSet** + - 确保每个(或部分)节点上都有一个 Pod 运行。 + - 典型场景:日志采集 Agent、监控 Agent。 -## 2.2 控制平面角色 +- **Job / CronJob** + - Job:一次性任务,执行完成后退出。 + - CronJob:周期性任务,类似 Linux 的 crontab。 -- API Server\ -- Scheduler\ -- Controller Manager\ -- ETCD +### 4. Service:服务发现与负载均衡 -## 2.3 Node 节点角色 +- Pod 的 IP 会变化,不能直接依赖 Pod IP。 +- Service 通过 **Label Selector** 找到一组 Pod,给这组 Pod 提供: + - 稳定的虚拟 IP(ClusterIP)。 + - 在这些 Pod 之间做负载均衡。 -- Kubelet\ -- Kube-Proxy\ -- Container Runtime +常见类型: +- `ClusterIP`:默认类型,用于集群内部访问。 +- `NodePort`:在每个节点打开一个固定端口,对集群外暴露。 +- `LoadBalancer`:在云环境中创建云厂商的负载均衡器。 ------------------------------------------------------------------------- +### 5. Ingress:统一的 HTTP/HTTPS 入口 -# #️⃣ **3. K8s vs Docker Compose** +- Ingress 提供了 HTTP/HTTPS 层的路由能力: + - 按域名路由:`api.xxx.com`、`web.xxx.com`。 + - 按路径路由:`/api` 转发到服务 A,`/web` 转发到服务 B。 + - 可以做 TLS/HTTPS 终止。 +- Ingress 本身只是一组规则,需要对应的 **Ingress Controller**(如 Nginx Ingress、Traefik 等)实现。 - 能力 Docker Compose Kubernetes - ---------- ---------------- ------------------ - 运行范围 单机 集群 - 自愈 无 有 - 扩容 手动 自动 HPA - 发布 基本无 滚动更新/回滚 - 配置 env ConfigMap/Secret +### 6. 配置与密钥:ConfigMap / Secret ------------------------------------------------------------------------- +- **ConfigMap** + - 保存非敏感配置信息,如应用配置、开关、环境变量等。 + - 可通过环境变量或挂载文件方式注入到 Pod。 -# #️⃣ **4. 核心资源对象** +- **Secret** + - 保存敏感数据,如密码、Token、证书等。 + - 只在需要的 Pod 中挂载 / 注入,并配合权限控制。 -- Pod\ -- Deployment\ -- Service\ -- Ingress\ -- ConfigMap\ -- Secret\ -- PVC/PV +### 7. 存储:Volume / PV / PVC ------------------------------------------------------------------------- +- Volume(卷) + - 定义在 Pod 内部,生命周期随 Pod。 + - 用于容器间共享数据或临时数据。 -# #️⃣ **5. Spring Boot 在 Kubernetes 上部署** +- PersistentVolume(PV)/ PersistentVolumeClaim(PVC) + - PV:集群级别的存储资源,通常由运维提供(NFS、云硬盘等)。 + - PVC:应用侧对存储的“申请”,描述需要多大、什么访问模式。 + - Pod 通过 PVC 绑定到具体的 PV,做到“存储与 Pod 解耦”。 -## 5.1 Dockerfile +### 8. Label / Selector / Annotation -``` dockerfile -FROM openjdk:17-jdk-slim -WORKDIR /app -COPY app.jar . -ENTRYPOINT ["java","-jar","app.jar"] -EXPOSE 8080 -``` +- Label:附加在资源上的键值对,如: + - `app=order-service`、`env=prod`、`team=payment` +- Selector:基于 Label 的筛选条件: + - Service / Deployment / HPA 等都会通过 Selector 找到相关资源。 +- Annotation:非结构化备注信息,一般给工具或运维使用,不参与筛选。 + +--- + +## 五、从 0 到 1:部署一个最简单的 Web 应用 + +目标:在 K8s 集群里跑一个 Nginx 服务,并通过 Service 访问。 + +### 1. 前置条件 +- 已有可访问的 K8s 集群(本地 kind / minikube,或公司内部集群)。 +- `kubectl` 已配置好上下文,可以正常执行 `kubectl get nodes`。 -## 5.2 Deployment +### 2. 编写 Deployment + Service(示例) -``` yaml +创建一个文件 `nginx-demo.yaml`: + +```yaml apiVersion: apps/v1 kind: Deployment metadata: - name: demo + name: nginx-demo + labels: + app: nginx-demo spec: replicas: 2 selector: matchLabels: - app: demo + app: nginx-demo template: metadata: labels: - app: demo + app: nginx-demo spec: containers: - - name: demo - image: registry/demo:1.0 + - name: nginx + image: nginx:1.25 ports: - - containerPort: 8080 -``` - -## 5.3 Service - -``` yaml + - containerPort: 80 +--- apiVersion: v1 kind: Service metadata: - name: demo-svc + name: nginx-demo-svc spec: - selector: - app: demo type: NodePort + selector: + app: nginx-demo ports: - - port: 8080 + - port: 80 + targetPort: 80 nodePort: 30080 ``` -## 5.4 Ingress +### 3. 部署与验证 -``` yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: demo-ingress -spec: - rules: - - host: demo.company.com - http: - paths: - - path: / - backend: - service: - name: demo-svc - port: - number: 8080 -``` +```bash +# 部署 +kubectl apply -f nginx-demo.yaml -## 5.5 ConfigMap +# 查看 Deployment / Pod / Service +kubectl get deploy,pod,svc -``` yaml -apiVersion: v1 -kind: ConfigMap -metadata: - name: demo-config -data: - SPRING_PROFILES_ACTIVE: "prod" +# 查看某个 Pod 的详细信息 +kubectl describe pod + +# 访问(NodePort) +curl http://<任意节点IP>:30080 ``` ------------------------------------------------------------------------- +通过这个 Demo,可以直观地理解: +- Deployment 如何管理多副本 Pod。 +- Service 如何给一组 Pod 提供稳定访问入口。 +- YAML 的核心结构和字段。 -# #️⃣ **6. 管理后台如何操作** +--- -- 表单配置镜像/端口/副本数/探针\ -- YAML 编辑模式\ -- 命令行 kubectl\ -- 常见平台:Rancher、KubeSphere、ACK、自研平台 +## 六、常用 `kubectl` 命令速查 ------------------------------------------------------------------------- +> 建议在 PPT 中单独放一页,供开发 / 排错时参考。 -# #️⃣ **7. kubectl 常用命令** +- 集群与资源查看 + - `kubectl get nodes` + - `kubectl get ns` + - `kubectl get pod -A`(查看所有命名空间 Pod) + - `kubectl get deploy,svc,ingress` -``` bash -kubectl get pods -kubectl logs pod -kubectl describe pod name -kubectl exec -it pod -- sh -kubectl rollout restart deploy demo -kubectl scale deploy demo --replicas=3 -``` +- 详情与事件 + - `kubectl describe pod ` + - `kubectl get events --sort-by=.lastTimestamp` + +- 日志与进入容器 + - `kubectl logs ` + - `kubectl logs -f -c ` + - `kubectl exec -it -- /bin/sh` + +- 部署与回滚 + - `kubectl apply -f xxx.yaml` + - `kubectl delete -f xxx.yaml` + - `kubectl rollout status deployment ` + - `kubectl rollout undo deployment ` + +- 资源管理 + - `kubectl scale deployment --replicas=4` + - `kubectl top pod`(需要 metrics-server) + +--- + +## 七、常见问题与排错思路 + +适合作为分享中互动部分,可以结合实际故障案例讲解。 + +### 1. Pod 一直是 Pending + +常见原因: +- 集群资源不足:CPU / 内存不够。 +- 节点选择约束太严格:节点亲和 / 污点容忍配置导致排不进去。 +- PVC 未绑定:有持久化存储需求但 PVC 无法绑定 PV。 + +排查步骤: +- `kubectl describe pod ` 看调度事件和报错信息。 +- `kubectl get node` 看资源是否充足。 +- 如涉及 PVC:`kubectl get pvc,pv`。 + +### 2. Pod CrashLoopBackOff / Error + +常见原因: +- 应用自身异常退出,如配置错误、依赖无法连接。 +- 健康检查配置不合理导致频繁重启。 + +排查步骤: +- `kubectl logs ` 看容器日志。 +- 查看 liveness / readiness 配置,放宽阈值验证。 +- 在本地/测试环境用相同镜像跑一遍复现问题。 + +### 3. ImagePullBackOff / ErrImagePull + +常见原因: +- 镜像地址写错、Tag 不存在。 +- 私有仓库认证失败,没有配置 `imagePullSecrets`。 + +排查步骤: +- `kubectl describe pod ` 看拉取镜像的报错信息。 +- 确认镜像仓库地址、项目名、Tag 等是否正确。 +- 如是私有仓库,检查 Secret 是否存在并已配置到 Pod。 + +### 4. Service 访问不通 + +常见原因: +- Service 的 selector 与 Pod 的 label 不匹配,导致找不到后端 Pod。 +- 容器内部真实监听端口与 Service 配置的 `targetPort` 不一致。 +- 跨命名空间访问时,使用的 DNS 名称不正确。 + +排查步骤: +- `kubectl get endpoints ` 看后端是否有 Pod。 +- 进入 Pod 内使用 `curl localhost:` 验证应用自身是否可用。 +- 在同命名空间 Pod 中访问 `http://:` 进行排查。 + +### 5. Ingress 不生效 + +常见原因: +- 集群未正确安装 Ingress Controller。 +- Ingress 资源中的域名未正确解析到入口 IP。 +- Ingress 规则配置与 Service 名称 / 端口不匹配。 + +排查步骤: +- `kubectl get pod -n ` 检查 Ingress Controller 状态。 +- `kubectl describe ingress ` 查看事件与路由规则。 +- 使用 `curl -H "Host: xxx.com" http:///path` 进行验证。 + +--- + +## 八、公司内部推荐实践(可根据实际情况调整) + +> 这一部分适合结合公司现有平台 / 规范进行二次补充。 + +- 命名与分组 + - 按环境:`dev` / `test` / `staging` / `prod` 使用独立 Namespace 或独立集群。 + - 统一 Label 规范:`app`、`env`、`team`、`owner` 等,方便运维和观测。 + +- 配置管理 + - 所有可变配置放到 ConfigMap / Secret 中,不写死在镜像内。 + - 为不同环境准备不同的配置文件,避免手工改 YAML。 + +- 资源与伸缩 + - 为 Pod 设置合理的 `resources.requests` 和 `resources.limits`,避免“谁都抢不到资源”或“有人把机器吃满”。 + - 核心服务启用 HPA,根据 CPU / QPS / 自定义指标自动扩缩容。 + - 对核心业务增加 PodDisruptionBudget,保证升级 / 维护时可用实例数。 + +- 安全与权限 + - 尽量不要在容器中使用 root 用户运行应用。 + - Secret 按最小权限原则使用,不在无关 Pod 中挂载。 + - 配合 RBAC 控制不同角色对集群的访问权限。 + +- 发布与回滚 + - 统一通过 CI/CD 平台部署应用,禁止直接手动改线上 Deployment。 + - 重要变更采用灰度发布:先在部分实例 / 流量上验证,再全量发布。 + - 使用 Deployment 的滚动升级与回滚能力,快速恢复到上一版本。 ------------------------------------------------------------------------- +--- -# #️⃣ **8. 部署 Checklist** +## 九、参考资料(推荐会后深入阅读) -- 镜像准备\ -- Deployment\ -- Service\ -- Ingress\ -- ConfigMap/Secret\ -- Pod 日志\ -- 服务访问\ -- 滚动更新\ -- 自动扩容 +- 官方文档 + - Kubernetes 官网主页: + - Kubernetes 官方文档(英文): + - Kubernetes 中文文档(社区翻译): ------------------------------------------------------------------------- +- 容器基础 + - Docker 入门指南: -# #️⃣ **9. Q&A** +- 进阶书籍(可作为读书会素材) + - 《Kubernetes in Action》 + - 《Kubernetes 权威指南》 + - 《云原生应用架构实践》 -欢迎提问! +> 建议:分享结束后将本 Markdown 与 Demo YAML 示例一并放到内部代码仓库,后续新同学可以直接跟着文档练习与复现。