Time of Update: 2018-12-06
1.hashmap是按照儲存結構來講是數組(散列桶)與鏈表的組合體.2. 如何計算hashmap中的散列桶的位置。首先hashcode的值是用來輔助計算散列桶的位置的。如何散列有不同的演算法,比如%或 & (散列桶的length-1)hashmap內部實現會把hashcode的值通過移位等運算再加工一下,保證加工之後的值二進位串中的01分布更加均勻. 數組的index或散列桶的位置等於h & (length-1); 由於length初始值是16,
Time of Update: 2018-12-06
網路編程中提出了將Socket放入池中,讓多個線程共用這些插座(Socket)對應的線纜(Conenction)DB串連池就是基於串連池的一個實現。串連池是用戶端使用的技術。比如C3P0,DBCP都是應用程式做為用戶端通過串連池訪問DB 1.串連池的前世:通過JDBC訪問DB:一般來說,Java應用程式訪問資料庫的過程(1所示)是:①裝載資料庫驅動程式;②通過JDBC建立資料庫連接;③訪問資料庫,執行SQL語句;④斷開資料庫連接。 2.為什麼現在不用JDBC: JDBC作為一種資料庫訪問技
Time of Update: 2018-12-06
很多時候, 在linux環境下使用svn命令:通常在上線之後,需要提交的代碼都是通過補丁,然後使用SVN來提交。SVN常用命令:svn revert file/path svn diff 當打了補丁之後,可以使用該命令查看是否打上。svn commit -m filename --username user 打了補丁之後,在執行之前要確認是否有新增的檔案。svn add new file 新檔案,首先需要add. 然後才commit.
Time of Update: 2018-12-06
一。非靜態域的消極式載入使用DCL實現的問題:編譯器會無序寫入1.什麼是無序寫入:按常規先初始化,後指向。真實的情況是寫指向,後初始化。當執行instance =new Singleton(); 相當於執行了下列虛擬碼: mem = allocate(); //Allocate memory for Singleton object.instance = mem; //Note that instance is now non-null,
Time of Update: 2018-12-06
Oracle中在DDL的時候,列類型date是包括時間+時間的,並且精確到毫秒.
Time of Update: 2018-12-06
HotSwitch經常在一些資料庫的主從備份中出現。另一個情境索引的切換。下面提一個java類比的路徑切換的樣本。採用簡單的round robin演算法實現:import java.io.File;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class TestHotSwitch implements Runnable{ File file;
Time of Update: 2018-12-06
rsync mount命令的區別:1.在比較rsync與mount之前,首先應該明確二者使用的情境,rsync用來複製檔案到目標(源到目標主動複製),而mount是用來遠端存取伺服器。不複製到本地訪問.NFS的問題是當並發請求很大的時候, 頻寬,IO延遲, 伺服器的磁碟IO有可能成為瓶徑。 避免磁碟IO的一個辦法就是將檔案伺服器的內容複寫到WEB伺服器本地。這樣做到一個類似磁碟IO的負載平衡(有點象RAID)2.NFS底層基於RPC(類似於應用程式層協議HTTP,但是由Linux提供)傳輸檔案。
Time of Update: 2018-12-06
public class CharCodeUtils {private static CharsetConverter cc = new CharsetConverter(10);private static Logger logger = Logger.getLogger(CharCodeUtils.class);private static boolean hasInit = false;/** * 擷取設定檔的路徑 String[] * * @return * */private
Time of Update: 2018-12-06
特點:1.關於指令碼的執行策略:1.1產生索引的主機運行generateIndex,是每個小時的第14分鐘執行,可理解為每隔一個小時執行,執行時指令碼會判斷是否已經有指令碼或索引類在運行。如果為真等到下一個小時再去嘗試。generateIndex的指令碼本身的生命週期應該在deadline(目前是23*3600s)之上(23~24h之間),如果Indexer執行完的時間小於deadline,那麼IncrementIndexer會一直執行建增量索引並同步到遠程主機的indexpathrsync直
Time of Update: 2018-12-06
說到阻塞,首先得說說I/O等待。I/O等待是不可避免的,那麼既然有了等待,就會有阻塞,但是注意,我們說的阻塞是指當前發起I/O操作的進程被阻塞同步阻塞I/O便是指,當進程調用某些涉及I/O操作的系統調用或庫函數時,比如accept()(注意accept也算在了i/o操作)、send()、recv()等,進程便暫停下來,等待I/O操作完成再繼續運行。這是一種簡單而有效的I/O模型,它可以和多進程結合起來有效利用CPU資源,但是代價就是多進程的大量記憶體開銷。 同步阻塞 進程坐水,就不能燒粥
Time of Update: 2018-12-06
轉自http://wenku.baidu.com/view/0230a8fd941ea76e58fa04cb.html 常見的符號有三種:@ # // (不常見的我也沒有見過)一般來說我們都是糊裡糊塗地被自動加上@這樣的符號,多數人也懶得管這些鬼符號。其實我們也可以在編寫微博的時候主動地輸入這些古怪玩意兒。它們都有什麼用呢?@微博人名@這個符號會把緊跟它之後的文字當成一個人名,自動產生一個指向這個人的微博。當然如果這個微博名字不存在,系統會告訴你。例如:編輯時你輸入:有一天@阿狗
Time of Update: 2018-12-06
group by表示by一定的規則進行分組。 通過一定的規則將一個資料集劃分成若干個小的地區,然後針對若干個小地區進行資料處理。group by只能返回group by的欄位與彙總函式的計算結果。如果在返回集欄位中,這些欄位要麼就要包含在Group By語句的後面,作為分組的依據;要麼就要被包含在彙總函式中。顧名思議,彙總表示將多個值匯為一個值以便與group by的欄位一一對應。具體分析見樣本1.當理解了group by與彙總函式,就很好理解count(distinct field)是否可用。
Time of Update: 2018-12-06
安全執行緒情境備忘:1.載入引起的線程問題消極式載入-》使用消極式載入的單例(有的單例的實現並不需要消極式載入)-》避免線程多次執行個體化域,只執行個體化一次2. 非消極式載入的靜態域的安全執行緒問題:多線程修改域的屬性值。注意,這個樣本不存在情境1的問題。因為域是靜態域且非消極式載入,並且該域私人,這樣該域只會執行個體化一次。 public class Weibo implements java.io.Serializable {private static final long
Time of Update: 2018-12-06
在API設計中,TOKEN用來判斷使用者是否有許可權訪問API.TOKEN首先不需要編解碼處理. 一般TOKEN都是一些使用者名稱+時間等內容的MD5的無法復原加密.然後通過一個USER_TOKEN表來判斷使用者請求中包含的TOKEN與USER_TOKEN表中的TOKEN是否一致即可. API設計中往往需要提供一個沙箱環境,供使用者類比調用. 所以TOKEN也需要分為測試TOKEN與運行TOKEN複雜一點的TOKEN設計可能需要數位簽章的技術.
Time of Update: 2018-12-06
1.為什麼要有過程日誌:配置過程日誌主要對log4j的熟悉程度. 當線上的資料庫不能調試的時候,一種辦法是在測試庫上建立到線上庫的dblink, 使用insert into table select * from t1@dblink ...匯入線上的資料到測試庫,通過跟蹤問題資料來定位程式問題. 另一種辦法就是通過詳細的過程日誌,看看問題資料是如何產生的, 列印詳細的過程日誌非常非常重要 2.添加過程日誌加過程日誌小心null
Time of Update: 2018-12-06
內容來自:http://marklodato.github.com/visual-git-guide/index-en.html 什麼是reference: reference,引用指的都是.git下的檔案。HEAD就是reference中的一個, HEAD的指向的都是current branch。注意branch上面箭頭表示可以移動到任意一個commit的id上。commit的箭頭表示指向parent commit對象。理解了reference之後,對於reset也很好理解。The
Time of Update: 2018-12-06
分布式系統的CAP理論:理論首先把分布式系統中的三個特性進行了如下歸納:● 一致性(C):在分布式系統中的所有資料備份,在同一時刻是否同樣的值。● 可用性(A):在叢集中一部分節點故障後,叢集整體是否還能響應用戶端的讀寫請求。(可用性不僅包括讀,還有寫)●
Time of Update: 2018-12-06
本文譯自 http://nvie.com/posts/a-successful-git-branching-model/ (by Vincent
Time of Update: 2018-12-06
理解負載平衡,首先要理解轉移與轉寄的區別:轉移與轉寄就象客戶與外包公司是否需要直接接觸的情境一樣,如果直接與外包公司接觸就是轉移。如果通過接包人接觸。客戶與外包公司之間透明,就是轉寄。轉移:資料包從用戶端轉移到實際伺服器,需要知道實際伺服器的地址。轉寄:資料包只須從用戶端發送到Proxy
Time of Update: 2018-12-06
JMM中的關係總結:工作記憶體對應多核處理器中的每個處理器的快取。主存對應的是記憶體。工作記憶體與主存的關係很象是分布式緩衝與用戶端的關係。堆的共用,是Java中線程通訊的基礎。工作記憶體的變數是主存中變數的copy。工作記憶體的中的變數只有提交到主存才能被其它工作記憶體看到。 volatile: volatile原理:不使用工作記憶體,而直接存取主存中的變數。適用的情境是經常變化的變數。這樣就會保證每次讀到的都是最新的內容。當然是犧牲了效能。volatile還有一個作用就是禁止JVM對代碼最