數據庫:
1.表裏記錄createTime/updateTime/creator/updator
2.數據庫自帶插入時間和更新時間功能,create_time 自動插入,update_time 自動更新時間。貌似用項目傳輸時間更好,避免服務器和數據時間不統一等問題。
3.LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回全部的行,即便在右表 (table_name2) 中沒有匹配的行。
4.在mybatis配置文件中不能有parameterMap,應該是parameterType
5.SQL條件查詢中:防止某些list爲空,查詢全部記錄的問題
7.重要的數據。記錄操做歷史,操做人
8.統一經常使用數據庫字段:命名,值(男女,是否刪除)等。
9.使用datetime,不適用timestamp,時間由程序傳過去,而不是使用數據庫方法。
10.儘可能建立關聯關係表,不要經過分隔符將多個數據存儲在一個字段裏。
11.儘可能採用單表查詢,減小聯合查詢,下降數據庫IO。
12.批量插入/更新時使用批量語句,不要循環插入。
13.多個表數據更新/插入時,必定要考慮是否須要事務。
14.查出來的數據通常要有排序,能夠按主鍵或建立時間排序等
15.自動分頁:經過分頁攔截器進行分頁操做,返回分頁的封裝對象。
16.不推薦使用外鍵。
17.修復valid髒數據的方法。現將值爲0的數據設置爲3,而後修復值爲1的數據爲0.再將值爲3的數據統一改爲
18.@Param("vo") 定義xml中屬性名稱
19.XML的SQL中,避免出現list的子項中的item名字,跟其餘字段相同。
20.XML中判斷list的值是否爲null,是否爲空集合。前端
代碼:
1.對單獨記錄進行操做的時候,必定要驗證當前記錄的狀態,避免誤操做屢次單擊。通常方法有兩種,forupdate和redis。forupdate須要加過時時間。
2.某些字段惟一的(如手機號),在保存前必定要驗證手機號是否存在,而且數據庫字段設置字段惟一
3.事務處理:@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class, timeout = 10)
4.枚舉:有獲取列表的方法;獲取code值儘可能簡單,常比較,避免出錯。
5.BeanMapper.copy():DozerBeanMapper dozer = new DozerBeanMapper(); dozer.map(source, destinationObject);
6.登陸時將信息緩存到redis中,退出登陸時,將登陸信息從redis中刪除。
7.cookie登陸(App端攜帶header),攔截器去緩存中驗證是否有登陸信息。
8.DTO對象以及返回對象,都須要實現Serializable接口。
9.dubbo 接口通常返回封裝好的對象。方便之後修改結構,而不用修改接口參數。
10.提供前端接口返回值,通常是封裝成一個對象。全部返回結果都封裝在ResponseDTO T data(返回數據)/int rc(return code)/String msg(返回信息)
11.自動分頁:經過分頁攔截器進行分頁操做,返回分頁的封裝對象。
12.經常使用公共類放到一個jar包裏
13.通常爲了避免破壞實體類和數據庫表一一對應的接口,咱們會新建一個DTO(Data Transfer Object)做爲先後端的傳輸對象。DTO實體類中加入一些冗餘的字段。例如:cityName等。
14.經過spring配置加載一些properties文件,在java代碼中經過 @Value("${oss.accessKeyId}")的形式直接注入屬性值
<!-- 配置文件加載 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations">
<list>
<value>classpath:server.properties</value>
</list>
</property>
</bean>
15.代碼自動生成工具
16.Amber、postmain模擬測試工具
17.密碼加密
18.工具類
19.枚舉類
20.記錄操做歷史記錄:例如記錄一個狀態的變遷歷史
21.自定義異常,封裝要返回的內容
22.經過ThreadLocal傳遞當前用戶主鍵
23.詳細的註釋
24.經過繼承,繼承一些封裝好的方法。例如:返回值 success("添加新用戶成功",count);
25.經過日誌文件,將日誌記錄內容,精確到方法的位置。
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%thread] %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{5}.%M[%L] - %msg%n</pattern>
</encoder>
26.記錄操做歷史記錄
27.編寫默認回覆給前臺的代碼,經過繼承等方式,避免每次新寫。
28.版本升級提示,換行。能夠在文本中換行完畢後,直接粘貼進去
29.pom.xml某些依賴文件提示missing,可能須要加倉庫地址
30.只作邏輯刪除,不作物理刪除,使用valid標識,默認0無效。
31.json格式傳遞複合對象(@RequestBody EmployeeDTO employeeDTO)
32.一個tomcat部署一個應用,部署到ROOT
33.指定堆內存大小配置-Xms512m –Xmx512m
34.內網dev/test全部tomcat打開遠程調試端口
35.dubbo接口有變化時,須要升級api版本號,開發前提早約定版本號,deploy到maven私服。(目前內部系統不強制要求,但對外提供接口系統必須區分版本號)
36.遠程調試功能
37.前端按鈕被單擊後,應該置灰,防止屢次點擊。後端要驗證是否重複提交。forupdate 或 redis
38.完善的註釋
39.分佈式系統事務,請求先落地,經過status標識請求狀態,單一系統內保證事務。異常狀態處理人工介入。
40.適當的冗餘字段
41.改動原有接口時,必定要確保之前功能正常工做。修改數據庫時,應該考慮對原代碼的影響。
42.服務器部署環境:開發,測試,公測,生產
43.項目結構:app,web,erp
44.灰度上線:鏈接生產數據庫,但只對內部人員提供服務
45.配置文件profile保存:aliyun,test,dev,dev1,dev2……
46.版本管理:master,dev,新功能,bug修復,上線打tag java
日誌:
1.敏感數據打***,身份證/銀行卡號/密碼
2.統一使用slf4j+logback。線上日誌統一 /home/car-league/logs/項目/info.log+error.log
3.未知異常記錄堆棧信息方便調試;已知異常(自定義異常,密碼錯誤等)記錄異常信息便可。
4.日誌記錄,記錄當前用戶的主鍵,方便之後查看日誌。記錄全部入參和出參數。
5.日誌編輯器:private static Logger logger = LoggerFactory.getLogger(EmployeeController.class);web