天天看點

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

<a href="http://s3.51cto.com/wyfs02/M00/07/8A/wKiom1nLU1vxv6mFAAAw8SavaC4061.jpg-wh_651x-s_2946727786.jpg" target="_blank"></a>

最近社群裡面有一篇文章引起了最多程式猿的關注,分享一下 Laravel、PHPer

面試可能會遇到的問題,看評論區不少小夥伴們被難倒,對于一些問題同樣難倒了我(其實有很多啦),趁着周末有空,又總結梳理了一遍,順便來答一波題。由于個人技術水準有限,答案或許會有偏差,歡迎大家指正。

PHP子產品

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

性能提升了兩倍

結合比較運算符 (&lt;=&gt;)

标量類型聲明

傳回類型聲明

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.

本文作者:今朝

來源:51CTO