Time of Update: 2016-04-11
標籤:一個線上2k的遊戲,每秒鐘並發都嚇死人。傳統的hibernate直接插庫基本上是不可行的。我就一步步推匯出一個無鎖的資料庫操作。 1. 並發中如何無鎖。一個很簡單的思路,把並發轉化成為單線程。Java的Disruptor就是一個很好的例子。如果用java的concurrentCollection類去做,原理就是啟動一個線程,跑一個Queue,並發的時候,任務壓入Queue,線程輪訓讀取這個Queue,然後一個個順序執行。 在這個設計模式下,任何並發都會變成了單線程操作,
Time of Update: 2016-04-11
標籤:Java通過Executors提供四種線程池,分別為:newCachedThreadPool建立一個可緩衝線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則建立線程。newFixedThreadPool 建立一個定長線程池,可控制線程最大並發數,超出的線程會在隊列中等待。newScheduledThreadPool 建立一個定長線程池,支援定時及週期性任務執行。newSingleThreadExecutor
Time of Update: 2016-04-12
標籤:學習java運行時記憶體模式: 各區介紹: 方法區(線程共用):用於存放被虛擬機器載入的類的中繼資料:靜態變數,常量,以及編譯和的代碼(位元組碼),也稱為永久代(所有該類的執行個體被回收,或者此類classLoader被回收)。 Java堆(線程共用):存放對象執行個體和數組,這裡是記憶體回收的主要地方。可以分為新生代(young)和年老代(tenured)。從字面也可以知道,新生代存放剛剛建立的對象而年老代存放長久沒有被記憶體回收機制回收的對象。一般新生代有分為eden,f
Time of Update: 2016-04-12
標籤:剛才自己做一個小例子,就是在android端點擊一個button,然後從伺服器端下載檔案到手機SD卡。結果卻遇到了問題,剛開始挺興奮的,因為自己做的可以下載下來檔案了,但是自習看才發現有問題,那就是下載到檔案的大小卻是0,匯出後無法開啟,搞不懂,然後不知道怎麼搞的過了一會兒,檔案大小自己又變化了,下載的一個txt的檔案大小恢複正常,而下載的mp3檔案卻只有198K,如:我的服務端代碼如:遇到這麼奇葩的問題,我就開始想讀取txt那個就成功了,為什麼這個卻失敗了,看了看代碼才知道,原來自己讀取
Time of Update: 2016-04-12
標籤: 課程背景為了滿足高可用、可擴充並容錯的分布式搜尋引擎。Solr是一個高效能,採用Java5開發,
Time of Update: 2016-04-11
標籤:. any character\d A digit 0-9\D a non-digit [^0-9]\s a whitespace character, 空白字元\S a non-whitespace character\w a word character [a-zA-Z0-9]\W a non-word characterpackage DAO;import
Time of Update: 2016-04-12
標籤:剛才在看協助文檔的時候,發現Java io包中FilterReader和FilterWriter類沒使用過,所以想實踐一下。還用以前的老方法,new一個出來,結果提示有錯誤:Cannot instantiate the type FilterReader不能執行個體化?一查協助文檔原來這樣寫道:public abstract class FilterReader extends ReaderAbstract class for reading
Time of Update: 2016-04-11
標籤:1、Greediness(貪婪型):最大匹配X?、X*、X+、X{n,}都是最大匹配。例如你要用“<.+>”去匹配“a<tr>aava</tr>abb”,也許你所期待的結果是想匹配“<tr>”,但是實際結果卻會匹配到“<tr>aava</tr>”。這是為什麼呢?下面我們跟蹤下最大匹配的匹配過程。①“<&rd
Time of Update: 2016-04-12
標籤:一.流 流,這裡是對資料交換的形象稱法。進程是運行在記憶體中的,在啟動並執行過程中避免不了會與外界進行資料互動。比如將資料從硬碟、控制台、管道甚至是通訊端(具體點應該是我們電腦上的網卡)讀到我們進程鎖所佔據的地址空間中。這個資料交換的過程,我們稱之為流。在流上的操作就所謂的I/O操作了。二.裝飾者模式 在介紹JAVA中的I/O操作之前我們先介紹一下裝飾者模式。 裝飾者模式就是對象的組合。我們如果給某個類增加新的方法,而且我們並不想修改這個類(或這個類有可能已經編譯過無法修
Time of Update: 2016-04-11
標籤: 以下內容來自周志明的《深入理解java虛擬機器》: 類初始化階段是類載入過程的最後一步,前面的類載入過程中,除了在載入階段使用者應用程式可以通過自訂類載入器參與之外,其餘動作完全由虛擬機器主導和控制。 到了初始化階段,才真正開始執行類中定義的Java程式碼(或者說是位元組碼)。 在準備階段,變數已經賦過一次系統要求的初始值,而在初始化階段,則根據程式員通過程式制定的主觀計划去初始化類變數和其他資源,或者可以從另外一個角度來表達:初始化階段是執行類構造器<clinit&g
Time of Update: 2016-04-11
標籤:前言: 剛好今天回來的很早, 總結下 Tomcat及Http的基礎知識. 1, Tomcat web相關概念 web:網頁的意思,網頁資源套件括伺服器上的所有資源. web資源分類:
Time of Update: 2016-04-11
標籤:1. PATH環境變數。作用是指定命令搜尋路徑,在shell下面執行命令時,它會到PATH變數所指定的路徑中尋找看是否能找到相應的命令程式。我們需要把 jdk安裝目錄下的bin目錄增加到現有的PATH變數中,bin目錄中包含經常要用到的可執行檔如javac/java/javadoc等待,設定好 PATH變數後,就可以在任何目錄下執行javac/java等工具了。 2.
Time of Update: 2016-04-11
標籤:最近在看代碼的時候看見了System.getProperty("user.dir")這個方法,覺得有必要記一下,就將所有與System.getproperty(),有關的參數這裡了一下,下面是這些參數的一些解釋:一:System.getproperty()可以傳遞的參數(1)java.vendor Java 運行時環境供應商(2)java.vendor.url Java 供應商的
Time of Update: 2016-04-11
標籤: 今天重溫了一下方法重載和方法重寫。 首先是方法重寫(override)的幾點要求: 1、必須繼承父類或者實現某介面的方法。
Time of Update: 2016-04-11
標籤:一天一個變成了幾天一個,最近接受的新東西太多、太快,有好多需要blog的但沒有時間,這些基礎知識應該是要深挖並好好研究的,不應該每次都草草了事,只看個皮毛。數組: JVM將數組儲存在一個稱為堆(heap)的記憶體地區中,堆用於動態記憶體分配,在堆中記憶體塊可以按隨意的順序分配和釋放 1.int[] a; ——表示聲明一個數組(也可寫為 int
Time of Update: 2016-04-11
標籤:今天來說說java物件導向的知識點~事實上。java在其發展過程中可以成功。非常大一部分原因是其物件導向的思想~1、概念如今來說物件導向思想。也不是什麼新的知識點了,我們知道如今非常多語言都有物件導向的思想了;當然我們還知道如今依然非常火的C語言。事實上還是面向過程的語言。包含近期一段時間也出現了非常多新的思想,比方面向函數,面向分布式,面向...等等一系列的東東,事實上這些都僅僅是一個概念而已~在物件導向中。實際上還存在著三個基本的特性:·封裝性:保證對外部不可見;·繼承性:繼續發揚廣大
Time of Update: 2016-04-11
標籤:1.使用Date方法:匯入 java.util.Date包Date d = new Date();System.out.println(d);可得到結果:Sun Apr 10 23:09:58 CST 2016 ,CST 代表 China Standard Time (中國標準時間,也就是北京時間,東八區)2.可以使用 format() 方法將日期轉換為指定格式的文本:匯入java.text.SimpleDateFormat包Date d = new
Time of Update: 2016-04-11
標籤: 設計模式(Design
Time of Update: 2016-04-11
標籤:抽象方法和抽象類別抽象方法抽象類別必須使用abstract修飾,有抽象方法的類必須被定義成抽象類別,抽象類別裡可以沒有抽象方法抽象方法和抽象類別的規則如下:抽象方法必須使用abstract修飾,抽象類別也必須使用abstract來修飾,抽象方法不能有方法體抽象類別不能被執行個體化,無法使用new關鍵字來調用抽象類別的構造器來建立抽象類別的執行個體,即使抽象類別裡不包含抽象方法,這個抽象類別也不能被執行個體化抽象類別裡可以包含屬性、方法(普通方法和抽象方法)、初始化塊,構造器、內部類和枚舉類
Time of Update: 2016-04-11
標籤:package lianxi;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class CopyFile {public static void copy(File a,File b){ try { FileInputStream fis = new FileInputStream("