原创 Java 程序員都該懂的 JVM 內存區域 一. 內存區域 二. 瞭解 Java 對象

對於 Java 程序員來說,在 JVM 自動內存管理機制的幫助下,不再需要爲每一個 new 操作去寫對應的 delete/free 代碼,不容易出現內存泄露和內存溢出的問題。不過正因如此,如果不瞭解虛擬機是怎樣使用內存的,一旦出現內存泄露

原创 Kubernetes 之淺析 Pod

一. 爲什麼需要 Pod 在一個 Linux 操作系統中,進程是以進程組的方式組織在一起的,即一個或多個進程的集合,一方面是一些進程之前存在密切的關係,更重要的一點是方便管理。 而容器的本質實際上就是進程,經過了隔離,限制等一系列操作之後形

原创 算法必學:經典的 Top K 問題 一. 立刻就能想到的解法 二. O(n) 時間複雜度的方法 三. 利用分佈式思想處理海量數據 四. 利用最經典的方法,一臺機器也能處理海量數據

什麼是 Top K 問題?簡單來說就是在一堆數據裏面找到前 K 大(當然也可以是前 K 小)的數。 這個問題也是十分經典的算法問題,不論是面試中還是實際開發中,都非常典型。而這個問題其實也有很多種做法,你真的都懂了麼? 一. 立刻就能想

原创 談一談 JVM 對鎖的優化 一. 從 ReentrantLock 和 synchronized 看鎖的優化 二. 自旋鎖 三. 鎖消除 四. 鎖粗化 五. 偏向鎖 六. 輕量級鎖

JDK 1.6 對併發性進行了很大的改進,這也是爲了使線程之間更好更高效地共享數據,解決競爭問題,實現線程安全。因此從 JDK 1.6 開始,實現了很多鎖的優化技術。 一. 從 ReentrantLock 和 synchronized

原创 一探 Docker 鏡像的究竟

一. 引入 我們經常拿 Docker 容器與虛擬機作對比,Dokcer 容器跟虛擬機的不同之處在於,在使用 Docker 的時候,實質上並沒有生成一個真實存在的“容器”。Docker 幫助用戶啓動的,其實就是應用本身,只不過在創建這些進程時

原创 你真的瞭解什麼是進程嗎?

一. 進程和線程 進程 我們的操作系統裏面會有很多應用,比如手機裏面的各種應用,每一個應用都有一個或多個進程,而且每個應用運行時又會用到很多不同的資源。進程就幫助我們隔離了不同的資源,利用各種資源幫助應用管理着各種狀態,因此,我們經常說進程

原创 你真的理解什麼是死鎖嗎?

一. 死鎖的概念 兩個或多個進程,由於資源的競爭或者彼此間的通信而造成的阻塞現象,如果沒有外力干預,它們將無法進行下去,這就發生了死鎖。 更規範的定義:集合中的每一個進程都在等待只能由本集合中的其他進程才能引發的事件(資源),那麼該組進程是

原创 你真的瞭解 JVM 的垃圾回收機制嗎

垃圾收集是一項自動化的技術。可是當我們排查各種內存問題,或者當垃圾收集成爲系統達到更高併發量的瓶頸時,我們需要對這些原本自動化的技術進行必要的監控和調節,所有我們很有必要學習 JVM 的垃圾收集機制。 一. 什麼區域需要回收?爲什麼需要

原创 Java 程序員都該懂的 JVM 內存區域

對於 Java 程序員來說,在 JVM 自動內存管理機制的幫助下,不再需要爲每一個 new 操作去寫對應的 delete/free 代碼,不容易出現內存泄露和內存溢出的問題。不過正因如此,如果不瞭解虛擬機是怎樣使用內存的,一旦出現內存泄露

原创 Java 程序員都該懂的 JVM 垃圾回收機制

垃圾收集是一項自動化的技術。可是當我們排查各種內存問題,或者當垃圾收集成爲系統達到更高併發量的瓶頸時,我們需要對這些原本自動化的技術進行必要的監控和調節,所有我們很有必要學習 JVM 的垃圾收集機制。 一. 什麼區域需要回收?爲什麼需要

原创 Java 程序員都該懂的 Java8 HashMap

HashMap 一直是非常常用的數據結構,也是面試中十分常問到的集合類型,今天就來說說 HashMap。 但是爲什麼要專門說明是 Java8 的 HashMap 呢?我們都知道,Java8 有很多大的變化和改動,如函數式編程等,而

原创 算法必學:經典的 Top K 問題

什麼是 Top K 問題?簡單來說就是在一堆數據裏面找到前 K 大(當然也可以是前 K 小)的數。 這個問題也是十分經典的算法問題,不論是面試中還是實際開發中,都非常典型。而這個問題其實也有很多種做法,你真的都懂了麼? 一. 立刻就能想

原创 經典的 Top K 問題,你真的懂了麼?

什麼是 Top K 問題?簡單來說就是在一堆數據裏面找到前 K 大(當然也可以是前 K 小)的數。 這個問題也是十分經典的算法問題,不論是面試中還是實際開發中,都非常典型。而這個問題其實也有很多種做法,你真的都懂了麼? 一. 立刻就能想

原创 談一談 JVM 對鎖的優化

JDK 1.6 對併發性進行了很大的改進,這也是爲了使線程之間更好更高效地共享數據,解決競爭問題,實現線程安全。因此從 JDK 1.6 開始,實現了很多鎖的優化技術。 一. 從 ReentrantLock 和 synchronized

原创 Java 程序員都該懂的 volatile 關鍵字

今天,來談談 Java 併發編程中的一個基礎知識點:volatile 關鍵字 本篇文章主要從可見性,原子性和有序性進行講解 一. 主存與工作內存 說 volatile 之前,先來聊聊 Java 的內存模型。 在 Java 內存模型中,規