如何面試 PHP 工程師?


溫馨提醒:文末有彩蛋哦~

以下是原文:

噹噹當,小慕又來科(zhuang)普(x)了。

前幾天還聽一位HR朋友吐槽——

現在招聘真難!

面試了一堆,合適的沒幾個:

要麼是菜鳥,基礎都搞不定;

要麼能力有了,情商跟不上;

能力情商都有了,各種要求太多……

好不容易招來一位新員工,幹了兩個周發現不合適,又得重招(`Δ′)!

最後領導說,再招不來人,你們也要掛績效!

能夠聘到靠譜的員工,是團隊發展的頭等大事,特別是現在極火的程序猿崗位,對企業來說得千里馬者得天下!今天小慕就帶你捋捋面試PHP攻城獅那點事。

概括來說,就是:請看圖

好了小慕的分享結束了,再見。

………………………此處是加班分割線………………………

BUT!老闆說這樣回答太簡單,要寫的詳細點。

好吧,那接下來小慕就來具體說說。

第一步:捋清需求

招聘之前,明確公司對該崗位的需求,是演算法上的,還是工程上的?這直接決定著後續的選擇方向。列明公司的要求,讓招聘思路更清晰。在下一步篩選簡歷的過程中,選出可以進一步面談的工程師,提高效率,節省雙方時間。所以,捋清需求才是面試PHP工程師的第一步。

第二步:篩選簡歷

這一步,主要是HR的活兒。清楚了招聘需求後,通過招聘網站或獵頭公司,發布招聘信息。HR收集簡歷並進行初步篩選,然後交由技術人員做復篩,匯總意見,確定面試人員名單,並由HR做進一步面試約見。

第三步:也是需要著重說的部分——面試環節

經過初選,進入面試環節的求職者,通常需要通過幾個步驟,才能確定其是否是我們需要的人才。小慕將其分為技術基礎了解、深入了解以及HR非技術方面的溝通三個階段。

一般來說,對程序員的面試都會有三輪,根據公司規模及體系不同,有些情況下技術面和CTO面可能會合併。

一面通常是由技術部的同事來完成,對求職者進行基礎技術問題,以及工程實踐方面的溝通,全面了解求職者的技術基礎掌握情況,並針對公司需求,對求職者在對應領域的相關情況進行了解;

二面通常是由公司的CTO親自進行,面試目標在於了解求職者的技術偏好,深入了解求職者對技術的熱愛程度,以判斷求職者是否與公司成長相匹配;

三面是HR面,了解求職者離職原因、薪資期望等等,有的公司還會進行抗壓及心理測試。

我們著重說一下技術面相關的環節。

1. 基礎知識面試環節

面試PHP工程師,基本功的考察必不可少,可以從以下幾個方面中,有針對性地選擇幾項來進行考評:

2. 演算法面試環節

根據職位的具體要求,設計針對演算法的面試。即使是工程人員,也要對演算法有簡單的了解,比如讓對方寫一下鏈表各類基本操作、描述一下幾種簡單的排序演算法等,目的是為了對求職者的綜合素養有所了解。

如果公司對工程師有高層次演算法要求,那麼有深度的進行演算法面試,可以具體根據字元串、鏈表、樹、圖、排序、遞歸、迭代、動態規劃、位操作、概率問題、排列組合等分別進行有側重點的考察。另外可以對動態規劃、Dijkstra演算法等進行考察,也可以制定一些具體的演算法問題,讓求職者現場解答,測試解決問題的綜合能力。

3. 項目經驗面試環節

針對求職者簡歷中所陳列的項目,有側重點的進行提問,引導求職者陳述自己所承擔的工作內容,並有目的性的根據其項目經歷進行外延,考察求職者解決問題的思維及能力,比如:

給你256M的內存,對10G的文件進行排序(文件每行1個數字),如何實現?

假如你現在是12306火車訂票的設計師,你該如何設計滿足全國人民訂票?

PHP在2011年底出現hash碰撞,hash碰撞原理為?如何進行修復?

4. 對技術的熱衷程度面試環節

本環節是要考察求職者對技術的熱衷程度,最簡單的方式是詢問求職者是否在git hub等開源社區有貢獻,或者在CSDN等技術論壇有博客輸出。當然,也可以通過詢問其業餘時間都逛哪些社區論壇、學過哪些新技術等,或者通過溝通業內最新的技術動向,考察其對技術的熱愛程度,畢竟招聘到一位熱衷技術的工程師,是對公司成長的最大促進。

5. 溝通能力、團隊意識以及領導意識面試環節

對於求職者的溝通能力、團隊意識以及領導意識的考察,是對公司負責,也是對共事的同事們負責,畢竟工作不僅僅是碼代碼,還要和各個渠道的人打交道。這方面可以通過具體的情景問題來考察,比如:

假如你帶領著一個技術團隊做任務,但該任務無法按照進度完成,你會如何解決?

如果領導在現階段進度已經排滿的前提下,又插入任務,你會採取怎樣的措施,保證總進度不延期?

如果你後期要帶領一個團隊,團隊中有部分工程師當天預定的任務沒有完成,你會如何處理?

6. 引導提問環節

如果經過上面的環節,面試官對求職者感到滿意,就可以開始引導求職者對他感興趣的問題進行提問,看其關注的點及對公司的期望,以判定求職者是否有主動精神。

技術面結束後,判定符合公司要求的求職者,還需要HR進行進一步的細節溝通,主要涉及:離職原因、職業發展規劃、薪水、入職時間、加班補助等等。

通過其離職原因,可以判定求職者是否符合公司價值觀,是否能夠融入公司文化中。如有必要,還需要詢問其職業發展規劃,以及對公司的期望,甚至可以進行一些心理測試,判斷其抗壓能力等。

其他的像薪水啊、入職時間啊、加班補助等,雖然是常規事項,但同樣非常重要,因為月薪比別的公司低了大幾百塊而丟了一個優秀工程師的例子比比皆是。如果遇到不可多得的可塑之才,小慕的建議是嘗試做一下薪資浮動申請。

最後,面試的時間畢竟有限,所能了解的只是局部,很多沒有辦法從面試中得到了解的事項,可以通過試用期來進行考察。想要在短時間內提升自身面試能力的,小慕可以祭出終極大殺器↓

PHP基礎免費課程:

1)入門篇:

PHP教程_PHP入門視頻教程-慕課網www.imooc.com圖標PHP中的會話控制-慕課網www.imooc.com圖標快速入門ThinkPHP 5.0_模型篇-慕課網www.imooc.com圖標PHP函數篇_PHP函數教程-慕課網www.imooc.com圖標

2)進階篇:

PHP中的字元串-慕課網www.imooc.com圖標PHP中的自定義函數-慕課網www.imooc.com圖標那些年你遇到的錯誤與異常_php錯誤與異常-慕課網www.imooc.com圖標鬼斧神工之正則表達式-慕課網www.imooc.com圖標

3)更多PHP相關免費課程

PHP視頻教程_php基礎教程-慕課網課程www.imooc.com圖標

更多PHP相關實戰參考:

360大牛全面解讀PHP面試-慕課網實戰coding.imooc.com圖標實戰課程_慕課網coding.imooc.com圖標

PHP面試題匯總(偏基礎,適用技術小白):

幾個PHP的基礎面試題。_慕課手記www.imooc.com圖標11個提問頻率最高的PHP面試題_慕課手記www.imooc.com圖標PHP中級工程師面試題(一)_慕課手記www.imooc.com圖標PHP經典面試題目匯總(上篇)_慕課手記www.imooc.com圖標

PHP面試通關秘笈:

php 面試_(手記)搜索_慕課網www.imooc.com圖標

不用謝,就叫我紅領巾吧~

——————————————我叫分割線————————————————

PHP開發工程師

  1. - 設計規劃教育社區視頻類網站系統架構;
  2. - 維護優化網站;
  3. - 核心應用或者模塊實現;
  4. - 對其它工程師進行技術指導。

職位要求:

  1. - 熟悉linux,至少熟悉一種shell腳本語言(bash/perl/python等);
  2. - 熟悉nginx/lighttpd/apache之一的配置和優化;
  3. - 熟悉mysql/postgresql/sqlserver資料庫之一的開發與使用,熟悉memcached、redis等的使用;
  4. - 大專以上學歷,3年以上php開發經驗;
  5. - 有大訪問量網站開發、規劃經驗優先;
  6. - 有視頻播放、流媒體類網站研發維護經驗優先;
  7. - 有linux環境下c/c++/java開發經驗優先;
  8. - 有雲計算(docker等)部署、配置、開發經驗者優先;
  9. - 工作熱情、積極,易於溝通,能迅速融入團隊,有一定抗壓能力。

簡歷請發送到:wubinhua@imooc.com

既然有童鞋想到慕課網,歡迎大家踴躍投遞簡歷,說不定我們就成同事了呢~

小慕只能幫你們到這兒了,人生的路要寄幾走 ~


問一些日常的正常的PHP問題,主要是考察應聘者的認知:

  • 一個包含中英文的字元串如何獲得它的自然長度(看看ta是否有encoding的知識和意識)
  • 問一問什麼是ORM,有時候會問這個詞的英文全稱是什麼,問問ta對於ORM有什麼個人的看法?(看看ta學習細不細,有沒有技術判斷,PHP開發人員應該知道什麼時候使用ORM)
  • 問一問假如ta要自己去實現一個framework,ta會怎麼設計。(看看ta對代碼架構的理解,對MVC的理解)
  • 問一問framework設計里的url dispatcher他會怎麼考慮。(HTTP知識)
  • 問一問ta對框架本身的看法

  • 了解一下ta對Design Pattern的認知,比如Singleton,Observer,Factory等常用的設計模式,問一問ta對設計模式本身的看法。

  • 問兩三個資料庫設計的問題
  • 問幾個前端的問題,哪怕ta的職位是PHP開發人員,好的PHP人員不可能不了解前端,而且很可能很了解前端
  • 問一問ta對noSQL的了解情況(對與noSQL的認識是和傳統Relational DB的認知是分不開的)
  • 問一問ta碰到問題時候會如何去尋找答案
  • 問一問ta習慣使用哪一個搜索引擎(如果是http://GOOGLE.COM就有加分)
  • 問一問ta最近看的書
  • 問一問ta的職業規劃,喜歡做什麼,對工作環境有什麼要求

別出生僻的題,別為難人家,更不要變相的侮辱人家,正常交流為主,你要的是一個正常的人,優秀不優秀就看你的眼光和運氣了。

很多公司的技術人員招聘會刻意追求刺激的問題,比如很著名的微軟的「下水道的蓋子為什麼是圓的」,不是說這些考察毫無道理,但更多的是一種「marketing」的手段。

Modern PHP / 中文版

https://www.linkev.com/?a_aid=itlr


PHP 作為一種簡單、實用、「高效」的語言,是深受廣大初創互聯網公司喜愛的,這些年我參與和負責招聘過一些 PHP 程序員,覺得有這麼幾條:

1. 框架,你得熟悉幾種主流的框架,如果對上這家公司所採用的更好,什麼 TP,CI,Yii 等至少用過一個,知道 MVC,ORM 這些名詞解釋

2. 了解基礎的 Session,Cookie,Http Header,說得上幾個主要的 HTTP 狀態碼,能搞清瀏覽器/客戶端「緩存」的不同手段和生命周期,了解下 REST 更好

3. 做 APP 和 RIA 的公司挺多,XML,JSON 格式要清楚,SOAP/WebService 了解點更好

4. 深受中小企業喜歡的語言嘛,小作坊主就是指望著招一個人把前、後、運維都管了,HTML、CSS、JS、MySQL、Apache、Bash 等都要了解些,尤其是前端,熟悉 Bootstrap, AngularJS,VUE 之類的更好,前後通吃那是最好不過了

5. NoSQL 越來越被神化,像 Redis,MongoDB 等知道怎麼用也許能加點印象分

其他的想起來再補充。

說點跟 PHP 沒什麼關係的。上面有人提到學歷、經歷之類,作為一名沒有學歷的混了十幾年的老IT混子講一點我個人的體會,學歷還是有用的,就算你說他是敲門磚,這磚也有好壞、貴賤之分。如果是比較大的公司、如果你不是能力足夠掩蓋你的過去或是有足夠牛的人為你背書(推薦),恐怕也很難通過面試,因為有些大公司會希望他的員工一直都足夠優秀。——這也是我為什麼選擇自學的原因,與其在一個野雞大學混吃等死,不如乾脆點了斷自己的過去,至少再沒那麼容易查到大爺我的過去,至少從那一天起我有權利選擇我自己的路。

我遇到沒學歷的一般會多聊一會兒,但理性的說要的可能性還是很低,對此類朋友的建議是:如果您已經這樣了,切記走「專」+「廣」的套路,這兩個放一起並不矛盾,選准一個行業、領域,這是專,說話三句不離本行,即使你應聘的公司跟這個領域關係不大,你也能快速的發現相同點,聊下去,佔據主動;我假設您像我一樣受制於一部分更深層次的基礎知識掌握的不夠,這方面繼續「專」(裝)下去恐怕也要露怯,再加上一個「廣」就齊活了,有能力把各個片面組件、部門組合利用,加上前後通吃,還是不用太發愁的。說白點,就是做一個相聲圈裡歌唱的最好的,歌唱圈裡相聲說的最好的——這是對那些擔心學歷問題的一點個人經歷的建議。


在另外一個問題中答過:面試php工程師出什麼考題?

工程師能否勝任某個崗位很大程度上受專業程度、周邊知識、溝通能力、主動工作的意願等多方面因素影響,對每個Team來說需要考核的重點是有區別的,但總的來說都是基於上面問題里提到的幾個方面根據對候選人的觀察考量提出相應的問題並通過回答來確定他在這些方面的真實水準。

但短短的面試時間往往很難考察出,或者說讓候選人體現出其全部的能力來,所以面試過程里除了傭人團隊的Leader、Manager和HR外,最好能包括 和候選崗位同一個Team的其他工程師、主要合作的Team的Leader,但只是簡短聊聊,從別的一些角度提供一些參考意見。

基本上面試過程就是找到成本在企業能承受的合理範圍內,同時面試官也願意與之一起工作的志同道合的人。我自己面試而言,會比較欣賞具備獨立解決問題的能力、對常見事務和產品有自己的思考和看法的人。


好吧,對於樓上眾位的問題,我有一半以上的答不上來.

面試者向來很就主觀,而且都喜歡以他所熟知的領域或者知識點來刁難對方.無論你怎麼問,他的知識範圍和你的知識範圍並集定是少之又少(除了php基礎).但是考基礎的語法,又體現不出水平.除非他知識面極廣,這樣人早有成就了.

echo "1".print(2)+3;//這種代碼很多人平時都不會用到.但查手冊便知

如果認為OOP,MVC,ORM,框架是沒用的,直接斃掉 //可是連php大牛鳥哥都認為oop的c++沒有用啊,因為他沒有用到!

要把一個新人搞死太容易了:怎麼用php正則匹配gbk.

preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str);//Oh,no.網上全是這種錯誤答案.面試官會很亢奮的將他pass

我一直覺得面試應該善於發現他所善長的東西,還有你得清楚你的項目具體需要哪些能力的人(比如在一個普通團隊項目中,我非常看重一個人對一個需求解耦/框架/模式的理解,我可不願意要一個進來把我的代碼搞亂套的人).而不是他知道多少晦澀的語法和他不曾知道的技巧.


今天是2018年1月3日。

差不多距離我這個回答已經過去四年了。

四年來,回想自己的求職之路。

感覺只能說一句:莽撞!

感覺自己沒有一個領路人。對於學習總是東一棒槌西一棒槌的狀態。

首先介紹一下自己的近況吧:

技術得到了很大的提高,工資相對於我的第一份工作也得到了很大的提高,但是唯一沒有變的,就是我的溝通能力,感覺因為自己一直寫代碼,缺少跟他人溝通,導致自己的交際能力差了許多。

其實本問題的題目是:如何面試PHP工程師。但是我並不想這麼回答。我想說下被面試。因為我都是被面試,對於面試別人我還不太熟悉。

我首先解釋一下,我個人理解,對於自己的技術體系,要有一個全面的認識。

比如我們是做PHP工程師。那麼我們要熟悉的點有:

  1. 編程語言:首先就是PHP,要熟悉PHP的面向對象,PHP每個版本的特性的不同等等,一些坑,還有就是熟讀文檔,當然最後還能熟悉其他語言,比如Python,Node等等
  2. 資料庫:肯定就是MySQL,被問的最多的就是MySQL的優化方法和複製等。
  3. 緩存:Memcached,Redis和MongoDB,了解Memcached和Redis的區別,會MongoDB加分
  4. WEB伺服器:會用Nginx,了解負載均衡等。會lua加分。
  5. 架構:Linux的基礎命令,搭建一套WEB環境。明白當從瀏覽器地址欄中輸入網址,後面都是發生了什麼,從DNS,到web伺服器,到PHP,到資料庫等等。
  6. 了解PHP框架,比如LARAVEL,其實還是說了解Composer,控制反轉,注入依賴,設計模式等。
  7. 了解一些底層實現,比如C語言,PHP的內核等等
  8. 前端。比如HTML5,CSS3,BootStrap,Vue.js, react.js, Angular等。

其實這上面也不是我全懂。

我現在也是經過自己摸索和別人的幫助之後,給自己總結的一個技術體系。我個人還是偏向後端,對於前端有興趣的可以多了解下。

嗯,基本上就是這樣了。我知道我的文筆不好,大家湊活著看吧。如果有什麼寫的不好的,或者不明白的,大家可以隨時評論,我會儘力多多更新。

===============================================

原答案:2014-03-21

我說點自己的經歷,跟樓主的問題不太相關的。當我剛剛來到這個公司的時候,我投了簡歷,然後來面試了。結果,老闆根本沒有問我技術的問題,只是問了我一下學習經歷的事情。我當時也很奇怪啊,後來在公司裡面呆的時間一長,才發現,原來老闆不懂技術。然後來了之後,剛開始三周,啥都沒有干,沒有人給我說任務。後來,就給我一個網站,然後給我一個參考網站,讓我用thinkphp改造一下這個網站,中間都是我出現一個問題,然後解決不了,我就去找同事幫忙。老總說是有人帶我的,結果最後還是我自己吭哧吭哧的把代碼寫完了。現在想來,我就是把代碼熟悉了一遍,感覺有點囫圇吞棗,根本,有的代碼是啥意思,我都還沒有搞透。現在想來,是不是,我的基礎太薄弱了。。。


主要還是看項目經驗吧 抽出其中一個 往細處聊:

安全方面;資料庫方面;緩存方面;業務方面;設計模式方面。。。。


解決實際問題的能力,比現有的能力更為重要。PHP 是一門簡單的語言,關鍵還是在於對實際需求的解決能力。問一些你遇到過的或者經驗性的問題更重要。考什麼演算法。。之類。。崩了~


1. 你愛用甚麼工具開發? 它有甚麼吸引你的地方? 工具和sdlc 的組成方法關係密切,能說出開發具體部分的影響的開發者,他的生產力必然好。

2. 你有開發過框架或函數庫嗎?中間出現過哪些令你覺得有趣的地方。

從突破點的層次的高低可以看出他的技術水平。

如果2. 沒有的話,就問你喜歡哪個框架? 和其他的比起來分別是甚麼?

如果只能說出官網的宣傳標語就不行了。

3. 在你眼中PHP 的缺點。

看他是不是對其他的語言也有相當認識。

4. 甚麼是Traits?(或者其他php 的新特性, [ ] 不算)

看他有沒有緊貼潮流。把專案開發方式的壽命最大化。

5. 不計fulltext index, MyISAM 和InnoDB 中的差異中,何者是你作為專案初期選擇的最優先考慮項?

從這題可以看到他對數庫引擎的真正理解,而不是流於描述不同點。

6. 你會選擇Laravel, Phalcon, CI/Yii?

這有點像心理測驗。

Laravel 算是會best practices 的人

Phalcon 算是個人能力較強的人

Yii 等的算是大眾

7. 對Hack 和HHVM 有何看法?

自由發揮,比較能看到他對低階層面的理解,表達解釋能力,對歷史的理解和未來的展望等。愛思考的人都會對它有一定感受的。

8. PHP 中的Session 要如何確保其效率?

雖然是較實務的問題,但應用面還是比較廣闊的,方案也多。

可以問出分佈式的設計方法,SQL vs NoSQL, 檔案系統的搜索瓶頸,Redis/memcache, 甚至搜索優化方案等。

想到再更新。。。


1,解決問題的能力和掌握的知識,看你招聘的目的而決定其二者的平衡。了解流體力學的確會對通下水道有很大幫助,但流體力學專家未必都會疏通下水道。

2,創造力,一個沒有自己作品的程序員不是好程序員。編程跟寫作一樣,最終的目的不是敲字,而是完成作品。有人用windows圖畫板畫蒙娜麗莎,而有人用ps就只能調調顏色,畫幾條線。二者的區別就在於創造力,而不是各自都會什麼工具(或者懂什麼知識)。

3,自學能力。編程界每天都在產生新鮮的東西,願意自學和主動尋求新東西,會在將來的工作上事半功倍。

4,人品。這點會大大影響後期的團隊維護成本。

5,代碼的優雅。不在乎大括弧在上還是在下,不在乎等號左右是否有空格的程序員,一定是不夠謹慎、粗枝大葉的程序員,而有代碼潔癖的程序員會不斷挑戰自己的代碼,讓自己的代碼日趨優雅。

6,文檔習慣。喜歡查閱文檔,喜歡記錄文檔。這是團隊協作與後期維護必不可少的能力。

7,足夠聰明,話少。表達能力強的人,一般都不適合當程序員(大腦神經通路的影響),除非是頭腦特別好用的人,但這種人很難遇到。

下面再列些我認為比較糟糕的面試,如果面試的朋友遇到這類面試,可以考慮直接走掉:

1,出各種古怪刁鑽的程序題,而且要求面試者徒手解答。人的大腦是有極限的,記了瑣碎的東西,肯定就裝不下更多重要的知識。

2,考察的知識點凌亂繁雜。根據經驗,這類公司最後的聘用薪資都低的可憐。

3,面試官盛氣凌人、輕視、頻繁質疑(或者頻繁確認)面試者所闡述的內容。物以類聚這個成語同樣適用在職場,如果你不喜歡他或者他不喜歡你,直接放棄吧,不要為難對方和自己了。


"你只會PHP么?","對的".

"幾年經驗?","5年經驗".

"好你可以走了"


面試了不少PHP程序員,要說怎麼面試不如問問你自己想招一個什麼樣的人,比如初級的PHP開發工程師,高級的開發工程師,服務端架構多面手等等,所以不同層面的人選需要面試的東西肯定也千差萬別。

而我一般更喜歡面試比較基礎的能力,比如:

1 計算機的很多基礎概念以及網路相關的一些基礎知識,能夠看看計算機基本功是否紮實,是否活學活用,再給幾個簡單多種解法的演算法題目,看看是否還有寫代碼,思維是不是還靈活;

2 然後問一些PHP的應用層面的基礎知識,如果表現不錯會繼續追問PHP的工作原理,會引出協議,Linux,Web伺服器等,主要想了解是否知道PHP的工作原理,Linux系統的熟悉程度,伺服器的配置優化等。

3 然後問一些常用的數據存儲的知識,如mysql/redis/mongo等的使用,搭建維護優化等,注重一些原理。

4 再然後問一些常見應用的解決方案,如全文索引,日誌收集,海量日誌分析等等


我對php工程師的面試一般有四個環節:

一,自我介紹

任何一個面試的開始,我都會先對公司、所面試的職位以及我自己進行自我介紹,這一點我覺得很重要,而且這個也是很多面試都忽略的一點,別人來面試,可能對你的公司完全不了解,如果你不是知名的互聯網公司的話,這一點很正常,對於職位的信息,面試者可能知道的就更少,如果面試了一場,別人都不知道自己處於公司架構中的一個什麼位置,我很懷疑這種公司是否招人,面試官也是否真誠。最後應聘者對面試官的信息的了解估計就更少了,可以說是一無所知,而面試官已經從簡歷上知道了應聘者的大部分信息了,所以這個自我介紹就顯得很有必要,而且必須是在面試開始的時候傳遞給應聘者。

二,應聘者的自我介紹

因為簡歷中已經有應聘者的基本信息,所以這個介紹並不是為了得到更多的應聘者的基本信息,只是從第一個環節轉換到第二個環節——開始對應聘者的提問。自我信息介紹完了以後,我會開始讓應聘者介紹他的工作經歷、離職原因和各個公司大概的項目經歷,這個環節就基本上可以考察出這個人的能力處於一個什麼位置了。一般優秀的人在介紹他的項目經歷都會顯得比較自信,這個很關鍵,這就是所謂的成就。優秀的面試官這個時候就應該給對方以肯定,然後再在後面的環節中重點考察,不過有些遺憾的是大多數面試官的第一反應是懷疑,而且特別喜歡找出別人的破綻,然後發表自以為是的高見。如果對方所描敘的每個工作的經歷都差不多,也沒有什麼值得大書特書的項目經歷;如果這個人工作了比較長的時間了,那可以說明這個人並不是一個很有進取心,能力也一般的人,當然這並不是說就可以把別人pass掉了,最後是否招聘,需要考慮的還有這個職位需要什麼樣的人,以及這個職位能夠提供多少薪水,別指望花少的錢招好的人,即使這樣招過來了,別人也干不久的;如果應聘者工作的時間並不長,那麼就可以考察一下對方是否有潛力了,我個人覺得招聘到一個有潛力的人是最成功的面試,因為這種人的薪水不會很高,而且有潛力意味著肯學習、積極,這會給整個團隊帶來很多正能量,並且如果他可以跟公司一起成長,那麼假以時日,對公司而言就會是一筆相當可觀的財富,對於對方而言也是一樣,這是一種雙贏。

三、能力考察

這個環節是最關健的。通過第二個環節了解了應聘者大概處於一個什麼位置,那麼這一步就是要考察對方是否真正的具有我們所認為和所需要的技術能力、潛力,除此以為還要考察溝通能力和團隊協作能力。所有這些能力都可以歸結為一點,那就是解決問題的能力,因為程序員的日常工作就是不斷的解決一個又一個的問題,那怎麼考察呢?我一般會以下面幾種方式來考察:

1 選取應聘者自認為所做的項目中最有價值、最有挑戰性或者最有難度的部分,我首先會了解他是怎麼解決這些問題的,然後在他的回答中進行互動,提出各種各樣的問題和假設,考察對方如何應對。

2 跟對方探討他所最熟悉的技術,框架啊或者資料庫之類的東西,或者是一些他在簡歷提到的或者是在第二個環節中提到的,注意這裡主要的目的是探討,因為有些技術我自己也未必熟悉,不過如果應聘者可以把某個他熟悉而你不熟悉的技術的特點講清楚,這就相當不錯了。

3 我提出一個問題來探討如何實現,然後在實現的過程中不斷提出新的問題。

一般在一次面試過程中這幾種方式都會用到,而且三個過程都會伴隨著在紙上或者白板上畫一些解題思路以及架構圖,當然最重要的是,這裡必然會有一個部分要求應聘者寫代碼。

對於上面的幾種方式的結果,如果對方能夠很好的理解我所提出的問題,以及對於各種問題都會有自己的見解和解決方案,並且對於某些問題還可以提出比較獨到的見解,特別是可以對我所提出的問題進行批判,指出其中的不合理之處,那麼很顯然這會是一個很優秀的程序員,當然這並不是說招聘就應該招這種人,這需要面試官來判斷,結合職位的要求和薪資水平來決定吧。

四、提問

一般面試的最後都會有這麼一個環節,這個環節意義不大,不過我個人還是更喜歡應聘者會提出一些關於職位、團隊和將來可能的工作相關的問題,不是很喜歡關於薪資、是否加班、以及福利的問題,這些都是跟人事相關的,至於加班,呵呵,做技術都會有一點,那些加班很多的公司估計也不會說得很明確吧。

最後說下我個人在面試中不是很關注的東西:

1 學歷,我之前面試過一個還不錯的人,但後來這個人學歷造假,入職沒有通過,人事告訴我的時候,我告訴她我都沒有注意到他的學歷。不過這不是說學歷不重要,只是我覺得學歷不應該成為關注點,特別是對於應聘者,自己搞不定,就別怪學歷。

2 工作經歷。這不是說工作經歷好和工作經歷壞都一樣,很顯然工作經歷好的會加分,但這並不意味著工作經歷壞就會減分,我們處於一個什麼樣的環境大家心裡都清楚,一個人學歷不好一畢業就很難進入那種知名的公司,去不知名的公司,碰到垃圾公司的概率很高,工資低、加班多、福利差,所以跳槽多一點,完全可以理解。

3 死記硬背的東西。例如前面幾個人的回答所說的那些問題,這些問題只有在我實在找不出什麼問題問,而且所問的問題都得不到滿意的回答,而且說不了1-2句就斷了的情況下才會問,不過這種情況出現了也基本上意味著面試就結束了。

好了,就寫這麼多了,面試是一個動態的過程,而且要在1-2個小時的時間內就考察出一個人的能力這基本上是不可能的,所以很多時候是否能夠招聘到合適的人面試官的面試能力才是最重要的,特別是在公司時間和成本有限的情況下,面試官的一次面試就要做出是否招聘的決定的時候,面試官的面試能力就顯得更重要。不過我個人還是覺得面試應該制定一個制度性的流程,通過幾輪不同的人的面試來決定。關於這個我推薦大家一本書,名字叫做《打造Facebook》,這是一個facebook的華裔技術人員寫的,裡面說到的facebook對工程師的面試方式還是很有借鑒意義的。


  1. 基本技術了解
    1. 資料庫的基本感覺,如何優化
    2. 熟悉的框架,MVC的理解,對象
    3. 代碼安全因素
    4. 緩存技術的了解,memcached等
    5. 高訪問量的解決方式
    6. 平時解決問題的方法

  2. 技術積累經驗
    1. 錯誤經驗分享
    2. 成功經驗分享

  3. 對前台和伺服器的了解程度
    1. 基本腳本和ajax的使用
    2. lamp環境的了解
    3. linux伺服器
    4. svn方面


我面試過不少php的程序猿 也算是有點經驗

一般開場可以問下 熟悉面向對象嗎

MVC框架是什麼

用過什麼比較有名的框架 說幾個

然後問下 了不了解設計模式

然後可以問幾個實際的問題 比如說 如何做購物車 如何做全站消息系統

有沒有用過redis

有沒有用過消息隊列

最後可以問下 會不會其他語言 了解C嗎 了解linux嗎

一個網頁從伺服器到客戶端都經歷了什麼

自己獨立做過什麼成熟的產品嗎

基本上就是這些啦


如果面試人不熟悉Php,那真的很困難,建議找個Php高手客串下面試考官。


我一般在面試開發的時候會問以下幾個問題。回答80分以上直接招來。HR都無視

僅供參考

1 你寫代碼有多長時間了,有沒有做過開源項目

2 你如何理解的面向對象編程(什麼是面向對象)

3 PHP為什麼不安全。主要有那些安全問題

4 業務和性能衝突的時候你會怎麼辦

5 開發過程中你覺得最難的是什麼

6 你覺得你和其他人比你的優勢是什麼

7 如何對一個億級數據的表按照一個沒有索引的欄位進行統計


1.看做過什麼產品,產品優點、缺點、改進方向。

2.介紹自己公司要做的東西,讓他評估多長時間能完成。其中哪些地方是比較有難度的,哪些地方是要特別注意的。

3.招人是為了能做事情,不是為了看到知道多少事情。能解決問題的人才是牛人,不是學習問題的人。


以下題目是我面試時給php程序做的題目的基礎編程部分(我個人認為是送分題),大部分我面試的php程序都做不出來, 看來時代不同了,也許是我思想太老了。

寫出一下各段代碼的輸出結果:

1.

$a = (1 &< &< 0);

$b = (1 &< &< $a);

$c = (1 &< &< $b);

echo ($c

$b) &< &< 2 * $a

$a;

2. echo "1".print(2)+3;

3.

$a = 0x01;

$b = 0x02;

echo $a===$b &> &> $a;

$foo = 5 + "10 things";

4. print (196*100) !== (double)1960;

5. echo 0500

6. $a = 0;

echo ~$a;

後來我取消了這類的題目因為對工作上沒有太大的影響,主要還是看你對設計模式的理解,是否掌握MVC, OOP程度到多少,還有就是你是否喜歡學習,願意學習。 代碼維護和代碼質量也很關鍵。


前端:

Doctype的作用。

如何隱藏超出對象部分的內容。

Name,ID有什麼區別。

怎麼使用jq,jq如果要是和其他類庫衝突怎麼辦?

charset=utf-8一般寫在html什麼位置?

客戶端的對象資源緩存問題。

如何隱藏一個對象。

Js url怎麼傳遞中文?

http的header裡面有哪些東西?

習慣使用什麼工具作為前端調試?

舉例說說IE和其他瀏覽器幾個不兼容的地方。

Ajax的使用。

會不會SEO

PHP

PHP有什麼東西可以提高運行效率的。

PHP如何防止注入

會使用哪些模板

如何防止一些關鍵php頁面被下載

會不會memcached

如何防止XSS攻擊?

正則表達式

Mysql

哪幾種類型的存儲引擎,各有什麼優缺點

平時寫sql語句要注意些什麼

你認為的一般性系統瓶頸出現在哪些地方?緩存,資料庫,php,前台。

如何優化他們。

額外:

SEO,網站分析,用戶體驗。

中級php程序員


推薦閱讀:

面試題:一個長度為n的數組,其中數組中每個元素的值都不大於n,如何用O(n)的演算法判斷數組中是否存在重複元素?
為什麼有時任職要求都符合,簡歷總是被拒絕?
留學美國常見面試問題有哪些?
能在一個公司待3-10年是一種怎樣的體驗?
什麼時候你覺得自己被面試官套路了?

TAG:面試 | 程序員 | PHP | 編程 | 程序員面試 |