PHPer面試指南-PHP 篇

本書的 GitHub 地址: https://github.com/todayqq/PH...

PHP 篇收集了一些常見的基礎、進階面試題,基礎的面試題再也不做答。php

基礎篇

  • Get 和 POST 的區別
  • Cookie 和 Session 的區別和關係
  • 單引號和雙引號的區別
  • isset 和 empty 的區別
  • echo、print_r、print、var_dump 之間的區別
  • 什麼是 MVC?
  • 傳值和傳引用的區別?

進階篇

  • 簡述 S.O.L.I.D 設計原則
SRP 單一職責原則 一個類有且只有一個更改的緣由
OCP 開閉原則 可以不更改類而擴展類的行爲
LSP 里氏替換原則 派生類能夠替換基類使用
ISP 接口隔離原則 使用客戶端特定的細粒度接口
DIP 依賴反轉原則 依賴抽象而不是具體實現
  • PHP7 和 PHP5 的區別,具體多了哪些新特性?
  1. 性能提高了兩倍
  2. 增長告終合比較運算符 (<=>)
  3. 增長了標量類型聲明、返回類型聲明
  4. try...catch 增長多條件判斷,更多 Error 錯誤能夠進行異常處理
  5. 增長了匿名類,如今支持經過new class 來實例化一個匿名類,這能夠用來替代一些「用後即焚」的完整類定義
  • 爲何 PHP7 比 PHP5 性能提高了?
  1. 變量存儲字節減少,減小內存佔用,提高變量操做速度
  2. 改善數組結構,數組元素和 hash 映射表被分配在同一塊內存裏,下降了內存佔用、提高了 cpu 緩存命中率
  3. 改進了函數的調用機制,經過優化參數傳遞的環節,減小了一些指令,提升執行效率
  • 簡述一下 PHP 垃圾回收機制(GC)

PHP 5.3 版本以前都是採用引用計數的方式管理內存,PHP 全部的變量存在一個叫 zval 的變量容器中,當變量被引用的時候,引用計數會+1,變量引用計數變爲0時,PHP 將在內存中銷燬這個變量。html

可是引用計數中的循環引用,引用計數不會消減爲 0,就會致使內存泄露。laravel

在 5.3 版本以後,作了這些優化:git

  1. 並非每次引用計數減小時都進入回收週期,只有根緩衝區滿額後在開始垃圾回收;
  2. 能夠解決循環引用問題;
  3. 能夠總將內存泄露保持在一個閾值如下。

瞭解更多能夠查看 PHP 手冊,垃圾回收機制github

  • 如何解決 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 的協議格式來保存的。

擴展閱讀

相關文章
相關標籤/搜索