文章

Python JSON 模組 - 走到跑,跑到飛的 orjson

orjson 是一套由 Rust 實作的 Python 套件,專門用以處理 JSON 相關的 encode 與 decode 的工作,效率不僅快(根據官方測試最快可以達到 json 模組的 40 到 50 倍效率)更天生能直接處理 Python 內建 json 模組所無法序列化(serialize)的 datetime, UUID, dataclass 等資料,不需額外編寫序列化的處理程式。

如果你想改善 Python API server 處理 JSON 的速度,以降低系統回應時間,又或者你有大量 JSON 相關的資料要處理,想有效減少處理時間的話,不妨試試 orjson 吧!

Posted on  May 10, 2023  in  Python 模組/套件推薦  by  Amo Chen  ‐ 4 min read

後端工程師面試考什麼 - CORS (Cross-Origin Resource Sharing)

隨著前後端技術演進,姑且不論是否採用微服務(microservice)架構,前後端分離成為越來越常見的開發模式,例如前端採用 NEXT.js 等框架,或者編譯成靜態網頁(static site)部署在雲端,所需要的後端 API 功能則是呼叫部署在另一個網域(domain)的伺服器,例如下圖:

不過採用此種前後端分離的架構,就需要理解何謂 CORS(Cross-Origin Resource Sharing),才能讓前端正常運作。

p.s. 通常有用到前後端分離架構的公司,就有可能問到何為 CORS 。

Posted on  Apr 19, 2023  in  後端面試準備  by  Amo Chen  ‐ 5 min read

後端工程師面試考什麼 - SQL 篇

後端工程師日常不僅要跟程式、作業系統、架構搏鬥,也要跟資料庫(database)打交道。

資料庫的類型也隨著時代演變越來越多,除了 NoSQL, In-memory database 之外,面試過程最常聊到的還是關聯式資料庫(relational database management system),而且關聯式資料庫也是目前業界常見的資料儲存系統,各個公司無論規模大小或多或少都會有關聯式資料庫的存在,除此之外,關聯式資料庫也相當適合用以儲存交易(transaction)類型的資料。

因此操作關聯式資料庫需要用到的 SQL(Structured Query Language) 幾乎成為後端工程師面試時的必考題,而且考 SQL 的好處在於它是一項標準,無論你是 MySQL 還是 PostgreSQL 還是 MS SQL Server 的使用者,基本上都能夠用 SQL 進行交流。

本文來介紹經常會被問到的 SQL 面試問題吧!

Last updated on  Oct 17, 2023  in  後端面試準備  by  Amo Chen  ‐ 8 min read

你應該要知道的 Python 實用模組 - functools 教學

functools 模組是 Python 內建專門提供各種實用裝飾子(decorator)以及實用函式(function)的模組。

functools 模組最常被使用的功能主要為:

學會正確使用 functools 不僅可以提升效能,也可以有效地提升程式碼的簡潔性。

本文將以實際範例介紹 functools 模組中常用的功能。

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

後端工程師面試考什麼 - Lock 篇

在程式設計中,平行處理可能會同時訪問共享資源,這樣就可能導致共享資源的競爭與執行結果不一致等等問題。

為了避免這些問題,就需要使用 lock 進行同步,保證在同一時間只有一個執行緒或 process 能夠存取共享資源。

所以在面試中,許多面試官都會考面試者對於 lock 的了解和應用。常見的考題包括 lock 的原理、種類、常見問題和解決方法等。

了解 lock 的使用不僅僅可以應對相關面試問題,也有助於在實際開發中知道如何使用 lock, 以避免平行處理所造成的相關問題。

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

用白話文談數學公式 - 期望值(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