PHP 面試經常被問到的知識點彙總,對你非常有用
↓ 推薦關注↓
這些是PHP面試經常被問到的知識點做彙總。僅是針對性指出知識點,相應的還需自己查詢相關資料系統學習。我們希望各位能不僅僅瞭解是什麼,還要了解為什麼,以及背後的原理。
如果你現在處於以下幾種狀態,本資料非常適合你:
-
準備換工作,不知道從哪開始準備
-
技術遇到瓶頸,不知道該學什麼
-
準備學 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
orexit
-
如何獲取擴充套件安裝路徑
-
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([]);
區別,會產生什麼問題?如何解決
來源: https://blog.csdn.net/l269798518/article/details/82428601
- EOF -
看完本文有收穫?請分享給更多人
推薦關注「PHP開發者」,提升PHP技能
點贊和在看就是最大的支援 :heart: