原创 小測試:HashSet可以插入重複的元素嗎?

  Set的定義是一羣不重複的元素的集合容器。也就是說,只要使用Set組件,應該是要保證相同的數據只能寫入一份,要麼報錯,要麼忽略。當然一般是直接忽略。   如題,HashSet是Set的一種實現,自然也符合其基本的定義。它的自然表現是,一

原创 springboot事務管理實現原理解析

  事務在關係型數據庫中是一非常重要的東西,spring中對事務的處理也很簡單,也就是加個註解的事。爲更進一步理解它是如何實現的,今天我們就來拆解下。 1. 幾個核心問題   1. 事務的核心是什麼?     簡單說其實就是底層數據庫的使用

原创 mongodb 深度分頁優化思路之cursor遊標

  mongodb 沒有官方的遊標滾動實現深度分頁功能,建議的都是選擇出一個字段,如_id,然後每次查詢時限制該字段,而不進行分頁處理。   也沒有看到更優的實現方式,本文做一個大膽的假設,自行實現滾動分頁功能。供大家思路參考。   但是猜

原创 pagehelper踩坑記之分頁亂套

  我們在使用數據庫進行查詢時,很多時候會用到分頁展示功能,因此除了像mybatis這樣的完善的orm框架之外,還有pagehelper這樣的插件幫助減輕我們的工作。   pagehelper的實現方式是,不需要我們去編寫分頁代碼,只需要調

原创 sql語法巧用之not取反

  數據庫的重要性和通用性都不用說了,什麼sql的通用性,sql優化之類的也不必說了,咱們今天來聊聊另一個有意思的話題:如何取一個篩選的反面案例。   1. 舉幾個正反案例的例子   爲了讓大家理解我們的假設場景,什麼叫做正反案例?比如:

原创 redis bitmap數據結構之java對等操作

  在之前的文章中,我們有說過bitmap,bitmap在很多場景可以應用,比如黑白名單,快速判定,登錄情況等等。總之,bitmap是以其高性能出名。其基本原理是一位存儲一個標識,其他衍生知道咱就不說了,而redis就是以這種原生格式存儲的

原创 關於linux的一點好奇心(五):進程線程的創建

  一直以來,進程和線程的區別,這種問題一般會被面試官拿來考考面試者,可見這事就不太簡單。簡單說一點差異是,進程擁有獨立的內存資源信息,而線程則共享父進程的資源信息。也就是說線程不擁有內存資源,所以對系統消耗會更小。所以,線程也有輕量級進程

原创 關於linux的一點好奇心(四):tail -f文件跟蹤實現

  關於文件跟蹤,我們有很多的實際場景,比如查看某個系統日誌的輸出,當有變化時立即體現,以便進行問題排查;比如查看文件結尾的內容是啥,總之是剛需了。   1. 自己實現的文件跟蹤   我們平時做功能開發時,也會遇到類似的需求,比如當有人傳輸

原创 Dubbo(八):timeout超時機制解析

  在網絡請求時,總會有各種異常情況出現,我們需要提前處理這種情況。在完善的rpc組件dubbo中,自然是不會少了這一層東西的。我們只需要通過一些簡單的配置就可以達到超時限制的作用了。   dubbo的設計理念是,客戶端控制優先,服務端控制

原创 一個快速切換一個底層實現的思路分享

    現實場景往往是這樣,我們應對一個需求,很快就會有一個處理方法了,然後根據需求做了一個還不錯的實現。因爲實現了功能,業務很happy,老闆很開心,all the world is beatiful.     但隨着公司的發展,有人實現

原创 bitmap技術解析:redis與roaringBitmap

    bitmap的表象意義是,使用一個01標識位來表示是否的狀態,可以達到節省空間和高效判定的效果。在我們的實際工作中,也有着許多的應用場景,相信瞭解bitmap定會給你帶來一些額外的收穫。   1. bitmap使用場景說明    

原创 一個簡單字符串差異對比暴力算法實現

  如題:請求出兩個字符串的差異部分,並以不同的顏色區分顯示到瀏覽器上。   1. 解題思路 1. 找出兩字符串中相同的部分,標記; 2. 找出兩字符串中不同的部分,標記; 3. 儘可能長的匹配相同部分; 4. 儘可能少的使用複雜度(所有算

原创 一個關於wait/notify與鎖關係的探究

  wait/notify 機制是解決生產者消費者問題的良藥。它的核心邏輯是基於條件變量的鎖機制處理。所以,它們到底是什麼關係?wait()時是否需要持有鎖? notify()是否需要持有鎖?先說答案:都需要持有鎖。   wait需要持有鎖

原创 基於long pull實現簡易的消息中心MQ參考

  我們都用過消息中間件,它的作用自不必多說。但對於消費者卻一直有一些權衡,就是使用push,還是pull模式的問題,這當然是各有優劣。當然,這並不是本文想討論的問題。我們想在不使用長連接的情意下,如何實現實時的消息消費,而不至於讓serv

原创 關於linux的一點好奇心(二):linux啓動過程之三大進程

  上一節我們通過對x86的linux內核的講解,知道了它的一個大概的啓動過程。 /arch/x86/boot/header.S -> calll main -> /arch/x86/boot/