C 和 C++中的函数重载
我们在学习 C 和 C++的时候,会接触到一个概念叫做函数重载。简单来说函数重载指的是多个函数具有相同的名称,但是参数不同(包括参数类型和参数数量)。编译器在遇到重载函数的调用时,会在同名函数的不同重载实现中选择参数匹配的哪一个来调用。
这里举一个简单的例子。
1 |
|

我们在学习 C 和 C++的时候,会接触到一个概念叫做函数重载。简单来说函数重载指的是多个函数具有相同的名称,但是参数不同(包括参数类型和参数数量)。编译器在遇到重载函数的调用时,会在同名函数的不同重载实现中选择参数匹配的哪一个来调用。
这里举一个简单的例子。
1 | #include <iostream> |

之前刷 LeetCode 题目的时候,偶尔会需要反转二维列表,这里总结了几种 Python 实现。
简单的二维循环,将原始二维列表的每一行的第 N 个元素,放到新的二维列表的第 N 行中。
1 | def invert_matrix(matrix: list[list[int]]) -> list[list[int]]: |
本质上和循环算法是相同的,使用列表推导式语法来实现。
1 | def invert_matrix(matrix: list[list[int]]) -> list[list[int]]: |
最近在深入学习 Rust 语言,本着学以致用的原则,使用 Rust 编写了一个生成二维码的 Web 服务。
直接调用qrcode库相关接口,返回生成的 PNG 文件的二进制内容
1 | fn gen_qr_code(content: &str) -> Vec<u8> { |
最近接到了一个新的需求。需求本身是一个简单的运营活动,不过这个运营活动并不是长期存在的,需要通过后台设置生效时间。
抽象一下的话就是需要通过开关来控制一个功能是否生效,也就是特性开关(Feature Flags)模式。
Martin Fowler 先生写过一篇特性开关模式的文章,感兴趣的读者可以深入阅读。
RAII(Resource Acquisition Is Initialization),即资源获取即初始化,是一种设计模式,用于解决资源的获取与初始化的问题,最早在 C++中提出与推广。
在这篇文章我来简单地介绍一下 RAII 的概念,以及在 Python 中的应用。
在计算机与程序的世界中,有一些资源,比如文件、网络连接、数据库连接、线程、进程等,这些资源在使用的时候需要获取,在使用完成后需要释放。如果不及时释放,会导致资源泄露,造成资源的浪费,程序出错甚至系统崩溃。
一个简单的示例就是文件的读写。
1 | f = open('test.json', 'r') |
这段代码看起来没有什么问题,但是当test.json文件的内容不是合法的 JSON 格式时,第四行代码反序列化数据就会抛出异常,导致第五行代码无法执行,文件没有被关闭。
这个例子告诉我们在处理一些资源时,需要注意在操作过程中是否会发生一些意外情况,例如抛出异常,并且在意外情况发生后,也需要关闭资源。
在 Python2.5 之前的版本中,我们用try-finally来保证程序最终会关闭资源。
1 | try: |
在简单的文件读取操作中,使用try语句多少有点大材小用。为了更好地处理类似的资源管理问题,Python2.5 引入了with语句,做到无论语句块中的代码执行是否抛出异常,都可以在退出with语句块时执行清零代码。
事实上在 Python 中进行文件读写的标准方式就是使用with open语句。
1 | with open('test.json', 'r') as f: |
临近 618 年中大促,各大云服务商也会提供一些优惠。正好我三年前在腾讯云上买的一台 2 核 4G 的虚拟机到期了,看了一下腾讯云的优惠活动,下单了一台 2 核 4G 的的轻量应用服务器(一年期,288 元)。
轻量应用服务器一般都会提供一些常见的镜像(Wordpress,LAMP 等),我的目的不是建站,所以还是选了朴素的 Ubuntu18.04 的基础镜像。
下面大致介绍一下我配置服务器的过程(安装及配置方法基本来源于对应工具官网)。
轻量应用服务器默认是从腾讯云控制台直接登录到终端,可以将自己的公钥加到 ssh 配置里。
1 | # Remote |
为了方便登录,可以配置自己主机的ssh config 文件,随后就可以通过ssh light命令登录到服务器。
1 | # ~/.ssh/config |
最近公司越来越多的项目开始推动单元测试,而我在公司里很早就在进行单元测试实践。就用这篇文章作为一次内部技术分享的主题,同时也代表我自己对单元测试的认识和实践。
单元测试是软件测试的一种类型,测试对象是最基础的代码单元(函数、类、模块),属于白盒测试。在经典的测试金字塔中,单元测试处于最底层。

最简单的单元测试:

之前在工作中遇到一个需求,需要在手机小程序端获取到微信小商店店铺的所有商品数据。由于当时我们没有在后台维护用户的商品数据,选择的解决方案是现场调用商品列表接口,然后缓存在 Redis 里。
鉴于 Redis 的内存还是比较宝贵的,而用户的商品数据(转化为 json 格式后)又是一些比较有规律的文本数据,比较适合进行数据压缩,于是我调研了一下 Python 中的数据压缩的方案。
zip标准库Python 中有一个标准库zip,常用来处理 zip 格式文件,提供的函数和方法也更适合文件操作。在这个案例中我们的数据是通过 http 接口获取的,额外进行一些文件操作有些麻烦和多余,zip标准库并不适合这个场景。
zlib标准库zlib是一个常用的压缩、解压库,使用了 deflate 算法。zip和unzip工具背后其实用的就是zlib。Python 内置了zlib标准库,提供的接口也很简洁易用(zlib.compress和zlib.decompress)。
1 | import zlib |