summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authori-shm <[email protected]>2026-08-15 10:46:29 +0000
committeri-shm <[email protected]>2026-08-15 10:46:29 +0000
commit2972182599b7e447519f2e93ce4d553fdeb8c83e (patch)
treed5740e1ed83213fdf720b833c11fb576a2c3a476
parent5b4fe1ce4a0f5e2eda17d82c3970874de42ca4bb (diff)
downloadblog-2972182599b7e447519f2e93ce4d553fdeb8c83e.tar.gz
deploy: a3b07951ee400d3df1709d984d393b0a4af17a2f
-rw-r--r--2026/08/15/体质指数与血脂异常的年龄依赖性关联/index.html63
-rw-r--r--2026/08/15/血清胆红素水平与冠心病风险/index.html68
-rw-r--r--search.xml553
3 files changed, 337 insertions, 347 deletions
diff --git a/2026/08/15/体质指数与血脂异常的年龄依赖性关联/index.html b/2026/08/15/体质指数与血脂异常的年龄依赖性关联/index.html
index 14994e4a..eb3d52f7 100644
--- a/2026/08/15/体质指数与血脂异常的年龄依赖性关联/index.html
+++ b/2026/08/15/体质指数与血脂异常的年龄依赖性关联/index.html
@@ -298,18 +298,17 @@ mjx-container[display="true"] + br {
</div>
</div>
<div class="post-content">
- <p>"胖的人血脂容易高"大概是体检报告时代最深入人心的常识之一。这句话在人群层面确实成立:BMI 与血脂异常之间存在明确的剂量-反应关系,且因果性获得了孟德尔随机化研究的支持<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。但常识往往在加上"年龄"这个维度后变得复杂起来——同样的 BMI,在不同年龄段对血脂的影响并不相同,甚至可能反转。</p>
-<h2 id="患病率-一条倒-U-形的年龄轨迹"><a class="header-anchor" href="#患病率-一条倒-U-形的年龄轨迹">¶</a>患病率:一条倒 U 形的年龄轨迹</h2>
-<p>先看年龄本身。中国成人血脂异常患病率随年龄递增,但进入老年期后趋势反转:</p>
+ <p>"胖的人血脂容易高"大概是体检报告时代最深入人心的常识之一。这句话在人群层面确实成立:BMI 与血脂异常之间存在明确的剂量-反应关系,因果性也获得了孟德尔随机化研究的支持<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。但常识加上"年龄"这个维度后就变得复杂——同样的 BMI,在不同年龄段对血脂的影响并不相同,甚至可能反转。</p>
+<h2 id="患病率:一条倒-U-形的年龄轨迹"><a class="header-anchor" href="#患病率:一条倒-U-形的年龄轨迹">¶</a>患病率:一条倒 U 形的年龄轨迹</h2>
+<p>先看年龄本身。中国成人血脂异常患病率随年龄递增,进入老年期后趋势反转:</p>
<ul>
-<li>四川三县横断面(11 561 人):18–44 岁 20.6% → 45–59 岁 29.8% → ≥60 岁 32.9%<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
-<li>中国老年人 Meta 分析(19 项横断面、101 831 人):60–69 岁 39.9% 达峰,70–79 岁降至 31.8%,≥80 岁 31.4%<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
+<li>四川三县横断面(11 561 人):18–44 岁 20.6% → 45–59 岁 29.8% → ≥60 岁 32.9%<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
+<li>中国老年人 Meta 分析(19 项横断面、101 831 人):60–69 岁 39.9% 达峰,70–79 岁降至 31.8%,≥80 岁 31.4%<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
</ul>
-<p>两条独立数据链拼出同一形态:成年期线性攀升、60 岁前后达峰、高龄回落。</p>
+<p>两条独立数据链拼出同一形态:成年期线性攀升、60 岁前后达峰、高龄回落。两个口径的老年组数值差异(32.9% vs 39.9%)源于地区差异与纳入研究年代,方向一致。全国 2018 年高胆固醇血症年龄标化患病率较 2015 年近乎翻倍(4.9% → 8.2%),"高 TC"型是近期增长最快的亚型,且集中于中老年<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>。</p>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%A1%80%E8%84%82%E6%82%A3%E7%97%85%E7%8E%87%E5%B9%B4%E9%BE%84%E8%BD%A8%E8%BF%B9.png" alt="中国成人血脂异常患病率的年龄轨迹"></p>
-<p>两个口径的老年组数值差异(32.9% vs 39.9%)源于地区差异与纳入研究年代,方向一致。全国 2018 年高胆固醇血症年龄标化患病率较 2015 年近乎翻倍(4.9% → 8.2%),"高 TC"型是近期增长最快的亚型,且集中于中老年<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>。</p>
-<h2 id="关键反转-BMI-对血脂的因果效应随龄衰减"><a class="header-anchor" href="#关键反转-BMI-对血脂的因果效应随龄衰减">¶</a>关键反转:BMI 对血脂的因果效应随龄衰减</h2>
-<p>Fall 2015 的孟德尔随机化研究用 32 个 BMI 相关遗传位点做工具变量,按 &lt;55 岁与 ≥55 岁分层,给出了一个反直觉的结果<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>:</p>
+<h2 id="关键反转:BMI-对血脂的因果效应随龄衰减"><a class="header-anchor" href="#关键反转:BMI-对血脂的因果效应随龄衰减">¶</a>关键反转:BMI 对血脂的因果效应随龄衰减</h2>
+<p>Fall 2015 的孟德尔随机化研究用 32 个 BMI 相关遗传位点做工具变量,按 &lt;55 岁与 ≥55 岁分层,给出一个出人意料的结果<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>:</p>
<table>
<thead>
<tr>
@@ -346,37 +345,33 @@ mjx-container[display="true"] + br {
</tr>
</tbody>
</table>
-<p>效应量单位:每 1 SD BMI(约 4.8 kg/m²)对应的血脂 SD 变化。</p>
+<p>效应量单位:每 1 SD BMI(约 4.8 kg/m²)对应的血脂 SD 变化。</p>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/BMI%E8%A1%80%E8%84%82%E5%9B%A0%E6%9E%9C%E6%95%88%E5%BA%94%E5%B9%B4%E9%BE%84%E5%88%86%E5%B1%82.png" alt="BMI→血脂组分的孟德尔随机化因果效应:<55 岁 vs ≥55 岁"></p>
-<p>解读要点:</p>
+<p>解读要点:</p>
<ol>
-<li><strong>胆固醇组分(LDL-C、总胆固醇)的 BMI 因果效应在 ≥55 岁后消失甚至反转</strong>——年龄越大,同样程度的体重增加带来的胆固醇恶化越弱;</li>
-<li><strong>TG 与 HDL-C 的效应保留但减弱</strong>——"肥胖驱动的高 TG + 低 HDL"表型不随龄消失,这是老年期体重管理仍然重要的依据;</li>
-<li>≥55 岁总胆固醇因果效应为负(−0.19)不代表"老年肥胖保护胆固醇",更可能是他汀使用、选择偏倚与反向因果的残留混杂<sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5:1]</a></sup>。</li>
+<li><strong>胆固醇组分(LDL-C、总胆固醇)的 BMI 因果效应在 ≥55 岁后消失甚至反转</strong>——年龄越大,同样程度的体重增加带来的胆固醇恶化越弱;</li>
+<li><strong>TG 与 HDL-C 的效应保留但减弱</strong>——"肥胖驱动的高 TG + 低 HDL"表型不随龄消失,这是老年期体重管理仍然重要的依据;</li>
+<li>≥55 岁总胆固醇因果效应为负(−0.19)不代表"老年肥胖保护胆固醇",更可能是他汀使用、选择偏倚与反向因果的残留混杂<sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5:1]</a></sup>。</li>
</ol>
-<p>观察性分析与之一致:&lt;55 岁 LDL-C 每 SD BMI +0.16、TC +0.12,≥55 岁分别降至 +0.02 与 0.00(均不显著)<sup class="footnote-ref"><a href="#fn5" id="fnref5:2">[5:2]</a></sup>。</p>
-<h2 id="筛检效能-老年期腰围胜过-BMI"><a class="header-anchor" href="#筛检效能-老年期腰围胜过-BMI">¶</a>筛检效能:老年期腰围胜过 BMI</h2>
-<p>BMI 判别血脂异常的效能也随龄衰减。NHANES 1999–2020 共 58 712 人:BMI 与腰高比对高血压、血脂异常、糖尿病的判别性能随年龄递增而下降,老年人中关联呈 J 形并在较高肥胖水平进入平台<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>。韩国 2022–2023 国民健康调查 8 900 人比较 7 个肥胖指标,所有指标判别力在 50 岁后下降,腰高比与身体圆度指数在年轻与中年成人中最优<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
-<p>英国生物库 368 274 人另显示方向性差异:LDL-C 与冠心病的关联随龄递减(HR 从 &lt;50 岁的 1.35 降至 ≥65 岁的 1.08),而 <strong>BMI 与冠心病的关联不随龄衰减</strong>(各年龄组 HR 1.11–1.15)<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>——老年期"BMI 影响健康结局"的通道部分绕过血脂,但不能因此认为老年肥胖无害。</p>
-<h2 id="性别×年龄-绝经是隐藏的转折点"><a class="header-anchor" href="#性别×年龄-绝经是隐藏的转折点">¶</a>性别×年龄:绝经是隐藏的转折点</h2>
-<p>山西农村 26 378 人(45–69 岁)显示:女性 TC、TG、LDL-C 患病率随年龄上升,男性则平稳甚至下降;女性各类血脂异常患病率均高于男性,仅低 HDL-C 为男性更高<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。老年人 Meta 分析同向:女性血脂异常总患病率 48.8% 高于男性 39.5%,高 TC 24.0% vs 12.9%<sup class="footnote-ref"><a href="#fn3" id="fnref3:1">[3:1]</a></sup>。</p>
-<p>机制上绝经是关键节点——雌激素下降导致 LDL 清除减慢、内脏脂肪增加,女性血脂在围绝经期陡升,形成"老年女性患病率反超男性"的交叉<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
+<p>观察性分析与之一致:&lt;55 岁 LDL-C 每 SD BMI +0.16、TC +0.12,≥55 岁分别降至 +0.02 与 0.00(均不显著)<sup class="footnote-ref"><a href="#fn5" id="fnref5:2">[5:2]</a></sup>。</p>
+<h2 id="筛检效能:老年期腰围胜过-BMI"><a class="header-anchor" href="#筛检效能:老年期腰围胜过-BMI">¶</a>筛检效能:老年期腰围胜过 BMI</h2>
+<p>BMI 判别血脂异常的效能也随龄衰减。NHANES 1999–2020 共 58 712 人:BMI 与腰高比对高血压、血脂异常、糖尿病的判别性能随年龄递增而下降,老年人中关联呈 J 形并在较高肥胖水平进入平台<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>。韩国 2022–2023 国民健康调查 8 900 人比较 7 个肥胖指标,所有指标判别力在 50 岁后下降,腰高比与身体圆度指数在年轻与中年成人中最优<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
+<p>英国生物库 368 274 人另显示方向性差异:LDL-C 与冠心病的关联随龄递减(HR 从 &lt;50 岁的 1.35 降至 ≥65 岁的 1.08),而 <strong>BMI 与冠心病的关联不随龄衰减</strong>(各年龄组 HR 1.11–1.15)<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>——老年期"BMI 影响健康结局"的通道部分绕过血脂,但不能因此认为老年肥胖无害。</p>
+<h2 id="性别×年龄:绝经是隐藏的转折点"><a class="header-anchor" href="#性别×年龄:绝经是隐藏的转折点">¶</a>性别×年龄:绝经是隐藏的转折点</h2>
+<p>山西农村 26 378 人(45–69 岁)显示:女性 TC、TG、LDL-C 患病率随年龄上升,男性则平稳甚至下降;女性各类血脂异常患病率均高于男性,仅低 HDL-C 为男性更高<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。老年人 Meta 分析同向:女性血脂异常总患病率 48.8% 高于男性 39.5%,高 TC 24.0% vs 12.9%<sup class="footnote-ref"><a href="#fn3" id="fnref3:1">[3:1]</a></sup>。</p>
+<p>机制上绝经是关键节点——雌激素下降导致 LDL 清除减慢、内脏脂肪增加,女性血脂在围绝经期陡升,形成"老年女性患病率反超男性"的交叉<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
<h2 id="为什么老年期关联会衰减"><a class="header-anchor" href="#为什么老年期关联会衰减">¶</a>为什么老年期关联会衰减</h2>
+<p>四类机制叠加,很难拆开。其一是体成分重组:中老年期肌肉量下降、内脏脂肪随龄增加,BMI 可以不变而代谢风险上升——中国 45–90 岁体检人群肌少性肥胖患病率 8.4%,系统性炎症指数每升高 1 SD,肌少性肥胖 OR 在中年 1.69、老年 2.52<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>。其二是健康选择效应:血脂异常与心血管病高风险者更早死亡或已接受降脂治疗,存活到高龄的人群"未被治疗的血脂异常"比例自然下降<sup class="footnote-ref"><a href="#fn5" id="fnref5:3">[5:3]</a></sup>。其三是治疗混杂:他汀等降脂药在老年人群使用率更高,压低实测血脂水平<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>。其四是遗传异质性的年龄表达:BMI–血脂的局部遗传相关位点存在保护性变异,年龄越大,非 BMI 因素在血脂水平中的占比越高<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>。</p>
+<h2 id="对筛查和临床的落地含义"><a class="header-anchor" href="#对筛查和临床的落地含义">¶</a>对筛查和临床的落地含义</h2>
<ul>
-<li><strong>体成分重组</strong>:中老年期肌肉量下降、内脏脂肪随龄增加,BMI 可以不变而代谢风险上升;中国 45–90 岁体检人群肌少性肥胖患病率 8.4%,系统性炎症指数每升高 1 SD,肌少性肥胖 OR 在中年 1.69、老年 2.52<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>;</li>
-<li><strong>健康选择效应</strong>:血脂异常与心血管病高风险者更早死亡或已接受降脂治疗,存活到高龄的人群"未被治疗的血脂异常"比例自然下降<sup class="footnote-ref"><a href="#fn5" id="fnref5:3">[5:3]</a></sup>;</li>
-<li><strong>治疗混杂</strong>:他汀等降脂药在老年人群使用率更高,压低实测血脂水平<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>;</li>
-<li><strong>遗传异质性的年龄表达</strong>:BMI–血脂的局部遗传相关位点存在保护性变异,年龄越大,非 BMI 因素(基因、年龄本身)在血脂水平中的占比越高<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>。</li>
+<li><strong>45–59 岁是 BMI 筛选血脂异常效率最高的窗口</strong>——中青年肥胖者应优先筛查;</li>
+<li><strong>60 岁以上别拿"BMI 正常"排除血脂异常</strong>——联合腰围/腰高比,必要时直接测血脂;</li>
+<li><strong>绝经后女性无论 BMI 都是高概率人群</strong>——老年女性高 TC/TG 型比例高,老年男性低 HDL-C 型比例高;</li>
+<li><strong>老年 BMI 对血脂效应弱 ≠ 减重无益</strong>——TG/HDL 通道保留,且 BMI–冠心病关联不随龄衰减<sup class="footnote-ref"><a href="#fn8" id="fnref8:1">[8:1]</a></sup>;</li>
+<li>以降脂为终点的临床试验应预设年龄分层分析:中青年入组者预期 TG 变化幅度大于老年入组者,≥55 岁受试者的 LDL-C 终点对 BMI 干预不敏感,应以 TG/HDL-C 或非 HDL-C 为主<sup class="footnote-ref"><a href="#fn5" id="fnref5:4">[5:4]</a></sup>。</li>
</ul>
-<h2 id="对筛查和临床的落地含义"><a class="header-anchor" href="#对筛查和临床的落地含义">¶</a>对筛查和临床的落地含义</h2>
-<ol>
-<li><strong>45–59 岁是 BMI 筛选血脂异常效率最高的窗口</strong>——中青年肥胖者应优先筛查;</li>
-<li><strong>60 岁以上别拿"BMI 正常"排除血脂异常</strong>——联合腰围/腰高比,必要时直接测血脂;</li>
-<li><strong>绝经后女性无论 BMI 都是高概率人群</strong>——老年女性高 TC/TG 型比例高,老年男性低 HDL-C 型比例高;</li>
-<li><strong>老年 BMI 对血脂效应弱 ≠ 减重无益</strong>——TG/HDL 通道保留,且 BMI–冠心病关联不随龄衰减<sup class="footnote-ref"><a href="#fn8" id="fnref8:1">[8:1]</a></sup>;</li>
-<li>以降脂为终点的临床试验应预设年龄分层分析:中青年入组者预期 TG 变化幅度大于老年入组者,≥55 岁受试者的 LDL-C 终点对 BMI 干预不敏感,应以 TG/HDL-C 或非 HDL-C 为主<sup class="footnote-ref"><a href="#fn5" id="fnref5:4">[5:4]</a></sup>。</li>
-</ol>
-<p>一个值得记住的总结:<strong>BMI 与血脂的关联是真实的、因果的,但它是一条会随年龄衰减的关联——患病率在 60 岁前后达峰后回落,BMI 对胆固醇的因果效应在 55 岁后消失甚至反转,而 TG/HDL 通道和心血管保护效应保留。年龄不是简单的混杂,而是这条关联的修饰者。</strong></p>
+<h2 id="结论"><a class="header-anchor" href="#结论">¶</a>结论</h2>
+<p>BMI 与血脂的关联是真实的、因果的,但它是一条会随年龄衰减的关联:患病率在 60 岁前后达峰后回落,BMI 对胆固醇的因果效应在 55 岁后消失甚至反转,而 TG/HDL 通道和心血管保护效应保留。年龄不是简单的混杂,而是这条关联的修饰者——筛查策略和临床试验设计都应把年龄写进参数,而不是事后分层。</p>
<hr>
<h2 id="参考文献"><a class="header-anchor" href="#参考文献">¶</a>参考文献</h2>
<hr class="footnotes-sep">
diff --git a/2026/08/15/血清胆红素水平与冠心病风险/index.html b/2026/08/15/血清胆红素水平与冠心病风险/index.html
index 725533f0..d30133f7 100644
--- a/2026/08/15/血清胆红素水平与冠心病风险/index.html
+++ b/2026/08/15/血清胆红素水平与冠心病风险/index.html
@@ -298,50 +298,50 @@ mjx-container[display="true"] + br {
</div>
</div>
<div class="post-content">
- <p>体检报告上"间接胆红素轻度升高"是一个很常见的发现。多数时候医生会说"没事,可能是吉尔伯特综合征",但网上流传着另一种说法:胆红素高的人心脏更好,因为胆红素是强效抗氧化剂。这个说法从 1987 年一篇《Science》论文开始,经历了从机制、临床观察到大型遗传学研究的完整验证,最后得到的结论比想象中复杂得多——它部分成立,但"升高胆红素能保护心脏"这个因果命题,在目前最强的证据里并不成立。</p>
-<h2 id="起点-1987-年-胆红素被重新定义"><a class="header-anchor" href="#起点-1987-年-胆红素被重新定义">¶</a>起点:1987 年,胆红素被重新定义</h2>
-<p>在 1987 年之前,胆红素在医学教科书里的身份是血红素分解的"有毒废料"——新生儿黄疸、肝病黄疸的主角。加州大学伯克利分校的 Stocker 和 Ames 团队首次证明:未结合(间接)胆红素其实是一种极其强效的脂溶性抗氧化剂<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。</p>
+ <p>体检报告上"间接胆红素轻度升高"很常见。多数时候医生会说没事,可能是吉尔伯特综合征。网上却流传另一种说法:胆红素高的人心脏更好,因为胆红素是强效抗氧化剂。这个说法从 1987 年一篇《Science》论文开始,经历了从机制、临床观察到大型遗传学研究的完整验证,得到的结论比想象中复杂——它部分成立,但"升高胆红素能保护心脏"这个因果命题,在目前最强的证据里并不成立。</p>
+<h2 id="1987-年:胆红素被重新定义"><a class="header-anchor" href="#1987-年:胆红素被重新定义">¶</a>1987 年:胆红素被重新定义</h2>
+<p>1987 年之前,胆红素在教科书里的身份是血红素分解的"有毒废料"——新生儿黄疸、肝病黄疸的主角。加州大学伯克利分校的 Stocker 和 Ames 团队首次证明:未结合胆红素是一种极其强效的脂溶性抗氧化剂<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。</p>
<ul>
-<li>在生理组织氧浓度(2% 氧)下,胆红素抑制脂质过氧化的效率<strong>超过 α-生育酚(维生素 E)</strong>——后者当时被认为是脂质过氧化最强的内源性抗氧化剂;</li>
-<li>1 分子白蛋白结合型胆红素可清除约 2 分子过氧自由基,血液中正常存在的少量胆红素足以保护白蛋白结合脂肪酸不被氧化<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
-<li>反应机理是氢原子转移(HAT):供氢基团是四吡咯结构两端二吡咯酮环的 N-H 键,动力学实测 1 分子胆红素可清除约 2 分子过氧自由基<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
+<li>在生理组织氧浓度(2%)下,胆红素抑制脂质过氧化的效率超过 α-生育酚(维生素 E),后者当时被认为是脂质过氧化最强的内源性抗氧化剂;</li>
+<li>1 分子白蛋白结合型胆红素可清除约 2 分子过氧自由基,血液中正常存在的少量胆红素足以保护白蛋白结合脂肪酸不被氧化<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
+<li>反应机理是氢原子转移:供氢基团是四吡咯结构两端二吡咯酮环的 N-H 键,动力学实测 1 分子胆红素可清除约 2 分子过氧自由基<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
</ul>
-<p>此后四十年的生化研究不断补充机制:胆红素与 α-生育酚构成协同抗氧化网络(添加胆红素可使维生素 E 的消耗停止)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>;生理浓度胆红素可清除氯胺并抑制髓过氧化物酶(MPO)诱导的蛋白和脂质氧化<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>;2020 年后又发现胆红素是 PPAR-α 的选择性内源性配体,能重塑白色脂肪组织代谢,因此被称为"黄色激素"(the yellow hormone)<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup><sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
-<p>但抗氧化并非无限度:细胞实验显示,细胞内未结合胆红素蓄积超过约 25 ng/mg 蛋白后,从抗氧化转为<strong>促氧化并产生细胞毒性</strong><sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>——这为"为什么只有轻度升高有益"提供了分子解释。</p>
-<h2 id="临床观察-低胆红素与冠心病风险"><a class="header-anchor" href="#临床观察-低胆红素与冠心病风险">¶</a>临床观察:低胆红素与冠心病风险</h2>
-<p>机制研究之后,临床流行病学接棒。1994 年 Schwertner 等在血管造影确诊的冠心病男性队列中首次发现:ln(总胆红素)与冠脉疾病严重程度独立负相关,总胆红素下降 50%,处于更严重冠脉疾病分级的几率增加 47%,关联强度"与收缩压相当"<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。</p>
-<p>2002 年,查尔斯大学 Vítek 团队做了一个更直接的人群对照:50 例 40 岁以上的吉尔伯特综合征患者 vs 2296 例一般人群,吉尔伯特组缺血性心脏病患病率仅 <strong>2%</strong>,对照组 <strong>12.1%</strong>(P&lt;0.05),且吉尔伯特组血清总抗氧化能力显著更高<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
-<p>2006 年弗雷明汉心脏研究把证据推到基因层面:按 UGT1A1*28 基因型(吉尔伯特综合征的遗传基础,人群频率约 11%)分层,7/7 纯合子携带者心血管疾病风险 HR = 0.36(95% CI 0.18–0.74),冠心病 HR = 0.30<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>。这组数据至今仍被广泛引用。</p>
-<p>后续荟萃分析确认了方向:每升高 1 个标准差胆红素,心血管风险约降 7%–10%<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>;生理范围内胆红素升高使首次心梗长期风险降 22%(RR 0.78)<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>;卒中风险最高 vs 最低组 RR = 0.85<sup class="footnote-ref"><a href="#fn14" id="fnref14">[14]</a></sup>。他汀人群 13 万人数据显示 L 形关联:与 10 μmol/L 相比,5 μmol/L 者心血管事件 +18%、心梗 +34%<sup class="footnote-ref"><a href="#fn15" id="fnref15">[15]</a></sup>。</p>
-<p>不过观察性证据有两个长期被忽视的软肋:一是<strong>吸烟混杂</strong>——吸烟者 42% 处于胆红素最低四分位,戒烟后胆红素回升,"低胆红素 + 高心血管风险"有一部分是吸烟驱动的<sup class="footnote-ref"><a href="#fn16" id="fnref16">[16]</a></sup>;二是<strong>性别差异</strong>——阳性证据大多来自男性,女性中关联弱或不显著<sup class="footnote-ref"><a href="#fn17" id="fnref17">[17]</a></sup><sup class="footnote-ref"><a href="#fn18" id="fnref18">[18]</a></sup>。</p>
-<h2 id="分水岭-孟德尔随机化给出否定答案"><a class="header-anchor" href="#分水岭-孟德尔随机化给出否定答案">¶</a>分水岭:孟德尔随机化给出否定答案</h2>
-<p>观察性关联无法区分因果与混杂。孟德尔随机化(MR)利用"基因型在受精时随机分配"这一自然实验,绕开吸烟、饮酒、生活方式等混杂,是检验因果性的最强观察设计。这个领域在 2013 年和 2023 年迎来了两次大型否定:</p>
-<p><strong>哥本哈根三队列 MR(2013)</strong>:43,708 人测胆红素,67,068 人基因分型,含 11,686 例缺血性心脏病事件。观察性分析中胆红素最高三分位 HR = 0.86,但多因素校正后衰减为 0.93(不显著);而基因型分析(TT vs GG,胆红素升高约 95%)对缺血性心脏病的 OR = 1.03,完全无效。加上既往 8 项研究的荟萃:OR = 1.01(0.88–1.16)。结论原文:<strong>“血浆胆红素与缺血性心脏病风险无因果关联”</strong><sup class="footnote-ref"><a href="#fn19" id="fnref19">[19]</a></sup>。</p>
-<p><strong>UK Biobank + FinnGen(2023)</strong>:46.3 万人基因分型 + 42.9 万人复现。观察性层面,高胆红素与总体健康、心梗、胆固醇等广泛结局强负相关;但遗传学层面,这些负相关在吉尔伯特基因型人群中<strong>全部未复现</strong>——基因预测的胆红素仅与胆道/肝脏病理显著相关(胆结石 OR = 1.16,P = 5.7×10⁻¹⁶)。结论原文:<strong>“遗传学分析提示胆红素对心血管疾病、慢阻肺及其他关键结局无因果保护作用”</strong><sup class="footnote-ref"><a href="#fn20" id="fnref20">[20]</a></sup>。</p>
-<p>这两项研究分别代表欧洲最大样本和全球最大样本,事件数都足以检出真实效应。阴性结果的解释力很强:如果"胆红素保护心脏"的因果效应真实存在,这些设计理应能够发现。</p>
+<p>此后四十年的生化研究不断补全机制。胆红素与 α-生育酚构成协同抗氧化网络,添加胆红素可使维生素 E 的消耗停止<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>;生理浓度胆红素可清除氯胺并抑制髓过氧化物酶诱导的蛋白和脂质氧化<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>;2020 年后又发现胆红素是 PPAR-α 的选择性内源性配体,能重塑白色脂肪组织代谢,因此被称作"黄色激素"<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup><sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
+<p>抗氧化并非无限度。细胞实验显示,细胞内未结合胆红素蓄积超过约 25 ng/mg 蛋白后,抗氧化转为促氧化并产生细胞毒性<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>。这解释了为什么只有轻度升高有益。</p>
+<h2 id="临床观察:低胆红素与冠心病风险相关"><a class="header-anchor" href="#临床观察:低胆红素与冠心病风险相关">¶</a>临床观察:低胆红素与冠心病风险相关</h2>
+<p>1994 年,Schwertner 等人在血管造影确诊的冠心病男性队列中发现:ln(总胆红素)与冠脉疾病严重程度独立负相关。总胆红素下降 50%,处于更严重冠脉疾病分级的几率增加 47%,关联强度"与收缩压相当"<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。</p>
+<p>2002 年,查尔斯大学 Vítek 团队做了更直接的人群对照:50 例 40 岁以上的吉尔伯特综合征患者 vs 2296 例一般人群,吉尔伯特组缺血性心脏病患病率仅 2%,对照组 12.1%(P&lt;0.05),且吉尔伯特组血清总抗氧化能力显著更高<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
+<p>2006 年弗雷明汉心脏研究把证据推到基因层面:按 UGT1A1*28 基因型(吉尔伯特综合征的遗传基础,人群频率约 11%)分层,7/7 纯合子携带者心血管疾病风险 HR = 0.36(95% CI 0.18–0.74),冠心病 HR = 0.30<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>。这组数据至今仍被广泛引用。</p>
+<p>后续荟萃分析确认了方向:每升高 1 个标准差胆红素,心血管风险约降 7%–10%<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>;生理范围内胆红素升高使首次心梗长期风险降 22%(RR 0.78)<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>;卒中风险最高 vs 最低组 RR = 0.85<sup class="footnote-ref"><a href="#fn14" id="fnref14">[14]</a></sup>。他汀人群 13 万人数据显示 L 形关联:与 10 μmol/L 相比,5 μmol/L 者心血管事件 +18%、心梗 +34%<sup class="footnote-ref"><a href="#fn15" id="fnref15">[15]</a></sup>。</p>
+<p>观察性证据有两个长期被忽视的软肋。一是吸烟混杂——吸烟者 42% 处于胆红素最低四分位,戒烟后胆红素回升,"低胆红素 + 高心血管风险"有一部分是吸烟驱动的<sup class="footnote-ref"><a href="#fn16" id="fnref16">[16]</a></sup>。二是性别差异——阳性证据大多来自男性,女性中关联弱或不显著<sup class="footnote-ref"><a href="#fn17" id="fnref17">[17]</a></sup><sup class="footnote-ref"><a href="#fn18" id="fnref18">[18]</a></sup>。</p>
+<h2 id="分水岭:孟德尔随机化给出否定答案"><a class="header-anchor" href="#分水岭:孟德尔随机化给出否定答案">¶</a>分水岭:孟德尔随机化给出否定答案</h2>
+<p>观察性关联无法区分因果与混杂。孟德尔随机化(MR)利用"基因型在受精时随机分配"这一自然实验,绕开吸烟、饮酒、生活方式等混杂,是检验因果性的最强观察设计。这个领域在 2013 年和 2023 年迎来了两次大型否定。</p>
+<p><strong>哥本哈根三队列 MR(2013)</strong>:43,708 人测胆红素,67,068 人基因分型,含 11,686 例缺血性心脏病事件。观察性分析中胆红素最高三分位 HR = 0.86,但多因素校正后衰减为 0.93(不显著);基因型分析(TT vs GG,胆红素升高约 95%)对缺血性心脏病的 OR = 1.03,完全无效。加上既往 8 项研究的荟萃:OR = 1.01(0.88–1.16)。结论原文:“血浆胆红素与缺血性心脏病风险无因果关联”<sup class="footnote-ref"><a href="#fn19" id="fnref19">[19]</a></sup>。</p>
+<p><strong>UK Biobank + FinnGen(2023)</strong>:46.3 万人基因分型,42.9 万人复现。观察性层面,高胆红素与总体健康、心梗、胆固醇等广泛结局强负相关;遗传学层面,这些负相关在吉尔伯特基因型人群中全部未复现——基因预测的胆红素仅与胆道/肝脏病理显著相关(胆结石 OR = 1.16,P = 5.7×10⁻¹⁶)。结论原文:“遗传学分析提示胆红素对心血管疾病、慢阻肺及其他关键结局无因果保护作用”<sup class="footnote-ref"><a href="#fn20" id="fnref20">[20]</a></sup>。</p>
+<p>这两项研究分别代表欧洲最大样本和全球最大样本,事件数都足以检出真实效应。如果"胆红素保护心脏"的因果效应真实存在,这些设计理应能够发现。</p>
<h2 id="但事情没有完全结束"><a class="header-anchor" href="#但事情没有完全结束">¶</a>但事情没有完全结束</h2>
-<p>欧洲的否定不等于全部。亚洲和非洲人群的部分 MR 研究给出了阳性信号:</p>
+<p>欧洲的否定不等于全部。亚洲和非洲人群的部分 MR 研究给出了阳性信号:</p>
<ul>
-<li><strong>韩/日人群多变量 MR(2024)</strong>:间接胆红素对缺血性卒中 OR = 0.76,但共定位分析未找到共享因果变异,阳性需谨慎<sup class="footnote-ref"><a href="#fn21" id="fnref21">[21]</a></sup>;</li>
-<li><strong>非裔人群 MR(2021)</strong>:胆红素对高血压呈因果保护(β = −0.76)<sup class="footnote-ref"><a href="#fn22" id="fnref22">[22]</a></sup>;</li>
-<li><strong>中国汉族</strong>:上海 2380 例冠脉造影人群,UGT1A1 rs887829 隐性模型与男性冠心病显著负相关(OR = 0.24)<sup class="footnote-ref"><a href="#fn23" id="fnref23">[23]</a></sup>;东风-同济队列 2 型糖尿病患者中,间接胆红素 Q4 vs Q1 的冠心病 HR = 0.74<sup class="footnote-ref"><a href="#fn24" id="fnref24">[24]</a></sup>。</li>
+<li><strong>韩/日人群多变量 MR(2024)</strong>:间接胆红素对缺血性卒中 OR = 0.76,但共定位分析未找到共享因果变异,阳性需谨慎<sup class="footnote-ref"><a href="#fn21" id="fnref21">[21]</a></sup>;</li>
+<li><strong>非裔人群 MR(2021)</strong>:胆红素对高血压呈因果保护(β = −0.76)<sup class="footnote-ref"><a href="#fn22" id="fnref22">[22]</a></sup>;</li>
+<li><strong>中国汉族</strong>:上海 2380 例冠脉造影人群,UGT1A1 rs887829 隐性模型与男性冠心病显著负相关(OR = 0.24)<sup class="footnote-ref"><a href="#fn23" id="fnref23">[23]</a></sup>;东风-同济队列 2 型糖尿病患者中,间接胆红素 Q4 vs Q1 的冠心病 HR = 0.74<sup class="footnote-ref"><a href="#fn24" id="fnref24">[24]</a></sup>。</li>
</ul>
-<p>另外 2023 年《Circulation Research》的动物-人联合研究显示,胆红素缺乏小鼠的动脉粥样硬化斑块更不稳定(纤维帽变薄、斑块内出血),人冠脉斑块中血红素代谢上调——机制层面的保护证据仍在积累<sup class="footnote-ref"><a href="#fn25" id="fnref25">[25]</a></sup>。</p>
-<p>而<strong>胆结石</strong>是唯一在基因型与结局层面完全一致的因果证据:61,212 人前瞻队列 + MR,胆红素最高十分位症状性胆结石 HR = 1.57,TT 纯合基因型 HR = 1.22,存在剂量-反应<sup class="footnote-ref"><a href="#fn26" id="fnref26">[26]</a></sup>。</p>
+<p>2023 年《Circulation Research》的动物-人联合研究显示,胆红素缺乏小鼠的动脉粥样硬化斑块更不稳定(纤维帽变薄、斑块内出血),人冠脉斑块中血红素代谢上调——机制层面的保护证据仍在积累<sup class="footnote-ref"><a href="#fn25" id="fnref25">[25]</a></sup>。</p>
+<p>而胆结石是唯一在基因型与结局层面完全一致的因果证据:61,212 人前瞻队列 + MR,胆红素最高十分位症状性胆结石 HR = 1.57,TT 纯合基因型 HR = 1.22,存在剂量-反应<sup class="footnote-ref"><a href="#fn26" id="fnref26">[26]</a></sup>。</p>
<h2 id="几个反直觉的细节"><a class="header-anchor" href="#几个反直觉的细节">¶</a>几个反直觉的细节</h2>
<ul>
-<li><strong>剂量-反应是 U 形,不是越多越好</strong>:12 项前瞻研究荟萃显示风险最低点约在 17–20 μmol/L,过低过高都不利<sup class="footnote-ref"><a href="#fn27" id="fnref27">[27]</a></sup>;</li>
-<li><strong>急性期方向反转</strong>:心梗或卒中急性期,高胆红素反而预示更差预后——急性期胆红素升高反映氧化应激负荷,是"损伤标记"而非保护因子。保护作用是长期慢性暴露的属性<sup class="footnote-ref"><a href="#fn13" id="fnref13:1">[13:1]</a></sup><sup class="footnote-ref"><a href="#fn28" id="fnref28">[28]</a></sup>;</li>
-<li><strong>组分之争</strong>:不同研究中间接(未结合)与直接(结合)胆红素方向可能相反<sup class="footnote-ref"><a href="#fn29" id="fnref29">[29]</a></sup>;</li>
-<li><strong>预测价值有限</strong>:加入胆红素后风险模型的 C 指数仅提升 0.0013(P=0.13),没有临床意义的预测增益<sup class="footnote-ref"><a href="#fn12" id="fnref12:1">[12:1]</a></sup>。</li>
+<li><strong>剂量-反应是 U 形,不是越多越好</strong>:12 项前瞻研究荟萃显示风险最低点约在 17–20 μmol/L,过低过高都不利<sup class="footnote-ref"><a href="#fn27" id="fnref27">[27]</a></sup>;</li>
+<li><strong>急性期方向反转</strong>:心梗或卒中急性期,高胆红素反而预示更差预后——急性期胆红素升高反映氧化应激负荷,是"损伤标记"而非保护因子。保护作用是长期慢性暴露的属性<sup class="footnote-ref"><a href="#fn13" id="fnref13:1">[13:1]</a></sup><sup class="footnote-ref"><a href="#fn28" id="fnref28">[28]</a></sup>;</li>
+<li><strong>组分之争</strong>:不同研究中间接与直接胆红素方向可能相反<sup class="footnote-ref"><a href="#fn29" id="fnref29">[29]</a></sup>;</li>
+<li><strong>预测价值有限</strong>:加入胆红素后风险模型的 C 指数仅提升 0.0013(P=0.13),没有临床意义的预测增益<sup class="footnote-ref"><a href="#fn12" id="fnref12:1">[12:1]</a></sup>。</li>
</ul>
-<h2 id="结论-一个准确的说法"><a class="header-anchor" href="#结论-一个准确的说法">¶</a>结论:一个准确的说法</h2>
-<p>把四十年的证据放在一起,最准确的表述是:</p>
+<h2 id="结论"><a class="header-anchor" href="#结论">¶</a>结论</h2>
+<p>四十年的证据放在一起,最准确的表述是:</p>
<blockquote>
-<p><strong>生理性轻度高胆红素血症(吉尔伯特综合征)是心血管风险的独立反向生物标志物,具有真实而复杂的抗氧化、抗炎与代谢活性;但"胆红素因果性地保护心脏"在欧洲人群最强设计中未获支持,不能作为临床干预的依据。</strong></p>
+<p><strong>生理性轻度高胆红素血症(吉尔伯特综合征)是心血管风险的独立反向生物标志物,具有真实而复杂的抗氧化、抗炎与代谢活性;但"胆红素因果性地保护心脏"在欧洲人群最强设计中未获支持,不能作为临床干预的依据。</strong></p>
</blockquote>
-<p>对个体而言,体检发现孤立性间接胆红素轻度升高(排除溶血与肝病后)应视为良性状态——既不必因此放松标准的心血管风险管理(血压、血脂、吸烟、运动),也不应被当作"心脏有保护"的免死金牌。对用药而言,吉尔伯特综合征患者使用 UGT1A1 底物药物(如伊立替康)需关注暴露增加。</p>
-<p>一个常被误读的细节值得记住:2006 年弗雷明汉那篇著名的 HR = 0.36 是<strong>基因型-结局关联研究</strong>,不是孟德尔随机化;真正的 MR 检验直到 2013 年才由哥本哈根团队完成,而它给出的是否定答案。这个领域的发展轨迹——从乐观叙事到大型否定、再到人群异质性的复杂图景——本身就是流行病学方法学进步的一个标本。</p>
+<p>对个体而言,体检发现孤立性间接胆红素轻度升高(排除溶血与肝病后)应视为良性状态——既不必因此放松标准的心血管风险管理(血压、血脂、吸烟、运动),也不应被当作"心脏有保护"的免死金牌。对用药而言,吉尔伯特综合征患者使用 UGT1A1 底物药物(如伊立替康)需关注暴露增加。</p>
+<p>一个常被误读的细节值得记住:2006 年弗雷明汉那篇著名的 HR = 0.36 是基因型-结局关联研究,不是孟德尔随机化;真正的 MR 检验直到 2013 年才由哥本哈根团队完成,而它给出的是否定答案。这个领域的发展轨迹——从乐观叙事到大型否定、再到人群异质性的复杂图景——本身就是流行病学方法学进步的一个标本。</p>
<hr>
<h2 id="参考文献"><a class="header-anchor" href="#参考文献">¶</a>参考文献</h2>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%83%86%E7%BA%A2%E7%B4%A0%E8%AF%81%E6%8D%AE%E6%A3%AE%E6%9E%97%E5%9B%BE.png" alt="胆红素水平与心血管结局:观察性 vs 遗传学证据的关键效应量"></p>
diff --git a/search.xml b/search.xml
index 54a7b1b3..babd02d8 100644
--- a/search.xml
+++ b/search.xml
@@ -481,32 +481,6 @@ char sa_data[] socket address (variable-length data)</p>
</tags>
</entry>
<entry>
- <title>DDD 中的 Ubiquitous Language</title>
- <url>/2025/03/14/DDD-%E4%B8%AD%E7%9A%84-Ubiquitous-Languages/</url>
- <content><![CDATA[<p>Ubiquitous Language(通用语言)是 Domain-Driven Design (DDD) 中的一个核心概念。它是一种共享的、统一的语言,用于描述和讨论领域模型中的概念和规则。Ubiquitous Language 的目的是确保开发团队和业务专家之间的沟通更加高效和准确,从而减少误解和错误。</p>
-<p>一般来说,Ubiquitous Language 有以下特点:</p>
-<ol>
-<li>共享:Ubiquitous Language 是由开发团队和业务专家共同创建和使用的。它不仅用于代码和文档,还用于日常的沟通和讨论。</li>
-<li>统一:在整个项目中,Ubiquitous Language 应该是一致的。无论是在代码、文档、会议还是白板上,都应该使用相同的术语和概念。</li>
-<li>精确:Ubiquitous Language 应该尽可能精确,避免模糊和歧义。每个术语都应该有明确的定义和含义。</li>
-<li>演进:Ubiquitous Language 是动态的,会随着项目的进展和业务需求的变化而演进。团队应该定期审查和更新它。</li>
-</ol>
-<p>基于此,它可以用在这些地方:</p>
-<ol>
-<li>命名:在代码中使用 Ubiquitous Language 来命名类、方法、变量等。例如,如果业务专家使用“订单”来描述一个概念,那么在代码中也应该使用“Order”而不是“Purchase”或“Transaction”。</li>
-<li>文档:在文档中使用 Ubiquitous Language 来描述系统的设计、架构和功能。这有助于业务专家更容易理解技术文档。</li>
-<li>沟通:在团队会议、讨论和白板会议中使用 Ubiquitous Language。这有助于确保所有参与者都在讨论同一个概念。</li>
-<li>测试:在编写测试用例时,使用 Ubiquitous Language 来描述测试的前提条件、步骤和预期结果。这有助于确保测试覆盖了业务需求。</li>
-</ol>
-<p>假设正在开发一个电子商务系统,业务专家使用“订单”来描述用户购买的商品集合。团队可以在代码中使用“Order”来命名相关的类和方法:</p>
-<figure class="highlight fsharp"><table><tr><td class="code"><pre><span class="line"><span class="keyword">type</span> <span class="title class_">Order</span> <span class="operator">=</span> &#123;</span><br><span class="line"> items<span class="operator">:</span> OrderItem <span class="type">list</span></span><br><span class="line"> customer<span class="operator">:</span> Customer</span><br><span class="line"> orderDate<span class="operator">:</span> DateTime</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">OrderItem</span> <span class="operator">=</span> &#123;</span><br><span class="line"> product<span class="operator">:</span> Product</span><br><span class="line"> quantity<span class="operator">:</span> <span class="type">int</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">Customer</span> <span class="operator">=</span> &#123;</span><br><span class="line"> name<span class="operator">:</span> <span class="type">string</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">Product</span> <span class="operator">=</span> &#123;</span><br><span class="line"> name<span class="operator">:</span> <span class="type">string</span></span><br><span class="line"> price<span class="operator">:</span> <span class="type">float</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> addItem (order<span class="operator">:</span> Order) (item<span class="operator">:</span> OrderItem) <span class="operator">=</span></span><br><span class="line"> &#123; order <span class="keyword">with</span> items <span class="operator">=</span> order.items <span class="operator">@</span> [item] &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> getTotalAmount (order<span class="operator">:</span> Order) <span class="operator">=</span></span><br><span class="line"> <span class="keyword">let</span> total <span class="operator">=</span> <span class="number">0.0</span></span><br><span class="line"> <span class="keyword">for</span> item <span class="keyword">in</span> order.items <span class="keyword">do</span></span><br><span class="line"> total <span class="operator">&lt;-</span> total <span class="operator">+</span> item.price</span><br><span class="line"> total</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> getPrice (item<span class="operator">:</span> OrderItem) <span class="operator">=</span></span><br><span class="line"> item.product.price <span class="operator">*</span> item.quantity</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> getTotalPrice (order<span class="operator">:</span> Order) <span class="operator">=</span></span><br><span class="line"> <span class="keyword">let</span> total <span class="operator">=</span> <span class="number">0.0</span></span><br><span class="line"> <span class="keyword">for</span> item <span class="keyword">in</span> order.items <span class="keyword">do</span></span><br><span class="line"> total <span class="operator">&lt;-</span> total <span class="operator">+</span> getPrice(item)</span><br><span class="line"> total</span><br></pre></td></tr></table></figure>
-<p>在这个示例中使用了“Order”、“OrderItem”、“Customer”和“Product”等术语,这些术语都是 Ubiquitous Language 的一部分,可以提高代码与业务需求的一致性。</p>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>Dealing with complex dependency injection in FSharp</title>
<url>/2024/10/18/Dealing-with-complex-dependency-injection-in-FSharp/</url>
<content><![CDATA[<p>Today, we’re going to cover different ways of encapsulating capabilities and supplying them between functions using functional programming techniques which can be realized in F#.</p>
@@ -601,6 +575,32 @@ char sa_data[] socket address (variable-length data)</p>
</tags>
</entry>
<entry>
+ <title>DDD 中的 Ubiquitous Language</title>
+ <url>/2025/03/14/DDD-%E4%B8%AD%E7%9A%84-Ubiquitous-Languages/</url>
+ <content><![CDATA[<p>Ubiquitous Language(通用语言)是 Domain-Driven Design (DDD) 中的一个核心概念。它是一种共享的、统一的语言,用于描述和讨论领域模型中的概念和规则。Ubiquitous Language 的目的是确保开发团队和业务专家之间的沟通更加高效和准确,从而减少误解和错误。</p>
+<p>一般来说,Ubiquitous Language 有以下特点:</p>
+<ol>
+<li>共享:Ubiquitous Language 是由开发团队和业务专家共同创建和使用的。它不仅用于代码和文档,还用于日常的沟通和讨论。</li>
+<li>统一:在整个项目中,Ubiquitous Language 应该是一致的。无论是在代码、文档、会议还是白板上,都应该使用相同的术语和概念。</li>
+<li>精确:Ubiquitous Language 应该尽可能精确,避免模糊和歧义。每个术语都应该有明确的定义和含义。</li>
+<li>演进:Ubiquitous Language 是动态的,会随着项目的进展和业务需求的变化而演进。团队应该定期审查和更新它。</li>
+</ol>
+<p>基于此,它可以用在这些地方:</p>
+<ol>
+<li>命名:在代码中使用 Ubiquitous Language 来命名类、方法、变量等。例如,如果业务专家使用“订单”来描述一个概念,那么在代码中也应该使用“Order”而不是“Purchase”或“Transaction”。</li>
+<li>文档:在文档中使用 Ubiquitous Language 来描述系统的设计、架构和功能。这有助于业务专家更容易理解技术文档。</li>
+<li>沟通:在团队会议、讨论和白板会议中使用 Ubiquitous Language。这有助于确保所有参与者都在讨论同一个概念。</li>
+<li>测试:在编写测试用例时,使用 Ubiquitous Language 来描述测试的前提条件、步骤和预期结果。这有助于确保测试覆盖了业务需求。</li>
+</ol>
+<p>假设正在开发一个电子商务系统,业务专家使用“订单”来描述用户购买的商品集合。团队可以在代码中使用“Order”来命名相关的类和方法:</p>
+<figure class="highlight fsharp"><table><tr><td class="code"><pre><span class="line"><span class="keyword">type</span> <span class="title class_">Order</span> <span class="operator">=</span> &#123;</span><br><span class="line"> items<span class="operator">:</span> OrderItem <span class="type">list</span></span><br><span class="line"> customer<span class="operator">:</span> Customer</span><br><span class="line"> orderDate<span class="operator">:</span> DateTime</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">OrderItem</span> <span class="operator">=</span> &#123;</span><br><span class="line"> product<span class="operator">:</span> Product</span><br><span class="line"> quantity<span class="operator">:</span> <span class="type">int</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">Customer</span> <span class="operator">=</span> &#123;</span><br><span class="line"> name<span class="operator">:</span> <span class="type">string</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">type</span> <span class="title class_">Product</span> <span class="operator">=</span> &#123;</span><br><span class="line"> name<span class="operator">:</span> <span class="type">string</span></span><br><span class="line"> price<span class="operator">:</span> <span class="type">float</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> addItem (order<span class="operator">:</span> Order) (item<span class="operator">:</span> OrderItem) <span class="operator">=</span></span><br><span class="line"> &#123; order <span class="keyword">with</span> items <span class="operator">=</span> order.items <span class="operator">@</span> [item] &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> getTotalAmount (order<span class="operator">:</span> Order) <span class="operator">=</span></span><br><span class="line"> <span class="keyword">let</span> total <span class="operator">=</span> <span class="number">0.0</span></span><br><span class="line"> <span class="keyword">for</span> item <span class="keyword">in</span> order.items <span class="keyword">do</span></span><br><span class="line"> total <span class="operator">&lt;-</span> total <span class="operator">+</span> item.price</span><br><span class="line"> total</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> getPrice (item<span class="operator">:</span> OrderItem) <span class="operator">=</span></span><br><span class="line"> item.product.price <span class="operator">*</span> item.quantity</span><br><span class="line"></span><br><span class="line"><span class="keyword">let</span> getTotalPrice (order<span class="operator">:</span> Order) <span class="operator">=</span></span><br><span class="line"> <span class="keyword">let</span> total <span class="operator">=</span> <span class="number">0.0</span></span><br><span class="line"> <span class="keyword">for</span> item <span class="keyword">in</span> order.items <span class="keyword">do</span></span><br><span class="line"> total <span class="operator">&lt;-</span> total <span class="operator">+</span> getPrice(item)</span><br><span class="line"> total</span><br></pre></td></tr></table></figure>
+<p>在这个示例中使用了“Order”、“OrderItem”、“Customer”和“Product”等术语,这些术语都是 Ubiquitous Language 的一部分,可以提高代码与业务需求的一致性。</p>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>F# 重载解析问题</title>
<url>/2025/03/30/F-%E9%87%8D%E8%BD%BD%E8%A7%A3%E6%9E%90%E9%97%AE%E9%A2%98/</url>
<content><![CDATA[<p>当在 F# 中使用一些 C# 类库的时候,可能会遇到类似如下的问题:</p>
@@ -2658,6 +2658,43 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
+ <title>TypeScript With Rust Errors, No Try Catch, Heresy</title>
+ <url>/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/</url>
+ <content><![CDATA[<blockquote>
+<p>It’s hard to miss things when you don’t know different things exist</p>
+</blockquote>
+<p>The first problem is, and personally, I believe it’s the biggest JavaScript problem ever: we don’t know what can throw an error. From a JavaScript error perspective, it’s the same as the following:</p>
+<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">let</span> data = “<span class="title class_">Hello</span>”;</span><br><span class="line">&#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(err);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>JavaScript doesn’t know; JavaScript doesn’t care. You should know.</p>
+<p>Second thing, this is perfectly viable code:</p>
+<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> request = &#123; <span class="attr">name</span>: “test”, <span class="attr">value</span>: <span class="number">2n</span> &#125;;</span><br><span class="line"><span class="keyword">const</span> body = <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(request);</span><br><span class="line"><span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&quot;https://example.com&quot;</span>, &#123;</span><br><span class="line"> <span class="attr">method</span>: “<span class="variable constant_">POST</span>”,</span><br><span class="line"> body,</span><br><span class="line">&#125;);</span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">ok</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>No errors, no linters, even though this can break your app.</p>
+<p>Right now, in my head, I can hear, “What’s the problem, just use try/catch everywhere.” Here comes the third problem: we don’t know which one is thrown. Of course, we can somehow guess by the error message, but what about bigger services/functions with many places where errors can happen? Are you sure you are handling all of them properly with one try/catch?</p>
+<hr>
+<figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">greeting_file_result</span> = File::<span class="title function_ invoke__">open</span>(“hello.txt”); </span><br><span class="line"><span class="keyword">let</span> <span class="variable">greeting_file</span> = <span class="keyword">match</span> greeting_file_result &#123; </span><br><span class="line"> <span class="title function_ invoke__">Ok</span>(file) =&gt; file, </span><br><span class="line"> <span class="title function_ invoke__">Err</span>(error) =&gt; <span class="built_in">panic!</span>(<span class="string">&quot;Problem opening the file: &#123;:?&#125;&quot;</span>, error), </span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>
+<p>The most verbose of the three shown here and, ironically, the best one. So, first of all, Rust handles the errors using its amazing enums (they are not the same as TypeScript enums!). Without going into detail, what is important here is that it uses an enum called <code>Result</code> with two variants: <code>Ok</code> and <code>Err</code>. As you might guess, <code>Ok</code> holds a value and <code>Err</code> holds…surprise, an error :D.</p>
+<p>The summary here is that Rust always know where there might be an error. And it force you to deal with it right where it appears (mostly). No hidden ones, no guessing, no breaking app with a surprise face.</p>
+<p>And this approach is just better. By A MILE.</p>
+<p>We cannot make TypeScript errors work like the Rust. The limiting factor here is the language itself; it doesn’t have the proper tools to do that.</p>
+<p>But what we can do is try to make it similar. And make it simple:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">type</span> <span class="title class_">Safe</span>&lt;T&gt; = </span><br><span class="line"> | &#123; </span><br><span class="line"> <span class="attr">success</span>: <span class="literal">true</span>; </span><br><span class="line"> <span class="attr">data</span>: T; </span><br><span class="line"> &#125; </span><br><span class="line"> | &#123; </span><br><span class="line"> <span class="attr">success</span>: <span class="literal">false</span>; </span><br><span class="line"> <span class="attr">error</span>: <span class="built_in">string</span>; </span><br><span class="line"> &#125;;</span><br></pre></td></tr></table></figure>
+<p>we do need a few try/catches. The good thing is we only need about two, not 100,000:</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(<span class="attr">promise</span>: <span class="title class_">Promise</span>&lt;T&gt;, <span class="attr">err</span>?: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt;;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(<span class="attr">func</span>: <span class="function">() =&gt;</span> T, <span class="attr">err</span>?: <span class="built_in">string</span>): <span class="title class_">Safe</span>&lt;T&gt;;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(</span><br><span class="line"> <span class="attr">promiseOrFunc</span>: <span class="title class_">Promise</span>&lt;T&gt; | (<span class="function">() =&gt;</span> T),</span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span>,</span><br><span class="line">): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt; | <span class="title class_">Safe</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">if</span> (promiseOrFunc <span class="keyword">instanceof</span> <span class="title class_">Promise</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">safeAsync</span>(promiseOrFunc, err);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">safeSync</span>(promiseOrFunc, err);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> safeAsync&lt;T&gt;(</span><br><span class="line"> <span class="attr">promise</span>: <span class="title class_">Promise</span>&lt;T&gt;, </span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span></span><br><span class="line">): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt; &#123;</span><br><span class="line"> <span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">const</span> data = <span class="keyword">await</span> promise;</span><br><span class="line"> <span class="keyword">return</span> &#123; data, <span class="attr">success</span>: <span class="literal">true</span> &#125;;</span><br><span class="line"> &#125; <span class="keyword">catch</span> (e) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(e);</span><br><span class="line"> <span class="keyword">if</span> (err !== <span class="literal">undefined</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: err &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (e <span class="keyword">instanceof</span> <span class="title class_">Error</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: e.<span class="property">message</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: <span class="string">&quot;Something went wrong&quot;</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> safeSync&lt;T&gt;(</span><br><span class="line"> <span class="attr">func</span>: <span class="function">() =&gt;</span> T, </span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span></span><br><span class="line">): <span class="title class_">Safe</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">const</span> data = <span class="title function_">func</span>();</span><br><span class="line"> <span class="keyword">return</span> &#123; data, <span class="attr">success</span>: <span class="literal">true</span> &#125;;</span><br><span class="line"> &#125; <span class="keyword">catch</span> (e) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(e);</span><br><span class="line"> <span class="keyword">if</span> (err !== <span class="literal">undefined</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: err &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (e <span class="keyword">instanceof</span> <span class="title class_">Error</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: e.<span class="property">message</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: <span class="string">&quot;Something went wrong&quot;</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
+<p>This is just a wrapper with our <code>Safe</code> type as the return one. But sometimes simple things are all you need. Let’s combine them with the example from above.</p>
+<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> request = &#123; <span class="attr">name</span>: “test”, <span class="attr">value</span>: <span class="number">2n</span> &#125;; </span><br><span class="line"><span class="keyword">const</span> body = <span class="title function_">safe</span>( </span><br><span class="line"> <span class="function">() =&gt;</span> <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(request), </span><br><span class="line"> “<span class="title class_">Failed</span> to serialize request”, </span><br><span class="line">); </span><br><span class="line"><span class="keyword">if</span> (!body.<span class="property">success</span>) &#123; </span><br><span class="line"> <span class="comment">// handle error (body.error) </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">safe</span>( </span><br><span class="line"> <span class="title function_">fetch</span>(<span class="string">&quot;https://example.com&quot;</span>, &#123; </span><br><span class="line"> <span class="attr">method</span>: “<span class="variable constant_">POST</span>”, </span><br><span class="line"> <span class="attr">body</span>: body.<span class="property">data</span>, </span><br><span class="line"> &#125;), </span><br><span class="line">); </span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">success</span>) &#123; </span><br><span class="line"> <span class="comment">// handle error (response.error) </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">data</span>.<span class="property">ok</span>) &#123; </span><br><span class="line"> <span class="comment">// handle network error </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="comment">// handle response (body.data)</span></span><br></pre></td></tr></table></figure>
+<p>New solution is longer, but it performs better because of the following reasons:</p>
+<ul>
+<li>no try/catch</li>
+<li>we handle each error where it occurs</li>
+<li>we can specify an error message for a specific function</li>
+<li>we have a nice top-to-bottom logic, all errors on top, then only the response at the bottom</li>
+</ul>
+]]></content>
+ <tags>
+ <tag>Technique</tag>
+ </tags>
+ </entry>
+ <entry>
<title>Turborepo 简述</title>
<url>/2024/09/27/Turborepo-%E7%AE%80%E8%BF%B0/</url>
<content><![CDATA[<h2 id="Turborepo-简介"><a class="header-anchor" href="#Turborepo-简介">¶</a>Turborepo 简介</h2>
@@ -2882,43 +2919,6 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>TypeScript With Rust Errors, No Try Catch, Heresy</title>
- <url>/2023/04/30/TypeScript-With-Rust-Errors-No-Try-Catch-Heresy/</url>
- <content><![CDATA[<blockquote>
-<p>It’s hard to miss things when you don’t know different things exist</p>
-</blockquote>
-<p>The first problem is, and personally, I believe it’s the biggest JavaScript problem ever: we don’t know what can throw an error. From a JavaScript error perspective, it’s the same as the following:</p>
-<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">let</span> data = “<span class="title class_">Hello</span>”;</span><br><span class="line">&#125; <span class="keyword">catch</span> (err) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(err);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-<p>JavaScript doesn’t know; JavaScript doesn’t care. You should know.</p>
-<p>Second thing, this is perfectly viable code:</p>
-<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> request = &#123; <span class="attr">name</span>: “test”, <span class="attr">value</span>: <span class="number">2n</span> &#125;;</span><br><span class="line"><span class="keyword">const</span> body = <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(request);</span><br><span class="line"><span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">fetch</span>(<span class="string">&quot;https://example.com&quot;</span>, &#123;</span><br><span class="line"> <span class="attr">method</span>: “<span class="variable constant_">POST</span>”,</span><br><span class="line"> body,</span><br><span class="line">&#125;);</span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">ok</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-<p>No errors, no linters, even though this can break your app.</p>
-<p>Right now, in my head, I can hear, “What’s the problem, just use try/catch everywhere.” Here comes the third problem: we don’t know which one is thrown. Of course, we can somehow guess by the error message, but what about bigger services/functions with many places where errors can happen? Are you sure you are handling all of them properly with one try/catch?</p>
-<hr>
-<figure class="highlight rust"><table><tr><td class="code"><pre><span class="line"><span class="keyword">let</span> <span class="variable">greeting_file_result</span> = File::<span class="title function_ invoke__">open</span>(“hello.txt”); </span><br><span class="line"><span class="keyword">let</span> <span class="variable">greeting_file</span> = <span class="keyword">match</span> greeting_file_result &#123; </span><br><span class="line"> <span class="title function_ invoke__">Ok</span>(file) =&gt; file, </span><br><span class="line"> <span class="title function_ invoke__">Err</span>(error) =&gt; <span class="built_in">panic!</span>(<span class="string">&quot;Problem opening the file: &#123;:?&#125;&quot;</span>, error), </span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>
-<p>The most verbose of the three shown here and, ironically, the best one. So, first of all, Rust handles the errors using its amazing enums (they are not the same as TypeScript enums!). Without going into detail, what is important here is that it uses an enum called <code>Result</code> with two variants: <code>Ok</code> and <code>Err</code>. As you might guess, <code>Ok</code> holds a value and <code>Err</code> holds…surprise, an error :D.</p>
-<p>The summary here is that Rust always know where there might be an error. And it force you to deal with it right where it appears (mostly). No hidden ones, no guessing, no breaking app with a surprise face.</p>
-<p>And this approach is just better. By A MILE.</p>
-<p>We cannot make TypeScript errors work like the Rust. The limiting factor here is the language itself; it doesn’t have the proper tools to do that.</p>
-<p>But what we can do is try to make it similar. And make it simple:</p>
-<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">type</span> <span class="title class_">Safe</span>&lt;T&gt; = </span><br><span class="line"> | &#123; </span><br><span class="line"> <span class="attr">success</span>: <span class="literal">true</span>; </span><br><span class="line"> <span class="attr">data</span>: T; </span><br><span class="line"> &#125; </span><br><span class="line"> | &#123; </span><br><span class="line"> <span class="attr">success</span>: <span class="literal">false</span>; </span><br><span class="line"> <span class="attr">error</span>: <span class="built_in">string</span>; </span><br><span class="line"> &#125;;</span><br></pre></td></tr></table></figure>
-<p>we do need a few try/catches. The good thing is we only need about two, not 100,000:</p>
-<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(<span class="attr">promise</span>: <span class="title class_">Promise</span>&lt;T&gt;, <span class="attr">err</span>?: <span class="built_in">string</span>): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt;;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(<span class="attr">func</span>: <span class="function">() =&gt;</span> T, <span class="attr">err</span>?: <span class="built_in">string</span>): <span class="title class_">Safe</span>&lt;T&gt;;</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> safe&lt;T&gt;(</span><br><span class="line"> <span class="attr">promiseOrFunc</span>: <span class="title class_">Promise</span>&lt;T&gt; | (<span class="function">() =&gt;</span> T),</span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span>,</span><br><span class="line">): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt; | <span class="title class_">Safe</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">if</span> (promiseOrFunc <span class="keyword">instanceof</span> <span class="title class_">Promise</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">safeAsync</span>(promiseOrFunc, err);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="title function_">safeSync</span>(promiseOrFunc, err);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> safeAsync&lt;T&gt;(</span><br><span class="line"> <span class="attr">promise</span>: <span class="title class_">Promise</span>&lt;T&gt;, </span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span></span><br><span class="line">): <span class="title class_">Promise</span>&lt;<span class="title class_">Safe</span>&lt;T&gt;&gt; &#123;</span><br><span class="line"> <span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">const</span> data = <span class="keyword">await</span> promise;</span><br><span class="line"> <span class="keyword">return</span> &#123; data, <span class="attr">success</span>: <span class="literal">true</span> &#125;;</span><br><span class="line"> &#125; <span class="keyword">catch</span> (e) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(e);</span><br><span class="line"> <span class="keyword">if</span> (err !== <span class="literal">undefined</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: err &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (e <span class="keyword">instanceof</span> <span class="title class_">Error</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: e.<span class="property">message</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: <span class="string">&quot;Something went wrong&quot;</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> safeSync&lt;T&gt;(</span><br><span class="line"> <span class="attr">func</span>: <span class="function">() =&gt;</span> T, </span><br><span class="line"> <span class="attr">err</span>?: <span class="built_in">string</span></span><br><span class="line">): <span class="title class_">Safe</span>&lt;T&gt; &#123;</span><br><span class="line"> <span class="keyword">try</span> &#123;</span><br><span class="line"> <span class="keyword">const</span> data = <span class="title function_">func</span>();</span><br><span class="line"> <span class="keyword">return</span> &#123; data, <span class="attr">success</span>: <span class="literal">true</span> &#125;;</span><br><span class="line"> &#125; <span class="keyword">catch</span> (e) &#123;</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">error</span>(e);</span><br><span class="line"> <span class="keyword">if</span> (err !== <span class="literal">undefined</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: err &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span> (e <span class="keyword">instanceof</span> <span class="title class_">Error</span>) &#123;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: e.<span class="property">message</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> &#123; <span class="attr">success</span>: <span class="literal">false</span>, <span class="attr">error</span>: <span class="string">&quot;Something went wrong&quot;</span> &#125;;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
-<p>This is just a wrapper with our <code>Safe</code> type as the return one. But sometimes simple things are all you need. Let’s combine them with the example from above.</p>
-<figure class="highlight typescript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">const</span> request = &#123; <span class="attr">name</span>: “test”, <span class="attr">value</span>: <span class="number">2n</span> &#125;; </span><br><span class="line"><span class="keyword">const</span> body = <span class="title function_">safe</span>( </span><br><span class="line"> <span class="function">() =&gt;</span> <span class="title class_">JSON</span>.<span class="title function_">stringify</span>(request), </span><br><span class="line"> “<span class="title class_">Failed</span> to serialize request”, </span><br><span class="line">); </span><br><span class="line"><span class="keyword">if</span> (!body.<span class="property">success</span>) &#123; </span><br><span class="line"> <span class="comment">// handle error (body.error) </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="keyword">const</span> response = <span class="keyword">await</span> <span class="title function_">safe</span>( </span><br><span class="line"> <span class="title function_">fetch</span>(<span class="string">&quot;https://example.com&quot;</span>, &#123; </span><br><span class="line"> <span class="attr">method</span>: “<span class="variable constant_">POST</span>”, </span><br><span class="line"> <span class="attr">body</span>: body.<span class="property">data</span>, </span><br><span class="line"> &#125;), </span><br><span class="line">); </span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">success</span>) &#123; </span><br><span class="line"> <span class="comment">// handle error (response.error) </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="keyword">if</span> (!response.<span class="property">data</span>.<span class="property">ok</span>) &#123; </span><br><span class="line"> <span class="comment">// handle network error </span></span><br><span class="line"> <span class="keyword">return</span>; </span><br><span class="line">&#125; </span><br><span class="line"><span class="comment">// handle response (body.data)</span></span><br></pre></td></tr></table></figure>
-<p>New solution is longer, but it performs better because of the following reasons:</p>
-<ul>
-<li>no try/catch</li>
-<li>we handle each error where it occurs</li>
-<li>we can specify an error message for a specific function</li>
-<li>we have a nice top-to-bottom logic, all errors on top, then only the response at the bottom</li>
-</ul>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>WiscKey: Separating Keys from Values in SSD-conscious Storage</title>
<url>/2023/07/21/WiscKey-Separating-Keys-from-Values-in-SSD-conscious-Storage/</url>
<content><![CDATA[<p>We present WiscKey, a persistent LSM-tree-based key-value store with a performance-oriented data layoutthat separates keys from values to minimize I/O amplifi-cation. The design of WiscKey is highly SSD optimized, leveraging both the sequential and random performance characteristics of the device.</p>
@@ -2984,25 +2984,6 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>DADGAD 定弦</title>
- <url>/2025/07/08/dadgad/</url>
- <content><![CDATA[<p>模态定弦的空弦音不直接构成传统意义上的大调或小调和弦,而是形成一种听感上更为空灵、悬浮的“挂留和弦”(Suspended Chord)效果。</p>
-<p><strong>DADGAD (发音为 “dad-gad”):</strong> 这是凯尔特音乐(Celtic Music)中最具代表性的定弦。它的空弦音给人一种既非大调也非小调的模糊感,充满了神秘和悠远的色彩,非常适合营造氛围音乐和复杂的指弹旋律。</p>
-<p>挂留和弦(Suspended Chord),通常简写为 <strong>“sus”</strong>,是一种在传统和弦结构上进行了巧妙“修改”的和弦。它的核心特点是:<strong>用一个非三度的音,去“替代”或“悬挂”了原本决定和弦大/小调色彩的三度音</strong>,从而创造出一种独特的声音效果。</p>
-<p>想象一个标准的大三和弦或小三和弦,它由<strong>根音、三度音和五度音</strong>构成。其中,<strong>三度音</strong>是决定这个和弦听起来是明亮、开心的“大调”,还是忧郁、伤感的“小调”的关键。</p>
-<p>而挂留和弦,就是把这个关键的“三度音”暂时拿掉,换上别的音。最常见的替代者有两个:<br>
-一是 <strong>纯四度音 (Perfect 4th)</strong> ,二是 <strong>大二度音 (Major 2nd)</strong> 。</p>
-<p><strong>sus4 和弦 (挂四和弦)</strong> 由 <strong>根音 (1) + 纯四度音 (4) + 纯五度音 (5)</strong> 构成,即用<strong>四度音</strong>替代了原本的三度音。听感上,这是最常见的挂留和弦。它创造出一种<strong>强烈而悬浮的张力感</strong>,声音既不属于大调也不属于小调,听起来非常“开阔”。例如,一个 <strong>Csus4</strong> 和弦,就是由 C、F、G 三个音构成,取代了标准C大调和弦(C-E-G)中的 E 音。</p>
-<p><strong>sus2 和弦 (挂二和弦)</strong> 由 <strong>根音 (1) + 大二度音 (2) + 纯五度音 (5)</strong> 构成,特点是用二度音替代了原本的三度音。听感上,sus2和弦的声音比sus4更柔和、更明亮一些。它同样具有开放、模糊的色彩,但张力感稍弱,听起来更像是一种平静、梦幻的色彩和弦。例如,一个 <strong>Csus2</strong> 和弦,就是由 C、D、G 三个音构成,取代了标准C大调和弦(C-E-G)中的 E 音。</p>
-<p>而 DADGAD 定弦方式的空弦音,其核心就是一个挂留和弦,具体来说是一个 Dsus4 和弦。当你弹响 DADGAD 的所有空弦时,你实际上听到的就是 <strong>D、G、A</strong> 这三个音在不同八度上的叠加和共鸣。这三个音不多不少,正好构成了 <strong>Dsus4</strong> 和弦。</p>
-<p>DADGAD 定弦的精髓,就在于它将整个吉他的开放状态变成了一个巨大的、共鸣丰富的 <strong>Dsus4</strong> 挂留和弦。</p>
-<p>这正是为什么它能产生那种“既非大调也非小调的模糊感”和“空灵、悬浮”的听感。因为三度音(F# 或 F)的缺失,和弦的“身份”被悬挂了起来,没有明确地告诉你它是快乐的(大调)还是悲伤的(小调),而是创造出一种充满想象空间、广阔而悠远的音景。</p>
-]]></content>
- <tags>
- <tag>Life</tag>
- </tags>
- </entry>
- <entry>
<title>在临床医疗领域中的数据库外键设计取舍</title>
<url>/2025/09/09/database-fk-design-in-clinical-medicine/</url>
<content><![CDATA[<p>从关系模型的理论视角看,外键作为参照完整性约束的实现机制,理论上能确保跨表数据的逻辑一致性,避免出现孤立记录(orphaned records)<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。但在高并发、分布式、快速迭代的业务场景中,强制外键约束会引入显著的运行时开销:每次写操作都需要执行跨表的锁检查与索引查询,在 OLTP 系统中尤其影响吞吐量。<a href="https://planetscale.com/docs/learn/operating-without-foreign-key-constraints">planetscale.com</a> 的文档指出,MySQL 的外键会引入对数据和元数据更改的额外锁定,从而导致性能下降,特别是在高并发工作负载中<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>。以 TPC-C 基准测试为例,启用外键的订单创建事务延迟可能增加,因为数据库引擎必须验证客户表与订单项表的关联有效性,这在每秒数千次写入的场景下会成为锁竞争瓶颈。</p>
@@ -3067,6 +3048,102 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
+ <title>DADGAD 定弦</title>
+ <url>/2025/07/08/dadgad/</url>
+ <content><![CDATA[<p>模态定弦的空弦音不直接构成传统意义上的大调或小调和弦,而是形成一种听感上更为空灵、悬浮的“挂留和弦”(Suspended Chord)效果。</p>
+<p><strong>DADGAD (发音为 “dad-gad”):</strong> 这是凯尔特音乐(Celtic Music)中最具代表性的定弦。它的空弦音给人一种既非大调也非小调的模糊感,充满了神秘和悠远的色彩,非常适合营造氛围音乐和复杂的指弹旋律。</p>
+<p>挂留和弦(Suspended Chord),通常简写为 <strong>“sus”</strong>,是一种在传统和弦结构上进行了巧妙“修改”的和弦。它的核心特点是:<strong>用一个非三度的音,去“替代”或“悬挂”了原本决定和弦大/小调色彩的三度音</strong>,从而创造出一种独特的声音效果。</p>
+<p>想象一个标准的大三和弦或小三和弦,它由<strong>根音、三度音和五度音</strong>构成。其中,<strong>三度音</strong>是决定这个和弦听起来是明亮、开心的“大调”,还是忧郁、伤感的“小调”的关键。</p>
+<p>而挂留和弦,就是把这个关键的“三度音”暂时拿掉,换上别的音。最常见的替代者有两个:<br>
+一是 <strong>纯四度音 (Perfect 4th)</strong> ,二是 <strong>大二度音 (Major 2nd)</strong> 。</p>
+<p><strong>sus4 和弦 (挂四和弦)</strong> 由 <strong>根音 (1) + 纯四度音 (4) + 纯五度音 (5)</strong> 构成,即用<strong>四度音</strong>替代了原本的三度音。听感上,这是最常见的挂留和弦。它创造出一种<strong>强烈而悬浮的张力感</strong>,声音既不属于大调也不属于小调,听起来非常“开阔”。例如,一个 <strong>Csus4</strong> 和弦,就是由 C、F、G 三个音构成,取代了标准C大调和弦(C-E-G)中的 E 音。</p>
+<p><strong>sus2 和弦 (挂二和弦)</strong> 由 <strong>根音 (1) + 大二度音 (2) + 纯五度音 (5)</strong> 构成,特点是用二度音替代了原本的三度音。听感上,sus2和弦的声音比sus4更柔和、更明亮一些。它同样具有开放、模糊的色彩,但张力感稍弱,听起来更像是一种平静、梦幻的色彩和弦。例如,一个 <strong>Csus2</strong> 和弦,就是由 C、D、G 三个音构成,取代了标准C大调和弦(C-E-G)中的 E 音。</p>
+<p>而 DADGAD 定弦方式的空弦音,其核心就是一个挂留和弦,具体来说是一个 Dsus4 和弦。当你弹响 DADGAD 的所有空弦时,你实际上听到的就是 <strong>D、G、A</strong> 这三个音在不同八度上的叠加和共鸣。这三个音不多不少,正好构成了 <strong>Dsus4</strong> 和弦。</p>
+<p>DADGAD 定弦的精髓,就在于它将整个吉他的开放状态变成了一个巨大的、共鸣丰富的 <strong>Dsus4</strong> 挂留和弦。</p>
+<p>这正是为什么它能产生那种“既非大调也非小调的模糊感”和“空灵、悬浮”的听感。因为三度音(F# 或 F)的缺失,和弦的“身份”被悬挂了起来,没有明确地告诉你它是快乐的(大调)还是悲伤的(小调),而是创造出一种充满想象空间、广阔而悠远的音景。</p>
+]]></content>
+ <tags>
+ <tag>Life</tag>
+ </tags>
+ </entry>
+ <entry>
+ <title>肠易激综合征 (IBS) 的病理学与药物治疗</title>
+ <url>/2025/06/30/ibs/</url>
+ <content><![CDATA[<p>肠易激综合征 (Irritable Bowel Syndrome, IBS) 是一种常见的功能性胃肠病。其核心特征是在没有发现任何器质性病变(如炎症、溃疡或肿瘤)的情况下,患者长期经历腹痛、腹胀,并伴有排便习惯的改变(腹泻、便秘或两者交替)。</p>
+<h3 id="一、-肠易激综合征的病理生理学"><a class="header-anchor" href="#一、-肠易激综合征的病理生理学">¶</a>一、 肠易激综合征的病理生理学</h3>
+<p>IBS 的病理生理机制非常复杂,并非由单一原因导致,而是多种因素相互作用的结果。目前的医学研究认为,其主要与以下几个核心机制有关:</p>
+<h4 id="1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis"><a class="header-anchor" href="#1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis">¶</a>1. 脑-肠轴功能紊乱 (Disorders of the Brain-Gut Axis)</h4>
+<p>这是 IBS 最核心的病理机制。大脑和肠道通过神经、内分泌和免疫系统形成一个双向沟通的“脑-肠轴”。在 IBS 患者中,这个轴的功能出现紊乱。</p>
+<ul>
+<li><strong>自上而下:</strong> 心理压力、焦虑、抑郁等负面情绪可以直接通过大脑影响肠道的运动、感觉和分泌功能,从而诱发或加重症状。</li>
+<li><strong>自下而上:</strong> 肠道内的信号(如食物、气体、肠道菌群代谢产物)被过度放大后传给大脑,导致大脑对这些正常刺激产生过度反应,表现为疼痛和不适。</li>
+</ul>
+<h4 id="2-内脏高敏感性-Visceral-Hypersensitivity"><a class="header-anchor" href="#2-内脏高敏感性-Visceral-Hypersensitivity">¶</a>2. 内脏高敏感性 (Visceral Hypersensitivity)</h4>
+<p>这是指 IBS 患者的肠道对各种刺激(如食物、气体、肠壁的牵拉)异常敏感。正常人可以耐受的肠道内压力或活动,在 IBS 患者身上却会引发强烈的腹痛、急便感或不适。这种“放大”的感觉是 IBS 腹痛的主要原因。</p>
+<h4 id="3-胃肠动力异常-Altered-Gut-Motility"><a class="header-anchor" href="#3-胃肠动力异常-Altered-Gut-Motility">¶</a>3. 胃肠动力异常 (Altered Gut Motility)</h4>
+<p>肠道肌肉的收缩和舒张节律出现问题,导致食物和粪便在肠道内的转运速度异常。</p>
+<ul>
+<li><strong>转运过快:</strong> 肠道内容物过快通过结肠,水分来不及被充分吸收,导致腹泻(IBS-D)。</li>
+<li><strong>转运过慢:</strong> 肠道蠕动乏力,粪便在结肠内停留时间过长,水分被过度吸收,导致便秘(IBS-C)。</li>
+<li><strong>节律紊乱:</strong> 有时快有时慢,导致腹泻与便秘交替出现(IBS-M)。</li>
+</ul>
+<h4 id="4-肠道微生态失调-Alteration-in-Gut-Microbiota"><a class="header-anchor" href="#4-肠道微生态失调-Alteration-in-Gut-Microbiota">¶</a>4. 肠道微生态失调 (Alteration in Gut Microbiota)</h4>
+<p>IBS 患者的肠道菌群组成和功能与健康人存在差异。有害菌可能增多,有益菌(如双歧杆菌、乳酸杆菌)可能减少。这些失调的菌群会影响肠道屏障功能、产生过多气体、并激活免疫系统,导致腹胀和腹泻。</p>
+<h4 id="5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation"><a class="header-anchor" href="#5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation">¶</a>5. 肠道低度炎症与免疫激活 (Low-Grade Inflammation and Immune Activation)</h4>
+<p>部分 IBS 患者的肠道黏膜中可以观察到轻微的炎症反应,例如肥大细胞等免疫细胞数量增多并被激活。这些细胞会释放组胺、5-羟色胺等物质,直接刺激肠道神经,引起疼痛和动力异常。这种情况尤其在感染性肠炎后发生的 IBS(PI-IBS)中更为常见。</p>
+<h4 id="6-遗传与饮食因素"><a class="header-anchor" href="#6-遗传与饮食因素">¶</a>6. 遗传与饮食因素</h4>
+<ul>
+<li><strong>遗传:</strong> IBS具有一定的家族聚集性,提示可能存在遗传易感性。</li>
+<li><strong>饮食:</strong> 某些食物,特别是含有高<strong>FODMAPs</strong>(可发酵的寡糖、双糖、单糖和多元醇)的食物,在小肠内难以被吸收,进入大肠后被细菌快速发酵,产生大量气体并增加肠道渗透压,从而诱发腹胀、腹痛和腹泻。</li>
+</ul>
+<h3 id="二、-肠易激综合征的药物治疗"><a class="header-anchor" href="#二、-肠易激综合征的药物治疗">¶</a>二、 肠易激综合征的药物治疗</h3>
+<blockquote>
+<p>IBS的治疗需要个体化,所有药物都应在医生指导下使用。医生应该根据具体的 IBS 亚型(腹泻型、便秘型、混合型)和主要症状来选择最合适的药物。</p>
+</blockquote>
+<h4 id="针对主要症状的药物"><a class="header-anchor" href="#针对主要症状的药物">¶</a>针对主要症状的药物</h4>
+<p><strong>1. 针对腹痛和腹胀(解痉药)</strong></p>
+<p>这类药物通过放松肠道平滑肌,缓解肠道痉挛来减轻疼痛。</p>
+<ul>
+<li><strong>匹维溴铵 (Pinaverium Bromide):</strong> 作用于肠道平滑肌的钙离子通道,选择性高,副作用较小。</li>
+<li><strong>奥替溴铵 (Otilonium Bromide):</strong> 与匹维溴铵类似,对结肠有较高的亲和力。</li>
+<li><strong>马来酸曲美布汀 (Trimebutine Maleate):</strong> 具有双向调节作用,在肠道动力过快时抑制它,过慢时促进它,对腹痛、腹泻和便秘都有一定效果。</li>
+<li><strong>薄荷油 (Peppermint Oil):</strong> 是一种天然的解痉剂,其肠溶胶囊可以有效缓解腹痛和腹胀。</li>
+</ul>
+<p><strong>2. 针对腹泻 (IBS-D)</strong></p>
+<ul>
+<li><strong>洛哌丁胺 (Loperamide):</strong> 是一种止泻药,能减慢肠道蠕动,增加水分吸收。适用于急性腹泻发作,但不宜长期连续使用。</li>
+<li><strong>蒙脱石散 (Montmorillonite Powder):</strong> 是一种肠道黏膜保护剂,能吸附肠道内的病菌和毒素,并覆盖在肠壁上形成保护层。</li>
+<li><strong>利福昔明 (Rifaximin):</strong> 一种几乎不被肠道吸收的抗生素,可以调节肠道菌群,减少有害菌和产气,对改善腹泻和腹胀有良好效果。</li>
+<li><strong>5-HT₃受体拮抗剂(如阿洛司琼 Alosetron):</strong> 能显著减缓肠道转运、减轻内脏敏感性。因可能引起严重便秘和缺血性结肠炎等副作用,使用受到严格限制,通常仅用于其他治疗无效的重度女性IBS-D患者。</li>
+<li><strong>胆汁酸螯合剂(如考来烯胺 Cholestyramine):</strong> 适用于因胆汁酸吸收不良导致的腹泻型IBS。</li>
+</ul>
+<p><strong>3. 针对便秘 (IBS-C)</strong></p>
+<ul>
+<li><strong>容积性泻药(如欧车前、聚卡波非钙):</strong> 通过吸收水分增加粪便体积,刺激肠道蠕动。使用时需饮用足量水,否则可能加重便秘。</li>
+<li><strong>渗透性泻药(如聚乙二醇 PEG、乳果糖):</strong> 通过在肠道内形成高渗环境,将水分保留在肠腔内,软化粪便,促进排便。相对安全,适合长期使用。</li>
+<li><strong>促分泌药:</strong>
+<ul>
+<li><strong>鲁比前列酮 (Lubiprostone):</strong> 激活肠道氯离子通道,增加肠液分泌,软化粪便。</li>
+<li><strong>利那洛肽 (Linaclotide)、普卡那肽 (Plecanatide):</strong> 激活鸟苷酸环化酶-C,促进肠液分泌,并能一定程度上缓解腹痛。</li>
+</ul>
+</li>
+</ul>
+<p><strong>4. 调节脑-肠轴功能的药物(精神类药物)</strong></p>
+<p>对于伴有明显焦虑、抑郁或常规治疗无效的顽固性腹痛患者,医生可能会考虑使用低剂量的抗抑郁药。</p>
+<ul>
+<li><strong>三环类抗抑郁药 (TCAs)(如阿米替林):</strong> 低剂量使用可以有效缓解IBS的慢性腹痛,其抗胆碱能作用也有助于控制腹泻。</li>
+<li><strong>选择性5-羟色胺再摄取抑制剂 (SSRIs)(如氟西汀、帕罗西汀):</strong> 可用于伴有便秘和焦虑的IBS患者。</li>
+</ul>
+<ol start="5">
+<li>益生菌 (Probiotics)</li>
+</ol>
+<p>补充特定的益生菌菌株(如某些双歧杆菌和乳酸杆菌)有助于恢复肠道微生态平衡,改善腹胀和总体症状。不同菌株效果各异,需根据产品说明和医生建议选用。</p>
+]]></content>
+ <tags>
+ <tag>Medicine</tag>
+ </tags>
+ </entry>
+ <entry>
<title>由甲醛开始的碎碎念</title>
<url>/2025/07/11/fuck-hcho/</url>
<content><![CDATA[<p>前几天和群友聊到甲醛相关的东东,有点好奇甲醛进入人体之后的一系列反应,于逝,<s>我去吸了两口</s> ,先来看看一些无聊的总结:</p>
@@ -3166,80 +3243,15 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>肠易激综合征 (IBS) 的病理学与药物治疗</title>
- <url>/2025/06/30/ibs/</url>
- <content><![CDATA[<p>肠易激综合征 (Irritable Bowel Syndrome, IBS) 是一种常见的功能性胃肠病。其核心特征是在没有发现任何器质性病变(如炎症、溃疡或肿瘤)的情况下,患者长期经历腹痛、腹胀,并伴有排便习惯的改变(腹泻、便秘或两者交替)。</p>
-<h3 id="一、-肠易激综合征的病理生理学"><a class="header-anchor" href="#一、-肠易激综合征的病理生理学">¶</a>一、 肠易激综合征的病理生理学</h3>
-<p>IBS 的病理生理机制非常复杂,并非由单一原因导致,而是多种因素相互作用的结果。目前的医学研究认为,其主要与以下几个核心机制有关:</p>
-<h4 id="1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis"><a class="header-anchor" href="#1-脑-肠轴功能紊乱-Disorders-of-the-Brain-Gut-Axis">¶</a>1. 脑-肠轴功能紊乱 (Disorders of the Brain-Gut Axis)</h4>
-<p>这是 IBS 最核心的病理机制。大脑和肠道通过神经、内分泌和免疫系统形成一个双向沟通的“脑-肠轴”。在 IBS 患者中,这个轴的功能出现紊乱。</p>
-<ul>
-<li><strong>自上而下:</strong> 心理压力、焦虑、抑郁等负面情绪可以直接通过大脑影响肠道的运动、感觉和分泌功能,从而诱发或加重症状。</li>
-<li><strong>自下而上:</strong> 肠道内的信号(如食物、气体、肠道菌群代谢产物)被过度放大后传给大脑,导致大脑对这些正常刺激产生过度反应,表现为疼痛和不适。</li>
-</ul>
-<h4 id="2-内脏高敏感性-Visceral-Hypersensitivity"><a class="header-anchor" href="#2-内脏高敏感性-Visceral-Hypersensitivity">¶</a>2. 内脏高敏感性 (Visceral Hypersensitivity)</h4>
-<p>这是指 IBS 患者的肠道对各种刺激(如食物、气体、肠壁的牵拉)异常敏感。正常人可以耐受的肠道内压力或活动,在 IBS 患者身上却会引发强烈的腹痛、急便感或不适。这种“放大”的感觉是 IBS 腹痛的主要原因。</p>
-<h4 id="3-胃肠动力异常-Altered-Gut-Motility"><a class="header-anchor" href="#3-胃肠动力异常-Altered-Gut-Motility">¶</a>3. 胃肠动力异常 (Altered Gut Motility)</h4>
-<p>肠道肌肉的收缩和舒张节律出现问题,导致食物和粪便在肠道内的转运速度异常。</p>
-<ul>
-<li><strong>转运过快:</strong> 肠道内容物过快通过结肠,水分来不及被充分吸收,导致腹泻(IBS-D)。</li>
-<li><strong>转运过慢:</strong> 肠道蠕动乏力,粪便在结肠内停留时间过长,水分被过度吸收,导致便秘(IBS-C)。</li>
-<li><strong>节律紊乱:</strong> 有时快有时慢,导致腹泻与便秘交替出现(IBS-M)。</li>
-</ul>
-<h4 id="4-肠道微生态失调-Alteration-in-Gut-Microbiota"><a class="header-anchor" href="#4-肠道微生态失调-Alteration-in-Gut-Microbiota">¶</a>4. 肠道微生态失调 (Alteration in Gut Microbiota)</h4>
-<p>IBS 患者的肠道菌群组成和功能与健康人存在差异。有害菌可能增多,有益菌(如双歧杆菌、乳酸杆菌)可能减少。这些失调的菌群会影响肠道屏障功能、产生过多气体、并激活免疫系统,导致腹胀和腹泻。</p>
-<h4 id="5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation"><a class="header-anchor" href="#5-肠道低度炎症与免疫激活-Low-Grade-Inflammation-and-Immune-Activation">¶</a>5. 肠道低度炎症与免疫激活 (Low-Grade Inflammation and Immune Activation)</h4>
-<p>部分 IBS 患者的肠道黏膜中可以观察到轻微的炎症反应,例如肥大细胞等免疫细胞数量增多并被激活。这些细胞会释放组胺、5-羟色胺等物质,直接刺激肠道神经,引起疼痛和动力异常。这种情况尤其在感染性肠炎后发生的 IBS(PI-IBS)中更为常见。</p>
-<h4 id="6-遗传与饮食因素"><a class="header-anchor" href="#6-遗传与饮食因素">¶</a>6. 遗传与饮食因素</h4>
-<ul>
-<li><strong>遗传:</strong> IBS具有一定的家族聚集性,提示可能存在遗传易感性。</li>
-<li><strong>饮食:</strong> 某些食物,特别是含有高<strong>FODMAPs</strong>(可发酵的寡糖、双糖、单糖和多元醇)的食物,在小肠内难以被吸收,进入大肠后被细菌快速发酵,产生大量气体并增加肠道渗透压,从而诱发腹胀、腹痛和腹泻。</li>
-</ul>
-<h3 id="二、-肠易激综合征的药物治疗"><a class="header-anchor" href="#二、-肠易激综合征的药物治疗">¶</a>二、 肠易激综合征的药物治疗</h3>
-<blockquote>
-<p>IBS的治疗需要个体化,所有药物都应在医生指导下使用。医生应该根据具体的 IBS 亚型(腹泻型、便秘型、混合型)和主要症状来选择最合适的药物。</p>
-</blockquote>
-<h4 id="针对主要症状的药物"><a class="header-anchor" href="#针对主要症状的药物">¶</a>针对主要症状的药物</h4>
-<p><strong>1. 针对腹痛和腹胀(解痉药)</strong></p>
-<p>这类药物通过放松肠道平滑肌,缓解肠道痉挛来减轻疼痛。</p>
-<ul>
-<li><strong>匹维溴铵 (Pinaverium Bromide):</strong> 作用于肠道平滑肌的钙离子通道,选择性高,副作用较小。</li>
-<li><strong>奥替溴铵 (Otilonium Bromide):</strong> 与匹维溴铵类似,对结肠有较高的亲和力。</li>
-<li><strong>马来酸曲美布汀 (Trimebutine Maleate):</strong> 具有双向调节作用,在肠道动力过快时抑制它,过慢时促进它,对腹痛、腹泻和便秘都有一定效果。</li>
-<li><strong>薄荷油 (Peppermint Oil):</strong> 是一种天然的解痉剂,其肠溶胶囊可以有效缓解腹痛和腹胀。</li>
-</ul>
-<p><strong>2. 针对腹泻 (IBS-D)</strong></p>
-<ul>
-<li><strong>洛哌丁胺 (Loperamide):</strong> 是一种止泻药,能减慢肠道蠕动,增加水分吸收。适用于急性腹泻发作,但不宜长期连续使用。</li>
-<li><strong>蒙脱石散 (Montmorillonite Powder):</strong> 是一种肠道黏膜保护剂,能吸附肠道内的病菌和毒素,并覆盖在肠壁上形成保护层。</li>
-<li><strong>利福昔明 (Rifaximin):</strong> 一种几乎不被肠道吸收的抗生素,可以调节肠道菌群,减少有害菌和产气,对改善腹泻和腹胀有良好效果。</li>
-<li><strong>5-HT₃受体拮抗剂(如阿洛司琼 Alosetron):</strong> 能显著减缓肠道转运、减轻内脏敏感性。因可能引起严重便秘和缺血性结肠炎等副作用,使用受到严格限制,通常仅用于其他治疗无效的重度女性IBS-D患者。</li>
-<li><strong>胆汁酸螯合剂(如考来烯胺 Cholestyramine):</strong> 适用于因胆汁酸吸收不良导致的腹泻型IBS。</li>
-</ul>
-<p><strong>3. 针对便秘 (IBS-C)</strong></p>
-<ul>
-<li><strong>容积性泻药(如欧车前、聚卡波非钙):</strong> 通过吸收水分增加粪便体积,刺激肠道蠕动。使用时需饮用足量水,否则可能加重便秘。</li>
-<li><strong>渗透性泻药(如聚乙二醇 PEG、乳果糖):</strong> 通过在肠道内形成高渗环境,将水分保留在肠腔内,软化粪便,促进排便。相对安全,适合长期使用。</li>
-<li><strong>促分泌药:</strong>
-<ul>
-<li><strong>鲁比前列酮 (Lubiprostone):</strong> 激活肠道氯离子通道,增加肠液分泌,软化粪便。</li>
-<li><strong>利那洛肽 (Linaclotide)、普卡那肽 (Plecanatide):</strong> 激活鸟苷酸环化酶-C,促进肠液分泌,并能一定程度上缓解腹痛。</li>
-</ul>
-</li>
-</ul>
-<p><strong>4. 调节脑-肠轴功能的药物(精神类药物)</strong></p>
-<p>对于伴有明显焦虑、抑郁或常规治疗无效的顽固性腹痛患者,医生可能会考虑使用低剂量的抗抑郁药。</p>
-<ul>
-<li><strong>三环类抗抑郁药 (TCAs)(如阿米替林):</strong> 低剂量使用可以有效缓解IBS的慢性腹痛,其抗胆碱能作用也有助于控制腹泻。</li>
-<li><strong>选择性5-羟色胺再摄取抑制剂 (SSRIs)(如氟西汀、帕罗西汀):</strong> 可用于伴有便秘和焦虑的IBS患者。</li>
-</ul>
-<ol start="5">
-<li>益生菌 (Probiotics)</li>
-</ol>
-<p>补充特定的益生菌菌株(如某些双歧杆菌和乳酸杆菌)有助于恢复肠道微生态平衡,改善腹胀和总体症状。不同菌株效果各异,需根据产品说明和医生建议选用。</p>
+ <title>Linux 下 AMD 显卡屏幕画面闪烁问题修复方案</title>
+ <url>/2025/04/20/linux-amd-screen-boom/</url>
+ <content><![CDATA[<p>不知道我们所说的闪烁是不是一个东西,在我的笔记本上,闪烁是指偶发的屏幕中出现部分彩色雪花。</p>
+<p>我使用 Pop!_OS,此发行版使用 EFI 启动,故而可以在 <code>/boot/efi/loader/loader.conf</code> 中加上:</p>
+<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">options quiet splash amdgpu.dcdebugmask=0x10 amdgpu.sg_display=0</span><br></pre></td></tr></table></figure>
+<p>对于其他使用 EFI 或 GRUB 启动的发行版也可以添加类似的参数尝试尝试。</p>
]]></content>
<tags>
- <tag>Medicine</tag>
+ <tag>Technique</tag>
</tags>
</entry>
<entry>
@@ -3255,18 +3267,6 @@ A relation table (also sometimes called a <em>JOIN</em>, <em>link</em> or <em>pi
</tags>
</entry>
<entry>
- <title>Linux 下 AMD 显卡屏幕画面闪烁问题修复方案</title>
- <url>/2025/04/20/linux-amd-screen-boom/</url>
- <content><![CDATA[<p>不知道我们所说的闪烁是不是一个东西,在我的笔记本上,闪烁是指偶发的屏幕中出现部分彩色雪花。</p>
-<p>我使用 Pop!_OS,此发行版使用 EFI 启动,故而可以在 <code>/boot/efi/loader/loader.conf</code> 中加上:</p>
-<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">options quiet splash amdgpu.dcdebugmask=0x10 amdgpu.sg_display=0</span><br></pre></td></tr></table></figure>
-<p>对于其他使用 EFI 或 GRUB 启动的发行版也可以添加类似的参数尝试尝试。</p>
-]]></content>
- <tags>
- <tag>Technique</tag>
- </tags>
- </entry>
- <entry>
<title>NestJS bullmq 邮件发送业务中的小 tips</title>
<url>/2025/05/07/nestjs-bullmq-mail-business/</url>
<content><![CDATA[<p>在 BullMQ(以及它在 NestJS 里包装的 <code>@Processor</code>/<code>WorkerHost</code>)里,整个生命周期大致是这样的:</p>
@@ -3784,18 +3784,6 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
- <title>二〇二三年六月二十九日</title>
- <url>/2023/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
- <content><![CDATA[<p>我能走遍大街小巷,但我走不出时间,这里有太多东西网住我了,每一个不知所措的老人家,每一个满身泥土的农民,每一只嬉戏打闹的猫狗和每一寸土地下的家人。</p>
-<p>我知道,能明确感受到,远处的风力发电机每转一圈我对这里的牵挂就更深一点,太阳每次升到我头顶都会把我的身体压进泥土里一点。</p>
-<p>夕阳下的街头空无一人,窗户间的缝隙吹来寒风,隔壁回锅肉的香味混在其中,困顿中还有美好的可能,所以别让自己太过消沉。</p>
-<p>所以别让自己太过消沉。</p>
-]]></content>
- <categories>
- <category>gallery</category>
- </categories>
- </entry>
- <entry>
<title>二〇二三年十一月二十九日</title>
<url>/2023/11/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
<content><![CDATA[<p>我们的人生,都是某座不知名的山上某片不知名的乱林里的某颗不知名姓的杂草,春带来霉湿,夏带来毒辣,秋带来阴沉,冬带来寒冰。</p>
@@ -3808,6 +3796,18 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
+ <title>二〇二三年六月二十九日</title>
+ <url>/2023/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
+ <content><![CDATA[<p>我能走遍大街小巷,但我走不出时间,这里有太多东西网住我了,每一个不知所措的老人家,每一个满身泥土的农民,每一只嬉戏打闹的猫狗和每一寸土地下的家人。</p>
+<p>我知道,能明确感受到,远处的风力发电机每转一圈我对这里的牵挂就更深一点,太阳每次升到我头顶都会把我的身体压进泥土里一点。</p>
+<p>夕阳下的街头空无一人,窗户间的缝隙吹来寒风,隔壁回锅肉的香味混在其中,困顿中还有美好的可能,所以别让自己太过消沉。</p>
+<p>所以别让自己太过消沉。</p>
+]]></content>
+ <categories>
+ <category>gallery</category>
+ </categories>
+ </entry>
+ <entry>
<title>二〇二三年十二月一日</title>
<url>/2023/12/01/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%B8%89%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E4%B8%80%E6%97%A5/</url>
<content><![CDATA[<p>我和毛毛说还记得外面的世界,记得那些披星戴月的日子。</p>
@@ -3945,6 +3945,15 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
+ <title>二〇二五年六月二十九日</title>
+ <url>/2025/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
+ <content><![CDATA[<p>我很想你们。</p>
+]]></content>
+ <categories>
+ <category>gallery</category>
+ </categories>
+ </entry>
+ <entry>
<title>二〇二五年五月十二日</title>
<url>/2025/05/12/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%BA%94%E6%9C%88%E5%8D%81%E4%BA%8C%E6%97%A5/</url>
<content><![CDATA[<p>放假前的最后一晚,侧耳听了会他们聊游戏里的内容,把水杯放在书桌上上,浅浅扬唇:“好热闹。”</p>
@@ -3972,15 +3981,6 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
- <title>二〇二五年六月二十九日</title>
- <url>/2025/06/29/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%85%AD%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
- <content><![CDATA[<p>我很想你们。</p>
-]]></content>
- <categories>
- <category>gallery</category>
- </categories>
- </entry>
- <entry>
<title>二〇二五年六月十日</title>
<url>/2025/06/10/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%85%AD%E6%9C%88%E5%8D%81%E6%97%A5/</url>
<content><![CDATA[<p>头盔塑料面罩边缘积了一圈水,沉甸甸的。</p>
@@ -4111,6 +4111,22 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
+ <title>二〇二五年十月十九日</title>
+ <url>/2025/10/19/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E6%9C%88%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
+ <content><![CDATA[<p>漫天光雨里,白色编织绳正死死勒着小狗发胀的脖颈,上周他们追上门时,他在混乱中失手系上了死结。</p>
+<p>“对不起…”</p>
+<p>“对不起啊…”</p>
+<p>一遍遍呢喃,泪水在脸上结成透明的冰壳。新年的钟声穿过街巷抵达这里时,他发现怀里抱着的不过是条破毯子。</p>
+<p>烟花熄灭后的黑暗从四面八方涌来。远处人家的暖光透过窗棂,在积雪上切割出方方正正的金色牢笼。</p>
+<p>他蜷缩在冰冷的水泥台上,看着自己的影子被月光钉死在斑驳的广告牌上。</p>
+<p>&quot;除夕快乐。&quot;他对广告牌上褪色的月饼海报说。海报里笑得喜庆的孩子嘴角开裂,被寒风吹起一角。</p>
+<p>雪落满了他的睫毛。</p>
+]]></content>
+ <categories>
+ <category>gallery</category>
+ </categories>
+ </entry>
+ <entry>
<title>二〇二五年十月三十日</title>
<url>/2025/10/30/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E6%9C%88%E4%B8%89%E5%8D%81%E6%97%A5/</url>
<content><![CDATA[<p>那是一个无云、风也很小的傍晚。天光从浅到深慢慢往你这边退,像有人慢慢把你从白昼里抱出来。街角的花店门口站着一只猫,它看着路过的车,耳朵偶尔动一下。屋檐下有风铃,轻轻的,叮的一声,时间像也跟着响了一下。</p>
@@ -4129,22 +4145,6 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
- <title>二〇二五年十月十九日</title>
- <url>/2025/10/19/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E5%8D%81%E6%9C%88%E5%8D%81%E4%B9%9D%E6%97%A5/</url>
- <content><![CDATA[<p>漫天光雨里,白色编织绳正死死勒着小狗发胀的脖颈,上周他们追上门时,他在混乱中失手系上了死结。</p>
-<p>“对不起…”</p>
-<p>“对不起啊…”</p>
-<p>一遍遍呢喃,泪水在脸上结成透明的冰壳。新年的钟声穿过街巷抵达这里时,他发现怀里抱着的不过是条破毯子。</p>
-<p>烟花熄灭后的黑暗从四面八方涌来。远处人家的暖光透过窗棂,在积雪上切割出方方正正的金色牢笼。</p>
-<p>他蜷缩在冰冷的水泥台上,看着自己的影子被月光钉死在斑驳的广告牌上。</p>
-<p>&quot;除夕快乐。&quot;他对广告牌上褪色的月饼海报说。海报里笑得喜庆的孩子嘴角开裂,被寒风吹起一角。</p>
-<p>雪落满了他的睫毛。</p>
-]]></content>
- <categories>
- <category>gallery</category>
- </categories>
- </entry>
- <entry>
<title>二〇二六年四月二十一日</title>
<url>/2026/04/21/%E4%BA%8C%E3%80%87%E4%BA%8C%E5%85%AD%E5%B9%B4%E5%9B%9B%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/</url>
<content><![CDATA[<p>我记得你走的那年是暖冬,当时我查过天气预报, 那几天甚至出了太阳,阳光落在老屋的天井里,把墙角那些盆栽照得发亮。村里老人说这是好兆头,暖冬养人。结果你没熬过那个年。</p>
@@ -4635,18 +4635,18 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</categories>
</entry>
<entry>
- <title>二零二二年八月二十一日</title>
- <url>/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/</url>
- <content><![CDATA[<p>不管是什么样的生活,都只是为了让自己满意,我这样活着,没什么不满的,我很痛快。这世上所有东西,我留意它时,它就存在,不留意时,它就是虚无。幸运的是我留意的事物很少,不致于身心劳碌一生奔忙。岁月会锤炼我一副丰满的灵魂和清瘦的欲望。</p>
+ <title>二零二二年十一月月三日</title>
+ <url>/2022/11/03/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E6%9C%88%E4%B8%89%E6%97%A5/</url>
+ <content><![CDATA[<p>我独自冒着冷风,去薄霜铺地的林子里,为听鸟语,为盼朝阳,为寻泥土里渐次苏醒的花草,但春信不至。我是如此单独而完整,在无数个夜晚,独自顶着冷风 伫立在老橘树下的桥头,只为听一曲夜莺的哀歌,倚暖了石栏上的青苔,青苔凉透了我的心坎,但夜莺不来,夜莺不来。</p>
]]></content>
<categories>
<category>gallery</category>
</categories>
</entry>
<entry>
- <title>二零二二年十一月月三日</title>
- <url>/2022/11/03/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%8D%81%E4%B8%80%E6%9C%88%E6%9C%88%E4%B8%89%E6%97%A5/</url>
- <content><![CDATA[<p>我独自冒着冷风,去薄霜铺地的林子里,为听鸟语,为盼朝阳,为寻泥土里渐次苏醒的花草,但春信不至。我是如此单独而完整,在无数个夜晚,独自顶着冷风 伫立在老橘树下的桥头,只为听一曲夜莺的哀歌,倚暖了石栏上的青苔,青苔凉透了我的心坎,但夜莺不来,夜莺不来。</p>
+ <title>二零二二年八月二十一日</title>
+ <url>/2022/08/21/%E4%BA%8C%E9%9B%B6%E4%BA%8C%E4%BA%8C%E5%B9%B4%E5%85%AB%E6%9C%88%E4%BA%8C%E5%8D%81%E4%B8%80%E6%97%A5/</url>
+ <content><![CDATA[<p>不管是什么样的生活,都只是为了让自己满意,我这样活着,没什么不满的,我很痛快。这世上所有东西,我留意它时,它就存在,不留意时,它就是虚无。幸运的是我留意的事物很少,不致于身心劳碌一生奔忙。岁月会锤炼我一副丰满的灵魂和清瘦的欲望。</p>
]]></content>
<categories>
<category>gallery</category>
@@ -4739,18 +4739,17 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
<entry>
<title>体质指数与血脂异常的年龄依赖性关联:患病率轨迹与因果效应修饰</title>
<url>/2026/08/15/%E4%BD%93%E8%B4%A8%E6%8C%87%E6%95%B0%E4%B8%8E%E8%A1%80%E8%84%82%E5%BC%82%E5%B8%B8%E7%9A%84%E5%B9%B4%E9%BE%84%E4%BE%9D%E8%B5%96%E6%80%A7%E5%85%B3%E8%81%94/</url>
- <content><![CDATA[<p>"胖的人血脂容易高"大概是体检报告时代最深入人心的常识之一。这句话在人群层面确实成立:BMI 与血脂异常之间存在明确的剂量-反应关系,且因果性获得了孟德尔随机化研究的支持<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。但常识往往在加上"年龄"这个维度后变得复杂起来——同样的 BMI,在不同年龄段对血脂的影响并不相同,甚至可能反转。</p>
-<h2 id="患病率-一条倒-U-形的年龄轨迹"><a class="header-anchor" href="#患病率-一条倒-U-形的年龄轨迹">¶</a>患病率:一条倒 U 形的年龄轨迹</h2>
-<p>先看年龄本身。中国成人血脂异常患病率随年龄递增,但进入老年期后趋势反转:</p>
+ <content><![CDATA[<p>"胖的人血脂容易高"大概是体检报告时代最深入人心的常识之一。这句话在人群层面确实成立:BMI 与血脂异常之间存在明确的剂量-反应关系,因果性也获得了孟德尔随机化研究的支持<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。但常识加上"年龄"这个维度后就变得复杂——同样的 BMI,在不同年龄段对血脂的影响并不相同,甚至可能反转。</p>
+<h2 id="患病率:一条倒-U-形的年龄轨迹"><a class="header-anchor" href="#患病率:一条倒-U-形的年龄轨迹">¶</a>患病率:一条倒 U 形的年龄轨迹</h2>
+<p>先看年龄本身。中国成人血脂异常患病率随年龄递增,进入老年期后趋势反转:</p>
<ul>
-<li>四川三县横断面(11 561 人):18–44 岁 20.6% → 45–59 岁 29.8% → ≥60 岁 32.9%<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
-<li>中国老年人 Meta 分析(19 项横断面、101 831 人):60–69 岁 39.9% 达峰,70–79 岁降至 31.8%,≥80 岁 31.4%<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
+<li>四川三县横断面(11 561 人):18–44 岁 20.6% → 45–59 岁 29.8% → ≥60 岁 32.9%<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
+<li>中国老年人 Meta 分析(19 项横断面、101 831 人):60–69 岁 39.9% 达峰,70–79 岁降至 31.8%,≥80 岁 31.4%<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
</ul>
-<p>两条独立数据链拼出同一形态:成年期线性攀升、60 岁前后达峰、高龄回落。</p>
+<p>两条独立数据链拼出同一形态:成年期线性攀升、60 岁前后达峰、高龄回落。两个口径的老年组数值差异(32.9% vs 39.9%)源于地区差异与纳入研究年代,方向一致。全国 2018 年高胆固醇血症年龄标化患病率较 2015 年近乎翻倍(4.9% → 8.2%),"高 TC"型是近期增长最快的亚型,且集中于中老年<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>。</p>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%A1%80%E8%84%82%E6%82%A3%E7%97%85%E7%8E%87%E5%B9%B4%E9%BE%84%E8%BD%A8%E8%BF%B9.png" alt="中国成人血脂异常患病率的年龄轨迹"></p>
-<p>两个口径的老年组数值差异(32.9% vs 39.9%)源于地区差异与纳入研究年代,方向一致。全国 2018 年高胆固醇血症年龄标化患病率较 2015 年近乎翻倍(4.9% → 8.2%),"高 TC"型是近期增长最快的亚型,且集中于中老年<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>。</p>
-<h2 id="关键反转-BMI-对血脂的因果效应随龄衰减"><a class="header-anchor" href="#关键反转-BMI-对血脂的因果效应随龄衰减">¶</a>关键反转:BMI 对血脂的因果效应随龄衰减</h2>
-<p>Fall 2015 的孟德尔随机化研究用 32 个 BMI 相关遗传位点做工具变量,按 &lt;55 岁与 ≥55 岁分层,给出了一个反直觉的结果<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>:</p>
+<h2 id="关键反转:BMI-对血脂的因果效应随龄衰减"><a class="header-anchor" href="#关键反转:BMI-对血脂的因果效应随龄衰减">¶</a>关键反转:BMI 对血脂的因果效应随龄衰减</h2>
+<p>Fall 2015 的孟德尔随机化研究用 32 个 BMI 相关遗传位点做工具变量,按 &lt;55 岁与 ≥55 岁分层,给出一个出人意料的结果<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>:</p>
<table>
<thead>
<tr>
@@ -4787,37 +4786,33 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
</tr>
</tbody>
</table>
-<p>效应量单位:每 1 SD BMI(约 4.8 kg/m²)对应的血脂 SD 变化。</p>
+<p>效应量单位:每 1 SD BMI(约 4.8 kg/m²)对应的血脂 SD 变化。</p>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/BMI%E8%A1%80%E8%84%82%E5%9B%A0%E6%9E%9C%E6%95%88%E5%BA%94%E5%B9%B4%E9%BE%84%E5%88%86%E5%B1%82.png" alt="BMI→血脂组分的孟德尔随机化因果效应:<55 岁 vs ≥55 岁"></p>
-<p>解读要点:</p>
+<p>解读要点:</p>
<ol>
-<li><strong>胆固醇组分(LDL-C、总胆固醇)的 BMI 因果效应在 ≥55 岁后消失甚至反转</strong>——年龄越大,同样程度的体重增加带来的胆固醇恶化越弱;</li>
-<li><strong>TG 与 HDL-C 的效应保留但减弱</strong>——"肥胖驱动的高 TG + 低 HDL"表型不随龄消失,这是老年期体重管理仍然重要的依据;</li>
-<li>≥55 岁总胆固醇因果效应为负(−0.19)不代表"老年肥胖保护胆固醇",更可能是他汀使用、选择偏倚与反向因果的残留混杂<sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5:1]</a></sup>。</li>
+<li><strong>胆固醇组分(LDL-C、总胆固醇)的 BMI 因果效应在 ≥55 岁后消失甚至反转</strong>——年龄越大,同样程度的体重增加带来的胆固醇恶化越弱;</li>
+<li><strong>TG 与 HDL-C 的效应保留但减弱</strong>——"肥胖驱动的高 TG + 低 HDL"表型不随龄消失,这是老年期体重管理仍然重要的依据;</li>
+<li>≥55 岁总胆固醇因果效应为负(−0.19)不代表"老年肥胖保护胆固醇",更可能是他汀使用、选择偏倚与反向因果的残留混杂<sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5:1]</a></sup>。</li>
</ol>
-<p>观察性分析与之一致:&lt;55 岁 LDL-C 每 SD BMI +0.16、TC +0.12,≥55 岁分别降至 +0.02 与 0.00(均不显著)<sup class="footnote-ref"><a href="#fn5" id="fnref5:2">[5:2]</a></sup>。</p>
-<h2 id="筛检效能-老年期腰围胜过-BMI"><a class="header-anchor" href="#筛检效能-老年期腰围胜过-BMI">¶</a>筛检效能:老年期腰围胜过 BMI</h2>
-<p>BMI 判别血脂异常的效能也随龄衰减。NHANES 1999–2020 共 58 712 人:BMI 与腰高比对高血压、血脂异常、糖尿病的判别性能随年龄递增而下降,老年人中关联呈 J 形并在较高肥胖水平进入平台<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>。韩国 2022–2023 国民健康调查 8 900 人比较 7 个肥胖指标,所有指标判别力在 50 岁后下降,腰高比与身体圆度指数在年轻与中年成人中最优<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
-<p>英国生物库 368 274 人另显示方向性差异:LDL-C 与冠心病的关联随龄递减(HR 从 &lt;50 岁的 1.35 降至 ≥65 岁的 1.08),而 <strong>BMI 与冠心病的关联不随龄衰减</strong>(各年龄组 HR 1.11–1.15)<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>——老年期"BMI 影响健康结局"的通道部分绕过血脂,但不能因此认为老年肥胖无害。</p>
-<h2 id="性别×年龄-绝经是隐藏的转折点"><a class="header-anchor" href="#性别×年龄-绝经是隐藏的转折点">¶</a>性别×年龄:绝经是隐藏的转折点</h2>
-<p>山西农村 26 378 人(45–69 岁)显示:女性 TC、TG、LDL-C 患病率随年龄上升,男性则平稳甚至下降;女性各类血脂异常患病率均高于男性,仅低 HDL-C 为男性更高<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。老年人 Meta 分析同向:女性血脂异常总患病率 48.8% 高于男性 39.5%,高 TC 24.0% vs 12.9%<sup class="footnote-ref"><a href="#fn3" id="fnref3:1">[3:1]</a></sup>。</p>
-<p>机制上绝经是关键节点——雌激素下降导致 LDL 清除减慢、内脏脂肪增加,女性血脂在围绝经期陡升,形成"老年女性患病率反超男性"的交叉<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
+<p>观察性分析与之一致:&lt;55 岁 LDL-C 每 SD BMI +0.16、TC +0.12,≥55 岁分别降至 +0.02 与 0.00(均不显著)<sup class="footnote-ref"><a href="#fn5" id="fnref5:2">[5:2]</a></sup>。</p>
+<h2 id="筛检效能:老年期腰围胜过-BMI"><a class="header-anchor" href="#筛检效能:老年期腰围胜过-BMI">¶</a>筛检效能:老年期腰围胜过 BMI</h2>
+<p>BMI 判别血脂异常的效能也随龄衰减。NHANES 1999–2020 共 58 712 人:BMI 与腰高比对高血压、血脂异常、糖尿病的判别性能随年龄递增而下降,老年人中关联呈 J 形并在较高肥胖水平进入平台<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>。韩国 2022–2023 国民健康调查 8 900 人比较 7 个肥胖指标,所有指标判别力在 50 岁后下降,腰高比与身体圆度指数在年轻与中年成人中最优<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
+<p>英国生物库 368 274 人另显示方向性差异:LDL-C 与冠心病的关联随龄递减(HR 从 &lt;50 岁的 1.35 降至 ≥65 岁的 1.08),而 <strong>BMI 与冠心病的关联不随龄衰减</strong>(各年龄组 HR 1.11–1.15)<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>——老年期"BMI 影响健康结局"的通道部分绕过血脂,但不能因此认为老年肥胖无害。</p>
+<h2 id="性别×年龄:绝经是隐藏的转折点"><a class="header-anchor" href="#性别×年龄:绝经是隐藏的转折点">¶</a>性别×年龄:绝经是隐藏的转折点</h2>
+<p>山西农村 26 378 人(45–69 岁)显示:女性 TC、TG、LDL-C 患病率随年龄上升,男性则平稳甚至下降;女性各类血脂异常患病率均高于男性,仅低 HDL-C 为男性更高<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。老年人 Meta 分析同向:女性血脂异常总患病率 48.8% 高于男性 39.5%,高 TC 24.0% vs 12.9%<sup class="footnote-ref"><a href="#fn3" id="fnref3:1">[3:1]</a></sup>。</p>
+<p>机制上绝经是关键节点——雌激素下降导致 LDL 清除减慢、内脏脂肪增加,女性血脂在围绝经期陡升,形成"老年女性患病率反超男性"的交叉<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
<h2 id="为什么老年期关联会衰减"><a class="header-anchor" href="#为什么老年期关联会衰减">¶</a>为什么老年期关联会衰减</h2>
+<p>四类机制叠加,很难拆开。其一是体成分重组:中老年期肌肉量下降、内脏脂肪随龄增加,BMI 可以不变而代谢风险上升——中国 45–90 岁体检人群肌少性肥胖患病率 8.4%,系统性炎症指数每升高 1 SD,肌少性肥胖 OR 在中年 1.69、老年 2.52<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>。其二是健康选择效应:血脂异常与心血管病高风险者更早死亡或已接受降脂治疗,存活到高龄的人群"未被治疗的血脂异常"比例自然下降<sup class="footnote-ref"><a href="#fn5" id="fnref5:3">[5:3]</a></sup>。其三是治疗混杂:他汀等降脂药在老年人群使用率更高,压低实测血脂水平<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>。其四是遗传异质性的年龄表达:BMI–血脂的局部遗传相关位点存在保护性变异,年龄越大,非 BMI 因素在血脂水平中的占比越高<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>。</p>
+<h2 id="对筛查和临床的落地含义"><a class="header-anchor" href="#对筛查和临床的落地含义">¶</a>对筛查和临床的落地含义</h2>
<ul>
-<li><strong>体成分重组</strong>:中老年期肌肉量下降、内脏脂肪随龄增加,BMI 可以不变而代谢风险上升;中国 45–90 岁体检人群肌少性肥胖患病率 8.4%,系统性炎症指数每升高 1 SD,肌少性肥胖 OR 在中年 1.69、老年 2.52<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>;</li>
-<li><strong>健康选择效应</strong>:血脂异常与心血管病高风险者更早死亡或已接受降脂治疗,存活到高龄的人群"未被治疗的血脂异常"比例自然下降<sup class="footnote-ref"><a href="#fn5" id="fnref5:3">[5:3]</a></sup>;</li>
-<li><strong>治疗混杂</strong>:他汀等降脂药在老年人群使用率更高,压低实测血脂水平<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>;</li>
-<li><strong>遗传异质性的年龄表达</strong>:BMI–血脂的局部遗传相关位点存在保护性变异,年龄越大,非 BMI 因素(基因、年龄本身)在血脂水平中的占比越高<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>。</li>
+<li><strong>45–59 岁是 BMI 筛选血脂异常效率最高的窗口</strong>——中青年肥胖者应优先筛查;</li>
+<li><strong>60 岁以上别拿"BMI 正常"排除血脂异常</strong>——联合腰围/腰高比,必要时直接测血脂;</li>
+<li><strong>绝经后女性无论 BMI 都是高概率人群</strong>——老年女性高 TC/TG 型比例高,老年男性低 HDL-C 型比例高;</li>
+<li><strong>老年 BMI 对血脂效应弱 ≠ 减重无益</strong>——TG/HDL 通道保留,且 BMI–冠心病关联不随龄衰减<sup class="footnote-ref"><a href="#fn8" id="fnref8:1">[8:1]</a></sup>;</li>
+<li>以降脂为终点的临床试验应预设年龄分层分析:中青年入组者预期 TG 变化幅度大于老年入组者,≥55 岁受试者的 LDL-C 终点对 BMI 干预不敏感,应以 TG/HDL-C 或非 HDL-C 为主<sup class="footnote-ref"><a href="#fn5" id="fnref5:4">[5:4]</a></sup>。</li>
</ul>
-<h2 id="对筛查和临床的落地含义"><a class="header-anchor" href="#对筛查和临床的落地含义">¶</a>对筛查和临床的落地含义</h2>
-<ol>
-<li><strong>45–59 岁是 BMI 筛选血脂异常效率最高的窗口</strong>——中青年肥胖者应优先筛查;</li>
-<li><strong>60 岁以上别拿"BMI 正常"排除血脂异常</strong>——联合腰围/腰高比,必要时直接测血脂;</li>
-<li><strong>绝经后女性无论 BMI 都是高概率人群</strong>——老年女性高 TC/TG 型比例高,老年男性低 HDL-C 型比例高;</li>
-<li><strong>老年 BMI 对血脂效应弱 ≠ 减重无益</strong>——TG/HDL 通道保留,且 BMI–冠心病关联不随龄衰减<sup class="footnote-ref"><a href="#fn8" id="fnref8:1">[8:1]</a></sup>;</li>
-<li>以降脂为终点的临床试验应预设年龄分层分析:中青年入组者预期 TG 变化幅度大于老年入组者,≥55 岁受试者的 LDL-C 终点对 BMI 干预不敏感,应以 TG/HDL-C 或非 HDL-C 为主<sup class="footnote-ref"><a href="#fn5" id="fnref5:4">[5:4]</a></sup>。</li>
-</ol>
-<p>一个值得记住的总结:<strong>BMI 与血脂的关联是真实的、因果的,但它是一条会随年龄衰减的关联——患病率在 60 岁前后达峰后回落,BMI 对胆固醇的因果效应在 55 岁后消失甚至反转,而 TG/HDL 通道和心血管保护效应保留。年龄不是简单的混杂,而是这条关联的修饰者。</strong></p>
+<h2 id="结论"><a class="header-anchor" href="#结论">¶</a>结论</h2>
+<p>BMI 与血脂的关联是真实的、因果的,但它是一条会随年龄衰减的关联:患病率在 60 岁前后达峰后回落,BMI 对胆固醇的因果效应在 55 岁后消失甚至反转,而 TG/HDL 通道和心血管保护效应保留。年龄不是简单的混杂,而是这条关联的修饰者——筛查策略和临床试验设计都应把年龄写进参数,而不是事后分层。</p>
<hr>
<h2 id="参考文献"><a class="header-anchor" href="#参考文献">¶</a>参考文献</h2>
<hr class="footnotes-sep">
@@ -7134,50 +7129,50 @@ NestJS 依赖其底层 HTTP 适配器(默认为 Express)来解析传入的�
<entry>
<title>血清胆红素水平与冠心病风险:从抗氧化机制到遗传流行病学的证据综述</title>
<url>/2026/08/15/%E8%A1%80%E6%B8%85%E8%83%86%E7%BA%A2%E7%B4%A0%E6%B0%B4%E5%B9%B3%E4%B8%8E%E5%86%A0%E5%BF%83%E7%97%85%E9%A3%8E%E9%99%A9/</url>
- <content><![CDATA[<p>体检报告上"间接胆红素轻度升高"是一个很常见的发现。多数时候医生会说"没事,可能是吉尔伯特综合征",但网上流传着另一种说法:胆红素高的人心脏更好,因为胆红素是强效抗氧化剂。这个说法从 1987 年一篇《Science》论文开始,经历了从机制、临床观察到大型遗传学研究的完整验证,最后得到的结论比想象中复杂得多——它部分成立,但"升高胆红素能保护心脏"这个因果命题,在目前最强的证据里并不成立。</p>
-<h2 id="起点-1987-年-胆红素被重新定义"><a class="header-anchor" href="#起点-1987-年-胆红素被重新定义">¶</a>起点:1987 年,胆红素被重新定义</h2>
-<p>在 1987 年之前,胆红素在医学教科书里的身份是血红素分解的"有毒废料"——新生儿黄疸、肝病黄疸的主角。加州大学伯克利分校的 Stocker 和 Ames 团队首次证明:未结合(间接)胆红素其实是一种极其强效的脂溶性抗氧化剂<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。</p>
-<ul>
-<li>在生理组织氧浓度(2% 氧)下,胆红素抑制脂质过氧化的效率<strong>超过 α-生育酚(维生素 E)</strong>——后者当时被认为是脂质过氧化最强的内源性抗氧化剂;</li>
-<li>1 分子白蛋白结合型胆红素可清除约 2 分子过氧自由基,血液中正常存在的少量胆红素足以保护白蛋白结合脂肪酸不被氧化<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
-<li>反应机理是氢原子转移(HAT):供氢基团是四吡咯结构两端二吡咯酮环的 N-H 键,动力学实测 1 分子胆红素可清除约 2 分子过氧自由基<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
-</ul>
-<p>此后四十年的生化研究不断补充机制:胆红素与 α-生育酚构成协同抗氧化网络(添加胆红素可使维生素 E 的消耗停止)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>;生理浓度胆红素可清除氯胺并抑制髓过氧化物酶(MPO)诱导的蛋白和脂质氧化<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>;2020 年后又发现胆红素是 PPAR-α 的选择性内源性配体,能重塑白色脂肪组织代谢,因此被称为"黄色激素"(the yellow hormone)<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup><sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
-<p>但抗氧化并非无限度:细胞实验显示,细胞内未结合胆红素蓄积超过约 25 ng/mg 蛋白后,从抗氧化转为<strong>促氧化并产生细胞毒性</strong><sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>——这为"为什么只有轻度升高有益"提供了分子解释。</p>
-<h2 id="临床观察-低胆红素与冠心病风险"><a class="header-anchor" href="#临床观察-低胆红素与冠心病风险">¶</a>临床观察:低胆红素与冠心病风险</h2>
-<p>机制研究之后,临床流行病学接棒。1994 年 Schwertner 等在血管造影确诊的冠心病男性队列中首次发现:ln(总胆红素)与冠脉疾病严重程度独立负相关,总胆红素下降 50%,处于更严重冠脉疾病分级的几率增加 47%,关联强度"与收缩压相当"<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。</p>
-<p>2002 年,查尔斯大学 Vítek 团队做了一个更直接的人群对照:50 例 40 岁以上的吉尔伯特综合征患者 vs 2296 例一般人群,吉尔伯特组缺血性心脏病患病率仅 <strong>2%</strong>,对照组 <strong>12.1%</strong>(P&lt;0.05),且吉尔伯特组血清总抗氧化能力显著更高<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
-<p>2006 年弗雷明汉心脏研究把证据推到基因层面:按 UGT1A1*28 基因型(吉尔伯特综合征的遗传基础,人群频率约 11%)分层,7/7 纯合子携带者心血管疾病风险 HR = 0.36(95% CI 0.18–0.74),冠心病 HR = 0.30<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>。这组数据至今仍被广泛引用。</p>
-<p>后续荟萃分析确认了方向:每升高 1 个标准差胆红素,心血管风险约降 7%–10%<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>;生理范围内胆红素升高使首次心梗长期风险降 22%(RR 0.78)<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>;卒中风险最高 vs 最低组 RR = 0.85<sup class="footnote-ref"><a href="#fn14" id="fnref14">[14]</a></sup>。他汀人群 13 万人数据显示 L 形关联:与 10 μmol/L 相比,5 μmol/L 者心血管事件 +18%、心梗 +34%<sup class="footnote-ref"><a href="#fn15" id="fnref15">[15]</a></sup>。</p>
-<p>不过观察性证据有两个长期被忽视的软肋:一是<strong>吸烟混杂</strong>——吸烟者 42% 处于胆红素最低四分位,戒烟后胆红素回升,"低胆红素 + 高心血管风险"有一部分是吸烟驱动的<sup class="footnote-ref"><a href="#fn16" id="fnref16">[16]</a></sup>;二是<strong>性别差异</strong>——阳性证据大多来自男性,女性中关联弱或不显著<sup class="footnote-ref"><a href="#fn17" id="fnref17">[17]</a></sup><sup class="footnote-ref"><a href="#fn18" id="fnref18">[18]</a></sup>。</p>
-<h2 id="分水岭-孟德尔随机化给出否定答案"><a class="header-anchor" href="#分水岭-孟德尔随机化给出否定答案">¶</a>分水岭:孟德尔随机化给出否定答案</h2>
-<p>观察性关联无法区分因果与混杂。孟德尔随机化(MR)利用"基因型在受精时随机分配"这一自然实验,绕开吸烟、饮酒、生活方式等混杂,是检验因果性的最强观察设计。这个领域在 2013 年和 2023 年迎来了两次大型否定:</p>
-<p><strong>哥本哈根三队列 MR(2013)</strong>:43,708 人测胆红素,67,068 人基因分型,含 11,686 例缺血性心脏病事件。观察性分析中胆红素最高三分位 HR = 0.86,但多因素校正后衰减为 0.93(不显著);而基因型分析(TT vs GG,胆红素升高约 95%)对缺血性心脏病的 OR = 1.03,完全无效。加上既往 8 项研究的荟萃:OR = 1.01(0.88–1.16)。结论原文:<strong>“血浆胆红素与缺血性心脏病风险无因果关联”</strong><sup class="footnote-ref"><a href="#fn19" id="fnref19">[19]</a></sup>。</p>
-<p><strong>UK Biobank + FinnGen(2023)</strong>:46.3 万人基因分型 + 42.9 万人复现。观察性层面,高胆红素与总体健康、心梗、胆固醇等广泛结局强负相关;但遗传学层面,这些负相关在吉尔伯特基因型人群中<strong>全部未复现</strong>——基因预测的胆红素仅与胆道/肝脏病理显著相关(胆结石 OR = 1.16,P = 5.7×10⁻¹⁶)。结论原文:<strong>“遗传学分析提示胆红素对心血管疾病、慢阻肺及其他关键结局无因果保护作用”</strong><sup class="footnote-ref"><a href="#fn20" id="fnref20">[20]</a></sup>。</p>
-<p>这两项研究分别代表欧洲最大样本和全球最大样本,事件数都足以检出真实效应。阴性结果的解释力很强:如果"胆红素保护心脏"的因果效应真实存在,这些设计理应能够发现。</p>
+ <content><![CDATA[<p>体检报告上"间接胆红素轻度升高"很常见。多数时候医生会说没事,可能是吉尔伯特综合征。网上却流传另一种说法:胆红素高的人心脏更好,因为胆红素是强效抗氧化剂。这个说法从 1987 年一篇《Science》论文开始,经历了从机制、临床观察到大型遗传学研究的完整验证,得到的结论比想象中复杂——它部分成立,但"升高胆红素能保护心脏"这个因果命题,在目前最强的证据里并不成立。</p>
+<h2 id="1987-年:胆红素被重新定义"><a class="header-anchor" href="#1987-年:胆红素被重新定义">¶</a>1987 年:胆红素被重新定义</h2>
+<p>1987 年之前,胆红素在教科书里的身份是血红素分解的"有毒废料"——新生儿黄疸、肝病黄疸的主角。加州大学伯克利分校的 Stocker 和 Ames 团队首次证明:未结合胆红素是一种极其强效的脂溶性抗氧化剂<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>。</p>
+<ul>
+<li>在生理组织氧浓度(2%)下,胆红素抑制脂质过氧化的效率超过 α-生育酚(维生素 E),后者当时被认为是脂质过氧化最强的内源性抗氧化剂;</li>
+<li>1 分子白蛋白结合型胆红素可清除约 2 分子过氧自由基,血液中正常存在的少量胆红素足以保护白蛋白结合脂肪酸不被氧化<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>;</li>
+<li>反应机理是氢原子转移:供氢基团是四吡咯结构两端二吡咯酮环的 N-H 键,动力学实测 1 分子胆红素可清除约 2 分子过氧自由基<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>。</li>
+</ul>
+<p>此后四十年的生化研究不断补全机制。胆红素与 α-生育酚构成协同抗氧化网络,添加胆红素可使维生素 E 的消耗停止<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>;生理浓度胆红素可清除氯胺并抑制髓过氧化物酶诱导的蛋白和脂质氧化<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>;2020 年后又发现胆红素是 PPAR-α 的选择性内源性配体,能重塑白色脂肪组织代谢,因此被称作"黄色激素"<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup><sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>。</p>
+<p>抗氧化并非无限度。细胞实验显示,细胞内未结合胆红素蓄积超过约 25 ng/mg 蛋白后,抗氧化转为促氧化并产生细胞毒性<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>。这解释了为什么只有轻度升高有益。</p>
+<h2 id="临床观察:低胆红素与冠心病风险相关"><a class="header-anchor" href="#临床观察:低胆红素与冠心病风险相关">¶</a>临床观察:低胆红素与冠心病风险相关</h2>
+<p>1994 年,Schwertner 等人在血管造影确诊的冠心病男性队列中发现:ln(总胆红素)与冠脉疾病严重程度独立负相关。总胆红素下降 50%,处于更严重冠脉疾病分级的几率增加 47%,关联强度"与收缩压相当"<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup>。</p>
+<p>2002 年,查尔斯大学 Vítek 团队做了更直接的人群对照:50 例 40 岁以上的吉尔伯特综合征患者 vs 2296 例一般人群,吉尔伯特组缺血性心脏病患病率仅 2%,对照组 12.1%(P&lt;0.05),且吉尔伯特组血清总抗氧化能力显著更高<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>。</p>
+<p>2006 年弗雷明汉心脏研究把证据推到基因层面:按 UGT1A1*28 基因型(吉尔伯特综合征的遗传基础,人群频率约 11%)分层,7/7 纯合子携带者心血管疾病风险 HR = 0.36(95% CI 0.18–0.74),冠心病 HR = 0.30<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup>。这组数据至今仍被广泛引用。</p>
+<p>后续荟萃分析确认了方向:每升高 1 个标准差胆红素,心血管风险约降 7%–10%<sup class="footnote-ref"><a href="#fn12" id="fnref12">[12]</a></sup>;生理范围内胆红素升高使首次心梗长期风险降 22%(RR 0.78)<sup class="footnote-ref"><a href="#fn13" id="fnref13">[13]</a></sup>;卒中风险最高 vs 最低组 RR = 0.85<sup class="footnote-ref"><a href="#fn14" id="fnref14">[14]</a></sup>。他汀人群 13 万人数据显示 L 形关联:与 10 μmol/L 相比,5 μmol/L 者心血管事件 +18%、心梗 +34%<sup class="footnote-ref"><a href="#fn15" id="fnref15">[15]</a></sup>。</p>
+<p>观察性证据有两个长期被忽视的软肋。一是吸烟混杂——吸烟者 42% 处于胆红素最低四分位,戒烟后胆红素回升,"低胆红素 + 高心血管风险"有一部分是吸烟驱动的<sup class="footnote-ref"><a href="#fn16" id="fnref16">[16]</a></sup>。二是性别差异——阳性证据大多来自男性,女性中关联弱或不显著<sup class="footnote-ref"><a href="#fn17" id="fnref17">[17]</a></sup><sup class="footnote-ref"><a href="#fn18" id="fnref18">[18]</a></sup>。</p>
+<h2 id="分水岭:孟德尔随机化给出否定答案"><a class="header-anchor" href="#分水岭:孟德尔随机化给出否定答案">¶</a>分水岭:孟德尔随机化给出否定答案</h2>
+<p>观察性关联无法区分因果与混杂。孟德尔随机化(MR)利用"基因型在受精时随机分配"这一自然实验,绕开吸烟、饮酒、生活方式等混杂,是检验因果性的最强观察设计。这个领域在 2013 年和 2023 年迎来了两次大型否定。</p>
+<p><strong>哥本哈根三队列 MR(2013)</strong>:43,708 人测胆红素,67,068 人基因分型,含 11,686 例缺血性心脏病事件。观察性分析中胆红素最高三分位 HR = 0.86,但多因素校正后衰减为 0.93(不显著);基因型分析(TT vs GG,胆红素升高约 95%)对缺血性心脏病的 OR = 1.03,完全无效。加上既往 8 项研究的荟萃:OR = 1.01(0.88–1.16)。结论原文:“血浆胆红素与缺血性心脏病风险无因果关联”<sup class="footnote-ref"><a href="#fn19" id="fnref19">[19]</a></sup>。</p>
+<p><strong>UK Biobank + FinnGen(2023)</strong>:46.3 万人基因分型,42.9 万人复现。观察性层面,高胆红素与总体健康、心梗、胆固醇等广泛结局强负相关;遗传学层面,这些负相关在吉尔伯特基因型人群中全部未复现——基因预测的胆红素仅与胆道/肝脏病理显著相关(胆结石 OR = 1.16,P = 5.7×10⁻¹⁶)。结论原文:“遗传学分析提示胆红素对心血管疾病、慢阻肺及其他关键结局无因果保护作用”<sup class="footnote-ref"><a href="#fn20" id="fnref20">[20]</a></sup>。</p>
+<p>这两项研究分别代表欧洲最大样本和全球最大样本,事件数都足以检出真实效应。如果"胆红素保护心脏"的因果效应真实存在,这些设计理应能够发现。</p>
<h2 id="但事情没有完全结束"><a class="header-anchor" href="#但事情没有完全结束">¶</a>但事情没有完全结束</h2>
-<p>欧洲的否定不等于全部。亚洲和非洲人群的部分 MR 研究给出了阳性信号:</p>
+<p>欧洲的否定不等于全部。亚洲和非洲人群的部分 MR 研究给出了阳性信号:</p>
<ul>
-<li><strong>韩/日人群多变量 MR(2024)</strong>:间接胆红素对缺血性卒中 OR = 0.76,但共定位分析未找到共享因果变异,阳性需谨慎<sup class="footnote-ref"><a href="#fn21" id="fnref21">[21]</a></sup>;</li>
-<li><strong>非裔人群 MR(2021)</strong>:胆红素对高血压呈因果保护(β = −0.76)<sup class="footnote-ref"><a href="#fn22" id="fnref22">[22]</a></sup>;</li>
-<li><strong>中国汉族</strong>:上海 2380 例冠脉造影人群,UGT1A1 rs887829 隐性模型与男性冠心病显著负相关(OR = 0.24)<sup class="footnote-ref"><a href="#fn23" id="fnref23">[23]</a></sup>;东风-同济队列 2 型糖尿病患者中,间接胆红素 Q4 vs Q1 的冠心病 HR = 0.74<sup class="footnote-ref"><a href="#fn24" id="fnref24">[24]</a></sup>。</li>
+<li><strong>韩/日人群多变量 MR(2024)</strong>:间接胆红素对缺血性卒中 OR = 0.76,但共定位分析未找到共享因果变异,阳性需谨慎<sup class="footnote-ref"><a href="#fn21" id="fnref21">[21]</a></sup>;</li>
+<li><strong>非裔人群 MR(2021)</strong>:胆红素对高血压呈因果保护(β = −0.76)<sup class="footnote-ref"><a href="#fn22" id="fnref22">[22]</a></sup>;</li>
+<li><strong>中国汉族</strong>:上海 2380 例冠脉造影人群,UGT1A1 rs887829 隐性模型与男性冠心病显著负相关(OR = 0.24)<sup class="footnote-ref"><a href="#fn23" id="fnref23">[23]</a></sup>;东风-同济队列 2 型糖尿病患者中,间接胆红素 Q4 vs Q1 的冠心病 HR = 0.74<sup class="footnote-ref"><a href="#fn24" id="fnref24">[24]</a></sup>。</li>
</ul>
-<p>另外 2023 年《Circulation Research》的动物-人联合研究显示,胆红素缺乏小鼠的动脉粥样硬化斑块更不稳定(纤维帽变薄、斑块内出血),人冠脉斑块中血红素代谢上调——机制层面的保护证据仍在积累<sup class="footnote-ref"><a href="#fn25" id="fnref25">[25]</a></sup>。</p>
-<p>而<strong>胆结石</strong>是唯一在基因型与结局层面完全一致的因果证据:61,212 人前瞻队列 + MR,胆红素最高十分位症状性胆结石 HR = 1.57,TT 纯合基因型 HR = 1.22,存在剂量-反应<sup class="footnote-ref"><a href="#fn26" id="fnref26">[26]</a></sup>。</p>
+<p>2023 年《Circulation Research》的动物-人联合研究显示,胆红素缺乏小鼠的动脉粥样硬化斑块更不稳定(纤维帽变薄、斑块内出血),人冠脉斑块中血红素代谢上调——机制层面的保护证据仍在积累<sup class="footnote-ref"><a href="#fn25" id="fnref25">[25]</a></sup>。</p>
+<p>而胆结石是唯一在基因型与结局层面完全一致的因果证据:61,212 人前瞻队列 + MR,胆红素最高十分位症状性胆结石 HR = 1.57,TT 纯合基因型 HR = 1.22,存在剂量-反应<sup class="footnote-ref"><a href="#fn26" id="fnref26">[26]</a></sup>。</p>
<h2 id="几个反直觉的细节"><a class="header-anchor" href="#几个反直觉的细节">¶</a>几个反直觉的细节</h2>
<ul>
-<li><strong>剂量-反应是 U 形,不是越多越好</strong>:12 项前瞻研究荟萃显示风险最低点约在 17–20 μmol/L,过低过高都不利<sup class="footnote-ref"><a href="#fn27" id="fnref27">[27]</a></sup>;</li>
-<li><strong>急性期方向反转</strong>:心梗或卒中急性期,高胆红素反而预示更差预后——急性期胆红素升高反映氧化应激负荷,是"损伤标记"而非保护因子。保护作用是长期慢性暴露的属性<sup class="footnote-ref"><a href="#fn13" id="fnref13:1">[13:1]</a></sup><sup class="footnote-ref"><a href="#fn28" id="fnref28">[28]</a></sup>;</li>
-<li><strong>组分之争</strong>:不同研究中间接(未结合)与直接(结合)胆红素方向可能相反<sup class="footnote-ref"><a href="#fn29" id="fnref29">[29]</a></sup>;</li>
-<li><strong>预测价值有限</strong>:加入胆红素后风险模型的 C 指数仅提升 0.0013(P=0.13),没有临床意义的预测增益<sup class="footnote-ref"><a href="#fn12" id="fnref12:1">[12:1]</a></sup>。</li>
+<li><strong>剂量-反应是 U 形,不是越多越好</strong>:12 项前瞻研究荟萃显示风险最低点约在 17–20 μmol/L,过低过高都不利<sup class="footnote-ref"><a href="#fn27" id="fnref27">[27]</a></sup>;</li>
+<li><strong>急性期方向反转</strong>:心梗或卒中急性期,高胆红素反而预示更差预后——急性期胆红素升高反映氧化应激负荷,是"损伤标记"而非保护因子。保护作用是长期慢性暴露的属性<sup class="footnote-ref"><a href="#fn13" id="fnref13:1">[13:1]</a></sup><sup class="footnote-ref"><a href="#fn28" id="fnref28">[28]</a></sup>;</li>
+<li><strong>组分之争</strong>:不同研究中间接与直接胆红素方向可能相反<sup class="footnote-ref"><a href="#fn29" id="fnref29">[29]</a></sup>;</li>
+<li><strong>预测价值有限</strong>:加入胆红素后风险模型的 C 指数仅提升 0.0013(P=0.13),没有临床意义的预测增益<sup class="footnote-ref"><a href="#fn12" id="fnref12:1">[12:1]</a></sup>。</li>
</ul>
-<h2 id="结论-一个准确的说法"><a class="header-anchor" href="#结论-一个准确的说法">¶</a>结论:一个准确的说法</h2>
-<p>把四十年的证据放在一起,最准确的表述是:</p>
+<h2 id="结论"><a class="header-anchor" href="#结论">¶</a>结论</h2>
+<p>四十年的证据放在一起,最准确的表述是:</p>
<blockquote>
-<p><strong>生理性轻度高胆红素血症(吉尔伯特综合征)是心血管风险的独立反向生物标志物,具有真实而复杂的抗氧化、抗炎与代谢活性;但"胆红素因果性地保护心脏"在欧洲人群最强设计中未获支持,不能作为临床干预的依据。</strong></p>
+<p><strong>生理性轻度高胆红素血症(吉尔伯特综合征)是心血管风险的独立反向生物标志物,具有真实而复杂的抗氧化、抗炎与代谢活性;但"胆红素因果性地保护心脏"在欧洲人群最强设计中未获支持,不能作为临床干预的依据。</strong></p>
</blockquote>
-<p>对个体而言,体检发现孤立性间接胆红素轻度升高(排除溶血与肝病后)应视为良性状态——既不必因此放松标准的心血管风险管理(血压、血脂、吸烟、运动),也不应被当作"心脏有保护"的免死金牌。对用药而言,吉尔伯特综合征患者使用 UGT1A1 底物药物(如伊立替康)需关注暴露增加。</p>
-<p>一个常被误读的细节值得记住:2006 年弗雷明汉那篇著名的 HR = 0.36 是<strong>基因型-结局关联研究</strong>,不是孟德尔随机化;真正的 MR 检验直到 2013 年才由哥本哈根团队完成,而它给出的是否定答案。这个领域的发展轨迹——从乐观叙事到大型否定、再到人群异质性的复杂图景——本身就是流行病学方法学进步的一个标本。</p>
+<p>对个体而言,体检发现孤立性间接胆红素轻度升高(排除溶血与肝病后)应视为良性状态——既不必因此放松标准的心血管风险管理(血压、血脂、吸烟、运动),也不应被当作"心脏有保护"的免死金牌。对用药而言,吉尔伯特综合征患者使用 UGT1A1 底物药物(如伊立替康)需关注暴露增加。</p>
+<p>一个常被误读的细节值得记住:2006 年弗雷明汉那篇著名的 HR = 0.36 是基因型-结局关联研究,不是孟德尔随机化;真正的 MR 检验直到 2013 年才由哥本哈根团队完成,而它给出的是否定答案。这个领域的发展轨迹——从乐观叙事到大型否定、再到人群异质性的复杂图景——本身就是流行病学方法学进步的一个标本。</p>
<hr>
<h2 id="参考文献"><a class="header-anchor" href="#参考文献">¶</a>参考文献</h2>
<p><img src="/img/%E5%8C%BB%E5%AD%A6/%E8%83%86%E7%BA%A2%E7%B4%A0%E8%AF%81%E6%8D%AE%E6%A3%AE%E6%9E%97%E5%9B%BE.png" alt="胆红素水平与心血管结局:观察性 vs 遗传学证据的关键效应量"></p>