這篇文章介紹的內容是關於php的面試總結,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
PHP 篇收集了一些常見的基礎、進階面試題。
基礎篇
- Get 與POST 的差異
- 單引號與雙引號的差異
- isset 與empty 的差異
- echo、print_r 、print、var_dump 之間的差異
- 什麼是MVC?
- 傳值和傳引用的差別?
- Cookie 和Session 的差異和關係
> 1. Cookie 在客戶端(瀏覽器),Session 在伺服器端
> 2. Session 比Cookie 安全性更高
> 3. 單一Cookie 保存的資料不能超過4K
> 4. Session 是基於Cookie,如果瀏覽器停用了Cookie,Session 也會失效(但是可以透過其它方式實現,例如在url 中傳遞Session ID)
進階篇
##- 簡述S.O.L.I.D 設計原則
\- | - | -##--- | --- | - --
SRP | 單一職責原則 | 一個類別有且只有一個變更的原因
OCP | 開閉原則 | 能夠不改變類別而產生 可取代基類使用
ISP | 介面隔離原則 | 使用客戶特定的細粒介面
DIP | 依賴反轉原則 | 依賴抽象而非具體實現
#- PHP7 和PHP55 ,具體多了哪些新特性?
> 1. 效能提升了兩倍
> 2. 增加了結合比較運算子(<=>)
> 3. 增加了標量類型宣告、傳回型別宣告
> 4. `try...catch` 增加多條件判斷,更多Error 錯誤可以進行異常處理
> 5. 增加了匿名類,現在支2018/3/5 8:45 :53 持透過new class 來實例化一個匿名類,這可以用來取代一些「用後即焚」的完整類別定義
- 為什麼PHP7 比PHP5 效能提升了?
> 1. 變數儲存位元組減少,減少記憶體佔用,提升變數操作速度
> 2. 改善陣列結構,陣列元素和hash 映射表被分配在同一塊記憶體裡,降低了記憶體佔用、提升了cpu 快取命中率
> 3. 改進了函數的呼叫機制,透過優化參數傳遞的環節,減少了一些指令,提高執行效率
- 簡述一下PHP 垃圾回收機制(GC)
> PHP 5.3 版本之前都是採用引用計數的方式管理內存,PHP 所有的變數存在一個叫 `zval` 的變數容器中,當變數被引用的時候,引用計數會1,變數引用計數變成0時,PHP 將在記憶體中銷毀這個變數。
>
> 但引用計數中的循環引用,引用計數不會消減為 0,就會導致記憶體外洩。
>
> 在5.3 版本之後,做了這些最佳化:
>
> 1. 並不是每次引用計數減少時都進入回收週期,只有根緩衝區滿額後在開始垃圾回收;
> 2. 可以解決循環引用問題;
> 3. 可以總是將記憶體洩漏保持在一個閾值以下。
了解更多可以查看 PHP 手冊,[垃圾回收機制](http://docs.php.net/manual/zh/features.gc.performance-considerations.php)。
- 如何解決PHP 記憶體溢出問題
> 1. 增大PHP 腳本的記憶體分配
> 2. 變數引用之後及時銷毀
#> 3. 將資料分批處理
- Redis、Memecached 這兩者有什麼不同?
> 1. Redis 支援更豐富的資料儲存類型,String、Hash、List、Set 和 Sorted Set。 Memcached 僅支援簡單的 key-value 結構。
> 2. Memcached key-value儲存比 Redis 採用 hash 結構來做 key-value 儲存的記憶體利用率更高。
> 3. Redis 提供了事務的功能,可以保證一系列命令的原子性
> 4. Redis 支援資料的持久化,可以將記憶體中的資料保持在磁碟中
> ; 5. Redis 只使用單核心,而Memcached 可以使用多核心,所以平均每一個核上Redis 在儲存小資料時比Memcached 效能更高。
- Redis 如何持久化?
> 1. RDB 持久化,將 Redis 在記憶體中的狀態儲存到硬碟中,相當於備份資料庫狀態。
> 2. AOF 持久化(Append-Only-File),AOF 持久化是透過保存 Redis 伺服器鎖定執行的寫入狀態來記錄資料庫的。相當於備份資料庫接收到的指令,所有寫入 AOF 的指令都是以 Redis 的協定格式來保存的。
Web 安全防範
- CSRF 是什麼?如何防範?
> CSRF(Cross-site request forgery)通常被叫做「跨站請求偽造」,可以這麼理解:攻擊者盜用用戶身份,從而欺騙伺服器,來完成攻擊請求。
防範措施:
#1. 使用驗證碼
2. 為每個請求新增令牌 token 並驗證
- XSS 是什麼?如何防範?
> XSS(Cross Site Scripting),跨站腳本攻擊,攻擊者往Web 頁面插入惡意Script 程式碼,當使用者瀏覽該頁之時,嵌入其中Web 裡面的Script 程式碼會被執行,從而達到惡意攻擊用戶的目的。
防止 XSS 攻擊的方式有很多,其核心的本質是:永遠不要相信用戶的輸入數據,始終保持對用戶數據的過濾。
- 什麼是 SQL 注入?如何防範?
> SQL 注入是攻擊者透過一些方式欺騙伺服器,結果執行了一些不該被執行的 SQL。
SQL 注入的常見場景
1. 資料庫裡被注入了大量的垃圾數據,導致伺服器運作緩慢、崩潰。
2. 利用SQL 注入揭露了應用程式的隱私權資料
防範措施:
1. 維持對使用者資料的篩選
2. 不要使用動態拼裝SQL
3. 增加輸入驗證,例如驗證碼
4. 對隱私資料加密,禁止明文儲存
擴充閱讀
- [3年PHPer的面試摘要]( http://coffeephp.com/articles/4?utm_source=laravel-china.org)
- [垃圾回收機制](http://docs.php.net/manual/zh/features.gc.performance- considerations.php)
- [S.O.L.I.D 物件導向設計](https://laravel-china.org/articles/4160/solid-object-oriented-design-and-programming-oodoop-notes?order_by=created_at&)
- [淺談IOC--說清楚IOC是什麼](http://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html)
- [Redis和Memcached的差別](https://www.biaodianfu.com/redis-vs-memcached.html)
- [CSRF攻擊與防禦](https://www.cnblogs.com/phpstudy2015-6/p/6771239.html )- [XSS跨站腳本攻擊](https://www.cnblogs.com/phpstudy2015-6/p/6767032.html#_label9)
以上是php的面試總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!