国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

讀程序員的README筆記04_防御式編程

這篇具有很好參考價值的文章主要介紹了讀程序員的README筆記04_防御式編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

讀程序員的README筆記04_防御式編程文章來源地址http://www.zghlxwxcb.cn/news/detail-749476.html

1.?編寫可維護的代碼

1.1.?生產(chǎn)環(huán)境下的軟件必須一直保持可用的狀態(tài)

1.1.1.?用戶行為不可預測,網(wǎng)絡不可靠,事情總會出錯

1.2.?編寫可維護的代碼有助于你應對不可預見的情況,可維護的代碼有內(nèi)置的保護、診斷和控制

1.2.1.?切記通過安全和有彈性的編碼實踐進行防御式編程來保護你的系統(tǒng),安全的代碼可以預防許多故障,而有彈性的代碼可以在故障發(fā)生時進行恢復

1.2.1.1.?切記讓你的代碼安全而有彈性

1.2.1.2.?編寫擁有良好防御性的代碼是一種對那些運行你的代碼的人(包括你自己?。└挥型樾牡谋憩F(xiàn)

1.2.1.3.?防御性的代碼較少發(fā)生故障,就算它發(fā)生故障,也更有可能恢復

1.2.1.4.?安全的代碼利用編譯時的校驗來避免運行時的故障,使用不可變的變量、限制范圍的訪問修飾符和靜態(tài)類型檢查工具來防止bug

1.2.2.?一個可維護的系統(tǒng)具有可配置參數(shù)和系統(tǒng)工具

1.2.3.?你需要在不修改代碼的情況下控制系統(tǒng)

1.2.4.?將日志、指標和跟蹤的調(diào)用信息暴露出來可以方便診斷

2.?避免空值

2.1.?沒有值的變量默認為null(或nil、None或其他一些變體)

2.2.?通過檢查變量是否為空,通過使用空對象模式(null object pattern),或通過可選類型(option type)來避免空指針異常

2.2.1.?空對象模式會使用一個對象來代替空值

2.3.?切記在方法的開頭進行空值檢查

2.3.1.?可以使用NotNull注解和編程語言中類似的特性

2.3.2.?在前面校驗變量是否為空意味著后面的代碼可以安全地假定它是在處理真實的值,這將使你的代碼更干凈、更易讀

3.?保持變量不可變

3.1.?不可變的變量一旦被賦值就不能被改變

3.1.1.?不可變的變量可以防止意外的修改

3.2.?使用不可變的變量可以使并發(fā)編程變得更簡單,而且當編譯器或運行環(huán)境知道變量不會改變時就可以運轉(zhuǎn)得更有效率

4.?使用類型提示和靜態(tài)類型檢查器

4.1.?限制變量可以被賦的值

4.2.?靜態(tài)類型檢查器在代碼執(zhí)行之前會使用類型提示來發(fā)現(xiàn)潛在bug,所以配合靜態(tài)類型檢查器一起使用,你就可以防止運行時出現(xiàn)故障

5.?驗證輸入

5.1.?永遠不要相信你的代碼接收的輸入

5.2.?校驗輸入的值可以避免出現(xiàn)意外

5.3.?開發(fā)人員、有問題的硬件和人為的錯誤都會破壞輸入的數(shù)據(jù)

5.3.1.?計算機硬件并不總值得信賴,網(wǎng)絡和磁盤可能會損壞數(shù)據(jù)

5.3.2.?不要忽視安全問題,外部輸入是危險的

5.3.2.1.?惡意用戶可能試圖在輸入中注入代碼或SQL,或撐爆緩沖區(qū)以獲得對你的應用程序的控制權限

5.4.?通過校驗輸入的正確性去保護你的代碼

5.4.1.?用先決條件、校驗和(checksum)以及校驗數(shù)據(jù)合法性

5.4.1.1.?如果你需要強大的耐久性保證,使用校驗和的方式來檢查數(shù)據(jù)沒有意外的變化

5.4.2.?套用安全領域中的最佳實踐

5.4.2.1.?強制轉(zhuǎn)義輸入的字符來防止SQL注入攻擊

5.4.2.2.?在使用strcpy(特別是strncpy)等命令操作內(nèi)存時,明確地設置緩沖區(qū)的大小,以防止緩沖區(qū)溢出

5.4.2.3.?使用廣泛采用的安全與密碼類庫或協(xié)議,而不是自己去編寫這樣的類庫或協(xié)議

5.4.2.4.?熟悉開放式Web應用程序安全項目(open Web application security project,OWASP)的十大安全報告以快速建立你的安全知識體系

5.4.3.?使用工具來發(fā)現(xiàn)常見的錯誤

5.4.3.1.?使用成熟的類庫和框架來防止跨站腳本攻擊

5.4.4.?盡可能地提早拒絕不良輸入

5.5.?使用前置條件和后置條件的方式來校驗方法中輸入的變量

5.5.1.?當你使用的數(shù)據(jù)類型不能完全地捕獲有效的變量值時,可以使用校驗前置條件的類庫和框架

6.?善用異常

6.1.?有彈性的代碼使用異常處理中的最佳實踐來優(yōu)雅地處理故障

6.2.?不要使用特殊的返回值來標識錯誤類型(如null、0、?1等)

6.3.?異常要有精確含義

6.3.1.?精確的異常使代碼更容易使用

6.3.2.?盡可能地使用內(nèi)置的異常,避免創(chuàng)建通用的異常

6.3.2.1.?如果一個內(nèi)置的異常可以描述問題,就不要創(chuàng)建自定義的異常

6.3.2.2.?當你創(chuàng)建自己的異常時,不要把它們弄得太通用

6.3.2.2.1.?通用的異常很難處理,因為開發(fā)人員并不知道他們正面臨什么樣的具體問題

6.3.3.?使用異常處理來應對故障,而不是控制應用程序的運行邏輯

6.3.3.1.?不要在應用程序的運行邏輯中使用異常

6.3.4.?使用異常來跳出方法常常令人困惑,并且使代碼難以調(diào)試

6.3.4.1.?你的代碼是不出人意料的,而不是聰明的

6.4.?早拋晚捕

6.4.1.?遵循“早拋晚捕”的原則來處理異常

6.4.2.?“早拋”意味著在盡可能接近錯誤的地方引發(fā)異常,這樣開發(fā)人員就能迅速地定位相關的代碼

6.4.3.?“晚捕”意味著在調(diào)用的堆棧上傳播這個異常,直到你到達能夠處理異常的程序的層級

7.?智能重試

7.1.?在故障發(fā)生之后,系統(tǒng)處于什么狀態(tài)并不總顯而易見

7.1.1.?面對一個錯誤時,適當反應往往是簡單地再試一次就好

7.1.2.?不要盲目地重試所有失敗的調(diào)用,尤其是那些寫入數(shù)據(jù)或可能觸發(fā)一些業(yè)務流程的調(diào)用

7.2.?最單純的重試方法是捕捉到一個異常馬上就進行重試

7.3.?謹慎的做法是使用一種叫作“退避”(backoff)的策略

7.3.1.?退避會非線性地增加休眠時間(通常使用指數(shù)退避,如(retry number)^2)

7.4.?構建冪等系統(tǒng)

7.4.1.?處理重試的最好方法是構建冪等系統(tǒng)

7.4.2.?一個冪等的操作是可以被進行多次并且仍然產(chǎn)生相同結果的操作

8.?及時釋放資源

8.1.?當故障發(fā)生后,要確保清理所有的資源,釋放你不再需要的內(nèi)存、數(shù)據(jù)結構、網(wǎng)絡套接字和文件句柄

8.2.?所謂網(wǎng)絡套接字泄露,是指在使用后沒有關閉它們

8.2.1.?網(wǎng)絡套接字泄露會使無用的連接一直存在,從而填滿連接池

到了這里,關于讀程序員的README筆記04_防御式編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 讀程序員的README筆記09_代碼評審

    讀程序員的README筆記09_代碼評審

    4.4.1.1.?walk-through 4.4.1.2.?一種面對面的會議,開發(fā)人員在會上共享他們的屏幕,并引導隊友了解正在進行的修改內(nèi)容 4.4.1.3.?是啟發(fā)想法和讓你的團隊適應代碼修改的好方法 5.1.2.1.?如果緊急度不明確,請詢問提交者 5.4.4.1.?SQL注入攻擊、敏感數(shù)據(jù)泄露和跨站腳本攻擊的漏洞

    2024年02月05日
    瀏覽(47)
  • 讀程序員的README筆記10_軟件交付(上)

    讀程序員的README筆記10_軟件交付(上)

    3.1.1.1.?打包一個構件稱為發(fā)布 3.1.3.1.?部署的軟件還不能被用戶訪問 3.1.3.1.1.?只是被安裝了而已 3.1.3.2.?一旦部署,軟件就會通過將用戶轉(zhuǎn)移到新的軟件上而進行展開 3.1.4.1.?交付過程是更大的產(chǎn)品開發(fā)周期中的一部分 6.10.2.1.?每季度或每年發(fā)布一次

    2024年02月04日
    瀏覽(21)
  • 讀程序員的README筆記01_學習如何學習

    讀程序員的README筆記01_學習如何學習

    6.3.2.1.?錯誤是不可避免的。成為一名軟件工程師的路途艱辛,我們有時會失敗 6.5.4.1.?代碼從不說謊。注釋有時卻會。 6.5.4.1.1.?Code never lies. Comments sometimes do 6.5.4.1.2.?去讀源代碼,因為它并不總是與設計文檔相吻合 6.5.4.1.3.?不要只讀你自己的代碼庫,還要去閱讀高質(zhì)量的開

    2024年02月05日
    瀏覽(24)
  • 讀程序員的README筆記11_軟件交付(下)

    讀程序員的README筆記11_軟件交付(下)

    1.3.5.1.?通過持續(xù)交付,人力被完全從部署環(huán)節(jié)中移除 1.3.5.2.?打包、測試、發(fā)布、部署,甚至展開環(huán)節(jié)都是自動化的 1.3.6.1.?Puppet、Salt、Ansible和Terraform等現(xiàn)成的解決方案可以與現(xiàn)有的工具集成,并且它們是專門為了自動化部署而設計的 1.4.4.1.?只需再次指向舊的版本 1.5.1.1.?

    2024年02月04日
    瀏覽(24)
  • 讀程序員的README筆記13_技術設計流程(上)

    讀程序員的README筆記13_技術設計流程(上)

    3.4.1.1.?外界干擾是深度工作的“殺手” 3.4.1.2.?避免所有的交流方式 3.4.1.2.1.?關閉聊天 3.4.1.2.2.?關閉電子郵件 3.4.1.2.3.?禁用電話通知 3.4.1.2.4.?換個地方坐 3.4.2.1.?有形產(chǎn)出是一份設計文檔 4.2.3.1.?如果有一個以上的問題,詢問哪些問題是最優(yōu)先的 4.3.7.1.?注意與外人交流時不

    2024年02月04日
    瀏覽(53)
  • 讀程序員的README筆記14_技術設計流程(下)

    讀程序員的README筆記14_技術設計流程(下)

    1.4.2.1.?該項目將需要至少一個月的工程時間 1.4.2.2.?變更將對軟件的擴展和維護產(chǎn)生長期的影響 1.4.2.3.?變更將顯著影響其他團隊 1.5.2.1.?設計文檔是一種工具,可以幫助你思考、獲得反饋、讓你的團隊了解情況、培養(yǎng)新的工程師,并推動項目規(guī)劃 1.5.5.1.?閱讀大量的設計文檔

    2024年02月04日
    瀏覽(20)
  • 讀程序員的README筆記05_日志、監(jiān)控與配置

    讀程序員的README筆記05_日志、監(jiān)控與配置

    6.1.1.1.?測量的是某個事件發(fā)生的次數(shù) 6.1.1.2.?通過使用計數(shù)器獲得緩存命中數(shù)和請求總數(shù),你就可以計算出緩存命中率 6.1.2.1.?一個基于時間點的測量值 6.1.2.2.?既可以上升又可以下降 6.1.3.1.?根據(jù)事件的大小幅度分成不同的范圍 6.1.3.2.?每一個范圍都會有一個計數(shù)器,每當某

    2024年02月05日
    瀏覽(50)
  • 讀程序員的README筆記18_職業(yè)生涯規(guī)劃

    讀程序員的README筆記18_職業(yè)生涯規(guī)劃

    3.1.5.1.?他們的工作職責之一是管理他們的團隊,而管理的一部分就是對你投入時間 3.1.5.2.?對管理者而言,反復取消一對一面談可以是一個有價值的信號 3.3.2.1.?每個目標都附有3到5個關鍵結果,它們是標志著目標達成的具體指標 3.3.2.2.?不要把關鍵結果變成待辦事項清單 3.

    2024年02月04日
    瀏覽(18)
  • 讀程序員的README筆記12_On-Call

    讀程序員的README筆記12_On-Call

    4.4.2.1.?回應不一定代表解決方案 4.4.3.1.?每次更新時,提供一個新的時間預估 4.5.3.1.?如果請求者沒有回應,就說你將在24小時內(nèi)因缺乏回應而關閉該任務票,然后真的這樣做 5.3.1.1.?工程師必須找到問題,確定其嚴重性,并確定誰能修復它 5.3.1.2.?確認問題并了解其影響,以

    2024年02月04日
    瀏覽(40)
  • 讀程序員的README筆記16_構建可演進的架構(上)

    讀程序員的README筆記16_構建可演進的架構(上)

    3.1.1.1.?致軟件依賴于其他的API或代碼行為 3.1.1.2.?依賴性顯然不可避免,甚至是可取的,但必須取得平衡 3.1.1.3.?高依賴性的系統(tǒng)很難修改 3.1.1.3.1.?它們有緊密的耦合性和高度的變更放大效應 3.1.1.3.2.?緊密的耦合性是指那些嚴重依賴彼此的模塊,它們導致了更高的變更放大的

    2024年02月04日
    瀏覽(57)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包