2020最新大廠內部 PHP 高級工程師面試題彙總(二)

5一、數據庫中的存放了用戶 ID, 扣費不少行,redis 中存放的是用戶的錢包,如今要寫一個腳本,將數據庫中的扣費記錄同步到 redis 中,每 5 分鐘執行一次。請問要考慮哪些問題?javascript

思路:生產者和消費者模式。這個問題也沒有說其餘的狀態,好比數據庫的數據會實時增長麼?redis 中每一個錢包是否有其餘服務在讀取或者寫入啊。什麼的。數據庫和 REDIS 放一塊兒,要麼考數據一致性,要麼考出現鎖,致使效率下降。php

5二、MYSQL 主從服務器,若是主服務器是 innodb 引擎,從服務器是 myisam 引擎,在實際應用中,會遇到什麼問題?java

5三、linux 中進程信號有哪些?mysql

5四、redis 的底層實現linux

面試官這麼樣問你,你就反問他,你要的底層實現是字段的設計?內存分配管理?網絡模型?數據同步?仍是分佈式的實現?(TIPS: 面試就是兩我的的博弈。面試官給出一個描述不清晰的問題,咱們不必回答。讓他把問題講清楚再思考怎麼回覆)nginx

5五、異步模型laravel

問清楚是 IO 異步模型。仍是 AJAX 這類的異步請求模型。差異很是大的。面試

5六、10g 文件,用 php 查看它的行數redis

粗暴一點的方法 ini_set ('memory_limit','-1'); 先把當前內存限制解除了 而後直接逐行統計。時間會很是的久。算法

有更好的方法請留言。

5七、有 10 億條訂單數據,屬於 1000 個司機的,請取出訂單量前 20 的司機

(TIPS)不要中招。不要用經常使用思路來處理,10 億數據 你再怎麼優化,全表求和,都是要死人的。

咱們從設計上解決這個問題。只有一千個司機。咱們能夠作個簡單哈希,分庫分表,% 求餘數。保證這一千個司機分在一千個表裏,每一個人有每一個人的單獨表。引擎用 MYSAIM,求表中數據的總數,效率飛快,遍歷一千張表,求最大前二十便可。

5八、設計一個微信紅包的功能

沒作過。其實題目表達不清楚。若是作過微信公衆號開發,知道微信事件模型的 XML 數據結構,應該會好作一點。

5九、根據 access.log 文件統計最近 5 秒的 qps,並以以下格式顯示,01 1000(難點在 01 序號)

tail -f access.log | awk -F '[' '{print $2}' | awk '{print $1}' | uniq -c

60、php7 性能爲何提高這麼高

不逼逼,直接參考:http://www.laruence.com/php-internal

鳥哥的文章要多讀,多讀。

6一、遍歷一個多維數組

遞歸。array_map 傳入一個回調函數。

6二、有這樣一個字符串 abcdefgkbcdefab...... 隨機長度,寫一個函數來求 bcde 在這個字符串中出現的次數

substr_count();

6三、有一個 1G 大小的一個文件,裏面每一行是一個詞,詞的大小不超過 16 個字節,內存限制大小是 1M。返回頻數最高的 100 個詞

方法太多了,可是實現起來 各有各的問題。

我可能只會用 HASH 映射作。其餘的,不會。

參考:第 64 題。

6四、十道海量數據處理面試題與十個方法大總結

https://blog.csdn.net/v_JULY_v/article/details/6279498

6五、php 進程模型,php 怎麼支持多個併發

守護進程模型(須要知道 php-fpm 的各類配置了)

參考:https://www.jianshu.com/p/542935a3bfa8

6六、nginx 的進程模型,怎麼支持多個併發

這個三言兩語說不清楚。

參考:https://www.zhihu.com/question/22062795

6七、php-fpm 各配置含義,fpm 的 daemonize 模式

php-fpm 的配置並很少,經常使用的就更少了。

參考:http://www.4wei.cn/archives/1002061

static - 子進程的數量是固定的(pm.max_children)
ondemand - 進程在有需求時才產生(當請求時,與 dynamic 相反,pm.start_servers 在服務啓動時即啓動
dynamic - 子進程的數量在下面配置的基礎上動態設置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers

6八、讓你實現一個簡單的架構,並保持高可用,兩個接口,一個上傳一條文本,一個獲取上傳的內容,你怎麼來設計?要避免單機房故障,同時要讓代碼層面無感。

6九、兩臺 mysql 服務器,其中一臺掛了,怎麼讓業務端無感切換,並保證正常狀況下講臺服務器的數據是一致的

不是核心業務的話,先停寫,把備機拉起來,查看兩臺機器的日誌,進行數據補償,開寫。

若是是核心業務的話,如今全部的寫操做都在正常的狀態機器上。把好的這臺機器的備機拉起來,當主機。

以上全是應急操做。實際上數據庫的容災設計要複雜的多。

面試官要是問你,備機的數據不一致怎麼辦,你要勇敢懟回去,大家每秒多少寫入操做。按照百萬級表,每秒 1000 的寫入效率,正常的設計是,分佈在 2 臺機器上每臺 500。這個級別的數據同步,出現差別的機率 能夠忽略不計的。有一臺出現問題,另外一臺也能夠抗住。

(正常的操做,仍是先停寫,等數據一致,切換,開寫。咱們公司搞這些切換都是在凌晨 4.00 左右,核心業務的每秒寫操做,只有十幾個。先後耽擱不到 20 秒)。

70、http 協議具體的定義

這種題 有是很難回答的。太寬泛了,咱們面試早就不問這種問題了。

7一、什麼是鎖,怎麼解決鎖的問題

計算機原理學的,生產者消費者模型,銀行家模型,均可以解決鎖的問題。

7二、rand 與 mt_rand 的區別

我實習的時候遇到這個坑。

說是 mt_rand 比 rand 快 4 倍。

在隨機數區間不大的狀況下並無很大的效率差距。可是出現重複數的概率,rand 要比 mt_rand 高不少。

7三、mysql 事務隔離是怎麼實現的

經過各類行鎖表鎖,各類樂觀鎖悲觀鎖,排他鎖實現的呀。

7四、mysql 的鎖怎麼實現的

https://blog.csdn.net/alexdamiao/article/d...

https://www.cnblogs.com/luyucheng/p/629775...

https://blog.csdn.net/tangkund3218/article...

7五、對稱加密和非對稱加密的方式

對稱加密:咱們倆共用一個祕鑰,你加密,我解密。

非對稱加密:我給你一個公鑰,你加密完了,我還能有個人私鑰把密文解開。可是你沒有個人私鑰。

擴展:橢圓加密算法。

7六、10 瓶水,其中一瓶有毒,小白鼠喝完有毒的水以後,會在 24 小時後死亡,問:最少用幾隻小白鼠能夠在 24 小時後找到具體是哪一瓶水有毒。

四隻

二進制問題。薛定諤的老鼠。

一隻老鼠有兩個狀態,死活,對應 01。假設老鼠的個數爲 A,則有 2^A>=10; A=4;

思路很簡單,十瓶藥編號:0,1,10,11....1001;

0 不喝。第一隻老鼠喝全部個位是 1 的:13579,第二隻喝十位是 1 的,第三隻和百位是 1 的,第四隻喝千位是 1 的。

24 小時後,看下死了的是 1,活着的是 0。按老鼠的順序乖乖站好…… 假如第一隻和第三隻死了,那就是 0101,就是 5 有問題。

7七、redis 是如何進行同步的,同步的方式,同步回滾怎麼辦,數據異常怎麼辦,同時會問 MYSQL 的同步方式和相關異常狀況

redis 集羣主從同步的簡單原理

  Redis 的複製功能是基於內存快照的持久化策略基礎上的,也就是說不管你的持久化策略選擇的是什麼,只要用到了 Redis 的複製功能,就必定會有內存快照發生。

  當 Slave 啓動並鏈接到 Master 以後,它將主動發送一個 SYNC 命令 (首先 Master 會啓動一個後臺進程,將數據快照保存到文件中 [rdb 文件] Master 會給 Slave 發送一個

Ping 命令來判斷 Slave 的存活狀態 當存活時 Master 會將數據文件發送給 Slave 並將全部寫命令發送到 Slave )。

  Slave 首先會將數據文件保存到本地 以後再將 數據 加載到內存中。

  當第一次連接 或者是 故障後 從新鏈接 都會先判斷 Slave 的存活狀態 在作所有數據的同步 , 以後只會同步 Master 的寫操做 (將命令發送給 Slave)

問題:

  當 Master 同步數據時 若數據量較大 而 Master 自己只會啓用一個後臺進程 來對多個 Slave 進行同步 , 這樣 Master 就會壓力過大 , 並且 Slave 恢復的時間也會很慢!

  • redis 主從複製的優勢:

(1)在一個Redis集羣中,master負責寫請求,slave負責讀請求,這麼作一方面經過將讀請求分散到其餘機器從而大大減小了master服務器的壓力,另外一方面slave專一於提供
讀服務從而提升了響應和讀取速度。

(2) 在一個 Redis 集羣中,若是 master 宕機,slave 能夠介入並取代 master 的位置,所以對於整個 Redis 服務來講不至於提供不了服務,這樣使得整個 Redis 服務足夠安全。

(3) 水平增長 Slave 機器能夠提升性能

7八、怎麼解決跨域

  • JSONP
  • 添加響應頭,容許跨域
  • 代理的方式

7九、json 和 xml 區別,各有什麼優缺點

(1)可讀性方面:基本相同,XML 的可讀性比較好;

(2)可擴展性方面:都具備良好的擴展性;

(3)編碼難度方面:相對而言,JSON 的編碼比較容易;

(4)解碼難度:JSON 的解碼難度基本爲零,XML 須要考慮子節點和父節點;

(5)數據體積方面:JSON 相對於 XML 來說,數據體積小,傳遞的速度比較快;

(6)數據交互方面:JSON 與 javascript 的交互更加方便,更容易解析處理,更好的數據交互;

(7)數據描述方面:XML 對數據描述性比較好;

(8)傳輸速度方面:JSON 的速度遠遠快於 XML。

80、Trait 優先級
在 trait 繼承中,優先順序依次是:來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法


更多學習內容能夠訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)

以上內容但願幫助到你們,不少PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裏入手去提高,對此我整理了一些資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨須要的能夠免費分享給你們,須要的能夠加入個人PHP技術交流羣953224940

進階PHP月薪30k>>>架構師成長路線【視頻、面試文檔免費獲取】

相關文章
相關標籤/搜索