八個PHP 高級工程經(jīng)典面試題

1.PHP 如何實現(xiàn)不用自帶的 cookie 函數(shù)為客戶端下發(fā) cookie。對于分布式系統(tǒng),如何來保存 session 值。

這個題有點繞投慈。考的還是 COOKIE 和 SESSION 的基礎(chǔ)知識冠骄。服務(wù)端通過 set-cookie 命令來通知客戶端保存 cookie伪煤。

只要按照 domain path 過期時間等規(guī)則 用 header 函數(shù)就可以實現(xiàn)。

分布式系統(tǒng) session凛辣,集中處理抱既。按我們公司的架構(gòu),為了實現(xiàn)高可用和高容災(zāi)扁誓,提供一個分布式的驗簽服務(wù)防泵。具體的可以看下 redis 的分布式服務(wù)架構(gòu)。

2蝗敢、數(shù)據(jù)庫中的存放了用戶 ID, 扣費很多行捷泞,redis 中存放的是用戶的錢包,現(xiàn)在要寫一個腳本寿谴,將數(shù)據(jù)庫中的扣費記錄同步到 redis 中锁右,每 5 分鐘執(zhí)行一次。請問要考慮哪些問題?

思路:生產(chǎn)者和消費者模式骡湖。這個問題也沒有說其他的狀態(tài)贱纠,比如數(shù)據(jù)庫的數(shù)據(jù)會實時增加么峻厚?redis 中每個錢包是否有其他服務(wù)在讀取或者寫入啊响蕴。什么的。數(shù)據(jù)庫和 REDIS 放一起惠桃,要么考數(shù)據(jù)一致性浦夷,要么考出現(xiàn)鎖,導致效率降低辜王。

3劈狐、根據(jù) access.log 文件統(tǒng)計最近 5 秒的 qps,并以如下格式顯示呐馆,01 1000(難點在 01 序號)

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

4.redis 是如何進行同步的肥缔,同步的方式,同步回滾怎么辦汹来,數(shù)據(jù)異常怎么辦续膳,同時會問 MYSQL 的同步方式和相關(guān)異常情況

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

Redis 的復(fù)制功能是基于內(nèi)存快照的持久化策略基礎(chǔ)上的,也就是說無論你的持久化策略選擇的是什么收班,只要用到了 Redis 的復(fù)制功能坟岔,就一定會有內(nèi)存快照發(fā)生。

當 Slave 啟動并連接到 Master 之后摔桦,它將主動發(fā)送一個 SYNC 命令 (首先 Master 會啟動一個后臺進程社付,將數(shù)據(jù)快照保存到文件中 [rdb 文件] Master 會給 Slave 發(fā)送一個

Ping 命令來判斷 Slave 的存活狀態(tài) 當存活時 Master 會將數(shù)據(jù)文件發(fā)送給 Slave 并將所有寫命令發(fā)送到 Slave )。

Slave 首先會將數(shù)據(jù)文件保存到本地 之后再將 數(shù)據(jù) 加載到內(nèi)存中邻耕。

當?shù)谝淮捂溄?或者是 故障后 重新連接 都會先判斷 Slave 的存活狀態(tài) 在做全部數(shù)據(jù)的同步 鸥咖, 之后只會同步 Master 的寫操作 (將命令發(fā)送給 Slave)

問題:

當 Master 同步數(shù)據(jù)時 若數(shù)據(jù)量較大 而 Master 本身只會啟用一個后臺進程 來對多個 Slave 進行同步 , 這樣 Master 就會壓力過大 兄世, 而且 Slave 恢復(fù)的時間也會很慢啼辣!

redis 主從復(fù)制的優(yōu)點:

(1)在一個Redis集群中,master負責寫請求碘饼,slave負責讀請求熙兔,這么做一方面通過將讀請求分散到其他機器從而大大減少了master服務(wù)器的壓力,另一方面slave專注于提供

讀服務(wù)從而提高了響應(yīng)和讀取速度艾恼。

(2) 在一個 Redis 集群中住涉,如果 master 宕機,slave 可以介入并取代 master 的位置钠绍,因此對于整個 Redis 服務(wù)來說不至于提供不了服務(wù)舆声,這樣使得整個 Redis 服務(wù)足夠安全。

(3) 水平增加 Slave 機器可以提高性能

5.兩臺 mysql 服務(wù)器,其中一臺掛了媳握,怎么讓業(yè)務(wù)端無感切換碱屁,并保證正常情況下講臺服務(wù)器的數(shù)據(jù)是一致的

不是核心業(yè)務(wù)的話,先停寫蛾找,把備機拉起來娩脾,查看兩臺機器的日志,進行數(shù)據(jù)補償打毛,開寫柿赊。

如果是核心業(yè)務(wù)的話,現(xiàn)在所有的寫操作都在正常的狀態(tài)機器上幻枉。把好的這臺機器的備機拉起來碰声,當主機。

以上全是應(yīng)急操作熬甫。實際上數(shù)據(jù)庫的容災(zāi)設(shè)計要復(fù)雜的多胰挑。

面試官要是問你,備機的數(shù)據(jù)不一致怎么辦椿肩,你要勇敢懟回去瞻颂,你們每秒多少寫入操作。按照百萬級表覆旱,每秒 1000 的寫入效率蘸朋,正常的設(shè)計是,分布在 2 臺機器上每臺 500扣唱。這個級別的數(shù)據(jù)同步藕坯,出現(xiàn)差異的概率 可以忽略不計的。有一臺出現(xiàn)問題噪沙,另一臺也可以抗住炼彪。

(正常的操作,還是先停寫正歼,等數(shù)據(jù)一致辐马,切換,開寫局义。我們公司搞這些切換都是在凌晨 4.00 左右喜爷,核心業(yè)務(wù)的每秒寫操作,只有十幾個萄唇。前后耽擱不到 20 秒)檩帐。

6.請寫出自少三種截取文件名后綴的方法或函數(shù)(PHP 原生函數(shù)和自己實現(xiàn)函數(shù)均可)

echo substr(strrchr($file, '.'), 1);

echo substr($file, strrpos($file, '.')+1);

$arr=explode('.', $file);

echo $arr[count($arr)-1];

$arr=explode('.', $file);

echo end($arr);

echo strrev(explode('.', strrev($file))[0]);

echo pathinfo($file)['extension'];

echo pathinfo($file, PATHINFO_EXTENSION);

7.寫一個函數(shù),獲取一篇文章內(nèi)容中的全部圖片另萤,并下載

function download_images($article_url = '', $image_path = 'tmp'){

? ? // 獲取文章類容

? ? $content = file_get_contents($article_url);

? ? // 利用正則表達式得到圖片鏈接

? ? $reg_tag = '/<img.*?\"([^\"]*(jpg|bmp|jpeg|gif|png)).*?>/';

? ? $ret = preg_match_all($reg_tag, $content, $match_result);

? ? $pic_url_array = array_unique($match_result1[1]);

? ? // 創(chuàng)建路徑

? ? $dir = getcwd() . DIRECTORY_SEPARATOR .$image_path;

? ? mkdir(iconv("UTF-8", "GBK", $dir), 0777, true);

? ? foreach($pic_url_array as $pic_url){

? ? ? ? // 獲取文件信息

? ? ? ? $ch = curl_init($pic_url);

? ? ? ? curl_setopt($ch, CURLOPT_HEADER, 0);

? ? ? ? curl_setopt($ch, CURLOPT_NOBODY, 0);

? ? ? ? curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );

? ? ? ? curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE );

? ? ? ? curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

? ? ? ? $fileInfo = curl_exec($ch);

? ? ? ? $httpinfo = curl_getinfo($ch);

? ? ? ? curl_close($ch);

? ? ? ? // 獲取圖片文件后綴

? ? ? ? $ext = strrchr($pic_url, '.');

? ? ? ? $filename = $dir . '/' . uniqid() . $ext;

? ? ? ? // 保存圖片信息到文件

? ? ? ? $local_file = fopen($filename, 'w');

? ? ? ? if(false !== $local_file){

? ? ? ? ? ? if( false !== fwrite($local_file, $filecontent) ){

? ? ? ? ? ? fclose($local_file);

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

8 瓶水湃密,其中一瓶有毒诅挑,小白鼠喝完有毒的水之后,會在 24 小時后死亡泛源,問:最少用幾只小白鼠可以在 24 小時后找到具體是哪一瓶水有毒拔妥。

四只

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

一只老鼠有兩個狀態(tài)没龙,死活,對應(yīng) 01幻梯。假設(shè)老鼠的個數(shù)為 A兜畸,則有 2^A>=10; A=4努释;

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

0 不喝。第一只老鼠喝所有個位是 1 的:13579伐蒂,第二只喝十位是 1 的煞躬,第三只和百位是 1 的,第四只喝千位是 1 的逸邦。

24 小時后恩沛,看下死了的是 1,活著的是 0缕减。按老鼠的順序乖乖站好…… 假如第一只和第三只死了雷客,那就是 0101,就是 5 有問題桥狡。

最后搅裙,祝所有大家在面試中過關(guān)斬將,拿到心儀offer裹芝。

很多人在剛接觸這個行業(yè)的時候或者是在遇到瓶頸期的時候部逮,總會遇到一些問題,比如學了一段時間感覺沒有方向感嫂易,不知道該從那里入手去學習兄朋,對此我整理了一些資料,需要的可以免費分享給大家(點擊此處加入php高級交流群一起學習交流怜械,11年架構(gòu)師帶你解讀年薪50萬面試通關(guān)秘籍颅和。)

更多學習內(nèi)容請訪問:

騰訊T3-T4標準精品PHP架構(gòu)師教程目錄大全,只要你看完保證薪資上升一個臺階(持續(xù)更新)

推薦視頻:

PHP高級開發(fā)工程師簡歷打造缕允,祝你金三銀四跳槽加薪

https://www.bilibili.com/video/BV1S

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峡扩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子灼芭,更是在濱河造成了極大的恐慌有额,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異巍佑,居然都是意外死亡茴迁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門萤衰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堕义,“玉大人,你說我怎么就攤上這事脆栋【肼簦” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵椿争,是天一觀的道長怕膛。 經(jīng)常有香客問我,道長秦踪,這世上最難降的妖魔是什么褐捻? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮椅邓,結(jié)果婚禮上柠逞,老公的妹妹穿的比我還像新娘。我一直安慰自己景馁,他們只是感情好板壮,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著合住,像睡著了一般绰精。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上聊疲,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天茬底,我揣著相機與錄音,去河邊找鬼获洲。 笑死阱表,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贡珊。 我是一名探鬼主播最爬,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼门岔!你這毒婦竟也來了爱致?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寒随,失蹤者是張志新(化名)和其女友劉穎糠悯,沒想到半個月后帮坚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡互艾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年试和,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纫普。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡阅悍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昨稼,到底是詐尸還是另有隱情节视,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布假栓,位于F島的核電站寻行,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏但指。R本人自食惡果不足惜寡痰,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棋凳。 院中可真熱鬧,春花似錦连躏、人聲如沸剩岳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拍棕。三九已至,卻和暖如春勺良,著一層夾襖步出監(jiān)牢的瞬間绰播,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工尚困, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蠢箩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓事甜,卻偏偏與公主長得像谬泌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逻谦,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • cURL是一個利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具掌实,支持很多協(xié)議和選項,如HTTP邦马、FTP贱鼻、TELNET等宴卖,能...
    司馬東陽閱讀 1,440評論 0 6
  • 原文地址:PHPcURL庫函數(shù)抓取頁面內(nèi)容(轉(zhuǎn))作者:巴克 cURL是一個利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具...
    司馬東陽閱讀 1,183評論 0 3
  • cURL是一個利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具,支持很多協(xié)議和選項邻悬,如HTTP嘱腥、FTP、TELNET等拘悦,能...
    你很鬧i閱讀 332評論 0 1
  • 在還沒有接觸curl的時候齿兔,相信大家在獲取網(wǎng)頁內(nèi)容的時,使用得最多的一個函數(shù)就是:file_get_content...
    四月不見閱讀 1,922評論 7 39
  • 沒有人可以取代父母對孩子的教育础米,我們的責任重于泰山分苇,Why? 一個生命到我們家庭中來,我們就要幫助孩子成長屁桑。同樣医寿,...
    瑜月兒閱讀 677評論 0 0