代码改变世界

完整后端开发流程

2018-05-27 11:36  乘着风去破浪  阅读(7929)  评论(0编辑  收藏  举报

所有的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