精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關于防御性編程,你應該知道的事

開發 前端
關于防御性編程,這一概念開始來自于汽車的防御性駕駛技術,意為你永遠無法確定另一位司機將要做什么,才能確保他人做出危險動作時不會傷害到你。

提起編程,對于程序員同學而言并不陌生,關于防御性編程相信大家也有所耳聞,但是它具體包括哪些內容呢?又有哪些行之有效的處理方案呢?我們又該如何正確應用呢?

本文作者結合實際工作中的一些應用經驗,來全面解析一下防御性編程。

本文主要內容:

  • 什么是防御性編程      
  • 防御性編程的重要性
  • 輸入檢查          
  • 斷言的應用        
  • 錯誤處理          
  • 隔離              
  • 防御策略及建議    

1. 什么是防御性編程

關于防御性編程,這一概念開始來自于汽車的防御性駕駛技術,意為你永遠無法確定另一位司機將要做什么,才能確保他人做出危險動作時不會傷害到你。

防御性編程應用過程中,并不是指讓你從保護自身,對他人持有“批判或攻擊”的態度,而是將保護的意識落地到自身程序上,通過一些防御手段讓你的代碼程序不因傳入的錯誤數據而出錯崩潰。大家通常會說,“代碼有問題很正常的呀”,的確是這樣,那更應該在編寫程序的時候提高防御性的重要性,尤其核心程序能力,做好程序錯誤影響的包容性。

2. 防御性編程的重要性

隨著目前互聯網已滲透到各行各業,每個細微的風險問題都可能會被放大,足以影響整個行業。

  • 1996年6月4日,歐洲航天局的 Ariane 5 Flight 501 在起飛后 40 秒被引爆。因為導航軟件里的一個 bug,這個價值 10 億美金的運載火箭不得不自毀。
  • 2019年1月,拼多多被爆出現重大BUG,用戶可領100元無門檻券,造成大批用戶開始‘薅羊毛’,一晚上200多億都是話費充值。
  • 2019年5月時候,部分用戶反映其支付寶出現網絡故障,賬號無法登錄或支付。支付寶官方表示,該故障是由于杭州市蕭山區某地光纖被挖斷導致,這一事件造成部分用戶無法使用支付寶。

系統服務的穩定性對于企業來說非常重要,不僅僅會對企業帶來直接的經濟損失,甚至會對行業、人們的生活造成非常嚴重的影響。

3. 輸入檢查

在學習編碼的時候,估計大家都聽過“不要相信用戶的輸入”,指的就是對用戶輸入做檢查的必要性。談到輸入,常見Web開發主要包括以下兩個方面:

3.1 檢查所有來自系統外部的數據

在系統建設過程中,我們經常會需要跟外部系統做數據交互處理,這里包括:文件、接口、消息隊列、表單用戶輸入等等,對于來自系統外部輸入的數據內容,我們需要明確做到:

  • 數據格式是否準確
  • 數據類型是否準確
  • 數據長度是否準確

對數據做預期準確性檢查,保證輸入數據在我們程序的可接受范圍以內。其實,所有的安全問題的本質都是信任的問題。數據檢查,這個跟車站、機場的安全檢查相似。通過一個安全檢查(過濾,凈化)的過程,可以梳理未知的人或物,使其變得可信任。被劃分出來的具有不同信任級別的區域,我們稱為信任域,劃分兩個不同信任域之間的邊界,我們稱之為信任邊界。對于異常數據處理情況,做好防御檢查的,同時需要做好日志記錄,以防追后賬呢,哈哈~

3.2 檢查接口API的參數值

對于系統內部接口API請求,需要檢查程序的輸入參數的值。這個跟檢查來自外部系統的數據一樣。

/**
* 請求處理通用類
**/
public class CommonRequest {
@NotBlank(message="參數str不能為空")
private String str;
@NotNull(message = "參數i不能為空")
private Integer i;

@Min(value =0,message = "最小值不能小于0")
private int min;

@Max(value=100,message = "最大值不能大約100")
private int max;
}

通常情況下,需要驗證如下幾項:

  • 字段必傳和非必傳
  • 字段類型是否一致
  • 參數值是否合法
  • 長度是否符合要求

對于接口參數/字段異常情況,大家可以按照以下思路來驗證問題:

  • Q1:如果參數缺失或者漏傳,會有默認值么?
  • Q2:如果參數問題,業務邏輯會發生哪些不合理的情況?
  • Q3:字段缺失、不合法情況,對于寫操作,是否會造成垃圾數據的產生?

注意:補充一個關鍵情況,需要結合業務場景來評估可能的影響范圍。

必要情況,設置白名單而不是黑名單。

舉個栗子,在你設置圖像擴展名的時候,不要設置無效的類型,而是檢查有效的類型并排除其他類型。在 PHP 有無數的開源校驗庫,讓你的工作更簡單。

要記?。哼M攻是最好的防守。總而言之,不要將代碼外部的函數調用或方法調用想得太過美好。請確保你調用外部的API和庫之前理解并測試了錯誤。

4. 斷言的應用

4.1 何謂斷言?

所謂斷言,是指在開發期間使用的,讓程序在運行時進行自檢的代碼。通常是一個子程序或者宏。

斷言的目的為了表示與驗證軟件開發者預期的結果,當程序執行到斷言的位置時,對應的斷言應該為真;若斷言不為真時,程序會中止執行,并給出錯誤信息。

舉個例子:

如果系統假定一份數據信息文件所包含的記錄數不超過20000,那么程序中可以設置一個斷定記錄數<=20000 的斷言。只要 記錄數<= 20000,這一斷言都不會觸發,然而一旦記錄數超過20000,它就會斷言程序存在一個錯誤。

4.2 斷言的形式

斷言可以有兩種形式:

  • assert Expression1
  • assert Expression1:Expression2

其中 Expression1 應該總是一個布爾值,Expression2是斷言失敗時輸出的失敗消息的字符串。

如果Expression1為假,則拋出一個 AssertionError,這是一個錯誤,而不是一個異常,也就是說是一個不可控制異常(unchecked Exception),AssertionError由于是錯誤,所以可以不捕獲,但不推薦這樣做,因為那樣會使你的系統進入不穩定狀態。

public class TestAssert{undefined
public static void main(String[] args){undefined
String name = "abner chai";
//String name = null;
assert (name!=null):"變量name為空null";
System.out.println(name);
}
}

5. 錯誤處理

根據前面的介紹,斷言可以用于處理代碼中不應該發生的錯誤,那又該如何處理那些預料中可能要發生的錯誤呢?

異常和錯誤處理是防御性編程的一個組成部分。

想象一下,啟動了一個異步操作,運行并輸出結果,沒有異常,這是一個理想的情況。如果在執行過程中發生錯誤怎么辦?與任何未處理的異常一樣,應用程序通常會崩潰。假設任何異步操作都會成功運行而沒有任何錯誤,那么可能會失敗。

高級語言中一般會采用try catch方式捕獲異常處理,如下示例:

try {
//邏輯代碼
} catch (exception e){
//異常處理代碼
}

try{
//邏輯代碼
} finally {
//一定要執行的代碼
}

try {
//邏輯代碼
} catch (exception e){
//異常處理代碼
} finally{
//一定要執行的代碼
}

而Golang的錯誤處理規范也是Go語言的最大亮點之一。

  • error接口

標準庫把error定義為接口類型, 以便于自己定義錯誤類型。

type error interface{
Error() string
}
  • Painc

golang的內置方法,能夠改變程序的控制流。當函數調用了panic,函數會停止運行,但是defer函數會運行,程序會在當前panic的goroutine全部退棧以后crash。

  • Recover

recover也是golang的內置方法,用于恢復發生panic的goroutine的控制,recover只在defer函數中生效。如果當前goroutine將要發生panic的話, recover會捕獲這個panic,并恢復正常執行。

  • Defer

聊到panic和recover,需要聊聊defer這個關鍵字,后面會看到defer在異常處理機制中起到的作用。go的defer是用來延遲執行函數的,延遲的發生是在調用函數的returen之后。

6. 隔離

所謂隔離,是指程序可以包容由錯誤造成的損害,稱為一種容損策略。這個在軟件行業中最常見的方案,就是多機房建設。實現服務雙機房部署建設,承受單機房故障,保障用戶體驗。這個實現的難點主要有如下三點:

  • 跨機房網絡延遲和帶寬限制導致的數據層面一致性問題
  • 機房之間流量調度
  • 業務改動不能太大

各個大廠對于核心服務多機房部署的實現,簡單列舉以下幾種實現方案:

  • 高德

基于地理位置單元化,不同服務集群間雙向數據復制,內部調用路由。

  • 微博

MySQL多機房同步(寫入時寫但機房,有專門的組件負責同步寫入到另一個機房)。

隔離的應用,同時體現了在架構設計上規定應該如何應用如何處理錯誤的價值。

7. 防御策略及建議

在防御性編程的路上,沒有銀彈。在產品中保留過多的防御性代碼,則會與精簡代碼實現產生相矛盾的地方。從產品本身出發,在不影響用戶體驗的使用的情況下,使程序能夠穩定的運行,梳理了如下幾項建議:

  • 保留重要錯誤檢查的代碼,去掉檢查細微錯誤的代碼
  • 保留讓程序穩妥地崩潰的代碼,去掉會導致程序硬性崩潰的代碼
  • 確認代碼中的錯誤消息是友好的,為技術支持人員做好錯誤信息記錄

其實,對于防御性編程,我們其實是要在保障程序穩定和程序不過于臃腫之間找到一個合理的平衡。防御式編程技術可以讓錯誤更容易發現,更容易修改,并減少錯誤對代碼的破壞,斷言可以幫助人們更早的發現錯誤,關于如何處理錯誤輸入的決策是一項關鍵的錯誤處理決策,也是一項關鍵的高層設計決策。防范看似微小的錯誤,收益價值可能遠遠超出你的想象。

責任編輯:武曉燕 來源: 架構精進之路
相關推薦

2025-07-11 01:24:00

C++防御性編程

2015-11-05 18:03:15

虛擬化云計算資源池

2023-12-15 08:17:13

防御性編程代碼

2017-11-03 13:43:24

云計算Saas信息化

2022-04-26 06:21:59

編程動態內存

2024-10-09 12:03:06

2020-08-23 21:07:16

編程PythonJava

2024-07-26 10:01:16

2018-05-30 12:04:36

LinuxUbuntu 18.0

2012-02-07 13:29:35

2017-10-12 10:20:13

服務器運行壽命

2020-06-05 10:36:30

云計算容器安全

2022-05-07 19:18:16

防御性編碼代碼

2023-09-27 22:52:52

2016-11-01 23:16:52

光纖光纖線纜

2022-10-11 23:50:43

JavaScript編程Promise

2023-12-12 13:18:11

2023-12-12 09:27:07

編程碼農

2022-11-04 08:22:14

編譯代碼C語言

2010-09-02 18:56:09

NoSQL數據庫DBA
點贊
收藏

51CTO技術棧公眾號

亚洲人免费视频| 亚洲男人的天堂在线aⅴ视频| 欧美精品www| 特黄特色免费视频| 激情影院在线| 成人午夜精品在线| 97精品视频在线播放| 蜜桃视频无码区在线观看| av影院在线免费观看| 国产宾馆实践打屁股91| 777精品视频| 午夜精产品一区二区在线观看的| 人人视频精品| 亚洲男女毛片无遮挡| 国产美女99p| 波多野结衣午夜| 欧美1区视频| 精品无人国产偷自产在线| 五月天亚洲视频| 色呦呦在线看| 国产亚洲短视频| 97人人做人人人难人人做| 69成人免费视频| 久久综合成人| 欧美精品一区二区三区视频| 精品少妇无遮挡毛片| 污片视频在线免费观看| 久久久99久久| wwwxx欧美| 一级做a爱片性色毛片| 欧美人成网站| 在线看福利67194| 图片区偷拍区小说区| 精品日本视频| 无吗不卡中文字幕| 在线免费观看成人| 免费黄色在线视频网站| 国产风韵犹存在线视精品| 日本精品免费一区二区三区| 欧美老熟妇一区二区三区| 美女毛片一区二区三区四区| 欧美zozo另类异族| 18禁男女爽爽爽午夜网站免费| 成人免费高清| 国产日韩三级在线| 好吊妞www.84com只有这里才有精品| 成年人晚上看的视频| 亚洲精品美女91| 九色成人免费视频| 久久福利免费视频| 精品久久久亚洲| 亚洲免费伊人电影在线观看av| 国产成人av片| 国产精品3区| 欧美日韩精品久久久| 不卡影院一区二区| av电影免费在线看| 一区二区三区四区亚洲| 91社在线播放| 精品视频在线一区二区| 国产精品视频一区二区三区不卡| 欧美日韩一区二| 亚洲 国产 欧美 日韩| zzijzzij亚洲日本少妇熟睡| 亚洲综合社区网| 国产又粗又黄又爽的视频| 美女脱光内衣内裤视频久久网站| 国产精品久久久久久久久久99 | 国产精品国产一区二区三区四区 | 国产丝袜精品第一页| 久久久无码人妻精品无码| 蜜桃在线一区| 欧美一区二区高清| 99久久综合网| 综合久久成人| 日韩写真欧美这视频| www激情五月| 日韩三级av高清片| 精品久久人人做人人爱| 亚洲精品久久一区二区三区777 | 国产伦精品一区二区三区千人斩| 亚洲精品视频网上网址在线观看 | 怡春院在线视频| 免费人成精品欧美精品| 国产日韩欧美在线| av网站在线观看免费| 国产又粗又猛又爽又黄91精品| 亚洲综合第一页| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 国产美女精品人人做人人爽 | 精品视频在线观看一区二区| 黄色网页网址在线免费| 亚洲精品国产a久久久久久| 法国空姐在线观看免费| 超碰在线最新网址| 欧美视频免费在线观看| 成人午夜激情av| av在线成人| 亚洲第一av网| 在线看片中文字幕| 综合久久亚洲| 2021久久精品国产99国产精品| 国产午夜精品久久久久| 久久精品久久99精品久久| 成人有码在线视频| 天堂av在线免费| 国产精品久久三| www.成年人视频| 另类中文字幕国产精品| 欧美一区二区三区男人的天堂| av漫画在线观看| 精品香蕉视频| 欧美激情一级精品国产| 激情视频网站在线观看| 激情五月播播久久久精品| 国产综合第一页| jizz亚洲| 五月综合激情婷婷六月色窝| 九九热免费精品视频| 亚洲精品一二三**| 国产亚洲综合久久| √天堂中文官网8在线| 亚洲精品影视| 91精品久久久久久久| 日日夜夜精品免费| 亚洲青青青在线视频| 欧美 日韩精品| 亚洲一区二区三区四区电影| 一本久久综合亚洲鲁鲁| 国产精彩视频在线观看| 久久精品久久99精品久久| 久久青青草综合| 日韩在线免费电影| 欧美色videos| 337p日本欧洲亚洲大胆张筱雨| 精品精品99| 91成人在线观看国产| xxxx18国产| 亚洲丝袜另类动漫二区| 亚洲无吗一区二区三区| 欧美猛男男男激情videos| 欧美黑人视频一区| 97人妻精品一区二区三区| 国产偷国产偷精品高清尤物 | 一区视频在线看| 国产传媒欧美日韩| 男人添女人下部高潮视频在线观看| 欧美一级免费大片| 免费在线观看亚洲| 国产精品2024| www污在线观看| 人人精品视频| 国产v综合v亚洲欧美久久 | 色婷婷综合成人| 中文字幕免费在线看| 国产精品国产三级国产aⅴ入口| 午夜剧场高清版免费观看 | 久久精品国产视频| 国产欧美日韩成人| 亚洲制服丝袜av| 800av在线播放| 另类天堂av| 五月婷婷综合色| 成人国产精品久久| 欧美激情xxxx| 可以直接在线观看的av| 欧美午夜片在线看| 日韩成人短视频| 丁香天五香天堂综合| 日韩av三级在线| 精品午夜久久| www.一区二区三区| 亚洲欧洲高清| 久久精品久久久久电影| 亚洲国产精品无码久久| 图片区小说区区亚洲影院| 国产激情av在线| 国产精品自在在线| 97国产在线播放| 日本精品黄色| 福利视频久久| 电影天堂国产精品| 免费成人高清视频| 青青国产在线| 56国语精品自产拍在线观看| 黄色激情视频在线观看| 国产无遮挡一区二区三区毛片日本| 热久久久久久久久| 中文亚洲字幕| 成人在线观看www| 亚洲欧洲色图| 国产精品v欧美精品v日韩精品| 中文字幕av一区二区三区佐山爱| 久久亚洲国产成人| 蜜桃视频在线免费| 日韩午夜三级在线| 午夜一区二区三区四区| 亚洲影视在线观看| 人人爽人人爽人人片| 丁香一区二区三区| 天天爽人人爽夜夜爽| 日韩一级网站| 最近免费观看高清韩国日本大全| 任你躁在线精品免费| 91美女片黄在线观看游戏| 久久毛片亚洲| 久久久伊人欧美| 国产盗摄在线观看| 国产亚洲精品美女久久久久| 国产91免费看| 欧美一级高清大全免费观看| 日本黄色中文字幕| 污片在线观看一区二区| 久久午夜鲁丝片午夜精品| 国产精品美女久久久久久2018| 五月婷婷综合在线观看| 国产99精品国产| 超级砰砰砰97免费观看最新一期| 青青草原综合久久大伊人精品优势| 免费在线观看亚洲视频| 国产精品magnet| avove在线观看| 久久福利影院| 视频一区二区三区免费观看| 亚洲精华一区二区三区| 国产精品免费在线 | 麻豆专区一区二区三区四区五区| 日本www在线播放| 亚洲精品乱码| 国产69精品久久久久久久| 亚洲啊v在线观看| 欧美精品一区三区在线观看| 精品资源在线| 国产一区精品在线| 红杏aⅴ成人免费视频| 成人免费观看网站| 综合欧美亚洲| 国产一区二区三区四区hd| 一本色道69色精品综合久久| 99精品国产一区二区| 警花av一区二区三区| 亚洲最大的免费| 中文久久电影小说| 国产精品一区在线播放| 久久精品色综合| 久久精品99| 伊人精品一区| 日韩.欧美.亚洲| 日韩高清欧美| 亚洲国产一区二区三区在线| 热久久天天拍国产| 久久久久久久免费视频| 欧美大片一区| 丝袜人妻一区二区三区| 国产欧美日韩一区二区三区在线| 内射国产内射夫妻免费频道| 国产精品入口| 九一精品在线观看| 韩国av一区二区三区在线观看| 亚洲成人手机在线观看| 成人一区在线看| avtt香蕉久久| 国产日韩亚洲欧美综合| 波多野结衣久久久久| 一区二区三区不卡视频| 久久亚洲天堂网| 欧美三电影在线| 国产av精国产传媒| 亚洲精品成人久久电影| 免费在线视频你懂得| 中文字幕亚洲自拍| av中文字幕在线观看| 性色av香蕉一区二区| 欧美xxxxxx| 国产日韩在线看片| 国产精品久久久网站| 欧洲一区二区日韩在线视频观看免费 | 美女任你摸久久| 欧美一级裸体视频| 国产精品影视天天线| 国产精品1000部啪视频| 国产精品福利电影一区二区三区四区| 国产在线免费av| 亚洲在线免费播放| www亚洲视频| 欧美精品久久天天躁| 日韩在线视频第一页| 国产一区av在线| 欧美aaaxxxx做受视频| 国产mv久久久| 2020最新国产精品| 手机看片福利永久国产日韩| 欧美日韩久久| 校园春色 亚洲色图| 成人免费毛片片v| 亚洲女同二女同志奶水| 亚洲成av人片在线观看| 一级黄色a视频| 亚洲精品一区二三区不卡| 国产黄大片在线观看画质优化| 欧美在线视频网| 日韩视频在线直播| 神马影院我不卡午夜| 日韩午夜黄色| 激情文学亚洲色图| 久久精品视频一区二区| 国产精品第二十页| 欧美日韩色一区| 飘雪影院手机免费高清版在线观看 | 久久午夜夜伦鲁鲁一区二区| 狠狠久久亚洲欧美| 精品无码国产污污污免费网站 | 91中文字幕在线视频| 国产丝袜精品视频| caoporn视频在线观看| 国产日韩在线视频| 久久福利影院| 一区二区成人网| www.66久久| 久草免费在线视频观看| 69堂国产成人免费视频| 福利在线视频导航| 日韩av不卡在线| 色婷婷av一区二区三区丝袜美腿| 99国产精品白浆在线观看免费| 韩国av一区二区三区在线观看| 亚洲一级理论片| 欧美日精品一区视频| 理论在线观看| 国产大片精品免费永久看nba| 亚洲美女15p| 欧美在线观看成人| 2欧美一区二区三区在线观看视频| 日韩成年人视频| 亚洲成人精品久久| gogo久久| 精品欧美一区二区精品久久| 亚洲精品欧洲| 国产伦精品一区二区三区妓女| 偷窥少妇高潮呻吟av久久免费| 欧美一区二不卡视频| 欧美日韩电影在线观看| 中文字幕日韩在线| www.国产在线视频| av在线播放成人| 亚洲精品男人的天堂| 亚洲欧美制服中文字幕| 搜成人激情视频| 色女人综合av| 国产制服丝袜一区| 欧美人妻精品一区二区免费看| 欧美videofree性高清杂交| 久草免费在线色站| 国产中文一区二区| 久久福利精品| 欧美丰满老妇熟乱xxxxyyy| 欧美日韩在线一区二区| 久久精品视频免费看| 成人午夜激情免费视频| 国内精品福利| 日本护士做爰视频| 在线看不卡av| 精品国产丝袜高跟鞋| 成人动漫视频在线观看完整版| 国产偷自视频区视频一区二区| 午夜理伦三级做爰电影| 欧美日韩一级二级三级| 99自拍视频在线观看| 国外成人免费视频| 天堂va蜜桃一区二区三区 | 午夜国产一区二区| 久久av一区二区三| 欧美性生活大片免费观看网址| 福利视频在线看| 俄罗斯精品一区二区三区| 久久久夜精品| 2025国产精品自拍| 亚洲国产97在线精品一区| 精品视频一区二区三区四区五区| 日本黄色a视频| www亚洲一区| 国产免费无遮挡| 91极品视频在线| 999精品一区| 日韩 中文字幕| 欧美乱妇20p| 亚洲妇女成熟| 国产精品av免费观看| 国产亚洲一本大道中文在线| 国产福利免费视频| 国产99久久精品一区二区 夜夜躁日日躁| 欧美3p在线观看| 黄色在线观看av| 日韩欧美你懂的| 日韩漫画puputoon| 成人免费性视频| 亚洲欧洲精品一区二区精品久久久| 天天干天天草天天射| 成人国产在线视频| 亚洲欧美日韩专区|