最近社群裡面有一篇文章引起了最多程式猿的關注,分享一下 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.
傳送門:github.com/todayqq/cas…
碼字不易,留下你的讚唄
參考文章
掘金秋招徵文活動連結:juejin.im/post/59aa74…