記錄疫情下PHP中高階面試重點
由於疫情的原因,是視訊面試,甲方陣容hr 主管一人,產品經理一人,本次面試直接負責人技術總監A,另外兩人好像是同崗位不同部門負責人(B 和C)(嗯,年齡都是35 )。
話不多說直接上題。 (有些想用冒號分隔的,奈何鍵盤的冒號鍵和tab 好像壞了)
開場時, hr 介紹了本次參與面試的各成員即職位,然後了解他的疑問,產品經理詢問了本辭職的原因和想要了解的問題。
接下來正戲開始了。
總監 A: 看你對 MySQL 掌握的很熟練,說說 MySQL 的隔離等級。 。
我: MySQL 交易的隔離等級從第到高分別是讀取未提交,讀取已提交,可重複讀取,串行化,MySQL 預設的隔離等級是可重複讀取,交易並發可能引發的問題是臟讀,不可重複讀,幻讀,然後分別闡述了引發這幾種狀況的操作即解決方案。
總監 A: 你在實際場景中是更有趣的策略來修改隔離等級的。
我: …. (這裡省略號意思是我胡詌一些場景,其實是有點懵的,因為我只處理過千萬級別的訪問量數據,但是不是高並發,所以並未涉及修改隔離界別,還是平常思考的深度不夠啊)
總監A: innodb 的索引有哪些,它是怎麼實現的。
我: 主鍵 唯一 普通 聯合索引,有 B 樹、B 樹、hash 的實現的。
總監 A: 這幾實現有什麼區別,你平時設計索引時是更具是什麼策略來選擇它們的。
我: B 樹和 B 樹是在資料在葉子結點上不一樣,在樹的深度上不一樣,相同的檢索,B 樹要比 B 樹多一次的 IO。根據實際業務場景來選擇不一樣索引演算法,如果是讀多寫少,我會選擇B 樹(實際上內心沒底,因為忘了)
總監A: MySQL 鎖的分類,作用,你在實際工作的中使用場景。
我: (此時內心有些打鼓,因為之前面試都是由淺入深)… 然後簡述我的理解,但是實際上答案並不滿意。因為 B 和 C 也插入其他問題。
總監 B: 分散式熟悉嗎,分散式鎖定怎麼實現,了解 etcd 嗎。
我: 可以使用redis 的setnx 結合過期時間實現,因為這塊我之前在業務中實現過,etcd,這個沒了解過(心裡就沒有這個概念),還,,(被打斷)
總監C: 時間有限,我們繼續其他問題,看你做過PHP 優化,opcahche 是怎麼用的。
我: ( 冥思了一下),,操作碼解析優化.
總監C: opcode 呢
我: 這個沒印象了,(這個確實沒印象了,因為之前基於業務場景,我從前端,cdn,伺服器反向代理,資料庫緩存,和程式邏輯程式碼的最佳化,專案就有了一個質的提升,但就是唯獨沒有這個opchache 和opcode 的東西接觸,失誤啊)
總監C: 簡述一下url 發生的過程,說重點就行
我瀏覽器輸入url 之後解析成IP,然後請求發送到web 伺服器,如果是nginx就會透過cgi 發送給PHP-FPM,然後等待PHP 腳本解析,處理邏輯,回應資料。
總監 C: cgi 是什麼東西,用來幹嘛的
我: cgi 是一個協議,是類似於 PHP 這樣的語言和 web 伺服器通訊一個協定。
總監 B: PHP-FPM 是什麼架構模式的,你要怎麼優化過它。
我: 它是一個master(主)-worker(工作進程)的架構模式,正真處理請求的是work 進程,master 主要是管理和回收子進程,優化的話,曾經有更改過它的進程數的配置,我大概簡述一下: 由於之前配置的靜態模式,預設的200 個進程數,後來有了一定的並發,我就該改成「第三種」 配置模式,配置指定數量的進程數,有個最小值和最大值(最大值這裡其實是忘了,就是想這肯定不能沒有限制,畢竟硬體資源就是天花板呢),然後根據實際的請求數,然後動態的增加進程數量。
總監B: 還有其他優化嗎
我: (沉默了會兒,其實當時修改時還是做了其他修改的,但是確實忘了,感覺此次面試拉跨了),當時確實還做了其他優化來的,但想不起來了。
總監 B: 說說你使用到的 rabbitmq 和你對他的理解。
我 : (簡述了 rabbitmq 的架構)以及我的使用場景和業務。
總監 B: 說說你用到的 topic 模式
我: ( 簡述了 topic 的使用流程,算是過關了)。
總監 A: 說說 redis 分片。
我: 分片就是將key 分割到多個redis 實例的處理過程,利用的是多台計算機的內存,cpu 的處理能力,提高,,,,
總監A : 怎麼樣實現排行榜
我: 可以使用redis 的有序集合,因為它有分數,,,
總監 A: 用那個函數取值的
我: (回憶了下,確實想不起來了) 這個忘記了,什麼 member 的函數。
總監A: 說說AOP 的,使用過嗎
我: aop 切面編程,就是使用動態代理等技術使功能模組的統一維護,有點像laravel 的facade(心裡沒底,想內比來的,失敗)。
總監A: 說hyperf 的特點
我: 基於swoole,插件化的高效能、高靈活的協程框架,它是依賴注入的容器化,aop 模式,註解模式,事件模式,,,
總監A: 說說協程池和協程狀態管理
我: (這裡實際上沒有答上來,實際上後來思考了下還是能回答部分的,至少協程狀態管理是可以解答的)
總監A: 如果會go,這個問題很簡單
總監A: 說說laravel
我: (這裡算是我的強項了,就不一一簡述了)
總監B: 說說Linux 吧和shell 腳本
我: (簡述了Linux 以及常用命令和vi),shell 的表達式和變數定義、使用都是有區別於PHP 語言的。
總監C: 看你使用map reduce 對資料批次處理,說說它吧
我基於monogo 的map redcue 對資料處理,,,(被打斷)
總監C: 我還以為讓hadoop 的map reduce
##總監A: 說說你對未來的規劃吧我: …以上是我本次視訊面試的100% 還原,後來細細回想,其實很多都是能有解決方案的,但是為什麼本次面試的效果如此拉跨呢,,,節奏,對就是節奏。就是面試官以來就給了 「深」 東西,打亂了我的節奏。 相關推薦:《以上是記錄疫情下PHP中高階面試重點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
