原创 常見的OOM異常

Java.lang.StackOverFlowError 虛擬機棧溢出 java.lang.OutOfMemoryError: java heap space 堆區 內存溢出 java.lang.OutOfMemoryErro

原创 cas——compareAndSwap

概念 compareAndSwap翻譯過來就是 比較並交換 cas底層 調用的是unSafe,unSafed對底層的修改調用的native方法(CPU併發原語),天然原子性 代碼說話 創建一個AtomicInteger類,初始化值5,

原创 AQS_AbstractQueuedSynchronizer

AQS是什麼 字面意思, 抽象的隊列同步器 是用來構建鎖或者其它同步器組件的重量級基礎框架及整個JUC體系的基石,通過內置的CLH (FIFO)隊列的變種來完成資源獲取線程的排隊工作,將每條將要去搶佔資源的線程封裝成一個Node節點來實現

原创 Synchronized鎖

synchronized 由對象頭中的 對象標誌 根據鎖標誌位的不同而被複用 以及鎖升級策略 能用無鎖 就不要用鎖,能鎖代碼塊 就不鎖整個方法, 能用對象鎖 就不用類鎖. 儘可能讓鎖的粒度更小,以提高併發效率 每個對象\類 都是

原创 MVCC——多版本併發控制

概念 Multi Version Concurrency Control, 用於數據庫的併發訪問控制 MVCC在mysql innoDB中的實現主要是爲了提高數據庫併發性能, 用更好的方式去處理讀-寫衝突, 實現讀寫衝突不加鎖, 非阻塞併發

原创 redis——緩存雙寫一致性問題

緩存雙寫一致性 如果redis中有數據 需要和數據庫中的值相同 如果redis中無數據 數據庫中的值是最新值,且準備回寫redis 緩存按照操作分 只讀緩存 讀寫緩存 同步直寫策略 寫數據庫後也同

原创 內存溢出:報錯java.lang.OutOfMemoryError: PermGen space

前言   前後臺調試過程中某個查詢操作導致了後臺報錯java.lang.OutOfMemoryError: PermGen space,百度了一下說是內存溢出,設置JVM參數就能解決,確實是如此。   引用別人的解釋: OutOfMemo

原创 自定義線程池詳解

自定義線程池 ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS, new ArrayBlockingQue

原创 疑似explain的bug?

起因 爲了測試explain, 也爲了測試關於索引優化 準備數據 新建了一張測試表 CREATE TABLE `tb_demo` ( `id` int NOT NULL AUTO_INCREMENT, `name` varch

原创 mongostore導入到docker運行的mongodb

記錄一下 1 先進入mongo容器    docker exec -it 9c4fa0a6205d /bin/sh 2 將要導入的數據 copy到容器的某一個文件夾,/tmp docker cp gym-server 9c4fa0a620

原创 爲什麼iterator,foreach遍歷時不能進行remove操作?

Exception in thread "main" java.util.ConcurrentModificationException 併發修改異常引發的思考! 1 foreach循環刪除元素   ①list遍歷刪除元素時會報錯,比如下面

原创 Docker上運行SpringBoot項目(詳細)。(window10)

前言   因爲公司項目已經集成了Docker,自動就運行在Docker上了,對Docker的瞭解僅限於:它是一個鏡像庫,可以將任何應用打包成鏡像並運行上Docker上,好處就是應用在任何平臺上(window, linux)都是一樣的,換一個

原创 開發搞錯了分支怎麼辦

引言   寫代碼寫着寫着提交代碼的時候發現自己寫錯分支了,寫到master分支上了,還好沒有提交上去(注:當然也是提不上去了,生產環境的分支)。 正文   解決:git stash 命令,將master分支本地修改的代碼轉移到dev分支上,

原创 lambda表達式已經成爲了開發者必須要掌握的技能?

lambda表達式 lambda表達式是什麼 引用百度百科 “Lambda 表達式”(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstra

原创 list<Integer>,Integer[],int[]之間的互轉(jdk1.8)

偶然在開發過程中需要將int[] 轉成 List<Integer>,採用了遍歷的方式,寫的代碼實在太多。 1 List<Integer> list = new ArrayList<>(); 2 for(i