精選分類
OS觀念
FOR FUN
LeetCode 筆記
- LeetCode 獨自升級紀 - [Binary Search] Search a 2D Matrix (Medium)
- LeetCode 獨自升級紀 - [Hashmap] Group Anagrams (Medium)
- LeetCode 獨自升級紀 - [Linked List] Reverse Linked List (Easy)
- LeetCode 獨自升級紀 - [Sliding Window] Longest Substring Without Repeating Characters (Medium)
- LeetCode 獨自升級紀 - [Stack] Valid Parentheses (Easy)
- LeetCode 獨自升級紀 - [Two Pointer] 3sum (Medium)
程式設計
技術筆記
文章列表
Vscode Golang 長按函式自動跳轉到該函式定義位置
# 過程
開發時,已經習慣長按 ctrl+類名或函式名稱,讓編輯器自動跳轉到該類別或函式的定義位置來快速查看程式碼的實作細節
由於我改用 mise 來管理 golang 版本,導致 vscode golang extension 無法正確辨識 golang 的執行檔位置,長按 ctrl + 點擊類名或函式名稱時就沒反應
# 解法
ctrl + , 快速打開設定頁面,搜尋 go.alternateTools 並點擊在 settings.json 中編輯
直接在 settings.json 中加入以下設定
....
"go.alternateTools": 
more...Process, Thread, Coroutine,A Hands-on Experiment to Conquer Concurrency in Python and Golang
引言: 為了真正理解現代程式設計中的 Concurrency(併發)概念,稍微複習了 Process, Thread, Coroutine 之間的關係,並透過程式碼徹底比較 Python 與 Golang 在處理 CPU-bound 和 I/O-bound 任務時的效能差異。結果非常驚人,清晰地揭示了 Python GIL 的限制與 Golang Runtime 的優勢。
# Process, Thread, Coroutine
從資源開銷和獨立性的角度來看,併發執行單元的層次結構由大到小排序如下:
概念
資源開銷 / 獨立性
核心特性
適用場景
Exte
more...PyO3 + maturin,從 Rust 編譯成 Python Extension 連同 .pyi 型別存根打包進 wheel 全流程
# 建立 Rust 專案
建立 Rust 資料夾
mkdir my_rust_lib
cd my_rust_lib
建立 Cargo.toml(Rust 的設定檔
Cargo.toml 內容:
[package]
name = "my_rust_lib"
version = "0.1.0"
edition = "2021"
[lib]
name = "my_rust_lib"
crate-type = ["cdylib"] # ← 關鍵!編譯
more...實測 Rust 與 Python 在多執行緒併發下的 Throughput 與 Latency 表現比較
# locust 蝗蟲壓力測試工具
# 為何 Rust 在 CPU 密集運算下會比 Python 快?
Rust 快的原因:
✅ 編譯成機器碼 - 更底層,無中間層
✅ 編譯器優化 - LLVM 做大量優化
✅ 無 GIL - 真正的多核並行
✅ 零成本抽象 - 高階語法,無性能損失
✅ 記憶體管理 - 編譯時確定,無 GC 開銷
Python 慢的原因:
❌ 解釋執行 - 每次都要翻譯
❌ 動態型別 - 運行時檢查型別
❌ GIL 限制 - 單核執行
❌ 記憶體開銷 - 動態分配 + 垃圾回收
# 靜態型別 vs 動態型別
Rust:編譯期就知道所有變數型別,能幫助編譯器做最佳化。
more...Docker - 常用指令筆記 Image、Volume、Container 管理
# docker ps
只顯示正在執行的容器
docker ps
顯示所有容器(包含執行中、已停止、已退出)
docker ps -a
# or
docker ps --all
顯示最近建立的容器
docker ps -l
顯示最近建立的 N 個容器(例:docker ps -n 3)
docker ps -n <數字>
# 管理 Docker data 相關指令
查看目前有哪些 volume,很常會有需要清理一些沒在使用的、或只是暫時創建來測試用的一些 data,這些 data = docker 的 volume
# 列出目前有哪些 volume
doc
more...docker compose 啟動服務時,自動初始化(init)資料庫跟資料(seed) - PostgreSQL
# 目的?
以往在用 docker compose 快速啟動服務,常常會遇到:
在一台全新的機器或開發環境中,都需要手動進入docker內部db容器,手動執行初始化(init)資料庫結構的 SQL 腳本,接著再執行資料(seed)的 SQL 腳本來填充初始資料
流程不僅繁瑣,而且容易出錯,特別是在多個環境(如開發、測試、生產)中部署時
比如在某專案中,固定會有個 products 的資料表,並且每次部署到新主機第一次啟動時,去打端點都一定會跳sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation
more...從 FastAPI 轉成 gRPC 服務流程筆記
# 重要
按理來說接口應要跟 pydantic 模型一模一樣
# FastAPI vs gRPC 差異
特性
FastAPI (REST)
gRPC
通訊協定
HTTP/1.1
HTTP/2
資料格式
JSON
Protocol Buffers (二進位)
API 定義
OpenAPI/Swagger
Proto 檔案
效能
較慢
較快
瀏覽器支援
原生支援
需要額外工具
串流
有限支援
原生支援雙向串流
# Postman 測試 gPRC
more...用 Alembic 管理 SQLAlchemy Migration 筆記
目標:當遷移歷史混亂或想用現有模型重新建立「乾淨」的初始遷移時,安全地重置 Alembic 狀態並升到最新。
# TL;DR — 指令清單
# 1 生成初始 migration
alembic revision --autogenerate -m "initial migration"
# 2 執行 migration(創建表格)
alembic upgrade head
# 3 刪除所有遷移檔案(如已刪除可跳過)
rm -f alembic/versions/*.py
rm -rf alembic/versions/__pyca
more...LeetCode 獨自升級紀 - [Linked List] Reverse Linked List (Easy)
# 題目
給定一個單向 Linked List,反轉該鏈表並返回反轉後的頭節點。
題目
Example:
Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]
# 觀念
反正就記得,反轉一條鏈表,就是把每個節點的 next 指標指向前一個節點
特性
Python list ([])
Linked List
底層結構
動態陣列 (連續記憶體)
節點 (物件) + 指標
存取第 i 個元素
O(1)
O(n) (要走訪)
插入 / 刪除
O(n) (中間要搬移)
O(1) (只改指標)
記憶體配置
連續
不連續
more...


