# 每日 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,藍綠部署):是一種「軟體更新策略」,透過設定兩個完全相同但獨立的環境,一旦新功能在綠色環境測試完成,就會將使用者從舊版(藍色)切換至新版(綠色),以達到最小停機時間的目的。