@Transactional 明明加了,資料為什麼還是沒 rollback
某個週一早上,客服丟來一張截圖:一筆訂單,扣款成功,庫存卻沒扣。你點開資料庫,付款紀錄乖乖躺在那,庫存數量原封不動。這兩件事應該綁在同一個交易裡,要嘛一起成功,要嘛一起失敗,怎麼會變成一半一半。 你翻開那段 service,@Transactional 就大剌剌地掛在方法上。加了。你甚至還記得當初 review 的時候特別確認過。 這就是 @Transactional 最陰險的地方。NullPointerException 至少會當場炸給你看,逼你面對。這個註解失效卻是無聲的,等到資料對不起來、對帳表兜不攏,你才發現它從頭到尾根本沒作用。 反直覺的地方在這:@Transactional 真正的身份,是一個站在方法門口的代理人。你以為把註解貼上去,交易就自動包在方法外面了。實際上能不能包得住,全看這個代理人有沒有機會出手。多數失效的案例,不是代理人根本沒被叫到,就是被叫到了卻誤判情況。 想通這一層,接下來四個最常踩的坑,就會從「玄學」變成「意料之中」。 先搞懂那個代理人到底是誰Spring 在啟動時做了一件你八成沒留意的事。它拿到你寫的 service 之後,會偷偷在外面包一層,用...
Claude Code 的 /doctor:幫你的設定做一次全身體檢
打完 /doctor 按下 enter,畫面唰一下跳出十幾行帶顏色的檢查結果——綠的、黃的、紅的。大部分人瞄一眼「喔沒事」就關掉了。 但你有沒有想過,這短短一兩秒裡,它到底跑進你的電腦翻了哪些東西? 先別管它能幫你修什麼。先看它收到指令之後,第一件事去看哪裡——把這個黑盒一層一層打開,你才會知道那幾行綠黃紅到底在講什麼,也才知道什麼時候該認真看它。 它做的第一件事:搞清楚你這台是怎麼裝的/doctor 開場不看你的程式碼,先看你自己。你這個 Claude Code 是用 npm 全域裝的、本地裝的、還是原生安裝? 這像醫生問診第一句不是「哪裡痛」,而是「你平常怎麼過日子」。因為安裝方式決定了後面一整串事情:怎麼升級、權限怎麼管、更新頻道走哪條。用錯方式硬修,等於感冒吃錯藥。 緊接著它會做一件很多人沒注意的事——數一數你到底裝了幾個。你以為只有一個 Claude Code,結果 npm 全域一個、~/.claude/local 一個、Homebrew 又偷偷塞一個。這就像家裡三支長得一模一樣的遙控器,你手上按的那支到底控哪台電視,自己都說不準。/doctor 會把它們全列出來,然後...
AI 與科技新聞摘要 2026/07/15:該追的訊號與看過就好的噪音
這一週的 AI 新聞,真正值得你停下來想的,不是又有誰家的模型刷新了跑分。跑分每個月都在破,破了再破,那是背景噪音。值得追的是另一種訊號:一家公司開始把錢砸在「看起來不賺」的地方,或者一個政府第一次對某一類 AI 出手管制。前者透露它賭的是哪個未來,後者劃出一條以後大家都得繞開的紅線。用這個標準掃過這幾天的新聞,下面六則通過了篩選。 一、Claude for Teachers:免費,但真正的賣點是那句「資料不進訓練集」Anthropic 開放通過驗證的美國 K-12 教師免費使用進階版 Claude,附帶對齊全美 50 州課綱的教材連結,還找了美國教師聯盟一起訂隱私標準,先在底特律的公立學區試辦。 免費不是重點,教育產品搶市場向來靠免費開路。重點是它白紙黑字承諾「學生資料不用於模型訓練」,並比照 FERPA 的規格去簽資料處理附約。這是一步下行有限、上行很大的棋:短期它一毛錢收不到,但它換來的是把「AI 進校園等於學生資料被吃乾抹淨」這個最大的家長恐懼提前拆掉。誰先在信任這件事上立好規矩,誰就拿到往後十年教育市場的門票。這種投資帳面上不好看,卻是最划算的一種。來源:Anthrop...
synchronized 的二十年升級史:一把鎖怎麼從龜速變到幾乎零成本
2006 年以前,Java 工程師圈子裡流傳一條沒寫下來的潛規則:能不用 synchronized 就別用。不是它不安全,是它慢得讓人心痛。那個年代要在一段程式碼外面掛一把 synchronized,代價幾乎等於「每次都去敲作業系統的門」。 想像一下這個畫面。你在公司要用會議室,規定是:不管有沒有人跟你搶,每次都得先打電話給總機登記、等總機回你一個號碼,用完再打一次電話銷號。就算整層樓只有你一個人上班,這通電話也躲不掉。早期的 synchronized 就是這樣運作的——它背後直接綁著作業系統的互斥量(mutex)。執行緒一旦拿不到鎖,就得從使用者態切進核心態,被掛起、然後等別人放鎖時再被喚醒。 這個「切一趟核心態」的動作有多貴?一次執行緒的掛起與喚醒,成本大概落在一到數微秒之間。聽起來很短,但對 CPU 來說,一微秒可以跑掉好幾千條指令。你只是想保護一個小小的計數器加一,結果光是搶鎖的手續費就燒掉幾千條指令的預算。這就是為什麼那條潛規則會存在。 大家是怎麼繞過去的既然正門這麼貴,工程師就開始找旁門。JDK 5 那年,Doug Lea 把他寫的併發工具包正式收進標準函式庫,也就是...
AI 與科技新聞摘要 20260714
這一週最值錢的新聞,沒有一則是關於哪個模型又刷新了跑分。真正在圈子裡被反覆轉發的,全是「誰依賴誰、誰能被誰一夜切斷」這種事。表面上大家在看熱鬧——蘋果告 OpenAI、阿里封殺 Claude Code、Google 下週要放大招——但底層其實在問同一件難堪的事:你手上這套 AI,是你自己的,還是租來的?租來的東西,房東隨時能收回。 一、蘋果控告 OpenAI 竊取營業秘密,一場口水戰底下的真問題蘋果向 OpenAI 提起營業秘密訴訟,導火線是 OpenAI 這段時間挖走逾 400 名前蘋果員工,其中不少人來自 M 系列晶片架構團隊,還有已經喊停的自駕車專案。Elon Musk 在 X 上煽風點火順便挖苦一番,Sam Altman 回擊,整個週末的話題被這齣戲主導。 熱鬧歸熱鬧,真正該盯的重點跟誰挖了誰的人無關。這件事戳破了一個很多人裝作沒看見的事實:OpenAI 在消費端最粗的一條命脈,是它跟 iOS 的整合。今天蘋果只要在談判桌上動一下——限制整合、換一家預設 AI 夥伴——ChatGPT 在幾億支手機上的位置就會鬆動。這叫下行很大、上行有限:整合順利,OpenAI 賺的是本來...
Prompt Caching:讓 Claude 別再重讀同一份文件
那天在調一個客服問答的小工具。一份 48 頁的產品手冊塞進 system prompt,使用者每問一句,我就把整包手冊加問題丟給 API。功能是會動,但兩件事很快就不對勁。 第一,帳單。同一份手冊,一天被重複送進去幾百次,每次都照全額計費。第二,延遲。使用者按下送出到看見第一個字,中間那三四秒的空白,長到讓人以為連線斷了。 我一開始的判斷是「模型太慢」。於是我做了兩件很直覺、但後來證明都搞錯方向的事。 先講我試錯的兩條路第一條路:把 prompt 縮短。我開始刪手冊,砍掉我覺得「應該用不到」的章節。結果呢?使用者一問到被我砍掉的那段,答案就開始亂編。原來那些內容全都有用,只是我沒本事判斷哪句話哪天會被問到。刪 prompt 等於賭運氣,而且我一定賭輸。 第二條路:換小模型。想說便宜的模型跑得快、算得省。但手冊本身沒變短,該讀的 token 一個都沒少,小模型只是讀得更吃力、答得更心虛。延遲沒改善多少,準確率倒是先掉了。 繞了一大圈才發現,我盯錯了地方。真正貴的、真正慢的,不是「模型思考」這一步,是「每次都把那 48 頁重新算一遍」這一步。 打個比方。你去便利商店影印一份 48 頁...
用小 skill 換掉大框架:mattpocock/skills 給真工程師的紀律工具箱
要讓一個 coding agent 守規矩,過去大家的做法出奇一致:找一套大框架來接管整條開發流程。GSD、BMAD、Spec-Kit 這類工具賣的都是同一個承諾——你照它鋪好的軌道走,agent 就會乖乖先規劃、再實作、再驗收。聽起來很理想。真正用過的人都懂,麻煩藏在框架自己出包的那一天。 那種框架像一台看不到引擎蓋底下的自動駕駛車。順的時候很爽,一旦它把方向盤打歪,你連它為什麼這樣決定都讀不懂,更別說改。控制權早在你裝它的那一刻就交出去了。Matt Pocock 在 2026 年開源的 mattpocock/skills 就是衝著這件事來的,repo 標語嗆得很直接:Skills for real engineers,給真工程師用的,不是拿來 vibe coding。 它換了一個完全相反的思路。與其給你一台自動駕駛車,不如給你一盒工具,每支只做一件事,而且你隨時打得開來看裡面怎麼運作。這裡的「一支工具」就是一個 skill。講白一點,skill 就是一個 SKILL.md 檔:上半是 YAML 標頭寫 name 和 description,下半是 Markdown 內文,把「...
Claude Code 的 /compact:對話變慢變鈍前,先搞懂壓縮到底在丟什麼
你按下 /compact,終端機閃過一行「Conversation compacted」,然後畫面就乾淨了。它到底把你剛才那一小時的來回怎麼了?先別急著知道「什麼時候該用」,我們從更底層問起:這個指令按下去的那一瞬間,機器裡發生了什麼事。搞懂這件事,你自己就會推出該按的時機,不用背。 先搞清楚 context 是什麼想像模型每次要回你話之前,都得先把整張桌子上的紙全部重讀一遍。這張桌子就是 context——它上面攤著你打的每一句話、它讀過的每一份檔案、它自己講過的每一段回覆,還有一堆你根本沒看到的東西:系統提示、專案根目錄的 CLAUDE.md、它給自己的筆記。這些全部加起來,就是模型當下「記得」的全部。 關鍵在於,模型沒有你想像中那種「長期記憶」。它不會把昨天的事存進腦子裡,它每一輪都是把整張桌子重讀一次,才知道現在在幹嘛。所以桌子上的紙,就是它的全部世界。 為什麼桌子會滿問題來了:這張桌子有邊界。Claude Code 目前一次能攤開大約 20 萬個 token(查文件的,沒逐一實測),聽起來很多,但它消耗得比你想像快。你叫它讀一支三百行的檔案,一疊紙上桌了;跑一次測試,輸...
AI 與科技新聞摘要 20260713
上禮拜茶水間的話題有點怪。平常大家爭的是哪個模型比較會寫程式,這週卻變成「你有沒有看台積電幾號要開財報」。一家做晶圓的公司,什麼時候變成整個 AI 圈的心跳監測器了?答案是——當一整個產業的信心都靠同一批供應商撐著的時候。這週的幾則新聞,其實都在講同一件被歡呼聲蓋過去的事:我們正把越來越多的雞蛋,放進越來越少的籃子。 一、台積電六月營收暴衝,一場財報成了整個 AI 圈的體檢台積電公布六月營收年增約 68%、月增 6.2%,今年上半年營收年增 35.6%。市場現在幾乎把 7 月 16 日的季報,當成判斷 AI 晶片需求是否開始降溫的關鍵指標。同一時間,先進節點與 CoWoS 封裝產能依然吃緊,晶片廠仍在缺貨,需求外溢到後段封測與海外廠。 值得警覺的不是這個數字多漂亮,而是「一家公司的月營收被當成整個產業的風向球」這件事本身。這代表這條供應鏈已經瘦到只剩一根主樑。當所有人盯著同一個數字屏息,這個數字就同時是體溫計,也是傳染源——任何一次產能誤判、一次天災、一次地緣政治意外,衝擊都不再是它一家的事,而是整條鏈一起打噴嚏。健康的系統會留冗餘,脆弱的系統則是把生死交給單一節點。越多人用同一...
Kong 與 API Gateway:該不該擺一個守門員,先數數你手上有幾隻服務
先回答一個問題:你手上現在跑著幾隻服務? 如果答案是一隻,或是兩三隻互相之間根本不太講話,那底下這篇你可以直接關掉,去做點別的。API Gateway 不是你現在該煩惱的東西,硬擺一個只會多養一個要顧的元件。真正需要它的人,通常是在某個下午突然發現:同一段「檢查這個 token 有沒有過期」的程式碼,已經被複製貼上到第七隻服務裡了。 那一刻你才會懂 Kong 這種東西為什麼存在。 重複的不是功能,是責任想像一棟辦公大樓。裡面十幾間公司,每一間都要驗訪客身份、都要管誰能進誰不能進、都要記錄今天誰來過。你有兩種蓋法。 一種是每間辦公室門口各自裝一台門禁機、各請一個櫃檯小姐、各自記一本訪客簿。聽起來很獨立、很自主,但你只要站在一樓抬頭看,就知道哪裡不對——同一件事被幹了十幾遍,而且每一台門禁機的規則還都長得不太一樣。哪天公司規定「訪客一律要戴證」,你得跑十幾間去改。 另一種蓋法是:一樓擺一個大廳,所有人先過這關。驗證、放行、登記,全部在這裡做完,做完了再讓你上樓找對應的公司。 API Gateway 就是那個一樓大廳。你的每一隻後端服務是樓上的公司,Gateway 是那個誰都躲不掉的入...














