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 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([]); 區別,會產生什麼問題?如何解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007281/viewspace-2840394/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對應的前端知識總結歸納(常被問到的知識)前端
- IOS面試經常被問到的問題iOS面試
- 3個經常被問到的 JavaScript 面試題JavaScript面試題
- PHP入門易忘知識點彙總PHP
- JAVA高階面試必過知識點彙總Java面試
- js知識點彙總JS
- SVM知識點彙總
- JavaScript知識點彙總JavaScript
- java知識點彙總Java
- 前端小知識點彙總前端
- MySQL MVCC知識點彙總MySqlMVC
- 自己整理的php面試知識點PHP面試
- C++知識點大彙總C++
- java異常知識點彙總Java
- MySQL基礎知識點彙總MySql
- 經常被人問起的API介面彙總,含免費次數API
- 非常全面的Linux知識點總結Linux
- ES6面試、複習乾貨知識點彙總(全)面試
- Java面試常被問到的題目+解答Java面試
- CSS知識點面試總結CSS面試
- java面試知識點總結Java面試
- Java 面試知識點總結Java面試
- PHP 面試知識點整理歸納PHP面試
- SDWebImage面試常問點知識點Web面試
- 面試總結:Promise有關面試的知識點。面試Promise
- Java常見知識點彙總(⑳)——鎖Java
- Java常見知識點彙總(②)——StaticJava
- Python入門知識點彙總Python
- C/C++重要知識點彙總C++
- 前端知識點彙總—面試看這一篇就夠了前端面試
- 前端經典的JavaScript面試知識總結前端JavaScript面試
- Redis知識點&面試題總結Redis面試題
- 不想被面試官虐?Android知識彙總,你必須知道的Handler八大問題!面試Android
- PHP物件相關知識點的總結PHP物件
- MySQL知識彙總MySql
- Docker 知識彙總Docker
- 前端知識彙總前端
- Java常見知識點彙總(⑦)——集合框架Java框架