编码入门

ZhangShuo1999      2022-02-12     711

关键词:

一. 编码基本功

1. 前言

根据实践数据可以看出,调试时间占据了我们开发时间中的最大部分,普遍能到60%。如果我们有方法大幅消减调试阶段的时间,效率自然能够大幅提升。

通过什么手段能够做到?

  • 写好代码,以模块化为中心指导思想,尽量把代码写清晰,写健壮,少出一些BUG;
  • 做好单测,以自动化为中心指导思想,尽量早,尽量低代价,尽量全面,验证所有逻辑,把BUG消灭于萌芽之中;

2. 6步法

这6个步骤,围绕『单测』这个核心,目的是提高单测的效率、效果,让单测可以成为一道『拦河大坝』,把BUG阻断在开发阶段,避免后续『大海捞针』,在大范围代码中定位BUG。
  • 设计改善:对设计产出的API进行优化,以及对模块内部结构进行微调,做好分层和解耦。
    目的是提升代码的模块性,让代码更容易理解,更容易调试,测试,修改,复用,扩展。
    本步骤输出API函数的原型定义。
  • 编写单测的用例&代码:在编写函数实现代码前,先编写函数的单元测试代码,利用单元测试来调试函数,降低函数调试的难度和工作量。本步骤输出API函数的单测代码。
  • 函数代码实现:编写函数的实现代码,重点关注代码的易理解性,健壮性。利用前一步写好的单测案例进行逐函数调试。本步骤输出API函数的实现代码,完成代码调试。
  • 覆盖率分析:在函数编写实现,并利用单测调试完毕后,收集覆盖率数据并分析,根据覆盖率数据衡量单测质量,增补新的单测用例。
  • valgrind检测:对于C/C++,单元测试无法发现内存泄漏、溢出、线程类问题。可以利用valgrind对单测运行过程进行检查,排除这几类问题。
  • codereview:对于设计类问题,以及只在特定异常场景发生的错误,单测、valgrind检测都无法完全消除。可以通过代码review,人工排除这一类的问题。

3. 设计中注意事项

  • 在函数中要检查参数的有效性(可以使用assert),调用函数要检查函数返回值
  • memcpy不能对重叠区域进行拷贝,memmove可以
  • 释放过的指针要置为null
  • 局部变量要初始化
  • malloc分配内存要初始化才能使用
  • 使用strtol替换atoi

二. 优秀项目

  • lua,lua是一门简单快速的脚本语言。lua和C扩展模块之间的参数传递非常独特,是基于栈模型的。这让C代码操作LUA函数参数变得简单而快速。另外LUA语言的API设计非常简洁,头文件结构堪称典范,是学习怎么设计模块接口的好素材。
  • git,git是linus在linux外对软件世界的另一卓越贡献。git的第一个版本是linus的个人作品,推荐从这个版本的源码开始阅读。
  • cjson
  • libevent
  • sqlite3
  • cmockery
  • linux内核

go语言入门篇-golang之文本编码处理

Golang之文本编码处理  查看详情

第二章python入门(代码片段)

...需要的环境(mac/windows):解释器:py2\py3开发工具:pycharm2.2编码2.2.1编码基础常见编码:ascii(英语)unicode(内存中使用的编码,可以支持世界上任何语言符号。又称:万国码。由联合国组织定义)cse2(以前常用的编码形式)cse4(常用的编... 查看详情

入门笔记小结

...。3.<metacharset="UTF-8">  "UTF-8"是unicode系列中的一个编码。  采用unicode字符编码,一种编码就可以表示所有语言。4.设置字体颜色时,链接的颜色没有改 查看详情

word入门

...用(十六进制数)+alt+x在word中快速打出来常用UTF-8十六位编码符号编码符号编码α03b1β03b2≤2264≥2265                2.快速加上下标1.加上标:使用Ctrl+Shift+=组 查看详情

数制与编码--绪论(基础入门知识)

1.模拟量:连续变化的物理量2.数字量:模拟→数字量(A/D)3.数字系统:使用数字量来传递、加工、处理信息的实际工程系统4.数字系统的任务:(1)将现实世界的信息转换成数字网络可以理解的二进制语言(2)仅用0、1完成所要求的... 查看详情

rkmpp库快速上手--mpp编码入门(代码片段)

   首先,了解MPP编码之前,先了解一下MPP的MPI接口。1、MPI接口结构   MPP设计的MPI接口,下面的图都来自于官方参考文档:           MppMem:C库malloc内存的封装;MppBuffer:dmabuf内存的封装;... 查看详情

servlet之中文乱码问题入门版

...1postrequest.setCharacterEncoding("utf-8");解决post中的//utf-8是项目编码,要跟项目编码格式统一,//当然也能够选用其它编码。1.2响应response.setCharacterEncoding("utf-8");response.setContentType 查看详情

java入门到精通-第57讲-sqlserver数据类型

[关键字]用[]包起来SQLserver数据类型:非unicode编码:在计算机世界,每一个字符都有编码的东西unicode码的特点:用两个字节表示一个字符(可以是英文字符,汉字)。big5支持繁体;iso-8859-1编码:支持欧洲文字编码;gb2312支持中... 查看详情

20190221beautifulsoup入门(代码片段)

...从网页抓取数据。BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,BeautifulSoup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始... 查看详情

requests库入门

...ponse.text页面的字符串形式  Response.encodingheader中定义的编码(若header中未定义则会出问题)  Response.apparent_encoding根据页面分析得到的编码  Response.co 查看详情

(初学者编码器。入门级)HTML点击游戏上的保存/加载功能不起作用

】(初学者编码器。入门级)HTML点击游戏上的保存/加载功能不起作用【英文标题】:(BeginnerCoder.EntryEntryLevel)Save/LoadfunctiononHTMLclickergamenotworking【发布时间】:2022-01-1709:58:34【问题描述】:初学者从论坛网站和youtube学习,请多多... 查看详情

ffmpeg入门篇

...转码在转码过程中,ffmpeg调用demuxers将inputs分解成已编码数据包,decoder将已编码数据包解码成非压缩的帧数据,接着再经过一系列filter处理,处理完由encoder进行压缩编码,最后再经过muxer进行合成输出output值... 查看详情

tensorflow实现one-hot编码tensorflow2入门手册(代码片段)

🔗运行环境:python3🚩作者:K同学啊🥇精选专栏:《深度学习100例》🔥推荐专栏:《新手入门深度学习》📚选自专栏:《Matplotlib教程》🧿优秀专栏:《Python入门100题》代码实现&#x... 查看详情

python从入门到精通python的编码规范,标识符知多少?(代码片段)

...是Pyhon系列文章的第三篇,本文主要介绍Python程序的编码规范。干货满满,建议收藏,需要用到时常看看。小伙伴们如有问题及需要,欢迎踊跃留言哦~~~。文章目录前言注释缩进规则编码规范标识符命令规范标识... 查看详情

深度学习入门(六十四)循环神经网络——编码器-解码器架构(代码片段)

深度学习入门(六十四)循环神经网络——编码器-解码器架构前言循环神经网络——编码器-解码器架构课件重新考察CNN重新考察RNN编码器-解码器架构总结教材1编码器2解码器3合并编码器和解码器4训练模型5小结参考文献... 查看详情

python入门系列之字符编码

1.字符编码**【**所谓unicode】unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部表示,不能直接保存。所以存储时需要规定一种存... 查看详情

python零基础到入门python预备知识必备篇——python基本编码规范(代码片段)

目录📢前言👑Python编码规范🏳️‍🌈声明编码格式🏳️‍🌈缩进规则🏳️‍🌈注释部分🏳️‍🌈空格🏳️‍🌈空行使用🏳️‍🌈模块导入部分🏳️‍🌈命名 查看详情

ffmpeg入门篇

...转码在转码过程中,ffmpeg调用demuxers将inputs分解成已编码数据包,decoder将已编码数据包解码成非压缩的帧数据,接着再经过一系列filter处理,处理完由encoder进行压缩编码,最后再经过muxer进行合成输出output值... 查看详情