编程好习惯

1、修改完代码,记得自测一下

2、放入入参尽量都检验一下

你的方法处理,必须先校验参数,比如入参是否允许为空,入参长度是否符合你的预期长度。

3、修改老接口的时候,思考接口的兼容性

//老接口
void oldService(A,B);{
  //兼容新接口,传个null代替C
  newService(A,B,null);
}

//新接口,暂时不能删掉老接口,需要做兼容。
void newService(A,B,C);

4、对于复杂的代码逻辑,添加清楚的注释

5、使用完IO资源流,需要关闭

FileInputStream fdIn = null;
try {
    fdIn = new FileInputStream(new File("/jay.txt"));
} catch (FileNotFoundException e) {
    log.error(e);
} catch (IOException e) {
    log.error(e);
}finally {
    try {
        if (fdIn != null) {
            fdIn.close();
        }
    } catch (IOException e) {
        log.error(e);
    }
}

6、代码采取措施避免运行时错误

日常开发中,我们需要采取措施规避「数组边界溢出,被零整除,空指针」等运行时错误。

String name = list.get(1).getName(); //list可能越界,因为不一定有2个元素哈
if(CollectionsUtil.isNotEmpty(list)&& list.size()>1){
  String name = list.get(1).getName(); 
}

7、尽量不要在循环里远程调用、或者数据库操作,优先考虑批量进行

remoteBatchQuery(param);
for(int i=0;i<n;i++){
  remoteSingleQuery(param)
}

8、写完代码脑洞一下多线程执行会怎么样,注意一些并发一致性问题

9.获取对象的属性,先判断对象是否为空

if(object!=null){
   String name = object.getName();
}

10、多线程异步优先考虑恰当的线程池,而不是new thread,同时考虑线程池是否隔离

为什么优先使用线程池?使用线程池有这几点好处呀
它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。
提高响应速度。
重复利用。

11手动写完代码业务的SQL,先拿去数据库跑一下,同时也explain看下执行计划。

12.调用第三方接口,需要考虑异常处理,安全性,超时重试这几个点。

异常处理(比如,你调别人的接口,如果异常了,怎么处理,是重试还是当做失败)
超时(没法预估对方接口一般多久返回,一般设置个超时断开时间,以保护你的接口)
重试次数(你的接口调失败,需不需要重试,需要站在业务上角度思考这个问题
简单一个例子,你一个http请求别人的服务,需要考虑设置connect-time,和retry次数。
如果是转账等重要的第三方服务,还需要考虑「签名验签」,「加密」等

13.接口需要考虑幂等性

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。
查询操作
唯一索引
token机制,防止重复提交
数据库的delete删除操作
乐观锁
悲观锁
Redis、zookeeper 分布式锁(以前抢红包需求,用了Redis分布式锁)
状态机幂等

14. 多线程情况下,考虑线性安全问题

在「高并发」情况下,HashMap可能会出现死循环。因为它是非线性安全的,可以考虑使用ConcurrentHashMap。所以这个也尽量养成习惯,不要上来反手就是一个new HashMap();

15.主从延迟问题考虑

一般数据库都是有主库,从库的。写入的话是写主库,读一般是读从库。如果发生主从延迟,很可能出现你插入成功了,但是却查询不到的情况。
如果是重要业务,需要考虑是否强制读主库,还是再修改设计方案。
但是呢,有些业务场景是可以接受主从稍微延迟一点的,但是这个习惯还是要有吧。
写完操作数据库的代码,想下是否存在主从延迟问题。

16.使用缓存的时候,考虑缓存跟DB的一致性,还有(缓存穿透、缓存雪崩和缓存击穿)

缓存雪崩:指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。
缓存穿透:指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
缓存击穿:指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db

17 减少SQL语句的侵入,在业务层进行sql语句的判读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值