系列精選
查看全部工程師日誌
寫 Code 之外的生活觀察 — 理財、旅遊、健康、居住、時事評論
Elasticsearch 完整指南
從零開始學 Elasticsearch — 環境建置到生產環境優化
Claude Code 完整教學
從入門到進階 — Hooks、Sub-agents、MCP、Skills 開發全攻略
AZ-305 Azure 架構師認證
Azure 解決方案架構設計師五日課程筆記
Java / Spring 學習筆記
Java 核心語法、Stream API、併發控制、Spring Boot 實戰
AI Agent 架構全解析
從 harness 骨架拆解現代 AI Agent — 以 Claude Code 為例的 7 層架...
大型 repo 的 Claude Code 設定:讓它看得少一點,它才會準
打開一個 monorepo 的根目錄 CLAUDE.md,往下滾了十秒還沒到底。 裡面有後端的命名慣例、前端的元件規則、資料庫遷移的注意事項、五個團隊各自的 lint 偏好。寫的時候很有成就感,看起來什麼都交代到了。問題是你今天只想改 packages/api 裡的一個路由。那八百行裡有七百行跟這件事沒關係,而它們每個 session 開場就進了 context。 官方的說法比我客氣一點,但意思一樣。預設值是為小專案調的。repo 一大,那些預設會拿跟任務無關的指令和檔案讀取把 context window 填滿,燒掉 token,也讓 Claude 表現變差。 所以這篇要講的每一件事,都是同一個動作的新版本:從「盡量把知識塞給它」改成「只給它這次要用到的那一層」。設定與行為都對照官方 large-codebases 指南寫成,我沒有在百萬行的 repo 上實跑過整套,版本相關的行為我會標出來。 舊做法:靠一份檔案交代所有事一份根目錄 CLAUDE.md 只有兩種結局。要嘛它長成百科全書,涵蓋每個子系統的慣例,代價是每次都付那份 context;要嘛它為了不要太長而寫得很通用,結...
AI 與科技新聞摘要 20260730
三十天。GitHub 從公告到把一個免費的模型平台整個關掉,只花了這麼久,而且是 playground、model catalog、inference API、BYOK 端點一起收,官方寫得很清楚:無例外。 這一批新聞幾乎每一件都有兩個時鐘在跑。一個是資本和工程的時鐘,用季度、用產能爬坡曲線、用 changelog 計時。另一個是法律、居民、開發者的時鐘,用會期、用訴訟審級、用你哪天有空改 code 計時。兩邊差幾格,就決定了中間那段空窗期由誰扛著風險過日子。 一、熊本 7.1 強震震停日本矽島,台積電只占 3% 產能,但上游全擠在同一條斷層帶日本時間 7 月 28 日下午 4 點 27 分,熊本縣發生規模 7.1 地震,震源深度約 10 公里。台積電 JASM 所在的菊陽町測得最大震度 5 強,設備機台觸發保護停機。 從數字看,這件事小得幾乎不用擔心。JASM 一廠月產能約 2 萬片 12 吋晶圓,跑的是 22/28 奈米與 12/16 奈米。占台積電總產能不到 3%,研調評估對第三季營收的影響大約 0.03%。二廠工地 28 日因餘震風險停工,29 日確認...
PriorityBlockingQueue 永遠不會擋你:四個實測出來的地雷
一個 BlockingQueue 最值錢的功能,是它會拒絕你。 滿了就把生產者擋在門外,讓上游慢下來配合下游。這件事聽起來像限制,其實是整條流水線唯一的自動調速器。 兩天前那篇鎖的選擇結尾勸過一句:與其自己拿 ReentrantLock 加 Condition 湊生產者消費者,先看看 ArrayBlockingQueue 是不是就夠用。 那句話留了個洞。如果我要的不只是緩衝,還想要「重要的先做」呢?名字最接近的答案叫 PriorityBlockingQueue,跟 ArrayBlockingQueue 差三個字。行為差的東西比三個字多很多。 下面的輸出都是我自己在 OpenJDK 25.0.2 上跑出來的,不是抄文件。 它的 Blocking 只在一個方向上成立BlockingQueue 這個介面有兩個阻塞點:佇列空的時候 take() 會等,佇列滿的時候 put() 會等。前者 PriorityBlockingQueue 老實做到了,後者它直接放棄,因為它沒有「滿」這個狀態。 1234567var q = new PriorityBlockingQueue<Integer...
Claude Code /rewind 完整教學:Esc 按兩下,退回它改壞之前
三年前你叫 AI 幫忙改一個模組,做法大概是這樣:先 git stash,或者複製一份整個資料夾叫 src_backup,然後才敢按 Enter。 改完發現它把三個檔案改歪了,你的救援手段只有兩個。一個是 git checkout .,代價是這一輪所有東西一起消失,包含它改對的那五個檔案。另一個是坐下來一個一個檔案讀 diff,手動挑哪些留、哪些丟。 那個年代大家用的詞是「備份」。備份的問題是它只有一個時間點,就是你動手之前。中間那七、八輪對話,每一輪都可能是你真正想回去的地方,但那些狀態不存在,沒人存過。 為什麼會長出 checkpoint 這個東西轉折點是 agent 開始一次改十幾個檔案。 當 AI 只是幫你補一個函式,diff 短,人腦讀得完,備份夠用。當它一輪跑掉五分鐘、動了十四個檔案、其中十一個是對的,人工挑揀的成本就超過重做一次的成本。這時候你會開始下意識地把任務切小,不是因為切小比較好,是因為你不敢一次交太多出去。 工具的設計者顯然看到了同一件事。Claude Code 現在的做法是:每次你送出一個 prompt,它就在那個瞬間先把當前的程式碼狀態存一份。 不是你...
AI 與科技新聞摘要 20260729
一個簡單的問題,可以拿來檢查任何一則科技新聞:出事的時候,帳單會寄到誰家? 問這句話的人不多,因為新聞稿從來不寫這一段。它寫的是誰投資了多少、誰的技術突破了什麼、誰又被禁了。承擔後果的那個人通常不在稿子裡。 7 月 29 日這一天的六則新聞,攤開來看,剛好每一則都有一個「風險寫在帳面上的位置」和一個「風險真正落地的位置」,而這兩個位置不一樣。 一、Claude 花 60 小時,找到後量子簽章的結構弱點Anthropic 公布了一份研究:他們用 Claude Mythos Preview 這個專門找漏洞的模型,在 HAWK 上找到一個先前沒人發現的結構弱點。HAWK 是 NIST 後量子密碼標準的簽章候選之一,正在評估階段,全球密碼學界審了大約兩年。 弱點的本質是格結構裡的一個非平凡自同構(nontrivial automorphism),講白了就是數學上的一條捷徑。它把 HAWK 的有效金鑰強度砍掉一半。要補回原本的安全等級,金鑰長度得加倍,而「金鑰小」正是 HAWK 當初被看上的主要理由。補得回來,但補回來就沒有賣點了。 同一份研究還有第二個結果:一個叫 Möbius Brid...
@ExceptionHandler 為什麼攔不到?先看那個異常死在哪一層
先別管 handler 要怎麼寫。先看一個異常被 throw 出來之後,在變成回給前端的那包 JSON 之前,路上會經過誰的手。 這條路比大部分人想的短。而 @ExceptionHandler 只站在其中一小段。 搞清楚它站在哪,你就會知道為什麼有些錯誤永遠繞過你的 @RestControllerAdvice,而且再多寫幾個 handler 也救不回來。 一個 request 進來,其實要穿兩層皮外面那層是 Servlet 容器。Tomcat 收到連線、解析 HTTP、然後把這個 request 丟進 filter 鏈。你寫的 JWT 驗證 filter、Spring Security 那一整串 filter、log 用的 OncePerRequestFilter,全部住在這一層。 裡面那層才是 Spring MVC。filter 鏈跑完之後,request 交給 DispatcherServlet,它去查這個 URL 對應哪個 controller method,做參數綁定、呼叫你的方法、把回傳值序列化成 JSON。 @ExceptionHandler 住在裡面那層。它不是掛在...
把 Claude Code 接上 OpenTelemetry:你團隊每天燒多少 token,其實沒人知道
月底,主管在 Slack 丟一句:這個月團隊用 Claude Code 花了多少?哪個專案最燒? 你打開 /usage。上面有數字,很漂亮,但那是你這台筆電、這個帳號、這段期間的用量。團隊有十二個人。 兩條你大概已經試過的路第一條是去看帳單。帳單給你一個總額,準確到分。它不會告訴你這筆錢是花在那個跑了三天的重構上,還是花在有人拿它問了兩百次「幫我看一下這段 code」。一個總數等於沒有分佈,你拿它做不了任何決定。 第二條是叫大家自己回報。這條路的壽命通常是一週。第二週開始有人忘記填,第三週表格就變成考古遺址。 兩條路都堵住,是因為你想量的東西根本沒有量測點。家裡的電費單也是這樣,只有一個總金額,你懷疑是烘衣機在吃電,但手上沒有工具能驗證,只能靠感覺吵架。/usage 是那張帳單,接下來要裝的是插座上的分表。 一個環境變數,五分鐘看到數字Claude Code 內建 OpenTelemetry 匯出,預設是關的。開它需要兩件事,只做一件不會有任何反應。 第一件是總開關: 1export CLAUDE_CODE_ENABLE_TELEMETRY=1 第二件是告訴它資料要送去哪。想先...
AI 與科技新聞摘要 20260728
7 月 28 日,台北的交易螢幕上,南亞科、華邦電、旺宏、力成四檔記憶體股同時鎖在跌停板。想賣的人排隊,買方那一欄是空的。 跌停不是「跌得比較多」,跌停是流動性歸零。你手上那張紙在那個當下不能換成錢,不管你多想換。 同一天,一份上千人連署的公開信送到華府,Alphabet 的財報數字讓整個超大規模業者族群被市場重新定價,MCP 協定宣布把自己的地基整片挖掉重澆。攤開這一天的六則新聞,它們分屬完全不同的產業,卻共用同一個問題:出事的時候,還剩多少可以退的空間。 一、上千名 AI 從業者連署,要求政府「刻意放慢」前沿 AI超過一千名任職於前沿 AI 公司的員工簽了一封公開信,要求美國政府推動國際合作,發展出足夠的技術與治理工具,用來「刻意放慢」自動化 AI 的發展前沿。信裡的用字是 deliberately pace,講白了就是把速度調成人類跟得上的檔位,沒有要誰喊停。 簽名的人不是外圍評論者。OpenAI 首席科學家 Jakub Pachocki、OpenAI 共同創辦人之一 John Schulman、Anthropic 的部分共同創辦人,以及 Meta 與 Google Dee...
synchronized 還是 ReentrantLock?先問你有沒有這四種需求
先回答一個問題:你程式碼裡有沒有哪一段,等鎖等太久就應該放棄,去走別的路? 想不出來的話,這篇後面的內容你可以不用看。繼續用 synchronized,你沒有損失任何東西。 ReentrantLock 在很多團隊裡被當成「比較進階的鎖」。review 的時候看到有人寫 synchronized,還會有人留言問要不要換成 lock。這個直覺是錯的,而且錯得有點久了。 名字騙了你,可重入從來不是賣點ReentrantLock 這個名字翻成中文是「可重入鎖」。可重入的意思是:同一個執行緒已經拿到這把鎖了,再進來一次不會把自己卡死。 聽起來很厲害。問題是 synchronized 也可重入。 1234567public synchronized void outer() { inner(); // 同一個執行緒再拿一次同一把鎖,不會死鎖}public synchronized void inner() { // ...} 這段程式碼跑得好好的,JDK 1.0 時代就是這樣。所以如果你選 ReentrantLock 的理由是「它可以...
Claude Opus 5 實戰:價錢沒變,但你該改掉切任務的習慣
回想一下你以前是怎麼把工作交給 Opus 4.8 的。 多數人的做法都差不多:先把大任務手動切成七八個小包,一次餵一包,跑完看一眼、確認沒歪掉,再餵下一包。理由不是不信任它,是經驗告訴你,鏈條拉太長會出事——它會在第五步的時候忘記第二步的決定,或是在某個工具回傳空值的地方原地打轉。 所以你養成了一套習慣:切得夠碎、盯得夠緊、貴的模型只用在關鍵幾步。 Claude Opus 5 在 7 月 24 日上線了,價錢跟 Opus 4.8 完全一樣,每百萬 input token 五美元、output 二十五美元。帳單沒變,所以很容易以為這只是一次例行升級。但如果你繼續用舊習慣去用它,會浪費掉這次升級最值錢的部分。(來源:Anthropic) 以前:一次交一小段。現在:一次交一條鏈官方在 Frontier-Bench v0.1 上的說法是,Opus 5 超越所有其他模型,而且以更低的每任務成本,做到 Opus 4.8 兩倍以上的表現。 「每任務成本更低」這六個字比 benchmark 分數重要。單價沒降,但完成同一件事花的總 token 變少了,因為它繞路繞得比較少、重試比較少。 這個差別...









