PHP 面試經常被問到的知識點彙總,對你非常有用

語言: CN / TW / HK

推薦關注↓

這些是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([]);  區別,會產生什麼問題?如何解決

來源: https://blog.csdn.net/l269798518/article/details/82428601

- EOF -

看完本文有收穫?請分享給更多人

推薦關注「PHP開發者」,提升PHP技能

點贊和在看就是最大的支援 :heart: