<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>Martian148</title><description>Stay hungry, stay foolish</description><link>https://astro-pure.js.org</link><item><title>【单词笔记】2026.7.19</title><link>https://astro-pure.js.org/blog/english-word-2026-7-19</link><guid isPermaLink="true">https://astro-pure.js.org/blog/english-word-2026-7-19</guid><description>【单词笔记】2026.7.19</description><pubDate>Sun, 19 Jul 2026 10:10:00 GMT</pubDate><content:encoded>&lt;p&gt;conquer  spur  hire  derive   exception  response  responsible  cooperation  erupt  breach  deliberately    intuitive  evaporate  feat  rectify  obstruct  renaissance  versus  shove  monopoly  hardship  hazard  affection  vanity  fatal  imitation  settlement  faulty  contend  converge  conversely  convict  mercy   resolute  abide  insult&lt;/p&gt;
&lt;h4&gt;spur&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/image-20260719101323113.png&quot; alt=&quot;image-20260719101323113&quot;&gt;&lt;/p&gt;
&lt;h4&gt;derive&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/image-20260719100851876.png&quot; alt=&quot;image-20260719100851876&quot;&gt;&lt;/p&gt;
&lt;h4&gt;breach&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719094218640.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;evaporate&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719094514850.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;versus&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719094938249.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;hardship&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719095250603.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;hazard&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719095515764.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;vanity&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719095732539.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;fatal&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719100040255.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;faulty&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/20260719100417997.png&quot; alt=&quot;image.png&quot;&gt;&lt;/p&gt;
&lt;h4&gt;contend&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/image-20260719101132633.png&quot; alt=&quot;image-20260719101132633&quot;&gt;&lt;/p&gt;
&lt;h4&gt;resolute&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/image-20260719101624640.png&quot; alt=&quot;image-20260719101624640&quot;&gt;&lt;/p&gt;
&lt;h4&gt;abide&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/image-20260719101849786.png&quot; alt=&quot;image-20260719101849786&quot;&gt;&lt;/p&gt;
&lt;h4&gt;insult&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://pic-1301573324.cos.ap-chengdu.myqcloud.com/image-20260719102340391.png&quot; alt=&quot;image-20260719102340391&quot;&gt;&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>大二总结</title><link>https://astro-pure.js.org/blog/sophomore-year-summary</link><guid isPermaLink="true">https://astro-pure.js.org/blog/sophomore-year-summary</guid><description>大二阶段的学习及生活阶段性总结</description><pubDate>Sat, 04 Jul 2026 22:52:00 GMT</pubDate><content:encoded>&lt;p&gt;大三开学的第一周，找了一段时间，静下心来写大二的总结&lt;/p&gt;
&lt;p&gt;大二上学期，可以说是我 ICPC 生涯的冲刺期，在网络赛之前，我的 cf 上了1900，第二场网络赛也是成功出线区域赛，后面从 9月开始到第一场杭州的 11 月，一直在 vp 历年的ICPC和CCPC区域赛，每周两场的频率，然后每周安排 1900-2200 的 cf 题五道，这段时间几乎所有课余时间都用在写题和补题上了，几乎每场的 cf 和 at 都打，然后补题写题解。感觉自己的水平也提高了不少。&lt;/p&gt;
&lt;p&gt;2025年11月10日，杭州区域赛，因为我们是单核队伍，我签完到之后被卡在笛卡尔树，没有拿到奖牌，回来了之后挺心灰意冷的，但是还要准备三个月后的昆明区域赛，还是咬咬牙坚持下来。&lt;/p&gt;
&lt;p&gt;2025年12年1日，昆明区域赛，又因为我的原因卡计算几何签到，又打铁了，其实以我们的实力正常发挥是能拿到一个铜牌的，但是因为我卡题了，dlh 也卡题，就翻车了。&lt;/p&gt;
&lt;p&gt;昆明赛后其实挺难受的，主要是自责，如果自己正常发挥其实不至于没有牌子，我还有机会再打一年了，但是 dlh 和 fq 都要准备实习的事情了，新大一还没有成长起来。赛后还剪了一个视频 “樱花泪” 作为一个小纪录片，发在 B 站上还引起了很多共鸣。&lt;/p&gt;
&lt;p&gt;我本以为我的 ICPC 之旅到这里就结束了，没想到还有后续&lt;/p&gt;
&lt;p&gt;后面就期末考试了，期末前我又生病了，回家里那边做了一个手术，害得考试都没得考，在家里躺了一个半月回到学校，我发现我并不是一个在家里呆的住的人，我需要一个相对独立的环境，这样才能进入自己的学习工作状态&lt;/p&gt;
&lt;p&gt;大二的那个寒假基本都在养病，学习进度为 0&lt;/p&gt;
&lt;p&gt;大二下学期的主基调就是：迷茫，当时 ICPC 也没什么比赛可打了，然后开始看公开课，当时 DLH 和我一样迷茫，计算机的方向太多了，现在留给我们的试错机会不多了，我们需要尽快找到适合自己的方向，当时摆在我前面的有这几条路，后端，前端，体系结构，人工智能，OI教培，我分析了之后，尝试了最简单的前端，然后同时开始学习 UCB 的 CS61C，由于学校课程的很多，CS61C 推进得比较慢，我还做了详细的笔记发布在我的博客上，每个 Lab 都做得比较艰难 3-5 月，我只完成了 Lab 1-3，u1s1，国外的课程质量真的高，非常感谢 cswiki，感受到尽量缩小信息差是双非大学生的自救之路&lt;/p&gt;
&lt;p&gt;前端方向学习的速度还可以，从 3-6 月我通过看 MDN 网站，还有 youtube 找视频学习了 HTML，CSS，JavaScript 前端三件套和一个前端框架 Vue，后面没什么时间就没有做一个实战项目，然后开始投简历找暑假实习，其实现在回过头来觉得自己有点随波逐流了，并没有想好自己到底想要的是什么，看到网上一些言论，卷大二实习（不过也有好处后面讲hhh）&lt;/p&gt;
&lt;p&gt;期间上半年的邀请赛还是以着玩玩的心态去比了几场，我重组了樱花泪，把 FQ 换成了大二的选手 ZY，带着残血版的樱花泪去了西安邀请赛，最后封榜后开出一道图论，拿到了学校第一块 ICPC 金牌，也算圆梦了，后面的南昌区域赛，我们6天5城，一路玩过去的，比赛的时候一个组合没有做出来遗憾拿铜，四川省赛，DLH 从 西安坐车回来打，非常可惜，差了 80 罚时就拿金了，总的来说这个赛季打每场比赛其实该做的题都做出来了，也许是大赛经验了，我们确乎越来越稳定了。&lt;/p&gt;
&lt;p&gt;大二下我还意识到了，其实“向内了解自身”，不仅仅是提升所谓的 “硬实力”，还有“软实力”。所以整个大二上，我尝试搭建自己的“时间管理体系”和“知识体系“，我尝试了许多款管理工具，从番茄计时，到目标地图，看了一些时间管理方法，找到最适合我的，我不太喜欢把自己规定很死，先做什么，后做什么，于是试着去记录做了什么，只给自己一个大方向，只需要在 DDL 之前把该干的事情干完了，至于今天这个任务推进多少，另外的任务推进了多少，取决于有没有进心流。每天晚上睡觉前记录一下今天做了什么，这是一个很重要的过程，能回顾今天做了多少的同时，还能起到小复盘的作用。我加了一个叫了输出分享群，里面的一个基本理论就是 “输出”，我每周写一个小总结，每个学期写一个大总结。“其实不需要走的很快，有时停下来看看走过的路也是挺好的”。知识体系方面我习惯把小笔记丢 Obsidian，写完整的笔记丢到博客上，随想和摘抄丢到 flomo 里面，现在这个工作流已经成为了自己的习惯。&lt;/p&gt;
&lt;p&gt;大二的暑假我进入杭州一家中场进行前端实习，每天干一些 dirty work，这个公司还是内网开发，我的 mentor 还不太管我，就导致我比较闲，看到同事们做的做的工作也是比较重复的，例如修改样式，表单验证等等。在杭州这段时间，我会面了几个朋友，深刻思考了几个问题：我适合在这样的中小公司嘛？我本科如何才能进大厂？如果能进大厂，能胜任什么岗位？大厂真的好吗，我的身体真的能承受大厂的工作强度嘛？在杭州这段时间，也算弥补了我没有在杭州读书的遗憾，5点半准时下班，每个周末都拿着相机往西湖跑，我喜欢这种有着自己时间的生活，我能干很多属于自己的事情，例如拍照，练琴，健身，尽管少一些钱，是我大学以来的第一次思想转变，大厂并不是版本答案，应该具体情况具体分析。&lt;/p&gt;
&lt;p&gt;在5月1号的时候，和 hhy 吃了一次饭，和我聊到科研的事情，我一直放在心上，大二下学期末的时候由于种种原因搁置了，暑假我在上班的间隙通过 B站 也算正式入门了科研，我发现这是我喜欢做的，去阅读论文，看往人的想法，复现代码，思考别人的问题尝试改进。还记得高中的我在作文结尾写下的“When I embark the next of chapter, I will clime the peak of science.” 虽然我知道科研也是格外枯燥的，但从小培养的毅力能让我坚持下去。我选择和 hhy 一样的方向 NLP，在暑假学习读完了鱼书，学习了预训练语言模型的发展史，Word2Vec，RNN，LSTM 的基本思想，还学习了 Transformer 架构，开学前学习 pytorch，跑了几个项目，也算刚刚入门科研了，由于 AI 方向的就业是硕士起步的，所以考研成为了我的唯一选择，这段时间我想起了很多事情，之前和高中的金总在实验室一遍一遍做实验，晚上机器坏了熬夜修车，等等，让我明白，这是我该走的路，纵使考研是我刚入大学最不想走的路，但是现在不得不走了，因为学校没有保研名额。&lt;/p&gt;
&lt;p&gt;在大二暑假末快开学的时候，我组织了 ACM 集训队的第二次集训，主要是针对大一的，发现他们的积极性并不高，我大一的时候集训了 大约 30天，中午12点晚上9点，没有缺勤，他们的缺勤率达到了一半左右，让我深深感到弱校搞 ACM 是搞不起来的，我们终究只是昙花一现。&lt;/p&gt;
&lt;p&gt;整个大二的迷茫期过去了之后我大致上明白了后面的方向，大三上尽力出一篇论文，同时全力补齐短板英语，从 12 月开始备战考研。同时我也会及时更新我的总结。&lt;/p&gt;
&lt;p&gt;同时，我也意识到，CS 的学习不是我生活的全部，人生还有其他板块，例如人际交往，兴趣爱好，还有自己的身体健康，新的一个学期，在打通主线的同时，要分一定时间去打支线任务。&lt;/p&gt;
&lt;p&gt;主线任务：完成论文，保持一个好的身体，英语达到雅思6.5的水平，公开课
支线任务：摄影水平达到可以看的水平hhh，练琴，ICPC&lt;/p&gt;
&lt;p&gt;我将遵循 Open and open again 的原则，继续保持输出，保持分享。学历是起点之锚，非人生彼岸，各位双非的朋友们，共勉。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>【算法题解】AND-array</title><link>https://astro-pure.js.org/blog/xcpc-solution-and-array</link><guid isPermaLink="true">https://astro-pure.js.org/blog/xcpc-solution-and-array</guid><description>Codeforces 2211D 题解：已知所有 k-长子序列按位与之和 mod 1e9+7，按位拆解后用组合数还原原数组。</description><pubDate>Fri, 03 Jul 2026 23:33:00 GMT</pubDate><content:encoded>&lt;h4&gt;Question&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://codeforces.com/contest/2211/problem/D&quot;&gt;CF2211D AND-array&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;对于一个长度为 $n$ 的序列 $a$，我们定义其 AND 数组 $f(a)$ 如下：&lt;/p&gt;
&lt;p&gt;$$
f(a)&lt;em&gt;k = \sum\limits&lt;/em&gt;{1 \le i_1 \lt i_2 \lt \ldots \lt i_k \le n} a_{i_1} &amp;#x26; a_{i_2} &amp;#x26; \ldots &amp;#x26; a_{i_k}
$$&lt;/p&gt;
&lt;p&gt;换句话说，$f(a)_k$ 是对序列 $a$ 中所有长度为 $k$ 的子序列的元素按位与的和。&lt;/p&gt;
&lt;p&gt;序列 $a$ 对你而言是未知的。但你被提供了一个长度为 $n$ 的序列 $b$，满足对所有 $1 \le i \le n$，都有 $b_i \equiv f(a)_i \pmod{10^9 + 7}$。你的任务是基于给定的序列 $b$ 还原序列 $a$。&lt;/p&gt;
&lt;p&gt;$$
1\le n\le 10^5, 0\le b_i\le 10^9+7,0\le a_i&amp;#x3C;2^{29}
$$&lt;/p&gt;
&lt;h4&gt;Solution&lt;/h4&gt;
&lt;p&gt;我们设二进制的第 $p$ 位在数组 $a$ 中出现了 $c_p$ 次，那么对于一个长度为 $k$ 的子序列，它的 AND 在第 $p$ 位为 $1$ 的选法有&lt;/p&gt;
&lt;p&gt;$$
\binom{c_p}{k}
$$&lt;/p&gt;
&lt;p&gt;种，所以第 $p$ 位对 $f(a)_k$ 的贡献就是&lt;/p&gt;
&lt;p&gt;$$
2^{p} \cdot\binom{c_{p}}{k}
$$&lt;/p&gt;
&lt;p&gt;于是&lt;/p&gt;
&lt;p&gt;$$
b_{k} \equiv f(a)&lt;em&gt;{k} \equiv \sum&lt;/em&gt;{p=0}^{28} 2^{p}\binom{c_{p}}{k} \quad\left(\bmod 10^{9}+7\right)
$$&lt;/p&gt;
&lt;p&gt;这就是整题的本质。&lt;/p&gt;
&lt;p&gt;现在我们要把每个 $c_p$ 求出来&lt;/p&gt;
&lt;p&gt;倒着枚举 $k = n, n-1, \ldots, 1$。&lt;/p&gt;
&lt;p&gt;因为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果 $c_p &amp;#x3C; k$，那么 $\binom{c_p}{k} = 0$&lt;/li&gt;
&lt;li&gt;如果 $c_p = k$，那么 $\binom{c_p}{k} = 1$&lt;/li&gt;
&lt;li&gt;如果 $c_p &gt; k$，那么它的贡献可以用之前已经知道的 $c_p$ 算出来&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以对当前 $k$，先把所有 $c_p &gt; k$ 的贡献减掉：&lt;/p&gt;
&lt;p&gt;$$
x_k = b_k - \sum_{c_p &gt; k} 2^p \binom{c_p}{k} \quad (\bmod\ MOD)
$$&lt;/p&gt;
&lt;p&gt;那么剩下的就是：&lt;/p&gt;
&lt;p&gt;$$
x_k = \sum_{c_p = k} 2^p
$$&lt;/p&gt;
&lt;p&gt;于是我们看 $x_k$ 的哪一位为 $1$ 就代表这一位对应的 $c_p=k$&lt;/p&gt;
&lt;p&gt;现在我们得到了 $c_p$ 要构造数组，暴力能放就放就好了&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-cpp&quot;&gt;#include &amp;#x3C;bits/stdc++.h&gt;
using namespace std;
using ll = long long;
const ll MOD = 1e9 + 7;
const int MAXN = 1e5 + 5;
ll Fac[MAXN], InvFac[MAXN];

ll pow(ll a, ll b) {
    ll res = 1;
    while (b) {
        if (b &amp;#x26; 1) res = res * a % MOD;
        a = a * a % MOD;
        b &gt;&gt;= 1;
    }
    return res;
}

void init() {
    Fac[0] = 1;
    for (int i = 1; i &amp;#x3C; MAXN; i++) Fac[i] = Fac[i - 1] * i % MOD;
    InvFac[MAXN - 1] = pow(Fac[MAXN - 1], MOD - 2);
    for (int i = MAXN - 2; i &gt;= 0; i--) InvFac[i] = InvFac[i + 1] * (i + 1) % MOD;
}

ll C(int n, int m) {
    if (m &gt; n || m &amp;#x3C; 0) return 0;
    return Fac[n] * InvFac[m] % MOD * InvFac[n - m] % MOD;
}

void solve() {
    int n; cin &gt;&gt; n;
    vector&amp;#x3C;ll&gt; b(n + 1);
    vector&amp;#x3C;ll&gt; cnt(29, 0);
    for (int i = 1; i &amp;#x3C;= n; i++) cin &gt;&gt; b[i];
    for (int k = n; k &gt;= 1; k--) {
        ll val = b[k];
        for (int j = 0; j &amp;#x3C; 29; j++) {
            val -= (1LL &amp;#x3C;&amp;#x3C; j) * C(cnt[j], k) % MOD;
            val = (val % MOD + MOD) % MOD;
        }

        for (int j = 0; j &amp;#x3C; 29; j++) 
            if (val &gt;&gt; j &amp;#x26; 1) {
                cnt[j] = k;
            }
    }

    vector&amp;#x3C;ll&gt; a(n + 1);
    for (int i = n; i &gt;= 1; i--) {
        for (int j = 0; j &amp;#x3C; 29; j++) {
            if (cnt[j] &gt; 0) a[i] += 1LL &amp;#x3C;&amp;#x3C; j, cnt[j]--;
        }
    }
    

    for (int i = 1; i &amp;#x3C;= n; i++) cout &amp;#x3C;&amp;#x3C; a[i] &amp;#x3C;&amp;#x3C; &quot; \n&quot;[i == n];
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    init();
    int t; cin &gt;&gt; t;
    while (t--) solve();
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>如何发布一篇博客</title><link>https://astro-pure.js.org/blog/how-to-publish-a-blog</link><guid isPermaLink="true">https://astro-pure.js.org/blog/how-to-publish-a-blog</guid><description>记录在这个 Astro 个人网站中，从写作到发布一篇博客的完整流程。</description><pubDate>Fri, 03 Jul 2026 20:30:00 GMT</pubDate><content:encoded>&lt;h2&gt;写在前面&lt;/h2&gt;
&lt;p&gt;这个网站的博客文章放在 &lt;code&gt;src/content/blog/&lt;/code&gt; 目录下。每一篇文章本质上都是一个 Markdown 文件，写好内容之后，网站会自动把它渲染成博客页面。&lt;/p&gt;
&lt;p&gt;如果文章不需要图片，只创建一个 &lt;code&gt;.md&lt;/code&gt; 文件就可以；如果文章需要配图或其他资源，可以创建一个同名文件夹，把文章写在里面的 &lt;code&gt;index.md&lt;/code&gt; 中。&lt;/p&gt;
&lt;h2&gt;创建文章&lt;/h2&gt;
&lt;p&gt;最简单的方式是在 &lt;code&gt;src/content/blog/&lt;/code&gt; 下面新建一个 Markdown 文件，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;src/content/blog/my-new-blog.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文件名会影响文章链接。比如这个文件最终会生成类似这样的路径：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;/blog/my-new-blog
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你希望链接更清晰，可以用英文短横线命名，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;how-to-learn-llm.md
reading-notes-transformer.md
my-first-project.md
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;编写 Frontmatter&lt;/h2&gt;
&lt;p&gt;每篇博客开头都需要写一段配置，叫做 Frontmatter。它用来描述文章标题、发布时间、摘要、标签等信息。&lt;/p&gt;
&lt;p&gt;一个基本模板如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;---
title: 我的新博客
publishDate: 2026-07-03 20:00:00
description: &apos;这是一篇文章摘要，会出现在博客列表或搜索结果中。&apos;
tags:
  - blog
  - life
language: &apos;中文&apos;
draft: false
comment: false
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;常用字段含义：&lt;/p&gt;
&lt;p&gt;| 字段 | 作用 |
| --- | --- |
| &lt;code&gt;title&lt;/code&gt; | 文章标题 |
| &lt;code&gt;publishDate&lt;/code&gt; | 发布时间 |
| &lt;code&gt;description&lt;/code&gt; | 文章简介 |
| &lt;code&gt;tags&lt;/code&gt; | 文章标签 |
| &lt;code&gt;language&lt;/code&gt; | 文章语言 |
| &lt;code&gt;draft&lt;/code&gt; | 是否为草稿 |
| &lt;code&gt;comment&lt;/code&gt; | 是否开启评论 |&lt;/p&gt;
&lt;p&gt;如果 &lt;code&gt;draft: true&lt;/code&gt;，这篇文章通常不会作为正式文章发布。写完准备公开时，把它改成：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;draft: false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果暂时不想开启评论，可以写：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;comment: false
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;编写正文&lt;/h2&gt;
&lt;p&gt;Frontmatter 下面就是正文。正文使用 Markdown 语法，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;## 第一节标题

这里写正文内容。

### 小标题

- 列表项一
- 列表项二

```ts
console.log(&apos;Hello, blog!&apos;)
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;写博客时可以先把内容分成几个部分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;这篇文章想解决什么问题&lt;/li&gt;
&lt;li&gt;背景是什么&lt;/li&gt;
&lt;li&gt;具体过程是什么&lt;/li&gt;
&lt;li&gt;自己有什么理解或总结&lt;/li&gt;
&lt;li&gt;以后还想继续探索什么&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样文章会更清楚，也更容易坚持写下去。&lt;/p&gt;
&lt;h2&gt;预览文章&lt;/h2&gt;
&lt;p&gt;本地启动开发服务：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bun dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后打开：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;http://localhost:4321/blog
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果文章已经显示在博客列表中，说明它被网站识别到了。点击文章标题，就可以进入详情页预览排版。&lt;/p&gt;
&lt;p&gt;如果没有显示，可以检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文件是否放在 &lt;code&gt;src/content/blog/&lt;/code&gt; 下&lt;/li&gt;
&lt;li&gt;Frontmatter 有没有语法错误&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft&lt;/code&gt; 是否被设置成了 &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文件扩展名是不是 &lt;code&gt;.md&lt;/code&gt; 或 &lt;code&gt;.mdx&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;发布到线上&lt;/h2&gt;
&lt;p&gt;本地确认没有问题后，先运行一次构建：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bun run build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果构建通过，就可以提交代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git add .
git commit -m &quot;Add new blog post&quot;
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;推送到 GitHub 后，Vercel 会自动重新部署网站。部署完成后，线上博客页面就会出现这篇新文章。&lt;/p&gt;
&lt;h2&gt;一个建议&lt;/h2&gt;
&lt;p&gt;刚开始写博客时，不必追求每篇都很完整。可以先把博客当作自己的学习记录：今天学到了什么，遇到了什么问题，最后怎么解决的。&lt;/p&gt;
&lt;p&gt;长期来看，这些零散记录会慢慢连成一条线。它会记录你如何理解技术，也会记录你如何理解自己。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>我的第一篇博客</title><link>https://astro-pure.js.org/blog/my-frist-blog</link><guid isPermaLink="true">https://astro-pure.js.org/blog/my-frist-blog</guid><description>记录一下这个个人网站的第一篇文章。</description><pubDate>Fri, 03 Jul 2026 20:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;开始&lt;/h2&gt;
&lt;p&gt;这是我的第一篇博客。&lt;/p&gt;
&lt;p&gt;测试博客&lt;/p&gt;
&lt;h1&gt;H1&lt;/h1&gt;
&lt;h2&gt;H2&lt;/h2&gt;
&lt;h3&gt;H3&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;无序列表&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;有序列表&lt;/li&gt;
&lt;/ol&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item></channel></rss>