一个优秀的程序员,往往有着良好的代码习惯,每个好习惯都是一笔财富。在写代码的时候,注意这些细节,可以让你的bug减少很多,快来学学吧!
1. 代码自测
在完成代码的时候,有些初级程序员往往会偷懒,不去检查自己的代码,结果一跑起来问题多多。对于项目来说,即使修改了一行很小的代码,都有可能出现各种各样的问题,所以自测一下非常重要。
入参校验是每个程序员的必备素养,很多低级bug都是不校验参数导致的。举个例子:如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数,「插入数据库直接异常」了。
在修改老接口时,一定要思考接口的兼容性,很多新手程序员因为考虑问题太简单而犯错,就会导致非常严重的后果。
有一定工作经验的程序员,往往会有个坏毛病,那就是不做注释。一般的代码没必要添加太多注释,但是,如果是「业务逻辑很复杂的代码」,真的非常有必要写「清楚注释」。清楚的注释,更有利于后面的维护。
5.使用完IO资源流,需要关闭
应该大家都有过这样的经历,windows系统桌面如果「打开太多文件」或者系统软件,就会觉得电脑很卡。当然,我们linux服务器也一样,平时操作文件,或者数据库连接,IO资源流如果没关闭,那么这个IO资源就会被它占着,这样别人就没有办法用了,这就造成「资源浪费」。
6.避免低级错误(如数组边界溢出,被零除等)
日常开发中,我们需要采取措施规避「数组边界溢出,被零整出,空指针」等运行时错误。
7.尽量不在循环里远程调用
远程操作和数据库操作都是比较消耗资源的,所以尽量不在循环里远程调用、不在循环里操作数据库,能「批量一次性查回来尽量不要循环多次去查」。
8.注意并发一致性问题
9.获取对象的属性,先判断对象是否为空
空指针异常是程序员常见问题之一,在想要获取对象属性时,要先判断是否为空,再获取对象的属性。
10.多线程异步优先使用线程池
- 它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。
- 提高响应速度。
- 重复利用。
同时呢,尽量不要所有业务都共用一个线程池,需要考虑「线程池隔离」。就是不同的关键业务,分配不同的线程池,然后线程池参数也要考虑恰当哈。
11. 手动写完代码业务的SQL,先拿去数据库跑一下,同时也explain看下执行计划。
手动写完业务代码的SQL,可以先把它拿到数据库跑一下,看看有没有语法错误嘛。有些小伙伴不好的习惯就是,写完就把代码打包上去测试服务器,其实把SQL放到数据库执行一下,可以规避很多错误的。
12.调用第三方接口,需要考虑异常处理,安全性,超时重试这几个点。
调用第三方服务,或者分布式远程服务的的话,需要考虑
- 异常处理(比如,你调别人的接口,如果异常了,怎么处理,是重试还是当做失败)
- 超时(没法预估对方接口一般多久返回,一般设置个超时断开时间,以保护你的接口)
- 重试次数(你的接口调失败,需不需要重试,需要站在业务上角度思考这个问题)
13.接口需要考虑幂等性
接口是需要考虑幂等性的,尤其抢红包、转账这些重要接口。最直观的业务场景,就是「用户连着点击两次」,你的接口有没有hold住。
14. 多线程情况下,考虑线性安全问题
在「高并发」情况下,HashMap可能会出现死循环。因为它是非线性安全的,可以考虑使用ConcurrentHashMap。所以这个也尽量养成习惯,不要上来反手就是一个new HashMap();
15.主从延迟问题考虑
先插入,接着就去查询,这类代码逻辑比较常见,这「可能」会有问题的。一般数据库都是有主库、从库的。写入的话是写主库,读一般是读从库。如果发生主从延迟,很可能出现你插入成功了,但是却查询不到的情况。
16.使用缓存的时候,考虑缓存跟DB的一致性,还有(缓存穿透、缓存雪崩和缓存击穿)
通俗点说,我们使用缓存就是为了「查得快,接口耗时小」。但是呢,用到缓存,就需要「注意缓存与数据库的一致性」问题。同时,还需要规避缓存穿透、缓存雪崩和缓存击穿三大问题。
云和数据作为一个深耕IT职业教育多年的教育者,目前的课程涵盖云计算、大数据、人工智能、虚拟现实、软件工程、用户体验设计、网络安全、电子商务等八大方向,结合企业实际用人需求,只为培养更多高端IT技术人才。