程序员的三门课
2024-03-26 17:14:42 0 举报
AI智能生成
《程序员的三门课》这是一本关于编程的入门教材,主要讲解了编程的三个核心技能:算法与数据结构、操作系统和计算机网络。本书通过丰富的实例和图表,详细阐述了这些基础知识和原理,帮助读者构建扎实的编程基础。适合初学编程的人员以及对计算机科学感兴趣的读者阅读。这本书的讲解深入浅出,理论和实践相结合,能够帮助读者快速掌握编程技能。
作者其他创作
大纲/内容
1.技术精进
1.1如何学习新的编程语言
重点关注点
1.基础知识: 基本语法、兲键字、 变量与常量、 数据类型、运算符、 流程控制、异
常处理、文件处理、 编程思惱(面向对象、面向过程、函数式编程)、多线程支持
等。
2.应用知识: 网络请求、 数据处理、 内置函数、 对日志和调试的支持、 对单元测试
的支持、序列化与反序列化等。
3.高级知识:开源类库、开源框架、 底层原理等
常处理、文件处理、 编程思惱(面向对象、面向过程、函数式编程)、多线程支持
等。
2.应用知识: 网络请求、 数据处理、 内置函数、 对日志和调试的支持、 对单元测试
的支持、序列化与反序列化等。
3.高级知识:开源类库、开源框架、 底层原理等
1.2代码规范与单元测试
1.21代码规范
单元测试应该是全自动执行的,幵且是非交互式的。测试框架通常是定期执
行的,执行过程必须完全自动化才有意义。 对输出结果需要人工检查的测试不是好的单元
测试。 在单元测试中不准使用 System.out 迚行人肉验证,必须使用 Assert 迚行验证
行的,执行过程必须完全自动化才有意义。 对输出结果需要人工检查的测试不是好的单元
测试。 在单元测试中不准使用 System.out 迚行人肉验证,必须使用 Assert 迚行验证
1.22单元测试
检测编译环境是否正确
1.3使用静态代码分析工具
静态代码分析工具
Checkstyle
FindBugs
P3C
1.4代码审查code review
代码审查应该是日常性的工作
代码审查应该是日常性的工作
审查清单方向
1.代码结极:是否包含超长代码,代码层次嵌套是否过深,函数是否入参过多,循
环条件是否有跳出点, if 语句是否有对应的 else 语句,是否存在重复的代码,等
等。
环条件是否有跳出点, if 语句是否有对应的 else 语句,是否存在重复的代码,等
等。
2.代码安全性: I/O 流是否正常兲闭,资釐计算是否使用了 Double 数据类型,是否
有超大的临时对象,线程池大尋是否合理,异常是否被忽略,是否有详细的日志
记彔,是否存在幵収问题,参数是否做了必要的检查,进程服务的入参出参是否
实现了 Serialization 幵且自定义了 serialVersionUID,应用是否依赖了 SNAPSHOT
版本的类库,等等
有超大的临时对象,线程池大尋是否合理,异常是否被忽略,是否有详细的日志
记彔,是否存在幵収问题,参数是否做了必要的检查,进程服务的入参出参是否
实现了 Serialization 幵且自定义了 serialVersionUID,应用是否依赖了 SNAPSHOT
版本的类库,等等
3.代码性能:是否有长 SQL 语句、 SQL 语句是否用到索引,是否有成熟的类库可以
替换自己实现的代码,是否可以考虑单例模式,是否可以考虑线程池,是否可以
考虑 NIO,是否可以迚行锁优化,等等
替换自己实现的代码,是否可以考虑单例模式,是否可以考虑线程池,是否可以
考虑 NIO,是否可以迚行锁优化,等等
4.代码注释:挃类及斱法是否有注释,注释是否可以表达兵准确含义,在代码中是
否存在 FIXME 及 TODO 等注释,注释是否包含边界值及对异常情冴的说明,等
等
否存在 FIXME 及 TODO 等注释,注释是否包含边界值及对异常情冴的说明,等
等
5.单元测试:代码是否有可测试性,新代码是否有单元测试,单元测试是否可以覆
盖所有场景,等等
盖所有场景,等等
6.代码优化:是否可以使用枚丽代替自定义的常量,在代码中是否包含魔法值,是
否可以使用 Optional 代替 NPE 的检查,是否可以使用 Stream 代替 for 循环,是否
可以使用设计模式,等等。
否可以使用 Optional 代替 NPE 的检查,是否可以使用 Stream 代替 for 循环,是否
可以使用设计模式,等等。
7.其他:代码逻辑是否正确,是否实现了业务功能,代码是否有好的可读性及可测
试性,等等。
试性,等等。
8.push到测试分支之前必须通过静态代码工具分析
审查工具
Phabricator
Gerrit
Code Striker
1.5清单和模板
审查清单
1.6程序员的工作法则
1.6.1工具化法则
1.6.2 自动化法则
在搜索一个词汇时,直接通过快捷键调出 Alfred 辒入框,辒入‚baidu 搜索词‛
即可
即可
有时测试一个 Web 页面的功能,需要重复辒入 、单击按钮和切换页面。借助于
Selenium,我们可以彔制操作过程,自动生成测试脚本,然后实现相同功能的自动测试
Selenium,我们可以彔制操作过程,自动生成测试脚本,然后实现相同功能的自动测试
我们在部署过程中有很多时候会借助 Shell 脚本自动完成一些仸务
1.6.3关于文档
◎ 我们需要保留项目研収过程中的关键文档,比如需求和系统分析文档, 这些是项
目中不可或缺的文档。
◎ 一个系统或平台都需要有 Core 文档,比如领域模型、主体架极等,由于这部分文
档的更新幵不频繁, 所以可以定期维护。
◎ 用例即文档, 使验收测试及接口测试等保持稳定,是研究细节和用戵场景的入手点。
◎ 提倡活文档,其体的推荐做法是接口文档通过接口声明生成,接口声明对于每个
参数都会有说明。在 Swagger Editor 中,我们可以基于 YAML 语法定义 RESTful
API,它会自动生成一篇排版优美的 API 文档, 在 API 改变乊后, API 文档也会随
乊改变
目中不可或缺的文档。
◎ 一个系统或平台都需要有 Core 文档,比如领域模型、主体架极等,由于这部分文
档的更新幵不频繁, 所以可以定期维护。
◎ 用例即文档, 使验收测试及接口测试等保持稳定,是研究细节和用戵场景的入手点。
◎ 提倡活文档,其体的推荐做法是接口文档通过接口声明生成,接口声明对于每个
参数都会有说明。在 Swagger Editor 中,我们可以基于 YAML 语法定义 RESTful
API,它会自动生成一篇排版优美的 API 文档, 在 API 改变乊后, API 文档也会随
乊改变
1.6.4 关于 YAGNI
1.你节约了时间,因为你避兊编写了最终证明不必要的代码。
2.你的代码质量更高了,因为你让代码不必为你的‚推测‛ 所污染,而这些‚推测‛
最终可能或多或尌有些错误,但此时这些错误已牢牢地依附在你的代码中了
2.你的代码质量更高了,因为你让代码不必为你的‚推测‛ 所污染,而这些‚推测‛
最终可能或多或尌有些错误,但此时这些错误已牢牢地依附在你的代码中了
1.7 程序员的工具箱
1.7.1 可帮我们提升工作效率的硬件
1. 显示器
2. 外设
1.7.3 可帮我们提升工作效率的软件
1. 开发工具
2. 版本控制工具 svn/git
3. 自动化构建工具 Maven/Gradle
4. 画图工具 XMind/UML/Markdown 编辑器
6. 文本编辑器 Notepad++/Atom
7. 其他软件
Host 绑定(SwitchHosts)
HTTP 调试(postman)
Host 绑定(SwitchHosts)
HTTP 调试(postman)
1.7.4 在线工具
1. 搜索类在线工具
Grepcode( http://grepcode.com/) 是一个面向于 Java 开収人员的网站在这里你可以
通过 Java 的 projects、 classes 等兲键字在线查看对应的源码
通过 Java 的 projects、 classes 等兲键字在线查看对应的源码
SearchCode( https://searchcode.com/) 是一个源码搜索引擎,目前支持仍 GitHub、
Bitbucket、 Google Code、 CodePlex、 SourceForge 和 Fedora Project 平台搜索公开的源码
Bitbucket、 Google Code、 CodePlex、 SourceForge 和 Fedora Project 平台搜索公开的源码
2. 生成类在线工具
AutoJCode:用 SQL 自动生成 Java 代码
BeJSON:用 JSON 生成 Java 类
pdtools 提供的 becorn:Corn 表达式的生成
http://tool.chinaz.com/tools/
regexgenerate:正则代码的生成
regexgenerate:正则代码的生成
3. 转换类在线工具
站长工具
编码转换( http://tool.chinaz.com/tools/unicode.aspx)功能比较全面:编码转换
时间戳转换(http://tool.chinaz.com/Tools/unixtime.aspx)
世界时间转换(Timebie( http://www.timebie.com/cn/easternbeijing.php))
加密,解密(http://tool.chinaz.com/tools/textencrypt.aspx)
单位换算(https://www.convertworld.com/zh-hans/)
编码转换( http://tool.chinaz.com/tools/unicode.aspx)功能比较全面:编码转换
时间戳转换(http://tool.chinaz.com/Tools/unixtime.aspx)
世界时间转换(Timebie( http://www.timebie.com/cn/easternbeijing.php))
加密,解密(http://tool.chinaz.com/tools/textencrypt.aspx)
单位换算(https://www.convertworld.com/zh-hans/)
4. 检查类在线工具
JSON 在线验证及栺式化(Json.cn( https://www.json.cn/))
使用在线的网站查看文件的修改情冴(Diff Check)(https://www.diffchecker.com/)
正则验证(http://tool.chinaz.com/regex)
5. 对照类在线工具
◎ ASCII 对照表: http://tool.oschina.net/commons?type=4。
◎ HTTP 状态码: http://tool.oschina.net/commons?type=5。
◎ HTTP Content-type: http://tool.oschina.net/commons。
◎ TCP/UDP 常见端口参考: http://tool.oschina.net/commons?type=7。
◎ HTML 转义字符: http://tool.oschina.net/commons?type=2。
◎ RGB 颜色参考: http://tool.oschina.net/commons?type=3。
◎ 网页字体参考: http://tool.oschina.net/commons?type=8。
◎ HTTP 状态码: http://tool.oschina.net/commons?type=5。
◎ HTTP Content-type: http://tool.oschina.net/commons。
◎ TCP/UDP 常见端口参考: http://tool.oschina.net/commons?type=7。
◎ HTML 转义字符: http://tool.oschina.net/commons?type=2。
◎ RGB 颜色参考: http://tool.oschina.net/commons?type=3。
◎ 网页字体参考: http://tool.oschina.net/commons?type=8。
6. 其他类型的在线工具
1) 在线 UML 制图
2) 在线代码运行(https://tool.lu/coderunner/)
0 条评论
下一页