原创 規範與重構總結

原创 面向對象:多用組合少用繼承

爲什麼不推薦使用繼承? 雖然繼承可以解決代碼複用問題,但繼承層次過深、過複雜,也會影響到代碼的可維護性。 組合相比繼承的優勢 如果繼承出現了以上問題,我們可以利用組合、接口、委託三個技術手段來解決該問題。 組合和繼承的選擇 如果繼承結構穩定

原创 面向對象:基於接口而非實現編程

基於接口而非實現編程。這個原則是一種非常有效的提高代碼質量的手段。 越抽象、越頂層、越脫離具體某一實現的設計,越能提高代碼的靈活性,越能應對未來的需求變化。好的代碼設計,不僅能應對當下的需求,且在將來需求發生變化的時候,仍然能夠在不破壞原有

原创 面向對象:Java 接口VS抽象類

抽象類的特性 不允許被實例化,只能被繼承,不能new一個抽象類的對象出來; 抽象類可以包含屬性和方法。方法既可以包含實現,也可以不包含,不包含代碼實現的方法叫做抽象方法; 子類繼承抽象類,必須實現抽象類中所有的抽象方法。 接口的特性

原创 設計原則:單一職責原則(Single Responsibility Principle)

單一職責原則的定義 一個類只負責完成一個職責或者功能。也就是說,不要設計大而全的類,要設計粒度小、功能單一的類。 舉個例子:如果一個類中即包含訂單的操作、又包含用戶的操作,這就違反了單一職責原則。我們需要將這個類拆分爲兩個類:訂單類和用戶類

原创 23種設計模式學習總結 創建型設計模式 結構型設計模式 行爲型設計模式

創建型設計模式 主要解決對象的創建問題,封裝複雜的創建過程,解耦對象的創建代碼合使用代碼。 單例模式 單例模式用來創建全局唯一的對象。一個類只允許創建一個對象,這個類就是一個單例類。單例有幾種經典實現方式,分別爲:餓漢式、懶漢式、雙重檢測

原创 Spark向量化讀取Parquet文件源碼

原文:https://animeshtrivedi.github.io/spark-parquet-reading Spark 如何讀取Parquet文件 Apache Parquet 是一種流行的列式存儲格式,它把數據存儲爲一堆文件。 S

原创 Flink-CDC 同步Mysql數據到S3 Hudi

軟件版本 Mysql: 5.7 Hadoop: 3.1.3 Flink: 1.12.2 Hudi: 0.9.0 Hive: 2.3.7 1.Mysql建表並開啓bin_log create table users( id bigin

原创 Spark讀取Parquet文件源碼解析

原文:https://animeshtrivedi.github.io/spark-parquet-reading Spark 如何讀取Parquet文件 Apache Parquet 是一種流行的列式存儲格式,它把數據存儲爲一堆文件。 S

原创 Presto學習(一)

what is presto? Presto是一個開源的分佈式SQL查詢引擎,用於對各種大小的數據源(從GB到PB)運行交互式分析查詢。 Presto是爲交互分析而設計和編寫的,即使數據規模能達到facebook這種程度,presto的速度

原创 Presto學習(二):概念

節點類型 Presto中有兩種節點:coordinators和workers。 Coordinator coordinator負責解析語句、規劃查詢、管理worker節點。其是Presto的大腦,也是client連接並提交語句的地方。每個P

原创 Flink組件

1.Runtime runtime層接收JobGraph形式的程序。JobGraph是一種通用的並行數據流。 2.DataStream API及DataSet API DataStream API和DataSet API可以編譯生成Job

原创 Flink:Data Streaming容錯

Apache Flink提供了一種容錯機制,可以一致地恢復數據流應用程序的狀態。該機制確保即使在出現故障的情況下,程序的狀態最終也能實現數據的exactly-once。 容錯機制保證持續性的生成數據流的快照。這個操作非常輕量,且不會對性能產

原创 進程學習三

進程進階 1.進程鎖 這裏的進程鎖與線程鎖、互斥量、讀寫鎖和自旋鎖不同,它是通過記錄一個PID文件,避免兩個進程同時運行的文件鎖。 2.各種進程的概念 (1)孤兒進程 孤兒進程指的是在其父進程執行完成或被終止後仍繼續運行的一類進程。 孤兒進

原创 進程學習二

使用go進行進程編程 1.衍生(spawn)新進程 package main import "fmt" import "io/ioutil" import "os/exec" func main() { dateCmd := exe