PHPer、Laravel 面試可能會遇到的問題及答案

今朝發表於2019-02-16

最近社群裡面有一篇文章引起了最多程式猿的關注,Laravel、PHPer 面試可能會遇到的問題,看評論區不少小夥伴們被難倒,對於一些問題同樣難倒了我(其實有很多啦),趁著週末有空,又總結梳理了一遍,順便來答一波題。由於個人技術水平有限,答案或許會有偏差,歡迎大家指正。

PHP模組

  • PHP7 和 PHP5 的區別,具體多了哪些新特性?

    • 效能提升了兩倍

    • 結合比較運算子 (<=>)

    • 標量型別宣告

    • 返回型別宣告

    • try...catch 增加多條件判斷,更多 Error 錯誤可以進行異常處理

    • 匿名類,現在支援通過new class 來例項化一個匿名類,這可以用來替代一些“用後即焚”的完整類定義

    • …… 瞭解更多檢視文章底部連結 PHP7 新特性

  • 為什麼 PHP7 比 PHP5 效能提升了?

    • 變數儲存位元組減小,減少記憶體佔用,提升變數操作速度

    • 改善陣列結構,陣列元素和 hash 對映表被分配在同一塊記憶體裡,降低了記憶體佔用、提升了 cpu 快取命中率

    • 改進了函式的呼叫機制,通過優化引數傳遞的環節,減少了一些指令,提高執行效率

laravel 模組

  • 服務提供者是什麼?

服務提供者是所有 Laravel 應用程式引導啟動的中心, Laravel 的核心伺服器、註冊服務容器繫結、事件監聽、中介軟體、路由註冊以及我們的應用程式都是由服務提供者引導啟動的。

  • IoC 容器是什麼?

IoC(Inversion of Control)譯為 「控制反轉」,也被叫做「依賴注入」(DI)。什麼是「控制反轉」?物件 A 功能依賴於物件 B,但是控制權由物件 A 來控制,控制權被顛倒,所以叫做「控制反轉」,而「依賴注入」是實現 IoC 的方法,就是由 IoC 容器在執行期間,動態地將某種依賴關係注入到物件之中。

其作用簡單來講就是利用依賴關係注入的方式,把複雜的應用程式分解為互相合作的物件,從而降低解決問題的複雜度,實現應用程式程式碼的低耦合、高擴充套件。

Laravel 中的服務容器是用於管理類的依賴和執行依賴注入的工具。

  • Facades 是什麼?

Facades(一種設計模式,通常翻譯為外觀模式)提供了一個”static”(靜態)介面去訪問註冊到 IoC 容器中的類。提供了簡單、易記的語法,而無需記住必須手動注入或配置的長長的類名。此外,由於對 PHP 動態方法的獨特用法,也使測試起來非常容易。

  • Contract 是什麼?

Contract(契約)是 laravel 定義框架提供的核心服務的介面。Contract 和 Facades 並沒有本質意義上的區別,其作用就是使介面低耦合、更簡單。

  • 依賴注入的原理?

這個就不解釋了吧,這是理解 IoC 容器的前提。

  • 什麼是 Composer, 工作原理是什麼?

Composer 是 PHP 的一個依賴管理工具。工作原理就是將已開發好的擴充套件包從 packagist.org composer 倉庫下載到我們的應用程式中,並宣告依賴關係和版本控制。

快取

  • Redis、Memecached 這兩者有什麼區別?

    • Redis 支援更加豐富的資料儲存型別,String、Hash、List、Set 和 Sorted Set。Memcached 僅支援簡單的 key-value 結構。

    • Memcached key-value儲存比 Redis 採用 hash 結構來做 key-value 儲存的記憶體利用率更高。

    • Redis 提供了事務的功能,可以保證一系列命令的原子性

    • Redis 支援資料的持久化,可以將記憶體中的資料保持在磁碟中

    • Redis 只使用單核,而 Memcached 可以使用多核,所以平均每一個核上 Redis 在儲存小資料時比 Memcached 效能更高。

  • Redis 如何實現持久化?

    • RDB 持久化,將 redis 在記憶體中的的狀態儲存到硬碟中,相當於備份資料庫狀態。

    • AOF 持久化(Append-Only-File),AOF 持久化是通過儲存 Redis 伺服器鎖執行的寫狀態來記錄資料庫的。相當於備份資料庫接收到的命令,所有被寫入 AOF 的命令都是以 redis 的協議格式來儲存的。

資料庫

  • 什麼是索引,作用是什麼?常見索引型別有那些?Mysql 建立索引的原則?

索引是一種特殊的檔案,它們包含著對資料表裡所有記錄的引用指標,相當於書本的目錄。其作用就是加快資料的檢索效率。常見索引型別有主鍵、唯一索引、複合索引、全文索引。

  • 索引建立的原則

    • 最左字首原理

    • 選擇區分度高的列作為索引

    • 儘量的擴充套件索引,不要新建索引

  • 高併發如何處理?

    • 使用快取

    • 優化資料庫,提升資料庫使用效率

    • 負載均衡

PHP 的設計模式就不多講了,但是 SOLID 設計原則是每一位 PHPer 都必須要掌握的。

其他問題

遺留又補充了一些 PHPer 的常見面試題留給大神們解答。

  • 分庫分表怎麼設計

  • 如何處理 MySQL 死鎖?

  • 談談你對閉包的理解

  • PHP 記憶體回收機制

  • 如何解決 PHP 記憶體溢位問題

  • 資料庫優化的方法

  • 簡述 Laravel 的執行原理

  • Laravel 路由實現原理

  • cookie 和 session 區別,session 儲存在伺服器的哪裡?服務端是如何獲取客戶端的cookie?

  • 伺服器叢集搭建、負載均衡、反向代理

  • 伺服器常用命令

PS: PHPer 面試關注的技術實力僅僅只是一部分,還有一部分會關注你的內驅力、思考力以及表達能力。其實關注最多的是你是否是妹子、你的顏值還有你是否單身!!!

答案放在了 GitHub 上,歡迎大家 Stat 和 PR.
傳送門:https://github.com/todayqq/ca…

碼字不易,留下你的讚唄

歡迎大家加我的微信:JINCHAOCHAO0220 ,期待和你一起交流、一起成長!

參考文章

相關文章