經驗mysql
1不要相信任何輸入---要作好參數驗證redis
2函數意圖要簡單---只作一件事,徹底獨立的與其餘函數沒有關聯sql
3測試環境有錯誤,必定要解決---線上也確定會出現數據庫
4需求有不明確必定要追究到底5WHY法。腦補只會出現需求bug緩存
5保障軟件質量惟有測試一條路,方法有:自動化測試、人工測試、持續集成的驗證。微信
6敏捷開發前期準備耗時長,但節省長期成本,構建質量更高的產品。併發
7遍歷過程不容許進行長IO操做(數據庫查詢)函數
8作活動次數限制不能用「==」來限制,應該使用">="或"<="高併發
9發佈測試環境後應先自檢,不能把全部的工做都交給測試小姐姐來檢查。發佈測試環境和正式環境都須要先列檢查點。發佈正式環境依照測試環境的流程執行。測試
10代碼修改必定要把影響點都測試到,上線前通知相關業務方。
11代碼自己必定要能區分環境,不然開發很麻煩!
12需求改動都須要寫入到文檔中,口頭溝通會出現扯皮狀況。
13作事必定要想清楚後再行動,不然容易陷入細節。想清楚的標準是每一步都是肯定,均可以驗證!
14與人溝通必定要帶上下文(講背景),最好舉個栗子!
問題:
1cas適用於保證高併發狀況下對同一條記錄一致性,高併發寫重複適用redis鎖或mysql惟一索引來保證!!!設計表的時候要肯定是否存在高併發狀況,存在必須設置一個惟一索引!!!
2系統內存不足須要統計下是否真佔用不少內存,有多是slab佔用太多沒釋放致使的,相關命令有top,cat /proc/meminfo, cat /proc/slabinfo,systemtap
3系統硬盤空間不夠,要確認是否真佔用不少空間,有多是文件緩存。相關命令有lsof
查問題流程:
1確認現象-觀察流量、負載、日誌(關鍵)
2是否新業務上線
3是否生產代碼部署有缺漏
a:代碼未更
b:多臺代碼不一致
c:配置錯誤
d:數據庫表未上線
e:redis連接是否正常
f:依賴接口端口是否可訪問
4外部環境是否發生變化
a:fb、微信限流
修復bug流程:
1(最快)最短路徑復現問題
2修復bug
3提交pr
4經過ci檢查
5合併分支
6發佈上線
7觀察數據