原创 Spark參數解析之MasterArguments

前言 Spark參數解析的代碼我鬱悶了好一陣子,後面終於在快學Scala中看到的這種寫法,記錄一下。 關鍵源碼 MasterArguments參數解析的時候有這麼一段: private def parse(args: List[

原创 SparkSQL整合Alluxio實操

文章目錄前言整合思路環境準備SparkSql中表的操作庫的默認路徑修改直接指定小總結 前言 在前面的文章我做了一個hive整合alluxio的文章,Hive整合Alluxio實操那部分其實是爲了SparkSQL的整合做基礎。 整合

原创 Spark3.0源碼編譯

前言 Spark3.0已經發布有一陣子了,官方發佈了預覽版,帶來了一大波更新,對於我們程序員來說,首先當然是代碼拉過來,打個包,跑起來!! 源碼地址 Spark源碼是託管在github上面的,源碼地址:Spark官方源碼 不過cl

原创 五子棋與稀疏數組

前言 稀疏數組是我們一開始學數據結構的時候第一次有點味道的小算法了,大部分的人第一次是交代在這裏。這是因爲,這個需求來自於我們比較喜歡的五子棋小遊戲。這個遊戲主要是當年有個東西叫做電子詞典,也不知道是啥規則,清一色都有這個遊戲。

原创 Hive高頻函數(二)

前言 hive中有很大部分的函數是基於複雜類型去計算的,因爲我們現實中的數據往往不是f(x)->y這種類型的,更多其實是f(x1,x2,x3)->y的類型。在這種場景下,hive提供了複雜類型的操作。數據的結構類型會決定udf作用

原创 自定義類加載器

什麼時候需要類加載器? 1.想加載非classpath隨意路徑中的類文件 2.都是通過接口來實現,希望解耦時候,常用在框架設計 3.這些類希望予以隔離,不同應用的痛類名都可以加載,不衝突 步驟 1.繼承ClassLoader

原创 雙親委派源碼分析

說明 雙親委派其實字面上面翻譯成雙親,但是其實多個類加載器之間沒有繼承關係,看源碼其實只是一個遞歸調用的過程。 類加載的精髓解釋 在類加載的方案其實主要的目的是爲了保證版本的一致性,直觀點的例子就是,如果我們自己去定義一個類庫中已

原创 Idea下運行Maven項目時provide包沒有依賴導致類找不到

這個包在maven引入的時候是provide的,運行main函數的時候會有如下錯誤: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/sp

原创 字符串懶加載的證明

字符串是懶加載的,運行的時候相同的字符串會在串池中保存,怎麼去證明這件事呢?其實方法很簡單,我們利用Idea中的調試就可以看到內存中對象的狀態。 準備代碼: import com.sun.tools.attach.AttachNo

原创 DirectMemory內存回收

既然DirectMemory不受jvm管理,那麼這部分內存是不是不會回收呢,這次來探索這個話題。 當然還是來一段代碼: public class Jvm1_26 { static int _2G=1020*1024*102

原创 使用jstack定位程序許久沒有反應死鎖問題

引言 這個情況現象的程序運行的時候遲遲沒有輸出,我們可以懷疑的死鎖的問題,但是怎麼去定位這個問題呢,我們還是藉助jstack來做。 jstack 163746 這個查看沒有太複雜的流程,直接查看堆棧信息最後的一部分就ok Fou

原创 字符拼接的深入理解

字符串拼接在日常中編碼中大量使用,但是對底層的原理卻缺乏理解。 我們還是從一段代碼開始: public static void main(String[] args) throws Exception{ Strin

原创 JVM方法區詳細定義

#1 定義 方法區的定義很多地方比較含糊,我這裏找到最權威的定義——jvm規範中的定義,鏈接參考 摘錄方法區部分的定義: 2.5.4. Method Area The Java Virtual Machine has a met

原创 反編譯HelloWorld,不再覺得這個程序簡單

HelloWorld是我們寫下的第一個程序,源碼如下: public class HelloWorld { public static void main(String[] args) { System.o

原创 運行時常量池

常量池 就是字節碼中的那張常量表,虛擬機指令根據這張常量表找到要執行的類名,方法名,參數類型,字面量等信息。 運行時常量池 常量池是*.class文件中的,當該類被加載,它的常量池信息局會被放入運行時常量池,並把裏面的符號地址變