原创 分佈式Session存儲方案

前言  本文主要探討集羣后不同Web服務器獲取Session數據的問題解決方案。 1. Session Stick  Session Stick 方案即將客戶端的每次請求都轉發至同一臺服務器,這就需要負載均衡器能夠根據每次請求的會話標

原创 各大公司Java後端開發面試題總結

ThreadLocal(線程變量副本)  Synchronized實現內存共享,ThreadLocal爲每個線程維護一個本地變量。  採用空間換時間,它用於線程間的數據隔離,爲每一個使用該變量的線程提供一個副本,每個線程都可以獨立地改變

原创 Java集合面試

HashMap的工作原理是近年來常見的Java面試題。幾乎每個Java程序員都知道HashMap,都知道哪裏要用HashMap,知道Hashtable和HashMap之間的區別,那麼爲何這道面試題如此特殊呢?是因爲這道題考察的深度很深。

原创 七大查找算法

查找是在大量的信息中尋找一個特定的信息元素,在計算機應用中,查找是常用的基本運算,例如編譯程序中符號表的查找。本文簡單概括性的介紹了常見的七種查找算法,說是七種,其實二分查找、插值查找以及斐波那契查找都可以歸爲一類——插值查找。插值查找

原创 ESI 動態緩存技術

任何一個Web網站的內容都是在不斷更新和變化,但這並不意味這這個網站的內容就是動態內容,事實上,動態的內容是指用戶每次點擊 相同的鏈接時取的的內容是由Web服務器應用程序生成的,如常見得ASP,JSP等,與此相對應,靜態內容一般就是指由

原创 java類初始化順序

我們大家都知道,對於靜態變量、靜態初始化塊、變量、初始化塊、構造器,它們的初始化順序依次是(靜態變量、靜態初始化塊)>(變量、初始化塊)>構造器。我們也可以通過下面的測試代碼來驗證這一點:  Java代碼  public clas

原创 八大排序算法

概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裏說說八大排序就是內部排序。          當n較大,則應採

原创 源碼解析-集合-LinkedList

一、源碼解析     1、 LinkedList類定義。   public class LinkedList<E> extends AbstractSequentialList<E> implements Li

原创 源碼解析-集合-HashSet

一、  HashSet概述:    HashSet實現Set接口,由哈希表(實際上是一個HashMap實例)支持。它不保證set 的迭代順序;特別是它不保證該順序恆久不變。此類允許使用null元素。   二、  HashSet的實

原创 源碼解析-集合-ArrayList

一、 ArrayList概述:   ArrayList是基於數組實現的,是一個動態數組,其容量能自動增長,類似於C語言中的動態申請內存,動態增長內存。       ArrayList不是線程安全的,只能用在單線程環境下,多線程環境

原创 源碼解析-集合-ConcurrentHashMap

集合是編程中最常用的數據結構。而談到併發,幾乎總是離不開集合這類高級數據結構的支持。比如兩個線程需要同時訪問一箇中間臨界區(Queue),比如常會用緩存作爲外部文件的副本(HashMap)。這篇文章主要分析jdk1.5的3種併發集合類型

原创 Java併發編程之CAS

CAS(Compare and swap)比較和替換是設計併發算法時用到的一種技術。簡單來說,比較和替換是使用一個期望值和一個變量的當前值進行比較,如果當前變量的值與我們期望的值相等,就使用一個新值替換當前變量的值。這聽起來可能有一點

原创 源碼解析-集合-Arrays

一、Arrays.sort()數組排序 Java Arrays中提供了對所有類型的排序。其中主要分爲Primitive(8種基本類型)和Object兩大類。   基本類型:採用調優的快速排序;   對象類型:採用改進的歸併排序。

原创 多線程之指令重排序

一、爲什麼會亂序 現在的CPU一般採用流水線來執行指令。一個指令的執行被分成:取指、譯碼、訪存、執行、寫回、等若干個階段。然後,多條指令可以同時存在於流水線中,同時被執行。指令流水線並不是串行的,並不會因爲一個耗時很長的指令在“執行”階