摘要:
Rust很適合寫命令行工具,特別是使用`clap` crate 更加方便,這篇文章介紹使用rust寫一個jar包class沖突檢測的工具。項目地址: [https://github.com/Aitozi/jar_conflict_detector](https://github.com/Aitozi 閱讀全文
摘要:
String String 類型的數據和基本類型不同,基本類型的長度是固定的,所以可以在棧上分配,而String類型是變長的,所以需要在堆上分配,所以String 類型實際上是一個指向堆的指針。他的結構和Vec很類似。從他的聲明看也是一個u8的Vec pub struct String { vec: 閱讀全文
摘要:
2023 第三本書,之前下決心每次讀完書就要寫一篇讀后感,加深認識。結果下決心后的第一本 《鄉土中國》就寫不下來讀后感,感覺讀后感太多太密,還不如想起來的時候回頭瀏覽一遍書。 但是最近聽路障的視頻,發現他也建議寫讀后感來增加對書的認識,這樣能更好的幫助記憶,加上這本書好奇心里面的觀點,創造力來源于知 閱讀全文
摘要:
Hudi 文中部分代碼對應 0.14.0 版本 發展背景 初始的需求是Uber公司會有很多記錄級別的更新場景,Hudi 在Uber 內部主要的一個場景,就是乘客打車下單和司機接單的匹配,乘客和司機分別是兩條數據流,通過 Hudi 的 Upsert 能力和增量讀取功能,可以分鐘級地將這兩條數據流進行拼 閱讀全文
摘要:
一層嵌套,但是flatten的要求需要List內部類型都一樣, 例如都為List scala> List(List(1), List(2), List(3)).flatten res4: List[Int] = List(1, 2, 3) scala> List(List(List(1)), Lis 閱讀全文
摘要:
設想以下這個計算 def eval(i: Int): Option[Int] = { println(s"invoke with $i") if (i % 2 == 0) { None } else { Some(i + 1) } } @Test def test(): Unit = { // 3 閱讀全文
摘要:
靜態鏈接庫在程序編譯階段就完成了鏈接工作,完成鏈接后,依賴的庫就都打入了可執行文件中,所以文件大小一般會比較大。 而動態庫鏈接庫是在程序運行時才被鏈接的,所以磁盤上只要保留一份副本,因此節約了磁盤空間。如果發現了bug或要升級也很簡單,只要用新的庫把原來的替換掉就行了。Linux環境下的動態鏈接對象 閱讀全文
摘要:
現代操作系統如何裝載可執行文件? 給進程分配獨立的虛擬地址空間 建立虛擬地址空間和可執行文件的映射關系 把CPU指令寄存器設置成可執行文件的入口地址,啟動執行 可執行文件在裝載的過程中實際上是映射的虛擬地址空間,所以可執行文件通常被叫做映像文件(或者Image文件). ELF文件的兩種視角 Sect 閱讀全文
摘要:
看以下例子 main.c extern int x; int main() { int y = 100; swap(&x,&y); return 0; } int x = 1; void swap(int* x, int* y) { int temp = *x; *x = *y; *y = temp 閱讀全文
摘要:
編譯過程拆解 預處理處理生成.i文件, .i文件還是源碼文件 將所有的宏定義#define展開。 處理#if, #else, #endif等條件編譯指令 處理#include, 原地插入文件 cpp HelloWorld.c > HelloWorld.i可以這樣來進行預編譯,cpp是C prepro 閱讀全文