溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP面試題及答案有哪些

發(fā)布時間:2022-12-14 17:46:15 來源:億速云 閱讀:124 作者:iii 欄目:編程語言

這篇文章主要講解了“PHP面試題及答案有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP面試題及答案有哪些”吧!

一.php的框架有哪些

php的框架:1、Laravel,Laravel是一款免費并且開源的PHP應(yīng)用框架。2、Phalcon,Phalcon是運行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項目準(zhǔn)備的PHP框架。4、Yii,Yii是一款快速、安全和專業(yè)的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強(qiáng)大的PHP框架。

二.面向?qū)ο?/h3>

2.1 你理解的面向?qū)ο螅?/p>

一切皆對象。是計算機(jī)模擬現(xiàn)實世界的一種方式,面向?qū)ο蟮娜筇卣鳎悍庋b、繼承、多態(tài)。通過對成員屬性和成員方法進(jìn)行操作,來使對象具有行為屬性和行為方法。

2.2 在PHP中有幾種類不能通過 new 出來,請問他們是什么,并且有什么區(qū)別

有靜態(tài)方法的類不能new,不需要創(chuàng)建實例,常駐內(nèi)容

三.框架技能

3.1 用最簡單通俗易懂的方式表達(dá)你對AOP和IOC,DI的理解

AOP面向切面編程,對源代碼無入侵,將業(yè)務(wù)無關(guān)的代碼可以代碼外面去做,比如方法入口的日志打印
IOC控制反轉(zhuǎn)。傳統(tǒng)應(yīng)用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉(zhuǎn);而反轉(zhuǎn)則是由容器來幫忙創(chuàng)建及注入依賴對象
DI依賴注入。應(yīng)用程序依賴于IOC容器,應(yīng)用程序需要IOC容器來提供對象需要的外部資源,IOC容器注入應(yīng)用程序某個對象,應(yīng)用程序依賴的對象

3.2 談一談你對于laravel中的契約,容器,服務(wù)提供者,facades理解以及它們的關(guān)系是什么

契約:指框架提供的一系列定義核心服務(wù)的接口
容器:管理類的依賴和執(zhí)行依賴注入的工具
服務(wù)提供者:把服務(wù)注冊、綁定到容器上的地方
facades:門面,一組靜態(tài)接口或者代理,能讓開發(fā)者簡單的訪問綁定到容器中的各種服務(wù)。

四.MYSQL數(shù)據(jù)優(yōu)化

4.1 事務(wù)和IO之間的關(guān)系,是怎么控制的
innodb引擎通過緩存技術(shù),將常用的數(shù)據(jù)和索引緩存到內(nèi)存中,這樣在讀取數(shù)據(jù)或者索引的時候就減少磁盤io來提高性能。

4.2 事務(wù)的4個特點
原子性、一致性、隔離性、持久性

4.3簡述一下MySQL主從復(fù)制中流程是什么,為什么會存在延遲問題,對于應(yīng)用程序應(yīng)如何規(guī)避或者減少延遲所帶來的問題呢?
主從復(fù)制分三步,
1.主庫把數(shù)據(jù)更改記錄到二進(jìn)制日志binary log中。2.從庫啟動一個IO線程,該線程連接到主庫。主庫的binlog dump線程會去讀取主庫本地的binlog日志文件中更新事件,發(fā)往從庫,從庫接收到日志后,會記錄到本地的中繼日志relay-log中。3.從庫中的SQL線程讀取中繼日志relay-log中的事件,將其重放到從庫中。

什么是主從延遲:
一個服務(wù)器開放N個鏈接給客戶端來連接的, 這樣有會有大并發(fā)的更新操作, 但是從服務(wù)器的里面讀取binlog 的線程僅有一個, 當(dāng)某個SQL在從服務(wù)器上執(zhí)行的時間稍長 或者由于某個SQL要進(jìn)行鎖表就會導(dǎo)致,主服務(wù)器的SQL大量積壓,未被同步到從服務(wù)器里。這就導(dǎo)致了主從不一致, 也就是主從延遲。

如何減少主從延遲:
1.一臺從服務(wù)器當(dāng)度作為備份使用, 而不提供查詢, 那邊他的負(fù)載下來了, 執(zhí)行relay log 里面的SQL效率自然就高了
2.增加從服務(wù)器嘍,分散讀的壓力, 從而降低服務(wù)器負(fù)載

五.Redis操作

5.1 在工作中常用那些數(shù)據(jù)類型,你能說一下每種數(shù)據(jù)類型是什么樣的及運用場景嘛 ?
五種基本類型:
1.字符串:常規(guī)key-value緩存應(yīng)用。常規(guī)計數(shù): 微博數(shù), 粉絲數(shù)
2.哈希,使用場景:存儲部分變更數(shù)據(jù),如用戶信息等
3.列表,消息隊列系統(tǒng),將Redis用作日志收集器,實際上還是一個隊列,多個端點將日志信息寫入Redis,然后一個worker統(tǒng)一將所有日志寫到磁盤
4集合,使用場景:交集,并集,差集
5有序集合,排行榜相關(guān)

此外,還有bitmap,hyperloglog,geo

5.2 redis的持久化方式有幾種,分別是怎么個流程;redis4中出現(xiàn)的混合模式又是什么樣的呢?
redis提供了RDB持久化和AOF持久化。
RDB持久化:在指定的時間間隔將內(nèi)存數(shù)據(jù)集快照寫入磁盤。
RDB持久化流程:
1.redis調(diào)用fork,現(xiàn)在有了子進(jìn)程和父進(jìn)程
2.父進(jìn)程繼續(xù)處理客戶端請求,子進(jìn)程負(fù)責(zé)將內(nèi)存寫入到臨時文件。
3.當(dāng)子進(jìn)程將快照寫入臨時文件完畢后,用臨時文件替換原來的快照文件,子進(jìn)程退出。

AOF文件保存過程
以命令的方式存儲,1.redis調(diào)用fork,現(xiàn)在有父子兩個進(jìn)程
2.子進(jìn)程根據(jù)內(nèi)存中的數(shù)據(jù)庫快照,往臨時文件中寫入重建數(shù)據(jù)庫狀態(tài)的命令
3.父進(jìn)程繼續(xù)處理client請求,除把寫命令寫入到原來的aof文件中,同時把收到的寫命令緩存起來。
4.子進(jìn)程把快照內(nèi)容寫入已命名方式寫到臨時文件后,子進(jìn)程發(fā)信號通知父進(jìn)程。然后父進(jìn)程把緩存的寫命令也寫入到臨時文件。
5.父進(jìn)程可以用臨時文件替換老的aof文件,并重命名,后面收到的寫命令也開始往新的aof文件中追加

Redis 4.0 提供了更好的混合持久化選項:
fork出的子進(jìn)程先將共享的內(nèi)存副本全量的以RDB方式寫入aof文件,然后在將重寫緩沖區(qū)的增量命令以AOF方式寫入到文件,寫入完成后通知主進(jìn)程更新統(tǒng)計信息,并將新的含有RDB格式和AOF格式的AOF文件替換舊的的AOF文件。簡單的說:新的AOF文件前半段是RDB格式的全量數(shù)據(jù)后半段是AOF格式的增量數(shù)據(jù)。

5.3 什么是redis哨兵?哨兵的數(shù)量有什么要求嘛為什么?
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進(jìn)程,作為進(jìn)程,它會獨立運行。其原理是哨兵通過發(fā)送命令,等待Redis服務(wù)器響應(yīng),從而監(jiān)控運行的多個Redis實例。

哨兵的數(shù)量至少三個,選舉機(jī)制決定的。

5.4 redis哨兵是如何監(jiān)控主從狀態(tài)的,并如何實現(xiàn)故障轉(zhuǎn)移的呢
redis哨兵是如何監(jiān)控主從狀態(tài):
當(dāng)監(jiān)控的master節(jié)點出問題之后,sentinel節(jié)點會及時地發(fā)現(xiàn)而且還能自動執(zhí)行failover,使其中一個slave節(jié)點成為新的Master節(jié)點,同時配置其他的節(jié)點成為新的Master節(jié)點的子節(jié)點。

實現(xiàn)故障轉(zhuǎn)移:
1.設(shè)置新的master節(jié)點替換掉原來的故障master節(jié)點
2.設(shè)置其他的節(jié)點成為新的master節(jié)點的slave節(jié)點用于主從復(fù)制
3.告知客戶端新的master節(jié)點地址信息,同時執(zhí)行必要的腳本來通知系統(tǒng)管理員

5.5 redis集群和哨兵你會如何考慮,這兩者有什么區(qū)別,有什么相似點

【redis主從】:
是備份關(guān)系, 我們操作主庫,數(shù)據(jù)也會同步到從庫。 如果主庫機(jī)器壞了,從庫可以上。就好比你 D盤的片丟了,但是你移動硬盤里邊備份有。

【redis哨兵】:
哨兵保證的是HA,保證特殊情況故障自動切換,哨兵盯著你的“redis主從集群”,如果主庫死了,它會告訴你新的老大是誰。

【redis集群】:
集群保證的是高并發(fā),因為多了一些兄弟幫忙一起扛。同時集群會導(dǎo)致數(shù)據(jù)的分散,整個redis集群會分成一堆數(shù)據(jù)槽,即不同的key會放到不不同的槽中

六.swoole

6.1 網(wǎng)絡(luò)通信協(xié)議有哪些?
TCP IP HTTP POP3 SMTP SSH

6.2 請用通俗的方式表達(dá)一下tcp握手與揮手的過程
三次握手,四次揮手。

三次握手:
第一次:客戶端發(fā)送請求到服務(wù)器,服務(wù)器知道客戶端發(fā)送,自己接收正常。SYN=1,seq=x
第二次:服務(wù)器發(fā)給客戶端,客戶端知道自己發(fā)送、接收正常,服務(wù)器接收、發(fā)送正常。ACK=1,ack=x+1,SYN=1,seq=y
第三次:客戶端發(fā)給服務(wù)器:服務(wù)器知道客戶端發(fā)送,接收正常,自己接收,發(fā)送也正常.seq=x+1,ACK=1,ack=y+1

四次揮手:
第一次:客戶端請求斷開FIN,seq=u
第二次:服務(wù)器確認(rèn)客戶端的斷開請求ACK,ack=u+1,seq=v
第三次:服務(wù)器請求斷開FIN,seq=w,ACK,ack=u+1
第四次:客戶端確認(rèn)服務(wù)器的斷開ACK,ack=w+1,seq=u+1

6.3 進(jìn)程和協(xié)程的區(qū)別是什么,請你用最簡單最通俗的方式表達(dá)協(xié)程的運行
進(jìn)程,直觀點說,保存在硬盤上的程序運行以后,會在內(nèi)存空間里形成一個獨立的內(nèi)存體,這個內(nèi)存體有自己獨立的地址空間,有自己的堆,上級掛靠單位是操作系統(tǒng)。操作系統(tǒng)會以進(jìn)程為單位,分配系統(tǒng)資源(CPU時間片、內(nèi)存等資源),進(jìn)程是資源分配的最小單位。

協(xié)程,是一種比線程更加輕量級的存在,協(xié)程不是被操作系統(tǒng)內(nèi)核所管理,而完全是由程序所控制(也就是在用戶態(tài)執(zhí)行)。這樣帶來的好處就是性能得到了很大的提升,不會像線程切換那樣消耗資源。

協(xié)程在子程序內(nèi)部是可中斷的,然后轉(zhuǎn)而執(zhí)行別的子程序,在適當(dāng)?shù)臅r候再返回來接著執(zhí)行。

線程切換是由操作系統(tǒng)的時間片控制的,而協(xié)程是程序自己實現(xiàn)的,讓協(xié)程不斷輪流執(zhí)行才是實現(xiàn)并發(fā),所以實現(xiàn)協(xié)程還必須要有一個類似于時間片的結(jié)構(gòu),不同于線程的切換,協(xié)程的切換不是按照時間來算的,而是按照代碼既定分配,就是說代碼運行到這一行才啟動協(xié)程,協(xié)程是可以由我們程序員自己操控的。

6.4 你覺得swoole之所高性能的原因在哪里?
swoole采用事件機(jī)制。當(dāng)IO事件發(fā)生后,swoole會自動回調(diào)指定的PHP函數(shù)。

PHP的異步、并行、高性能網(wǎng)絡(luò)通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務(wù)器,異步TCP/UDP網(wǎng)絡(luò)客戶端,異步MySQL,異步Redis,數(shù)據(jù)庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。

6.5 swoole使用的時候有什么注意的地方嘛
Swoole 協(xié)程使用注意事項:
在swoole中使用協(xié)程時,使用協(xié)程客戶端連接池。

感謝各位的閱讀,以上就是“PHP面試題及答案有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對PHP面試題及答案有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI