PHP招聘:如何面試應(yīng)屆生求職者
為什么要招應(yīng)屆生?不是因?yàn)楸阋,有人說(shuō)還沒(méi)跳過(guò)槽的人忠誠(chéng)度能搞些,這也不盡然,有些人沒(méi)經(jīng)受過(guò)工作的壓力,總以為自己碰巧找到個(gè)壓力大的工作,換換會(huì)好些,
PHP招聘:如何面試應(yīng)屆生求職者
。我的原因是……應(yīng)屆生好調(diào)教。在他們沒(méi)有被各種枯燥乏味的工作折磨的以為寫(xiě)程序本來(lái)就這么 SB 之前好好洗 子。
1、2、3 是基礎(chǔ)題,4、5、6 問(wèn)的是數(shù)據(jù)庫(kù)操作,7 算是綜合能力吧。
1. 進(jìn)制運(yùn)算
可以是讓他模擬一些簡(jiǎn)單的字符串函數(shù),類(lèi)似 bin2hex、base_convert、base64_encode,或者單純的,讓他手動(dòng)算一下 7 進(jìn)制的 54321 顯示為 9 進(jìn)制是多少。
應(yīng)該高中或者之前就能接觸到 2 進(jìn)制 10 進(jìn)制之間的換算了吧,當(dāng)然,他當(dāng)時(shí)很可能沒(méi)聽(tīng)懂。通常的情況,如果以前沒(méi)留意這個(gè)問(wèn)題但有理解能力的,可能能在幾分鐘的做出一些成功不成功的嘗試。至少不應(yīng)該很茫然。最糟糕的情況,連整數(shù)的最大值是多少都不知道,那就算了。
2. 描述一下常見(jiàn)的關(guān)于讀取文件內(nèi)容的操作,及各自的特點(diǎn)
應(yīng)該不用遲疑太久就把 file、fopen、file_get_contents、readfile 列出來(lái)。表現(xiàn)好點(diǎn)還可以提下 readfile 的流式讀取不占內(nèi)存之類(lèi)的。如果看的教材太老,可能只會(huì)說(shuō) fopen。最糟糕的辯解是不說(shuō)跟數(shù)據(jù)庫(kù)打交道比較多,文件操作沒(méi)怎么接觸過(guò),完全無(wú)視文件靜態(tài)化的存在。
3. 怎么模擬一個(gè) POST 表單提交
答 socket 或者 cURL 都可以。
4. 列舉一些常規(guī)優(yōu)化方式
正確索引(就不強(qiáng)求完全理解多列索引了,最好能知道每個(gè)查詢(xún)只能用到一個(gè)索引),知道索引提高查詢(xún)速度、降低插入速度。正確的字段類(lèi)型(能知道 char 和 varchar 的區(qū)別和優(yōu)缺點(diǎn))。text 類(lèi)字段可以單放一個(gè)表用主鍵關(guān)聯(lián)。總之他能說(shuō)的越多越好。順便問(wèn)問(wèn)他他所知道的最大處理能力是每秒多少條,哪怕是測(cè)試環(huán)境里的 benchmarking(今天看到份簡(jiǎn)歷,號(hào)稱(chēng)三年工作經(jīng)驗(yàn),將半個(gè)月三萬(wàn)條插入形容為他所遇到的最高的負(fù)載,寫(xiě)在簡(jiǎn)歷的醒目位置)。
5. “你知道,把時(shí)間存在數(shù)據(jù)庫(kù)里有兩種方法,一種是用時(shí)間戳,就是 PHP 函數(shù) time() 產(chǎn)生的那種整數(shù),另一種是 MySQL 里字段類(lèi)型設(shè)成 datetime。那么,為什么一定要后一種方式?”
最簡(jiǎn)單的一個(gè)例子,如果存的是時(shí)間戳,你無(wú)法按類(lèi)似“所有周三的數(shù)據(jù)”這種方式顯示內(nèi)容。這表明了他的學(xué)習(xí)階段:是否接觸了類(lèi)似日志分析類(lèi)的東西。因?yàn)檫@些是早晚都要接觸到的。
6. 簡(jiǎn)單聯(lián)表查詢(xún)
有這么兩個(gè)表
user 表:
id name
1 張三
2 李四
3 王五
4 趙六
apple 表:
id user number
1 1 5
2 3 3
3 1 8
4 4 6
5 3 2
6 4 2
apple 表的 user 字段跟 user 表的 id 對(duì)應(yīng),一條 SQL 語(yǔ)句查出每個(gè)人都有多少蘋(píng)果
如果他不知道 join,可能會(huì)這么寫(xiě)
SELECT user.name, SUM(apple.number) FROM user, apple WHERE user.id = apple.user GROUP BY user.id
正確答案應(yīng)該是這樣
SELECT user.name, SUM(apple.number) FROM user LEFT JOIN apple ON user.id = apple.user GROUP BY id
這兩條語(yǔ)句的差別是,不用 join 無(wú)法顯示出李四有 0 個(gè)蘋(píng)果 -_-
7. 假設(shè)我們要做一個(gè)公交系統(tǒng)的常見(jiàn)服務(wù),就是做查公交車(chē)怎么倒車(chē)的,
資料共享平臺(tái)
《PHP招聘:如何面試應(yīng)屆生求職者》(http://m.clearvueentertainment.com)。假設(shè)完全由你自己來(lái)搞,我只關(guān)心最后結(jié)果,你會(huì)怎么做這個(gè)項(xiàng)目。說(shuō)的越詳細(xì)越好。可能需要不斷提示?疾橐粋(gè)人的.做事能力,比方說(shuō)他首先會(huì)想到需要數(shù)據(jù),數(shù)據(jù)庫(kù)應(yīng)該怎么設(shè)計(jì),有幾個(gè)表,什么樣的字段。
可以加分的地方可以有這么幾個(gè)點(diǎn)。給站名編 id,匹配數(shù)字的速度要遠(yuǎn)大于匹配字符串。站點(diǎn)之間要距離的數(shù)據(jù),這樣計(jì)算最優(yōu)倒車(chē)路線應(yīng)該能考慮到站數(shù),倒車(chē)次數(shù)、距離等權(quán)值。如果很有遠(yuǎn)見(jiàn),任意兩點(diǎn)之間的數(shù)據(jù)應(yīng)該是提前算好的,比方說(shuō)有 200 條公交線路和 2000 個(gè)站點(diǎn),始發(fā)終點(diǎn)的組合可能是 2000 * 1000,每種線路可能有 1 - 6 種方案,有個(gè)表是來(lái)裝這近一千萬(wàn)行結(jié)果的,如果有線路變化,再用本地的機(jī)器重新算一遍線路。這樣整個(gè)系統(tǒng)才有實(shí)用價(jià)值。不然可能每次查詢(xún)都需要耗費(fèi)數(shù)秒或者更長(zhǎng)時(shí)間,只能當(dāng)單機(jī)軟件用。
這些題本身是交流的話題,而不是“做對(duì) 5 道以上我就招你”這種門(mén)檻。我面試時(shí)每道題都會(huì)給予充分的時(shí)間,如果他做不上來(lái),也起碼能判斷他的思考方式,而忌諱說(shuō)“如果你不知道就明說(shuō),咱們趕緊做下一題”。同時(shí)也能觀察出性格等方面。比方說(shuō)第 6 題,有人把 SUM 寫(xiě)成 COUNT,我就問(wèn)他你看看前面寫(xiě)的是否有問(wèn)題,同時(shí)又怕太明顯,又補(bǔ)充一句“也可能什么錯(cuò)誤也沒(méi)有、我在誤導(dǎo)你,你自己判斷”,于是他就不再理會(huì)、繼續(xù)接著寫(xiě)完整個(gè) SQL。再綜合他的其他一些表現(xiàn),我的結(jié)論是此人主見(jiàn)極強(qiáng)的,我不會(huì)用。屬于出了 BUG 第一念頭是 BUG 在解釋器上、做出來(lái)的程序跟產(chǎn)品需求不符時(shí)會(huì)說(shuō)是你產(chǎn)品沒(méi)說(shuō)明白的那種。相反,我很欣賞那些在做完第一道題的 7 進(jìn)制轉(zhuǎn)換后還知道驗(yàn)算的,因?yàn)榧热皇枪P算就很容易出錯(cuò)。我覺(jué)得這種人思考嚴(yán)謹(jǐn)、負(fù)責(zé)任。
其他的一些知識(shí),比方說(shuō) memcache、SVN、單元測(cè)試這些,都屬于經(jīng)驗(yàn)問(wèn)題,應(yīng)屆生很少需要接觸到這些東西(甚至文件靜態(tài)化也很少碰到),不像上面,我需要以此來(lái)判斷面試者對(duì)編程是否已經(jīng)入門(mén)。
還是在 ngacn 上看到的一句話,團(tuán)隊(duì)需要兩種人,要么 NB 的,要么聽(tīng)話的。
【PHP招聘:如何面試應(yīng)屆生求職者】相關(guān)文章: