蠻多 coding 語言在一般情況下是使用 32 bits 的空間來儲存整數的,例如 Java 的 int,範圍是 -2147483648 ~ 2147483647,大約正負21億。但是現實世界中,較小的數字往往比較常出現,大約幾十到幾十萬是最多最常出現的,如果只是要儲存或傳輸這樣的一個小數字,卻每次都需要用到 32 bits 的空間,其實有點浪費,這是有機會優化的 !

Varint 和 Zigzag 演算法就是要處理這種問題,讓值小的數字,可以用較少的 byte 數量表示,而達到資料壓縮目的,著名的資料傳輸格式 Protobuf 也是通過 Varint 和 Zigzag ,來大幅減少了資料佔用的空間。

Continue reading

Protobuf 全稱 Protocol Buffers ,是一種輕量級的資料交換格式,最初是由 Google 開發的「可擴展的序列化資料結構」,現已成為一個開源項目,其語⾔中⽴且平台無關,適合高性能且對響應速度有高要求的資料傳輸場景;也因為有資料壓縮的能力,故也可用於資料儲存。Protobuf 的核心思想是先定義好 data schema ,然後可根據所需的語言生成對應的 code base,方便使用者操作 :「序列化寫入、反序列化讀取」。

Profobuf 需要注意的缺點是為二進制格式,故編碼之後不具有可讀性,需要反序列化後才能看得懂資料內容 ; 雖然是個好東西,但並非是個用來完全取代 JSON 的解決方案,JSON 仍有其可讀性高、易操作及通用性高等優點,在多數 API 設計的場景之下,JSON 仍然是最好的選擇。

Continue reading

OpenTelemetry ,也稱為 OTel,是 Cloud Native Computing Foundation(CNCF) 下的一個開源專案,為一供應商中立(vendor-neutral)的可觀測性框架,目的是提供一個標準化Observability 的 pluggable 框架,解決 telemetry data 的模型定義、檢測、採集、處理、輸出等一致性問題。

借助 OpenTelemetry ,可以從各種來源收集 telemetry data ,但對於資料的存儲和可視化是留給其他工具的,本身並不提供儲存,只能將其發送到其他的服務來存儲,如 Prometheus、或其他雲端廠商服務。

Continue reading

Regular Expression 是一種強大的字串匹配字串查找等操作工具,常簡寫爲 regex 、regexp 或 RE。這概念最初由 Unix 的 sed、grep 操作而普及開,它定義一系列符號來描述搜索的規則。 但在不同的 coding language 或者是不同 OS 中, 常發現 regex 都會有些差異,主要原因是演進過程中,出現 POSIXPCRE 兩種 :

  • POSIX : 可以說是原初版本,主要用於 UNIX 系統的文本處理,grep 、sed 、awk 等都屬之

  • PCRE : 現代 coding language如 Python、Ruby、 C、C++、Java 都屬於 PCRE 派系。

Continue reading

Fluent Bit 基礎介紹

Fluent Bit 是一款使用 C 語言編寫的開源的資料收集器,為 Fluentd 的輕量化版本,也是 Cloud Native Computing Foundation(雲原生運算基金會) 下的一個子項目。可以從多種不同來源【如 Log file、kafka 等等】,收集 Logs、Metrics、 Traces 資料,然後輸出至多種不同的服務 【如 Loki、Fluentd、Elasticsearch、DataDog、Kafka 以及各式雲端服務】。

Continue reading

57. Insert Interval

此題給定一個沒有 overlapping 且按照起始座標排序的 interval 集合,然後再給一個 newInterval 放到該集合內,要合併 interval 使它們都不會重疊,最後返回新的 non-overlapping intervals。 本題的生活化的模擬,可以把題目想成自修室租借,然後插入自己的使用時段(亂入別人的使用時間…),最後返回整個自修室被租借的時段。

Continue reading

Author's picture

李昀陽 YunYang Lee

Welcome to my Tech Note. You can read some of the chapters below.

Software Engineer

Taiwan