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="{"close":"å
³é","previous":"ä¸ä¸å¼ å¾ç","next":"ä¸ä¸å¼ å¾ç","loadOriginal":"å è½½åå¾","loadingOriginal":"å è½½ä¸...","originalLoaded":"å·²å è½½åå¾","fullscreen":"å
¨å±","exitFullscreen":"éåºå
¨å±"}" 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© <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.