全色网

春暖花开sex8 谈谈冷静性编程

         发布日期:2024-09-21 14:52    点击次数:81

春暖花开sex8 谈谈冷静性编程

春暖花开sex8

冷静性编程关于法子员来说是一种浮松的代码民风,是为了保护我方的法子在弗成未知的相称下,幸免带来更大的碎裂性崩溃,使得法子在造作发生时,依然好像云淡风轻的处理,但好多法子员入行好多年,写出的代码依然皆是深闭固距,在CodeReview常常常性的会被东谈主反问,这种情况出现的概率极低,有必要去作念限制吗?,有必要去作念处理吗?

举个例子

一、一个很简便的器具类:已毕的功能很简便,等于列出在初始时辰与收尾时辰之间的统统的年月,看这段代码有什么问题?

public static List getDayList(Date start, Date end){ if(end ==null){ end = new Date; } if(start ==null){ start = end; } if(start.after(end)){ return null; } // 初始时辰 Calendar calBegin=Calendar.getInstance; calBegin.setTime(start); calBegin.set(calBegin.get(Calendar.YEAR),calBegin.get(Calendar.MONTH), 1); // 收尾时辰 Calendar calEnd =Calendar.getInstance; calEnd.setTime(end); calEnd.set(calEnd.get(Calendar.YEAR),calEnd.get(Calendar.MONTH), 2); List dateList = new ArrayList; while (calBegin.before(calEnd)){ dateList.add(format(calBegin.getTime,"yyyyMM")); calBegin.add(Calendar.MONTH,1); } return dateList; }

初看一下,嗅觉没什么问题,该判空的也判空了,但真是莫得问题吗?假定初始时辰为2020-01-01,而收尾时辰为20202020-01-01,这将出现什么情况?看到这里梗概环球还是昭彰了,初始时辰与收尾时辰的打消莫得被铁心,这就可能会导致dateList爆满,从而导致内存暴涨,会平直导致CPU暴涨,导致工作卡死。

二、再来看一个例子:一个简便的往部队里面放入一个元素,然后在从部队里面取出元素进行业务逻辑处理,典型的分娩者-破钞者的这样一个使用场景,这里有什么问题?

class Test{ private static BlockingQueue blockingQueue=new LinkedBlockingQueue; public static void add(String element){ blockingQueue.add(element); } public static void execute{ String element=blockingQueue.poll; if(element!=null){ //处理业务逻辑 } }}

这个例子,比前边一个例子略微简便些,梗概环球一看可能就昭彰了,blockingQueue莫得缔造大小,是一个无界部队,若是因为破钞的业务逻辑处理慢的情况,可能也会导致Queue的数据大小弗成控,从而导致内存暴涨。

通过上述两个简便的例子,不难发现,均是遗漏了关于代码的冷静性编程,从而带来了法子实行的弗成控要素,最终均会导致工作卡死,业务中断,那么冷静性编程在编程的本当事者要要研讨哪些方面呢?

常见的冷静性编程方法春暖花开sex8

一、严把参数质地关

在冷静性编程的眼里,任何高下流的参数均是弗成置信的,均为作念出假定,若是上游调用方给出的参数不准确,将作何响应,因此参数的检测是必弗成少的。

参数的查抄主要在以下几个方面研讨

1、参数的容颜是否存在问题

2、参数的取值规模是否在预期规模内,尤其是畛域问题

3、参数的类型是否合乎条目

4、多个参数的传值是否合乎业务逻辑,比如有些参数之间是存在互斥的,比如有一些计较金额的参数,是要倨傲一定的计较公式.......

二、相称的处理机制是否优雅?

好多法子员为了图省事,平直在代码里面一个大的try....catch,企图通过一个try....catch 去处理统统相称问题,这是典型懒的手脚。

一般来说不同类型的相称处理的时势均有可能存在着各异,比如有些情况下的相称,如集会相称,通过一定的重试机制就能处理。而有一些幂等的相称,是不错平直进行忽略,因此奈何进行优雅的相称处理,关于冷静性编程尤为蹙迫。

需要针关于不同的相称进行针对性的处理,当先要关于可能产生的相称进行分类,然后提倡以下问题

1、该相称是否不错通过重试复原?

2、该相称是否不错通过兜底设施复原?

3、该相称是否属于平时的相称,举例幂等相称?

4、该相称是否需要东谈主工侵略?

........

草榴社区

另外浮松的造作码策划,关于调用方来说,也较为蹙迫,调用方能通过造作码能了了的知谈,该造作是属于一个什么场景下的相称,是业务不符逻辑如故系统层面的?是一个严重的如故一个一般的相称等等。

三、在法子里面常使用断言进行里面查抄

在法子里面要常常性的插入查抄点,用于考证法子在某些特定的场景下,法子的实行依然合乎预期,比如关于一个集聚进行排序,那么咱们是否不错袭取断言来查抄这个集聚是否是实在有序的,从而保证法子的实行和实质的后果是合乎预期的。

临了

冷静性编程是踏实性树立中很蹙迫的一个想维,是能灵验擢升系统踏实性,减少了线上故障发生,提高用户体验的很蹙迫的妙技春暖花开sex8,好多冷静性编程是不错通过CR、代码编程圭表以及辅以缝隙扫描器具去发现和处理,让问题尽可能的在上线前发现和处理。



 
友情链接:

Powered by 可乐橾视频在线 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024