1. 程式人生 > 實用技巧 >【建議收藏】精選多家網際網路公司PHP面試題

【建議收藏】精選多家網際網路公司PHP面試題

一、同城幫

之前隸屬於360公司,是360的一個分支,現在慢慢獨立出去,屬於創業性質的公司,主要是O2O方面的,面試內容如下:

1、說說專案(他比較感興趣360老兵那個專案,其他專案沒有看),問專案的具體內容,遇到的挑戰,具體解決辦法,快取的使用,為什使用redis,為什麼使用獨立檔案伺服器。

2、快取,問了memcache與redis的區別,redis的優勢之處。怎樣解決memcache命中率低的問題,問了在實際專案中memcache命中率。是否部署過redis伺服器。

3、svn與git 的區別,讓說具體的工作流程,使用git 的好處,以及怎樣處理衝突,基本的命令寫了兩個。

4、資料庫

(1)資料庫的儲存引擎,myisam與innodb的區別,說出除了這兩種外的其他儲存引擎。

(2)int 與bigint的區別,實際使用的時候主鍵選擇哪個?int(10)與int(11)的區別,var_char與char的區別

(3)資料庫設計,使用者表與登入表分開的好處,

5、php部分

(1)session與cookie的區別

(2)分散式怎樣解決session共享問題(可以從資料庫,ccookie存session,nosql方面解決)

(3)get與post的區別

(4)php __autoload機制

6、計算機網路

(1)三次握手與四次揮手的過程(主要是畫圖),各個引數的含義

(2)http與https的區別,https怎樣保準安全(結合ssl)

7、資料結構

(1)連結串列的結構體(線性和鏈式),插入一個元素的操作程式碼(紙上寫)

(2)排序部分,時間複雜度,寫出一個排序演算法。

(3)二分查詢的思想,時間複雜度

8、開發環境,linux常用命令,apache與ngiax的區別,平常用的開發環境是win還是linux等

面試心得:技術面試大約50分鐘,比較累,,,,還有是問問住宿、交通,畢業、實習時間,到崗時間等,hr人不錯, 面試整體不難,都是常用到的東西,演算法要隨手能寫。

二、新浪微博

一家網路公司,以服務大中華地區與海外華人為己任。2012年11月新浪註冊使用者已突破4億。面試內容做了一套卷子,大約6張(單面),試題大概如下:

1、為什麼想加入新浪,對新浪的印象

2、未來的計劃、目標、打算?

3、有沒有微博號,暱稱是什麼,粉絲數多少?

4、填空:(主要寫結果)

(1)判斷null的函式

(2)判斷變數是否存在的函式

(3)判斷是否為空的函式

5、php轉換json為數:組的函式

6、php 得到前一天的日期,格式如下(2015-08-24 10:20)然後寫入到檔案 /usr/test中

7、提取url,要求從"sina"中提取url部分(要求使用兩種方法)

8、連續子陣列的最大和例如輸入陣列為{1,-2,3,10,-4,7,2,5}最大的子陣列{3,10,-4,7,2}和為18

9、寫出常見的linux命令功能:top、ps、mv、find、df、cat、chmod、chgrp、grep、wc

10、寫出linux檢視80埠的命令

11、有一個ip日誌檔案每行一個ip,統計某一個ip出現的次數

12、資料庫設計,有一個釋出文章的資料欄位:文章id,文章標題,發表人,類別id,子類別id,所屬地id,建立時間,狀態

問題:(1)劃出資料庫設計圖(表之間的關係),表可以自己新增,說明這樣設計的目的,好處

(2)寫出建立建立文章表的語句,說說選擇欄位的依據。

(3)寫出查詢最新發表的10篇文章的sql語句,說說優化的方法。

13、系統設計

場景:現在要做一個使用者日程提醒系統,需求如下,可以記錄使用者每天的日程,代辦日程到了以後,以簡訊或者是郵箱的形式通知使用者,使用者可以檢視歷史日程,可以管理自己的日程(增刪改查),使用者有好友,可以檢視好友開放出來的日程,可以進行好友聊天。

要求:1:考慮併發性。

2:使用者量在千萬級別,日程數量在億,10億級別

3:保證安全、首頁家在流暢

4:使用快取伺服器

問題:(1)你感覺這個系統的難點在什麼地方

(2)這個系統各個模組之間的關係,

(3)這個系統實施的具體細節(快取,大資料方面)

(4)系統的安全性怎樣保證

一面(技術面):

1、主要是關於這個系統的資料表設計

2、這個系統當用戶比較多的時候可能反應較慢,怎樣解決

回答:利用快取來解決頻繁的資料庫查詢,使用者的好友關係、好友的歷史日程,我的歷史日程可以快取,他問當好友關係發生變化的時候怎樣處理,一開始我說清除快取,下次查詢直接查資料庫,他說這樣不好,這樣資料庫壓力瞬間變大,讓我再想想,我說可以清除快取的後在查資料庫恢復快取,他說不是最好的解決方法,最後他說可以先更新資料庫,然後根據更新的好友關係在更新快取(少查了一次資料庫,其實很簡單)。

3、這個系統的首頁載入比較慢怎樣辦?

開始我說,採用頁面靜態化,他說首頁是動態載入,頁面靜態化沒有效果,反而會拖慢系統,檔案IO需要消耗效能,讓我想想還有什麼辦法,我說快取首頁資料,但是要注意快取更新時間。

4、登陸問題,慢慢的系統的登陸比較慢,你知道為什麼嗎,怎樣解決

我說應該是使用者量太大,登陸的SQL語句優化不好,或者是沒有加索引,他說加上索引並且SQL優化到最好,還是比較慢是什麼問題,我說是使用者量實在太大了,超出了mysql的單表容量了,他問該怎麼解決。我說可以水平拆分,緩解資料增長的壓力,他說什麼是資料庫拆分,水平拆分和垂直拆分有什麼區別我說垂直拆分解決表與表之間的IO競爭,不解決單表中資料量增長出現的壓力,把不向關的表放在其他的伺服器上,水平拆分解決單表中資料量增長出現的壓力,不解決表與表之間的IO爭奪,感覺自己不是多懂,他說怎麼拆分依據是什麼(我對拆分只是瞭解)我說可以按照時間拆分,他說但是這樣的拆分沒有一點用,他說你再想想,我說我感覺可以,拆分之後單表資料變小了,查詢肯定快啊,他說你登入的時候怎樣確定使用者在哪個表裡面呢?我說在hash把使用者與分表的關係hash到一個表裡面,他說不是最好的解決辦法,並且hash麻煩,需要確定那張表才能進行查詢。。。他讓我再想想,我從儲存過程,資料庫快取來說,最後他說不好使,他說你可以採用使用者名稱分表,使用者名稱(a-z)分26個表,登陸的時候一下就可以找到他在的那張表了。這個問題大約談了30分鐘,回答的不是多好。

5、第三方登入問題

他問做過第三方登陸沒有,我說我自己嘗試過,利用qq做第三方登入,主要呼叫的騰訊提供的的介面,他又問我第三方登陸的原理,奧師認證方面的,原理,說說https的安全傳輸原理。

6、介面

他問我做過介面沒有,我說做過,他問介面怎樣判斷使用者登入,我說是生成token,他問token的生成原理,token的安全怎樣解決,token被劫持了該怎樣半,有什麼好的辦法。token被劫持我不知道該怎麼處理,這個可以查一查,反正當時我沒想到好辦法,我從token的生成規則,過期時間,新增令牌方面回答的,他說還可以。

二面:(技術、專案面試)

1、問我為什麼想加入新浪微博

2、說一下專案,他問360抗戰老兵那個,他訪問這個網站,問了系統的測試,開發細節,快取那塊問題,問了mc與redis的區別,記憶體管理的不同

3、訪問了我的個人網站,說可以下網站的架構和部署

4、問我想找什麼樣的工作,我說想找網站後臺,或者是app介面開發的工作

5、問我最有沒有學習新的東西,想學什麼新東西,我說可以看看nodjs 想關注php7

總結:一面技術面大約60分鐘,主要問了資料庫方面的,感覺自己回答的不是很好,二面也是技術面,主要是問專案(360老兵那個,大家對這個專案比較敏感),面試到12:30左右。整體感覺還行,問的都是資料庫方面的優化,表拆分,大資料的處理方法等等。最後讓我第二天等結果,第二天hr打電話說面試通過,說了實習的事,週一上班,週二辦理手續

三、美麗說

國內最大的女性快時尚電子商務平臺,致力於為年輕時尚愛美的女性使用者提供最流行的時尚購物體驗,擁有超過1億的女性註冊,面試內容做了一套卷子,試題如下:

1、mysql的索引是那種資料結構,為什麼使用這種資料結構。

2、設計一個數據表,用來儲存url資訊,此表會經常發生插入刪除操作,應用場景是查詢某個url是否存在,請寫出表結構,並加說明。

3、比較單詞a 和 b判斷b單詞的字母是否都在a中。

4、寫一個timer類,用來統計應用程式的執行時間,並寫出呼叫方法。

5、session與cookie的區別,說明禁用cookie後 session還能不能執行

6、新浪微博一年產生的資料量是多少,應該怎麼儲存這些資料。

7、狀態嗎:204,304,404的含義,可以參考(http://tool.oschina.net/commons?type=5)

8、介紹你瞭解的開源專案

一面(技術面):

1、介紹php的魔術方法

2、索引的最左原則

3、資料庫sql的優化,哪些sql語句執行會忽略索引。

4、策略問題: 4個人過橋,a要1分鐘, b要2分鐘,c 要5分鐘,d要10分鐘,兩人同時過橋,過橋速度以慢的為準,一人拿手電,過完橋後一個人吧手電送回來,問最快多長時間過完橋。

二面(技術面,問題):

1、說說專案,360老兵那個。

2、瀏覽器輸入url到頁面呈現,經過的過程,

3、mc與redis的區別,記憶體管理方面。

三面(hr面):

hr是個漂亮的妹子,聊得很開心,主要涉及工作打算,生活住宿方面的,大學學習經歷,是否瞭解美麗說這個公司等等。最後讓回去等通知。

總結:美麗說,公司挺大的,一面感覺還是資料庫方面有點吃力,主要是資料庫底層方面的討論不是多好。關於策略型別的問題,一般要不是你見過,基本上打不出來,但是不能說自己不會,你應該給出自己的見解,即使不完全正確。最後回去等通知,說是還有一個hr今天不在,如果覺得可以26號會打電話通知我來複試。。。最後還真給我打電話讓我去複試,時間是27號。

四、360金融

筆試題:

1、寫出PHP中以 array_ 開頭的函式,並說明用法,至少寫6個

2、mysql常用的儲存引擎,說出3個以上,並寫出每個應用場景,優缺點

3、redis與MC的區別,寫出其中一個的記憶體管理機制

4、檢視 Apache 80埠的命令

5、用C語言實現php中的base64編碼函式

6、用PHP寫出快速排序

面試問:

1、微博中reids的應用場景,redis的記憶體分配機制,為什麼使用redis不適用MC,mc與redis的併發哪個較高

2、array_map的使用場景,array_merge(),合併陣列之後的鍵名變換情況

3、php幾個編碼函式區別(json_encode, http_build_query, urlencode等區別)

4、正則表示式中 . * + / 的含義

5、給定一個數字,2進位制轉換成16進位制

五、美*網

筆試題:

1、列印前一天的日期時間格式:2016.03.18 10:15:12,列印上個月的最後一天的日期

2、說出 empty(),isset() array_key_exits();的區別

3、瀏覽器位址列輸入 www.baidu.com 以後發生的事情,和用到的協議

4、從連線中(< a href='www.meicai.com/index.html'>)提取出url

5、PHP傳送強求的方法,有什麼不同點

6、寫出10個mysql 的欄位型別,說明使用場景

7、一個數據表,70個欄位,10G的資料量,每天50w的資料增量,說出有哪些優化的方法

8、寫一個定時任務,每天2點到8點,每隔10分鐘呼叫一次PHP指令碼 /data/www/test.php

9、寫出檢視php-fpm程序數的linux命令

10、寫一個函式,判斷重一副撲克牌中隨機抽出的5張牌是不是順子,順子的定義:5張牌是連續的牌比如 23456 其中2-10是原數字,A是1,J是11,Q是12,k是13,小王大王是任意數。

六、瓜子二手車

一面(技術面):

1、介紹一個寫過的專案,畫出架構和技術點

2、coding 楊輝三角,求m行n列的值

3、使用正則表示式判斷ip的合法性,要考慮全面

4、redis和MC的記憶體管理機制

5、redis中資料儲存方式,各種資料結構應用的場景,redis做訊息佇列與專業的訊息佇列有什麼區別和優勢

6、最左原則的原理和sql的優化機制,什麼時候不會用到索引。

7、分條件查詢的優化和系統設計與架構

8、你最近學習的新技術,你對架構師的理解,你對GO語言的理解,速度快嗎?快在哪?

二面(技術面):

1、一條sql語句的優化機制,大資料分頁處理

2、矩陣的規律遍歷,寫出遍歷的程式碼

3、上司與你的關係,怎樣保證工作與生活的協調等等

4、抓取 a.html頁面,把含有a便籤中的href全部抓取,如果url含有 guazi.com就把該條url標題上guazi,然後再抓取該連結對應的頁面,這樣不斷的遵化你抓取,你怎樣解決死迴圈問題和頁面抓取效率問題。

七、百度外賣

一面(技術面):

1、說專案,介紹知識點,畫結構圖

2、資料庫最左原則含義用法

3、一個日誌檔案,列印某一時刻的併發數(記錄日誌的條數)

4、一個數組按照固定的值排序(按照id排序)
$a = [
['abc'] => ['id' => 1, 'value' => 233],
['bcd'] => ['id' => 2, 'value' => 463]
]

二面(技術面):

1、說說專案

2、資料庫最左原則

3、資料庫索引建立的原則

4、資料庫引擎,說出特點

5、redis和MC的優缺點,都在什麼場景下使用

6、列印日誌檔案中,出現最多的前100個IP

7、說出linux中常用的命令

8、php 和其他語言不同的地方,PHP中弱型別的實現

9、C語言中結構體和共用體的區別,每個佔用做少記憶體(二者已給出)

10、有沒有自己寫的一些作品,或者開源的東西

11、系統設計:百度外賣活動中的秒殺怎麼設計,注意點是什麼

三面(技術面):

1、介紹做的專案,畫出你做的一個模組的流程和開發關鍵點

2、有沒有學習新的東西,比如新的技術,語言

3、GO 語言看過嗎,有什麼優點,用在什麼地方合適

4、為什麼選擇百度外賣

5、為什麼不願意留在原公司,離職的原因在哪

四面(技術面):

1、介紹一個最深刻的專案,說出技術點

2、coding:一個數組 0 - n-1,已經排好序,打印出滿足 a[i]+a[j] = c 的所有i和j,說出時間複雜度

3、以後有什麼打算,學習的目標或者是自己的規劃目標

4、收到的offer都有哪些,為什麼沒有選擇這些公司

5、原來後臺專案有多少個人,每一個人的技術實力在哪

八、小米科技

一面(技術面):

1、寫一個類,一個單例類,輸入兩個陣列,$arr1, $arr2,每個陣列中存有整數(0-9), 這個類提供兩個方法,一個是排序$arr1,一個是把兩個陣列當成兩個大數然後進行相減,返回結果(第一個陣列如果是[5, 2, 3, 4] ,相當於數字:5234)

2、講解做的專案,講述知識點和自己的貢獻。

3、資料庫中兩個笛卡爾積在join中的體現,說出left join的中間過程

4、最左原則的意義,資料庫索引的使用情況和優化

5、網站開啟慢的原因和解決辦法

二面(技術面):

1、講解專案的架構,redis在專案中的使用情況

2、為什麼不留在原來的平臺

3、資料庫事務原理,是否使用過

三面(技術面):

1、資料庫優化,索引建立原則

2、資料庫事務的含義

3、redis與MC的區別,redis支援的資料結構有哪些

4、框架使用,優缺點

5、PHP中的魔術方法

6、是否使用過前端框架,js,jquery是否學習過

四面(技術面):

1、為什麼來小米網,對我們瞭解多少

2、給兩個陣列得到交集,各自的差集

3、給兩張表,得到各自的交集和差集

4、資料庫索引的欄位,哪些會用到索引,該怎樣檢視。

5、PHP短標籤,怎樣開啟。結束標籤有什麼影響

6、session和cookie的區別於聯絡,怎樣保證叢集下的session同步的問題

7、對架構師的理解,你認為怎樣才能達到架構師

8、div 怎樣實現三欄式佈局

9、php 各個框架的應用,php的安全相關

10、資料庫的優化,怎樣保證大資料量的資料庫訪問正常

11、資料庫叢集的特點和資料同步的機制

12、什麼是響應式設計

點關注,不迷路

好了各位,以上就是這篇文章的全部內容了,能看到這裡的人呀,都是人才。之前說過,PHP方面的技術點很多,也是因為太多了,實在是寫不過來,寫過來了大家也不會看的太多,所以我這裡把它整理成了PDF和文件,如果有需要的可以

點選進入暗號: PHP+「平臺」


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

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限於:分散式架構、高可擴充套件、高效能、高併發、伺服器效能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell指令碼、Docker、微服務、Nginx等多個知識點高階進階乾貨需要的可以免費分享給大家,需要的可以加入我的 PHP技術交流群