## 基礎篇
* 瞭解大部分數組處理函數
* 字符串處理函數(區別 mb_ 系列函數)
* & 引用,結合案例分析
* == 與 === 區別
* isset 與 empty 區別
* 全部魔術函數理解
* static、$this、self 區別
* private、protected、public、final 區別
* OOP 思想
* 抽象類、接口 分別使用場景
* Trait 是什麼東西
* echo、print、print_r 區別
* __construct 與 __destruct 區別
* static 作用(區分類與函數內)
* __toString() 作用
* 單引號’ 與雙引號 “ 區別
* 常見 HTTP 狀態碼,分別代表什麼含義
* 301 什麼意思 404 呢
## 進階篇
* Autoload、Composer 原理
* Session 共享、存活時間
* 異常處理
* 如何 foreach 迭代對象
* 如何數組化操作對象 $obj[key]
* 如何函數化對象 $obj(123);
* yield 是什麼,說個使用場景
* PSR 是什麼,PSR-1, 2, 4, 7
* 如何獲取客戶端 IP 和 服務端 IP 地址
* 如何開啓 PHP 異常提示
* 如何返回一個301重定向
* 如何獲取擴展安裝路徑
* 字符串、數字比較大小的原理,注意 0 開頭的8進制、0x 開頭16進制
* BOM 頭是什麼,怎麼除去
* 什麼是 MVC
* 依賴注入實現原理
* 如何異步執行命令
* 模板引擎是什麼,解決什麼問題、實現原理(Smarty、Twig、Blade)
* 如何實現鏈式操作 `$obj->w()->m()->d();`
* Xhprof 、Xdebug 性能調試工具使用
* 索引數組 `[1, 2]` 與關聯數組 `['k1'=>1, 'k2'=>2]` 有什麼區別
* 依賴注入原理
## 實踐篇
* 給定二維數組,根據某個字段排序
* 如何判斷上傳文件類型,如:僅允許 jpg 上傳
* 不使用臨時變量交換兩個變量的值 `$a=1; $b=2;` => `$a=2; $b=1;`
* strtoupper 在轉換中文時存在亂碼,你如何解決?```php echo strtoupper('ab你好c'); ```
* Websocket、Long-Polling、Server-Sent Events(SSE) 區別
* "Headers already sent" 錯誤是什麼意思,如何避免
## 算法篇
* 快速排序(手寫)
* 冒泡排序(手寫)
* 二分查找(瞭解)
* 查找算法 KMP(瞭解)
* 深度、廣度優先搜索(瞭解)
## 數據結構篇(瞭解)
* 堆、棧特性
* 隊列
* 哈希表
* 鏈表
## 對比篇
* Cookie 與 Session 區別
* `GET` 與 `POST` 區別
* `include` 與 `require` 區別
* `include_once` 與 `require_once` 區別
* Memcached 與 Redis 區別
* MySQL 各個存儲引擎、及區別(一定會問 MyISAM 與 Innodb 區別)
* HTTP 與 HTTPS 區別
* Apache 與 Nginx 區別
* define() 與 const 區別
* traits 與 interfaces 區別 及 traits 解決了什麼痛點?
* Git 與 SVN 區別
## 數據庫篇
* MySQL
* CRUD
* JOIN、LEFT JOIN 、RIGHT JOIN、INNER JOIN
* UNION
* GROUP BY + COUNT + WHERE 組合案例
* 常用 MySQL 函數,如:now()、md5()、concat()、uuid()等
* `1:1`、`1:n`、`n:n` 各自適用場景
* 數據庫優化手段
* 索引、聯合索引(命中條件)
* 分庫分表(`水平分表`、`垂直分表`)
* 分區
* 會使用 `explain` 分析 SQL 性能問題,瞭解各參數含義
* Slow Log(有什麼用,什麼時候需要)
* MSSQL(瞭解)
* 查詢最新5條數據
* NOSQL
* Redis、Memcached、MongoDB
* 對比、適用場景
* 你之前爲了解決什麼問題使用的什麼,爲什麼選它?
## 服務器篇
* 查看 CPU、內存、時間、系統版本等信息
* find 、grep 查找文件
* awk 處理文本
* 查看命令所在目錄
* 自己編譯過 PHP 嗎?如何打開 readline 功能
* 如何查看 PHP 進程的內存、CPU 佔用
* 如何給 PHP 增加一個擴展
* 修改 PHP Session 存儲位置、修改 INI 配置參數
* 負載均衡有哪幾種,挑一種你熟悉的說明其原理
* 數據庫主從複製 M-S 是怎麼同步的?是推還是拉?會不會不同步?怎麼辦
* 如何保障數據的可用性,即使被刪庫了也能恢復到分鐘級別。你會怎麼做。
* 數據庫連接過多,超過最大值,如何優化架構。從哪些方便處理?
* 502 大概什麼什麼原因? 如何排查 504呢?
## 架構篇
* 偏運維(瞭解):
* 負載均衡(Nginx、HAProxy、DNS)
* 主從複製(MySQL、Redis)
* 數據冗餘、備份(MySQL增量、全量 原理)
* 監控檢查(分存活、服務可用兩個維度)
* MySQL、Redis、Memcached Proxy 、Cluster 目的、原理
* 分片
* 高可用集羣
* RAID
* 源代碼編譯、內存調優
* 緩存
* 工作中遇***需要緩存,分別簡述爲什麼
* 搜索解決方案
* 性能調優
* 各維度監控方案
* 日誌收集集中處理方案
* 國際化
* 數據庫設計
* 靜態化方案
## 框架篇
* ThinkPHP(TP)、CodeIgniter(CI)、Zend(非 OOP 系列)
* Yaf、Phalcon(C 擴展系)
* Yii、Laravel、Symfony(純 OOP 系列)
* Swoole、Workerman (網絡編程框架)
* 對比框架區別幾個方向點
* 是否純 OOP
* 類庫加載方式(自己寫 autoload 對比 composer 標準)
* 易用性方向(CI 基礎框架,Laravel 這種就是高開發效率框架以及基礎組件多少)
* 黑盒(相比 C 擴展系)
* 運行速度(如:Laravel 加載一大堆東西)
* 內存佔用
## 設計模式
* 單例模式(重點)
* 工廠模式(重點)
* 觀察者模式(重點)
* 依賴注入(重點)
* 裝飾器模式
* 代理模式
* 組合模式
## 安全篇
* SQL 注入
* XSS 與 CSRF
* 輸入過濾
* Cookie 安全
* 禁用 `mysql_` 系函數
* 數據庫存儲用戶密碼時,應該是怎麼做才安全
* 驗證碼 Session 問題
* 安全的 Session ID (讓即使攔截後,也無法模擬使用)
* 目錄權限安全
* 包含本地與遠程文件
* 文件上傳 PHP 腳本
* `eval` 函數執行腳本
* `disable_functions` 關閉高危函數
* FPM 獨立用戶與組,給每個目錄特定權限
* 瞭解 Hash 與 Encrypt 區別
## 高階篇
* PHP 數組底層實現 (HashTable + Linked list)
* Copy on write 原理,何時 GC
* PHP 進程模型,進程通訊方式,進程線程區別
* yield 核心原理是什麼
* PDO prepare 原理
* PHP 7 與 PHP 5 有什麼區別
* Swoole 適用場景,協程實現方式
## 前端篇
* 原生獲取 DOM 節點,屬性
* 盒子模型
* CSS 文件、style 標籤、行內 style 屬性優先級
* HTML 與 JS 運行順序(頁面 JS 從上到下)
* JS 數組操作
* 類型判斷
* this 作用域
* .map() 與 this 具體使用場景分析
* Cookie 讀寫
* JQuery 操作
* Ajax 請求(同步、異步區別)隨機數禁止緩存
* Bootstrap 有什麼好處
* 跨域請求 N 種解決方案
* 新技術(瞭解)
* ES6
* 模塊化
* 打包
* 構建工具
* vue、react、webpack、
* 前端 mvc
* 優化
* 瀏覽器單域名併發數限制
* 靜態資源緩存 304 (If-Modified-Since 以及 Etag 原理)
* 多個小圖標合併使用 position 定位技術 減少請求
* 靜態資源合爲單次請求 並壓縮
* CDN
* 靜態資源延遲加載技術、預加載技術
* keep-alive
* CSS 在頭部,JS 在尾部的優化(原理)
## 網絡篇
* IP 地址轉 INT
* 192.168.0.1/16 是什麼意思
* DNS 主要作用是什麼?
* IPv4 與 v6 區別
## 網絡編程篇
* TCP 三次握手流程
* TCP、UDP 區別,分別適用場景
* 有什麼辦法能保證 UDP 高可用性(瞭解)
* TCP 粘包如何解決?
* 爲什麼需要心跳?
* 什麼是長連接?
* HTTPS 是怎麼保證安全的?
* 流與數據報的區別
* 進程間通信幾種方式,最快的是哪種?
* `fork()` 會發生什麼?
## API 篇
* RESTful 是什麼
* 如何在不支持 `DELETE` 請求的瀏覽器上兼容 `DELETE` 請求
* 常見 API 的 `APP_ID` `APP_SECRET` 主要作用是什麼?闡述下流程
* API 請求如何保證數據不被篡改?
* JSON 和 JSONP 的區別
* 數據加密和驗籤的區別
* RSA 是什麼
* API 版本兼容怎麼處理
* 限流(木桶、令牌桶)
* OAuth 2 主要用在哪些場景下
* JWT
* PHP 中 `json_encode(['key'=>123]);` 與 `return json_encode([]);` 區別,會產生什麼問題?如何解決
## 加分項
* 瞭解常用語言特性,及不同場景適用性。
* PHP VS Golang
* PHP VS Python
* PHP VS JAVA
* 瞭解 PHP 擴展開發
* 熟練掌握 C