Loading...
💼 工作记录
std::string origin_response_body = "test_content"; const int body_len = origin_response_body.length(); std::unique_ptr<char[]> response_body(new char[body_len]); memcpy(response_body.get(), origin_response_body.c_str(), body_len); std::string body = response_body.get();
这段代码是有隐患的,但是却比较难发现。因为如果这个数组中最后一位不是\0 结束符,构造string的过程中就会一直按照地址递增访问内存直到找到结束符为止,这个过程会导致内存异常访问等问题
\0
但在真实环境中,可能不一定会导致崩溃,因为当我们new[body_len] 申请一段内存的时候,由于内存对齐以及操作系统的差异性,分配的大小会大于申请的大小,因此在body_len 位置的内存很可能就是结束符。 C++Tips
📝 每日记录 「自我觉察」
今天晚上在写一篇“读后感”,写了1小时左右发现自己进入了“状态”了,从而发现进入状态的重要性。之前可能觉得“进入状态”只是一个形容词,而今天发现它确实是做好事情的一个具体的步骤。
这里列举目前想到的一些条件:
💬 随便聊聊 最近很火的 AI 认为 9.11 > 9.8 我的第一反应居然和AI一样... 可能是版本号看多了吧
💬 随便聊聊 看到一个评论很有意思:“至少我从来没听说过有人死前还会想着,这辈子没有赚更多的钱没有为当年的公司做更多的牛马之事。”
最近的两个需求尝试以 “面向测试开发”来开发。所谓“面向测试开发”,或者“测试驱动开发”,我理解就是先去写UT,先去在UT里面写好调用的函数和预期的接口。每写一个EXPECT,对应去实现类的功能,这样写完UT,功能也开发完成了,保证了模块的质量。
通过这种方式发现写代码的阻力更小一些。之前写代码脑子里可能混杂多个接口的设计想法,通过UT,每次只增加一个新的case,实现该case,能够“小步快走”,会更不容易出错。
这对项目代码质量是有比较大的要求的,如果是一个新的独立模块,还好一些,可以从零开始写UT,如果这个模块有依赖外部模块,需要mock或者外部模块也具有可测性。
如果是在已有的功能模块里新增新的功能,这就要求已有模块可测性非常强才行。历史的很多代码都没有UT,这也是困难之一吧。
“当你排除一切不可能的情况,剩下的,不管多难以置信,那都是事实。”
工作中排查bug的时候很像是侦探🕵️寻找真相。简单的bug可能很快从代码review就能发现,比如空指针等。这周遇到了一个bug ,简单来说,
线上的问题是在A操作过程中,出现了B操作,导致后续C操作的时候直接崩溃。所以线上会有概率非常小的情况下崩溃。
这里写代码的时候没有考虑到这个异步过程,同时B操作或者C操作中应该增加判断,如果A操作后,就是空操作。
💬 分享 vscode一直使用的都是深色主题。最近上午显示器因为光线太亮了,黑色看不太清,改用了浅色主题「Solarized Light」,不刺眼,而且颜色很柔和浅黄色,很喜欢,推荐!
💬 随便聊聊 “学习的最佳效率,是抽空 做事的最好状态是兼职” 多多视频看到的一句话,甚是觉得有理。很多时候都在想,不上班就好了,就可以干嘛干嘛了,但实际上真不上班了,又会有经济上的负担,因此,在上班基础上,抽空做事未尝不是一种办法
🍃 handsome主题 增加了一个引用说说的功能: 牙疼的时候才想起早干嘛不勤刷牙,生病时候才想起早不锻炼身体,不合理饮食了,快死的时候才想起早干...
但没有增加反向引用,因为如果一个页面中每条说说都去查询反向列表,sql 查询可能有些耗时
🍃 handsome主题 增加了一个有趣功能,在文章下方会显示反向引用和引用的列表
(PS: v10.0 目前在开发阶段,正式发布仍需要一段时间)
加载失败!尝试重新加载
来自南部的一个小城市,个性不张扬,讨厌随波逐流。
[说说内容为空]
🥳 周末 [WEEK-10] 周六看完了《太白金星有点烦》这本书 📖 读书 非常有趣,而且也不是特别长的一部轻小说,非常有趣,好久没有读到这么有意思的书了。周日看了三个房 ,现在房子要下下周到...
🥳 周末 [WEEK-02] 📖 读书 这周看完了《早安,怪物》。比较喜欢这种讲述别人故事的心理咨询类的书籍。这本书有一个观点觉得很受用。“人们确立这样的界限,好让他人以安全合理的方式与自己打...
我还没有在两个平台买过同一个东西对比过
10.0版本会支持,还在开发中
💼 工作记录
这段代码是有隐患的,但是却比较难发现。因为如果这个数组中最后一位不是
\0结束符,构造string的过程中就会一直按照地址递增访问内存直到找到结束符为止,这个过程会导致内存异常访问等问题但在真实环境中,可能不一定会导致崩溃,因为当我们new[body_len] 申请一段内存的时候,由于内存对齐以及操作系统的差异性,分配的大小会大于申请的大小,因此在body_len 位置的内存很可能就是结束符。 C++Tips
1:
std::unique_ptr<char[]> response_body(new char[body_len + 1]); // 分配空间 这种非常重要 且常见
memcpy(response_body.get(), origin_response_body.c_str(), body_len + 1); // 拷贝完整字符串
2:动态分配 在设计、开发阶段是要被严格管控的, 至少做到1、在详细设计阶段就要体现在文档里。2、边界检查 3、测试覆盖
好像发的不对,检查了下,基本没有临时的动态分配、
我这里简化了,memcpy的逻辑是另一个函数的事情,函数参数就是char*,所以外部必须传入一个分配好空间的字符指针进去
这个是sdk的代码,个人觉得c++项目而且没有那么高的性能要求下,尽量可以不用char*指针,同时这个sdk内部保存的就是string,但是函数参数是char*导致string->char*->string 这样诡异的逻辑出现
📝 每日记录 「自我觉察」
今天晚上在写一篇“读后感”,写了1小时左右发现自己进入了“状态”了,从而发现进入状态的重要性。
之前可能觉得“进入状态”只是一个形容词,而今天发现它确实是做好事情的一个具体的步骤。
这里列举目前想到的一些条件:
💬 随便聊聊 最近很火的 AI 认为 9.11 > 9.8 我的第一反应居然和AI一样... 可能是版本号看多了吧
💬 随便聊聊 看到一个评论很有意思:“至少我从来没听说过有人死前还会想着,这辈子没有赚更多的钱没有为当年的公司做更多的牛马之事。”
💼 工作记录
最近的两个需求尝试以 “面向测试开发”来开发。所谓“面向测试开发”,或者“测试驱动开发”,我理解就是先去写UT,先去在UT里面写好调用的函数和预期的接口。每写一个EXPECT,对应去实现类的功能,这样写完UT,功能也开发完成了,保证了模块的质量。
通过这种方式发现写代码的阻力更小一些。之前写代码脑子里可能混杂多个接口的设计想法,通过UT,每次只增加一个新的case,实现该case,能够“小步快走”,会更不容易出错。
这对项目代码质量是有比较大的要求的,如果是一个新的独立模块,还好一些,可以从零开始写UT,如果这个模块有依赖外部模块,需要mock或者外部模块也具有可测性。
如果是在已有的功能模块里新增新的功能,这就要求已有模块可测性非常强才行。历史的很多代码都没有UT,这也是困难之一吧。
💼 工作记录
“当你排除一切不可能的情况,剩下的,不管多难以置信,那都是事实。”
工作中排查bug的时候很像是侦探🕵️寻找真相。简单的bug可能很快从代码review就能发现,比如空指针等。这周遇到了一个bug ,简单来说,
线上的问题是在A操作过程中,出现了B操作,导致后续C操作的时候直接崩溃。所以线上会有概率非常小的情况下崩溃。
这里写代码的时候没有考虑到这个异步过程,同时B操作或者C操作中应该增加判断,如果A操作后,就是空操作。
💬 分享 vscode一直使用的都是深色主题。最近上午显示器因为光线太亮了,黑色看不太清,改用了浅色主题「Solarized Light」,不刺眼,而且颜色很柔和浅黄色,很喜欢,推荐!
💬 随便聊聊 “学习的最佳效率,是抽空 做事的最好状态是兼职” 多多视频看到的一句话,甚是觉得有理。很多时候都在想,不上班就好了,就可以干嘛干嘛了,但实际上真不上班了,又会有经济上的负担,因此,在上班基础上,抽空做事未尝不是一种办法
需要有一个前提,能抽空
🍃 handsome主题 增加了一个引用说说的功能:
牙疼的时候才想起早干嘛不勤刷牙,生病时候才想起早不锻炼身体,不合理饮食了,快死的时候才想起早干...
但没有增加反向引用,因为如果一个页面中每条说说都去查询反向列表,sql 查询可能有些耗时
期待v10.0
佬,新版在盒子模型的基础上加个整体宽度选项呗,默认、窄、宽。现在的版本在笔记本15寸1080p上还可以,但在27寸4k显示器上就有点宽
你的显示器分辨率是多少呀?
目前就是4k 3840*2160 缩放 175%
会考虑的
🍃 handsome主题 增加了一个有趣功能,在文章下方会显示反向引用和引用的列表