PageSourceSearch

https://code2life.top/blog

html code2life.top collected 2026-10-04 05:55:09 UTC 22,314 bytes, 42 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US" dir="ltr">
3  <head>
4    <meta charset="utf-8">
5    <meta name="viewport" content="width=device-width,initial-scale=1">
6    <title>Blog | Code2Life - 全栈开发|云原生|软件设计|管理思考</title>
7    <meta name="description" content="Joey Yang (Code2Life)'s blog site">
8    <meta name="generator" content="VitePress v1.5.0">
9    <link rel="preload stylesheet" href="/assets/style.DhW7nk99.css" as="style">
10    <link rel="preload stylesheet" href="/vp-icons.css" as="style">
11    
12    
12<script type="module" src="/assets/app.DzTknlNZ.js"></script>
12
13    <link rel="modulepreload" href="/assets/chunks/theme.DVtnmTvg.js">
14    <link rel="modulepreload" href="/assets/chunks/framework.CiGnms68.js">
15    <link rel="modulepreload" href="/assets/blog.md.5Mq84PIF.lean.js">
16    <meta name="theme-color" content="#13212e">
17    <meta name="color-scheme" content="light">
18    <meta name="robots" content="index, follow">
19    <link rel="icon" type="image/x-icon" href="/favicon.ico">
vendor: 68 bytes, lines 19-20
19
20    <script async src="https://www.googletagmanager.com/gtag/js?id=
20G-EJM3ZBHLCH
vendor: 16 bytes, lines 20-21
20"></script>
21    
21<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-EJM3ZBHLCH");</script>
21
22    
22<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
22
23  </head>
24  <body>
25    <div id="app"><div class="Layout" data-v-52f33056><!--[--><!--]--><!--[--><span tabindex="-1" data-v-6a9359c0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-6a9359c0> Skip to content </a><!--]--><!----><header class="VPNav" data-v-52f33056 data-v-454ec8d7><div class="VPNavBar" data-v-454ec8d7 data-v-8d0e9188><div class="wrapper" data-v-8d0e9188><div class="container" data-v-8d0e9188><div class="title" data-v-8d0e9188><div class="VPNavBarTitle" data-v-8d0e9188 data-v-f3afd0ff><a class="title" href="/" data-v-f3afd0ff><!--[--><!--]--><!--[--><img class="VPImage logo" src="/logo.png" alt data-v-24074115><!--]--><!----><!--[--><!--]--></a></div></div><div class="content" data-v-8d0e9188><div class="content-body" data-v-8d0e9188><!--[--><!--]--><div class="VPNavBarSearch search" data-v-8d0e9188><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-8d0e9188 data-v-f1aa612c><span id="main-nav-aria-label" class="visually-hidden" data-v-f1aa612c> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/" tabindex="0" data-v-f1aa612c data-v-ccefb4b3><!--[--><span data-v-ccefb4b3>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/blog" tabindex="0" data-v-f1aa612c data-v-ccefb4b3><!--[--><span data-v-ccefb4b3>Blogs</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/projects" tabindex="0" data-v-f1aa612c data-v-ccefb4b3><!--[--><span data-v-ccefb4b3>Projects</span><!--]--></a><!--]--><!--]--></nav><!----><!----><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-8d0e9188 data-v-2a1c3a33 data-v-ace99a73><!--[--><a class="VPSocialLink no-icon" href="https://github.com/code2life" aria-label="GitHub" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="32" height="32" viewBox="0 0 24 24">
26                  <title>Github</title>
27                  <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2c2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2a4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6c-.6.6-.6 1.2-.5 2V21"/>
28                </svg></a><a class="VPSocialLink no-icon" href="https://www.linkedin.com/in/joey-yang-023448244/" aria-label="Linkedin" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="currentColor" d="M216 24H40a16 16 0 0 0-16 16v176a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V40a16 16 0 0 0-16-16m0 192H40V40h176zM96 112v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0m88 28v36a8 8 0 0 1-16 0v-36a20 20 0 0 0-40 0v36a8 8 0 0 1-16 0v-64a8 8 0 0 1 15.79-1.78A36 36 0 0 1 184 140m-84-56a12 12 0 1 1-12-12a12 12 0 0 1 12 12"/></svg></a><a class="VPSocialLink no-icon" href="/cdn-cgi/l/email-protection#0665696263346a6f6063467375726528636273" aria-label="Mail" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="m3 7l9 6l9-6"/></g></svg></a><a class="VPSocialLink no-icon" href="/feed.xml" aria-label="RSS Feed" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="32" height="32" viewBox="0 0 24 24">
29                  <title>RSS Feed</title>
30                  <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 19a1 1 0 1 0 2 0a1 1 0 1 0-2 0M4 4a16 16 0 0 1 16 16M4 11a9 9 0 0 1 9 9"/>
31                </svg></a>
31<!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-8d0e9188 data-v-092568a3 data-v-76b1ce2d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-76b1ce2d><span class="vpi-more-horizontal icon" data-v-76b1ce2d></span></button><div class="menu" data-v-76b1ce2d><div class="VPMenu" data-v-76b1ce2d data-v-10d1a638><!----><!--[--><!--[--><!----><!----><div class="group" data-v-092568a3><div class="item social-links" data-v-092568a3><div class="VPSocialLinks social-links-list" data-v-092568a3 data-v-ace99a73><!--[--><a class="VPSocialLink no-icon" href="https://github.com/code2life" aria-label="GitHub" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="32" height="32" viewBox="0 0 24 24">
32                  <title>Github</title>
33                  <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2c2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2a4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6c-.6.6-.6 1.2-.5 2V21"/>
34                </svg></a><a class="VPSocialLink no-icon" href="https://www.linkedin.com/in/joey-yang-023448244/" aria-label="Linkedin" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="currentColor" d="M216 24H40a16 16 0 0 0-16 16v176a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V40a16 16 0 0 0-16-16m0 192H40V40h176zM96 112v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0m88 28v36a8 8 0 0 1-16 0v-36a20 20 0 0 0-40 0v36a8 8 0 0 1-16 0v-64a8 8 0 0 1 15.79-1.78A36 36 0 0 1 184 140m-84-56a12 12 0 1 1-12-12a12 12 0 0 1 12 12"/></svg></a><a class="VPSocialLink no-icon" href="/cdn-cgi/l/email-protection#9ffcf0fbfaadf3f6f9fadfeaecebfcb1fafbea" aria-label="Mail" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><path d="m3 7l9 6l9-6"/></g></svg></a><a class="VPSocialLink no-icon" href="/feed.xml" aria-label="RSS Feed" target="_blank" rel="noopener" data-v-ace99a73 data-v-73e8abff><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="32" height="32" viewBox="0 0 24 24">
35                  <title>RSS Feed</title>
36                  <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 19a1 1 0 1 0 2 0a1 1 0 1 0-2 0M4 4a16 16 0 0 1 16 16M4 11a9 9 0 0 1 9 9"/>
37                </svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-8d0e9188 data-v-f9856ab2><span class="container" data-v-f9856ab2><span class="top" data-v-f9856ab2></span><span class="middle" data-v-f9856ab2></span><span class="bottom" data-v-f9856ab2></span></span></button></div></div></div></div><div class="divider" data-v-8d0e9188><div class="divider-line" data-v-8d0e9188></div></div></div><!----></header><div class="VPLocalNav empty fixed" data-v-52f33056 data-v-4b363c21><div class="container" data-v-4b363c21><!----><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-4b363c21 data-v-64667921><button data-v-64667921>Return to top</button><!----></div></div></div><!----><div class="VPContent" id="VPContent" data-v-52f33056 data-v-e01428ae><div class="VPDoc has-aside" data-v-e01428ae data-v-da035082><!--[--><!--[--><!--[--><!----><!--]--><!--]--><!--]--><div class="container" data-v-da035082><div class="aside" data-v-da035082><div class="aside-curtain" data-v-da035082></div><div class="aside-container" data-v-da035082><div class="aside-content" data-v-da035082><div class="VPDocAside" data-v-da035082 data-v-596dff96><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-596dff96 data-v-9d1b7ffa><div class="content" data-v-9d1b7ffa><div class="outline-marker" data-v-9d1b7ffa></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-9d1b7ffa>Table of Contents</div><ul class="VPDocOutlineItem root" data-v-9d1b7ffa data-v-d2ed7ed0><!--[--><!--]--></ul></div></nav><!--[--><!--[--><!--[--><!--[--><section class="mt-3 pl-4 text-[14px]/7"><div class="font-bold" role="heading" aria-level="2">All Tags</div><address class="flex flex-col text-[--vp-c-text-2]"><!--[--><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">JS/TS (14) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">DevOps (17) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">软件设计 (13) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">Java (7) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">Others (7) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">Kubernetes (7) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">Golang (2) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">IoT (3) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">分布式系统 (8) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">C# (3) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">Database (2) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">管理学 (7) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">AI (2) </a><a class="flex items-center gap-1.5 hover:text-[--vp-c-text-1] cursor-pointer">Serverless (2) </a><!--]--></address></section><!--]--><!--]--><!--]--><!--]--><div class="spacer" data-v-596dff96></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-da035082><div class="content-container" data-v-da035082><!--[--><!--]--><main class="main" data-v-da035082><div style="position:relative;" class="vp-doc _blog" data-v-da035082><div><!----></div></div></main><footer class="VPDocFooter" data-v-da035082 data-v-55126a45><!--[--><!--]--><!----><!----></footer><!--[--><!--[--><!--[--><!----><!--]--><!--]--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="z-[--vp-z-index-footer] border-t border-[--vp-c-gutter] px-6 py-8" data-v-52f33056><div class="max-[--vp-layout-max-width] mx-auto text-center"><div class="mb-3 flex items-center justify-center gap-4"><!--[--><a href="https://github.com/code2life" title="GitHub" target="_blank" class="transition duration-300 hover:text-[--vp-c-brand-1]"><span class="sr-only">GitHub</span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1.25em" height="1.25em" viewBox="0 0 16 16"></svg></a><a href="https://www.linkedin.com/in/joey-yang-023448244/" title="Linkedin" target="_blank" class="transition duration-300 hover:text-[--vp-c-brand-1]"><span class="sr-only">Linkedin</span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1.25em" height="1.25em" viewBox="0 0 16 16"></svg></a><a href="/cdn-cgi/l/email-protection#dbb8b4bfbee9b7b2bdbe9baea8afb8f5bebfae" title="Mail" target="_blank" class="transition duration-300 hover:text-[--vp-c-brand-1]"><span class="sr-only">Mail</span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1.25em" height="1.25em" viewBox="0 0 16 16"></svg></a><a href="/feed.xml" title="RSS Feed" target="_blank" class="transition duration-300 hover:text-[--vp-c-brand-1]"><span class="sr-only">RSS Feed</span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" style="" width="1.25em" height="1.25em" viewBox="0 0 16 16"></svg></a>
37<!--]--></div><p class="text-sm/6 font-medium text-[--vp-c-text-2]"><a class="text-[--vp-c-brand-1] transition duration-300 hover:text-[--vp-c-brand-2]" href="https://github.com/code2life/joey-blog-site/blob/main/LICENSE-POST" target="_blank">CC BY 4.0</a> | <a class="text-[--vp-c-brand-1] transition duration-300 hover:text-[--vp-c-brand-2]" href="https://github.com/code2life/joey-blog-site/blob/main/LICENSE-CODE" target="_blank">MIT License</a><span class="block sm:inline"><span class="hidden sm:inline"> | </span> Copyright © 2023-2026 <a class="italic text-[--vp-c-brand-1] transition duration-300 hover:text-[--vp-c-brand-2]" href="/cdn-cgi/l/email-protection#781b171c1d4a14111e1d380d0b0c1b561d1c0d" target="_blank">Code2Life</a></span>    <a href="https://beian.miit.gov.cn" target="_blank">网站备案编号:皖ICP备18004921号</a></p></div></footer><!--[--><div class="paperOverlay"></div><!--]--></div></div>
vendor: 113 bytes, lines 37-38
37
38    <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
38<script>window.__VP_HASH_MAP__=JSON.parse("{\"2020_01_06_0047-raspberrypi_index.md\":\"CpcdBjZk\",\"blog.md\":\"5Mq84PIF\",\"blog_00001-reading-list.md\":\"BXcBSSmS\",\"blog_0001-js-note-call.md\":\"ghGxHNEZ\",\"blog_0002-tatris.md\":\"CjzDTMlV\",\"blog_0003-checkbox-detail.md\":\"BQ2gS5Qd\",\"blog_0004-singleton-pattern.md\":\"Bg9xlTtt\",\"blog_0005-pseudo-class-scrollbar.md\":\"BMXpoT28\",\"blog_0006-es6-change-p1.md\":\"DXb3xkSd\",\"blog_0007-es6-change-p2.md\":\"Oy1CmKKN\",\"blog_0008-lodash-doc.md\":\"BCbhg-oa\",\"blog_0009-linux-systemd-startup.md\":\"GAKcepS_\",\"blog_0010-js-scroll-easing.md\":\"DamDaVrP\",\"blog_0011-mybatis-generator.md\":\"HlK0b7yi\",\"blog_0012-debounce-throttle.md\":\"CVU5Mv9p\",\"blog_0013-csharp-xml-rw.md\":\"DnAq2pG3\",\"blog_0014-linux-shell-command.md\":\"tJLEJitX\",\"blog_0015-https-http2-tls.md\":\"C8snWKS2\",\"blog_0016-oracle-sql.md\":\"dzj9tZym\",\"blog_0017-nodejs-childprocess-and-cluster.md\":\"B7iaT36k\",\"blog_0018-docker-concepts.md\":\"CnQylsKX\",\"blog_0019-docker-commands.md\":\"37PcHFZI\",\"blog_0020-web-perf-improve.md\":\"BY2Jgk2m\",\"blog_0021-csharp-delegate.md\":\"DSpVSyBP\",\"blog_0022-csharp-async-update.md\":\"C5RDG4l6\",\"blog_0023-etcd-thinking.md\":\"DNCdolFk\",\"blog_0024-node-v8-extension.md\":\"CKNxFeYb\",\"blog_0025-iot-design.md\":\"CDqAXjyZ\",\"blog_0026-iot-em-dev.md\":\"Be6aBHPF\",\"blog_0027-typescript-startup.md\":\"DEOIGt8U\",\"blog_0028-go-snippets-1.md\":\"B1I-yiAc\",\"blog_0031-rancher-trial.md\":\"CTSUbcxf\",\"blog_0032-k8s-commands.md\":\"CDdwpb99\",\"blog_0033-istio-trial.md\":\"D0bTmfA0\",\"blog_0034-lets-encrypt.md\":\"D2UNGjE7\",\"blog_0035-fault-injection.md\":\"9vlL-2Mn\",\"blog_0036-linux-kernel-param.md\":\"BQ0ZMHH2\",\"blog_0037-k8s-tunnel.md\":\"BiuYVfdc\",\"blog_0041-goole-sre-thinking.md\":\"CTjXZZxl\",\"blog_0043-jmh-benchmark.md\":\"D6HhOGe3\",\"blog_0044-es-ilm-introduction.md\":\"DJoK7p2m\",\"blog_0045-particle-system.md\":\"BSwAheG7\",\"blog_0046-spring-event.md\":\"Bpo82WgB\",\"blog_0048-prometheus-in-action-start.md\":\"DVIM09xa\",\"blog_0049-prometheus-in-action-usage.md\":\"DDtDSSfA\",\"blog_0050-prometheus-in-action-impl.md\":\"BBndO0TL\",\"blog_0051-prometheus-in-action-thinking.md\":\"I5JFpwWP\",\"blog_0052-scalability.md\":\"BR5y7mXP\",\"blog_0053-ocp.md\":\"BM4N2n-4\",\"blog_0054-polling-to-event-driven.md\":\"Cnvh6xyq\",\"blog_0055-performance.md\":\"BpVl0zbX\",\"blog_0056-performance2.md\":\"vD0WNaZa\",\"blog_0056-performance3.md\":\"BRs8uLCF\",\"blog_0057-dip.md\":\"pcRZZV-l\",\"blog_0058-12-factor.md\":\"DloewX0j\",\"blog_0059-post-graduate-exam.md\":\"BLVHgAIz\",\"blog_0060-gradle-multi-module.md\":\"DJB1P3rt\",\"blog_0061-spring-boot-dynamic-config.md\":\"L31_wkDK\",\"blog_0062-concurrent-model-async-programming.md\":\"7us5QHEk\",\"blog_0063-gmc.md\":\"BkafQZ9d\",\"blog_0063-p-r-i.md\":\"99Vzik_O\",\"blog_0070-temporal-notes.md\":\"DM5WtLsD\",\"blog_0071-engineer-cross-culture.md\":\"Df3_AIXa\",\"blog_0072-k8s-in-30-min.md\":\"D2EJNlzX\",\"blog_0073-4-types-of-r-n-d.md\":\"Bx9H4Pbf\",\"blog_0074-tech-team.md\":\"BT-iER5x\",\"blog_0075-enterprise-6-order-derivative.md\":\"CKtsFleZ\",\"blog_0077-2023-summary.md\":\"CgTWh7AE\",\"blog_0078-how-to-write-good-tech-docs.md\":\"DRp6HORZ\",\"blog_0079-what-is-saas.md\":\"CTv2EijW\",\"blog_0081-sandbox-research-1.md\":\"DzwIget9\",\"blog_0081-sandbox-research-2.md\":\"IAlnd2hv\",\"blog_0084-why-tensor-fusion-en.md\":\"CDy0UXNs\",\"blog_0084-why-tensor-fusion.md\":\"DgWqt78J\",\"blog_0099-2024-summary.md\":\"BdDhvsNV\",\"blog_0100-startup.md\":\"CY2_1KYT\",\"index.md\":\"CFIG9veS\",\"projects.md\":\"PLfwGAV1\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Code2Life - 全栈开发|云原生|软件设计|管理思考\",\"description\":\"Joey Yang (Code2Life)'s blog site\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":false,\"themeConfig\":{\"logo\":\"/logo.png\",\"siteTitle\":false,\"outline\":{\"level\":[2,3],\"label\":\"Table of Contents\"},\"search\":{\"provider\":\"local\"},\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"Blogs\",\"link\":\"/blog\",\"activeMatch\":\"/blog/?\"},{\"text\":\"Projects\",\"link\":\"/projects\"}],\"socialLinks\":[{\"icon\":{\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" aria-hidden=\\\"true\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 24 24\\\">\\n                  <title>Github</title>\\n                  <path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M9 19c-4.3 1.4-4.3-2.5-6-3m12 5v-3.5c0-1 .1-1.4-.5-2c2.8-.3 5.5-1.4 5.5-6a4.6 4.6 0 0 0-1.3-3.2a4.2 4.2 0 0 0-.1-3.2s-1.1-.3-3.5 1.3a12.3 12.3 0 0 0-6.2 0C6.5 2.8 5.4 3.1 5.4 3.1a4.2 4.2 0 0 0-.1 3.2A4.6 4.6 0 0 0 4 9.5c0 4.6 2.7 5.7 5.5 6c-.6.6-.6 1.2-.5 2V21\\\"/>\\n                </svg>\"},\"link\":\"https://github.com/code2life\",\"ariaLabel\":\"GitHub\"},{\"icon\":{\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 256 256\\\">
38<path fill=\\\"currentColor\\\" d=\\\"M216 24H40a16 16 0 0 0-16 16v176a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V40a16 16 0 0 0-16-16m0 192H40V40h176zM96 112v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0m88 28v36a8 8 0 0 1-16 0v-36a20 20 0 0 0-40 0v36a8 8 0 0 1-16 0v-64a8 8 0 0 1 15.79-1.78A36 36 0 0 1 184 140m-84-56a12 12 0 1 1-12-12a12 12 0 0 1 12 12\\\"/></svg>\"},\"link\":\"https://www.linkedin.com/in/joey-yang-023448244/\",\"ariaLabel\":\"Linkedin\"},{\"icon\":{\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 24 24\\\"><g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\\\"/><path d=\\\"m3 7l9 6l9-6\\\"/></g></svg>\"},\"link\":\"mailto:[email protected]\",\"ariaLabel\":\"Mail\"},{\"icon\":{\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" aria-hidden=\\\"true\\\" width=\\\"32\\\" height=\\\"32\\\" viewBox=\\\"0 0 24 24\\\">\\n                  <title>RSS Feed</title>\\n                  <path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M4 19a1 1 0 1 0 2 0a1 1 0 1 0-2 0M4 4a16 16 0 0 1 16 16M4 11a9 9 0 0 1 9 9\\\"/>\\n                </svg>\"},\"link\":\"/feed.xml\",\"ariaLabel\":\"RSS Feed\"}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
38
39    
40  
40<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"0d8c443b7210413f985da3660874c015","r":1,"spa":2}' crossorigin="anonymous"></script>
40
41</body>
42</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.