原创 一文讀懂Epoll本質

從事服務端開發,少不了要接觸網絡編程。Epoll 作爲 Linux 下高性能網絡服務器的必備技術至關重要,Nginx、Redis、Skynet 和大部分遊戲服務器都使用到這一多路複用技術。 Epoll 很重要,但是 Epoll 與 Sel

原创 強軟弱虛引用的使用場景

強引用 特點:我們平常典型編碼Object obj = new Object()中的obj就是強引用。通過關鍵字new創建的對象所關聯的引用就是強引用。 當JVM內存空間不足,JVM寧願拋出OutOfMemoryError運行

原创 Vector、ArrayList和LinkedList的區別?

1 底層實現方式 ArrayList內部用數組來實現;LinkedList內部採用雙向鏈表實現;Vector內部用數組實現。 2 讀寫機制 ArrayList在執行插入元素是超過當前數組預定義的最大值時,數組需要擴容,擴容過程需要

原创 arthas介紹——arthas使用(使用層面)

文章目錄概述arthas是什麼呢?arthas能解決哪些問題呢?安裝和啓動arthas從一個全局視角來查看系統的運行狀況線上出現問題,線下無法重現,利用arthas進行調試——“線上調試”1 使用watch。2 使用tt。3 使用

原创 死鎖一定會造成cpu使用率飆升嗎?

這取決於鎖的實現,通常鎖有兩種實現: ps: 在一個角落看到這篇文章,記錄一下; 1 拿不到鎖的時候,忙等待,反覆探測鎖狀態,直到拿到鎖,進入臨界區。這種情況會消耗CPU。 while (locked); 這種鎖,稱爲自旋鎖。比

原创 HashMap 源碼閱讀

HashMap 是一個key value類型的集合,是線程不安全的。它底層基於hash表,用數據+鏈表的結構存儲數據。JDK1.8中,還是用紅黑樹來管理衝突的Entry鏈表,從而提高從HashMap拿數據的效率。 HashMap的結構

原创 NIO分析總結

前言 I/O模型大體分爲阻塞式I/O 模型和非阻塞式I/O模型。其中,前者最大的問題在於,每一次IO操作,都會有一個線程從發起讀指令後一直等待直到本次IO的數據到達用戶態或者出現錯誤。 這樣BIO會存在兩個問題:1在本地IO事件中,會

原创 ConcurrentHashMap的擴容機制(jdk1.8)

ConcurrentHashMap相關的文章網上有很多,而關於ConcurrentHashMap擴容機制是很關鍵的點,尤其是在併發的情況下實現數組的擴容的問題經常會碰到,看到這篇寫的具有代表性,詳細講解了ConcurrentHashMap

原创 分佈式鎖以及分佈式鎖在項目中的使用總結

1 分佈式鎖的三種實現方式 第一:基於數據庫 第二:基於緩存 第三:基於Zookeeper 2 基於數據庫實現分佈式鎖 要實現分佈式鎖,最簡單的方式可能就是直接創建一張鎖表,然後通過操作該表中的數據來實現了。 當我們要鎖住某個方法或資

原创 TreeMap 源碼閱讀

  TreeMap是用紅黑樹實現的,插入數據後添加紅黑樹節點並進行紅黑樹的調整,刪除數據後也同樣進行紅黑樹的調整,查詢數據時,不是用hashcode來進行查詢,而是使用紅黑樹查詢。TreeMap沒有HashMap的擴容機制,所有的數據

原创 索引再梳理

1 常見的索引類型 HASH 順序表 B樹 B+樹 紅黑樹 跳錶 哈希表是一種以鍵 - 值(key-value)存儲數據的結構,我們只要輸入待查找的值即 key,就可以找到其對應的值即 Value。哈希的思路很簡單,把值放在數組裏

原创 從一條sql語句執行過程聯想到的redo和binlog

1 引言 mysql 日誌可分爲一下集中 錯誤日誌(error log):對mysql的啓動、運行、關閉過程中產生的錯誤、警告或者甚至正確信息 二進制文件(binlog):記錄所有對mysql的寫操作語句,有statements和r

原创 mysql鎖機制總結

以下探討皆是針對數據庫默認的隔離級別(REPEATABLE READ)來說的 1 mysql加鎖的兩個規則 原則 1:加鎖的基本單位是 next-key lock。並且,next-key lock 是前開後閉區間。 原則 2:查找過程

原创 ROW/COW 快照技術原理解析

目錄 目錄快照與備份的區別Snapshot 快照技術 全量快照增量快照 COW 寫時拷貝快照技術ROW 寫時重定向快照技術最後 快照與備份的區別 傳統地, 人們一直採用數據複製、備份、恢復等技術來保護重要的數據信息,

原创 MySql範圍查找時,索引不生效問題原因

1 問題描述 本文對建立好的複合索引進行排序,並取記錄中非索引字段,發現索引不生效,例如,有如下表,DDL語句爲: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `bi