Java的項目經驗要怎么積累呢?
多看開源項目源代碼,或者自己嘗試做一些項目。比較有幫助,最后推薦一個項目集,可以試著做一下,一共10個項目,還有配套資料,源代碼都可以獲得!(答案轉載自音樂字節)
嗶哩嗶哩搜索BV1f64y117vk
后臺怎么防止因網絡延遲,用戶連續點擊導致后臺重復執行一條數據,這樣的狀況發生?
這是典型的防止重復提交的問題!在實際場景中,比如有重復扣費,重復購買!
如何設計才能防止重復提交?我們主要有以下操作:
①前端:點擊提交按鈕,點擊后會變灰,一段時間內不允許重復提交!
優點:最便捷的提高并發的方法!
缺點:頁面刷新時js失敗,前端容易被篡改!
②后端:
1.鎖定:鎖定提交的id,同一id在一定時間范圍內只能通過一次!
如果是分布式服務,需要借助redis添加分布式鎖,否則多個服務中的鎖不能互斥!
2.冪等性:保證接口是冪等的,先查詢,記錄不存在就添加,存在就返回查詢結果!
缺點:高并發環境不能保證冪等性!
③數據庫:如果是新增加的,可以增加唯一字段。保存時,如果唯一字段重復,將引發異常。使用insertignore語句進行判斷!
如果修改了,可以使用樂觀鎖sql確保版本version符合要求后再執行sql!以下示例是樂觀鎖定機制:
更新table_testsetnamename1,versionversion1其中idid1和version2
我在實際工作中使用以上方法。如果有更合適有效的方法,請補充。。筆者一直在持續分享JAVA開發技術,其中不乏好文章,有需要的朋友可以關注一下。。