文章

用白話文談數學公式 - 期望值(Expected value)

一直以來都覺得「期望值」這個詞很困惑,期望值到底是誰的期望?為什麼期望會有值?相當謎啊⋯⋯。

後來讀了一些文件之後,就比較了解期望值的意義是什麼,所以特別用比較白話的方式寫成一篇文章。

Posted on  Mar 25, 2023  in  數學概念  by  Amo Chen  ‐ 3 min read

新世代的 Python Linter - Ruff

自從 Rust Programming Language 開始展露頭角之後,很多工具都開始見到 Rust 的影子,或是底層由 Rust 重寫,或是關鍵部分由 Rust 實作,這些由 Rust 所改寫的工具幾乎都有個共通點 —— 快!

Ruff 就是 1 套底層由 Rust 實作的 Python Linter, 號稱速度快上其他常見的 Linter 約 10 ~ 100 倍之間,同時支援快取(cache)、自動修正(autofix)、Python 3.11, 甚至還提供 pre-commit 以及 VS Code 擴充(extension)等功能,除了用心還有貼心!

另外其功能近乎 Flake8 的完整功能(詳見 FAQ - Ruff ),因此許多人也放心選擇使用 Ruff 作為其開發時的 Linter 使用,包含 FastAPI, pandas, Apache Airflow 等開發團隊都已經使用 Ruff 作為其 Linter!

一起來認識 Ruff 這個新世代的 Python Linter 吧!

Posted on  Mar 23, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 4 min read

後端工程師面試考什麼 - 快取的置換策略(Cache replacement policies)

談到快取,一定會談到 Cache 的置換策略,也就是快取滿了要怎麼處理的問題。

理想上,能將所有資料都快取起來的話,就可以有效加速系統回應時間以及減輕資料庫負擔,但這是相當耗費/浪費系統資源的作法,除了系統資源有限之外(記憶體有限、儲存空間有限),另外根據 80/20 法則,系統中 80% 的資料存取要求,可能僅僅來自那 20% 的資料,我們僅需要針對這 20% 的資料進行快取就能夠在有限資源的條件下,十分有效地提升系統效能。

所以一般快取都會設定大小(size),不會無限制的快取任何資料,也因此談到快取就會談到快取的置換策略,在 cache 滿的時候選擇刪除哪些舊資料以容納新資料的方法。

本文將介紹幾種面試常見的快取置換策略。

Posted on  Mar 20, 2023  in  後端面試準備  by  Amo Chen  ‐ 6 min read

看了肯定會的 Python 裝飾子(decorator)教學

Python 的 decorator (或稱裝飾子)是一個非常有用的功能,它的重要程度可以說是沒用過或不會用 decorator 的人就等於沒學過 Python, 甚至在一些常見的框架(Framework),例如 Flask, FastAPI, Django 都提供各種方便的 decorator 供大家使用。

這麼重要的東西,肯定是闖江湖都會用到的金創藥啊!

但如果你剛接觸 Python 就看到類似以下裝飾子的範例,絕對會腦袋打結,為什麼函式前面還要加個 @debug 還有 @cache, 而且還很神奇能運作:

@debug
@cache
def sum(a, b):
    return a + b

本文就教大家如何理解 Python 的 decorator!

Last updated on  Mar 10, 2023  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 6 min read

Git switch 指令教學

Git switch 指令是 Git 2.23 版本開始新增的一個指令,它用於切換分支(branch)。

因為以往使用 git checkout 不僅可以還原檔案,也可以用來切換分支,如果有檔案剛好跟分支名稱相同,就容易造成混淆⋯⋯。

所以 git switch 的出現,就是為了分擔 git checkout 的職責,讓切換分支的功能全權由 git switch 負責,也讓 git 的指令有明確的分工並增加易用性(不過 git checkout 依然有向下相容切換分支的功能)。

本文是關於 git switch 指令的簡單教學。

Posted on  Mar 2, 2023  in  Git 版本控制  by  Amo Chen  ‐ 2 min read

Google Sheets - 用 FORECAST 函式預測數值,以房價為例

Google Sheets 其實是相當好用的 low-code 工具,你不用成為超級厲害的程式設計師也能夠藉由它提供的各式函式(functions)進行資料分析,從中得出你的洞見(insight)。

而且 Google Sheets 提供不少預測的函式,讓我們能夠用數學算出較為客觀的預測值,不過使用前還是要懂它的原理,以免造成錯誤的預期。

本文以實價登錄的數據為例,教大家學會如何用 Google 試算表對數據進行預測。

Posted on  Feb 13, 2023  in  Google 試算表  by  Amo Chen  ‐ 4 min read

Google Sheets - 用 FILTER 輕鬆過濾數據(以股票數據為例)

試算表的資料很多的情況下,是很難用肉眼進行分析(除非你先天技能火眼金睛),所以通常會先過濾出我們感興趣的資料後再進行分析。

這時候就不得不提 FILTER 函式有多好用了!

本文實際以 個股日收盤價及月平均價 作爲範例,教大家如何用 FILTER 輕鬆過濾數據。

Posted on  Feb 9, 2023  in  Google 試算表  by  Amo Chen  ‐ 2 min read

零經驗也可的 PySpark 教學 - 資料輸出 (DataFrame writer)

通常操作 dataframe 完之後,都會需要將結果輸出到資料庫/檔案甚至是雲端服務。 PySpark 已經將相關的輸出都整合到 pyspark.sql.DataFrameWriter 類別,只要理解該類別,基本上就能夠輕鬆將 DataFrame 輸出。

本文將介紹 pyspark.sql.DataFrameWriter 以及幾個使用上值得注意的點。

Posted on  Feb 6, 2023  in  Python 模組/套件推薦 , Python 程式設計 - 高階  by  Amo Chen  ‐ 4 min read