---
# System prepended metadata

title: 每日 IT 用語筆記
tags: [產品開發, Back-End, Front-End, 程式基礎]

---

# 每日 IT 用語筆記

> 想到就記錄，填補開發路上的坑坑洞洞。

### D24 開發用語

+ 開發流程

```
アイデア（想法）
→ POC（概念驗證）
→ MVP（最小可行產品）
→ 本格開発（正式開發）
→ リリース（發佈）
```

+ POC vs MVP 差異
    + POC（Proof of Concept）概念驗證
        + 👉 驗證技術/想法是否可行 = 能不能做
    + MVP（Minimum Viable Product）最小可行產品
        + 👉 驗證市場是否有需求 = 有沒有人用
+ ドッグフーディング(Dogfooding) ：內部試用自家產品
    + 例）新しい Slack 風のツールを開発中で、今社内でドッグフーディングしています。（我們正在開發類似 Slack 的新工具，目前在公司內部試用中。）
+ キックオフ(Kick-off) ：專案啟動，源自足球的「開球」
    + 例）コールデンウィーク明けにキックオフします。（會在黃金週後啟動專案。）

### D23 TTL

+ TTL = Time To Live 的縮寫，表示「存活時間」或「有效期限」
+ 目的：控制資料在系統中的存活期限，避免資料太舊以確保更新性
+ 原理：設定一個時間值（通常單位是秒），超過後資料會自動失效或被刪除
+ 實際用途：
    + DNS 中的 TTL：透過快取減少查詢次數，提升解析時間
    + 網路封包中的 TTL：防止網路封包無限循環，提升網路穩定性
    + 設定資料庫中的 TTL：自動清理過期資料，以節省儲存空間與確保資料時效性


### D22 命令式 vs 宣告式

+ 命令式程式設計（Imperative Programming）
    + 關注如何執行（How）
    + 具體步驟描述
    + 直接修改變數
    + 明確的迴圈、條件
+ 宣告式程式設計（Declarative Programming）
    + 關注要什麼結果（What）
    + 結果導向描述
    + 避免狀態變更/副作用
    + 抽象化的操作
    + 實務作法：使用純函式（Pure Functions）、不重新賦值變數（Immutability）、避免破壞性變更（Non-destructive operations）

透過宣告式程式設計，能提升程式碼可讀性與可維護性，但在需要考慮效能優化等情況（Case by case），以命令式撰寫會更適合。

### D21 本地端部署 On-premises

オンプレミス（On-premises，本地端部署）：是指在公司內部本地環境中部署和管理資訊技術基礎設施，包括伺服器、軟體和資料庫等。與雲端服務（Cloud）相對，On-premises 提供完全的自主控制權，主要應用於需要嚴格資料控管的情況，如政府部門、銀行、醫療相關行業。

* 本地端部署（On-premises）
    * 完全自主控制、自行負責安全措施、受硬體限制不易擴展、需專業 IT 團隊、高度機密資料
* 雲端服務（Cloud）
    * 依賴第三方服務、與服務商共同責任、可即時彈性過展、快速部署需求、有效成本控制
* 混合雲（Hybrid Cloud）策略
    * 可結合兩者優勢，在關鍵系統使用 On-premises，一版應用採用 Cloud 服務

### D20 GraphQL vs RESTful API

* GraphQL：Client 主導的靈活查詢
    * 是一種 API 查詢語言，單一端點 `/graphql`
    * Client 端指定「彈性」資料結構
    * 一次拿到所有需要的資料，減少網路請求
    * 強型別系統 - 自動產生文件和型別檢查
    * 適合複雜的資料關聯查詢
* REST: Server 主導的標準化操作
    * 是一種基於 HTTP 的軟體架構風格，多個端點 `/users`、`/posts…`
    * Server 端定義「固定」資料結構
    * 成熟的工具生態，學習曲線平緩
    * 明確的HTTP 語義和快取機制
    * 適合簡單的 CRUD 操作

### D19 字元編碼 Character Encoding 文字コード

由於電腦只認識 1 和 0（二進位），必須透過字元編碼，將文字轉換成數字來儲存資訊。而為了解決不同系統之間的通訊需求，需制定共同標準，以達到相同的編碼結果。

* ASCII
    * 美國標準資訊交換碼（American Standard Code for Information Interchange），由 ANSI 制定的電腦編碼系統
    * 提供 128 個字元組合的 7 位元編碼，支援英文字母、數字、符號
* EBCDIC
    * 延伸二進位編碼十進位交換碼（Extended Binary Coded Decimal Interchange Code），由 IBM 提出的解決方案
    * 提供256 個字元組合的 8 位元編碼，用於企業行系統
* Shift-JIS
    * 日本電腦系統通用的字碼標準
* Big-5
    * 台灣通用的字碼標準
* Unicode 
    * 統一碼/萬國碼，由統一碼聯盟 （The Unicode Consortium) 制定，涵蓋世界上所有文字的國際字碼標準
    * 使用 21 位元的編碼空間，實際儲存需透過 UTF-8、UTF-16 等編碼格式
* UTF-8
    * UTF-8（8-bit Unicode Transformation Format）是一種可變長度的Unicode 編碼格式
    * 向後相容 ASCII，為目前全球編碼主流

> Unicode vs UTF-8 用書來比喻
Unicode = 圖書分類標準，決定全世界每本書的編號
UTF-8 = 實際書本擺放方式 ，決定編號文學 001 的書放在第 1 格

#### 發展歷史

1960s ASCII（7位元）：只有英文
1970s EBCDIC：IBM 企業級電腦專用
1980s 各國自製編碼：Shift_JIS 日本 / Big5 台灣 / EUC （Extended Unix Code)…
1990s Unicode（21位元）：統一全球標準
2000s UTF-8：最佳實作方式

### D18 雲端應用開發流程

1. 需求分析 & 技術選型 Technology Selection
2. 前端開發：React + React Router + Axios + Zustand 等套件
3. 後端開發：Node.js + Express + PostgreSQL
4. 整合測試：API介面、資料庫連接、前後端整合等
5. 容器化準備：環境變數、路徑配置
6. Docker/Podman 容器化
7. AWS ECR：提供容器映像存儲服務
8. Kubernetes Cluster（K8s 叢集）：自動化部屬、擴展及管理多個容器的系統
9. ArgoCD GitOps：持續部署自動化

後端到部署相關的知識實在過於薄弱，連一些工具相關的單詞都不知道是在做什麼，只好一個一個坑慢慢補了。

### D17 開發相關

* 編譯 コンパイル Compile
* 重新編譯 再コンパイルする Recompile
* 從編譯到執行 コンパイルから実行まで From compile to execution
* 渲染 レンダリング Rendering
* 解決衝突	コンフリクトを解決する Resolve conflicts
* 管理依賴	依存関係を管理する	Manage dependencies
* 更新/安裝/移除套件 パッケージを更新する/インストールする/削除する	Update/Install/Remove packages
* 擴充系統功能 システム機能を拡張する Extend system functionality
* 安裝擴充套件 拡張パッケージをインストールする Install extension package
* 開發外掛程式 プラグインを開発する Develop plugin

### D16 常見開源授權

* MIT
    * 最自由的軟體授權條款
    * 需保留版權聲明
    * 代表：前端三大框架 Angular/React/Vue、PHP Laravel、jQuery
* Apache 2.0
    * 廣泛應用在商業開發，提供專利保護
    * 需保留版權聲明 + 標註修改
    * 代表：swift、Apache2、Android、Kubernetes
* GPL（General Public License）
    * 最早出現的開源條款
    * 強制開源（又稱病毒式開源），衍生作品必須同樣採用　GPL
    * 代表：Linux、MySQL、WordPress
* BSD
    * 介於 Copyleft（著作傳）至 Copyright（著作權）之間的Copycenter（中間版權）
    * 需保留版權聲明，允許閉源
    * 代表： nginx、Django、FreeBSD
* LGPL
    * 較寬鬆的GPL
    * 只有修改部分需開源
    * 代表：OpenOffice
* CC0（Creative Commons Zero）
    * 放棄所有版權，無任何要求 = No Rights Reserved
    * 代表：免費圖庫素材

### D15 實現多人協作：OT vs CRDT

為了解決多人協作時的衝突，主要有兩種實現方案：
1. Operational Transformation (OT)：操作轉換
2. Conflict-free Replicated Data Types (CRDTs)：無衝突複製資料型態

兩種演算法的差異主要如下：

* OT：透過「轉換操作」解決多人協作的衝突
特徵：由伺服器處理（集中式）達到即時同步，保證強一致性，但實作上相對複雜
    * 應用：Google Docs、Notion、HackMD
    * 框架：ShareJS
* CRDT：透過「特殊資料結構」避免衝突產生
特徵：去中心化（分散式）架構達到異步同步，保證最終結果一致性，擴展性高
    * 應用：Git 版本控制、分散式資料庫
    * 框架：Yjs、AutoMerge

### D14 WAF（Web Application Firewall）網站應用防火牆

WAF 是專門保護網頁應用程式安全的防火牆，透過監控及過濾 HTTP/HTTPS 流量，阻擋來自網路的惡意攻擊。

特點：
1. 運作在應用層（OSI模型第7層）：針對應用程式層面的攻擊，負責過濾惡意流量
2. 反向代理結構：網站流量會先經過 WAF，再到網站伺服器，避免伺服器直接暴露真實IP地址
3. 攻擊檢測：識別SQL注入、跨站腳本（XSS）、跨站請求偽造（CSRF）、分散式攻擊（CC Attack）、惡意 Bot 爬蟲等常見攻擊


### D13 退信 Bounce バウンス

退信（Bounce）：指發送的電子郵件無法送達收件人，而被退回給寄件人的情況。退信率（無法寄達的郵件佔總寄出郵件的比例）高低，將影響到寄件人郵件信譽（Email Reputation），使郵件容易被標記為垃圾信件。

郵件退信可區分為：
1. 絕對退信（Hard Bounce）：無法被收信服務器接收的永久退信
例) 無效的郵件地址、不存在的域名、被列入黑名單
2. 軟性退信（Soft Bounce）：暫時性原因導致無法寄送被退回，通常會自動嘗試重新發送
例) 收信郵箱容量已滿、郵件檔案過大、臨時性伺服器問題

根據 SMTP（Simple Mail Transfer Protocol，簡單郵件傳輸協議）錯誤代碼，了解退信通知的種類與其對應解決方式，即可有效降低退信率。

### D12 課金方式

1. 従量課金（じゅうりょうかきん) /使用量課金：從量計費
Usage-based pricing/ Pay-as-you-go pricing（PAYG)
例) 雲端服務根據儲存容量計費
2. 定額課金（ていがくかきん)：固定費率
Flat-rate pricing / Fixed pricing
例) 月費固定的Netflix 串流服務
3. 定額従量課金：基本費用+根據用量額外計費
Hybrid pricing
例) 手機費率、瓦斯費
4. ユーザー数課金：用戶數計費
Per-user pricing / User-based pricing
例) Salesforce、Slack 等企業用 SaaS 軟體
5. 段階的課金：階梯式計費
Tiered pricing / Graduated pricing
例) 電費

### D11 FP - Pure Function & Currying

* 純函數 Pure Function：單輸入單輸出，不產生副作用（Side Effect）的 function

```
const add = (a, b) => a + b
```

* 柯理化 Currying：將一個接受 n 個參數的function，轉換成 n 個只接受一個參數的 function

```
const curriedAdd = a =>  b => a + b
```

* 函式程式設計 Function Programming（FP）：以純函數（Pure Function）為基礎，利用柯理化（Currying）等技術實現的設計模式

```
const nums = [1, 2, 3];
const added = nums.map(curriedAdd(2));  // [3, 4, 5]
```

### D10 更新與修復

* 熱修復 （Hotfix)：針對緊急問題的快速應對
* 修補程式 （Fix Patch)：有計劃性的更新
* 更新（Update）：軟體的一般性更新
* 服務包 （Service Pack = SP)：大規模更新套件
* 錯誤修復 （Bug fix)：修正特定缺陷
* 臨時解決方案 （Workaround)：暫時性迂迴策略
* 解決方案 （Solution)：根本性解決辦法
* 發布 （Release)：軟體公開
* パッチ（patch)を当てる/Hotfixを適用（てきよう）する：套用更新檔/熱修復
* Stage/Patchをリリースする：發布～
* ワークアラウンド（Workaround)/更新を実施（じっし）する

### D9 略語 りゃくご

* LGTM：Looks Good To Me 看起來不錯 = 給過
* TL;DR：Too Long; Didn’t Read  太長了，沒看 = 懶人包
* WIP：Work In Progress  工作進行中
* TBD：To Be Determined 待確定
* TBR：To Be Reviewed 待審核
* BTW：By The Way 順帶一提
* FYI：For Your Information 供參

### D8 認證標準

* ISO/IEC 27001
    * 資訊安全管理系統的國際標準，2022年新版涵蓋資訊安全、網路安全與隱私保護
    * 由國際標準化組織（ISO/IEC）制定，作為ISMS認證的基礎標準
* ISMS 認証
    * 情報セキュリティマネジメントシステム認証
    * ISMS = 資訊安全管理系統（Information Security Management System）
    * 基於ISO/IEC 27001
    * 在日本，由日本資訊經濟社會推進協會（JIPDEC）作為認證機構運營
* JIS 日本産業規格
    * JIS = 日本工業規格（Japanese Industrial Standards)
    * 基於日本工業標準化法制定的國家標準
    * 由日本產業標準調查會（JISC）制定
* Pマーク
    * プライバシーマーク 隱私標章
    * 基於JIS Q 15001（個人情報保護）

### D7 網路用語

* プロトコル Protocol 協定
* クライアント Client 客戶端
* サーバー Server 伺服器端
* リクエストrequest 請求
* レスポンス response 回應
* ネットワーク Network 網路
* LAN（Local Area Network）區域網路：限制封閉區域內連線，現代LAN通常由無線 Wi-Fi 和有線乙太網路構成
* WAN（Wide Area Network）廣域網路：提供遠距離網路連線
* INTERNET インターネット 網際網路：連接全球網路

### D6 淺拷貝 vs 深拷貝

* 賦值 Assignment（代入 だいにゅう)
    * 原始型別是 by value（值傳遞)：複製實際的值
    * 物件型別是 by reference（引用傳遞)：只改變指向的對象，完全共享同一物件
        * let obj1 = {x: 10};
        * let obj2 = obj1;
* 淺拷貝 Shallow Copy（シャローコピー)
    * 只複製物件的最外層，內部巢狀結構則是共用
        * spread operator: let obj3 = {...obj1};
* 深拷貝 Deep copy（ディープコピー)
    * 完全複製整個物件結構
        * let obj4 = JSON.parse（JSON.stringify（obj1));

```
// 原始型別
let a = 5;
let b = a;  // 值的複製（賦值）

// 物件型別
let obj1 = {x: 10};
let obj2 = obj1;  // 引用的複製（賦值，不是淺拷貝）

// 淺拷貝
let obj3 = {...obj1};  // 複製最外層屬性

// 深拷貝
let obj4 = JSON.parse（JSON.stringify（obj1));  // 完全複製
```

> Ref：[Javascript 的 Shallow copy VS Deep copy](https://fufong79570.medium.com/javascript-%E7%9A%84-shallow-copy-vs-deep-copy-f1ed7dca5db0)


+ 精神時光屋：精神と時の部屋（せいしんとときのへや，Hyperbolic Time Chamber）
    + プロジェクトの締め切りが迫る中、上司が精神と時の部屋に入った。
    + まるで精神と時の部屋に入ったかのように、外の世界から切り離された感覚になった。

### D5 開發用語
クレデンシャルをセットする
Setting credential
設定憑證

テストが失敗する・落ちる
Test failed
測試失敗

コンストラクタで引数（ひきすう）を渡す
Pass arguments in the constructor
透過建構子傳入參數

キャッシュを消す
Clear cache
清除緩存

### D4 開發用語

* ソースコード Source code 原始碼
* リファクタリング Refactoring 重構
* コードレビュー Code review 程式碼審查
* バージョン管理 Version control 版本控制
* デザインパターン Design patterns 設計模式
* デフォルト Default 預設值
* カスタム Custom 客製化
* コネクション Connection 連線
* リダイレクト Redirect 重新導向
* プラットフォーム Platform 平台

### D3 多租戶技術 Multi-Tenancy Technology

マルチテナント（Multi-Tenancy Technology，多租戶技術)：是一種「軟體架構技術」，允許單一軟體同時為多個使用者（租戶）提供服務，而租戶之間的資料和操作完全獨立，具備可擴展性並降低維護成本。

#### 實際應用：

SaaS（軟體即服務，Software as a Service）雲端服務架構，如 Gmail, Salesforce, Dropbox 等，不同租戶之間資料隔離，但共享相同的軟體基礎設施。

### D2 命名規則 Naming Convention

1. 烤肉串命名 `kebab-case`（ケバブケース）
    * 使用小寫字母，單詞之間用連字符（-）連接
2. 駝峰式命名 `camelCase`（キャメルケース)
    * 小駝峰 lowerCamelCase：第一個單詞首字母小寫
    * 大駝峰 UpperCamelCase：首字母都大寫，又稱 PascalCase
3. 蛇形命名 `snake_case`（スネークケース）
    * 小蛇形式 lower_snake_case：全部小寫字母
    * 大蛇形式 UPPER_SNAKE_CASE：全部大寫字母，又稱SCREAMING_SNAKE_CASE

### D1 藍綠部署策略 Blue-Green Deployment

ブルーグリーンデプロイメント（Blue-Green Development，藍綠部署)：是一種「軟體更新策略」，透過設定兩個完全相同但獨立的環境，一旦新功能在綠色環境測試完成，就會將使用者從舊版（藍色）切換至新版（綠色），以達到最小停機時間的目的。

