原创 java.util.Optional

簡介 爲了避免null導致NullPointerException,JAVA8新增了Optional來避免這種情況的發生。 當變量T存在時, Optional類只是對類簡單封裝。當變量T不存在時,缺失的值會被建模成一個“空”的Option

原创 新的日期和時間API

簡述Date歷史 JAVA1.0時代,對日期和時間的支持只能依賴java.util.Date類。該類只能以毫秒的精度來表示時間。該類在使用時存在如下不適合的地方:年份的起始選擇是1900年、月份的起始從0開始、toString的返回值中甚

原创 其他內容

類型註解 java8裏面註解可以應用在任何地方。類型註解只是語法而不是語義,並不會影響java的編譯、加載以及運行時間。 類型註解被用來支持在Java的程序中做強類型檢查。 配合插件式的check-framework,可以在編譯的時候檢測

原创 如何改造老舊代碼

重構代碼,用Lambda表達式取代匿名類 由於Lambda可以看做是函數式接口的實例,因此,只能將實現了單一抽象方法的匿名類轉換爲Lambda表達式。 注意事項: ①匿名類和Lambda表達式中的this和super的含義是不同的。在匿名

原创 JAVA8帶給我們的思考

函數式的思考 這裏有個假設問題:目前有3個線程,分別是線程A、B、C,然後這3個線程分別去訪問functionXXX,這就意味着functionXXX的內部變化是會影響到線程A、B、C的,除去函數自身本職工作之外,其還影響其他的業務,這種

原创 第五章:其他

UTF UTF-8/16/32,這裏面的阿拉伯數字到底代表什麼含義呢? UTF8中的8代表最小以8位爲一個代碼單元即1個字節。 UTF16代表最小用16位爲一個代碼單元即2個字節。 UTF32則以32位爲一個代碼單元即4個字節。 這些代碼

原创 第一章:事情起因

之前負責了一個2008年的項目,該項目字符集是GBK,由於連續出現了各種只屬於GB18030字符集的生僻字之後,導致應用不得不從GBK升級爲GB18030字符集。 本以爲升級到GB18030後就萬事大吉了,結果還是不行,明明有些字屬於GB

原创 第二章:JSP引出的問題

在JSP文件中,我們會經常發現如下2個關於字符的代碼: contentType中的charset,還有就是JSP的pageEncoding。那charset與encoding怎麼會有這2個名詞呢? 答:charset全稱是characte

原创 RK算法

RK算法全程Rabin-Karp,該算法的2位發明者Rabin和Karp的名字組合而成。該算法的核心思想就是通過比較2個字符串的hashcode來判斷是否包含對方。 由於該算法核心思想是計算字符串的hashcode,因此必須保證hash算

原创 MySQL-0-學習前的想法

MySQL有幾年的時間沒用過了,2012-2014年這3年的時間一直用的MySQL,然後從2015年12月份以來到現在一直用其他類型的數據庫(需要花錢的那種數據庫),所以,還得重新拾起來學習下。 我對學習過程安排如下:首先從整體架構設計的

原创 MySQL-1-MySQL物理設計

日誌文件 日誌文件 ①錯誤日誌:錯誤日誌記錄了MyQL-Server運行過程中所有較爲嚴重的警告和錯誤信息,以及MySQL-Server每次啓動和關閉的詳細信息。在默認情況下錯誤日誌是關閉的,錯誤信息被輸出到標準錯誤輸出(stderr),

原创 MySQL-2-MySQL邏輯設計

整體來講MySQL可以看成是二層架構,第一層我們通常叫做SQL Layer,在MySQL數據庫系統處理底層數據之前的所有工作都是在這一層完成的,包括但不限於:權限判斷、sql解析、執行計劃優化、query cache的處理等等;第二層就是

原创 位圖

位圖,這塊怎麼理解呢?其實我個人也沒怎麼用過,只是從公衆號、博客上多多少少瞭解到一點信息。 我對位圖的理解,可以從字面意思去理解,這裏強調“位”,感覺就是用來存儲0/1的數組。看看了官方介紹,位圖其實就是普通的字符串,也就是byte數組。

原创 超出物理內存後的Redis應對策略

當Redis內存超出物理內存限制時,內存的數據會開始和磁盤產生頻繁的交換。交換會讓Redis的性能急劇下降,對於訪問量比較頻繁的Redis來說等於不可用。 爲了限制最大使用內存,Redis提供了配置參數maxmemory來限制內存超出期望

原创 分佈式鎖

> setnx lock:XXXX true ... 業務處理 ... > del lock:XXXX  (integer) 1 這裏有個問題,就是當“業務處理”發生死循環時,釋放鎖的操作就永遠不會發生,爲了避免這種情況發生,進