PageSourceSearch

https://physchen.com/zh-Hans/blog/

html physchen.com collected 2026-10-04 21:13:11 UTC 56,119 bytes, 324 lines download raw bytes

1<!DOCTYPE html><html lang="zh-Hans" data-astro-cid-rabw6wx6> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="theme-color" content="#f1f6fa" media="(prefers-color-scheme: light)"><meta name="theme-color" content="#030914" media="(prefers-color-scheme: dark)"><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate">
1<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CDGfc0hd.js"></script>
1<script>
2  (() => {
3    const storageKey = 'theme-preference';
4
5    const applyThemeFromStorage = () => {
6      const preference = localStorage.getItem(storageKey) || 'system';
7      const scheme =
8        preference === 'system'
9          ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
10          : preference;
11
12      document.documentElement.dataset.theme = preference;
13      document.documentElement.dataset.colorScheme = scheme;
14      document.documentElement.style.colorScheme = scheme;
15    };
16
17    applyThemeFromStorage();
18    document.addEventListener('astro:page-load', applyThemeFromStorage);
19  })();
20</script>
20<script type="module" src="/_astro/BaseHead.astro_astro_type_script_index_0_lang.BiPqc5jU.js"></script>
20<script>
21  (() => {
22    let savedTheme = null;
23
24    function captureTheme() {
25      const root = document.documentElement;
26      return {
27        theme: root.dataset.theme ?? '',
28        colorScheme: root.dataset.colorScheme ?? '',
29        inlineColorScheme: root.style.colorScheme,
30      };
31    }
32
33    function applyPrintTheme() {
34      const root = document.documentElement;
35      root.dataset.theme = 'light';
36      root.dataset.colorScheme = 'light';
37      root.style.colorScheme = 'light';
38    }
39
40    function restoreTheme() {
41      if (!savedTheme) return;
42      const root = document.documentElement;
43      root.dataset.theme = savedTheme.theme;
44      root.dataset.colorScheme = savedTheme.colorScheme;
45      root.style.colorScheme = savedTheme.inlineColorScheme;
46      savedTheme = null;
47    }
48
49    function onPrintStart() {
50      if (!savedTheme) {
51        savedTheme = captureTheme();
52      }
53      applyPrintTheme();
54    }
55
56    function onPrintEnd() {
57      restoreTheme();
58    }
59
60    window.addEventListener('beforeprint', onPrintStart);
61    window.addEventListener('afterprint', onPrintEnd);
62
63    const printMedia = window.matchMedia('print');
64    if (typeof printMedia.addEventListener === 'function') {
65      printMedia.addEventListener('change', (event) => {
66        if (event.matches) {
67          onPrintStart();
68        } else {
69          onPrintEnd();
70        }
71      });
72    }
73  })();
74</script>
74<link rel="icon" href="/favicon.ico" sizes="48x48"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000000"><link rel="manifest" href="/site.zh-Hans.webmanifest"><meta name="msapplication-config" content="/browserconfig.xml"><link rel="sitemap" href="/sitemap-index.xml"><link rel="alternate" type="application/rss+xml" title="PhysChen.com" href="https://physchen.com/zh-Hans/rss.xml"><meta name="generator" content="Astro v5.18.2">
74<script type="module">let f=()=>{};function E(){f();const r=document.documentElement,L=new AbortController,{signal:o}=L,n=document.createElement("div");n.className="page-scrollbar";const t=document.createElement("div");t.className="page-scrollbar__thumb",t.tabIndex=0,t.setAttribute("role","scrollbar"),t.setAttribute("aria-label",r.lang.startsWith("zh")?"页面滚动条":"Page scrollbar"),t.setAttribute("aria-orientation","vertical"),t.setAttribute("aria-valuemin","0"),t.setAttribute("aria-valuemax","100"),r.id||="page-scroll-root",t.setAttribute("aria-controls",r.id),n.append(t),document.body.append(n);let u=0,m=0,l=0,a=0,v=!1,i=null;const p=()=>{m=0;const e=r.clientHeight,s=Math.max(0,e-8);a=Math.max(0,r.scrollHeight-e);const d=[r,document.body].some(T=>["hidden","clip"].includes(getComputedStyle(T).overflowY));n.hidden=a<=0||d;const A=Math.min(s,Math.max(48,s*e/r.scrollHeight));l=s-A;const M=a?Math.min(1,Math.max(0,window.scrollY/a)):0;t.style.height=`${A}px`,t.style.transform=`translateY(${4+M*l}px)`,t.setAttribute("aria-valuenow",String(Math.round(M*100)))},b=()=>{m||(m=requestAnimationFrame(p))},w=()=>{window.clearTimeout(u),u=window.setTimeout(()=>{!v&&!i&&document.activeElement!==t&&n.classList.remove("is-visible")},650)},c=()=>{n.classList.add("is-visible"),w()};window.addEventListener("scroll",()=>{b(),c()},{passive:!0,signal:o}),window.addEventListener("resize",b,{passive:!0,signal:o}),t.addEventListener("focus",c,{signal:o}),t.addEventListener("blur",w,{signal:o}),n.addEventListener("pointerenter",e=>{v=e.pointerType==="mouse"||e.pointerType==="pen",c()},{signal:o}),n.addEventListener("pointerleave",()=>{v=!1,w()},{signal:o}),n.addEventListener("pointerdown",e=>{if(!(e.button!==0||i)){if(e.preventDefault(),p(),e.target!==t&&l>0){const s=t.getBoundingClientRect().height,d=(e.clientY-4-s/2)/l;window.scrollTo({top:Math.min(1,Math.max(0,d))*a,behavior:"instant"}),p()}i={pointerId:e.pointerId,y:e.clientY,scrollTop:window.scrollY},n.setPointerCapture(e.pointerId),c()}},{signal:o}),n.addEventListener("pointermove",e=>{!i||i.pointerId!==e.pointerId||l<=0||window.scrollTo({top:i.scrollTop+(e.clientY-i.y)*a/l,behavior:"instant"})},{signal:o});const h=e=>{i?.pointerId===e.pointerId&&(i=null,w())};n.addEventListener("lostpointercapture",h,{signal:o}),n.addEventListener("pointerup",h,{signal:o}),n.addEventListener("pointercancel",h,{signal:o}),t.addEventListener("keydown",e=>{const s=r.clientHeight*.9,d={ArrowDown:window.scrollY+40,ArrowUp:window.scrollY-40,PageDown:window.scrollY+s,PageUp:window.scrollY-s,Home:0,End:a};e.key in d&&(e.preventDefault(),window.scrollTo({top:d[e.key],behavior:"instant"}),c())},{signal:o}),document.addEventListener("visibilitychange",()=>{document.hidden&&(window.clearTimeout(u),n.classList.remove("is-visible"))},{signal:o});const g=new ResizeObserver(b);g.observe(document.body),g.observe(r);const y=new MutationObserver(b);for(const e of[r,document.body])y.observe(e,{attributes:!0,attributeFilter:["style","class"]});p(),f=()=>{L.abort(),window.clearTimeout(u),cancelAnimationFrame(m),g.disconnect(),y.disconnect(),n.remove()}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",E,{once:!0}):E();document.addEventListener("astro:page-load",E);document.addEventListener("astro:before-swap",()=>f());</script>
74<!-- Canonical URL --><link rel="canonical" href="https://physchen.com/zh-Hans/blog/"><link rel="alternate" hreflang="zh-Hans" href="https://physchen.com/zh-Hans/blog/"><link rel="alternate" hreflang="en" href="https://physchen.com/en/blog/"><link rel="alternate" hreflang="x-default" href="https://physchen.com/zh-Hans/blog/"><!-- Primary Meta Tags --><title>随笔 - PhysChen.com</title><meta name="title" content="随笔 - PhysChen.com"><meta name="description" content="陈华的数字书房:独立 IB 和 A-level 物理教学、软件开发、理论物理研究与摄影"><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://physchen.com/zh-Hans/blog/"><meta property="og:title" content="随笔 - PhysChen.com"><meta property="og:description" content="陈华的数字书房:独立 IB 和 A-level 物理教学、软件开发、理论物理研究与摄影"><meta property="og:site_name" content="PhysChen.com"><meta property="og:locale" content="zh_CN"><meta property="og:locale:alternate" content="en_US"><!-- Twitter --><meta name="twitter:card" content="summary"><meta name="twitter:title" content="随笔 - PhysChen.com"><meta name="twitter:description" content="陈华的数字书房:独立 IB 和 A-level 物理教学、软件开发、理论物理研究与摄影"><meta data-pagefind-meta="display_title[content]" content="随笔"><link rel="stylesheet" href="/_astro/index.CYRMP3iS.css">
75<style>.page-back-link[data-astro-cid-5iswkh5v]{margin:.9rem 0 0}.page-back-link__anchor[data-astro-cid-5iswkh5v]{color:var(--color-accent);text-decoration:none}.page-back-link__anchor[data-astro-cid-5iswkh5v]:hover{color:var(--color-accent-strong)}
76</style>
77<link rel="stylesheet" href="/_astro/index.XA5HOcfZ.css"></head> <body data-astro-cid-rabw6wx6>
77 <header class="site-header sticky top-0 z-[101] bg-[color:var(--page-bg-soft)]/95 px-0 py-3 backdrop-blur-md min-[1100px]:py-4" data-enable-original-image-on-zoom="true" data-lightbox-labels="{&#34;close&#34;:&#34;关闭&#34;,&#34;previous&#34;:&#34;上一张图片&#34;,&#34;next&#34;:&#34;下一张图片&#34;,&#34;loadOriginal&#34;:&#34;加载原图&#34;,&#34;loadingOriginal&#34;:&#34;加载中...&#34;,&#34;originalLoaded&#34;:&#34;已加载原图&#34;,&#34;fullscreen&#34;:&#34;全屏&#34;,&#34;exitFullscreen&#34;:&#34;退出全屏&#34;}" data-astro-cid-3ef6ksr2> <nav class="site-nav mx-auto flex items-center justify-between gap-3 px-0 py-0" data-astro-cid-3ef6ksr2> <div class="site-title shrink-0" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/" class="text-xl font-semibold tracking-tight text-[var(--color-heading)] sm:text-2xl" data-astro-cid-3ef6ksr2>PhysChen.com</a> </div> <div class="desktop-nav" aria-label="主导航" data-astro-cid-3ef6ksr2> <span class="nav-hover-indicator" aria-hidden="true" data-astro-cid-3ef6ksr2></span> <a href="/zh-Hans/" class="nav-pill" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">主页</span> </a><div class="nav-item nav-item--has-dropdown" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/physics/" class="nav-pill" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">物理</span> </a> <div class="nav-dropdown" role="menu" aria-label="物理分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/physics/notes/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">笔记</span>  </a><a href="/zh-Hans/physics/pop-sci/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">科普</span>  </a><a href="/zh-Hans/physics/research/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">研究</span>  </a> </div> </div><div class="nav-item nav-item--has-dropdown" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/teaching/" class="nav-pill" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">教学</span> </a> <div class="nav-dropdown" role="menu" aria-label="教学分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/teaching/ib/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">IB 课程</span>  </a> </div> </div><div class="nav-item nav-item--has-dropdown" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/programming/" class="nav-pill" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">编程</span> </a> <div class="nav-dropdown" role="menu" aria-label="编程分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/programming/notes/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">笔记</span>  </a><a href="/zh-Hans/programming/projects/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">项目</span>  </a> </div> </div><div class="nav-item nav-item--has-dropdown" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/blog/" class="nav-pill active" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">随笔</span> </a> <div class="nav-dropdown" role="menu" aria-label="随笔分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/blog/impressions/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">所感</span>  </a><a href="/zh-Hans/blog/insights/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">所思</span>  </a> </div> </div><div class="nav-item nav-item--has-dropdown" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/photography/" class="nav-pill" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">摄影</span> </a> <div class="nav-dropdown" role="menu" aria-label="摄影分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/photography/Shenzhen/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Shenzhen</span>  </a><a href="/zh-Hans/photography/Cats/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Cats</span>  </a><a href="/zh-Hans/photography/Portrait/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Portrait</span>  </a><a href="/zh-Hans/photography/Others/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Others</span>  </a><a href="/zh-Hans/photography/Wuhan/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Wuhan</span>  </a><a href="/zh-Hans/photography/Japan/" class="nav-dropdown__link" role="menuitem" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Japan</span>  </a> </div> </div><a href="/zh-Hans/about/" class="nav-pill" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">关于</span> </a> </div> <div class="header-actions shrink-0" data-astro-cid-3ef6ksr2> <div class="header-action-slot" data-header-action-slot="music" data-astro-cid-3ef6ksr2> <div class="music-player" data-music-player data-manifest-url="/generated-music/manifest.json" data-label-play="播放音乐" data-label-pause="暂停音乐" data-label-playlist="播放列表" data-label-prev="上一曲" data-label-next="下一曲" data-label-mode-sequential="顺序播放" data-label-mode-shuffle="随机播放" data-label-mode-loop="列表循环" data-label-mode-loop-one="单曲循环" data-label-now-playing="正在播放" data-default-track-id data-persist-playback="true"> <button type="button" class="music-player__trigger inline-flex h-10 w-10 items-center justify-center rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-heading)] transition duration-300 hover:border-[var(--color-accent)] hover:text-[var(--color-accent)]" data-music-trigger aria-label="播放音乐" title="播放音乐" aria-pressed="false"> <span class="music-player__icon music-player__icon--play" aria-hidden="true"><svg class="music-player__svg" width="30" height="30" viewBox="0 0 24 24" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true"><path d="M8.85 6.5c-.55-.33-1.25.08-1.25.7v9.8c0 .62.7.97 1.25.7l8.6-5.05c.52-.31.52-1.09 0-1.4L8.85 6.5z" fill="currentColor"/></svg></span> <span class="music-player__icon music-player__icon--pause" aria-hidden="true"><svg class="music-player__svg" width="30" height="30" viewBox="0 0 24 24" fill="none" preserveAspectRatio="xMidYMid meet" aria-hidden="true"><rect x="8.35" y="6.75" width="2.15" height="10.5" rx="1.05" fill="currentColor"/><rect x="13.5" y="6.75" width="2.15" height="10.5" rx="1.05" fill="currentColor"/></svg></span> </button> </div> </div> <div class="header-action-slot" data-header-action-slot="theme" data-astro-cid-3ef6ksr2> <div class="theme-toggle" aria-label="主题切换" data-astro-cid-3ef6ksr2> <button type="button" class="theme-btn inline-flex h-10 w-10 items-center justify-center rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-heading)] transition duration-300 hover:border-[var(--color-accent)] hover:text-[var(--color-accent)]" data-theme-switcher data-theme-state="system" data-label-base="主题" data-label-light="浅色" data-label-dark="深色" data-label-system="系统" aria-label="主题: 系统" title="主题: 系统" data-astro-cid-3ef6ksr2> <span class="sr-only" data-theme-label data-astro-cid-3ef6ksr2>系统</span> <svg class="theme-icon theme-icon-system" viewBox="0 0 24 24" aria-hidden="true" width="24" height="24" data-astro-cid-3ef6ksr2>
77 <path fill="currentColor" d="M7 4h10a3 3 0 0 1 3 3v7a3 3 0 0 1-3 3h-4v2h2v2H9v-2h2v-2H7a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3zm0 2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1H7z" data-astro-cid-3ef6ksr2></path> </svg> <svg class="theme-icon theme-icon-light" viewBox="0 0 24 24" aria-hidden="true" width="22" height="22" data-astro-cid-3ef6ksr2> <circle cx="12" cy="12" r="4.15" fill="none" stroke="currentColor" stroke-width="1.8" data-astro-cid-3ef6ksr2></circle> <path d="M12 2.75v2.1M12 19.15v2.1M5.46 5.46l1.49 1.49M17.05 17.05l1.49 1.49M2.75 12h2.1M19.15 12h2.1M5.46 18.54l1.49-1.49M17.05 6.95l1.49-1.49" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" data-astro-cid-3ef6ksr2></path> </svg> <svg class="theme-icon theme-icon-dark" viewBox="0 0 24 24" aria-hidden="true" width="24" height="24" data-astro-cid-3ef6ksr2> <path fill="currentColor" d="M21 14.5A8.5 8.5 0 1 1 9.5 3a7 7 0 0 0 11.5 11.5z" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> </div> <div class="header-action-slot" data-header-action-slot="language" data-astro-cid-3ef6ksr2> <a class="lang-toggle inline-flex h-10 w-10 items-center justify-center rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-heading)] transition duration-300 hover:border-[var(--color-accent)] hover:text-[var(--color-accent)]" href="/en/blog/" data-target-locale="en" aria-label="Switch to English" title="Switch to English" data-astro-cid-3ef6ksr2> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" data-astro-cid-3ef6ksr2><path fill="currentColor" d=" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z " data-astro-cid-3ef6ksr2></path></svg> </a> </div> <div class="header-action-slot" data-header-action-slot="search" data-astro-cid-3ef6ksr2> <button type="button" class="search-btn inline-flex h-10 w-10 items-center justify-center rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-heading)] transition duration-300 hover:border-[var(--color-accent)] hover:text-[var(--color-accent)]" data-search-open aria-label="打开搜索" title="打开搜索" data-astro-cid-3ef6ksr2> <svg width="20" height="20" viewBox="0 0 20 20" fill="none" aria-hidden="true" data-astro-cid-3ef6ksr2> <circle cx="9" cy="9" r="7" stroke="currentColor" stroke-width="2" data-astro-cid-3ef6ksr2></circle> <path d="M15 15L19 19" stroke="currentColor" stroke-width="2" stroke-linecap="round" data-astro-cid-3ef6ksr2></path> </svg> </button> </div> <button type="button" class="menu-toggle inline-flex h-10 w-10 items-center justify-center rounded-full border border-[var(--color-border)] bg-[var(--color-surface)] text-[var(--color-heading)] transition duration-300 hover:border-[var(--color-accent)] hover:text-[var(--color-accent)] min-[1100px]:hidden" aria-expanded="false" aria-controls="mobile-site-menu" aria-label="打开菜单" data-label-open="打开菜单" data-label-close="收起菜单" data-astro-cid-3ef6ksr2> <span class="sr-only" data-astro-cid-3ef6ksr2>菜单</span> <span class="menu-toggle__icon" aria-hidden="true" data-astro-cid-3ef6ksr2> <span class="menu-toggle__line menu-toggle__line--top" data-astro-cid-3ef6ksr2></span> <span class="menu-toggle__line menu-toggle__line--middle" data-astro-cid-3ef6ksr2></span> <span class="menu-toggle__line menu-toggle__line--bottom" data-astro-cid-3ef6ksr2></span> </span> </button> </div> </nav> </header> <div id="mobile-site-menu" class="mobile-menu-layer" hidden data-astro-cid-3ef6ksr2> <button type="button" class="mobile-menu-backdrop" tabindex="-1" aria-hidden="true" data-label-close="收起菜单" data-astro-cid-3ef6ksr2></button> <div class="mobile-menu" data-astro-cid-3ef6ksr2> <div class="mobile-menu-panel" data-astro-cid-3ef6ksr2> <div class="mobile-menu-home-row" data-astro-cid-3ef6ksr2> <div class="mobile-nav-group mobile-nav-group--home" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/" class="mobile-nav-link" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">主页</span> </a> </div> <div class="mobile-menu-stowed-actions" data-stowed-header-actions data-astro-cid-3ef6ksr2></div> </div> <div class="mobile-nav-columns" data-astro-cid-3ef6ksr2> <div class="mobile-nav-column" data-astro-cid-3ef6ksr2> <div class="mobile-nav-group" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/physics/" class="mobile-nav-link" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">物理</span> </a> <div class="mobile-nav-sublist" role="group" aria-label="物理分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/physics/notes/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">笔记</span>  </a><a href="/zh-Hans/physics/pop-sci/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">科普</span>  </a><a href="/zh-Hans/physics/research/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">研究</span>  </a> </div> </div><div class="mobile-nav-group" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/programming/" class="mobile-nav-link" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">编程</span> </a> <div class="mobile-nav-sublist" role="group" aria-label="编程分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/programming/notes/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">笔记</span>  </a><a href="/zh-Hans/programming/projects/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">项目</span>  </a> </div> </div><div class="mobile-nav-group" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/photography/" class="mobile-nav-link" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">摄影</span> </a> <div class="mobile-nav-sublist" role="group" aria-label="摄影分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/photography/Shenzhen/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Shenzhen</span>  </a><a href="/zh-Hans/photography/Cats/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Cats</span>  </a><a href="/zh-Hans/photography/Portrait/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Portrait</span>  </a><a href="/zh-Hans/photography/Others/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Others</span>  </a><a href="/zh-Hans/photography/Wuhan/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Wuhan</span>  </a><a href="/zh-Hans/photography/Japan/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">Japan</span>  </a> </div> </div> </div><div class="mobile-nav-column" data-astro-cid-3ef6ksr2> <div class="mobile-nav-group" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/teaching/" class="mobile-nav-link" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">
77教学</span> </a> <div class="mobile-nav-sublist" role="group" aria-label="教学分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/teaching/ib/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">IB 课程</span>  </a> </div> </div><div class="mobile-nav-group" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/blog/" class="mobile-nav-link active" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">随笔</span> </a> <div class="mobile-nav-sublist" role="group" aria-label="随笔分类" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/blog/impressions/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">所感</span>  </a><a href="/zh-Hans/blog/insights/" class="mobile-nav-sublink" data-astro-cid-3ef6ksr2="true">  <span class="inline-math">所思</span>  </a> </div> </div><div class="mobile-nav-group" data-astro-cid-3ef6ksr2> <a href="/zh-Hans/about/" class="mobile-nav-link" data-astro-cid-3ef6ksr2="true"> <span class="inline-math">关于</span> </a>  </div> </div> </div> </div> </div> </div> <div id="site-search-modal" class="search-modal" hidden data-site-search-modal role="dialog" aria-modal="true" aria-label="站内搜索" data-astro-cid-3ef6ksr2> <div class="search-modal-inner" data-site-search-dialog data-astro-cid-3ef6ksr2> <div class="search-panel" data-astro-cid-3ef6ksr2> <div class="search-form" data-astro-cid-3ef6ksr2> <input type="search" class="search-input" data-site-search-input placeholder="搜索..." aria-label="搜索..." data-astro-cid-3ef6ksr2> <button type="button" class="search-cancel site-search-close" data-search-close data-astro-cid-3ef6ksr2> 关闭 </button> </div>  <div class="search-results-host" data-site-search-results data-astro-cid-3ef6ksr2></div> </div> </div> </div> <div class="floating-controls" data-astro-cid-v4o2aonp>  <button class="fab-btn scroll-top" type="button" aria-label="回到顶部" data-astro-cid-v4o2aonp> <span class="vp-scroll-progress" role="progressbar" data-astro-cid-v4o2aonp> <svg width="48" height="48" viewBox="0 0 48 48" aria-hidden="true" data-astro-cid-v4o2aonp> <circle class="scroll-progress-bar" cx="24" cy="24" r="22" fill="none" stroke-width="2" stroke-linecap="round" data-astro-cid-v4o2aonp></circle> </svg> </span> <span class="back-to-top-icon" style="opacity:1;" data-astro-cid-v4o2aonp> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" data-astro-cid-v4o2aonp><path d="M12 19V5M12 5l-6 6M12 5l6 6" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-v4o2aonp></path></svg> </span> </button> </div>  
77<script type="module" src="/_astro/FloatingButtons.astro_astro_type_script_index_0_lang.BkvImoXf.js"></script>
77  
77<script type="module" src="/_astro/Header.astro_astro_type_script_index_0_lang.CdCQstbS.js"></script>
77 
77<script type="module" src="/_astro/Header.astro_astro_type_script_index_1_lang.Sc7sbC6l.js"></script>
77  <main class="list-page tuple-list-page" data-astro-cid-rabw6wx6> <section data-astro-cid-rabw6wx6> <div class="page-header" data-astro-cid-rabw6wx6> <h1 data-astro-cid-rabw6wx6><span class="inline-math">随笔</span></h1>  </div>  <div class="filter-group" data-astro-cid-rabw6wx6> <p class="filter-label" data-astro-cid-rabw6wx6>分类</p> <ul class="filter-list" role="list" data-astro-cid-rabw6wx6> <li data-astro-cid-rabw6wx6> <a class="filter-chip" href="/zh-Hans/blog/impressions/" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6><span class="inline-math">所感</span></span> <small class="filter-chip__count" data-astro-cid-rabw6wx6>8</small> </a> </li><li data-astro-cid-rabw6wx6> <a class="filter-chip" href="/zh-Hans/blog/insights/" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6><span class="inline-math">所思</span></span> <small class="filter-chip__count" data-astro-cid-rabw6wx6>0</small> </a> </li> </ul> </div> <div class="filter-group tag-cloud" data-astro-cid-6pyqhcr2><p class="filter-label" data-astro-cid-6pyqhcr2>标签</p><ul class="filter-list" role="list" data-astro-cid-6pyqhcr2><li data-astro-cid-6pyqhcr2><a class="filter-chip is-active" href="/zh-Hans/blog/" data-filter-kind="tag" data-filter-clear="true" aria-current="page" data-astro-cid-6pyqhcr2><span data-astro-cid-6pyqhcr2>全部</span></a></li><li data-astro-cid-6pyqhcr2><a class="filter-chip" href="/zh-Hans/blog/?tag=%E7%94%9F%E6%B4%BB" data-filter-kind="tag" data-filter-value="生活" data-astro-cid-6pyqhcr2><span data-astro-cid-6pyqhcr2><span class="inline-math">生活</span></span><small class="filter-chip__count" data-astro-cid-6pyqhcr2>8</small></a></li></ul></div> <ul class="post-list" data-astro-cid-rabw6wx6> <li class="featured" data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/storage-time/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2021-11-04T00:00:00.000Z"> 2021 年 11 月 4 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">封存时光</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">华师校园的变迁与个人心路历程。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/tones-in-pinyin/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2021-10-01T00:00:00.000Z"> 2021 年 10 月 1 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">无调不成声</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">中文名在拼音和拼写中的声调浅谈,以及对中国人的英文名拼写的看法:为方便识读,建议增加音调,配合中国特色的输入方案。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6>
77 <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/coffee/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2021-03-08T00:00:00.000Z"> 2021 年 3 月 8 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">我与咖啡</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">从速溶咖啡到手冲咖啡的奇妙体验。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/surprise-on-new-years-eve/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2020-01-24T00:00:00.000Z"> 2020 年 1 月 24 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">除夕的惊喜</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">第一篇学术论文被接收了!</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/let-the-hot-pot-penetrate-the-stomach/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2019-11-23T00:00:00.000Z"> 2019 年 11 月 23 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">清肠刮肚</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">与师兄师弟去东湖绿道骑行踏青。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6>
77 <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/coffee-in-wuhan-2/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2019-09-08T00:00:00.000Z"> 2019 年 9 月 8 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">一鼓作气</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">武汉咖啡店打卡第二站,Uncle G Coffee 与卓尔书店。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/wagon/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2019-09-01T00:00:00.000Z"> 2019 年 9 月 1 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">四轮马车</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">武汉咖啡店打卡之旅的开端,光谷 Wagon Coffee。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li><li data-post-item data-post-tags="生活" data-astro-cid-rabw6wx6> <a class="post-card" href="/zh-Hans/blog/impressions/the-business-travel-in-guiyang/" data-post-link data-navigation-mode="collection" data-astro-cid-rabw6wx6>  <div class="post-card__body" data-astro-cid-rabw6wx6> <div class="post-card__meta" data-astro-cid-rabw6wx6> <p class="date" data-astro-cid-rabw6wx6> <time datetime="2019-07-24T00:00:00.000Z"> 2019 年 7 月 24 日 </time> </p> </div> <h4 class="title" data-astro-cid-rabw6wx6><span class="inline-math">贵阳之行</span></h4> <p class="post-card__description" data-astro-cid-rabw6wx6><span class="inline-math">去贵阳参加学术会议,第一次做学术报告,参观 FAST 基地。</span></p> <span class="post-card__cta" data-astro-cid-rabw6wx6> <span data-astro-cid-rabw6wx6>阅读全文</span> <span class="post-card__cta-icons" aria-hidden="true" data-astro-cid-rabw6wx6> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6>
77 <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> <span class="post-card__cta-icon-wrap" data-astro-cid-rabw6wx6> <svg class="post-card__cta-icon" viewBox="0 0 12 12" focusable="false" data-astro-cid-rabw6wx6> <path d="M3 2.25 7.25 6 3 9.75" data-astro-cid-rabw6wx6></path> </svg> </span> </span> </span> </div> </a> </li> </ul> <p class="empty" hidden data-astro-cid-rabw6wx6>该分类下还没有文章。</p> </section> </main> <div class="main-footer" data-astro-cid-rabw6wx6><footer data-astro-cid-sz7xmlte> <div class="footer-shell" data-astro-cid-sz7xmlte> <nav class="social-links" aria-label="社交媒体" data-astro-cid-sz7xmlte> <a href="https://github.com/ichenh" target="_blank" rel="noreferrer" class="social-btn github" aria-label="GitHub" data-astro-cid-sz7xmlte> <svg class="brand-icon brand-icon--github" viewBox="0 0 16 16" aria-hidden="true" data-astro-cid-sz7xmlte> <path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" data-astro-cid-sz7xmlte></path> </svg> </a> <a href="https://www.xiaohongshu.com/user/profile/60d61ded0000000001001149" target="_blank" rel="noreferrer" class="social-btn xhs" aria-label="小红书" data-astro-cid-sz7xmlte> <svg class="brand-icon brand-icon--xhs" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-sz7xmlte> <path d="M22.405 9.879c.002.016.01.02.07.019h.725a.797.797 0 0 0 .78-.972.794.794 0 0 0-.884-.618.795.795 0 0 0-.692.794c0 .101-.002.666.001.777zm-11.509 4.808c-.203.001-1.353.004-1.685.003a2.528 2.528 0 0 1-.766-.126.025.025 0 0 0-.03.014L7.7 16.127a.025.025 0 0 0 .01.032c.111.06.336.124.495.124.66.01 1.32.002 1.981 0 .01 0 .02-.006.023-.015l.712-1.545a.025.025 0 0 0-.024-.036zM.477 9.91c-.071 0-.076.002-.076.01a.834.834 0 0 0-.01.08c-.027.397-.038.495-.234 3.06-.012.24-.034.389-.135.607-.026.057-.033.042.003.112.046.092.681 1.523.787 1.74.008.015.011.02.017.02.008 0 .033-.026.047-.044.147-.187.268-.391.371-.606.306-.635.44-1.325.486-1.706.014-.11.021-.22.03-.33l.204-2.616.022-.293c.003-.029 0-.033-.03-.034zm7.203 3.757a1.427 1.427 0 0 1-.135-.607c-.004-.084-.031-.39-.235-3.06a.443.443 0 0 0-.01-.082c-.004-.011-.052-.008-.076-.008h-1.48c-.03.001-.034.005-.03.034l.021.293c.076.982.153 1.964.233 2.946.05.4.186 1.085.487 1.706.103.215.223.419.37.606.015.018.037.051.048.049.02-.003.742-1.642.804-1.765.036-.07.03-.055.003-.112zm3.861-.913h-.872a.126.126 0 0 1-.116-.178l1.178-2.625a.025.025 0 0 0-.023-.035l-1.318-.003a.148.148 0 0 1-.135-.21l.876-1.954a.025.025 0 0 0-.023-.035h-1.56c-.01 0-.02.006-.024.015l-.926 2.068c-.085.169-.314.634-.399.938a.534.534 0 0 0-.02.191.46.46 0 0 0 .23.378.981.981 0 0 0 .46.119h.59c.041 0-.688 1.482-.834 1.972a.53.53 0 0 0-.023.172.465.465 0 0 0 .23.398c.15.092.342.12.475.12l1.66-.001c.01 0 .02-.006.023-.015l.575-1.28a.025.025 0 0 0-.024-.035zm-6.93-4.937H3.1a.032.032 0 0 0-.034.033c0 1.048-.01 2.795-.01 6.829 0 .288-.269.262-.28.262h-.74c-.04.001-.044.004-.04.047.001.037.465 1.064.555 1.263.01.02.03.033.051.033.157.003.767.009.938-.014.153-.02.3-.06.438-.132.3-.156.49-.419.595-.765.052-.172.075-.353.075-.533.002-2.33 0-4.66-.007-6.991a.032.032 0 0 0-.032-.032zm11.784 6.896c0-.014-.01-.021-.024-.022h-1.465c-.048-.001-.049-.002-.05-.049v-4.66c0-.072-.005-.07.07-.07h.863c.08 0 .075.004.075-.074V8.393c0-.082.006-.076-.08-.076h-3.5c-.064 0-.075-.006-.075.073v1.445c0 .083-.006.077.08.077h.854c.075 0 .07-.004.07.07v4.624c0 .095.008.084-.085.084-.37 0-1.11-.002-1.304 0-.048.001-.06.03-.06.03l-.697 1.519s-.014.025-.008.036c.006.01.013.008.058.008 1.748.003 3.495.002 5.243.002.03-.001.034-.006.035-.033v-1.539zm4.177-3.43c0 .013-.007.023-.02.024-.346.006-.692.004-1.037.004-.014-.002-.022-.01-.022-.024-.005-.434-.007-.869-.01-1.303 0-.072-.006-.071.07-.07l.733-.003c.041 0 .081.002.12.015.093.025.16.107.165.204.006.431.002 1.153.001 1.153zm2.67.244a1.953 1.953 0 0 0-.883-.222h-.18c-.04-.001-.04-.003-.042-.04V10.21c0-.132-.007-.263-.025-.394a1.823 1.823 0 0 0-.153-.53 1.533 1.533 0 0 0-.677-.71 2.167 2.167 0 0 0-1-.258c-.153-.003-.567 0-.72 0-.07 0-.068.004-.068-.065V7.76c0-.031-.01-.041-.046-.039H17.93s-.016 0-.023.007c-.006.006-.008.012-.008.023v.546c-.008.036-.057.015-.082.022h-.95c-.022.002-.028.008-.03.032v1.481c0 .09-.004.082.082.082h.913c.082 0 .072.128.072.128V11.19s.003.117-.06.117h-1.482c-.068 0-.06.082-.06.082v1.445s-.01.068.064.068h1.457c.082 0 .076-.006.076.079v3.225c0 .088-.007.081.082.081h1.43c.09 0 .082.007.082-.08v-3.27c0-.029.006-.035.033-.035l2.323-.003c.098 0 .191.02.28.061a.46.46 0 0 1 .274.407c.008.395.003.79.003 1.185 0 .259-.107.367-.33.367h-1.218c-.023.002-.029.008-.028.033.184.437.374.871.57 1.303a.045.045 0 0 0 .04.026c.17.005.34.002.51.003.15-.002.517.004.666-.01a2.03 2.03 0 0 0 .408-.075c.59-.18.975-.698.976-1.313v-1.981c0-.128-.01-.254-.034-.38 0 .078-.029-.641-.724-.998z" data-astro-cid-sz7xmlte></path> </svg> </a> <a href="https://www.douyin.com/user/MS4wLjABAAAAK_-T4fxESrsyoHvdPS5hWmLuWjWHKkI_
77S2JTOY6iRqs" target="_blank" rel="noreferrer" class="social-btn douyin" aria-label="抖音" data-astro-cid-sz7xmlte> <svg class="brand-icon brand-icon--douyin" viewBox="0 0 24 24" aria-hidden="true" data-astro-cid-sz7xmlte> <path class="douyin-accent douyin-accent--cyan" d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z" data-astro-cid-sz7xmlte></path> <path class="douyin-accent douyin-accent--red" d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z" data-astro-cid-sz7xmlte></path> <path class="douyin-main" d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z" data-astro-cid-sz7xmlte></path> </svg> </a> </nav> <div class="copyright" data-astro-cid-sz7xmlte>
78&copy; <span data-year-range-start="2026">2026</span> 
78<script type="module">const r=()=>{document.querySelectorAll("[data-year-range-start]").forEach(e=>{const t=Number.parseInt(e.dataset.yearRangeStart??"",10);if(!Number.isFinite(t))return;const a=Math.max(t,new Date().getFullYear());e.textContent=a===t?String(t):`${t}–${a}`})};r();document.addEventListener("astro:page-load",r);</script>
78 CHEN Hua All rights reserved
79</div> <div class="beian" data-astro-cid-sz7xmlte> <a href="https://beian.miit.gov.cn/" target="_blank" rel="noreferrer" data-astro-cid-sz7xmlte>闽ICP备2026003335号</a>
80·
81<a href="https://beian.mps.gov.cn/#/query/webSearch?code=44030002014022" rel="noreferrer" target="_blank" data-astro-cid-sz7xmlte>
82粤公网安备44030002014022号</a> </div> </div>  </footer></div> 
82<script>(function(){const activeTag = null;
83const activeSubfolder = null;
84const locale = "zh-Hans";
85const collection = "blog";
86const navigationScope = "collection";
87const indexPath = "/zh-Hans/blog/";
88
89			function initPostListPage() {
90				const postList = document.querySelector('.post-list');
91				if (!postList) {
92					window.__postListPageController?.abort();
93					return;
94				}
95
96				window.__postListPageController?.abort();
97				const controller = new AbortController();
98				window.__postListPageController = controller;
99				const { signal } = controller;
100
101			function getFilterContextStorageKey(pathname) {
102				return `post-filter-context:${pathname}`;
103			}
104
105			function getNavigationModeStorageKey(pathname) {
106				return `post-navigation-mode:${pathname}`;
107			}
108
109			function normalizeFilterValue(value) {
110				return value.trim().toLowerCase();
111			}
112
113			function buildFilterPath(filters) {
114				const url = new URL(indexPath, window.location.origin);
115
116				if (filters.tag) {
117					url.searchParams.set('tag', filters.tag);
118				}
119
120				return `${url.pathname}${url.search}`;
121			}
122
123			function readFiltersFromUrl() {
124				const url = new URL(window.location.href);
125
126				return {
127					tag: url.searchParams.get('tag') || activeTag || undefined,
128				};
129			}
130
131			function writeFilterContext(pathname, filters) {
132				if (!filters.tag && !filters.subfolder) {
133					sessionStorage.removeItem(getFilterContextStorageKey(pathname));
134					return;
135				}
136
137				sessionStorage.setItem(getFilterContextStorageKey(pathname), JSON.stringify(filters));
138			}
139
140			function matchesFilters(item, filters) {
141				const tagValues = (item.dataset.postTags || '').split('|').filter(
141Boolean);
142
143				return !filters.tag || tagValues.includes(normalizeFilterValue(filters.tag));
144			}
145
146			const postItems = Array.from(document.querySelectorAll('[data-post-item]'));
147			const postLinks = Array.from(document.querySelectorAll('a[data-post-link]'));
148			const filterLinks = Array.from(document.querySelectorAll('a[data-filter-kind="tag"]'));
149			const emptyState = document.querySelector('.empty');
150			let currentFilters = readFiltersFromUrl();
151
152			function updateFeaturedPost() {
153				let featuredItem = null;
154
155				for (const item of postItems) {
156					if (!(item instanceof HTMLElement) || item.hidden) {
157						continue;
158					}
159
160					if (item.dataset.postPinned === 'true') {
161						featuredItem = item;
162						break;
163					}
164				}
165
166				if (!featuredItem) {
167					for (const item of postItems) {
168						if (item instanceof HTMLElement && !item.hidden) {
169							featuredItem = item;
170							break;
171						}
172					}
173				}
174
175				postItems.forEach((item) => {
176					if (item instanceof HTMLElement) {
177						item.classList.toggle('featured', item === featuredItem);
178					}
179				});
180			}
181
182			function updateFilterLinks() {
183				filterLinks.forEach((link) => {
184					if (!(link instanceof HTMLAnchorElement)) {
185						return;
186					}
187
188					const filterKind = link.dataset.filterKind;
189					const filterValue = link.dataset.filterValue;
190					const clearsFilter = link.dataset.filterClear === 'true';
191					const nextFilters = { ...currentFilters };
192
193					if (filterKind === 'tag') {
194						nextFilters.tag = clearsFilter ? undefined : filterValue;
195					}
196
197					link.href = buildFilterPath(nextFilters);
198
199					const isActive = clearsFilter ? !currentFilters.tag : currentFilters.tag === filterValue;
200
201					link.classList.toggle('is-active', Boolean(isActive));
202
203					if (isActive) {
204						link.setAttribute('aria-current', 'page');
205					} else {
206						link.removeAttribute('aria-current');
207					}
208				});
209			}
210
211			function updatePostLinks() {
212				const mode = navigationScope === 'subfolder'
213					? 'subfolder'
214					: currentFilters.tag
215						? 'filtered'
216						: 'collection';
217
218				postLinks.forEach((link) => {
219					if (!(link instanceof HTMLAnchorElement)) {
220						return;
221					}
222
223					link.dataset.navigationMode = mode;
224
225					if (activeSubfolder) {
226						link.dataset.navigationSubfolder = activeSubfolder;
227					} else {
228						delete link.dataset.navigationSubfolder;
229					}
230
231					if (currentFilters.tag) {
232						link.dataset.filterTag = currentFilters.tag;
233					} else {
234						delete link.dataset.filterTag;
235					}
236				});
237			}
238
239			function applyFilters() {
240				let visibleCount = 0;
241
242				postItems.forEach((item) => {
243					if (!(item instanceof HTMLElement)) {
244						return;
245					}
246
247					const visible = matchesFilters(item, currentFilters);
248					item.hidden = !visible;
249
250					if (visible) {
251						visibleCount += 1;
252					}
253				});
254
255				if (emptyState instanceof HTMLElement) {
256					emptyState.hidden = visibleCount > 0;
257				}
258
259				if (postList instanceof HTMLElement) {
260					postList.hidden = visibleCount === 0;
261				}
262
263				updateFeaturedPost();
264				updateFilterLinks();
265				updatePostLinks();
266			}
267
268			applyFilters();
269
270			document.addEventListener('click', (event) => {
271				const filterLink = event.target instanceof Element ? event.target.closest('a[data-filter-kind]') : null;
272
273				if (
274					filterLink instanceof HTMLAnchorElement
275					&& event instanceof MouseEvent
276					&& event.button === 0
277					&& !event.metaKey
278					&& !event.ctrlKey
279					&& !event.shiftKey
280					&& !event.altKey
281					&& filterLink.dataset.filterKind === 'tag'
282				) {
283					event.preventDefault();
284					currentFilters = {
285						...currentFilters,
286						tag: filterLink.dataset.filterClear === 'true' ? undefined : filterLink.dataset.filterValue,
287					};
288					window.history.pushState(window.history.state, '', buildFilterPath(currentFilters));
289					applyFilters();
290					return;
291				}
292
293				const postLink = event.target instanceof Element ? event.target.closest('a[data-post-link]') : null;
294
295				if (!(postLink instanceof HTMLAnchorElement)) {
296					return;
297				}
298
299				try {
300					const mode = postLink.dataset.navigationMode || 'collection';
301					let context = {};
302
303					if (mode === 'subfolder' && postLink.dataset.navigationSubfolder) {
304						context = { subfolder: postLink.dataset.navigationSubfolder };
305					} else if (mode === 'filtered') {
306						context = { ...currentFilters };
307					}
308
309					sessionStorage.setItem(getNavigationModeStorageKey(postLink.pathname), mode);
310					writeFilterContext(postLink.pathname, context);
311				} catch {
312					// Ignore storage failures and fall back to collection navigation.
313				}
314			}, { signal });
315
316			window.addEventListener('popstate', () => {
317				currentFilters = readFiltersFromUrl();
318				applyFilters();
319			}, { signal });
320			}
321
322			initPostListPage();
323			document.addEventListener('astro:page-load', initPostListPage);
324		})();</script>
324 </body> </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.