源代码

分析一套源代码的代码规范和风格并讨论如何改进优化代码

拈花ヽ惹草 提交于 2019-11-30 19:49:34
结合工程实践选题相关的一套源代码,根据其编程语言或项目特点,分析其在源代码目录结构、文件名/类名/函数名/变量名等命名、接口定义规范和c等方面的做法和特点; 列举哪些做法符合代码规范和风格一般要求; 列举哪些做法有悖于“代码的简洁、清晰、无歧义”的基本原则,及如何进一步优化改进; 总结同类编程语言或项目在代码规范和风格的一般要求。 基于工程实践选题《基于VSLAM的室内地图三维重建系统设计》,讨论的是ORB SLAM算法源码。开源代码是Linux环境下的C++编译和运行。 一、 分析源代码目录结构 图1.ORB SLAM算法开源代码文件   在ORB SLAM算法开源代码中:   build:CMake编译是分内部编译和外部编译两种的,如果工程量很小,可以是内部编译。但是,为了养成良好的编译风格,增加代码的可读性,我们通常还是采用的外部编译方式,即建一个build文件夹,在里面进行编译,也是为了增加代码可读性,把整个工程整理的很清楚。   bin:用来放编译好的可执行二进制文件,二进制文件就是可以直接运行的程序。   src:用来放源代码。   lib:用来放编译好的库文件夹,库文件是为二进制提供函数。   include:用来放头文件。   CMakeLists.txt:cmake的所有语句。   database(rgbd_dataset_freiburg1_xyz):存放数据

第三十章 编程工具

核能气质少年 提交于 2019-11-30 16:20:41
设计工具 目前的设计工具主要就是那些能创建设计图表的图形化工具。 源代码工具 编辑 集成开发环境(IDE); 在编辑器中进行编译和错误检测; 与源代码控制工具、build工具、测试工具、除错工具集成; 显示程序的扼要视图或大纲视图; 跳转到类的定义、子程序定义、变量定义处; 跳转到使用某个类、子程序、变量的全部位置; 针对特定语言的编排格式; 针对正在编辑的语言的交互式帮助; 花括号匹配; 常用语言的结构模板; 智能缩进; 自动化的代码转换或重构; 可以用熟悉的编程语言进行宏编程; 列出查找的字符串,使常用的字符串无需重新键入; 在查找和替换时可用正则表达式; 在一组文件中进行查找和替换; 同时编辑多个文件; 双列式的diff对比; 多级编辑动作撤销; 针对多个文件的字符串查找和替换; diff工具; merge工具; 源代码美化器; 生成接口文档的工具; 模板; 交叉引用工具; 类的继承体系生成器。 分析代码质量 吹毛求疵的语法/语义检查器; 尺度报告器。 重构源代码 重构器; 结构改组工具; 代码翻译器。 版本控制 源代码控制; 依赖关系控制,类似UNIX下提供的make工具; 项目文档的版本管理; 将项目的工件关联到一起,这样当需求发生变更时,你能找出收影响的代码和test cases。 可执行码工具 产生目标码 编译器与链接器; Build 工具; 程序库; 容器类;

深度硬核文:Nginx的301重定向处理过程分析

旧城冷巷雨未停 提交于 2019-11-30 15:56:55
一,序言   “晚上九点,办公室里烟雾缭绕,工作进度依然没有什么进展。王二胖打开了十来个页面,一篇篇技术文章打开,关闭,Nginx不停的重启测试,在试过十来篇技术文章中的方案,经过两个小时的测试之后,王二胖终于找到了一个解决301错误跳转的可行解决方案。时间已经到了晚上十一点多."   这样的场景,在我们的办公室里天天可见。互联网上有很多Nginx 301问题处理方案的错误解答,比如自动加斜杠,端口丢失,暴露内部端口号等,极多量的文章基本就是人云亦云,没有完全弄明白Nginx如何处理301状态码的。甚至对于一些关键性的配置信息的解释是完全错误的。本着源代码就是最正确的文档的原则,我阅读了一遍Nginx处理301问题的相关源代码。 最终发现,Nginx处理301 Moved Permanently的逻辑相当简单,只有六种分支。 二,Nginx的301状态码处理逻辑设计   让我们先看看Nginx的逻辑设计是怎么样的。   HTTP协议中3xx开头的状态响应码都是表示重定向的响应。根据RFC的定义   301 Moved Permanently   302 Found   303 See Other   307 Temporary Redirect   301是永久重定向。如果使用Nginx作为HTTP 服务器,那么当用户输入一个不存在的地址之后,基本上会有两种情况,返回404状态码

python 查看源代码

ε祈祈猫儿з 提交于 2019-11-30 09:46:56
使用包inspect 1 import inspect 2 from mxnet import contrib 查看模块所在路径: 1 inspect.getsourcefile(contrib) 查看源码: 1 inspect.getsourcelines(contrib) 参考: https://zhuanlan.zhihu.com/p/37095163 来源: https://www.cnblogs.com/lxc1910/p/11577355.html

VS2017/VS 2019查看源代码

自古美人都是妖i 提交于 2019-11-30 08:19:32
通过VS2017/VS 2019使用F12 查看DLL源代码 今天在一本书中偶然看到原来VS2017中是可以查看dll中的源码,具体步骤是:工具>选项>文本编辑器>c#>高级>启用导航到反编译源。 注意:第一次使用反编译功能时,VS2017会弹出一个确定弹框,点击确定就饿可以了。之前有用过Rider这个IDE也是有这个功能的。 来源: https://www.cnblogs.com/51net/p/11575164.html

就连中国银联都是它的客户,这家商城系统提供商凭什么?

非 Y 不嫁゛ 提交于 2019-11-30 04:17:08
“源代码品质”一直是软件行业永恒的话题。无论是软件源代码的编写规范、源代码的标准注释还是源代码通俗易懂。纵观国内外软件开发企业,无一不是将源代码品质作为企业发展的核心目标。 跻身世界500强的中国银联,起初只是银联跨行交易清算系统,为实现商业银行系统间的互联互通和资源共享,保证银行卡跨行、跨地区和跨境的使用。但谁也没有想到中国银联会涉足电商平台,发展海外购物,到如今汇集了来自多个国家和地区具有异国情调的特色商品和美誉商户。 银联海购成功的秘诀之一,在于“交易安全”。通过在每一步交易汇款层层加密,银联的闪付安全又便捷,在国际上已经得到了广泛应用。 而现在,随着软件的更新与迭代升级,在合作伙伴shop++的帮助下,银联海购愈发对平台“交易安全”的策略有了更为精准的把控。 为了对每一个交易环节安全把控,采用XSS防御、CSRF防御、SQL安全防御、RSA传输加密、暴力破解防护等等核心技术,有效保障了平台的订单交易安全;同时为更适合跨国家用户的使用,支付国际化,实现中文、英文、韩文等多国语言,拓展也是相当方便,以此为银联海购提供相应的技术支持及服务。 众所周知, 民生银行是中国大陆第一家由民间资本设立的全国性商业银行,2019年7月,发布2019《财富》世界500强:位列232位。而shop++与民生银行的“结缘”历经了一年多的时间。 接到这个项目后,市场部通过前期大量方案预估

openJdk和sun jdk的区别

你说的曾经没有我的故事 提交于 2019-11-30 03:12:47
使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,OpenJDK是JDK的开放原始码版本,以GPL(General Public License)协议的形式放出(题主提到的open就是指的开源)。在JDK7的时候,OpenJDK已经作为JDK7的主干开发,SUN JDK7是在OpenJDK7的基础上发布的,其大部分原始码都相同,只有少部分原始码被替换掉。使用JRL(JavaResearch License,Java研究授权协议)发布。至于OpenJDK6则更是有其复杂的一面,首先是OpenJDK6是JDK7的一个分支,并且尽量去除Java SE7的新特性,使其尽量的符合Java6的标准。关于JDK和OpenJDK的区别,可以归纳为以下几点: 1.授权协议的不同: OpenJDK采用GPL V2协议放出,而SUN JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。 OpenJDK不包含Deployment(部署)功能:部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板

Android应用程序的Activity启动过程简要介绍和学习计划

情到浓时终转凉″ 提交于 2019-11-29 23:20:12
在Android系统中,Activity和Service是应用程序的核心组件,它们以松藕合的方式组合在一起构成了一个完整的应用程序,这得益于应用程序框架层提供了一套完整的机制来协助应用程序启动这些Activity和Service,以及提供Binder机制帮助它们相互间进行通信。在前面的文章 Android进程间通信(IPC)机制Binder简要介绍和学习计划 和 Android系统在新进程中启动自定义服务过程(startService)的原理分析 中,我们已经系统地介绍了Binder机制和Service的启动过程了,在本文中,简要介绍Activity的启动过程以及后续学习计划。 在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以在内部通过调用startActvity接口启动新的Activity,依此类推,每一个Activity都可以在内部启动新的Activity。通过这种连锁反应,按需启动Activity,从而完成应用程序的功能。 这里,我们通过一个具体的例子来说明如何启动Android应用程序的Activity。Activity的启动方式有两种,一种是显式的,一种是隐式的,隐式启动可以使得Activity之间的藕合性更加松散,因此

C语言条件编译(#if,#ifdef,#ifndef,#endif,#else,#elif)

戏子无情 提交于 2019-11-29 20:08:24
1、条件编译介绍 条件编译(conditional compiling)命令指定预处理器依据特定的条件来判断保留或删除某段源代码。例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代码的各种不同版本。 条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾。条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else 命令。以 #if 开头的条件编译区域具有下面的格式: #if 表达式1 [ 组1] [#elif 表达式2 [ 组2]] ... [#elif 表达式n [ 组n ]] [#else [ 组n+1 ]] #endif 预处理器会依次计算条件表达式,直到发现结果非 0(也就是 true)的条件表达式。预处理器会保留对应组内的源代码,以供后续处理。如果找不到值为 true 的表达式,并且该条件式编译区域中包含 #else 命令,则保留 #else 命令组内的代码。 组 1、组 2 等代码段,可以包含任意 C 源代码,也可以包含更多的命令,包括嵌套的条件式编译命令。在预处理阶段结束时,没有被预处理器保留以用于后续处理的组会从程序中全部删除。 2、#if 和 #elif 命令 作为 #if 或 #elif 命令条件的表达式,必须是整数常量预处理器表达式。这与普通的整数常量表达式不同,主要区别在于: (1