作者:駱昊
說明:從專案上線到獲得8w+星標以來,一直收到反饋說基礎部分(前15天的內容)對新手來說是比較困難的,建議有配套影片進行講解。最近把基礎部分的內容重新制作了一個名為“Python-Core-50-Courses”的專案,用更為簡單通俗的方式重寫了這部分內容並附帶了影片講解,初學者可以關注下這個新專案。如果需要Python基礎影片,可以在“B站”搜尋《Python零基礎快速上手》,這套影片是我講課的時候錄製的隨堂影片,畫質尚可、音質一般,但是對初學者應該會有些幫助,歡迎大家留言、評論、發彈幕。學習之後覺得有收穫的小夥伴可以“一鍵三連”來支援UP主(千鋒Python)。國內使用者如果訪問GitHub比較慢的話,可以關注我的知乎號Python-Jack,上面的“從零開始學Python”專欄比較適合初學者,其他的專欄也在持續創作和更新中,歡迎大家關注並點贊評論。
創作不易,感謝大家的打賞支援,這些錢不會用於個人消費(例如:購買咖啡),而是透過騰訊公益、美團公益、水滴籌等平臺捐贈給需要幫助的人(點選瞭解捐贈情況)。需要加入QQ學習群的可以掃描下面的二維碼,三個群加一個即可,不要重複進群。學習群會為大家提供學習資源和問題解答,如果有Python體驗課和行業公開課會提前在群裡通知大家,歡迎大家加入。
專案“Day80~90”部分目前仍在創作中,因為作者平時也擠不出太多時間來寫文件,因此更新的速度比較緩慢,感謝大家的理解。
簡單的說,Python是一個“優雅”、“明確”、“簡單”的程式語言。
- 學習曲線低,非專業人士也能上手
- 開源系統,擁有強大的生態圈
- 解釋型語言,完美的平臺可移植性
- 動態型別語言,支援面向物件和函數語言程式設計
- 程式碼規範程度高,可讀性強
Python在以下領域都有用武之地。
- 後端開發 - Python / Java / Go / PHP
- DevOps - Python / Shell / Ruby
- 資料採集 - Python / C++ / Java
- 量化交易 - Python / C++ / R
- 資料科學 - Python / R / Julia / Matlab
- 機器學習 - Python / R / C++ / Julia
- 自動化測試 - Python / Shell
作為一名Python開發者,根據個人的喜好和職業規劃,可以選擇的就業領域也非常多。
- Python後端開發工程師(伺服器、雲平臺、資料介面)
- Python運維工程師(自動化運維、SRE、DevOps)
- Python資料分析師(資料分析、商業智慧、數字化運營)
- Python資料探勘工程師(機器學習、深度學習、演算法專家)
- Python爬蟲工程師
- Python測試工程師(自動化測試、測試開發)
說明:目前,資料分析和資料探勘是非常熱門的方向,因為不管是網際網路行業還是傳統行業都已經積累了大量的資料,各行各業都需要資料分析師從已有的資料中發現更多的商業價值,從而為企業的決策提供資料的支撐,這就是所謂的資料驅動決策。
給初學者的幾個建議:
- Make English as your working language. (讓英語成為你的工作語言)
- Practice makes perfect. (熟能生巧)
- All experience comes from mistakes. (所有的經驗都源於你犯過的錯誤)
- Don't be one of the leeches. (不要當伸手黨)
- Either outstanding or out. (要麼出眾,要麼出局)
Day01~15 - Python語言基礎
Day01 - 初識Python
- Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
- 搭建程式設計環境 - Windows環境 / Linux環境 / MacOS環境
- 從終端執行Python程式 - Hello, world /
print
函式 / 執行程式 - 使用IDLE - 互動式環境(REPL) / 編寫多行程式碼 / 執行程式 / 退出IDLE
- 註釋 - 註釋的作用 / 單行註釋 / 多行註釋
Day02 - 語言元素
- 程式和進位制 - 指令和程式 / 馮諾依曼機 / 二進位制和十進位制 / 八進位制和十六進位制
- 變數和型別 - 變數的命名 / 變數的使用 /
input
函式 / 檢查變數型別 / 型別轉換 - 數字和字串 - 整數 / 浮點數 / 複數 / 字串 / 字串基本操作 / 字元編碼
- 運算子 - 數學運算子 / 賦值運算子 / 比較運算子 / 邏輯運算子 / 身份運算子 / 運算子的優先順序
- 應用案例 - 華氏溫度轉換成攝氏溫度 / 輸入圓的半徑計算周長和麵積 / 輸入年份判斷是否是閏年
Day03 - 分支結構
- 分支結構的應用場景 - 條件 / 縮排 / 程式碼塊 / 流程圖
- if語句 - 簡單的
if
/if
-else
結構 /if
-elif
-else
結構 / 巢狀的if
- 應用案例 - 使用者身份驗證 / 英制單位與公制單位互換 / 擲骰子決定做什麼 / 百分制成績轉等級制 / 分段函式求值 / 輸入三條邊的長度如果能構成三角形就計算周長和麵積
Day04 - 迴圈結構
- 迴圈結構的應用場景 - 條件 / 縮排 / 程式碼塊 / 流程圖
- while迴圈 - 基本結構 /
break
語句 /continue
語句 - for迴圈 - 基本結構 /
range
型別 / 迴圈中的分支結構 / 巢狀的迴圈 / 提前結束程式 - 應用案例 - 1~100求和 / 判斷素數 / 猜數字遊戲 / 列印九九表 / 列印三角形圖案 / 猴子吃桃 / 百錢百雞
Day05 - 構造程式邏輯
- 經典案例:水仙花數 / 百錢百雞 / Craps賭博遊戲
- 練習題目:斐波那契數列 / 完美數 / 素數
Day06 - 函式和模組的使用
- 函式的作用 - 程式碼的壞味道 / 用函式封裝功能模組
- 定義函式 -
def
關鍵字 / 函式名 / 引數列表 /return
語句 / 呼叫自定義函式 - 呼叫函式 - Python內建函式 / 匯入模組和函式
- 函式的引數 - 預設引數 / 可變引數 / 關鍵字引數 / 命名關鍵字引數
- 函式的返回值 - 沒有返回值 / 返回單個值 / 返回多個值
- 作用域問題 - 區域性作用域 / 巢狀作用域 / 全域性作用域 / 內建作用域 / 和作用域相關的關鍵字
- 用模組管理函式 - 模組的概念 / 用自定義模組管理函式 / 命名衝突的時候會怎樣(同一個模組和不同的模組)
Day07 - 字串和常用資料結構
- 字串的使用 - 計算長度 / 下標運算 / 切片 / 常用方法
- 列表基本用法 - 定義列表 / 用下表訪問元素 / 下標越界 / 新增元素 / 刪除元素 / 修改元素 / 切片 / 迴圈遍歷
- 列表常用操作 - 連線 / 複製(複製元素和複製陣列) / 長度 / 排序 / 倒轉 / 查詢
- 生成列表 - 使用
range
建立數字列表 / 生成表示式 / 生成器 - 元組的使用 - 定義元組 / 使用元組中的值 / 修改元組變數 / 元組和列表轉換
- 集合基本用法 - 集合和列表的區別 / 建立集合 / 新增元素 / 刪除元素 / 清空
- 集合常用操作 - 交集 / 並集 / 差集 / 對稱差 / 子集 / 超集
- 字典的基本用法 - 字典的特點 / 建立字典 / 新增元素 / 刪除元素 / 取值 / 清空
- 字典常用操作 -
keys
方法 /values
方法 /items
方法 /setdefault
方法 - 基礎練習 - 跑馬燈效果 / 列表找最大元素 / 統計考試成績的平均分 / Fibonacci數列 / 楊輝三角
- 綜合案例 - 雙色球選號 / 井字棋
Day08 - 面向物件程式設計基礎
- 類和物件 - 什麼是類 / 什麼是物件 / 面向物件其他相關概念
- 定義類 - 基本結構 / 屬性和方法 / 構造器 / 析構器 /
__str__
方法 - 使用物件 - 建立物件 / 給物件發訊息
- 面向物件的四大支柱 - 抽象 / 封裝 / 繼承 / 多型
- 基礎練習 - 定義學生類 / 定義時鐘類 / 定義圖形類 / 定義汽車類
Day09 - 面向物件進階
- 屬性 - 類屬性 / 例項屬性 / 屬性訪問器 / 屬性修改器 / 屬性刪除器 / 使用
__slots__
- 類中的方法 - 例項方法 / 類方法 / 靜態方法
- 運算子過載 -
__add__
/__sub__
/__or__
/__getitem__
/__setitem__
/__len__
/__repr__
/__gt__
/__lt__
/__le__
/__ge__
/__eq__
/__ne__
/__contains__
- 類(的物件)之間的關係 - 關聯 / 繼承 / 依賴
- 繼承和多型 - 什麼是繼承 / 繼承的語法 / 呼叫父類方法 / 方法重寫 / 型別判定 / 多重繼承 / 菱形繼承(鑽石繼承)和C3演算法
- 綜合案例 - 工資結算系統 / 圖書自動折扣系統 / 自定義分數類
Day10 - 圖形使用者介面和遊戲開發
- 使用
tkinter
開發GUI程式 - 使用
pygame
三方庫開發遊戲應用 - “大球吃小球”遊戲
Day11 - 檔案和異常
- 讀檔案 - 讀取整個檔案 / 逐行讀取 / 檔案路徑
- 寫檔案 - 覆蓋寫入 / 追加寫入 / 文字檔案 / 二進位制檔案
- 異常處理 - 異常機制的重要性 /
try
-except
程式碼塊 /else
程式碼塊 /finally
程式碼塊 / 內建異常型別 / 異常棧 /raise
語句 - 資料持久化 - CSV檔案概述 /
csv
模組的應用 / JSON資料格式 /json
模組的應用
Day12 - 字串和正則表示式
- 字串高階操作 - 跳脫字元 / 原始字串 / 多行字串 /
in
和not in
運算子 /is_xxx
方法 /join
和split
方法 /strip
相關方法 /pyperclip
模組 / 不變字串和可變字串 /StringIO
的使用 - 正則表示式入門 - 正則表示式的作用 / 元字元 / 轉義 / 量詞 / 分組 / 零寬斷言 /貪婪匹配與惰性匹配懶惰 / 使用
re
模組實現正則表示式操作(匹配、搜尋、替換、捕獲) - 使用正則表示式 -
re
模組 /compile
函式 /group
和groups
方法 /match
方法 /search
方法 /findall
和finditer
方法 /sub
和subn
方法 /split
方法 - 應用案例 - 使用正則表示式驗證輸入的字串
Day13 - 程序和執行緒
- 程序和執行緒的概念 - 什麼是程序 / 什麼是執行緒 / 多執行緒的應用場景
- 使用程序 -
fork
函式 /multiprocessing
模組 / 程序池 / 程序間通訊 - 使用執行緒 -
threading
模組 /Thread
類 /RLock
類 /Condition
類 / 執行緒池
Day14 - 網路程式設計入門和網路應用開發
- 計算機網路基礎 - 計算機網路發展史 / “TCP-IP”模型 / IP地址 / 埠 / 協議 / 其他相關概念
- 網路應用模式 - “客戶端-伺服器”模式 / “瀏覽器-伺服器”模式
- 基於HTTP協議訪問網路資源 - 網路API概述 / 訪問URL /
requests
三方庫 / 解析JSON格式資料 - Python網路程式設計 - 套接字的概念 /
socket
模組 /socket
函式 / 建立TCP伺服器 / 建立TCP客戶端 / 建立UDP伺服器 / 建立UDP客戶端 - 電子郵件 - SMTP協議 / POP3協議 / IMAP協議 /
smtplib
模組 /poplib
模組 /imaplib
模組 - 簡訊服務 - 呼叫簡訊服務閘道器
Day15 - 影象和文件處理
- 用Pillow處理圖片 - 圖片讀寫 / 圖片合成 / 幾何變換 / 色彩轉換 / 濾鏡效果
- 讀寫Word文件 - 文字內容的處理 / 段落 / 頁首和頁尾 / 樣式的處理
- 讀寫Excel檔案 -
xlrd
/xlwt
/openpyxl
Day16~Day20 - Python語言進階
- 常用資料結構
- 函式的高階用法 - “一等公民” / 高階函式 / Lambda函式 / 作用域和閉包 / 裝飾器
- 面向物件高階知識 - “三大支柱” / 類與類之間的關係 / 垃圾回收 / 魔術屬性和方法 / 混入 / 元類 / 面向物件設計原則 / GoF設計模式
- 迭代器和生成器 - 相關魔術方法 / 建立生成器的兩種方式 /
- 併發和非同步程式設計 - 多執行緒 / 多程序 / 非同步IO /
async
和awai
t
Day21~30 - Web前端入門
- 用HTML標籤承載頁面內容
- 用CSS渲染頁面
- 用JavaScript處理互動式行為
- jQuery入門和提高
- Vue.js入門
- Element的使用
- Bootstrap的使用
Day31~35 - 玩轉Linux作業系統
- 作業系統發展史和Linux概述
- Linux基礎命令
- Linux中的實用程式
- Linux的檔案系統
- Vim編輯器的應用
- 環境變數和Shell程式設計
- 軟體的安裝和服務的配置
- 網路訪問和管理
- 其他相關內容
Day36~40 - 資料庫基礎和進階
- 關係型資料庫概述
- MySQL的安裝和使用
- SQL的使用
- DDL - 資料定義語言 -
create
/drop
/alter
- DML - 資料操作語言 -
insert
/delete
/update
- DQL - 資料查詢語言 -
select
- DCL - 資料控制語言 -
grant
/revoke
- MySQL新特性
- 視窗函式的應用
- JSON資料型別
- 相關知識
- 資料完整性和一致性
- 檢視、函式、過程、觸發器
- 事務和鎖
- 執行計劃和索引
- 正規化理論和反正規化設計
- 在Python中操作MySQL
Day41~55 - 實戰Django
Day41 - Django快速上手
- Web應用工作機制
- HTTP請求和響應
- Django框架概述
- 5分鐘快速上手
Day42 - 深入模型
- 關係型資料庫配置
- 使用ORM完成對模型的CRUD操作
- 管理後臺的使用
- Django模型最佳實踐
- 模型定義參考
Day43 - 靜態資源和Ajax請求
- 載入靜態資源
- Ajax概述
- 用Ajax實現投票功能
Day44 - Cookie和Session
- 實現使用者跟蹤
- cookie和session的關係
- Django框架對session的支援
- 檢視函式中的cookie讀寫操作
Day45 - 報表和日誌
- 透過
HttpResponse
修改響應頭 - 使用
StreamingHttpResponse
處理大檔案 - 使用
xlwt
生成Excel報表 - 使用
reportlab
生成PDF報表 - 使用ECharts生成前端圖表
Day46 - 日誌和除錯工具欄
- 配置日誌
- 配置Django-Debug-Toolbar
- 最佳化ORM程式碼
Day47 - 中介軟體的應用
- 什麼是中介軟體
- Django框架內建的中介軟體
- 自定義中介軟體及其應用場景
Day48 - 前後端分離開發入門
- 返回JSON格式的資料
- 用Vue.js渲染頁面
Day49 - RESTful架構和DRF入門
Day50 - RESTful架構和DRF進階
Day51 - 使用快取
-
網站最佳化第一定律
-
在Django專案中使用Redis提供快取服務
-
在檢視函式中讀寫快取
-
使用裝飾器實現頁面快取
-
為資料介面提供快取服務
Day52 - 接入三方平臺
- 檔案上傳表單控制元件和圖片檔案預覽
- 伺服器端如何處理上傳的檔案
Day53 - 非同步任務和定時任務
- 網站最佳化第二定律
- 配置訊息佇列服務
- 在專案中使用Celery實現任務非同步化
- 在專案中使用Celery實現定時任務
Day54 - 單元測試
Day55 - 專案上線
- Python中的單元測試
- Django框架對單元測試的支援
- 使用版本控制系統
- 配置和使用uWSGI
- 動靜分離和Nginx配置
- 配置HTTPS
- 配置域名解析
Day56~60 - 用FastAPI開發資料介面
- FastAPI五分鐘上手
- 請求和響應
- 接入關係型資料庫
- 依賴注入
- 中介軟體
- 非同步化
- 虛擬化部署(Docker)
- 專案實戰:車輛違章查詢專案
Day61~65 - 爬蟲開發
Day61 - 網路資料採集概述
- 網路爬蟲的概念及其應用領域
- 網路爬蟲的合法性探討
- 開發網路爬蟲的相關工具
- 一個爬蟲程式的構成
- 使用
requests
三方庫實現資料抓取 - 頁面解析的三種方式
- 正則表示式解析
- XPath解析
- CSS選擇器解析
Day64 - 使用Selenium抓取網頁動態內容
Day65 - 爬蟲框架Scrapy簡介
Day66~80 - 資料分析
Day66 - 資料分析概述
Day67 - 環境準備
Day68 - NumPy的應用-1
Day69 - NumPy的應用-2
Day70 - Pandas的應用-1
Day71 - Pandas的應用-2
Day72 - Pandas的應用-3
Day73 - Pandas的應用-4
Day74 - Pandas的應用-5
Day75 - 資料視覺化-1
Day76 - 資料視覺化-2
Day77 - 機率統計基礎
Day78 - 方差分析和引數估計
Day79 - 相關和迴歸
Day80 - 資料分析方法論
Day81~90 - 機器學習和深度學習
Day81 - 機器學習基礎
Day82 - k最近鄰分類
Day83 - 決策樹
Day84 - 貝葉斯分類
Day85 - 支援向量機
Day86 - K-均值聚類
Day87 - 迴歸分析
Day88 - 深度學習入門
Day89 - PyTorch概述
Day90 - PyTorch實戰
Day91~100 - 團隊專案開發
第91天:團隊專案開發的問題和解決方案
-
軟體過程模型
-
經典過程模型(瀑布模型)
- 可行性分析(研究做還是不做),輸出《可行性分析報告》。
- 需求分析(研究做什麼),輸出《需求規格說明書》和產品介面原型圖。
- 概要設計和詳細設計,輸出概念模型圖(ER圖)、物理模型圖、類圖、時序圖等。
- 編碼 / 測試。
- 上線 / 維護。
瀑布模型最大的缺點是無法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
-
敏捷開發(Scrum)- 產品所有者、Scrum Master、研發人員 - Sprint
- 產品的Backlog(使用者故事、產品原型)。
- 計劃會議(評估和預算)。
- 日常開發(站立會議、番茄工作法、結對程式設計、測試先行、程式碼重構……)。
- 修復bug(問題描述、重現步驟、測試人員、被指派人)。
- 釋出版本。
- 評審會議(Showcase,使用者需要參與)。
- 回顧會議(對當前迭代週期做一個總結)。
補充:敏捷軟體開發宣言
- 個體和互動 高於 流程和工具
- 工作的軟體 高於 詳盡的文件
- 客戶合作 高於 合同談判
- 響應變化 高於 遵循計劃
角色:產品所有者(決定做什麼,能對需求拍板的人)、團隊負責人(解決各種問題,專注如何更好的工作,遮蔽外部對開發團隊的影響)、開發團隊(專案執行人員,具體指開發人員和測試人員)。
準備工作:商業案例和資金、合同、憧憬、初始產品需求、初始釋出計劃、入股、組建團隊。
敏捷團隊通常人數為8-10人。
工作量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘量把每個工作分解到最小任務量,最小任務量標準為工作時間不能超過兩天,然後估算總體專案時間。把每個任務都貼在看板上面,看板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。
-
-
專案團隊組建
-
團隊的構成和角色
說明:謝謝付祥英女士幫助我繪製了下面這張精美的公司組織架構圖。
-
程式設計規範和程式碼審查(
flake8
、pylint
) -
Python中的一些“慣例”(請參考《Python慣例-如何編寫Pythonic的程式碼》)
-
影響程式碼可讀性的原因:
- 程式碼註釋太少或者沒有註釋
- 程式碼破壞了語言的最佳實踐
- 反模式程式設計(義大利麵程式碼、複製-黏貼程式設計、自負程式設計、……)
-
-
團隊開發工具介紹
請參考《團隊專案開發的問題和解決方案》。
-
選題範圍設定
-
CMS(使用者端):新聞聚合網站、問答/分享社群、影評/書評網站等。
-
MIS(使用者端+管理端):KMS、KPI考核系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
-
App後臺(管理端+資料介面):二手交易類、報刊雜誌類、小眾電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
-
其他型別:自身行業背景和工作經驗、業務容易理解和把控。
-
-
需求理解、模組劃分和任務分配
- 需求理解:頭腦風暴和競品分析。
- 模組劃分:畫思維導圖(XMind),每個模組是一個枝節點,每個具體的功能是一個葉節點(用動詞表述),需要確保每個葉節點無法再生出新節點,確定每個葉子節點的重要性、優先順序和工作量。
- 任務分配:由專案負責人根據上面的指標為每個團隊成員分配任務。
-
制定專案進度表(每日更新)
模組 功能 人員 狀態 完成 工時 計劃開始 實際開始 計劃結束 實際結束 備註 評論 新增評論 王大錘 正在進行 50% 4 2018/8/7 2018/8/7 刪除評論 王大錘 等待 0% 2 2018/8/7 2018/8/7 檢視評論 白元芳 正在進行 20% 4 2018/8/7 2018/8/7 需要進行程式碼審查 評論投票 白元芳 等待 0% 4 2018/8/8 2018/8/8 -
OOAD和資料庫設計
-
UML(統一建模語言)的類圖
-
透過模型建立表(正向工程),例如在Django專案中可以透過下面的命令建立二維表。
python manage.py makemigrations app python manage.py migrate
-
使用PowerDesigner繪製物理模型圖。
-
透過資料表建立模型(反向工程),例如在Django專案中可以透過下面的命令生成模型。
python manage.py inspectdb > app/models.py
第92天:Docker容器詳解
- Docker簡介
- 安裝Docker
- 使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
- 構建Docker映象(Dockerfile的編寫和相關指令)
- 容器編排(Docker-compose)
- 叢集管理(Kubernetes)
第93天:MySQL效能最佳化
第94天:網路API介面設計
- 資料庫的配置(多資料庫、主從複製、資料庫路由)
- 快取的配置(分割槽快取、鍵設定、超時設定、主從複製、故障恢復(哨兵))
- 日誌的配置
- 分析和除錯(Django-Debug-ToolBar)
- 好用的Python模組(日期計算、影象處理、資料加密、三方API)
- RESTful架構
- API介面文件的撰寫
- django-REST-framework的應用
- 使用快取緩解資料庫壓力 - Redis
- 使用訊息佇列做解耦合和削峰 - Celery + RabbitMQ
第96天:軟體測試和自動化測試
- 測試的種類
- 編寫單元測試(
unittest
、pytest
、nose2
、tox
、ddt
、……) - 測試覆蓋率(
coverage
)
- 部署前的準備工作
- 關鍵設定(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 快取 / 資料庫)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日誌相關配置
- Linux常用命令回顧
- Linux常用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- Gunicorn和uWSGI的比較
- 對於不需要大量定製化的簡單應用程式,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的預設引數就已經能夠適應大多數應用程式。
- uWSGI支援異構部署。
- 由於Nginx本身支援uWSGI,在線上一般都將Nginx和uWSGI捆綁在一起部署,而且uWSGI屬於功能齊全且高度定製的WSGI中介軟體。
- 在效能上,Gunicorn和uWSGI其實表現相當。
- Gunicorn和uWSGI的比較
- 使用虛擬化技術(Docker)部署測試環境和生產環境
- AB的使用
- SQLslap的使用
- sysbench的使用
- 使用Shell和Python進行自動化測試
- 使用Selenium實現自動化測試
- Selenium IDE
- Selenium WebDriver
- Selenium Remote Control
- 測試工具Robot Framework介紹
第97天:電商網站技術要點剖析
第98天:專案部署上線和效能調優
- MySQL資料庫調優
- Web伺服器效能最佳化
- Nginx負載均衡配置
- Keepalived實現高可用
- 程式碼效能調優
- 多執行緒
- 非同步化
- 靜態資源訪問最佳化
- 雲端儲存
- CDN