如果你現在處於以下幾種狀態,本資料非常適合你:
準備換工作,不知道從哪開始準備……
技術遇到瓶頸,不知道該學什麽……
準備學 PHP,但不知道領域有多深……
基礎篇
了解大部分數組處理函數
字符串處理函數 區別 mb_ 系列函數
& 引用,結合案例分析
== 與 === 區別
isset 與 empty 區別
全部魔術函數理解
static、$this、self 區別
private、protected、public、final 區別
OOP 思想
抽象類、接口 分別使用場景
Trait 是什麽東西
echo、print、print_r 區別(區分出表達式與語句的區別)
__construct 與 __destruct 區別
static 作用(區分類與函數内)手冊 、SOF
__toString() 作用
單引號'與雙引號"區別
常見 HTTP 狀態碼,分別代表什麽含義
301 什麽意思 404 呢?
進階篇
Autoload、Composer 原理 PSR-4 、原理
Session 共享、存活時間
異常處理
如何 foreach 疊代對象
如何數組化操作對象 $obj[key];
如何函數化對象 $obj(123);
yield 是什麽,說個使用場景 yield
PSR 是什麽,PSR-1, 2, 4, 7
如何獲取客戶耑 IP 和服務耑 IP 地址
客戶耑 IP
服務耑 IP
了解代理透傳 實際IP 的概念
如何開啓 PHP 異常提示
php.ini 開啓 display_errors 設置 error_reporting 等級
運行時,使用 ini_set(k, v); 動態設置
如何返回一個301重定向
[WARNING] 一定當心設置 301 後腳本會繼續執行,不要認爲下面不會執行,必要時使用 die or exit
如何獲取擴展安裝路徑
phpinfo(); 頁面查找 extension_dir
命令行 php -i |grep extension_dir
運行時 echo ini_get('extension_dir');
字符串、數字比較大小的原理,注意 0 開頭的8進制、0x 開頭16進制
字符串比較大小,從左(高位)至右,逐個字符 ASCII 比較
BOM 頭是什麽,怎麽除去
0xEF,0xBB,0xBF
檢測、去除
什麽是 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(了解)
深度、廣度優先搜索(了解)
LRU 緩存淘汰算法(了解,Memcached 採用該算法)
數據結構篇(了解)
堆、棧特性
隊列
哈希表
鏈表
對比篇
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
索引、聯合索引(命中條件)
分庫分表(水平分表、垂直分表)
分區
會使用 explain 分析 SQL 性能問題,了解各參數含義
Slow Log(有什麽用,什麽時候需要)
重點理解 type、rows、key
CRUD
JOIN、LEFT JOIN 、RIGHT JOIN、INNER JOIN
UNION
GROUP BY + COUNT + WHERE 組合案例
常用 MySQL 函數,如:now()、md5()、concat()、uuid()等
1:1、1:n、n:n 各自適用場景
了解觸發器是什麽,說個使用場景
數據庫優化手段
MSSQL(了解)
查詢最新5條數據
NOSQL
持久化
支持多種數據類型
可利用 CPU 多核心
内存淘汰機制
集群 Cluster
支持 SQL
性能對比
支持事務
應用場景
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
源代碼編譯、内存調優
緩存
工作中遇到哪裡需要緩存,分別簡述爲什麽
搜索解決方案
性能調優
各維度監控方案
日志收集集中處理方案
國際化
數據庫設計
靜態化方案
畫出常見 PHP 應用架構圖
框架篇
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([]); 區別,會産生什麽問題?如何解決