项目规范
五道口纳什
wx公众号/B站:五道口纳什
展开
-
备份的必要
Data LogicaI Consistency;指数据在数据结构、数据格式和属性编码正确性方面,尤其是拓扑关系上的一致性。逻辑一致性(logical consistency)与矛盾(Contradiction)相对; 也即逻辑上的一致(logically consistent)= 没有逻辑矛盾(no logical contraction)原创 2017-03-04 10:47:53 · 2483 阅读 · 0 评论 -
代码可读性、可调式、可维护性
避免魔鬼数字: 将数字通过宏定义或者枚举赋予有意义人类可读的字符串名;1. 代码文件的拆分将所有的源代码都写在一个文件中,最开始还很清楚,及至到后来,功能不断扩展添加,一个程序源代码的文件可以长达数百万行,那么该代码无论是维护,还是功能添加,还是调试和定位,都是一种灾难;原创 2017-12-09 12:18:49 · 1002 阅读 · 0 评论 -
常见空指针异常及其避免
出现在任何一个位置上的对象引用都有可能为 null,在进行访问,赋值,取值,类型转换等操作时,首先判断该对象是否为 null,否则极易抛出空指针异常; map.get(key) ⇒ 就有可能 key 不在 map 中; 避免的方法也十分简单,对返回值进行判断;如果一个函数的返回值为对象的引用,该返回值也可能为空指针;强制类型转换;1. 规避手段使用 object.equals(“test”原创 2017-10-11 22:12:09 · 3249 阅读 · 1 评论 -
编写高质量代码 —— 异常退出条件的判断
注意,布尔表达式的先后顺序,有时不可以交换if (null == instance || instance.isEmpty())0. 常见异常退出条件参数为空;表示长度,表示索引的整型为负数,或者超出待索引数组或容器的范围;1. String 的 startsWith 函数首先来看 String 类为 startsWith 函数提供的对外接口,有如下形式的俩中函数重载:public bool原创 2017-10-22 19:52:35 · 850 阅读 · 0 评论 -
代码注释的说明
1. 注释的对象注释变量: 变量的意义,存储的是什么内容;注释函数: 函数名函数功能的说明参数及返回值的说明2. 注释的位置注释置于代码之上:注释在代码之前,先看到注释后看到代码;注释置于代码之后(之右):先看到代码,再看到注释;3. 杂项Tricks(四十八)—— 注释一段代码原创 2017-03-28 16:42:29 · 1203 阅读 · 0 评论 -
软件工程概论
1. 需求分析IPO 表格的方式进行组织各个功能模块; IPO:Input,Process,Output,输入、处理与输出;一些补充说明: 对于基于客户端、服务器端(C/S 架构)程序,要分别从客户端和服务器端两个模型分别进行需求分析;2. 系统设计概要设计 vs. 详细设计 概要设计: 系统总体设计接口设计运行时设计系统数据库结构设计;详细设计: 界面数据访问层(DAL原创 2017-07-28 15:58:03 · 1349 阅读 · 0 评论 -
Python 第三方库 cp27、cp35 等文件名的含义
What does version name ‘cp27’ or ‘cp35’ mean in Python?如对于 gensim-0.12.4-cp27-none-win_amd64.whl文件名而言,将其文件名拆分的话,含义分别是:0.12.4 - package version, they may be using semantic versioningcp27 - this packag原创 2017-03-16 10:08:57 · 37346 阅读 · 2 评论 -
virtualenv 的使用 —— PyCharm 与 Jupyter Notebook
1. 常见参数--system-site-packages:Give the virtual environment access to the global site-packages. 给定当前环境以获取全局包的权限;原创 2017-03-16 10:02:06 · 1495 阅读 · 0 评论 -
windows 下使用 virtualenv 创建虚拟环境
virtualenv虚拟环境为每个项目隔离了一套运行类库,不同的项目在各自的虚拟环境中使用不同的类库,避免了将所有类库都安装到系统环境中导致的不同项目需要不同(版本)类库的问题,项目与项目之间的类库依存不再成为问题。首先使用 pip 命令安装 virtualenv 进入 cmd 命令行界面查询版本:virtualenv --version进入 cmd 命令行界面使用 virtualenv ven原创 2017-03-16 09:56:52 · 10211 阅读 · 0 评论 -
Python 编程规范 —— TODO 注释(结合 PyCharm)
编程是代码和注释的统一;TODO 自然表示需要做而未做的一些待完成的事项,有助于事后的检索,以及对整体项目做进一步的修改迭代。# TODO(kl@gmail.com): Use a "*" here for string repetition.# TODO(Zeke) Change this to use relations.最好在注释中包含一个截止日期(“2009年11月解决”)或等待一个特定原创 2017-03-13 14:58:07 · 38278 阅读 · 0 评论 -
C/C++ 混合编程
[面试] C/C++ 语法(五) —— extern1. C 调用 C++ 开发的DLL库C和C++混合编程(__cplusplus 与 external “c” 的使用)#ifdef __cplusplusextern "C" {#endif/**** some declaration or so *****/#ifdef __cplusplus }#endif /* end of __cplu原创 2017-12-09 14:05:30 · 786 阅读 · 0 评论 -
代码健壮性 —— 异常保护和合法性检测
参数: 入参; 是否为空返回值; 是否为空;根据返回状态码或返回值判断函数执行的状态;1. 参数的合法性检测(validate)指针是否为空if (p == NULL) ...内存申请:要判断是否申请成功;序列访问: 序列是否为空;是否越界;序列是否为空 ⇒ 删除序列中的元素 ⇒ 此时是否为空; 对于 Stack 的 pop 操作;对列表或者二维列表原创 2016-03-26 21:34:00 · 1398 阅读 · 0 评论 -
跨编程语言平台的通信
数学语言并不完全等价于编程语言,从数学语言到编程语言,需要一定的转换技巧。原创 2016-09-20 15:56:31 · 1168 阅读 · 0 评论 -
python 工程 ——文件、包、__init__及导入方法
A Session object encapsulates the environment in which Tensor objects are evaluated. 一个会话对象(session object)封装了 Tensor 对象待评估(evaluate)的环境信息。原创 2017-03-15 12:17:19 · 1591 阅读 · 0 评论 -
maven 编译命令
1. 句子2. 缩略词原创 2016-01-15 16:09:35 · 1132 阅读 · 0 评论 -
软件开发 —— 过程资产与交付件
1. 编码团队统一定义标记 TODO 待处理的问题FIXME 已知有问题的代码HACK 不得不采用的粗糙的解决方案2. 测试单元测试用例要同步刷新 新的功能及需求加入进来,仍要求跑通历史测试用例,即实现测试的继承性要求;3. 质量与进度问题跟踪表; 遗漏问题 疑难问题;上线前的准备: checklist...原创 2018-07-23 22:22:12 · 3309 阅读 · 0 评论 -
版本号的管理
1. 语义化版本模式Semantic Versioning 语义化版本的介绍:Semantic Versioning 2.0.0语义化版本 2.0.0主版本.小版本.补丁:MAJOR.MINOR.PATCH(主版本号.次版本号.修订号)主版本号:当你做了不兼容的 API 修改,次版本号:当你做了向下兼容的功能性新增,修订号:当你做了向下兼容的问题修正。...原创 2018-05-07 20:56:55 · 2067 阅读 · 1 评论 -
日志的处理 —— 使用 log4j
通过 log4j,日志信息不仅打印到 console,而且输出到指定文件,根据配置信息;<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version原创 2018-04-27 22:07:33 · 798 阅读 · 0 评论 -
命名 —— 函数、类的命名
load、fetch、make load:本地(磁盘)加载fetch:网络爬取make:一些合成数据;1. 函数名刻画全部的事情子程序的命名应描述所有的输出结果以及副作用(side effects)。2. 避免不当的动词无意义或者模糊: handleCalculation、performServeices、processInput,dealwithOutput...原创 2018-03-20 23:40:37 · 2542 阅读 · 0 评论 -
代码健壮性的获得 —— 借助编译器及语言的语法特性
1. 借助编译器主要利用编译器对语法中一些关键字、修饰符的支持:Java final、static 注意区分 Java 的按值传递和按引用传递,但使用按引用传递时,被调端不会对(没有能力)对调用端造成任何影响,按引用传递便具备对调用端造成影响的能力,如果在按引用传递的情况下,还想保证不会对调用端产生任何影响,此时便可以使用 final 关键字(C/C++ 则是 const 关键字)原创 2018-01-20 12:06:36 · 716 阅读 · 0 评论 -
代码健壮性 —— 边界条件的判断
边界条件的判断包括:文件读操作:第一个字符,最后一个字符,倒数第二个字符;大于号与大于等于号;1. 数据结构关于整数:正数:包括边界值 1、0x7FFF FFFF负数:包括边界值 0x8000 0000、0xFFFF FFFF0关于序列(容器):序列为空;序列长度为 1;序列满;关于二叉树:树位空;只有根元素;只有一个左子树,或右子树;2. 对原创 2018-01-20 11:35:43 · 1985 阅读 · 1 评论 -
软件的版本命名管理
1. 进度alpha:内部测试版beta:外部测试版demo:演示版Enhance:增强版或者加强版 属于正式版2. 限制Free 自由版Full version 完全版 属于正式版Release 发行版 有时间限制Upgrade 升级版3. 付费Retail 零售版Premium – 贵价版Professional – 专业版Express – 特别版Deluxe –原创 2016-10-22 11:51:34 · 946 阅读 · 0 评论 -
toolbox、library 的组织
不要重复制造轮子;重复利用已完成的函数;1. 一个普通的 matlab toolboxbigData:规模较大的数据集;data:一般的数据集;demos:演示程序,直接可以运行;tools:工具; util:常用函数;2. 添加到路径 类似于 windows 下安装程序时的设置环境变量;genpath()addpath(genpath(”))原创 2016-12-09 17:41:51 · 820 阅读 · 0 评论 -
Linux C/C++ —— intent 工具,time 命令
Linux 下的 indent(缩进工具)可以把代码格式化成某种风格。$ indent -kr -i4 main.c-kr:表示 K&R 风格-i4:表示缩进 4 个空格的长度,如果没有指定 -nut (–no-tabs),则每 4 个缩进空格会自动用一个 Tab 代替。注意,indent 命令会直接修改原文件,而不是打印到屏幕上或者输出到另一个文件。这一点和很多 UNIX 命令不同。原创 2016-05-06 17:16:47 · 1258 阅读 · 0 评论 -
面向项目(一) —— 代码编写
代码有两种,一种是学生作品,面向学习,面向课堂作业;一种是企业作品,面向商业,面向健壮性。1. 使用宏定义#define COST_MAX (1<<28) // 2^28#define COST_MAX64 (1ULL << 60) // 2^60原创 2016-05-05 21:24:19 · 851 阅读 · 0 评论 -
面向项目(二)—— visual studio 的使用
1. 生成 lib 文件如果你当前正在使用 vs 写了一个工程,那么你想现在就生成一个 Lib文件(静态链接库文件,dll 为动态链接库,默认生成 .exe 文件),那么可以直接在“项目属性”上进行修改,项目属性-》配置属性-》常规-》配置类型,中修改即可,如下图所示。 2. 使用 lib 文件(1)包含头文件(所谓头文件,其实对应着 api 的声明)(2)链接 lib 文件1) 添加库目原创 2016-05-05 21:50:00 · 994 阅读 · 0 评论 -
构建复杂的应用程序 —— 重用与重构
实际中经常用到这样的问题:需要的程序部件和某个已有部件很像,但也略有不同。在这种情况下,一个简单想法就是把原来的代码复制一份,在其基础上修改。但是,一旦复制了代码,引入了重复片段,很多麻烦便会不可避免地出现。维护两份类似代码很麻烦,不但两者都可能需要修改,还要确保维护修改的一致性。重用的实现:通过继承和扩充面向对象编程技术为解决这方面的问题提供了支持,允许基于已有基类定义新类(派生类)。这种派原创 2016-05-25 11:41:48 · 1212 阅读 · 0 评论 -
面向项目(九)—— 交叉工具链
交叉编译:是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。工具链(toolchains):一般由编译器、连接器、解释器和调试器组成。读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台 (X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行原创 2016-05-12 08:46:36 · 863 阅读 · 0 评论 -
面向项目(七)—— C/C++的兼容性
#if defined(__cplusplus)#ifdef (__cplusplus)extern "C"{#endif...#ifdef (__cplusplus)}#endif原创 2016-05-11 16:09:30 · 1002 阅读 · 0 评论 -
面向项目(八)—— #if defined 与 #ifdef
#ifdef 和 #if defined 的区别在于,后者(#if defined)可以组成复杂的预编译条件,比如#if defined (AAA) && defined (BBB)xxxxxxxxx#endif#if defined (AAA) || VERSION > 12xxxxxxxxx#endif而 #ifdef 就不能用上面的用法,也就是说,当你要判断单个宏是否定义时,#ifde原创 2016-05-11 16:12:59 · 853 阅读 · 0 评论 -
构建复杂的应用程序(二)—— visual studio 下 C/C++ 项目开发
折叠代码块代码块:函数的实现,类的定义,以及自定义的一段逻辑(代码区域)。Ctrl + M + O: 折叠所有方法Ctrl + M + M: 折叠或者展开当前方法Ctrl + M + L: 展开所有方法自定义的逻辑(一段代码区域),可实现对一个函数内部的一段代码,或者跨函数:# pragma region regionName...# pargma endregion原创 2016-05-07 11:10:19 · 1069 阅读 · 0 评论 -
组态档(configuration file)与建构档
组态档,或者叫 configuration file,配置文件。组态档是用一种建构软件专用的特殊编程语言写的 CMake 脚本。使用组态档能改变程序的设置,而不用重新编译程序。CMake 的组态档文件为:CMakeLists.txt;Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++原创 2016-10-23 11:34:30 · 1370 阅读 · 0 评论 -
平常学习与实际应用场景
输入的或者待处理的数据的规模是不可同日而语的;对实时性的要求也是不一样的;对非法输入的考虑和判断也是不同的;原创 2016-09-25 15:02:03 · 888 阅读 · 0 评论 -
面向项目(十)—— 头文件、源文件的组织
头文件(1)宏定义原创 2016-05-13 00:15:07 · 1030 阅读 · 0 评论 -
鲁棒性的获得 —— 测试的架构
本文以排序函数进行说明;使用标准库函数作为参照对比;原创 2016-09-03 19:29:52 · 2051 阅读 · 0 评论 -
面向项目(六)—— 错误(异常)信息的书写
(1)groupMatrix has bad dimension.if exist('groupMatrix', 'var'), assert(size(groupMatrix, 2) == numFeats, 'groupMatrix has bad dimension');end原创 2016-05-08 08:51:06 · 830 阅读 · 0 评论 -
面向项目(十一)—— 库的使用
库的分类(1)标准库(Standard Libraries)(2)第三方库(The Third-party libraries)(3)自己的库(My libraries)原创 2016-05-18 21:20:51 · 798 阅读 · 0 评论 -
面向项目(五)—— #pragma
#pragma 属于预处理器指令(preprocessor)。原创 2016-05-07 11:17:29 · 1026 阅读 · 0 评论