java中的codereview



關于codereview,在平時的開發中,經常忽略的環節,參照目前介紹寫好代碼的幾本書和之前掉進的坑,做了一個總結,分享出來。

為什么要做

  • 通過review規避一些代碼層面的問題
  • 提升可讀性,方便后續擴展和維護
  • double check 確保代碼質量

檢查列表

注釋

  • 寫有意義的注釋
  • DO屬性上,名字無法識別業務含義的,加注釋
  • service接口和manager接口,注明方法的說明
  • 代碼塊中的復雜邏輯,添加注釋

風格

  • 域名不要寫死
  • 不同環境下差異的,注意使用配置項

日志

  • 合理分配日志級別,warn和error要分開
  • 日志中,異常信息要記錄,第一個參數簡短說明,第二個異常信息
  • 日志異常注意把相關的參數信息記錄下來,例如userId等
  • 異常拋日志的情況下,主要不要引入二次異常
  • 配置參數

線程安全

  • 需要被多個線程訪問的對象是否線程安全,檢查有無通過同步方法保護
  • 在保證線程安全的同時,要注意避免過度使用同步,導致性能降低
  • 不用使用Java原生的線程處理方法,推薦使用JUC框架中的類
  • 根據場景選擇不用的線程池來實現,會用簡化版Executors,理解處理過程

異常處理

  • 不要直接e.printStackTrace,用Logger記錄下來
  • 異常捕獲之后,要做響應的處理,返回錯誤提示或者記錄日志,切忌啥都不做
  • 當前程序中能夠處理的異常,捕獲即可,無法處理的,拋出
  • 異常只為異常服務,不要摻雜業務邏輯到異常中

性能

  • 避免多重的RPC或者網絡IO的循環,盡量批處理
  • 避免無窮循環,要有終止條件判斷
  • 不要主動進行垃圾回收,代碼中不要有System.gc()
  • String的split方法不要用,用開源包中的StringUtil工具類
  • 字符串的拼接,使用StringBuilder和StringBuffer

代碼邏輯

  • 不要在finally中return(try中的返回值,屏蔽異常)
  • volatile不具有原子性,劃分好synchronized的粒度問題
  • 推薦使用Guava作為工具處理類
  • 推薦joda來處理時間,然后SimpleDateFormat是非線程安全的
  • 單個方法超過50行,要做抽取,否則無法保證可讀性
  • 方法入參超過5個,抽取到QueryTO中進行處理
  • for或if的層級嵌套,不要超過4層
  • if的邏輯判斷中,多個||和&&的組合,注意拆分處理
  • case語句后面,需要加break
  • if后面,記得寫大括號
  • 文件資源,訪問后,記得close掉
  • 排序優先使用Comparator,一個類的擴展排序工具
  • 使用addAll、retainAll、removeAll優雅實現并集、交集、差集
  • List的remove,使用迭代器來進行刪除

事務處理

  • 多表同時更新操作,需要事務包裹,并驗證過
  • 批量插入,使用iBatis的batchInsert特性,需要在事務下才生效,可以通過wireshark查看網絡情況
  • 分布式場景下,可以使用消息中間件來保證最終一致性
  • 聲明式事務注解標簽,盡量在manager層搞掉,不要搞到service層或者web層
  • 一些可能出現重復處理的方法,記得做冪等操作

重復代碼

  • don’t repeat yourself
  • 同樣的業務邏輯處理,不要有兩份代碼

安全問題

XSS

  • cookie設置httponly屬性
  • jsonp輸入輸出檢查

CSRF

  • 服務端增加CSRF校驗,增加token
  • 必要的驗證碼

水平權限

  • 不用用戶之間的不能相互操作

標準

  • 代碼整潔
  • 可讀性好
  • 可維護性高
  • 性能優

本文轉自:http://iamzhongyong.iteye.com/blog/2149463

轉載于:https://www.cnblogs.com/nizuimeiabc1/p/4254119.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux下開機啟動腳本的方法

1.準備好要隨機啟動的程序,例如 /root/test.sh 。確保其可執行。 2.在目錄 /etc/init.d/ 下編寫控制腳本 test 。 #!/bin/sh ### BEGIN INIT INFO # Provides: test # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: …

理解i-node

原文鏈接:http://www.ruanyifeng.com/blog/2011/12/inode.html 感覺講得挺好,便做個記錄.轉載于:https://www.cnblogs.com/malware/p/3377616.html

MD5算法詳解

0x00 前言 MD5是一種哈希算法,用來保證信息的完整性。 就一段信息對應一個哈希值,且不能通過哈希值推出這段信息,而且還需要保證不存在任意兩段不相同的信息對應同一個哈希值。不過MD5算法算出來的值也就16個字節(16*8128&#x…

我的2015年讀書計劃,每兩周讀完一本書!

近日看到一篇文章,說Facebook CEO 馬克扎克伯格給自己的2015年定下了一個新的挑戰,每兩周就要讀完一本書(傳送門:戳這里)。想了一下,我自己也很久沒看書了,所以今年要改變一下,給自己…

書到用時方恨少

以前覺得的自己的英語還行,四級,六級的什么早就在讀書的時候過了, 工作以后,陸陸續續也一直用著英語。 最近發現和老外私下聊天的時候,詞匯量嚴重不足。不明白老外在說什么,一起跟著傻笑。 活到老&#xff…

kettle7.1 右上角不顯示connect

kettle7.1右上角不顯示connect,就無法使用資源庫了。 總結一下解決方法: 1.可能是jdk版本不對,最好使用1.8。原本是10.1,不顯示connect,后來裝了個1.8后就能顯示了。記得是要改環境,javac -version 能顯示…

基于XMPP協議的aSmack源碼分析

在研究如何實現Pushing功能期間,收集了很多關于Pushing的資料,其中有一個androidnp開源項目用的人比較多,但是由于長時間沒有什么人去維護,聽說bug的幾率挺多的,為了以后自己的產品穩定些,所以就打算自己研…

[Reverse] - 百度杯”CTF比賽 2017 二月場-CrackMe-1

環境:Windows XP 工具: IDA OD EXEINFOPE 0x00 查殼 0x01 分析 拖入OD,字符串查找看一看。 跟進去看就可以知道關鍵call了 0040196A . 48 dec eax 0040196B . 0F85 C4000000 jnz CrackMe1.00401A35 00401971 . …

【DeepLearning】Exercise:Learning color features with Sparse Autoencoders

Exercise:Learning color features with Sparse Autoencoders 習題鏈接:Exercise:Learning color features with Sparse Autoencoders sparseAutoencoderLinearCost.m function [cost,grad,features] sparseAutoencoderLinearCost(theta, visibleSize, hiddenSize,…

win7 64位系統下 PL/SQL無法連接的問題

第一步:下載oracle客戶端 由于 PLSQL Developer 沒有64位版本,所以在64位系統上運行該程鏈接64位Oracle時就會報錯,筆者為這個問題糾結了好幾天,后來通過請教Google 動手實踐,終于搞定了這個問題。現在把筆者解決的過…

SQL2008R2 express版本不支持維護計劃

SQL2008R2 express版本不支持維護計劃轉載于:https://www.cnblogs.com/toSeeMyDream/p/4218626.html

SHA1算法詳解

0x00 前言 SHA1算法也是哈希算法的一種,只要理解了MD5算法,SHA1也很快就能理解。 MD5算法可以參考:MD5算法詳解 MD5算法得出的MD5值長度為16個字節(8*16128位) SHA1算法得出的SHA1值長度為20個字節(8*2…

HTML5 地理位置定位(HTML5 Geolocation)

地理位置(Geolocation)是 HTML5 的重要特性之一,提供了確定用戶位置的功能,借助這個特性能夠開發基于位置信息的應用。今天這篇文章向大家介紹一下HTML5 地理位置定位的基本原理及各個瀏覽器的數據精度情況。 在訪問位置信息前&a…

2016騰訊安全挑戰賽第一輪-PC游戲方向

0x00 查殼 無殼的VC程序 0x01 測試 沒有消息彈窗,嘗試對函數下斷點。 OD載入后,CtrlN查找函數,找到GetDlgItem 程序運行起來,等輸入完后點擊確定后程序斷下。一路F8就來到這里 00401EED . E8 6A5B0000 call Tenc…

49-今日交易總結.(2015.1.13)

49-今日交易總結今天交易情況不好,主要犯了虧損時還連續加倉的錯誤。作為一個交易者,虧損時,繼續加倉,認為市場會向交易的方向變化,一次性把虧損的全部撈回來,還能賺一筆。這是一種賭徒心理。永遠不要再虧損…

電商導購過冬:蘑菇街醞釀出售 美麗說轉型時尚

一度紅火的第三方導購網站正因為阿里巴巴過山車式的態度而呈現出急劇下滑的軌跡。 2011年,以美麗說、蘑菇街為代表的導購網站蜂擁而起。彼時,兩者還能頻繁出現在阿里巴巴的官方活動中。然而,2012年5月,阿里巴巴集團董事局主席馬云…

JavascriptDOM(三)

簡介 今天學習第二天的知識,js和BOM對象,再接再厲,fighting~學習原則 腳踏實地的走好每一步,要想學好高級部分,基礎知識必須扎實呀 掌握基本語法,完成小案例,寫博客作總結,基本就是這個節奏,下面我們一起快速入門吧JavaScript快速入門 1. js簡介 1.js基于對象和事件驅動的腳本語…

看雪 2016CrackMe 攻防大賽 - 1-Crack_Me-涼颼颼

環境: Windows xp 工具: IDA EXEINFOPE OD 0x00 查殼 EXEINFOPE查殼, 無殼 0x01 分析 if ( (unsigned __int16)wParam 0x40B ) // 成功{*(_OWORD *)v22 xmmword_41DB98;v25 0;v23 xmmword_41DBA8;v24 xmmword_41DBB8;memset_4039D0…

JS 或css教程 識別 IE版本的幾種方法

今天收藏了這幾種關于識別ie版本的幾種代碼,有需要的朋友參考一下:var isIE!!window.ActiveXObject;var isIE6isIE&&!window.XMLHttpRequest;var isIE8isIE&&!!document.documentMode;var isIE7isIE&&!isIE6&&!isIE8;if…

使用CSDN-markdown編輯器

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants創建一個自定義列表如何創建一個注…