由於疫情的原因,是視訊面試,甲方陣容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中文網其他相關文章!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

WebStorm Mac版
好用的JavaScript開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器