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