PHP進階之旅

## 基礎篇

* 瞭解大部分數組處理函數

* 字符串處理函數(區別 mb_ 系列函數)

* & 引用,結合案例分析

* == 與 === 區別

* isset 與 empty 區別

* 全部魔術函數理解

* static、$this、self 區別

* private、protected、public、final 區別

* OOP 思想

* 抽象類、接口 分別使用場景

* Trait 是什麼東西

* echo、print、print_r 區別

* __construct 與 __destruct 區別

* static 作用(區分類與函數內)

* __toString() 作用

* 單引號’ 與雙引號 “ 區別

* 常見 HTTP 狀態碼,分別代表什麼含義

* 301 什麼意思 404 呢

 

## 進階篇

* Autoload、Composer 原理

* Session 共享、存活時間

* 異常處理

* 如何 foreach 迭代對象

* 如何數組化操作對象 $obj[key]

* 如何函數化對象 $obj(123);

* yield 是什麼,說個使用場景

* PSR 是什麼,PSR-1, 2, 4, 7

* 如何獲取客戶端 IP 和 服務端 IP 地址

* 如何開啓 PHP 異常提示

* 如何返回一個301重定向

* 如何獲取擴展安裝路徑

* 字符串、數字比較大小的原理,注意 0 開頭的8進制、0x 開頭16進制

* BOM 頭是什麼,怎麼除去

* 什麼是 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(瞭解)

* 深度、廣度優先搜索(瞭解)

 

## 數據結構篇(瞭解)

* 堆、棧特性

* 隊列

* 哈希表

* 鏈表

 

## 對比篇

* 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

    * CRUD

    * JOIN、LEFT JOIN 、RIGHT JOIN、INNER JOIN

    * UNION

    * GROUP BY + COUNT + WHERE 組合案例

    * 常用 MySQL 函數,如:now()、md5()、concat()、uuid()等

    * `1:1`、`1:n`、`n:n` 各自適用場景

    * 數據庫優化手段

        * 索引、聯合索引(命中條件)

        * 分庫分表(`水平分表`、`垂直分表`)

        * 分區

        * 會使用 `explain` 分析 SQL 性能問題,瞭解各參數含義

        * Slow Log(有什麼用,什麼時候需要)

* MSSQL(瞭解)

    * 查詢最新5條數據

* NOSQL

    * 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

    * 源代碼編譯、內存調優

* 緩存

    * 工作中遇***需要緩存,分別簡述爲什麼

* 搜索解決方案

* 性能調優

* 各維度監控方案

* 日誌收集集中處理方案

* 國際化

* 數據庫設計

* 靜態化方案

 

## 框架篇

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

 

## 加分項

* 瞭解常用語言特性,及不同場景適用性。

   * PHP VS Golang

   * PHP VS Python

   * PHP VS JAVA

* 瞭解 PHP 擴展開發

* 熟練掌握 C

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章