<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh_CN">
  <title>随风录</title>
  <subtitle>LC&apos;s Blog</subtitle>
  <link href="https://lickoc.site/" rel="alternate" type="text/html"/>
  <link href="https://lickoc.site/atom.xml" rel="self" type="application/atom+xml"/>
  <id>https://lickoc.site/</id>
  <updated>2026-09-14T00:00:00.000Z</updated>
  <entry>
    <title>C++ 学习路线</title>
    <link href="https://lickoc.site/posts/cpp-learning-roadmap/" rel="alternate" type="text/html"/>
    <id>https://lickoc.site/posts/cpp-learning-roadmap/</id>
    <published>2026-09-14T00:00:00.000Z</published>
    <updated>2026-09-14T00:00:00.000Z</updated>
    <summary>一份从零到进阶的 C++ 学习路线：语法基础、面向对象、标准库、现代 C++、工程实践与进阶方向，附分阶段目标与书籍资源推荐。</summary>
    <content type="html"><![CDATA[<blockquote>
<p><strong>声明</strong>：本文由 AI（DeepSeek）生成，用于测试博客发布流程，内容仅供参考，请结合自身情况取舍。</p>
</blockquote>
<p>C++ 是一门「入门容易、精通极难」的语言。它的学习曲线陡峭，但如果路线规划得当，可以少走很多弯路。本文按阶段梳理一条相对完整的学习路线。</p>
<h2>阶段划分总览</h2>
<table>
<thead>
<tr>
<th>阶段</th>
<th>目标</th>
<th>大致周期</th>
</tr>
</thead>
<tbody>
<tr>
<td>一、语法基础</td>
<td>能写能跑，理解编译链接</td>
<td>1–2 个月</td>
</tr>
<tr>
<td>二、面向对象</td>
<td>掌握封装、继承、多态</td>
<td>1–2 个月</td>
</tr>
<tr>
<td>三、标准库与泛型</td>
<td>熟练使用 STL，理解模板</td>
<td>2–3 个月</td>
</tr>
<tr>
<td>四、现代 C++</td>
<td>掌握 C++11/14/17/20 核心特性</td>
<td>2–3 个月</td>
</tr>
<tr>
<td>五、工程与底层</td>
<td>构建、调试、内存与性能</td>
<td>长期</td>
</tr>
<tr>
<td>六、方向深入</td>
<td>后端 / 游戏 / 嵌入式 / 基础架构</td>
<td>长期</td>
</tr>
</tbody>
</table>
<h2>阶段一：语法基础</h2>
<p>先让代码跑起来，再谈风格和优化。</p>
<ul>
<li>开发环境：Linux + GCC/Clang，或 VS Code + CMake，或 Visual Studio</li>
<li>基本语法：变量、类型、运算符、流程控制、函数、数组、指针与引用</li>
<li>编译链接：预处理 → 编译 → 汇编 → 链接，理解头文件与源文件的组织</li>
<li>内存模型初步：栈、堆、<code>new</code>/<code>delete</code></li>
</ul>
<p><strong>本阶段目标</strong>：独立写出几百行的小程序，遇到编译错误能自己读懂报错信息。</p>
<p>:::tip
不要一上来就啃《C++ Primer》的全部内容。先快速过一遍语法，把书当字典用，遇到问题再回头查。
:::</p>
<h2>阶段二：面向对象</h2>
<ul>
<li>类与对象、构造/析构函数、拷贝控制</li>
<li>封装、继承、多态、虚函数与虚函数表</li>
<li>运算符重载、友元</li>
<li>RAII 思想：资源获取即初始化</li>
</ul>
<p><strong>关键理解</strong>：虚函数表如何实现多态、为什么要虚析构、对象切片问题。</p>
<h2>阶段三：标准库与泛型编程</h2>
<ul>
<li>容器：<code>vector</code>、<code>list</code>、<code>deque</code>、<code>map</code>、<code>unordered_map</code>、<code>set</code></li>
<li>迭代器与算法：<code>&lt;algorithm&gt;</code> 中的 <code>sort</code>、<code>find</code>、<code>transform</code></li>
<li>智能指针：<code>unique_ptr</code>、<code>shared_ptr</code>、<code>weak_ptr</code></li>
<li>模板：函数模板、类模板、特化、可变参数模板</li>
<li><code>lambda</code> 表达式与函数对象</li>
</ul>
<p><strong>本阶段目标</strong>：能用 STL 组合出简洁高效的代码，不再手写链表和排序。</p>
<h2>阶段四：现代 C++</h2>
<p>C++11 之后语言发生了质变，这部分是现代 C++ 的核心。</p>
<ul>
<li>移动语义：右值引用、<code>std::move</code>、完美转发</li>
<li><code>auto</code>、范围 <code>for</code>、<code>constexpr</code>、<code>nullptr</code>、<code>enum class</code></li>
<li>并发：<code>std::thread</code>、<code>mutex</code>、<code>condition_variable</code>、<code>atomic</code>、内存序</li>
<li>C++17：结构化绑定、<code>if constexpr</code>、<code>optional</code>、<code>variant</code>、<code>string_view</code>、文件系统</li>
<li>C++20：概念（concepts）、协程、范围（ranges）、模块（modules）</li>
</ul>
<p><strong>本阶段目标</strong>：写出的代码符合现代 C++ 风格，能正确使用移动语义避免无谓拷贝。</p>
<h2>阶段五：工程与底层</h2>
<ul>
<li>构建系统：CMake 的基本用法与项目组织</li>
<li>调试：GDB / LLDB、断点、调用栈、core dump 分析</li>
<li>内存与性能：内存布局、缓存友好、<code>perf</code> / <code>valgrind</code> / Sanitizer</li>
<li>编译期：模板元编程、SFINAE、类型萃取</li>
<li>代码规范与静态检查：clang-format、clang-tidy</li>
</ul>
<h2>阶段六：选择方向深入</h2>
<table>
<thead>
<tr>
<th>方向</th>
<th>需要补的知识</th>
</tr>
</thead>
<tbody>
<tr>
<td>后端服务</td>
<td>网络编程、epoll、多线程模型、gRPC、数据库</td>
</tr>
<tr>
<td>游戏开发</td>
<td>图形学、Unreal/Unity C++、ECS 架构、物理引擎</td>
</tr>
<tr>
<td>嵌入式</td>
<td>交叉编译、寄存器操作、RTOS、资源受限优化</td>
</tr>
<tr>
<td>基础架构</td>
<td>高性能计算、无锁数据结构、内存池、分布式</td>
</tr>
</tbody>
</table>
<h2>推荐资源</h2>
<p><strong>入门书籍</strong></p>
<ul>
<li>《C++ Primer（第 5 版）》——最全面的入门教材</li>
<li>《Essential C++》——更轻量的快速入门</li>
</ul>
<p><strong>进阶书籍</strong></p>
<ul>
<li>《Effective C++》/《Effective Modern C++》——条款式经验</li>
<li>《深度探索 C++ 对象模型》——理解编译器背后做了什么</li>
<li>《C++ Concurrency in Action》——并发编程必读</li>
</ul>
<p><strong>在线资源</strong></p>
<ul>
<li><a href="https://en.cppreference.com/">cppreference.com</a>——最权威的参考手册</li>
<li><a href="https://isocpp.github.io/CppCoreGuidelines/">C++ Core Guidelines</a>——现代 C++ 最佳实践</li>
<li><a href="https://www.learncpp.com/">LearnCpp</a>——结构化教程</li>
</ul>
<h2>学习建议</h2>
<ol>
<li><strong>动手优先</strong>：每个知识点都要写代码验证，光看不会。</li>
<li><strong>读优秀源码</strong>：STL 实现、小型开源项目，比看十本书有用。</li>
<li><strong>重视调试能力</strong>：会调试的人学得快一个数量级。</li>
<li><strong>不要过早优化</strong>：先写对，再写快。</li>
<li><strong>持续跟进标准</strong>：C++ 每三年一版，保持更新。</li>
</ol>
<hr />
<p><em>本文由 AI（DeepSeek）生成，仅用于测试内容仓库的发布与自动部署流程。</em></p>
]]></content>
    <author><name>Lickoc</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>PostgreSQL 入门笔记</title>
    <link href="https://lickoc.site/posts/postgresql-notes/" rel="alternate" type="text/html"/>
    <id>https://lickoc.site/posts/postgresql-notes/</id>
    <published>2026-09-14T00:00:00.000Z</published>
    <updated>2026-09-14T00:00:00.000Z</updated>
    <summary>PostgreSQL 的核心概念与日常使用笔记：安装连接、基础 SQL、索引、事务、备份恢复，以及和 MySQL 的主要差异。</summary>
    <content type="html"><![CDATA[<p>记录一些 PostgreSQL 的入门要点，方便以后查阅。</p>
<h2>为什么选 PostgreSQL</h2>
<ul>
<li>严格的类型系统和标准 SQL 兼容性</li>
<li>丰富的数据类型：<code>jsonb</code>、数组、范围、几何类型</li>
<li>强大的索引能力：部分索引、表达式索引、GIN/GiST</li>
<li>事务与并发控制实现严谨（MVCC）</li>
<li>扩展生态好：PostGIS、pg_trgm、TimescaleDB</li>
</ul>
<h2>安装与连接</h2>
<pre><code># Debian/Ubuntu
sudo apt install postgresql

# 进入交互式终端
sudo -u postgres psql

# 或指定连接参数
psql -h 127.0.0.1 -p 5432 -U myuser -d mydb
</code></pre>
<p>常用元命令：</p>
<pre><code>\l          -- 列出数据库
\dt         -- 列出当前库的表
\d table    -- 查看表结构
\du         -- 列出角色
\c dbname   -- 切换数据库
\x          -- 切换展开输出（宽表很有用）
\timing     -- 显示每条语句耗时
\q          -- 退出
</code></pre>
<h2>基础 SQL</h2>
<pre><code>CREATE TABLE users (
    id         bigserial PRIMARY KEY,
    email      text NOT NULL UNIQUE,
    nickname   text,
    profile    jsonb DEFAULT '{}'::jsonb,
    created_at timestamptz NOT NULL DEFAULT now()
);

INSERT INTO users (email, nickname)
VALUES ('a@example.com', 'alice')
RETURNING id;

SELECT id, email
FROM users
WHERE created_at &gt; now() - interval '7 days'
ORDER BY created_at DESC
LIMIT 20;
</code></pre>
<p>注意 <code>timestamptz</code> 与 <code>timestamp</code> 的区别：前者带时区语义，绝大多数场景都该用它。</p>
<h2>索引</h2>
<pre><code>-- 普通 B-tree
CREATE INDEX idx_users_email ON users (email);

-- 表达式索引：支持大小写不敏感查询
CREATE INDEX idx_users_email_lower ON users (lower(email));

-- 部分索引：只索引活跃用户
CREATE INDEX idx_active_users ON users (created_at)
WHERE created_at &gt; '2026-01-01';

-- jsonb 的 GIN 索引
CREATE INDEX idx_users_profile ON users USING gin (profile);
</code></pre>
<p>用 <code>EXPLAIN ANALYZE</code> 验证索引是否真的被用上，不要凭感觉加索引。</p>
<h2>事务</h2>
<pre><code>BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
</code></pre>
<p>PostgreSQL 默认是 <code>READ COMMITTED</code>。需要更强的隔离时可显式指定：</p>
<pre><code>BEGIN ISOLATION LEVEL REPEATABLE READ;
</code></pre>
<h2>备份与恢复</h2>
<pre><code># 逻辑备份
pg_dump -Fc mydb &gt; mydb.dump

# 恢复
pg_restore -d mydb mydb.dump

# 全库
pg_dumpall &gt; all.sql
</code></pre>
<p>生产环境还应配置 WAL 归档做时间点恢复（PITR）。</p>
<h2>与 MySQL 的主要差异</h2>
<table>
<thead>
<tr>
<th>维度</th>
<th>PostgreSQL</th>
<th>MySQL</th>
</tr>
</thead>
<tbody>
<tr>
<td>布尔类型</td>
<td>原生 <code>boolean</code></td>
<td><code>tinyint(1)</code></td>
</tr>
<tr>
<td>自增</td>
<td><code>bigserial</code> / <code>GENERATED</code></td>
<td><code>AUTO_INCREMENT</code></td>
</tr>
<tr>
<td>字符串</td>
<td><code>text</code>（无长度限制）</td>
<td>需指定长度或用 <code>TEXT</code></td>
</tr>
<tr>
<td>JSON</td>
<td><code>jsonb</code> 可索引</td>
<td><code>JSON</code> 较弱</td>
</tr>
<tr>
<td>大小写</td>
<td>标识符折叠为小写</td>
<td>取决于平台</td>
</tr>
<tr>
<td>事务 DDL</td>
<td>支持事务内 DDL</td>
<td>不支持</td>
</tr>
</tbody>
</table>
<h2>小结</h2>
<p>入门阶段抓住三件事就够了：<strong>用对类型（尤其 <code>timestamptz</code> 和 <code>jsonb</code>）</strong>、<strong>用 <code>EXPLAIN ANALYZE</code> 验证索引</strong>、<strong>搞清事务隔离级别</strong>。剩下的边用边查。</p>
<h2>参考</h2>
<ul>
<li><a href="https://www.postgresql.org/docs/">PostgreSQL 官方文档</a></li>
<li><a href="https://use-the-index-luke.com/">Use The Index, Luke</a> —— 讲索引与查询优化很到位</li>
</ul>
]]></content>
    <author><name>Lickoc</name></author>
    <category term="技术"/>
  </entry>
  <entry>
    <title>自动部署测试</title>
    <link href="https://lickoc.site/posts/auto-deploy-test/" rel="alternate" type="text/html"/>
    <id>https://lickoc.site/posts/auto-deploy-test/</id>
    <published>2026-09-04T00:00:00.000Z</published>
    <updated>2026-09-04T00:00:00.000Z</updated>
    <summary>测试自托管 Runner 自动构建部署是否正常工作</summary>
    <content type="html"><![CDATA[<h2>这是一篇自动部署测试帖</h2>
<p>如果你能在博客上看到这篇文章，说明自托管 Runner 自动部署流程已经跑通了。</p>
<h3>部署流程</h3>
<ol>
<li>在 <code>Mizuki-Content</code> 仓库推送新内容</li>
<li>GitHub Actions 触发，Runner 在腾讯云服务器本地执行</li>
<li>自动拉取最新代码、构建、部署到 nginx</li>
<li>博客网站即时更新</li>
</ol>
<blockquote>
<p>不再使用 SCP 远程推送，彻底避免 IP 安全告警问题。</p>
</blockquote>
<hr />
<p><em>测试时间：2026-09-04</em></p>
]]></content>
    <author><name>Lickoc</name></author>
    <category term="随笔"/>
  </entry>
  <entry>
    <title>欢迎来到随风录</title>
    <link href="https://lickoc.site/posts/welcome/" rel="alternate" type="text/html"/>
    <id>https://lickoc.site/posts/welcome/</id>
    <published>2026-08-31T00:00:00.000Z</published>
    <updated>2026-08-31T00:00:00.000Z</updated>
    <summary>站点开篇：欢迎来到我的博客</summary>
    <content type="html"><![CDATA[<p>欢迎来到我的博客「随风录」。</p>
<p>这里将记录我的生活、学习与思考，分享我感兴趣的二次元作品与技术笔记。</p>
<h2>关于这个站点</h2>
<ul>
<li>站点名称：随风录</li>
<li>站点地址：https://lickoc.site</li>
<li>风过留痕，我录我心</li>
</ul>
<p>后续会陆续更新更多内容，感谢来访。</p>
]]></content>
    <author><name>Lickoc</name></author>
    <category term="随笔"/>
  </entry>
</feed>
