发布时间:2023-02-13 11:30
author: 乘着风去破浪
所有的bug修复都要回归落地到细节,所有的设计也要回归落地到细节,所以,不浮躁,不着急,重视细节;这样的流程就是省时间的。
不仅仅要关注功能实现(如果只是一门心思只是从功能实现考虑问题,那么后期的代码会乱糟糟),也要考虑代码架构灵活性,健壮性,可维护性等等;
做事要抓住核心,无论是做架构设计,还是做自测等等;
做事不能把需求当做上帝,作为一个项目参与者,你要信奉的是的逻辑,符合用户使用的逻辑,要有自己的逻辑思考和批判精神;这是活力和成长的来源;
工欲善其事必先利其器:把编辑器字体,把ssh客户端字体等等设置舒服的,不断挖掘它们最好的,做到提升效率
1.架构概要设计
多个应用之间的调用怎么做(异步,同步,http,tcp,自己开发,还是使用开源的,还是在开源基础上二次开发做精简或者扩展);
什么情况使用什么技术,依据是什么?(比如你数据量以及数据增长不大,另外,仅需要简单查询,倒排索引可以考虑使用lucene,而不是elasticsearh或者solr)
网络调用,超时时间怎么设置,设置多少合适,怎么做容错
数据结构如何设计,数据怎么存储,(倒排,读文件,还是nosql);后面要考虑数据备份,数据量大的情况做sharding等,还有一致性问题等;
单个应用中的处理流程怎么写(考虑复用,考虑结合设计模式进行抽象);
设计模式:知道什么场景需要用什么设计模式?比如,需要创建单例,就用单例+工厂方法模式。需要模板,就用模板方法。需要观察就用观察者模式。需要生产消费,就用生产者消费者模式。
要考虑,随着时间变化,数据量是否增速快,如何应对这种数据增速快等情况,架构也要迭代。
2.日志
应用日志打印,耗时统计,
3.异常
单个应用的异常处理,保证健壮性;
具体比如使用一个对象的方法前,看看对象是不是为空,看看你传递的参数(比如,你使用一个变量来取subList(1,x),而x可能为0的情况,对不对。
TODO:只是调用链的最外层打印日志,里面不要打印日志;
4.配置化
JVM启动配置化,能够做到不需要打包,直接读取配置重启即可等;
5.测试
测试要抓住核心进行测试,如果僻重就轻,那么测试的意义就没有那么大了;
工欲善其事必先利其器;要学会Idea的高级调试技巧等。这个非常重要,可以提高效率,也可以让你调试更精准;要不断挖掘idea开发工具的提供的特性,提升你调试和开发效率。
单元测试,集成自测等,mock测试,造数据等;
要采用多版本管理,一个版本OK了,如果要复现或者修复一个问题,应该使用拉一个新分支,测试通过了,再合并到主干,这样在问题爆发期能够保证一个可用可测试的版本,
而不是靠越改越乱,甚至搞乱了;
一般单元测试要至少包括两个:一个是指定的输入参数case,一种是尽量随机组合所有可能的参数组合(把所有参数放到数组中,采用随机数生成索引获取值进行组合);
有些代码需要这样的测试,数据是不是有满足case的数据,这个时候就需要Mock一个判断,然后打印一个日志等,来证明你的猜想;
要有一种方法验证你的数据,比如你使用Lucen倒排索引了你的数据,你要验证;可以借助Luke等,或者程序Mock的方法;
程序中进行埋入mock代码是一种开发者可以一切场合都适用的方法;
当你提测一个版本后,就不要在这个版本的主干开发了,要挪到分支,测试通过,再合并到master,而且要注意reivew下;
修改bug不是仅仅为了解决功能,也要考虑代码的可扩展,可维护等等;
6.优化
编写施压代码,进行压测,分析jvm的gc,机器的内存,cpu,网络带宽占用,查看网络连接状态;
7. 心情:
解决bug时,要心平气和,要冷静分析,要各个击破,逐个解决,不要急。
8.netty和lucene
html如何将纵向菜单快速转换成横向菜单,Jquery系列之横向纵向菜单
ENVI_IDL:使用反距离权重法选取最近n个点插值(底层实现)并输出为Geotiff格式(效果等价于Arcgis中反距离权重插值)
DW:优化目标检测训练过程,更全面的正负权重计算 | CVPR 2022
JAVA 基础 / 第二课:用命令行中编写第一个 JAVA 程序
【Git】Git、GitHub和Gitee的使用(Git新手入门指南)
java解析微信小程序的code,微信小程序 获取微信OpenId详解及实例代码
[NAS]MCUNet: Tiny Deep Learning on IoT Devices
python识别几何图形_如何使用Python进行面部识别?