C++ string 意外修改之深入理解 COW 写时复制
最近工作中有小伙伴遇到了一个奇怪的问题,C++中复制一个 string 后,更改复制后的内容,结果原值也被改了。对于不是很熟悉 C++ 的小伙伴来说,这就有点“见鬼”了。本文接下来从问题的简单复现,到背后的原理,以及 C++ 标准的变更,来一起深入讨论这个问题。
最近工作中有小伙伴遇到了一个奇怪的问题,C++中复制一个 string 后,更改复制后的内容,结果原值也被改了。对于不是很熟悉 C++ 的小伙伴来说,这就有点“见鬼”了。本文接下来从问题的简单复现,到背后的原理,以及 C++ 标准的变更,来一起深入讨论这个问题。
ChatGPT 问世后,OpenAI 就开源了模型调用的 Python 库 openai-python。这个库功能十分齐全,封装了 OpenAI 对外公布的 API,使用起来也十分简单。
这个库的第一个版本,实现了 ChatGPT 各种 API 的参数封装 Python 抽象类和调用方法,通过 requests 和 aiohttp 库来发送同步或者异步 HTTP 请求。整体来说,对外接口良好,很容易就会使用。并且整体源码实现有很好的逻辑抽象,用了很多 Python 高级特性,代码写的很漂亮,值得学习。但是从本质上讲,这还是 “API boy“ 的工作,更多是重复体力劳动,没有太多技术含量。
于是,OpenAI 在 2023 年 11 月,开始引入 Stainless,自此不用再手工编写 SDK 代码。每次只用提供 API 协议更新,然后就能自动生成代码,摆脱了重复体力劳动。具体是在 Pull 677 中引入新的代码,并且作为正式的 V1 版本发布。
个人博客也写了有一段时间了,之前是能访问到就好,对速度没啥追求。前段时间,自己访问的时候,都感觉到页面加载速度比较慢,比较影响体验。此外加载慢的话,还会影响搜索引擎排名。于是动手对博客进行了系列的优化,提升了页面的加载速度。中间遇到了不少坑,本文记录下来,希望对大家有所帮助。