為什麼日常開發中用的最多的是arraylist 由底層的資料結構決定,正在日常開發中,查詢比增刪多,即便是增刪也是往往在list的尾部新增即可,複雜度o(1)比較低,對於增刪來說,底層呼叫的copyof()方法優化過,因此也不會太慢
hashmap不是執行緒安全的,執行緒安全的可以使用concurrenthashmap
concurrenthashmap是執行緒安全的map實現類,還有乙個hashtable,還可以使用collections來包裝執行緒安全的map。後兩者效能比較低()
concurrenthashmap底層資料結構是【陣列+鍊錶/紅黑樹】,支援高併發的訪問和更新;通過在部分加鎖和利用cas演算法來實現同步,get不加鎖
node用了volatile修飾。擴容時分配對應的空間,為了防止putval導致資料不一致,會給所負責的區間加鎖
事務失效
看資料庫層面 資料庫使用的儲存引擎是否支援事務===>修改儲存引擎為innodb
預設mysql使用的引擎是innodb,支援事務,如果修改為myisam,不支援事務
業務**層面
使用spring的宣告式事務,看看執行的bean是否已經由spring管理(@service,@component)
@transactional註解是否被放在了合適的位置(預設情況下無法使用註解對乙個非public的方法進行事務管理)
看看是否出現自呼叫,自呼叫時,呼叫的是目標類中的方法而不是**類中的方法
事務回滾相關問題
想回滾的時候事務卻提交了
想提交的時候被標記成只能回滾了(rollback only)
預設情況下只有出現runtimeexception 或者error 時才會回滾
解決:1、內部事務發生異常,外部事務catch異常後,內部事務自行回滾,不影響外部事務將內部事務的傳播級別設定為nested/requires_new均可
2、內部事務發生異常時,外部事務catch異常後,內外兩個事務都回滾,但是方法不丟擲異常 transactioninterceptor.currenttransactionstatus().setrollbackonly();
讀寫分離跟事務結合使用時的問題
讀寫分離的兩種實現方式:
配置多資料來源:「如果開啟了乙個讀寫事務,那麼必須使用寫節點」,「如果是乙個唯讀事務,那麼可以使用讀節點」
依賴中介軟體(如mycat):只要開啟了事務,事務內的sql都會使用寫節點(依賴於具體中介軟體的實現,也有可能會允許使用讀節點,具體策略需要自行跟db團隊確認)」
tcp連線的生命週期解讀
面試長見識
1.段錯誤 1.5.num num 1 判斷num是否為2的k次方 1.6 2 1 2.num num 1 統計乙個數的二進位制中1的個數 count 0 while k 3.scanf的 c格式可以讀入換行符,因此需要在每行輸入前把上一行的換行符接受,可以使用scanf c 接受乙個字元。4.1 ...
《見識》(3) 增長見識的五個方法
進度 第三章 談談見識 缺乏見識,缺乏愛,缺乏規矩,是比缺錢更可怕的事。沒有錢,有一輩子的機會能夠獲得,而缺乏這三樣東西,後天再獲得的難度就非常大,而它們的缺乏其實和窮沒有必然聯絡。什麼是見識?見識是你看到聽到知道的一切,是你身處的環境,看到周圍的人,聽到別人說的話。你的所見所聞耳濡目染,潛移默化地...
今天知道位域了 長見識了
今天看 是非人生 那幾個菜程式設計師的水平讓我感到欣慰 原來我還沒那麼.不過提到了乙個 位域 我倒真是沒見過 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一...