# CodingMan.cc > Technical blog written by CodingMan. — Traditional Chinese technical blog covering Python, DevOps, Kubernetes, Docker, Linux, macOS. ## Posts - [如何讓 Agent 玩仙劍奇俠傳](https://codingman.cc/pal-agent-setup/): 一款 1995 年的遊戲要交給 agent 玩,缺的只有兩樣東西:它看不見,也無法操作。這篇講怎麼從遊戲裡讓 agent 可以操作跟觀察遊戲世界,又怎麼給它一組對得上遊戲規則的動作。 - [仙劍奇俠傳 DOS 版 AI 攻略](https://codingman.cc/pal-dos-walkthrough/): 這篇是仙劍奇俠傳 DOS 版的全流程攻略。 - [〈獨白〉](https://codingman.cc/monologue/): 〈獨白〉歌詞。 - [COSCUP 2020 ~ 2026 七年議程資料分析](https://codingman.cc/coscup-hot-topic-analysis-2020-2026/): 兩年前我做過一次 COSCUP 議程趨勢分析,方法是把資料丟給 ChatGPT。這次把年份延伸到 2026,順便把當年那套不可重現的做法整個換掉。談 AI 是哪一年真的吃掉議程表的、哪些技術泡沫化了、社群軌的流動有多快,以及一份業餘分析該怎麼誠實交代自己的限制。 - [讓 LLM 直接操作 PTT — PTT MCP Server](https://codingman.cc/ptt-mcp-server/): PyPtt 讓 Python 可以操作 PTT,但你得先會寫 Python。PTT MCP Server 把這層拿掉,讓 LLM 自己登入 PTT、看板、發文、推文。這篇講它能做什麼、怎麼裝、以及我在安全性上做了什麼取捨。 - [3D 列印新手容易忽略的兩件事](https://codingman.cc/two-things-3d-printing-beginners-miss/): 買了 3D 印表機之後才發現,影響體驗最大的兩件事都不在「怎麼調參數印得漂亮」那一區:一個是預設關著的可變層高,另一個是被誤當成安全邊界的 LAN mode。從工程師的角度談這兩個預設值,以及它們到底歸誰管。 - [PyPtt - 如何利用 NAWS 動態調整視窗高度提升資料獲取效率](https://codingman.cc/pyptt-dynamic-window-efficiency/) - [Python - is vs == 的差異詳解](https://codingman.cc/python-is-vs-equals/): 詳解 Python 中 `is` 與 `==` 的核心差異。本文將從物件模型與記憶體機制的角度出發,說明「數值相等」與「身分認同」的不同,並探討 Python 在小整數與字串中的快取機制 (Interning)。 - [Linux 檔案歸檔工具 tar 詳解與應用](https://codingman.cc/linux-tar/): tar 是 Linux 與 Unix 系統中最基礎的歸檔(archiving)工具。本文詳細介紹 tar 指令的各種參數用法,包括如何打包、解包、處理不同壓縮格式、排除特定檔案以及維護檔案權限與時戳,是掌握 Linux 檔案管理不可或缺的工具。 - [uPtt — 讓 PTT 化身現代即時通訊](https://codingman.cc/uptt/): uPtt 是一款以 Python + PySide6 打造的現代化 PTT 即時通訊客戶端,將 PTT 站內信系統轉化為如 LINE、Telegram 般流暢的聊天體驗,並整合水球即時訊息,提供 macOS 與 Windows 版本。 - [Python - Mutable Default Argument 的陷阱與解法](https://codingman.cc/python-mutable-default-arguments/): 詳解 Python 中最經典的陷阱之一 —— 可變預設參數 (Mutable Default Argument)。本文將解釋為什麼預設參數中的 `[]` 或 `{}` 會在多次呼叫間共享狀態,揭露其背後的物件存續機制,並提供最佳實務的解決方案。 - [使用 BorgBackup 備份你的 Minecraft 地圖](https://codingman.cc/borgbackup-minecraft-world/): 以磐石 Minecraft 伺服器的實際運作經驗為例,介紹如何使用 BorgBackup 備份地圖檔案。透過區塊級去重 (deduplication) 與壓縮,2.51 TB 的原始資料最終只佔用 208 GB 儲存空間。文章同時說明如何在伺服器不停機的情況下,搭配 save-off / save-all flush 進行 hot backup。 - [Python 開發者的「可編輯模式」神技 - pip install -e](https://codingman.cc/pip-install-editable-mode/): 詳解 Python 開發者的核心利器 —— 可編輯模式 (`pip install -e`)。本文解釋其如何透過符號連結讓原始碼修改立即生效,免去反覆安裝的煩惱,並分享在模組化開發與內部套件維護時的最佳實務。 - [競技對戰評分系統:從 Elo 及其進化版演算法深度解析](https://codingman.cc/competitive-rating-systems-elo-to-trueskill/): 深度解析電子競技與對戰系統背後的評分演算法。從經典的 Elo 系統出發,本文詳述 Glicko 到微軟 TrueSkill 的進化歷程,解析現代遊戲 MMR 雙軌制的運作邏輯,揭開如何用統計學測量玩家真實實力的面紗。 - [威秀影城場次規劃神器:vscinemas-skill 介紹](https://codingman.cc/vscinemas-skill/): 介紹威秀影城場次規劃神器 vscinemas-skill。這款開源工具能讓開發者直接在終端機查詢場次,並以視覺化時間軸呈現多部電影的組合,協助影迷輕鬆規劃完美、無縫的連續觀影行程。 - [原價屋組電腦的神助手:coolpc-skill 介紹](https://codingman.cc/coolpc-skill/): 介紹專為 Claude Code 設計的開源工具 coolpc-skill。該工具能直接抓取原價屋即時商品價格,協助 DIY 玩家在對話中快速進行預算配單與零件比價,甚至支援自動化網頁填單,是組電腦者的 AI 助手。 - [用 AI 幫你配對台積電職缺:tsmc-resume-matcher 介紹](https://codingman.cc/tsmc-resume-matcher/): 分享一款利用 AI 分析履歷與台積電 (TSMC) 職缺配對度的開源工具。本文詳述工具如何量化履歷契合度並給出改進建議,幫助求職者更精確地呈現專業優勢,提升獲得面試邀約的機率。 - [Python:手把手教你 async 與 await](https://codingman.cc/python-async-await-intro/): 手把手引導讀者進入 Python 異步程式設計 (Asynchronous Programming) 的世界。本文解釋 async 與 await 的核心概念,說明異步架構如何提升 I/O 密集型任務的執行效率,是現代 Python 後端開發的必學課程。 - [如何改善網路品質 - X/推特 影片](https://codingman.cc/how-to-improve-network-quality-x-twitter-video/): 針對光纖網路下 X (Twitter) 影片轉圈圈的問題,分享 RouterOS (MikroTik) 的深度優化方案。本文從 L7 解析、傳輸層調整到安全性協定優化,提供一套網路底層重構邏輯,助您找回流暢的社交媒體觀影體驗。 - [DevOps - 如何使用 Python 合併 YAML](https://codingman.cc/devops-yaml-merge-tool/): 探討 DevOps 流程中管理多環境 YAML 設定檔的實務挑戰。本文分享如何利用 Python 撰寫 YAML 合併腳本,解決 Helm Chart 中 values.yaml 跨環境同步與覆寫的問題,優化 CI/CD 流程的穩定性與自動化程度。 - [簡單好用的加密聊天工具](https://codingman.cc/simple-encrypted-chat-tools/): 介紹一款專為隱私通訊設計的開源加密聊天工具。本文分享其背後的 ECC 橢圓曲線加密技術,強調所有加解密運算均在瀏覽器本地端完成,不經由伺服器儲存,為使用者提供一個安全、免安裝且絕對私密的通訊空間。 - [面試心得 - 台積電](https://codingman.cc/interview-with-tsmc/): 分享擁有十年經驗的軟體工程師挑戰台積電 (TSMC) 的面試闖關心得。本文詳述從邀約、線上測驗到與主管面談的所有流程,並以過來人經驗提供準備建議,給予對半導體產業軟體開發職缺有興趣的讀者參考指南。 - [PKCS#11 OTP - 硬體安全模組中的一次性密碼標準](https://codingman.cc/pkcs11-otp-standard/): 探討 PKCS#11 標準中對一次性密碼 (OTP) 的支援與整合。本文詳細說明如何利用硬體安全模組 (HSM) 產生並驗證符合雙因素認證 (2FA) 需求的動態密碼,是理解硬體權杖與增強帳戶安全性技術的專業導讀。 - [FFX 模式 - 保留格式的加密技術](https://codingman.cc/ffx-mode-encryption/): 介紹能在不改變資料長度與格式的前提下進行加密的保留格式加密 (FPE) 技術 —— FFX 模式。本文探討其在處理信用卡號或身分證字號等敏感欄位時的優勢,解決傳統加密造成資料庫結構不相容的問題。 - [RADIUS - 網路存取的守門員](https://codingman.cc/radius/): 詳解 AAA (驗證、授權、計帳) 框架下的核心協定 —— RADIUS。本文介紹其集中管理使用者存取權限的架構、運作流程及其在企業網路與電信撥接服務中的重要性,並探討在使用 UDP 傳輸時的安全性考量。 - [Kerberos - 網路身分驗證協定](https://codingman.cc/kerberos-authentication-protocol/): 剖析 MIT 研發的經典身分驗證協定 —— Kerberos。本文介紹 KDC、票據 (Ticket) 與會話金鑰的核心元件,詳細拆解其在不安全網路中實現單一登入 (SSO) 的驗證流程,並探討其在 Windows Active Directory 等分散式系統中的應用。 - [密碼學 - X.509 Time Stamp](https://codingman.cc/cryptography-x509-time-stamp/): 詳解 X.509 時戳協定 (Time Stamp Protocol, TSP) 的核心運作機制。透過時戳授權機構 (TSA) 提供的證據,本文分享如何證明數位文件在特定時間點前即已存在,是理解電子商務防竄改與長效數位簽章的關鍵技術篇章。 - [密碼學 - PKCS#11 Key Agreement](https://codingman.cc/cryptography-pkcs11-key-agreement/): 分析 PKCS#11 標準中的金鑰協議 (Key Agreement) 機制,特別是 C_DeriveKey 函式的運作方式。本文探討如何在硬體安全模組 (HSM) 中安全地進行金鑰派生,達成在不安全通道上協商共享秘密的目標,是加密設備開發者的技術參考。 - [密碼學 - Galois Counter Mode](https://codingman.cc/cryptography-galois-counter-mode/): 探討同時具備機密性、完整性與真實性的認證加密模式 —— Galois Counter Mode (GCM)。本文解釋 GCM 如何透過計數器模式與 Galois 域運算,實現高效的對稱式加密與訊息鑑別,是深入理解 AES-GCM 安全標準的進階導讀。 - [金鑰長度與暴力破解](https://codingman.cc/key-length-and-brute-force/): 深入探討暴力破解攻擊 (Brute Force Attack) 的原理及金鑰長度在防禦中的關鍵地位。本文透過機率與運算能力的分析,解釋為何增加位元數能呈指數級提升破解難度,幫助讀者理解現代加密標準如何確保資訊的長效安全。 - [密碼學 - Wrap Algorithms](https://codingman.cc/cryptography-wrap-algorithms/): 探討密碼學中用於保護金鑰本身的 Wrap Algorithms(金鑰包裹演算法)。本文解釋如何利用金鑰加密金鑰 (KEK) 來確保敏感金鑰在傳輸或儲存時的安全性,並介紹相關的認證加密標準,確保金鑰管理系統的完整性。 - [密碼學 - PFX](https://codingman.cc/cryptography-pfx/): 介紹 PFX (PKCS#12) 檔案格式在安全儲存與交換數位憑證中的重要性。本文說明 PFX 如何將私鑰、X.509 憑證及憑證鏈封裝於單一加密檔案中,幫助使用者在不同系統間安全地遷移數位身分,並提供常見的轉換與匯入建議。 - [PKCS#5 PBKDF:從密碼中提煉安全的金鑰](https://codingman.cc/pkcs5-pbkdf-from-password-to-secure-key/): 介紹 PKCS#5 標準中基於密碼的金鑰派生函數 (PBKDF)。本文聚焦於 PBKDF2 演算法,解釋其如何透過加鹽與多次迭代運算,將易記的密碼轉換為高強度的加密金鑰,以有效抵禦暴力破解與彩虹表攻擊。 - [HMAC - 訊息完整性與身份驗證](https://codingman.cc/hmac/): 詳解以雜湊函數為基礎的訊息鑑別碼 —— HMAC。本文拆解 HMAC 的雙層雜湊運算邏輯,說明其如何利用秘密金鑰確保訊息在傳輸中未被竄改,並提供 Python 實作教學,讓開發者能為應用程式加入強健的身份驗證機制。 - [密碼學 - DSA](https://codingman.cc/cryptography-dsa/): 介紹數位簽章演算法 (Digital Signature Algorithm, DSA) 的發展歷史與運作原理。作為保障訊息完整性與不可否認性的核心技術,本文拆解 DSA 的簽章與驗證流程,分析其在現代加密通訊中的角色,並提供實用的 Python 程式碼範例。 - [密碼學 - 橢圓曲線密碼學(ECC)](https://codingman.cc/cryptography-ecc/): 深入淺出地介紹現代公鑰技術 —— 橢圓曲線密碼學 (ECC)。相較於 RSA,ECC 以更短的金鑰達成同等安全性,本文探討其數學原理、金鑰交換機制及在 HTTPS 與虛擬貨幣中的應用,並提供 Python 範例演練。 - [PKCS#10 - 您的數位身分證申請書](https://codingman.cc/pkcs10-your-digital-identity-certificate-request/): 介紹數位憑證簽署請求 (CSR) 的標準格式 —— PKCS#10。本文將 PKCS#10 比擬為數位身分證申請書,詳解其中包含的主體資訊、公鑰及數位簽章結構,引導讀者了解向憑證機構 (CA) 申請憑證的標準化流程。 - [密碼學 - Diffie-Hellman 金鑰交換演算法](https://codingman.cc/diffie-hellman-key-exchange/): 詳解 1976 年提出的 Diffie-Hellman 金鑰交換演算法,這是首個實現非對稱加密概念的實務技術。本文探討其背後的離散對數問題數學基礎,並分享如何讓兩台從未謀面的電腦在公開通道中安全地商定共享秘密金鑰,附帶 Python 實作解析。 - [Meshtastic - 為什麼你不應該使用 ROUTER 模式](https://codingman.cc/meshtastic-why-you-should-not-use-router-mode/): 針對 Meshtastic 無線通訊網路,深入分析為何過多節點設定為 ROUTER 模式反而有害。本文探討「智慧廣播」演算法的機制,說明 ROUTER_LATE 模式在避免網路衝突與提升傳輸效率上的優勢,提供社群節點佈署的實務建議。 - [密碼學 - 解析 PKIX 憑證驗證與 CRL](https://codingman.cc/pkix-certificate-validation-and-crl/): 探討 PKI 架構中至關重要的憑證驗證流程 (PKIX) 與作廢機制 (CRL)。本文解釋如何透過建立信任鏈確保數位憑證的真實性,並說明當憑證不再可信時,如何透過撤銷清單保障系統安全性,是深入理解 X.509 標準的必讀篇章。 - [密碼學 - SignedData 與 EnvelopedData](https://codingman.cc/cryptography-signeddata-envelopeddata/): 比較 CMS (PKCS#7) 中兩大核心結構:代表數位簽章的 SignedData 與代表加密封裝的 EnvelopedData。本文透過 ASN.1 語法深入剖析其組成結構,協助讀者理解數位印鑑與機密信封的設計原理,是掌握電子文件保護技術的基礎。 - [量子密碼學 - Leighton-Micali Signature 簽章](https://codingman.cc/quantum-cryptography-leighton-micali-signature/): 介紹應對未來量子威脅的重要防線 —— Leighton-Micali Signature (LMS)。作為後量子密碼學 (PQC) 的代表性簽章演算法,本文解釋 LMS 的運作原理及其如何保障數位世界在量子電腦時代的安全性。 - [iperf3 網路效能測試工具](https://codingman.cc/iperf3-network-performance-testing-tool/): 分享強大的網路頻寬測速工具 iperf3 的使用心得。本文介紹如何透過 iperf3 測試點對點頻寬、偵測封包遺失與延遲,並提供在不同網路環境下的常用參數建議,是網路管理與 K8s 叢集優化時的實用利器。 - [LDAP 簡介](https://codingman.cc/ldap-introduction/): 簡介輕量級目錄存取協定 (LDAP) 的發展歷史與核心架構。LDAP 提供標準化的方式管理組織內的使用者、群組與網路資源,本文探討其在企業級身分驗證、單一登入 (SSO) 與目錄服務中的關鍵應用場景。 - [Python - dotenv 教學](https://codingman.cc/python-dotenv/): 介紹如何使用 python-dotenv 函式庫管理專案的環境變數。透過將敏感資訊(如 API 金鑰、資料庫密碼)從程式碼抽離至 .env 檔案,本文分享提升專案安全性與跨環境部署便利性的實務技巧,是現代 Python 開發的基本功。 - [Python - 10 is 10 vs 500 is 500](https://codingman.cc/python-10-is-10-vs-500-is-500/): 揭開 Python 中整數快取 (Integer Caching) 的神祕面紗。為何「10 is 10」為真,而「500 is 500」卻可能為假?本文深入探討 Python 內部的記憶體管理機制與單例物件處理,幫助您更精確地使用比較運算子。 - [SSH key - 從產生、設定到撤銷](https://codingman.cc/ssh-key-management/): 整理 SSH 金鑰對管理的完整工作流。本文從產生高強度金鑰、公鑰部署、透過 SSH Config 簡化連線,到外洩時的撤銷處理,提供一站式的教學與建議,確保開發者在進行遠端伺服器維護時的安全與效率。 - [如何使用 Python 發佈文章到 X/Twitter](https://codingman.cc/python-publish-to-twitter/): 分享如何透過 Python 串接 X (Twitter) API 實現內容自動化發布。本文詳細說明從 API 金鑰申請、開發環境設定到實際程式碼撰寫的過程,幫助讀者打造屬於自己的社交媒體自動化機器人,提升內容經營效率。 - [密碼學 - PKCS#7](https://codingman.cc/cryptography-pkcs-7/): 深入探討 PKCS#7 (Public-Key Cryptography Standard #7) 標準,這是一項定義如何封裝加密與簽章資料的關鍵規範。本文解釋其在安全通訊中的角色,說明如何透過該格式確保訊息的機密性、來源真實性與資料完整性。 - [Docker 容器化技術及其原理](https://codingman.cc/docker-containerization-technology-and-its-principle/): 探討 Docker 容器化技術的核心概念與底層運作原理。本文分析容器與傳統虛擬機的本質差異,詳細說明 Namespace、Control Groups 等 Linux 內核技術如何實現環境隔離,是後端工程師掌握現代部署技術的基礎指南。 - [Padding - 加密中的填充機制](https://codingman.cc/padding/): 介紹區塊加密中不可或缺的填充 (Padding) 機制。資料在加密前需符合固定區塊大小,本文探討 PKCS#7 等常見填充標準的原理,說明其如何確保資料完整性並防止安全性攻擊,是理解對稱式加密實務的重要環節。 - [PowerSort - Python 內建排序法](https://codingman.cc/powersort-python-built-in-sorting-algorithm/): 介紹 Python 3.11 引入的全新預設排序演算法 —— PowerSort。相較於經典的 Timsort,PowerSort 在自適應排序與執行路徑最佳化上更進一步。本文探討其發展起源、核心概念及為何 CPython 與 PyPy 紛紛採用此技術。 - [密碼學 - AES](https://codingman.cc/cryptography-aes/): 詳解目前全球最廣泛使用的對稱式加密標準 —— AES (Advanced Encryption Standard)。本文回顧 Rijndael 演算法的獲選背景,拆解其替換、置換與運算的結構邏輯,並探討其在硬體加速與網路安全中的高效應用。 - [什麼是隨機亂數](https://codingman.cc/random-number/): 探討隨機亂數 (Random Number) 在資訊安全與統計科學中的關鍵作用。本文區分真隨機與偽隨機的差異,介紹常見的亂數產生方法及其在加密金鑰、模擬實驗與機器學習中的應用,強調高品質亂數對研究可靠性的重要性。 - [密碼學 - RC4](https://codingman.cc/cryptography-rc4/): 回顧曾廣泛應用於 WEP 與 TLS 的串流加密演算法 RC4。本文探討其設計者 Ron Rivest 的背景、演算法的高效實作原理,以及為何因安全性漏洞而逐漸被現代標準淘汰,帶您了解這項密碼學發展史上的重要里程碑。 - [密碼學 - 雜湊函數](https://codingman.cc/what-is-hash-function/): 深入探討雜湊函數 (Hash Function) 的特性,包含不可逆性、抗碰撞性及其在資安領域的多元應用。本文以 SHA-1 為例拆解運算邏輯,透過示意圖說明訊息摘要的產生過程,幫助讀者理解這項資料完整性驗證的核心技術。 - [公開金鑰基礎建設(PKI):數位世界的安全基石](https://codingman.cc/what-is-pki/): 詳解公開金鑰基礎建設 (Public Key Infrastructure, PKI) 的組成與運作機制。PKI 作為數位世界的信任基石,結合了非對稱加密與數位憑證管理,本文介紹其在 HTTPS 安全連線、身分驗證及電子簽章中的關鍵角色。 - [PKCS#11 - 物件與連線](https://codingman.cc/pkcs-11-session-and-object/): 深入分析 PKCS#11 標準中的連線 (Session) 與物件 (Object) 管理機制。本文探討應用程式如何與硬體安全模組 (HSM) 建立安全通道,說明只讀與讀寫模式的差異,是開發高安全性加密應用程式的進階參考指南。 - [各種作業系統的憑證安裝教學](https://codingman.cc/how-to-install-private-certificates/): 針對 PhotonOS、Linux、macOS 與 Windows 等作業系統,整理安裝私有或自簽憑證的完整步驟。本文旨在解決雲端原生開發中常見的內部 API 或 Docker Registry 憑證信任問題,幫助開發者快速排除連線警示。 - [LeetCode 筆記 - 852. Peak Index in a Mountain Array](https://codingman.cc/leetcode-peak-index-in-a-mountain-array/): 介紹如何在山形陣列中尋找峰值索引。利用山形陣列先增後減的特性,本文詳解二元搜尋 (Binary Search) 的邊界處理邏輯,說明如何透過比較中間元素與其相鄰元素,在對數時間內精確定位最高點。 - [LeetCode 筆記 - 715. Range Module](https://codingman.cc/leetcode-range-module/): 實作一個能高效追蹤數字區間的 RangeModule 類別。本文探討如何處理區間的添加、移除與完全覆蓋查詢,分析有序映射 (SortedMap) 或線段樹在處理重疊區間時的優勢,是掌握區間操作演算法的精選案例。 - [LeetCode 筆記 - 2300. Successful Pairs of Spells and Potions](https://codingman.cc/leetcode-successful-pairs-of-spells-and-potions/): 分析 LeetCode 2300 題,計算魔法咒語與藥水的成功配對數量。本文結合陣列排序與二元搜尋 (Binary Search) 技術,在 O(n log m) 的複雜度內快速找出符合門檻條件的組合,展示搜尋技術在大規模資料比對中的效力。 - [LeetCode 筆記 - 1488. Avoid Flood in The City](https://codingman.cc/leetcode-avoid-flood-in-the-city/): 挑戰 LeetCode 1488 題,解決城市防洪問題。本文分享如何利用雜湊表追蹤湖泊狀態,並透過有序集合紀錄可排水的晴天日期,探討如何在下雨前精準選擇需要抽乾的湖泊,以避免災難性的洪水發生。 - [LeetCode 筆記 - 494. Target Sum](https://codingman.cc/leetcode-target-sum/): 分析 LeetCode 494 題,找出達成目標總和的正負號組合方式。本文探討如何將問題轉化為子集合總和問題 (Subset Sum),並利用動態規劃 (DP) 空間優化技巧,有效率地計算出所有可能的組合數量。 - [LeetCode 筆記 - 3481. Apply Substitutions](https://codingman.cc/leetcode-apply-substitutions/): 分析 LeetCode 3481 題:套用字串替換規則。本文介紹如何建立相依圖以處理不重疊的替換規則,並透過遞迴方式處理帶有佔位符的字串替換邏輯,優化搜尋效率以達成快速的文字處理。 - [LeetCode 筆記 - 778. Swim in Rising Water](https://codingman.cc/leetcode-swim-in-rising-water/): 挑戰 LeetCode 778 題,在水位上升的網格中尋找最短過河路徑。本文結合 Dijkstra 演算法與優先權佇列 (Priority Queue),動態計算到達目標位置所需的最小等待時間,分析路徑搜尋中的貪心策略。 - [LeetCode 筆記 - 85. Maximal Rectangle](https://codingman.cc/leetcode-maximal-rectangle/): 解析在 0/1 矩陣中尋找最大全 1 矩形的面積。本文展示如何將二維問題轉化為多個一維的「直方圖最大矩形」問題,透過動態更新高度陣列並重複套用單調堆疊演算法,達成高效的空間與時間運算。 - [LeetCode 筆記 - 122. Best Time to Buy and Sell Stock II](https://codingman.cc/leetcode-best-time-to-buy-and-sell-stock-ii/): 解析 LeetCode 買賣股票系列問題之二。本文分析在不限制交易次數的情境下,如何利用貪婪演算法 (Greedy) 捕捉所有上升趨勢來最大化利潤,並提供時間複雜度 O(n) 的極簡實作思路。 - [LeetCode 筆記 - 84. Largest Rectangle in Histogram](https://codingman.cc/leetcode-largest-rectangle-in-histogram/): 詳解在直方圖中尋找最大矩形面積的經典演算法。本文介紹如何利用單調堆疊 (Monotonic Stack) 在 O(n) 時間內找出每個柱子左右兩側的第一個較矮柱子,進而計算出以該柱子為高度的最大矩形。 - [LeetCode 筆記 - 75. Sort Colors](https://codingman.cc/leetcode-sort-colors/): 解析經典的「荷蘭國旗問題」(Dutch National Flag Problem)。本文介紹如何在不使用內建排序的情況下,利用三個指標在一次遍歷中完成 0、1、2 的原地排序,達成最優的 O(n) 時間複雜度。 - [LeetCode 筆記 - 10. Regular Expression Matching](https://codingman.cc/leetcode-regular-expression-matching/): 分析 LeetCode 經典困難題「正規表達式匹配」。本文探討如何處理特殊的句點與星號字元,利用動態規劃 (Dynamic Programming) 逐步構建匹配矩陣,解決字串間複雜的模式比對邏輯,是訓練 DP 思維的必經之路。 - [LeetCode 筆記 - 3468. Find the Number of Copy Arrays](https://codingman.cc/leetcode-find-the-number-of-copy-arrays/): 解析 LeetCode 3468 題,計算符合特定邊界條件的「複製陣列」數量。本文探討如何透過差分性質將問題轉化為區間交集運算,並利用動態更新的上下界在 O(n) 時間內求得所有可能的陣列組合數。 - [LeetCode 筆記 - 31. Next Permutation](https://codingman.cc/leetcode-next-permutation/): 詳解 LeetCode 31 題:尋找字典序中的下一個排列方式。本文拆解演算法的三大步驟:從後方尋找遞減點、尋找替換數值並進行反轉,幫助讀者理解如何在 O(n) 的時間與 O(1) 的空間內完成排列切換。 - [LeetCode 筆記 - 394. Decode String](https://codingman.cc/leetcode-decode-string/): 解析 LeetCode 經典字串解碼題目。本文利用堆疊 (Stack) 資料結構處理巢狀重複結構 `k[encoded_string]`,逐步將字串展開並組合,詳細說明處理數字、中括號與字母的狀態切換邏輯。 - [LeetCode 筆記 - 42. Trapping Rain Water](https://codingman.cc/leetcode-trapping-rain-water/): 詳解 LeetCode 困難題「接雨水」。本文探討如何運用雙指標 (Two Pointer) 演算法,從兩端向中間逼近並動態更新左右側的最大高度,從而計算出每個位置能儲存的水量,達成 O(n) 時間與 O(1) 空間的最優解。 - [LeetCode 筆記 - 21. Merge Two Sorted Lists](https://codingman.cc/leetcode-merge-two-sorted-lists/): 介紹合併兩個排序鏈結串列 (Linked List) 的基本解法。本文運用雙指標法搭配虛擬頭節點 (Dummy Head) 技巧,簡化合併邏輯並保持結果的排序特性,是初學者掌握鏈結串列操作的必備經典題目。 - [LeetCode 筆記 - 83. Remove Duplicates from Sorted List](https://codingman.cc/leetcode-remove-duplicates-from-sorted-list/): 介紹移除排序鏈結串列中重複節點的基本操作。本文透過單次遍歷與相鄰節點比對,簡單明瞭地去重並保持鏈結結構,是學習鏈結串列 (Linked List) 指標跳轉技術的入門必備練習。 - [LeetCode 筆記 - 82. Remove Duplicates from Sorted List II](https://codingman.cc/leetcode-remove-duplicates-from-sorted-list-ii/): 分析如何從排序鏈結串列中徹底移除所有重複出現過的節點。本文運用虛擬頭節點 (Dummy Head) 技巧與雙迴圈判定邏輯,確保結果中僅保留原始串列中只出現過一次的元素,優化指標操作細節。 - [LeetCode 筆記 - 307.Range Sum Query - Mutable](https://codingman.cc/leetcode-range-sum-query-mutable/): 挑戰 LeetCode 307 題,實作具備數值更新功能的區塊和查詢資料結構。本文詳解線段樹 (Segment Tree) 的建立、單點更新與區塊查詢邏輯,分析其如何在大數據量下維持高效的運算性能,是進階資料結構的實戰筆記。 - [密碼學 - 一次性簽章](https://codingman.cc/one-time-signature/): 介紹一次性簽章 (One-Time Signature, OTS) 的核心原理及其在後量子密碼學中的重要地位。本文比較 Lamport、Winternitz 等不同 OTS 方案的安全性與效能,探討其如何對抗量子運算的威脅,並提供 Python 實作範例。 - [COSCUP 2020 ~ 2024 熱門技術趨勢觀察](https://codingman.cc/coscup-hot-topic-analysis-2020-2024/): 透過分析 2020 至 2024 年 COSCUP 開源年會的議程資料,觀察台灣開源社群的技術關注點位移。本文分享資料收集過程、簡易的標題分析方法,並整理出近年熱門技術的趨勢變化,隨附視覺化圖表與程式碼供參考。 - [Linux - HTTPS Proxy 設定導致的 curl 錯誤](https://codingman.cc/https-proxy-curl-error/): 探討在 Linux 環境中設定 HTTPS 代理伺服器時,可能導致 curl 指令發生錯誤的常見原因。本文說明正確的環境變數設定方式,並分析代理伺服器與 SSL 憑證驗證之間的互動關係,提供具體的除錯步驟與解決方案。 - [PC/SC 函式庫簡介](https://codingman.cc/what-is-pc-sc-library/): 簡介 PC/SC (Personal Computer/Smart Card) 標準規範及其在讀卡機通訊中的應用。本文說明 PC/SC 函式庫的工作流程、APDU 通訊協定基本概念,是開發智慧卡應用程式者的入門必讀指南。 - [Python - 確認檔案是否存在](https://codingman.cc/python-check-if-file-exists/): 彙整多種在 Python 中檢查檔案存在與否的實作方式。本文比較 os.path、pathlib 與 try-except 等方法的適用場景,並提供簡單的效能測試數據,幫助開發者根據需求選擇最優雅的檔案操作方式。 - [密碼學 - RSA 與 PKCS#1](https://codingman.cc/cryptography-rsa-and-pkcs1/): 回顧經典的非對稱加密演算法 RSA 及其相關標準 PKCS#1。本文探討 RSA 的數學原理、金鑰格式、加密解密流程與數位簽章機制,帶您深入了解這項奠定現代資訊安全基石的密碼學技術。 - [如何架設 GitLab runner](https://codingman.cc/how-to-setup-gitlab-runner/): 詳解如何在 Docker Compose 環境中設定與執行 GitLab Runner。本文涵蓋 Runner 的註冊流程、組態配置及在 CI/CD 流程中的角色,幫助開發團隊建立穩健的自動化測試與部署基礎設施。 - [密碼學 - ASN.1 DER Length Decoding](https://codingman.cc/asn1-der-length-decoding/): 介紹密碼學中關鍵的編碼規則 —— ASN.1 DER。本文解釋 DER 序列化的基本原理、結構及其在數位憑證、SSL/TLS 協定中的應用,幫助讀者理解二進位資料如何在不同平台間精確傳輸。 - [Mac - 如何製作 Ubuntu 重灌隨身碟](https://codingman.cc/how-to-create-ubuntu-bootable-usb-on-mac/): 提供在 Mac 系統下製作 Ubuntu 可開機 USB 隨身碟的完整教學。本文逐步引導下載 ISO 映像檔、格式化隨身碟及使用磁碟工具進行燒錄,讓想在硬體上安裝 Linux 系統的使用者能輕鬆完成前置作業。 - [軟體開發 - 什麼是巴士因子](https://codingman.cc/bus-factor/): 介紹軟體工程中的關鍵風險指標 —— 巴士因子 (Bus Factor)。透過歷史典故說明過度依賴單一核心成員的風險,並探討團隊應如何透過知識共享、文件化與程式碼審查來提升專案的韌性與延續性。 - [雲端原生之路 - 重構](https://codingman.cc/cloud-native-refactor-application/): 探討將傳統應用程式轉型為雲端原生 (Cloud Native) 的重構策略。本文分析微服務化、容器化及自動化部署的重要性,幫助開發者理解如何透過架構調整,提升軟體在雲端環境中的彈性、可靠性與開發效率。 - [雲端架構設計的四種範式 - 單體、微服務、巨石與無服務](https://codingman.cc/cloud-architecture-design-paradigms-microservices-monolith-giant-stone-serverless/): 比較單體 (Monolith)、微服務 (Microservices)、巨石與無服務 (Serverless) 等四種雲端架構範例。本文分析各類架構的優缺點與適用場景,提供讀者在面臨架構選型時的決策參考。 - [Git - 常用指令](https://codingman.cc/git-common-commands/): 整理現代軟體開發不可或缺的 Git 常用指令集。從基礎的使用者設定、分支管理到進階的合併衝突處理,本文提供快速上手的指南,幫助開發者更有效率地掌控專案版本,並優化日常工作流程。 - [TimSort - Python 內建排序法](https://codingman.cc/timsort-python-built-in-sorting-algorithm/): 深入剖析 Python 預設採用的 TimSort 排序演算法。TimSort 是一種結合合併排序與插入排序優點的混合型演算法,能適應多種資料分佈特性。本文探討其發展背景、運作機制及其在現代軟體系統中的廣泛應用。 - [LeetCode 筆記 - 22. Generate Parentheses](https://codingman.cc/leetcode-generate-parentheses/): 分析 LeetCode 經典的回溯 (Backtracking) 題目:產生所有合法的括號組合。本文探討如何透過遞迴限制左括號與右括號的使用數量,確保生成的字串符合對稱規則,是練習演算法思維的良好範例。 - [LeetCode 筆記 - 208. Implement Trie (Prefix Tree)](https://codingman.cc/leetcode-implement-trie-prefix-tree/): 挑戰 LeetCode 208 題,實作字典樹 (Trie) 的核心功能。本文詳細介紹 TrieNode 的節點設計,並逐步實作 insert、search 與 startsWith 等方法,分析這類資料結構在處理大量字串前綴搜尋時的效率優勢。 - [羽毛球 - 體能的催動](https://codingman.cc/badminton-release-your-power/): 記錄重拾羽毛球練習後的體能覺醒與技術體悟。本文探討如何發揮身體的內在動力(Level One),透過心理素質與肌肉記憶的結合,在球場上釋放更強大的擊球力量,並回顧十年前後的技術轉轉變。 - [趨勢科技 AI contest 2023](https://codingman.cc/trend-micro-ai-contest-2023/): 以工作人員視角分享參與趨勢科技 2023 AI 大賽的心得感言。本文詳實記錄了從初賽出題、賽事執行到與各路高手交流的過程,帶您了解大型科技公司舉辦技術競賽背後的規劃與挑戰。 - [淺談耳石脫落](https://codingman.cc/about-otolith-dislodgement/): 分享個人對抗「耳石脫落」造成暈眩症狀的親身經歷。本文描述發病時的感覺、就醫過程及復健運動的心得,提醒讀者若遭遇類似眩暈情況應尋求專業醫師診斷,並透過正確方式緩解不適。 - [日本旅遊 - 準備篇](https://codingman.cc/japan-travel-preparation/): 整理日本旅遊前的關鍵準備事項,包含簽證資訊、交通票券、上網方案及在地文化潛規則。本文分享實用的旅遊經驗與觀察,幫助旅客在享受日本美景與美食的同時,能更順利融入當地禮儀與生活。 - [LeetCode 筆記 - 1838. Frequency of the Most Frequent Element](https://codingman.cc/leetcode-frequency-of-the-most-frequent-element/): 針對 LeetCode 第 1838 題,本篇筆記介紹了如何結合排序與滑動視窗(Sliding Window)技術來解決頻率相關問題。透過維護一個動態視窗,並利用剩餘的增加次數來填滿視窗內的差異,讀者可以學會如何高效地找到陣列中出現次數最多的元素組合。 - [LeetCode 筆記 - 1930. Unique Length-3 Palindromic Subsequences](https://codingman.cc/leetcode-unique-length-3-palindromic-subsequences/): 本文分享了 LeetCode 第 1930 題的解題心得。雖然題目涉及子序列與迴文,看似複雜,但透過分析長度為 3 的迴文特性,我們可以簡化問題:只需找出每個字元的第一個與最後一個出現位置,並統計其中間不重複的字元數量。這是一種既直覺又高效的實作方式。 - [LeetCode 筆記 - 2785. Sort Vowels in a String](https://codingman.cc/leetcode-sort-vowels-in-a-string/): 在這篇 LeetCode 第 2785 題的筆記中,我們探討了如何針對字串中的母音進行局部排序。解題思路相當直觀:先將所有母音提取出來並依 ASCII 順序排好,再重新填回原字串的母音位置。本文透過簡明的 Python 實作,示範了如何優雅地處理這類字串操作問題。 - [LeetCode 筆記 - 97. Interleaving String](https://codingman.cc/leeetcode-interleaving-string/): 分析 LeetCode 97 題,判斷字串是否由另外兩個字串交錯組成。本文探討深度優先搜尋 (DFS) 搭配記憶化搜尋,以及動態規劃 (DP) 的解決方案,逐步拆解子問題並驗證字串組成可能性。 - [LeetCode 筆記 - 2642. Design Graph With Shortest Path Calculator](https://codingman.cc/leetcode-design-graph-with-shortest-path-calculator/): 本文實作了 LeetCode 第 2642 題,重點在於如何在帶權重的圖形(Graph)中計算最短路徑。作者詳細介紹了 Dijkstra 演算法的應用,並分享了如何透過快取技術來提升連續查詢的效率。這對於準備軟體工程師面試、強化圖形演算法基礎的讀者極具參考價值。 - [Python - heapq 模組介紹](https://codingman.cc/python-heapq-intro/): 介紹 Python 內建的 heapq 模組,其基於二元堆積實作了最小堆積 (Min Heap) 資料結構。本文說明 heappush、heappop 與 heapify 等常用函數,並探討堆積在優先權佇列中的應用場景。 - [LeetCode 筆記 - 1446. Consecutive Characters](https://codingman.cc/leetcode-consecutive-characters/): LeetCode 第 1446 題解析,尋找字串中最長的連續單一字元長度。本文採取直覺的線性掃描策略,透過一次遍歷並動態比對前後字元,精確掌握連續區段的最大值。這是一篇鍛鍊基礎字串處理與計數邏輯的入門練習。 - [LeetCode 筆記 - 1513. Number of Substrings With Only 1s](https://codingman.cc/leetcode-number-of-substrings-with-only-1s/): 題目在此 1513. Number of Substrings With Only 1s - [LeetCode 筆記 - 1759. Count Number of Homogenous Substrings](https://codingman.cc/leetcode-count-number-of-homogenous-substrings/): 本文探討了 LeetCode 第 1759 題,目標是計算字串中所有由相同字元組成的子字串總數。作者提醒讀者避免使用效率低下的深度優先搜尋,並分享了基於數學公式的常數時間複雜度解法,幫助讀者在處理大數據時能優雅地產出正確答案。 - [LeetCode 筆記 - 2849. Determine if a Cell Is Reachable at a Given Time](https://codingman.cc/leetcode-determine-if-a-cell-is-reachable-at-a-given-time/): 探討 LeetCode 2849 題,在無限大的格狀地圖中,給定起點、終點與時間,判斷是否能在指定時間內精確抵達目標。本文介紹解題思路,重點在於計算兩點間的最短 Chebyshev 距離並考慮特殊路徑情況。 - [LeetCode 筆記 - 2075. Decode the Slanted Ciphertext](https://codingman.cc/leetcode-decode-the-slanted-ciphertext/): 針對 LeetCode 第 2075 題,本篇筆記介紹了傾斜轉置密碼(Slanted Transposition Cipher)的解密過程。解題的核心在於直接模擬轉換邏輯,並透過操作索引而非頻繁更動字串內容,來優化執行速度。對於對古典密碼學模擬感興趣的讀者,這是一篇不錯的實作參考。 - [LeetCode 筆記 - 1921. Eliminate Maximum Number of Monsters](https://codingman.cc/leetcode-eliminate-maximum-number-of-monsters/): 在這篇 LeetCode 第 1921 題的筆記中,我們探討了如何在怪物抵達堡壘前盡可能地將其消滅。解題關鍵在於預先計算每個怪物的到達時間並進行排序,以此制定最佳的攻擊順序。本文透過淺顯易懂的邏輯,帶領讀者掌握貪婪演算法在實戰中的應用。 - [Python - bisect 模組介紹](https://codingman.cc/python-bisect-intro/): 詳解 Python 內建的 bisect 模組,這是一個專門處理二元搜尋與維持串列排序狀態的強大工具。本文介紹 bisect_left、bisect_right 以及 insort 等函數用法,幫助您在開發時更有效率地操作排序資料。 - [Python - 二元搜尋法](https://codingman.cc/python-binary-search/): 介紹二元搜尋 (Binary Search) 的核心概念與演算法實作。二元搜尋適用於已排序陣列,其時間複雜度為 O(log n),效率遠高於線性搜尋。本文深入淺出說明搜尋流程與邊界處理細節。 - [Python - List 介紹](https://codingman.cc/python-list-intro/): 快速回顧 Python 最基礎且靈活的資料結構 —— List。本文涵蓋 List 的初始化、常用操作方法及切片 (Slicing) 技術,並提醒一些常見的性能陷阱,是 Python 開發者不可或缺的基本功筆記。 - [LeetCode 筆記 - 1845. Seat Reservation Manager](https://codingman.cc/leetcode-seat-reservation-manager/): 本文介紹了如何設計一個座位預約管理系統,對應 LeetCode 第 1845 題。核心挑戰在於如何快速找出最小的可用座位,文中展示了使用 Python 內建的堆積(Heap)模組以及自行實作二元搜尋兩種方式,適合想深入理解資料結構運用的開發者參考。 - [LeetCode 筆記 - 1535. Find the Winner of an Array Game](https://codingman.cc/leetcode-find-the-winner-of-an-array-game/): 本篇文章記錄了 LeetCode 第 1535 題的解題思路。題目要求在一個數列中模擬遊戲規則,找出第一個連續贏得指定次數的數字。文中介紹了如何利用索引模擬移動過程的小技巧,避免頻繁的陣列操作,進而大幅提升程式執行效率。 - [LeetCode 筆記 - 2369. Check if There is a Valid Partition For The Array](https://codingman.cc/leetcode-check-if-there-is-a-valid-partition-for-the-array/): LeetCode 第 2369 題要求判斷陣列是否能被有效分割,這是一個典型的動態規劃(Dynamic Programming)問題。文中詳細拆解了三個判斷條件,並逐步引導讀者建立 DP 狀態轉移方程,讓看似晦澀難懂的演算法邏輯變得清晰易懂,是訓練邏輯思維的良好範例。 - [LeetCode 筆記 - 919. Complete Binary Tree Inserter](https://codingman.cc/leeetcode-complete-binary-tree-inserter/): 介紹如何實作一個完全二元樹 (Complete Binary Tree) 的插入器類別。本文分析如何有效率地尋找下一個插入位置的父節點,並透過佇列 (Queue) 維持結構特性,確保每次插入都能符合完全二元樹的定義。 - [LeetCode 筆記 - 1503. Last Moment Before All Ants Fall Out of a Plank](https://codingman.cc/leetcode-last-moment-before-all-ants-fall-out-of-a-plank/): 解析饒富趣味的螞蟻落木板問題。雖然題目描述螞蟻相遇會交換方向,本文揭露解題關鍵:可將相遇視為螞蟻直接「穿過」彼此。透過此簡化思維,只需找出距離邊緣最遠的螞蟻掉落時間,即可秒解這個看似複雜的運動邏輯題。 - [LeetCode 筆記 - 41. First Missing Positive](https://codingman.cc/leetcode-first-missing-positive/): 挑戰 LeetCode 經典困難題,在未排序的數列中找出沒出現過的最小正整數。本文實作符合時間複雜度 O(n) 與空間複雜度 O(1) 的原地置換演算法,透過將數值放到對應索引位置來解決問題。 - [工程師如何經營個人品牌](https://codingman.cc/how-engineer-builds-personal-branding/): 在競爭激烈的職涯中,個人品牌是脫穎而出的關鍵。作者分享自身經營經驗,探討清晰定位與專業形象如何協助工程師贏得技術主管青睞。本文提供建立品牌的具體策略與建議,引導開發者在技術之外,建構更有影響力的專業價值。 - [特斯拉 - 一萬公里心得](https://codingman.cc/tesla-10000km-review/): 牽車半年開了一萬公里的深度測評。作者對 Tesla Model Y 的表現給予高度肯定,分享了從油車轉電車的心裡適應期、使用經驗及常見問題解答。這是一篇提供給潛在車主的真實長測報告,涵蓋了購車前未曾注意的實務細節。 - [Git - 如何變更 commit author](https://codingman.cc/how-to-change-commit-author-in-git/): 在使用 Git 時,若需修正 commit 的作者資訊或電子郵件,該如何處理?本文介紹如何使用 --amend 參數快速變更最後一筆提交的資訊。這是一篇掌握 Git 版本控制細節、修正歷史紀錄錯誤的實用技術隨筆。 - [OpenAI 如何幫助我的工程師工作](https://codingman.cc/how-openai-helps-my-work/): OpenAI 的技術已深入工程開發。本文分享作者如何運用 ChatGPT 與 GitHub Copilot 輔助程式碼重構、版本升級與效能優化。透過這篇文章,讀者能了解如何藉由人工智慧工具提升產出品質與開發效率,開啟全新的協作模式。 - [Python - 如何安裝套件](https://codingman.cc/how-to-install-python-packages/): Python 開發必備基礎:安裝套件。本文詳述最主流的 pip 安裝方式,並簡介從開放原始碼編譯安裝的流程。無論是初學者或有經驗的開發者,都能透過這篇指南掌握如何管理開發環境中的擴充功能,打造高效的專案基礎。 - [NLP - 如何使用 BERT 實現相關文章功能](https://codingman.cc/how-to-use-bert-to-implement-related-posts/): 當部落格內容增加,手動建立相關文章連結會變得非常耗時。本文介紹如何運用自然語言處理(NLP)技術,透過 BERT 模型自動分析文章語義並產生推薦清單。這套方案能有效提升讀者體驗,讓創作者專注於撰寫優質內容。 - [如何使用 One Time Password 加強 Ubuntu 伺服器 SSH 安全性](https://codingman.cc/how-to-use-one-time-password-to-secure-ubuntu-server-ssh/): 伺服器安全性至關重要,特別是面臨頻繁的 SSH 暴力破解攻擊時。本文教學如何在 Ubuntu 伺服器上部署一次性密碼(OTP)機制,透過雙重驗證(2FA)大幅提升遠端登入的安全性,是以低成本加強個人伺服器防禦的實務方案。 - [如何使用 Mac 幫 Tesla 行車記錄器影片加上時間標籤](https://codingman.cc/how-to-add-timestamp-to-tesla-dashcam-video-on-mac/): Tesla 車主必看!本文針對車上行車紀錄器影片缺乏時間標籤的問題,提供一套在 macOS 上的解決方案。透過強大的影片處理工具 ffmpeg,使用者可以輕鬆為哨兵模式或行車記錄影片加上時間浮水印,方便後續查閱或存證。 - [如何使用 Google Analytics Data API](https://codingman.cc/how-to-use-google-analytics-data-api/): Google Analytics Data API 能讓開發者透過程式化方式提取網站流量數據。本文教學如何使用 Python 呼叫 API,避免手動整理報表的繁瑣過程。內容包含基礎設定與程式碼範例,是開發數據分析應用或自動化報表系統的實用教學。 - [購車心得 - Tesla Model Y](https://codingman.cc/tesla-purchase-experience-model-y/): 作者紀錄購買 Tesla Model Y 的心路歷程與初次交車體驗。內容涵蓋了從 Model 3 試駕印象到最終決定換車的考量,並分享了針對通勤習慣轉變與購車決策的實務建議,為對電動車感興趣的朋友提供真實的使用者視視角。 - [如何傳送敏感資訊 - GnuPG](https://codingman.cc/how-to-send-sensitive-information-with-gnupg/): 解析如何在不安全的網路環境中安全地傳送敏感訊息。本文介紹 GnuPG (GPG) 的安裝與使用,教學如何產生公私鑰對並進行訊息加解密。這是一篇提升開發者資安意識、掌握基礎非對稱加密應用的實戰技術指南。 - [如何在 Mac 上安裝圍棋 AI - KataGo](https://codingman.cc/how-to-install-katago-on-mac/): 想在 Mac 上體驗頂尖圍棋 AI 嗎?本文引導讀者透過 Homebrew 安裝 KataGo,並配合 Sabaki 圖形化介面打造流暢的對弈環境。透過逐步的安裝教學,讓圍棋愛好者能在本機輕鬆享受 AI 輔助分析與對局的樂趣。 - [面試心得 - 趨勢科技](https://codingman.cc/interview-with-TrendMicro/): 分享參與趨勢科技面試的實務經驗與心路歷程。作者回顧了在面試準備、內推過程中的觀察,並傳達其「只面自己願意去的公司」的求職策略。這是一篇提供技術背景、面試氛圍與職涯決策考量的經驗分享文章。 - [如何成為一位傑出的工程師 (好文備份)](https://codingman.cc/how-to-be-a-star-engineer/): 轉載並備份 Robert E. Kelley 關於如何成為頂尖工程師的經典論述。內容探討傑出與普通工程師在工作習慣與思維上的本質差異,旨在透過這篇具啟發性的好文,提供讀者在職涯發展中提昇生產力與競爭力的思考方向。 - [過年筆記 - 2023](https://codingman.cc/lunar-new-year-note-2023/): 作者記錄 2023 年春節期間的生活點滴與實務筆記。包含成功清除門口陳年水垢的產品推薦與使用經驗,透過簡短的生活紀錄,留存實用的居家清潔技巧,並作為個人生活的年度回顧。 - [使用 rsync 同步你的檔案](https://codingman.cc/sync-your-files-with-rsync/): 詳細介紹強大的檔案同步工具 rsync。本文解析 rsync 透過檢查檔案大小與時戳來達成增量更新的原理,並提供常用的參數說明與指令範例。對於需要跨網路進行高效率備份或部署的使用者來說,是不可多得的實戰指南。 - [我如何打造我的部落格](https://codingman.cc/how-i-build-my-blog/): 作者分享如何利用免費資源打造個人技術部落格。內容詳述 Hexo 框架、GitHub Actions 自動化部署與 GitHub Pages 託管的整合流程。透過這套方案,只需支付網域費用即可建立高品質的網站,非常適合想開始寫作的工程師參考。 - [中華電信的新免費服務 VoLTE / VoWiFi](https://codingman.cc/Chunghwa-new-free-service-VoLTE-and-VoWiFi/): 介紹中華電信開放免費申請的 VoLTE 與 VoWiFi 服務。本文解析 VoLTE 如何提升語音通話品質並縮短通話建立時間,以及 VoWiFi 在訊號不佳處透過 Wi-Fi 通訊的優勢,是一篇協助使用者了解並提升通訊品質的實用資訊分享。 - [選擇你的程式碼字體 - CodingFont](https://codingman.cc/choose-your-coding-font-codingfont/): 身為每天盯著螢幕的工程師,適合的字體對閱讀極具影響。本文推薦「CodingFont」網站,幫助開發者在眾多字體中挑選最符合需求的樣式。文中特別介紹了 Monaco 等經典字體,旨在優化程式碼閱讀體驗並減輕視覺疲勞。 - [可自架的密碼管理器 - Bitwarden](https://codingman.cc/self-hosting-password-manager-bitwarden/): 針對數位時代的密碼管理需求,本文推薦開源且支援自架的密碼管理工具「Bitwarden」。作者分享了其跨平台支援的便利性,以及如何透過此工具安全地管理海量登入資訊,提升個人資訊安全並告別忘記密碼的困擾。 - [Hexo - 我的部落格疑難雜症筆記](https://codingman.cc/hexo-the-problem-notes-of-my-blog/): 紀錄解決 Hexo 部落格搜尋視窗縮小特效異常的除錯歷程。作者分享了在嘗試多種更新後,最終如何透過社群友人的協助精確修復問題。本文旨在記錄這些開發中的疑難雜症,為遇到類似狀況的 Hexo 使用者提供參考方案。 - [Mac - 升級你的 Terminal](https://codingman.cc/mac-upgrade-your-terminal/): 覺得 Mac 內建終端機功能有限且不夠美觀嗎?本文分享如何透過 iTerm2、Oh My Zsh 以及 Powerlevel10k 等一系列工具,全面升級你的 Terminal。從語法上色到自動建議,打造一個既強大又符合工程師審美的開發環境。 - [簡單易用的剪貼簿工具 - Clipy](https://codingman.cc/scrapbook-tool-clipy/): 身為軟體工程師,頻繁地複製貼上是日常工作。本文推薦 Mac 平台上的剪貼簿增強工具「Clipy」。它能記錄多筆歷史資料並透過快捷鍵隨時調用,大幅提升程式碼編輯與文件整理的效率,是提升工作產力的必備神器。 - [使用 Balance Lock 解決 Mac 聲音左右不平衡的問題](https://codingman.cc/balance-lock-macos/): 針對 macOS 使用耳機時偶爾出現聲音左右不平衡的長年問題,本文推薦一款實用的工具軟體「Balance Lock」。透過簡單的設定,它能自動鎖定並校正聲音平衡點,為 Mac 使用者提供更穩定、舒適的聆聽體驗。 - [面試心得 - Google](https://codingman.cc/interview-with-Google/): 作者紀錄參與 Google 面試的完整歷程,包含初步的視訊訪談、技術背景了解以及 CS 基礎題目的測試。本文旨在分享面試過程中的觀察與準備經驗,希望能為未來同樣嚮往頂尖科技公司的面試者提供具價值的參考與心理建設。 - [PyPtt - 批踢踢超貼觀測站兩三事](https://codingman.cc/pyptt-about-ptt-you-guys-post-too-many/): 作者分享開發「批踢踢超貼觀測站」的緣由與技術歷程。內容回顧了從擔任版主抓超貼的艱辛,到自行開發 Python PTT 庫 PyPtt 的種種心得。本文不僅介紹了工具的功能,更記錄了一個開源專案從種子到成熟應用的心路歷程。 - [Python - AutoStrEnum](https://codingman.cc/python-autostrenum/): 探討在 Python 中使用 Enum 管理資料欄位的追尋旅程。為了避免硬編碼字串散落在專案各處,本文研究了如何利用自動化數值(Automatic values)來優化 Enum 的宣告與維護,是一篇提升程式碼強健性與可維護性的實務開發隨筆。 - [LeetCode 筆記 - 78. Subsets](https://codingman.cc/leetcode-subsets/): 挑戰從數列中產生所有可能的子數列。本文介紹高效的「迭代法」:從空集開始,每遍歷到新數字便將其加入所有現有子集中。這是一篇探討 O(N * 2^N) 時間複雜度與集合生成邏輯的技術心得。 - [LeetCode 筆記 - 199. Binary Tree Right Side View](https://codingman.cc/leetcode-binary-tree-right-side-view/): 要求回傳二元樹從右側觀察到的視圖節點。本文運用廣度優先搜尋(BFS)進行層序遍歷,並精確搜集每一層最後出現的節點。這是一個理解如何透過層級探索來提取樹狀結構視覺屬性的經典實作案例。 - [LeetCode 筆記 - 38. Count and Say](https://codingman.cc/leetcode-count-and-say/): 針對 LeetCode 第 38 題「外觀數列」,本文教學如何根據規則進行字串編碼。解題核心在於準確描述上一個數列的組成情況,並轉換為新的字串表示。這是一篇掌握基礎字串遍歷、計數與模擬邏輯的實作隨筆。 - [LeetCode 筆記 - 9. Palindrome Number](https://codingman.cc/leetcode-palindrome-number/): 判定輸入數字是否為迴文。雖然可以透過數學運算取位數比對,本文分享更簡潔的 Python 風格寫法:將數字轉換為字串後,直接與其反轉版本進行比對。內容精簡直觀,適合掌握基本字串操作與邏輯判定。 - [LeetCode 筆記 - 746. Min Cost Climbing Stairs](https://codingman.cc/leetcode-min-cost-climbing-stairs/): 解析「使用最小花費爬樓梯」問題。本文展示動態規劃(DP)的基礎應用,透過從過去兩階中挑選成本較小的路徑來累加當前花費。這種逐步推導全域最優解的方式,非常適合初學者鞏固對 DP 狀態轉移與查表法的理解。 - [LeetCode 筆記 - 1696. Jump Game VI](https://codingman.cc/leetcode-jump-game-vi/): 挑戰跳跳遊戲系列第六題,尋找路徑最高得分。雖然題目複雜度較高,本文分享利用最大堆積(Max Heap)優化搜尋過程的技巧:動態保存過去 k 個步驟中的最大分數,大幅提升動態規劃在長視窗下的執行效率。 - [LeetCode 筆記 - 1306. Jump Game III](https://codingman.cc/leetcode-jump-game-iii/): 跳跳遊戲系列第三題,判定是否能跳至數值為 0 的位置。本文結合深度優先搜尋(DFS)與走訪記錄技巧,防止程式陷入無限循環。透過條件式的路徑探索,引導讀者掌握帶有特殊移動規則的圖形走訪判定邏輯。 - [LeetCode 筆記 - 206. Reverse Linked List](https://codingman.cc/leetcode-reverse-linked-list/): LeetCode 必考基礎題,實作鏈結串列的反轉。本文介紹一種直覺的指針變更策略:透過維護一個「前一節點」的參數,在遍歷過程中逐步調整 next 指針的指向。這是一篇掌握鏈結串列結構重組核心邏輯的必讀筆記。 - [LeetCode 筆記 - 92. Reverse Linked List II](https://codingman.cc/leetcode-reverse-linked-list-ii/): 要求反轉鏈結串列中指定範圍內的節點。本文分享利用列表輔助處理的簡化策略,雖然在空間複雜度上有權衡,但極大地降低了指針操作的複雜度與出錯率。這是一篇針對鏈結串列局部重組問題的實務開發隨筆。 - [LeetCode 筆記 - 265. Paint House II](https://codingman.cc/leetcode-paint-house-ii/): 延續粉刷房子的概念,本題將顏色種類擴展至 k 種。解題思維同樣基於動態規劃,但需要處理更廣泛的顏色選擇範圍。本文解析如何在增加顏色靈活度的同時,依然保持演算法的執行效率,是進階動態規劃應用的優質練習。 - [LeetCode 筆記 - 256. Paint House](https://codingman.cc/leetcode-paint-house/): 解析 LeetCode 經典題「粉刷房子」。本文探討如何在顏色不相鄰的限制下,運用動態規劃(DP)找出粉刷所有房子的最低成本。透過建立狀態轉移方程,逐層累加當前顏色的最優解,是理解 DP 處理相鄰約束問題的入門首選。 - [LeetCode 筆記 - 509. Fibonacci Number](https://codingman.cc/leetcode-fibonacci-number/): LeetCode 費氏數列計算解析。本文展示如何利用動態規劃(DP)與查表法(Memoization)來儲存中間計算結果,避免傳統遞迴導致的重複運算與效能浪費。這是一篇理解遞迴優化與動態規劃入門的最佳實踐筆記。 - [LeetCode 筆記 - 100. Same Tree](https://codingman.cc/leetcode-same-tree/): 針對判定兩棵二元樹是否完全相同的 LeetCode 題目進行解析。本文採用同步遞迴走訪兩棵樹的策略,逐一比對每個節點的值與結構。這是一篇幫助讀者掌握樹走訪(Tree Traversal)與基礎遞迴判別邏輯的入門教學。 - [LeetCode 筆記 - 64. Minimum Path Sum](https://codingman.cc/leetcode-minimum-path-sum/): 尋找矩陣中從左上到右下的最小路徑成本。這是一個純粹且經典的動態規劃(DP)問題。本文引導讀者建立路徑成本矩陣,透過逐一選取上方或左方較小的路徑值進行累加,最終在 O(M * N) 時間內得出全域最優解。 - [LeetCode 筆記 - 128. Longest Consecutive Sequence](https://codingman.cc/leetcode-longest-consecutive-sequence/): 挑战在無序數列中尋找最長連續子序列,且要求在 O(N) 線性時間內完成。本文分享透過哈希集合快速定位連續區間起點與延伸方向的技巧,是一篇探討如何繞過傳統排序限制、利用空間換取查詢效率的高階演算法心得。 - [LeetCode 筆記 - 61. Rotate List](https://codingman.cc/leetcode-rotate-list/): 挑戰在不轉換為列表的情況下對鏈結串列進行向右旋轉。本文教學如何精確操作指針,透過斷開特定節點並將原尾端重新連接至頭部,達成 O(1) 額外空間的結構變更。這是一篇掌握鏈結串列結構變更細節與循環連接技巧的實務筆記。 - [LeetCode 筆記 - 135. Candy](https://codingman.cc/leetcode-candy/): 解析 LeetCode 困難題「分發糖果」。解題邏輯聚焦於將複雜的山形分佈拆解為左、右兩個獨立的山坡進行計算,最後取兩者最大值。本文展示如何將看似棘手的全局最優化問題分解為局部的線性掃描,達成優美且高效的解決方案。 - [LeetCode 筆記 - 45. Jump Game II](https://codingman.cc/leetcode-jump-game-ii/): 跳跳遊戲系列第二題,尋找抵達終點的最小步數。本文解析如何運用動態規劃(DP)紀錄每個位置的最短步數,透過局部覆蓋範圍的持續更新,在 O(N) 或 O(N^2) 複雜度下收斂出最優路徑,是理解路徑優化問題的經典範例。 - [LeetCode 筆記 - 376. Wiggle Subsequence](https://codingman.cc/leetcode-wiggle-subsequence/): 解析如何尋找最長的波動序列。本文分享三種不同的解題軌跡,探討如何動態追蹤數列的一上一下長度變化。核心概念在於靈活處理可跳過的元素,讓讀者能從不同複雜度的實作中掌握波動序列計數的精髓。 - [LeetCode 筆記 - 55. Jump Game](https://codingman.cc/leetcode-jump-game/): 跳跳遊戲系列首題,判定是否能抵達數列終點。本文警告讀者避免落入動態規劃的複雜度陷阱,改採只需紀錄「最遠可抵達位置」的貪婪思維。這種線性掃描法能以極高的效率完成判定,是學習貪婪策略與範圍判斷的優質案例。 - [LeetCode 筆記 - 515. Find Largest Value in Each Tree Row](https://codingman.cc/leetcode-find-largest-value-in-each-tree-row/): 要求找出二元樹中每一層的最大值。本文運用廣度優先搜尋(BFS)走訪每一層節點,並在每層迭代中紀錄下最高數值。這展示了層序遍歷在處理樹狀結構層次屬性統計時的直覺應用。 - [LeetCode 筆記 - 43. Multiply Strings](https://codingman.cc/leetcode-multiply-strings/): 要求在不直接調用 Python 內建 int() 的情況下實現大數相乘字串。本文分享如何自定義字元與數字的映射表,親手實作字串到數值的轉換與運算邏輯。這是一篇回歸計算機基礎運算原理,鍛鍊開發者處理原始字串解析能力的筆記。 - [LeetCode 筆記 - 1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://codingman.cc/leetcode-maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/): 計算蛋糕切割後的最大區域面積。本文指出問題核心在於分別找出橫向與縱向切割中的最大跨度。透過對切割座標進行排序並計算最大差值,最後相乘即可得出結果。這是一篇關於維度分解與排序應用實務的筆記。 - [LeetCode 筆記 - 1710. Maximum Units on a Truck](https://codingman.cc/leetcode-maximum-units-on-a-truck/): 針對卡車裝載問題,本文展示貪婪演算法(Greedy Algorithm)的應用。透過優先挑選單位容量最大的盒子,能在有限的卡車空間內達成裝載價值的最大化。這是一篇引導讀者理解如何透過局部最佳化推導出全域最佳解的基礎實作。 - [LeetCode 筆記 - 462. Minimum Moves to Equal Array Elements II](https://codingman.cc/leetcode-minimum-moves-to-equal-array-elements-ii/): 相較於前一題,本題允許加一或減一。本文解析為什麼「將所有數字帶向平均值」並非最優策略,並引入「中位數」作為相遇點的核心概念。透過數學推導與實作驗證,展示了中位數在最小化總移動成本問題中的關鍵作用。 - [LeetCode 筆記 - 453. Minimum Moves to Equal Array Elements](https://codingman.cc/leetcode-minimum-moves-to-equal-array-elements/): 針對讓數列元素相等的最小移動次數,本文分享一個巧妙的邏輯轉化:將「n-1 個數字加一」視為「選定一個數字減一」。透過此轉變,問題變成了將所有數字降至最小值的累計次數,極大地簡化了計算難度與程式複雜度。 - [LeetCode 筆記 - 406. Queue Reconstruction by Height](https://codingman.cc/leetcode-queue-reconstruction-by-height/): 挑戰根據身高與排隊限制重建隊伍。本文跳出官方建議的從矮開始思考,改採從高處著手的策略:先對身高進行降序排列,再根據排隊條件插入對應位置。這展現了在處理具備相互依賴關係的排序問題時,選擇正確處理順序的重要性。 - [LeetCode 筆記 - 69. Sqrt(x)](https://codingman.cc/leetcode-sqrtx/): 實作求取整數平方根的功能。本文解析如何運用二元搜尋(Binary Search)在 0 到 x 的範圍內快速逼近目標值。這展示了二元搜尋不僅可用於數列尋找,也能應用在數學函數的根值逼近任務中,提供極高的計算效率。 - [LeetCode 筆記 - 1647. Minimum Deletions to Make Character Frequencies](https://codingman.cc/leetcode-minimum-deletions-to-make-character-frequencies-unique/): 要求透過最少刪除次數,讓字串中每個字母的出現頻率各不相同。解題思路聚焦於統計頻率後,動態降低重複出現的頻率值,直到找到唯一的空位。這是一篇關於資料統計、集合過濾與動態調整邏輯的實戰分享。 - [LeetCode 筆記 - 210. Course Schedule II](https://codingman.cc/leetcode-course-schedule-ii/): 延續課程安排問題,本題要求給出一組可行的修課順序。解法核心同樣基於 DFS 進行環偵測,並利用遞迴結束的順序來搜集節點。這是一篇深入探討拓撲排序原理的筆記,教導開發者如何在解決依賴關係問題的同時建立正確的處理順序。 - [LeetCode 筆記 - 207. Course Schedule](https://codingman.cc/leetcode-course-schedule/): 在選修課程與先修限制中判斷是否有衝突。這題本質上是圖論中的「環偵測」問題。本文分享如何運用深度優先搜尋(DFS)遍歷節點,並透過路徑標記來識別是否存在循環依賴(Cycle),是學習拓撲排序與圖形走訪的重要基礎。 - [LeetCode 筆記 - 377. Combination Sum IV](https://codingman.cc/leetcode-combination-sum-iv/): 給定數列求相加等於目標值的組合數量。由於數字可重複且順序不同視為不同組合,本文捨棄遞迴搜尋,改用效率更高的動態規劃(DP)策略。透過逐層累加子問題的解答,能在可接受的時間內精確算出龐大的組合總數。 - [LeetCode 筆記 - 216. Combination Sum III](https://codingman.cc/leetcode-combination-sum-iii/): 挑戰從數字 1 到 9 中找出特定長度且總和等於目標值的組合。本文利用深度優先搜尋(DFS)進行窮舉,透過遞迴探索與邊界剪枝,能高效地找出所有符合限制的數字組合。這是一篇掌握回溯(Backtracking)技巧的進階練習。 - [LeetCode 筆記 - 40. Combination Sum II](https://codingman.cc/leetcode-combination-sum-ii/): 針對包含重複元素的 Combination Sum II 問題,本文分享如何運用深度優先搜尋(DFS)找出相加等於目標值的所有組合。重點解析了透過排序與條件判斷來避免產出重複結果的關鍵技巧,幫助讀者在處理回溯演算法時掌握更精細的剪枝策略。 - [LeetCode 筆記 - 39. Combination Sum](https://codingman.cc/leetcode-combination-sum/): 解析如何從數列中找出相加等於目標值的所有不重複組合,且數字可無限重複使用。本文教學使用深度優先搜尋(DFS)配合排序優化,透過剪枝技術跳過無效的分支,達成在廣大搜尋空間中精確搜集目標組合的目的。 - [LeetCode 筆記 - 215. Kth Largest Element in an Array](https://codingman.cc/leetcode-kth-largest-element-in-an-array/): 如何在無序數列中找到第 k 大的元素?本文分析了局部選擇與全局排序的效能差異。在大規模數據下,適當的排序配合索引存取往往比多次選擇更具優勢。這是一篇關於演算法選擇與數據規模權衡的實務討論。 - [LeetCode 筆記 - 1642. Furthest Building You Can Reach](https://codingman.cc/leetcode-furthest-building-you-can-reach/): 要在建築間移動,如何最有效分配有限的磚塊與梯子?本文分享利用優先權隊列(Priority Queue/Heap)「改變過去」的策略:先將梯子用在每一次爬升,當梯子耗盡時再從堆積中找最小爬升高度換回磚塊。這是一篇關於貪婪演算法與堆積運用的優質筆記。 - [LeetCode 筆記 - 820. Short Encoding of Words](https://codingman.cc/leetcode-short-encoding-of-words/): 探討如何針對單字清單建立最短的合法編碼。本文解析規則中字串包含的特性,分享先進行長度排序再依序比對後綴的優化策略。透過這套方案,能精確判斷哪些單字可被壓縮在其他單字中,達成節省存儲空間的編碼目標。 - [LeetCode 筆記 - 62. Unique Paths](https://codingman.cc/leetcode-unique-paths/): 經典的棋盤路徑計數問題。本文利用動態規劃(DP)的核心思想,透過逐格加總左方與上方的走法數量,精確計算出從左上角抵達右下角的所有可能路徑。這是一篇適合掌握遞推關係式建立與基礎矩陣運算的演算法筆記。 - [LeetCode 筆記 - 583. Delete Operation for Two Strings](https://codingman.cc/leetcode-delete-operation-for-two-strings/): 挑戰找出將兩個字串刪減至完全相同所需的最少步數。本文將問題轉化為尋找「最長共同子序列」(LCS),並揭露總長度扣除兩倍 LCS 即為最小刪除次數的規律。透過結合動態規劃概念,能高效解決字串比對與編輯距離相關問題。 - [LeetCode 筆記 - 1143. Longest Common Subsequence](https://codingman.cc/leetcode-longest-common-subsequence/): 解析經典的「最長共同子序列」問題。本文針對兩個字串的 LCS 運算,探討其在動態規劃中的實作邏輯。作為一個 NP-Hard 問題的簡化版,這是一篇理解字串比對、版本控制(如 git diff 原理)背後演算法思維的重要參考。 - [LeetCode 筆記 - 120. Triangle](https://codingman.cc/leetcode-triangle/): 要求在數字三角形中尋找相加總和最小的路徑。解題思路結合了深度優先搜尋(DFS)與動態規劃(DP),透過記錄已探索過的子路徑結果來避免重複計算。本文分享如何透過記憶化搜索,將複雜路徑搜尋優化為高效的遞推過程。 - [LeetCode 筆記 - 1695. Maximum Erasure Value](https://codingman.cc/leetcode-maximum-erasure-value/): 挑戰尋找不含重複元素且總和最大的子數列。本文結合滑動視窗(Sliding Window)與哈希表(Hash Map)來動態調整搜尋範圍,並配合前綴和技術加速區間加總。這是一篇展示如何組合多種經典技巧來解決複合型問題的開發筆記。 - [LeetCode 筆記 - 1658. Minimum Operations to Reduce X to Zero](https://codingman.cc/leetcode-minimum-operations-to-reduce-x-to-zero/): 尋找從兩端移除元素使總和等於 x 的最小步驟。本文分享一個逆向思考的小技巧:將問題轉化為尋找總和為「總數 - x」的最長連續子陣列。結合前綴和與雙指針技術,能讓這個看似複雜的兩端搜尋問題變得易於實作。 - [LeetCode 筆記 - 1332. Remove Palindromic Subsequences](https://codingman.cc/leetcode-remove-palindromic-subsequences/): 挑戰清空僅包含 a 與 b 的字串。由於移除規則允許一次刪除所有符合條件的「迴文子序列」,本文揭露了一個驚人的簡化邏輯:若原字串非迴文,最多只需兩步(先刪除所有 a,再刪除所有 b)即可清空。這是一篇強調審題與邏輯簡化重要性的筆記。 - [Python - How to list all the files](https://codingman.cc/python-how-to-list-all-the-files/): 在 Python 開發中,遞迴列出目錄及子目錄下的所有檔案是常見需求。本文分享如何使用內建的 glob 模組,透過簡潔的通配符語法快速取得完整檔案清單。這是一篇掌握檔案系統操作與目錄遍歷技巧的實用技術隨筆。 - [LeetCode 筆記 - 160. Intersection of Two Linked Lists](https://codingman.cc/leetcode-intersection-of-two-linked-lists/): 挑戰尋找兩個鏈結串列的交會點。本文特別介紹神奇的「龜兔賽跑演算法」(Floyd Cycle Detection Algorithm),展示如何透過精巧的指標移動邏輯,在不需要額外空間的情況下,偵測出結構中的環或交會節點,是一篇探討指針美學的深度心得。 - [Mac - 如何用程式發出本機系統通知](https://codingman.cc/mac-how-to-activate-a-system-notifications/): 分享如何在 Mac 系統中使用程式碼觸發系統通知(System Notification)。對於需要執行長時間程序的使用者,本文提供一套自動化提醒方案,讓程式在任務結束後主動通知開發者,有效節省等待時間並提升工作流程效率。 - [LeetCode 筆記 - 303. Range Sum Query - Immutable](https://codingman.cc/leetcode-range-sum-query-immutable/): 解析如何在靜態數列中快速進行多次區間總和查詢。本文介紹「前綴和」表格的建立與運算公式:透過預先計算累積和,讓每次查詢都能在 O(1) 時間內完成。這是一個優化重複性查詢需求的經典演算法實作範例。 - [LeetCode 筆記 - 304. Range Sum Query 2D - Immutable](https://codingman.cc/leetcode-range-sum-query-2d-immutable/): 將前綴和概念延伸至二維矩陣。本文引導讀者建立 2D Prefix Sum 表格,透過計算矩形區域的加減邏輯,達成任意子矩形總和的瞬間查詢。這是一篇掌握空間索引與高效率矩陣運算的高階技術分享。 - [LeetCode 筆記 - 867. Transpose Matrix](https://codingman.cc/leetcode-transpose-matrix/): LeetCode 矩陣轉置實作練習。本文教學如何將 2D 矩陣的行與列進行互換,是一篇關於矩陣基本操作與巢狀迴圈索引處理的基礎筆記。內容簡潔直觀,適合初學者鞏固對多維陣列結構的理解。 - [LeetCode 筆記 - 1461. Check If a String Contains All Binary Codes of Size K](https://codingman.cc/leetcode-check-if-a-string-contains-all-binary-codes-of-size-k/): 判定二進位字串是否包含所有長度為 k 的可能組合。本文分享利用集合(Set)存儲所有子字串的策略,並透過檢查集合長度是否達到 2^k 來快速得出結論。這是一篇掌握字串切片、集合運算與二進位組合邏輯的實用筆記。 - [LeetCode 筆記 - 1480. Running Sum of 1d Array](https://codingman.cc/leetcode-running-sum-of-1d-array/): 解析「前綴和」(Prefix Sum)演算法的基礎應用。透過將數列中的每一項更新為前面所有項的累積和,能為後續的區間查詢提供極大的效率。本文透過這題簡單的實作,幫助讀者建立處理連續數列加總問題的核心思維。 - [LeetCode 筆記 - 29. Divide Two Integers](https://codingman.cc/leetcode-divide-two-integers/): 實作不使用乘法與除法運算子的兩數相除。解題關鍵在於處理位元移位或連續減法,並特別關注整數溢位(Overflow)的邊界條件。這是一篇探討計算機底層運算邏輯與數值安全性處理的技術隨筆。 - [LeetCode 筆記 - 318. Maximum Product of Word Lengths](https://codingman.cc/leetcode-maximum-product-of-word-lengths/): 尋找不含相同字母的兩字串最大長度乘積。本文利用位元運算(Bitwise)進行加速,將字串的字母分佈壓縮成一個整數,透過 AND 運算即可秒速判斷是否有重複字母。這展示了位元技巧在優化字串比對任務上的強大威力。 - [LeetCode 筆記 - 268. Missing Number](https://codingman.cc/leetcode-missing-number/): 在一個連續數列中找出缺少的那個數字。本文提供排序後線性掃描的直覺解法。雖然簡單,但它引導開發者思考如何透過數據結構的有序性來快速定位異常點,是處理數據完整性檢查的基礎訓練。 - [LeetCode 筆記 - 1342. Number of Steps to Reduce a Number to Zero](https://codingman.cc/leetcode-number-of-steps-to-reduce-a-number-to-zero/): 一題簡單直覺的模擬練習,要求計算將數字減少到零的步驟數(偶數除以二,奇數減一)。雖然邏輯單純,但它是訓練基礎程式邏輯與迴圈控制的好範例。本文提供直接且高效的實作方式,適合演算法入門練習。 - [LeetCode 筆記 - 191. Number of 1 Bits](https://codingman.cc/leetcode-number-of-1-bits/): 計算整數二進位表示中 1 的個數(漢明重量)。本文除了介紹基礎的位元轉換方法,更分享了目前已知最快速的演算法:利用 x & (x-1) 技巧快速移除最低位的 1,極大地優化了位元運算效率,是位元處理領域的必學技巧。 - [LeetCode 筆記 - 32. Longest Valid Parentheses](https://codingman.cc/leetcode-longest-valid-parentheses/): 挑戰尋找最長的合法括號字串長度。本題在基礎堆疊(Stack)應用的基礎上,進一步分享如何動態累積配對成功的長度。這是一個進階的資料結構應用練習,能幫助開發者掌握處理複雜嵌套結構時的長度追蹤邏輯。 - [LeetCode 筆記 - 20. Valid Parentheses](https://codingman.cc/leetcode-valid-parentheses/): 解析如何判定括號字串的合法性。本文利用堆疊(Stack)先進後出的特性,當遇到左括號時壓入,遇到右括號時彈出並檢查是否成對。這是一個理解堆疊資料結構在處理巢狀結構(如編譯器解析)中扮演關鍵角色的經典範例。 - [LeetCode 筆記 - 566. Reshape the Matrix](https://codingman.cc/leetcode-reshape-the-matrix/): 實作 MATLAB 著名的 reshape 函式。本文教學如何將矩陣資料依照指定的維度重新排列,並強調在執行操作前驗證新長寬是否符合原始資料規模的重要性。這是一個理解 2D 矩陣索引映射與基本資料轉換邏輯的實用練習。 - [LeetCode 筆記 - 617. Merge Two Binary Trees](https://codingman.cc/leetcode-merge-two-binary-trees/): 解析如何合併兩棵二元樹。本文採用深度優先搜尋(DFS)同步走訪兩棵樹,將重疊節點的數值相加,並靈活處理單側存在的子樹結構。這是一篇掌握樹狀結構走訪與動態合併邏輯的基礎開發心得。 - [Python 如何優雅地限制執行緒數量](https://codingman.cc/python-how-to-limit-the-number-of-threads/): 在進行平行運算時,無限制開啟執行緒常會導致系統負載過重甚至崩潰。本文介紹如何運用「生產者與消費者」模型,優雅地限制執行緒(Thread)數量。透過控制併發規模,能有效提升程式的穩定性與錯誤處理能力,達成高效且安全的平行化作業。 - [Python 如何順利地取得上個月的月份](https://codingman.cc/python-how-to-get-last-month/): 想在 Python 中精確取得上個月的日期卻擔心月份天數不同(如二月)嗎?本文推薦使用 today.replace 方法,先將日期固定在當月第一天再向前回推。這種寫法能完美避開日期運算的常見 Bug,是開發自動化報表或統計功能時的必備技巧。 - [Python 如何處理存檔編碼錯誤](https://codingman.cc/python-how-to-handle-UnicodeEncodeError-exceptions/): 在 Python 進行檔案儲存時,若遇到不確定的資料編碼常會引發 UnicodeEncodeError。本文教學如何善用 Python 3 的 Unicode 字串優勢,並施展「編碼小魔法」來正確處理如 Emoji 等特殊字元的儲存問題,確保資料在轉檔過程中完整不遺失。 - [LeetCode 筆記 - 695. Max Area of Island](https://codingman.cc/leetcode-max-area-of-island/): 給你一張包含島嶼的海圖,求最大島嶼面積。解題思路聚焦於深度優先搜尋(DFS),當發現陸地時便展開遞迴探索所有相連格位並計數。本文展示如何透過簡單的圖形遍歷技巧,精確衡量複雜形狀島嶼的規模。 - [LeetCode 筆記 - 733. Flood Fill](https://codingman.cc/leetcode-flood-fill/): 解析圖像處理中常見的「油漆桶」填色演算法。針對給定的座標與新顏色,本文利用深度優先搜尋(DFS)遍歷所有相連且顏色相同的區域進行取代。這是一篇理解圖形連通分量與遞迴填色邏輯的實用技術分享。 - [LeetCode 筆記 - 121. Best Time to Buy and Sell Stock](https://codingman.cc/leetcode-best-time-to-buy-and-sell-stock/): LeetCode 基礎經典題,探討股票買賣的最大獲利。解題邏輯聚焦於尋找歷史最低點,並在遍歷過程中不斷計算目前價格與低點的差額,進而找出最高獲利。本文分享如何用簡單的一次遍歷 O(N) 達成最佳化解法。 - [LeetCode 筆記 - 350. Intersection of Two Arrays II](https://codingman.cc/leetcode-intersection-of-two-arrays-ii/): 延續 349 題的交集概念,本題要求保留重複出現的元素。解題核心同樣採用排序後配合雙指針(Two Pointers)的策略,但在匹配成功時不進行去重處理,而是直接記錄結果,協助讀者理解相同演算法在不同限制下的細微調整。 - [LeetCode 筆記 - 349. Intersection of Two Arrays](https://codingman.cc/leetcode-intersection-of-two-arrays/): 找出兩個數列中重複的元素,且結果不包含重複值。本文介紹先將數列轉換為集合(set)以去除冗餘,再透過排序後利用雙指針(Two Pointers)進行同步掃描的策略。這種方法能確保在 O(N) 時間內精確找出交集元素。 - [LeetCode 筆記 - 567. Permutation in String](https://codingman.cc/leetcode-permutation-in-string/): 判定字串 s1 的排列組合是否出現在 s2 中。本文捨棄窮舉所有排列,轉而利用滑動視窗(Sliding Window)配合計數器(Counter)追蹤字元出現頻率。這種策略能大幅降低計算成本,在線性時間內完成子字串的頻率比對。 - [LeetCode 筆記 - 647. Palindromic Substrings](https://codingman.cc/leetcode-palindromic-substrings/): 要求計算字串中所有迴文子字串的數量。本文再次運用強大的 Manacher 演算法,利用其對稱特性將時間複雜度優化至 O(N)。文中詳述如何透過演算法產出的迴文半徑推導出最終數量,是一篇探討進階迴文處理技巧的筆記。 - [LeetCode 筆記 - 88. Merge Sorted Array](https://codingman.cc/leetcode-merge-sorted-array/): 挑戰合併兩個已排序的數列。本文解析歸併排序(Merge Sort)的核心邏輯,透過比較兩數列首位元素依序放入結果中。文中特別分享 Python 內直接修改記憶體位置的語法技巧,達成原地合併且不浪費額外空間。 - [LeetCode 筆記 - 322. Coin Change](https://codingman.cc/leetcode-coin-change/): 解析經典的零錢兌換問題。本文探討如何運用動態規劃(Dynamic Programming)建立遞迴關係式,透過查表法記錄組合出每個目標金額所需的最少錢幣數量。這是一個理解 DP 如何將大問題分解為子問題並重複利用結果的優質範例。 - [LeetCode 筆記 - 146. LRU Cache](https://codingman.cc/leetcode-lru-cache/): 解析如何實作具備最近最少使用(LRU)機制的快取系統。本文探討 Python 中 OrderedDict 的應用,並分享一個提升字典鍵值檢查效率的「奇技淫巧」,顯著優化執行速度。這是一篇兼具資料結構原理與 Python 效能優化的心得。 - [LeetCode 筆記 - 18. 4Sum](https://codingman.cc/leetcode-4sum/): 挑戰四數之和問題。為了避免陷入 O(N^4) 的暴力解陷阱,本文介紹將問題拆解為兩兩組合並利用字典(dict)儲存結果的 O(N^2) 優化策略。配合排序後的跳過重複計算技巧,能在大規模數據下保持優異的執行效能。 - [LeetCode 筆記 - 63. Unique Paths II](https://codingman.cc/leetcode-unique-paths-ii/): 在有障礙物的地圖中尋找機器人的唯一路徑數量。這是一個標準的動態規劃(DP)問題,本文解析如何透過加總格位左方與上方的路徑數來動態遞推結果。文中特別強調障礙物處理與起點初始化的關鍵細節。 - [LeetCode 筆記 - 876. Middle of the Linked List](https://codingman.cc/leetcode-middle-of-the-linked-list/): 尋找鏈結串列的中間節點。本文運用經典的快慢指針(Two Pointers)大法,透過快指針每次移動兩步、慢指針移動一步的速差,讓慢指針在遍歷結束時精確停在中間位置,是一篇展示指針技巧如何優化遍歷效能的範例。 - [LeetCode 筆記 - 19. Remove Nth Node From End of List](https://codingman.cc/leetcode-remove-nth-node-from-end-of-list/): 解析如何在單向鏈結串列中移除倒數第 n 個節點。本文教學使用雙指針技巧,透過前導指針領先 n 步的設計,讓追隨指針精確停在目標節點前。同時分享加入虛擬節點以處理邊界情況的實務開發經驗。 - [LeetCode 筆記 - 217. Contains Duplicate](https://codingman.cc/leetcode-contains-duplicate/): LeetCode 基礎實作題,判定數列中是否包含重複元素。本文探討利用 Python 內建的 map 或 set 資料結構,將檢查存在與否的時間複雜度優化至平均 O(1),幫助讀者理解基礎集合運算在提升程式效率上的重要性。 - [LeetCode 筆記 - 53. Maximum Subarray](https://codingman.cc/leetcode-maximum-subarray/): 探討最大子數列問題。本文解析優美且強大的 Kadane 演算法,其核心思想在於遍歷過程中動態決定是否加入前一項的累積和。透過簡單的一次遍歷,就能在 O(N) 時間內精確找出總和最大的連續區段,是動態規劃的極簡體現。 - [LeetCode 筆記 - 16. 3Sum Closest](https://codingman.cc/leetcode-3sum-closest/): 延續 3Sum 的概念,本題要求找出三數之和最接近目標值的組合。解法核心在於運用雙指針(Two Pointers)大法,並在夾擠過程中動態更新與目標值的最小差值,是掌握數列搜尋與指針操作技巧的進階練習。 - [LeetCode 筆記 - 557. Reverse Words in a String III](https://codingman.cc/leetcode-reverse-words-in-a-string-iii/): 要求反轉句子中每個單字的字符。雖然本題適合運用雙指針,但作者分享了更具 Python 風格的簡潔實作方式。本文記錄了在處理字串分割、反轉與合併時的靈活思維,展示如何用直覺的寫法解決日常開發中的字串處理需求。 - [LeetCode 筆記 - 344. Reverse String](https://codingman.cc/leetcode-reverse-string/): LeetCode 基礎反轉字串題。雖然 Python 具備多種簡潔的反轉寫法,本文特別採用雙指針(Two Pointers)大法進行實作,透過頭尾對調的方式達成原地修改。這是一篇適合初學者掌握指針移動與基本字串操作的技術筆記。 - [LeetCode 筆記 - 167. Two Sum II - Input Array Is Sorted](https://codingman.cc/leetcode-two-sum-ii-input-array-is-sorted/): 針對已排序數列的 Two Sum 問題,本文解析雙指針(Two Pointers)的標準應用。透過從數列兩端向中間逼近,能以最有效率的方式找出目標值索引,並避免重複計算,是理解排序數列優化搜尋的基礎入門題。 - [LeetCode 筆記 - 283. Move Zeroes](https://codingman.cc/leetcode-move-zeroes/): 針對 LeetCode 第 283 題,要求將數列中的所有零移動至尾端並保持非零元素的相對順序。本文解析如何運用雙指針(Two Pointers)大法,透過一個插入指標(insert_pos)動態調整非零數值的位置,達成原地修改的高效實作。 - [LeetCode 筆記 - 329. Longest Increasing Path in a Matrix](https://codingman.cc/leetcode-longest-increasing-path-in-a-matrix/): 挑戰在矩陣中尋找最長遞增路徑。本文結合深度優先搜尋(DFS)與記憶化搜索(Memoization)技巧,透過一張表格紀錄已計算過的點位結果,避免重複遞迴,將複雜度大幅降低,讓程式能在龐大的矩陣空間中快速收斂出最長路徑。 - [LeetCode 筆記 - 1192. Critical Connections in a Network](https://codingman.cc/leetcode-critical-connections-in-a-network/): 解析 LeetCode 經典難題「網路中的關鍵連接」。本文引導讀者複習 Tarjan 演算法,透過尋找圖形結構中的環,來識別哪些連接若斷開會導致網路不連通(即橋接點)。文中推薦相關優質影片,協助理解演算法核心邏輯。 - [LeetCode 筆記 - 15. 3Sum](https://codingman.cc/leetcode-3sum/): 探討經典的 3Sum 問題。本文解析如何將三數之和降維思考為多次的 Two Sum,將複雜度從 O(N^3) 優化至 O(N^2)。文中介紹兩種主流演算法策略,協助讀者在面對海量數列時,依然能高效找出總和為零的所有組合。 - [LeetCode 筆記 - 11. Container With Most Water](https://codingman.cc/leetcode-container-with-most-water/): 解析 LeetCode 經典題目「盛最多水的容器」。本文教學如何運用夾擠定理與雙指針策略,透過不斷更換較低高度的指針來逼近最大面積。文中也分享了紀錄最高高度以加速計算的實作細節,優化整體演算法效能。 - [LeetCode 筆記 - 189. Rotate Array](https://codingman.cc/leetcode-rotate-array/): 探討如何將數列向右旋轉 k 次。本文分享 O(1) 空間複雜度的優化策略,並介紹 Python 中 nums[:] 的記憶體修改技巧,讓開發者能在不使用額外陣列的情況下,直接在原地完成數列移動,達成高效且省空間的實作。 - [LeetCode 筆記 - 977. Squares of a Sorted Array](https://codingman.cc/leetcode-squares-of-a-sorted-array/): 要求將包含負數的已排序數列進行平方後再次排序。本文探討如何利用雙指針從兩端向中間掃描的技巧,巧妙處理負數平方後的數值變化,達成在 O(N) 線性時間內完成平方與排序的優化解法。 - [LeetCode 筆記 - 1379. Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://codingman.cc/leetcode-find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/): 本文探討如何在複製的二元樹中找出對應目標節點的參照。這是一個典型的樹遍歷問題,透過同步探索原始樹與複製樹,能快速定位目標。本文提供基礎的 Tree Traversal 實作思路,幫助讀者掌握遞迴搜尋技巧。 - [LeetCode 筆記 - 419. Battleships in a Board](https://codingman.cc/leetcode-battleships-in-a-board/): 解析如何在不使用額外空間(O(1) space)的情況下計算矩陣中的戰艦數量。關鍵在於只統計戰艦的「左上角」起點。透過檢查每個戰艦格位上方與左方是否為空,能精確識別出每艘船的首位,達成高效且簡潔的計數邏輯。 - [LeetCode 筆記 - 35. Search Insert Position](https://codingman.cc/leetcode-search-insert-position/): 針對已排序數列,尋找目標值的索引或其應插入的位置。本文展示二元搜尋(Binary Search)的變體應用,透過不斷折半範圍,能以對數級時間複雜度快速鎖定定位。這是一篇掌握排序數列搜尋與邊界處理技巧的基礎筆記。 - [LeetCode 筆記 - 278-First-Bad-Version](https://codingman.cc/leetcode-first-bad-version/): 面對尋找第一個損壞版本的問題,本文展示二元搜尋(Binary Search)的經典應用。透過不斷折半縮小搜尋範圍,能以對數級時間複雜度快速鎖定故障點,是開發者在處理有序範圍搜尋問題時的必備演算法知識。 - [LeetCode 筆記 - 704. Binary Search](https://codingman.cc/leetcode-binary-search/): LeetCode 必修基礎題,實作標準的二元搜尋。本文回歸演算法核心,展示如何透過 left、right 指針折半縮小搜尋區間,並精確找出目標值的索引。這是一篇適合初學者鞏固 O(log N) 搜尋效率概念的範例實作。 - [LeetCode 筆記 - 103. Binary Tree Zigzag Level Order Traversal](https://codingman.cc/leetcode-binary-tree-zigzag-level-order-traversal/): 這是一篇關於 LeetCode 第 103 題的解題筆記。題目要求對二元樹進行之字形(Zigzag)層序遍歷。本文解析如何運用廣度優先搜尋(BFS)策略,並透過每層順序翻轉的技巧,高效搜集並排列每一層的節點數值。 - [LeetCode 筆記 - 1091. Shortest Path in Binary Matrix](https://codingman.cc/leetcode-shortest-path-in-binary-matrix/): 針對 LeetCode 第 1091 題,探討在二元矩陣中尋找最短路徑的方法。本文指出該問題非常適合使用廣度優先搜尋(BFS)演算法解決,一旦觸及終點即可停止搜尋,確保在複雜地圖中以最快速度找出最優路徑。 - [LeetCode 筆記 - 1302. Deepest Leaves Sum](https://codingman.cc/leetcode-deepest-leaves-sum/): 針對 LeetCode 第 1302 題,計算二元樹最深層葉子節點的總和。解題關鍵在於利用廣度優先搜尋(BFS)依序探索每一層節點,最終鎖定最底層的所有成員並加總其數值,是一篇理解層序遍歷應用的實用筆記。 - [Python 如何正確初始化二維陣列](https://codingman.cc/how-to-properly-initialize-2d-list/): 在 Python 中使用 [[]] * 3 初始化二維陣列常會導致所有子陣列同步連動的錯誤。本文解析此現象背後的記憶體參照機制,並分享正確的初始化寫法,避免資料存取異常。這是一篇幫助開發者繞過 Python 列表初始化常見陷阱的實用筆記。 - [LeetCode 筆記 - 844. Backspace String Compare](https://codingman.cc/leetcode-backspace-string-compare/): 判定兩個包含退位鍵符號的字串在模擬刪除操作後是否相等。本文解析如何透過遍歷字串並處理 # 符號來還原真實字串內容。內容直白簡練,適合掌握基礎字串模擬與處理邏輯的練習。 - [LeetCode 筆記 - 117. Populating Next Right Pointers in Each Node II](https://codingman.cc/leetcode-populating-next-right-pointers-in-each-node-ii/): 相較於 116 題,本題處理一般二元樹的向右指針設置。關鍵在於如何正確找出同一層的所有節點。本文分享利用廣度優先搜尋(BFS)來掌握層次結構,確保在不規則的樹狀結構中,每個節點都能正確指向其右側鄰居。 - [LeetCode 筆記 - 116. Populating Next Right Pointers in Each Node](https://codingman.cc/leetcode-populating-next-right-pointers-in-each-node/): 探討 LeetCode 第 116 題,在完美二元樹中為每個節點建立向右的 next 指針。本文利用完美二元樹的結構特性,透過遞迴邏輯將左子節點指向右子節點,並跨節點連接,提供簡潔高效的遍歷與指針設置解法。 - [LeetCode 筆記 - 77. Combinations](https://codingman.cc/leetcode-combinations/): 針對組合生成問題,本文比較了深度優先搜尋(DFS)與分治法(Divide and Conquer)的效能差異。最終採用分治法策略,透過逐步組合子規模的結果,達成比傳統遞迴更高效的組合生成,優化了大範圍數據下的執行效率。 - [LeetCode 筆記 - 743. Network Delay Time](https://codingman.cc/leetcode-network-delay-time/): 探討訊號在網路拓撲中抵達所有節點的最短時間。本文引導讀者實作經典的 Dijkstra 演算法,透過優先權隊列(Priority Queue)動態更新起點到各節點的最短路徑。這是一篇掌握權重圖最短路徑計算的標準教學。 - [LeetCode 筆記 - 47. Permutations II](https://codingman.cc/leetcode-permutations-ii/): 針對包含重複元素的數列生成全排列。本文分享在遞迴過程中加入判別邏輯的小技巧,透過排序與分支剪枝,有效避免產出重複的組合。這是一篇關於如何優化經典遞迴演算法以應對特殊約束條件的實務心得。 - [LeetCode 筆記 - 46. Permutations](https://codingman.cc/leetcode-permutations/): 全排列問題的經典解析。本文介紹深度優先搜尋(DFS)與交換元素(SWAP)兩種主流解法,並針對兩者的時間複雜度進行深入對比。這是一篇幫助讀者掌握遞迴思維、理解排列組合生成邏輯以及演算法複雜度評估的技術指南。 - [LeetCode 筆記 - Count Sorted Vowel Strings](https://codingman.cc/leetcode-count-sorted-vowel-strings/): 計算長度為 n 且按字典序排列的母音組合數量。作者跳出傳統遞迴,運用高中數學的「隔板法」將問題轉化為組合公式。透過 O(1) 的數學運算直接求出解答,展示了數學建模在解決計算問題時的極致效率。 - [LeetCode 筆記 - 7. Reverse Integer](https://codingman.cc/leetcode-reverse-integer/): LeetCode 第 7 題解析,要求將一個 32 位元的有號整數進行反轉。本文分享如何透過基礎的數學運算處理位元反轉,並特別提醒開發者注意反轉後可能產生的數值溢位(Overflow)問題,確保結果符合 32 位元整數的範圍限制。 - [LeetCode 筆記 - Implement strStr()](https://codingman.cc/leetcode-implement-strstr/): 實作 C 語言中的 strstr() 函數,尋找子字串出現的起始索引。本文採取直覺且高效的模擬遍歷方式,在 O(N) 複雜度內完成字串匹配。這是一篇掌握基本字串搜尋邏輯與邊界處理的開發隨筆。 - [LeetCode 筆記 - Longest Palindromic Substring](https://codingman.cc/leetcode-longest-palindromic-substring/): 挑戰尋找最長迴文子字串。本文深度解析 Manacher 演算法,透過對稱性質避免重複比較,將搜尋時間從 O(N^2) 優化至線性 O(N)。文中詳述演算法的推導過程與實作細節,是理解進階字串演算法的首選筆記。 - [LeetCode 筆記 - Median of Two Sorted Arrays](https://codingman.cc/leetcode-median-of-two-sorted-arrays/): 在兩個已排序數列中尋找合併後的中位數。本文分享如何透過部分合併的技巧,僅遍歷至中位數所需長度即可得出解答。這種優化策略能有效控制計算量,在維持 O(N) 線性複雜度的同時,提升求取中位數的速度。 - [LeetCode 筆記 - Longest Substring Without Repeating Characters](https://codingman.cc/leetcode-longest-substring-without-repeating-characters/): 尋找最長不重複子字串的長度。本文解析滑動視窗(Sliding Window)配合哈希表(Map)的優化策略。透過記錄字元與其最後出現索引,能動態調整視窗起點,在單次遍歷中精確計算出最大不重複區段,大幅提升效率。 - [LeetCode 筆記 - Add Two Numbers](https://codingman.cc/leetcode-add-two-numbers/): 解析如何相加兩個以反序鏈結串列表示的龐大整數。本文引導讀者依序處理進位邏輯,並同步建立新的鏈結串列來存儲結果。這是一篇掌握基本鏈結串列操作與大數運算模擬邏輯的經典實作筆記。 - [LeetCode 筆記 - 1. Two Sum](https://codingman.cc/leetcode-two-sum/): 針對 LeetCode 第 1 題,探討如何在數列中快速找出相加等於目標值的兩個數字。本文解析如何運用哈希表(Hash Map)記錄已遍歷過的數字及其索引,將搜尋複雜度從暴力解的 O(N^2) 優化至線性 O(N),是理解空間換取時間的經典案例。 - [在 iOS 新增「社交距離 app」捷徑](https://codingman.cc/Social-Distance-App-shortcut-on-iOS/): 為了在進入公共場所時能快速出示「社交距離 app」,本文分享一個簡單的 iOS 捷徑配置。透過連結下載並安裝,使用者可一鍵啟動 app,跳過繁瑣的手動尋找過程,並提供處理「不信任來源」問題的設定建議。 - [調整 PyCharm 檔案大小限制](https://codingman.cc/adjust-pycharm-file-size-limit/): 在使用 PyCharm 瀏覽大型 JSON 檔案時,常因超過預設大小限制而導致語法上色失效。本文教學如何透過編輯自定義屬性設定,手動解開 idea.max.intellisense.filesize 的束縛,讓開發者能流暢地處理與閱讀大體積資料檔。 - [使用 crontab 排程自動化你的工作](https://codingman.cc/automate-your-work-with-crontab/): 介紹 Linux 與 Mac 系統內建的排程工具 crontab。本文教學如何透過編輯指令設定自動化任務,讓電腦在指定時間固定執行特定工作。內容包含基礎編輯方法、管理者權限切換以及確保任務穩定執行的實務技巧。 - [HackMD - 深色主題](https://codingman.cc/hackmd-dark-theme/): HackMD 愛用者必看的護眼攻略。本文介紹如何透過導入自定義指令碼,為 HackMD 介面套用深色主題(Dark Theme)。除了提供推薦的樣式來源,也提醒使用者善用引用與備份功能,確保在舒適的視覺環境下進行文件撰寫。 - [跑馬燈圖片工具](https://codingman.cc/text-to-gif/): 為了快速產生類似 Slack 上常見的單字跑馬燈 GIF,作者開發了一款圖片產生工具。本文介紹如何透過簡單的參數設定(如每字張數、延遲時間等),批次自動化產出客製化的跑馬燈圖片,大幅節省手作時間並提升趣味性。 - [Python 如何從 list 移除空元素](https://codingman.cc/how-to-remove-empty-element-from-list-in-python/): 在 Python 開發中,清理列表(list)內的空白或無效元素是常見操作。本文提供簡潔的程式碼範例,展示如何利用內建的 filter 函數快速移除空值並轉回列表,是開發者在處理資料清洗時非常實用的基礎筆記。 - [使用 Python 解開數獨](https://codingman.cc/solve-sudoku-in-python/): 分享使用 Python 開發數獨解題程式的經驗。本文探討如何運用候選數與遞迴搜尋等演算法優化效能,並比較不同策略對計算時間的影響,最終實現能在 0.2 秒內解開世界最難題目的高效能解法,並提供完整程式碼參考。 - [non-breaking space 問題](https://codingman.cc/4273/): 本文解析在資料比對時遇到的「隱形空白」問題。透過將字串轉為 byte,揭露 utf-8 編碼下的 non-breaking space(\xa0)如何導致肉眼可見一模一樣但程式判別不符的情況,並提供多種有效的移除與替換方法。 - [如何使用 GitHub Actions 同步 PDF 至 Github Pages](https://codingman.cc/4d01/): 介紹如何結合 Google 文件的 PDF 下載功能與 GitHub Actions,實現自動同步文件至部落格空間。這對於需要經常更新履歷或文件的使用者非常方便,只要在 Google 文件端修改,即可透過自動化流程更新網路上的 PDF 版本。 - [軟體工程師的我如何準備轉職](https://codingman.cc/5aa0/): 針對想轉職的軟體工程師,作者分享從應用開發到 DevOps 領域的轉職準備經驗。內容著重於如何透過履歷在一張 A4 的篇幅中建構有說服力的故事,並提供面試前的心理建設與技術準備策略,協助工程師勇敢跨出舒適圈。 - [幫 Ubuntu 加上新硬碟](https://codingman.cc/1453/): 在完成 Ubuntu 系統安裝與硬碟分割後,掛載新硬碟是常見的需求。本文詳細介紹如何透過 lsblk 指令確認裝置資訊,並逐步引導使用者完成檔案系統建立與掛載設定,讓新加入的硬碟空間能被系統正確識別與使用。 - [Ubuntu 藉由 LVM 解決預設硬碟分割錯誤](https://codingman.cc/a61d/): 當 Ubuntu 預設安裝未充分利用硬碟空間時,可透過 LVM(邏輯捲軸管理)進行調整。本文引導使用者使用 df 指令檢查磁碟狀態,並利用 LVM 的彈性建立邏輯層,解決分割區大小不符合需求的問題,優化系統儲存管理。 - [追尋多年的三角棋](https://codingman.cc/d9b2/): 作者分享對童年遊戲「三角棋」長達六年的演算法追尋過程。內容記錄了從觀察基礎規則到利用程式尋求最終解答的心路歷程,探討這項簡單遊戲背後的數學邏輯與必勝策略,為多年來的疑問劃下完美的技術句點。 - [讓 git 忽略檔案權限變更](https://codingman.cc/d55c/): 在 Mac 或 Linux 環境開發時,變更檔案權限常導致 Git 顯示大量的檔案更動。本文介紹如何透過 Git 指令設定 core.fileMode,讓 Git 忽略權限變更,僅追蹤檔案內容的修改,協助開發者保持乾淨的工作樹。 - [Linux 超簡單壓縮與解壓縮指令筆記](https://codingman.cc/aa93/): 本文整理 Linux 系統下常見的壓縮格式與指令筆記。涵蓋 tar、gz、zip、7z 等多種格式的特性比較及用法,並針對中文檔名亂碼與檔案權限問題提供解決方案,是開發者在 Linux 環境處理檔案壓縮時的實用參考指南。 - [駭客任務寫得很好的心得](https://codingman.cc/b38f/): 本文轉載並解析《駭客任務》三部曲的深度影評。內容從軟體工程的角度剖析「救世主」作為平衡母體方程式的程式本質,探討選擇、信念與祭師的計畫,深入解析這部科幻經典背後的運作機制與哲學意涵。 - [駭客任務:復活 觀影心得](https://codingman.cc/72b1/): 本文分享對電影《駭客任務:復活》的觀影心得。作者認為影片過度依賴前三集的元素進行惡搞與嘲諷,雖然開頭具備趣味性,但後續情節顯得空洞且缺乏深度,未能滿足對於思考饗宴的期待,是一篇直白且不留情面的評價。 - [PTT 八卦板新年首 PO 機器人](https://codingman.cc/77fa/): 分享成功搶下 PTT 八卦板新年首 PO 的機器人實作經驗。本文詳述如何透過 PyPtt 進行精準對時,並解析發文演算法的流程。作者強調低延遲網路環境與自動化腳本的配合是搶攻首 PO 的關鍵,並公開相關程式碼。 - [Bash 雙引號與單引號的區別](https://codingman.cc/4b74/): 在 Linux Shell 中,單引號與雙引號對變數處理有顯著差異。本文透過簡單的腳本範例,展示雙引號會解析變數內容,而單引號則會保留字串原貌。這項基礎細節對於撰寫正確的 Dockerfile 或自動化指令碼至關重要。 - [Hexo 插件推薦清單](https://codingman.cc/1b09/): 整理 Hexo 部落格常用的優質插件清單,包含自動產生縮短網址、SEO 優化的 nofollow 濾鏡、RSS 產生器、站內搜尋功能、網站地圖(Sitemap)以及 Live2D 裝飾效果。這些工具能提升部落格的功能性與使用者體驗。 - [如何提升網路品質](https://codingman.cc/7324/): 因應遠端工作趨勢,穩定的家網環境至關重要。本文從硬體選購、網路線規格、頻道優化到 QoS 設定,完整分享提升網路品質的實務經驗。建議避開中華電信小烏龜內建 Wifi,改用效能較佳的路由器以確保視訊會議不中斷。 - [避免 Github Pages 被 Actions 覆寫 domain 設定](https://codingman.cc/5431/): 在 GitHub Pages 設定自定義網域後,常遇到發佈新文章時網域被自動重設的問題。本文說明如何透過在專案根目錄中加入 CNAME 檔案,確保 GitHub Actions 執行部署時能正確保留網域設定,解決 Hexo 使用者的常見困擾。 - [歷代 Python 語法重點隨筆](https://codingman.cc/e6c7/): 持續更新的 Python 歷代語法重點隨筆。本文整理 Python 3.8 至 3.11 各版本中值得關注的新特性,包括 Pattern Matching、Type Hinting 的進化、象牙符號(Walrus operator)以及效能改進,適合開發者快速掌握版本差異。 - [Minecraft 磐石伺服器架設技術剖析 使用 GCP](https://codingman.cc/e3e/): 以軟體工程師視角紀錄在 GCP 上架設 Minecraft 伺服器的完整過程。包含使用 Shell 腳本自動部署、優化 Java 啟動參數、使用 Python 開發自動重啟管理程式,以及利用 Linux Service 確保系統穩定運作的技術細節。 - [hexo 心得](https://codingman.cc/f4a9/): 分享架設 Hexo 部落格的實務心得。作者針對更換主題時常遇到的靜態檔案產生錯誤,提出選擇近期仍有維護的主題作為解決方案。此外,也分享了 GitHub Actions 的完整部署設定範例,協助新手快速上手自動化部署。 - [如果你第一次來](https://codingman.cc/for-the-new-guys/)