PHPer、Laravel面試可能遇到的問(wèn)題及答案
最近社區(qū)里面有一篇文章引起了最多程序猿的關(guān)注,分享一下 Laravel、PHPer 面試可能會(huì)遇到的問(wèn)題,看評(píng)論區(qū)不少小伙伴們被難倒,對(duì)于一些問(wèn)題同樣難倒了我(其實(shí)有很多啦),趁著周末有空,又總結(jié)梳理了一遍,順便來(lái)答一波題。由于個(gè)人技術(shù)水平有限,答案或許會(huì)有偏差,歡迎大家指正。
PHP模塊
- PHP7 和 PHP5 的區(qū)別,具體多了哪些新特性?
    
- 性能提升了兩倍
 - 結(jié)合比較運(yùn)算符 (<=>)
 - 標(biāo)量類(lèi)型聲明
 - 返回類(lèi)型聲明
 - try...catch 增加多條件判斷,更多 Error 錯(cuò)誤可以進(jìn)行異常處理
 - 匿名類(lèi),現(xiàn)在支持通過(guò)new class 來(lái)實(shí)例化一個(gè)匿名類(lèi),這可以用來(lái)替代一些“用后即焚”的完整類(lèi)定義
 - …… 了解更多查看文章底部鏈接 PHP7 新特性
 
 - 為什么 PHP7 比 PHP5 性能提升了?
    
- 變量存儲(chǔ)字節(jié)減小,減少內(nèi)存占用,提升變量操作速度
 - 改善數(shù)組結(jié)構(gòu),數(shù)組元素和 hash 映射表被分配在同一塊內(nèi)存里,降低了內(nèi)存占用、提升了 cpu 緩存***率
 - 改進(jìn)了函數(shù)的調(diào)用機(jī)制,通過(guò)優(yōu)化參數(shù)傳遞的環(huán)節(jié),減少了一些指令,提高執(zhí)行效率
 
 
laravel 模塊
- 服務(wù)提供者是什么?
 
服務(wù)提供者是所有 Laravel 應(yīng)用程序引導(dǎo)啟動(dòng)的中心, Laravel 的核心服務(wù)器、注冊(cè)服務(wù)容器綁定、事件監(jiān)聽(tīng)、中間件、路由注冊(cè)以及我們的應(yīng)用程序都是由服務(wù)提供者引導(dǎo)啟動(dòng)的。
- IoC 容器是什么?
 
IoC(Inversion of Control)譯為 「控制反轉(zhuǎn)」,也被叫做「依賴(lài)注入」(DI)。什么是「控制反轉(zhuǎn)」?對(duì)象 A 功能依賴(lài)于對(duì)象 B,但是控制權(quán)由對(duì)象 A 來(lái)控制,控制權(quán)被顛倒,所以叫做「控制反轉(zhuǎn)」,而「依賴(lài)注入」是實(shí)現(xiàn) IoC 的方法,就是由 IoC 容器在運(yùn)行期間,動(dòng)態(tài)地將某種依賴(lài)關(guān)系注入到對(duì)象之中。
其作用簡(jiǎn)單來(lái)講就是利用依賴(lài)關(guān)系注入的方式,把復(fù)雜的應(yīng)用程序分解為互相合作的對(duì)象,從而降低解決問(wèn)題的復(fù)雜度,實(shí)現(xiàn)應(yīng)用程序代碼的低耦合、高擴(kuò)展。
Laravel 中的服務(wù)容器是用于管理類(lèi)的依賴(lài)和執(zhí)行依賴(lài)注入的工具。
- Facades 是什么?
 
Facades(一種設(shè)計(jì)模式,通常翻譯為外觀模式)提供了一個(gè)"static"(靜態(tài))接口去訪問(wèn)注冊(cè)到 IoC 容器中的類(lèi)。提供了簡(jiǎn)單、易記的語(yǔ)法,而無(wú)需記住必須手動(dòng)注入或配置的長(zhǎng)長(zhǎng)的類(lèi)名。此外,由于對(duì) PHP 動(dòng)態(tài)方法的獨(dú)特用法,也使測(cè)試起來(lái)非常容易。
- Contract 是什么?
 
Contract(契約)是 laravel 定義框架提供的核心服務(wù)的接口。Contract 和 Facades 并沒(méi)有本質(zhì)意義上的區(qū)別,其作用就是使接口低耦合、更簡(jiǎn)單。
- 依賴(lài)注入的原理?
 
這個(gè)就不解釋了吧,這是理解 IoC 容器的前提。
- 什么是 Composer, 工作原理是什么?
 
Composer 是 PHP 的一個(gè)依賴(lài)管理工具。工作原理就是將已開(kāi)發(fā)好的擴(kuò)展包從 packagist.org composer 倉(cāng)庫(kù)下載到我們的應(yīng)用程序中,并聲明依賴(lài)關(guān)系和版本控制。
緩存
- Redis、Memecached 這兩者有什么區(qū)別?
    
- Redis 支持更加豐富的數(shù)據(jù)存儲(chǔ)類(lèi)型,String、Hash、List、Set 和 Sorted Set。Memcached 僅支持簡(jiǎn)單的 key-value 結(jié)構(gòu)。
 - Memcached key-value存儲(chǔ)比 Redis 采用 hash 結(jié)構(gòu)來(lái)做 key-value 存儲(chǔ)的內(nèi)存利用率更高。
 - Redis 提供了事務(wù)的功能,可以保證一系列命令的原子性
 - Redis 支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中
 - Redis 只使用單核,而 Memcached 可以使用多核,所以平均每一個(gè)核上 Redis 在存儲(chǔ)小數(shù)據(jù)時(shí)比 Memcached 性能更高。
 
 - Redis 如何實(shí)現(xiàn)持久化?
    
- RDB 持久化,將 redis 在內(nèi)存中的的狀態(tài)保存到硬盤(pán)中,相當(dāng)于備份數(shù)據(jù)庫(kù)狀態(tài)。
 - AOF 持久化(Append-Only-File),AOF 持久化是通過(guò)保存 Redis 服務(wù)器鎖執(zhí)行的寫(xiě)狀態(tài)來(lái)記錄數(shù)據(jù)庫(kù)的。相當(dāng)于備份數(shù)據(jù)庫(kù)接收到的命令,所有被寫(xiě)入 AOF 的命令都是以 redis 的協(xié)議格式來(lái)保存的。
 
 
數(shù)據(jù)庫(kù)
- 什么是索引,作用是什么?常見(jiàn)索引類(lèi)型有那些?Mysql 建立索引的原則?
 
索引是一種特殊的文件,它們包含著對(duì)數(shù)據(jù)表里所有記錄的引用指針,相當(dāng)于書(shū)本的目錄。其作用就是加快數(shù)據(jù)的檢索效率。常見(jiàn)索引類(lèi)型有主鍵、***索引、復(fù)合索引、全文索引。
- 索引創(chuàng)建的原則
    
- 最左前綴原理
 - 選擇區(qū)分度高的列作為索引
 - 盡量的擴(kuò)展索引,不要新建索引
 
 - 高并發(fā)如何處理?
    
- 使用緩存
 - 優(yōu)化數(shù)據(jù)庫(kù),提升數(shù)據(jù)庫(kù)使用效率
 - 負(fù)載均衡
 
 
PHP 的設(shè)計(jì)模式就不多講了,但是 SOLID 設(shè)計(jì)原則是每一位 PHPer 都必須要掌握的。
其他問(wèn)題
遺留又補(bǔ)充了一些 PHPer 的常見(jiàn)面試題留給大神們解答。
- 分庫(kù)分表怎么設(shè)計(jì)
 - 如何處理 MySQL 死鎖?
 - 談?wù)勀銓?duì)閉包的理解
 - PHP 內(nèi)存回收機(jī)制
 - 如何解決 PHP 內(nèi)存溢出問(wèn)題
 - 數(shù)據(jù)庫(kù)優(yōu)化的方法
 - 簡(jiǎn)述 Laravel 的運(yùn)行原理
 - Laravel 路由實(shí)現(xiàn)原理
 - cookie 和 session 區(qū)別,session 保存在服務(wù)器的哪里?服務(wù)端是如何獲取客戶端的cookie?
 - 服務(wù)器集群搭建、負(fù)載均衡、反向代理
 - 服務(wù)器常用命令
 
PS: PHPer 面試關(guān)注的技術(shù)實(shí)力僅僅只是一部分,還有一部分會(huì)關(guān)注你的內(nèi)驅(qū)力、思考力以及表達(dá)能力。
答案放在了 GitHub 上,歡迎大家 Stat 和 PR.
傳送門(mén):https://github.com/todayqq/ca...















 
 
 




 
 
 
 