<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on 知与行</title>
    <link>https://www.hanqi-blog.com/posts/</link>
    <description>Recent content in Posts on 知与行</description>
    <generator>Hugo -- 0.153.2</generator>
    <language>zh-CN</language>
    <lastBuildDate>Thu, 30 Jul 2026 10:54:14 +0800</lastBuildDate>
    <atom:link href="https://www.hanqi-blog.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用 AI 重写维护六年的个人项目</title>
      <link>https://www.hanqi-blog.com/posts/ai_coding/</link>
      <pubDate>Thu, 30 Jul 2026 10:54:14 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/ai_coding/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;就在最近，我用 AI 改写了维护六年、跑在线上的个人项目。AI 帮我节省大量时间，实现了复杂的新功能。与此同时，我也意识到 AI 当前仍有自己的局限性。本文将记录这个过程还有沉淀出来的思考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我是如何实现 Python json 库的</title>
      <link>https://www.hanqi-blog.com/posts/python_json/</link>
      <pubDate>Tue, 16 Dec 2025 16:16:32 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/python_json/</guid>
      <description>&lt;h2 id=&#34;前情提要&#34;&gt;前情提要&lt;/h2&gt;
&lt;p&gt;2020年还是初学编程的时候，我偶然翻到过一门讲函数式编程的课，课程链接早已找不到，但是其中一节课作业是实现一个简洁的 JSON parser。我经常在写 Web 软件中用到 JSON，但是从没想过怎么实现它。仔细琢磨发现它的语法是递归的,一时半会没有什么思路，当时就埋下了好奇的种子。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何提升程序的扩展性</title>
      <link>https://www.hanqi-blog.com/posts/extensible/</link>
      <pubDate>Wed, 17 Apr 2024 20:48:18 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/extensible/</guid>
      <description>&lt;h2 id=&#34;扩展性&#34;&gt;扩展性&lt;/h2&gt;
&lt;p&gt;我在编程时有一个困惑，那就是如何让软件具备扩展性（highly extensible)。&lt;/p&gt;
&lt;p&gt;大多时候，我们无法预测软件未来有什么改动，等到了需要添加新功能时就会发现改动面积巨大，非常头痛。我之前的方案只停留在基础层面：多做复用（抽象成函数、常量）、不要写极度冗长的函数、避免单个函数内有大量控制流和状态变量、写自动化测试等等。虽然真正落实这些，可能已超越了国内大部分项目组，但是我还想更进一步。因为我总觉得，就算做到了这些还是欠缺一些东西。似乎我的拼图里少一些拼图块，缺乏一些更加进阶的思想和技巧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Django REST Framework 源码浅析</title>
      <link>https://www.hanqi-blog.com/posts/drf/</link>
      <pubDate>Wed, 17 Apr 2024 10:53:20 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/drf/</guid>
      <description>&lt;h2 id=&#34;动力&#34;&gt;动力&lt;/h2&gt;
&lt;p&gt;之前学习&lt;a href=&#34;https://hanqi-blog.com/posts/web/&#34;&gt;Web 全栈&lt;/a&gt;时接触到了很多工具，其中我最喜欢的是 Django REST Framework ，下文将简称其为 DRF。因为框架本身非常小巧，但是功能相当完备，即使在单纯使用都给了我很多启发，于是自然而然我想要阅读它的源码。这也是我第一个系统阅读的开源项目。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web 全栈入门指南</title>
      <link>https://www.hanqi-blog.com/posts/web/</link>
      <pubDate>Fri, 12 Apr 2024 15:44:21 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/web/</guid>
      <description>&lt;h2 id=&#34;本文是什么不是什么&#34;&gt;本文是什么，不是什么&lt;/h2&gt;
&lt;p&gt;整个2023年，我做了很多的 Web 全栈应用，有的是创业产品，有的是为了自己或身边的朋友亲戚获取便利。这个过程里我犯了很多错，也一一修正了它们。现在我把这些经验写成文字，希望可以帮助到读者。&lt;/p&gt;</description>
    </item>
    <item>
      <title>写给新手的 Linux 入门指南</title>
      <link>https://www.hanqi-blog.com/posts/linux/</link>
      <pubDate>Tue, 03 Jan 2023 11:37:16 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/linux/</guid>
      <description>&lt;h2 id=&#34;什么是操作系统以及为什么学习-linux&#34;&gt;什么是操作系统以及为什么学习 Linux？&lt;/h2&gt;
&lt;p&gt;本文的读者针对的是完全不懂 Linux 的初学者，着重强调“知其所以然”和“二八定理”，也就是说我不光会讲解 Linux 操作，也会讲解背后的原理；同时侧重于最高频使用的命令摘出来，给初学者提供重点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C/C&#43;&#43; 入门指南</title>
      <link>https://www.hanqi-blog.com/posts/c_cpp/</link>
      <pubDate>Mon, 31 Oct 2022 17:01:01 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/c_cpp/</guid>
      <description>&lt;h2 id=&#34;为什么学习-cc&#34;&gt;为什么学习 C/C++&lt;/h2&gt;
&lt;p&gt;我是用 Python 入门编程的，初始的方向是 Web 后端，大学学习通信工程时也或多或少碰了一些 C 语言，与之对比 Python 简直就像魔法&amp;mdash;它的程序量那么少，做的事情却那么多。等到学习了 Coursera 上面的 &lt;a href=&#34;https://www.coursera.org/learn/programming-languages&#34;&gt;Programming languages&lt;/a&gt; 之后，我才知道 C/C++ 具有很重的历史包袱，设计上有巨大缺陷，便决定以后不碰 C 系语言。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CS 144 Introduction to Computer Networking 心得</title>
      <link>https://www.hanqi-blog.com/posts/cs144/</link>
      <pubDate>Wed, 19 Oct 2022 16:23:23 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/cs144/</guid>
      <description>&lt;h3 id=&#34;困惑&#34;&gt;困惑&lt;/h3&gt;
&lt;p&gt;上一份工作时，我对除了 HTTP 之外的网络知识一无所知。每次遇到一些底层的问题我就像《星际穿越》里面的主角进入了黑洞，觉得头晕眼花。比如&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当时经常要接入第三方的 Web API，刚开始调试不通，到底问题在哪里？是我们自己出错了还是对方出错了？遇到过的问题有对方的服务器挂了、对方给的签名密钥是错误的、对方没有开防火墙等等。此时如何快速定位出错的环节是接入 API 的关键，否则扯皮了一周还没有进入程序实现流程。可对于当时对网络一知半解的我无疑非常困难，各种工具使用也磕磕绊绊。&lt;/li&gt;
&lt;li&gt;PING、curl、Telnet、Wireshark 这些软件分别是用来做什么的？有什么关系？&lt;/li&gt;
&lt;li&gt;项目组使用的微服务框架底层使用什么实现的？如何对其截获数据和做 Mock 测试？当我阅读源码，发现底层使用了 TCP 协议，于是又进入了黑洞，遂放弃。只能从项目的 HTTP server 入口处开始测试或者写细粒度的单元测试。&lt;/li&gt;
&lt;li&gt;看到某个公司做流媒体，底层协议使用了 UDP 而不是 TCP，为什么？这样有什么优劣？&lt;/li&gt;
&lt;li&gt;经常看到介绍说 HTTP 是无状态的，这个无状态到底是什么意思（学完这门课会知道 TCP 协议是有状态的）？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;带着这些困惑，我就想等有时间一定要系统补上计算机网络的知识。于是当去年 Hacker News 上说我关注已久的 Stanford CS144 终于把全部课程内容放出来之后，我就兴奋地收藏下来，今年终于有时间进攻。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何实现 JSON Parser</title>
      <link>https://www.hanqi-blog.com/posts/json/</link>
      <pubDate>Wed, 27 Jul 2022 15:58:07 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/json/</guid>
      <description>&lt;p&gt;本身分为以下四个部分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如何写一个 JSON parser&lt;/li&gt;
&lt;li&gt;剖析 Go 官方 JSON parser 的源码（encoding/json）&lt;/li&gt;
&lt;li&gt;从 JSON 引申出的一个题目：Markdown 标题解析&lt;/li&gt;
&lt;li&gt;JSON 作者的一些趣闻&lt;/li&gt;
&lt;li&gt;参考资料&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其中参考资料里面有项目配套的源码仓库。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何表达自己的想法</title>
      <link>https://www.hanqi-blog.com/posts/articulate/</link>
      <pubDate>Thu, 21 Jul 2022 16:49:49 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/articulate/</guid>
      <description>&lt;p&gt;圣经中有一个故事:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在这个故事中，一群只说一种语言的人在“大洪水”之后从东方来到了示拿（希伯来语：שנער‎）地区，并决定在这修建一座城市和一座“能够通天的”高塔；上帝见此情形就把他们的语言打乱，让他们再也不能明白对方的意思，并把他们分散到了世界各地。&lt;/p&gt;</description>
    </item>
    <item>
      <title>MIT 6.824 Distributed Systems 心得</title>
      <link>https://www.hanqi-blog.com/posts/mit6.824/</link>
      <pubDate>Fri, 15 Jul 2022 15:36:44 +0800</pubDate>
      <guid>https://www.hanqi-blog.com/posts/mit6.824/</guid>
      <description>&lt;h3 id=&#34;动力&#34;&gt;动力&lt;/h3&gt;
&lt;p&gt;什么是分布式系统？&lt;/p&gt;
&lt;p&gt;当数据量和计算量非常大时，我们需要将计算机规模化（Scale）。规模化有两个方向：竖直和水平。竖直指提升单个计算机的性能；而水平指将计算量分摊到很多的计算机上，通过增加计算机的数量来暴力破解，又称为分布式系统。在计算机发明的初期主要依靠竖直提升，而从上世纪进入互联网爆发期之后，由于数据量猛增，单机的性能跟不上数据量的增长，所以互联网公司开始探索另一条路：水平规模化，而其中尤以谷歌出名。比如谷歌创业初期购置了大量便宜的 x86 服务器来搭建分布式系统撑起谷歌的全球流量。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
