原创 Java併發編程(九):深入JVM 核心全面理解 Synchronized

該文章內容較多,發佈在gitchat,涉及內容主要包括: 一、用法總結 二、類加載器對 class 鎖的影響 三、線程的實現 四、基於 monitor 實現的重量級鎖 4.1 monitor 4.2 對象內存佈局 4.3 monitor

原创 Java對象內存佈局概述

以HotSpot虛擬機爲例,對象在內存中可以分爲三塊區域:對象頭、實例數據和對齊填充。其中,對象頭包含Mark Word和類型指針,關於對象頭的內容,在gitchat中對其實現和原理都已經結合openjdk源碼進行了詳細的說明,其也不是本

原创 數據結構與算法(二):數組

注:我們先由簡到難總結一下常用的數據結構,如簡單數組、鏈表、散列表、隊列、棧、樹、圖等等,最後再來研討算法。 一、線性表 線性表是很基本的一種數據結構,就如字面意思一樣,它把若干數據線性組合在一起:每個元素都最多隻有前相鄰和後相鄰元素,也

原创 Lucene檢索源碼解析(下)

上文已經介紹了檢索前的準備工作,本文接着上文的內容,繼續剖析檢索和打分操作 一、獲取LeafCollector 我們先來看一下IndexSearcher的search方法: protected void search(List<Leaf

原创 Lucene打分公式詳解(TFIDFSimilarity)

本文章基於Lucene5.5,對其默認使用的打分公式(TFIDFSimilarity)進行解析 一、餘弦相似度算法 由於網絡上有很多關於VSM(向量空間模型)的解釋,這裏就不花費篇章做基本理論的描述了,只總結一下算法即可。給定兩個文本,按

原创 Java併發編程(八):volatile使用和原理詳解

一、背景 大家都知道volatile作爲一個“輕量級”的關鍵字,它能夠保證可見性、有序性,但是不能保證原子性。那麼它到底是怎麼保證可見性和有序性的呢?爲什麼不能保證原子性呢?我們該如何正確使用volatile呢?下面我們一一進行解釋。 二

原创 JIT生成代碼反彙編

一、背景 我們知道,通過javap命令可以查看字節碼信息,我們通過字節碼可以知道對於一個程序,虛擬機做了些什麼事情。但是各大虛擬機廠商對其的實現細節可能會大不相同,字節碼只能從語義上解釋程序的執行。如果我們要分析程序在宿主環境中到底是如何

原创 Java併發編程(一):計算機基礎-CPU製造

這系列旨在總結java併發編程中的一些原理、工具、技巧和一些注意事項等,在開始Java的部分之前,會先花一些篇幅總結計算機的一些基礎,別是CPU和內存部分,以幫助後面理解一些原理性的東西。 一、簡述 計算機從上個世紀被髮明後,由第一代的電

原创 數據結構與算法(四):棧與應用

一、定義 棧是一種操作受限的線性表。之所以說它操作受限,是由於其只能在一端插入和刪除數據。這一端叫做“棧頂”,另外一端則爲“棧底”。插入的操作我們通常稱之爲“PUSH”(入棧),刪除的操作我們通常稱之爲“POP”(出棧)。所以它具有FIL

原创 redis實現簡易分佈式鎖

一、依賴命令 SET key value [EX seconds] [PX milliseconds] [NX|XX] 注:這是redis後面版本擴展了set指令(可以替代setnx、setex等),也就是簡單的將set key valu

原创 Java 左移運算符注意事項

簡單的我們知道左移一位表示乘以2,像1<<2=4。但是左移個幾百位呢?1<<100=?? 一個int佔32位,一個long才佔64位,左移幾百位真要乘這麼多2的話,肯定是存不下的。比如以下代碼: System.out.println(

原创 spring實現定時器(配置+註解)

現在由於開發要求,需要用到定時器的地方可能比較多。在這裏把使用spring定時器的基礎方法分享出來,希望能給大家帶來幫助。 方式一:使用配置方式 導入jar包 在spring核心配置文件中添加命名空間和xmlschema地址   xml

原创 spring-security框架源碼改造:根據接口參數驗證權限

一、背景 spring-security作爲一個權限驗證框架,還是很好用的(雖然有點“重”),它能攔截請求,根據請求的路徑、配置的權限碼和定義的權限驗證器進行權限攔截,同時能很方便的和spring、sprign-session等集成。但是

原创 Java深入JVM源碼核心探祕Unsafe(含JNI完整使用流程)

一、介紹 在Java中,sun.misc.Unsafe可以認爲是用於JDK內部使用的工具類,它將一些需要使用native語言實現的功能通過java方法暴露出來,這些方法比較“危險”,因爲它們可以直接修改內存中的值。 通常情況下,我們並不能

原创 MySQL記錄select到文件、從文件導入

注:本文簡單總結,詳細內容請參考官方文檔 1、select到文件 select [fields] from [tableName] [join] where [options] into outfile [file];   例: se