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

cyw0413發表於2021-11-03

這些是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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章