您好,登錄后才能下訂單哦!
這篇文章主要講解了“PHP面試題及答案有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP面試題及答案有哪些”吧!
php的框架:1、Laravel,Laravel是一款免費并且開源的PHP應用框架。2、Phalcon,Phalcon是運行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項目準備的PHP框架。4、Yii,Yii是一款快速、安全和專業的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強大的PHP框架。
2.1 你理解的面向對象?
一切皆對象。是計算機模擬現實世界的一種方式,面向對象的三大特征:封裝、繼承、多態。通過對成員屬性和成員方法進行操作,來使對象具有行為屬性和行為方法。
2.2 在PHP中有幾種類不能通過 new 出來,請問他們是什么,并且有什么區別
有靜態方法的類不能new,不需要創建實例,常駐內容
3.1 用最簡單通俗易懂的方式表達你對AOP和IOC,DI的理解
AOP面向切面編程,對源代碼無入侵,將業務無關的代碼可以代碼外面去做,比如方法入口的日志打印
IOC控制反轉。傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉;而反轉則是由容器來幫忙創建及注入依賴對象
DI依賴注入。應用程序依賴于IOC容器,應用程序需要IOC容器來提供對象需要的外部資源,IOC容器注入應用程序某個對象,應用程序依賴的對象
3.2 談一談你對于laravel中的契約,容器,服務提供者,facades理解以及它們的關系是什么
契約:指框架提供的一系列定義核心服務的接口
容器:管理類的依賴和執行依賴注入的工具
服務提供者:把服務注冊、綁定到容器上的地方
facades:門面,一組靜態接口或者代理,能讓開發者簡單的訪問綁定到容器中的各種服務。
4.1 事務和IO之間的關系,是怎么控制的
innodb引擎通過緩存技術,將常用的數據和索引緩存到內存中,這樣在讀取數據或者索引的時候就減少磁盤io來提高性能。
4.2 事務的4個特點
原子性、一致性、隔離性、持久性
4.3簡述一下MySQL主從復制中流程是什么,為什么會存在延遲問題,對于應用程序應如何規避或者減少延遲所帶來的問題呢?
主從復制分三步,
1.主庫把數據更改記錄到二進制日志binary log中。2.從庫啟動一個IO線程,該線程連接到主庫。主庫的binlog dump線程會去讀取主庫本地的binlog日志文件中更新事件,發往從庫,從庫接收到日志后,會記錄到本地的中繼日志relay-log中。3.從庫中的SQL線程讀取中繼日志relay-log中的事件,將其重放到從庫中。
什么是主從延遲:
一個服務器開放N個鏈接給客戶端來連接的, 這樣有會有大并發的更新操作, 但是從服務器的里面讀取binlog 的線程僅有一個, 當某個SQL在從服務器上執行的時間稍長 或者由于某個SQL要進行鎖表就會導致,主服務器的SQL大量積壓,未被同步到從服務器里。這就導致了主從不一致, 也就是主從延遲。
如何減少主從延遲:
1.一臺從服務器當度作為備份使用, 而不提供查詢, 那邊他的負載下來了, 執行relay log 里面的SQL效率自然就高了
2.增加從服務器嘍,分散讀的壓力, 從而降低服務器負載
5.1 在工作中常用那些數據類型,你能說一下每種數據類型是什么樣的及運用場景嘛 ?
五種基本類型:
1.字符串:常規key-value緩存應用。常規計數: 微博數, 粉絲數
2.哈希,使用場景:存儲部分變更數據,如用戶信息等
3.列表,消息隊列系統,將Redis用作日志收集器,實際上還是一個隊列,多個端點將日志信息寫入Redis,然后一個worker統一將所有日志寫到磁盤
4集合,使用場景:交集,并集,差集
5有序集合,排行榜相關
此外,還有bitmap,hyperloglog,geo
5.2 redis的持久化方式有幾種,分別是怎么個流程;redis4中出現的混合模式又是什么樣的呢?
redis提供了RDB持久化和AOF持久化。
RDB持久化:在指定的時間間隔將內存數據集快照寫入磁盤。
RDB持久化流程:
1.redis調用fork,現在有了子進程和父進程
2.父進程繼續處理客戶端請求,子進程負責將內存寫入到臨時文件。
3.當子進程將快照寫入臨時文件完畢后,用臨時文件替換原來的快照文件,子進程退出。
AOF文件保存過程
以命令的方式存儲,1.redis調用fork,現在有父子兩個進程
2.子進程根據內存中的數據庫快照,往臨時文件中寫入重建數據庫狀態的命令
3.父進程繼續處理client請求,除把寫命令寫入到原來的aof文件中,同時把收到的寫命令緩存起來。
4.子進程把快照內容寫入已命名方式寫到臨時文件后,子進程發信號通知父進程。然后父進程把緩存的寫命令也寫入到臨時文件。
5.父進程可以用臨時文件替換老的aof文件,并重命名,后面收到的寫命令也開始往新的aof文件中追加
Redis 4.0 提供了更好的混合持久化選項:
fork出的子進程先將共享的內存副本全量的以RDB方式寫入aof文件,然后在將重寫緩沖區的增量命令以AOF方式寫入到文件,寫入完成后通知主進程更新統計信息,并將新的含有RDB格式和AOF格式的AOF文件替換舊的的AOF文件。簡單的說:新的AOF文件前半段是RDB格式的全量數據后半段是AOF格式的增量數據。
5.3 什么是redis哨兵?哨兵的數量有什么要求嘛為什么?
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個獨立的進程,作為進程,它會獨立運行。其原理是哨兵通過發送命令,等待Redis服務器響應,從而監控運行的多個Redis實例。
哨兵的數量至少三個,選舉機制決定的。
5.4 redis哨兵是如何監控主從狀態的,并如何實現故障轉移的呢
redis哨兵是如何監控主從狀態:
當監控的master節點出問題之后,sentinel節點會及時地發現而且還能自動執行failover,使其中一個slave節點成為新的Master節點,同時配置其他的節點成為新的Master節點的子節點。
實現故障轉移:
1.設置新的master節點替換掉原來的故障master節點
2.設置其他的節點成為新的master節點的slave節點用于主從復制
3.告知客戶端新的master節點地址信息,同時執行必要的腳本來通知系統管理員
5.5 redis集群和哨兵你會如何考慮,這兩者有什么區別,有什么相似點
【redis主從】:
是備份關系, 我們操作主庫,數據也會同步到從庫。 如果主庫機器壞了,從庫可以上。就好比你 D盤的片丟了,但是你移動硬盤里邊備份有。
【redis哨兵】:
哨兵保證的是HA,保證特殊情況故障自動切換,哨兵盯著你的“redis主從集群”,如果主庫死了,它會告訴你新的老大是誰。
【redis集群】:
集群保證的是高并發,因為多了一些兄弟幫忙一起扛。同時集群會導致數據的分散,整個redis集群會分成一堆數據槽,即不同的key會放到不不同的槽中
6.1 網絡通信協議有哪些?
TCP IP HTTP POP3 SMTP SSH
6.2 請用通俗的方式表達一下tcp握手與揮手的過程
三次握手,四次揮手。
三次握手:
第一次:客戶端發送請求到服務器,服務器知道客戶端發送,自己接收正常。SYN=1,seq=x
第二次:服務器發給客戶端,客戶端知道自己發送、接收正常,服務器接收、發送正常。ACK=1,ack=x+1,SYN=1,seq=y
第三次:客戶端發給服務器:服務器知道客戶端發送,接收正常,自己接收,發送也正常.seq=x+1,ACK=1,ack=y+1
四次揮手:
第一次:客戶端請求斷開FIN,seq=u
第二次:服務器確認客戶端的斷開請求ACK,ack=u+1,seq=v
第三次:服務器請求斷開FIN,seq=w,ACK,ack=u+1
第四次:客戶端確認服務器的斷開ACK,ack=w+1,seq=u+1
6.3 進程和協程的區別是什么,請你用最簡單最通俗的方式表達協程的運行
進程,直觀點說,保存在硬盤上的程序運行以后,會在內存空間里形成一個獨立的內存體,這個內存體有自己獨立的地址空間,有自己的堆,上級掛靠單位是操作系統。操作系統會以進程為單位,分配系統資源(CPU時間片、內存等資源),進程是資源分配的最小單位。
協程,是一種比線程更加輕量級的存在,協程不是被操作系統內核所管理,而完全是由程序所控制(也就是在用戶態執行)。這樣帶來的好處就是性能得到了很大的提升,不會像線程切換那樣消耗資源。
協程在子程序內部是可中斷的,然后轉而執行別的子程序,在適當的時候再返回來接著執行。
線程切換是由操作系統的時間片控制的,而協程是程序自己實現的,讓協程不斷輪流執行才是實現并發,所以實現協程還必須要有一個類似于時間片的結構,不同于線程的切換,協程的切換不是按照時間來算的,而是按照代碼既定分配,就是說代碼運行到這一行才啟動協程,協程是可以由我們程序員自己操控的。
6.4 你覺得swoole之所高性能的原因在哪里?
swoole采用事件機制。當IO事件發生后,swoole會自動回調指定的PHP函數。
PHP的異步、并行、高性能網絡通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。
6.5 swoole使用的時候有什么注意的地方嘛
Swoole 協程使用注意事項:
在swoole中使用協程時,使用協程客戶端連接池。
感謝各位的閱讀,以上就是“PHP面試題及答案有哪些”的內容了,經過本文的學習后,相信大家對PHP面試題及答案有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。