IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌 全国咨询热线:0371-67988003
课程 请选择课程
    校区 请选择校区
      • 华为
        授权培训中心
      • 腾讯云
        一级认证培训中心
      • 百度营销大学
        豫陕深授权运营中心
      • Oracle甲骨文
        OAEP中心
      • Microsoft Azure
        微软云合作伙伴
      • Unity公司
        战略合作伙伴
      • 普华基础软件
        战略合作伙伴
      • 新开普(股票代码300248)
        旗下丹诚开普投资
      • 中国互联网百强企业锐之旗
        旗下锐旗资本投资

      提升 | 高级程序员才会注意的16个细节

      • 发布时间:
        2020-12-07
      • 版权所有:
        云和教育
      • 分享:
      一个优秀的程序员,往往有着良好的代码习惯,每个好习惯都是一笔财富。在写代码的时候,注意这些细节,可以让你的bug减少很多,快来学学吧!

      1. 代码自测

      在完成代码的时候,有些初级程序员往往会偷懒,不去检查自己的代码,结果一跑起来问题多多。对于项目来说,即使修改了一行很小的代码,都有可能出现各种各样的问题,所以自测一下非常重要。
      2.入参校验
      入参校验是每个程序员的必备素养,很多低级bug都是不校验参数导致的。举个例子:如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数,「插入数据库直接异常」了。
      3.接口兼容
      在修改老接口时,一定要思考接口的兼容性,很多新手程序员因为考虑问题太简单而犯错,就会导致非常严重的后果。
      4.添加注释
      有一定工作经验的程序员,往往会有个坏毛病,那就是不做注释。一般的代码没必要添加太多注释,但是,如果是「业务逻辑很复杂的代码」,真的非常有必要写「清楚注释」。清楚的注释,更有利于后面的维护。

      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技术人才。