我是如何实现 Python json 库的

前情提要 2020年还是初学编程的时候,我偶然翻到过一门讲函数式编程的课,课程链接早已找不到,但是其中一节课作业是实现一个简洁的 JSON parser。我经常在写 Web 软件中用到 JSON,但是从没想过怎么实现它。仔细琢磨发现它的语法是递归的,一时半会没有什么思路,当时就埋下了好奇的种子。 ...

2025-12-16

如何提升程序的扩展性

扩展性 我在编程时有一个困惑,那就是如何让软件具备扩展性(highly extensible)。 大多时候,我们无法预测软件未来有什么改动,等到了需要添加新功能时就会发现改动面积巨大,非常头痛。我之前的方案只停留在基础层面:多做复用(抽象成函数、常量)、不要写极度冗长的函数、避免单个函数内有大量控制流和状态变量、写自动化测试等等。虽然真正落实这些,可能已超越了国内大部分项目组,但是我还想更进一步。因为我总觉得,就算做到了这些还是欠缺一些东西。似乎我的拼图里少一些拼图块,缺乏一些更加进阶的思想和技巧。 ...

2024-04-17

Django REST Framework 源码浅析

动力 之前学习Web 全栈时接触到了很多工具,其中我最喜欢的是 Django REST Framework ,下文将简称其为 DRF。因为框架本身非常小巧,但是功能相当完备,即使在单纯使用都给了我很多启发,于是自然而然我想要阅读它的源码。这也是我第一个系统阅读的开源项目。 ...

2024-04-17

Web 全栈入门指南

本文是什么,不是什么 整个2023年,我做了很多的 Web 全栈应用,有的是创业产品,有的是为了自己或身边的朋友亲戚获取便利。这个过程里我犯了很多错,也一一修正了它们。现在我把这些经验写成文字,希望可以帮助到读者。 ...

2024-04-12

写给新手的 Linux 入门指南

什么是操作系统以及为什么学习 Linux? 本文的读者针对的是完全不懂 Linux 的初学者,着重强调“知其所以然”和“二八定理”,也就是说我不光会讲解 Linux 操作,也会讲解背后的原理;同时侧重于最高频使用的命令摘出来,给初学者提供重点。 ...

2023-01-03

C/C++ 入门指南

为什么学习 C/C++ 我是用 Python 入门编程的,初始的方向是 Web 后端,大学学习通信工程时也或多或少碰了一些 C 语言,与之对比 Python 简直就像魔法—它的程序量那么少,做的事情却那么多。等到学习了 Coursera 上面的 Programming languages 之后,我才知道 C/C++ 具有很重的历史包袱,设计上有巨大缺陷,便决定以后不碰 C 系语言。 ...

2022-10-31

CS 144 Introduction to Computer Networking 心得

困惑 上一份工作时,我对除了 HTTP 之外的网络知识一无所知。每次遇到一些底层的问题我就像《星际穿越》里面的主角进入了黑洞,觉得头晕眼花。比如 当时经常要接入第三方的 Web API,刚开始调试不通,到底问题在哪里?是我们自己出错了还是对方出错了?遇到过的问题有对方的服务器挂了、对方给的签名密钥是错误的、对方没有开防火墙等等。此时如何快速定位出错的环节是接入 API 的关键,否则扯皮了一周还没有进入程序实现流程。可对于当时对网络一知半解的我无疑非常困难,各种工具使用也磕磕绊绊。 PING、curl、Telnet、Wireshark 这些软件分别是用来做什么的?有什么关系? 项目组使用的微服务框架底层使用什么实现的?如何对其截获数据和做 Mock 测试?当我阅读源码,发现底层使用了 TCP 协议,于是又进入了黑洞,遂放弃。只能从项目的 HTTP server 入口处开始测试或者写细粒度的单元测试。 看到某个公司做流媒体,底层协议使用了 UDP 而不是 TCP,为什么?这样有什么优劣? 经常看到介绍说 HTTP 是无状态的,这个无状态到底是什么意思(学完这门课会知道 TCP 协议是有状态的)? 带着这些困惑,我就想等有时间一定要系统补上计算机网络的知识。于是当去年 Hacker News 上说我关注已久的 Stanford CS144 终于把全部课程内容放出来之后,我就兴奋地收藏下来,今年终于有时间进攻。 ...

2022-10-19

如何实现 JSON Parser

本身分为以下四个部分: 如何写一个 JSON parser 剖析 Go 官方 JSON parser 的源码(encoding/json) 从 JSON 引申出的一个题目:Markdown 标题解析 JSON 作者的一些趣闻 参考资料 其中参考资料里面有项目配套的源码仓库。 ...

2022-07-27

如何表达自己的想法

圣经中有一个故事: 在这个故事中,一群只说一种语言的人在“大洪水”之后从东方来到了示拿(希伯来语:שנער‎)地区,并决定在这修建一座城市和一座“能够通天的”高塔;上帝见此情形就把他们的语言打乱,让他们再也不能明白对方的意思,并把他们分散到了世界各地。 ...

2022-07-21

MIT 6.824 Distributed Systems 心得

动力 什么是分布式系统? 当数据量和计算量非常大时,我们需要将计算机规模化(Scale)。规模化有两个方向:竖直和水平。竖直指提升单个计算机的性能;而水平指将计算量分摊到很多的计算机上,通过增加计算机的数量来暴力破解,又称为分布式系统。在计算机发明的初期主要依靠竖直提升,而从上世纪进入互联网爆发期之后,由于数据量猛增,单机的性能跟不上数据量的增长,所以互联网公司开始探索另一条路:水平规模化,而其中尤以谷歌出名。比如谷歌创业初期购置了大量便宜的 x86 服务器来搭建分布式系统撑起谷歌的全球流量。 ...

2022-07-15