<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Hikari 的工程筆記</title>
  <icon>https://blog.leonstacklab.com/icon.png</icon>
  <subtitle>軟體工程與 AI 實作筆記</subtitle>
  <link href="https://blog.leonstacklab.com/atom.xml" rel="self"/>
  
  <link href="https://blog.leonstacklab.com/"/>
  <updated>2026-07-31T01:48:58.233Z</updated>
  <id>https://blog.leonstacklab.com/</id>
  
  <author>
    <name>Hikari</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>[後端] 資料庫交易與隔離等級白話講：為什麼你轉帳不能只做一半？</title>
    <link href="https://blog.leonstacklab.com/202607/942366470146/"/>
    <id>https://blog.leonstacklab.com/202607/942366470146/</id>
    <published>2026-07-29T13:02:05.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
    <summary type="html">資料庫交易與隔離等級是高併發系統的基石。本文用生活例子和實務情境，白話解釋ACID特性、髒讀、不可重複讀、幻影讀等問題，並教你怎麼在效能與資料一致性間取捨。</summary>
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="資料庫" scheme="https://blog.leonstacklab.com/tags/%E8%B3%87%E6%96%99%E5%BA%AB/"/>
    
    <category term="交易" scheme="https://blog.leonstacklab.com/tags/%E4%BA%A4%E6%98%93/"/>
    
    <category term="隔離等級" scheme="https://blog.leonstacklab.com/tags/%E9%9A%94%E9%9B%A2%E7%AD%89%E7%B4%9A/"/>
    
    <category term="併發" scheme="https://blog.leonstacklab.com/tags/%E4%BD%B5%E7%99%BC/"/>
    
    <category term="ACID" scheme="https://blog.leonstacklab.com/tags/ACID/"/>
    
  </entry>
  
  <entry>
    <title>[AI] Prompt 的眉角：讓你的 LLM 不再雞同鴨講</title>
    <link href="https://blog.leonstacklab.com/202607/ca5e2a2a9916/"/>
    <id>https://blog.leonstacklab.com/202607/ca5e2a2a9916/</id>
    <published>2026-07-27T06:36:27.000Z</published>
    <updated>2026-07-31T01:48:58.234Z</updated>
    
    
    <summary type="html">實用的 Prompt 技巧整理：角色設定、清晰指令、Few-shot、Chain of Thought 與結構化輸出，讓 LLM 真正聽懂你要什麼。</summary>
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="工程分享" scheme="https://blog.leonstacklab.com/tags/%E5%B7%A5%E7%A8%8B%E5%88%86%E4%BA%AB/"/>
    
    <category term="AI" scheme="https://blog.leonstacklab.com/tags/AI/"/>
    
    <category term="LLM" scheme="https://blog.leonstacklab.com/tags/LLM/"/>
    
    <category term="Prompt" scheme="https://blog.leonstacklab.com/tags/Prompt/"/>
    
    <category term="開發技巧" scheme="https://blog.leonstacklab.com/tags/%E9%96%8B%E7%99%BC%E6%8A%80%E5%B7%A7/"/>
    
  </entry>
  
  <entry>
    <title>[AI] 把 token 當成錢來算，context window 不是越大越好</title>
    <link href="https://blog.leonstacklab.com/202607/db510360daba/"/>
    <id>https://blog.leonstacklab.com/202607/db510360daba/</id>
    <published>2026-07-27T05:54:16.000Z</published>
    <updated>2026-07-31T01:48:58.234Z</updated>
    
    
    <summary type="html">白話拆解 LLM 的 Token 計費與 Context Window：為什麼中文更耗 token、context 不是越大越好，以及實務上怎麼省下 API 成本。</summary>
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="AI" scheme="https://blog.leonstacklab.com/tags/AI/"/>
    
    <category term="LLM" scheme="https://blog.leonstacklab.com/tags/LLM/"/>
    
    <category term="Token" scheme="https://blog.leonstacklab.com/tags/Token/"/>
    
    <category term="Context Window" scheme="https://blog.leonstacklab.com/tags/Context-Window/"/>
    
    <category term="開發筆記" scheme="https://blog.leonstacklab.com/tags/%E9%96%8B%E7%99%BC%E7%AD%86%E8%A8%98/"/>
    
  </entry>
  
  <entry>
    <title>[學習筆記] 技術筆記要寫給未來的自己看</title>
    <link href="https://blog.leonstacklab.com/202604/2c2396736837/"/>
    <id>https://blog.leonstacklab.com/202604/2c2396736837/</id>
    <published>2026-04-19T11:52:27.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;學技術時，很容易一直收藏文章、影片和文件。&lt;/p&gt;
&lt;p&gt;但收藏久了會發現，資料越來越多，真正用得到的時候卻常常找不到。&lt;/p&gt;
&lt;p&gt;後來我覺得，技術筆記不一定要寫得很完整，但要能讓未來的自己快速想起來：「當時我到底怎麼解的？」&lt;/p&gt;
&lt;h2 id=&quot;不要只貼連結&quot;&gt;&lt;a href=&quot;#不要只貼連結&quot; class=&quot;headerlink&quot;</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="學習" scheme="https://blog.leonstacklab.com/tags/%E5%AD%B8%E7%BF%92/"/>
    
    <category term="筆記" scheme="https://blog.leonstacklab.com/tags/%E7%AD%86%E8%A8%98/"/>
    
    <category term="工程分享" scheme="https://blog.leonstacklab.com/tags/%E5%B7%A5%E7%A8%8B%E5%88%86%E4%BA%AB/"/>
    
  </entry>
  
  <entry>
    <title>[後端] Log 不只是用來看錯誤</title>
    <link href="https://blog.leonstacklab.com/202603/245fe74961b9/"/>
    <id>https://blog.leonstacklab.com/202603/245fe74961b9/</id>
    <published>2026-03-12T13:09:52.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;很多人一開始寫 log，都是在程式壞掉時才想到：&lt;/p&gt;
&lt;figure class=&quot;highlight csharp&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="Debug" scheme="https://blog.leonstacklab.com/tags/Debug/"/>
    
    <category term="Backend" scheme="https://blog.leonstacklab.com/tags/Backend/"/>
    
    <category term="Logging" scheme="https://blog.leonstacklab.com/tags/Logging/"/>
    
  </entry>
  
  <entry>
    <title>[工程分享] 重構不是看到不順眼就重寫</title>
    <link href="https://blog.leonstacklab.com/202601/0536230d8df5/"/>
    <id>https://blog.leonstacklab.com/202601/0536230d8df5/</id>
    <published>2026-01-22T13:35:06.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;寫程式久了，總會看到一些讓人手癢的程式碼。&lt;/p&gt;
&lt;p&gt;變數命名怪怪的、方法太長、邏輯繞來繞去，第一個反應可能是：「我想把它重寫掉。」&lt;/p&gt;
&lt;p&gt;但重構不是單純把程式改成自己喜歡的樣子。&lt;/p&gt;
&lt;p&gt;重構的目標應該是降低維護成本，而且不能改變原本行為。&lt;/p&gt;
&lt;h2 id=&quot;重構前先確認目的&quot;&gt;&lt;a href=&quot;#重構前先確認目的&quot;</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/tags/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    <category term="Refactor" scheme="https://blog.leonstacklab.com/tags/Refactor/"/>
    
    <category term="Clean Code" scheme="https://blog.leonstacklab.com/tags/Clean-Code/"/>
    
  </entry>
  
  <entry>
    <title>[後端] Cache 可以加速，也可能製造麻煩</title>
    <link href="https://blog.leonstacklab.com/202512/8bbd429c710c/"/>
    <id>https://blog.leonstacklab.com/202512/8bbd429c710c/</id>
    <published>2025-12-16T12:58:41.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;Cache 是很常聽到的效能優化方式。&lt;/p&gt;
&lt;p&gt;簡單來說，就是把常用的結果先存起來，下次需要時不用重新計算或重新查詢。&lt;/p&gt;
&lt;p&gt;聽起來很美好，但 Cache 不是免費的。它可以讓系統變快，也可能讓資料變得難以理解。&lt;/p&gt;
&lt;h2 id=&quot;Cache-解決的是重複成本&quot;&gt;&lt;a href=&quot;#Cache-解決的是重複成本&quot;</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="Backend" scheme="https://blog.leonstacklab.com/tags/Backend/"/>
    
    <category term="Cache" scheme="https://blog.leonstacklab.com/tags/Cache/"/>
    
    <category term="Performance" scheme="https://blog.leonstacklab.com/tags/Performance/"/>
    
  </entry>
  
  <entry>
    <title>[SQL] Index 是什麼？先用查書目錄的方式理解</title>
    <link href="https://blog.leonstacklab.com/202510/eb73b614829f/"/>
    <id>https://blog.leonstacklab.com/202510/eb73b614829f/</id>
    <published>2025-10-09T12:33:28.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;剛開始接觸資料庫效能問題時，常常會聽到一句話：&lt;/p&gt;
&lt;p&gt;「這個查詢很慢，可能要加 index。」&lt;/p&gt;
&lt;p&gt;但 index 到底是什麼？為什麼加了它查詢就可能變快？&lt;/p&gt;
&lt;p&gt;這篇先不鑽太深的資料結構，而是用比較直覺的方式整理 index 的基本概念。&lt;/p&gt;
&lt;h2 id=&quot;Index-可以想成書的目錄&quot;&gt;&lt;a</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="SQL" scheme="https://blog.leonstacklab.com/tags/SQL/"/>
    
    <category term="Database" scheme="https://blog.leonstacklab.com/tags/Database/"/>
    
    <category term="Index" scheme="https://blog.leonstacklab.com/tags/Index/"/>
    
  </entry>
  
  <entry>
    <title>[Git] 分支策略不用一開始就搞得很複雜</title>
    <link href="https://blog.leonstacklab.com/202508/66cfad6dd207/"/>
    <id>https://blog.leonstacklab.com/202508/66cfad6dd207/</id>
    <published>2025-08-07T13:47:33.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;很多人在學 Git 分支時，會看到各種流程圖：Git Flow、GitHub Flow、GitLab Flow。&lt;/p&gt;
&lt;p&gt;這些流程都有它們的使用情境，但如果專案很小、團隊人數也不多，一開始就套很複雜的分支策略，反而會讓大家卡在流程上。&lt;/p&gt;
&lt;p&gt;我覺得分支策略的重點不是名字，而是團隊能不能穩定交付。&lt;/p&gt;
&lt;h2</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="Git" scheme="https://blog.leonstacklab.com/tags/Git/"/>
    
    <category term="Teamwork" scheme="https://blog.leonstacklab.com/tags/Teamwork/"/>
    
    <category term="Branch" scheme="https://blog.leonstacklab.com/tags/Branch/"/>
    
  </entry>
  
  <entry>
    <title>[API] 錯誤處理不要只回傳失敗</title>
    <link href="https://blog.leonstacklab.com/202506/80ff6683ffe3/"/>
    <id>https://blog.leonstacklab.com/202506/80ff6683ffe3/</id>
    <published>2025-06-18T14:07:45.000Z</published>
    <updated>2026-07-31T01:48:58.233Z</updated>
    
    
      
      
        
        
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;在寫 API 的時候，很容易把成功流程寫得很完整，但錯誤流程只簡單回一句「失敗」。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;figure class=&quot;highlight json&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span</summary>
        
      
    
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/categories/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    
    <category term="工程筆記" scheme="https://blog.leonstacklab.com/tags/%E5%B7%A5%E7%A8%8B%E7%AD%86%E8%A8%98/"/>
    
    <category term="API" scheme="https://blog.leonstacklab.com/tags/API/"/>
    
    <category term="Error Handling" scheme="https://blog.leonstacklab.com/tags/Error-Handling/"/>
    
  </entry>
  
</feed>
