原创 排序算法之快速排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、快速排序的原理 快速排序採用了分治的思想,將一個數組分成多個子數

原创 劍指Offer【1-10】Java實現

1、在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 public class Sol

原创 數據結構之B-樹、B+樹

B樹的概念是爲了解決一些現實問題而提出的,當數據量太大時,而內存中又無法存儲這麼多的數據,那麼就需要將數據存儲在磁盤上,如果繼續採用平衡樹的方法就會帶來一些問題,平衡樹每個節點都會分爲兩個節點,那麼當數據太大的時候,樹的高度也會不

原创 對象何時進入老生代

內存分配策略 對象的內存分配其實就是在堆上分配,那麼細分呢,什麼時候在新生代什麼時候在老生代都是需要了解的問題。這些問題與虛擬機垃圾回收器有關,但是大多數情況下,對象優先在新生代的Eden區上分配空間,但是也有直接在老生代分配內存的情況。

原创 ClassLoader中的loadClass和findClass方法

Java中ClassLoader的具體實現 Java虛擬機的類加載器本身可以滿足加載的要求,但是也允許開發者自定義類加載器。 jdk中classloader中loadclass方法的實現如下所示: protected Class<?> l

原创 劍指Offer【31-40】Java實現

31、求出1~13的整數中1出現的次數,並算出100~1300的整數中1出現的次數?爲此他特別數了一下1~13中包含1的數字有1、10、11、12、13因此共出現6次,但是對於後面問題他就沒轍了。ACMer希望你們幫幫他,並把問題更加普遍

原创 從輸入URL到頁面加載發生了什麼

這個過程其實很簡單,其實就是客戶端向服務器發生請求,服務器將結果返回客戶端的過程,但是真正的實現過程卻很複雜,總體來說,可以細分爲以下幾個部分: 什麼是URL URL的學名叫做統一資源定位符 ,是互聯網資源的地址,它包含協議、服務器名稱(

原创 簡單理解數據庫的三範式

數據庫設計中,需要遵循一定的規則才能避免數據的冗餘,這些規則實際上限制的是表與表、表與屬性之間的關係。這些不同的規範要求被稱爲不同的範式,各種範式呈遞次規範,越高的範式數據庫冗餘越小。 第一範式 第一範式(1NF)是指數據表中的每個字段必

原创 數據庫之事務詳解

什麼是事務 事務是訪問數據庫的一個或多個操作的組合,事務執行完之後可以使數據庫從一種狀態變爲另外一種狀態。 事務的四個特性 1、原子性 原子性指的是事務中的操作要麼全部執行,要麼全部不執行。這意味着如果事務正確執行,則數據庫從一種狀態成功

原创 LinkedList源碼詳解

成員變量聲明 private static class Node<E> { E item; Node<E> next; Node<E> prev; //Node是一個雙向鏈表 Node(Node<E

原创 ConcurrentHashMap源碼詳解

成員變量 private static final int MAXIMUM_CAPACITY = 1 << 30; private static final int DEFAULT_CAPACITY = 16; static fina

原创 HashMap源碼詳解

成員變量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 static final int MAXIMUM_CAPACITY = 1 << 30;// aka

原创 劍指Offer【21-30】Java實現

21、輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能爲該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1

原创 Hashtable源碼詳解

成員變量 private transient Entry<?,?>[] table;//存儲鏈表的數組 private transient int count; private int threshold; private floa

原创 自動裝箱和自動拆箱——源碼分析

自動裝箱和拆箱是Java提供給程序員的語法糖,方便了程序員開發,Java爲每種基本數據類型都提供了對應的包裝器類型。Integer和int類型變量的相互轉換,代碼如下所示: Integer i = 1; int j = i; int m