這些問題答不出,是否代表不能成為能獨當一面的PHP工程師?

前幾天面試了一個3年工作經驗的PHP工程師,下面這些問題沒答出或者答錯(紅字部分為答錯部分)。

我們是創業公司(非外包)後端只招一個人,主要工作是二次開發和迭代,薪資10K-15K,並正常算加班費

是否能表明這個人不適合我們?

求PHP大神解惑。


有些問題不是 PHP 工程師的工作,而是運維的,比如 Apache 和 php.ini 配置的問題。雖然 PHP 程序員懂也是好事,但是基本上都是 Google 一下就好了。

還有很多重複造輪子的問題也是,驗證碼什麼的,大多數是不會自己做,而是採用已有的成熟解決方案。有很多包可以用。

抓圖和抓信息的實踐問題,不如問一些集成第三方 API 的問題來得實際,比如接入支付寶支付和微博登錄什麼的。

編程題有點太細了。

PHP 程序員主要是來做事的,會不會做架構,會不會整合,懂不懂安全(跨站腳本什麼的)。而考察最基本的 PHP 語法和函數的話,不能驗證他是否能獨當一面。


出面試題不要抖機靈,否則培訓機構很容易針對性搞定你們…

面試題不要亂抄襲,就面試題內容而言,十年前就已經不留行這麼出面試題了,這樣找不到你需要的人,要找到能寫業務代碼的人,適當可以跟面試者一起討論他以前做過的項目架構,否則你很容易被培訓機構出來的人忽悠住,而培訓機構出來的人還需要不少時間才能做項目,除非你有人,有資金能培養這種人…

cookies有啥好實現的?負載千萬cookies也能頂住,因為是存瀏覽器的東西。你問的應該是session,自己首先要懂點,別亂抄襲面試題…

PHP5.4好像就已經去掉了safe_mode了,不再支持了,而PHP項目大部分都已遷移到PHP7了,所以你抄襲的題目過時了。而且safe_mode是給寫程序不注意安全的人用的…

還有傳引用之類PHP都不推薦了,PHP自己會優化,詳情可搜索PHP7變化了解下…

給電腦,給題目,讓其自己寫代碼,調試好…

還可以討論對方以前做過的項目架構,了解對方做項目能力,也可以避免對方緊張,避免對方面試發揮失常,避免面試題片面而無法了解對方能力…

原則就是能做事,出產品就可以要此人…

對於某些屬於坑的面試題,很多坑phper都是繞過,或者封裝好,之後就不會面對那些坑,你要對方解釋坑也要給對方回顧的時間…

以上個人看法…


從結果上看,答案是:這人絕對不合適。原因是基礎太差

萬萬不能因為有些人說,因為查資料翻手冊可以找到答案的程序員就可以而降低標準,說這些話的,往往水平也好不到哪去。我見過太多這種,真遇到問題,會嚴重拖延進度,後悔都來不及。正是因為 PHP 圈子裡這種人極為普遍,才使得 PHP 變得如此招黑

我認為題主目的是找一個獨當一面的後端,而且就一個人,那麼這些問題是不夠的。而且有的也並不合適。

既然招人是是有明確目的,那麼問題就更應該有針對性。必須從基礎考察做起。基礎部分有以下內容,我會順便給出為什麼要考這些,其意義何在。

1. HTTP 協議基礎
比如請求方法有哪些?區別是什麼?請求頭常用的一些參數?響應頭常用的一些參數?

這個問題原則上是所有做 web 開發都應該會的,但是考慮到 PHP 這門語言的特殊性(招黑原因),使得其很大一部分開發人員並不懂得這些基本知識,但對於需要招聘獨當一面的後端工程師,這個絕對是必須達到的要求。

其主要考察回答者對協議的了解程度,對此了解越深,爬蟲問題、RESTful 介面問題、對任意訪問、請求(包括下載、文本或二進位文件傳輸)進行控制、定製的 Cookie 模塊以及基於 Cookie 的 Session 等等這類東西,都會變得十分輕鬆。也不會發生什麼有一天吼道為什麼 header 函數調用沒有效果啊這類對於一個能夠「獨當一面」的後端而言的愚蠢之極的問題。

2. PHP 基礎

由於 PHP 語法簡單,反而更容易考察細節。比如不同類型相互轉換結果(浮點數這塊重點中的重點,敲黑板)?不同類型比較結果?require 的文件內的代碼段所處作用域?Trait(PHP 5.4 後的特性)的作用?什麼是迭代器?對生成器是否有了解(PHP 5.5 後特性)?了解的話其意義何在?

這一塊考察內容非常的多,不建議一股腦甩出去太多,所以就給了幾個參考。

上述問題中,第一個很多人都能說出絕大部分,部分說不上來也沒什麼,畢竟 PHP 版本更迭有些特性存在改變,但是浮點數這個是絕對絕對的重點,這意味著應試者在設計一個涉及到浮點數的系統時考慮問題是否全面(比如財務、庫存管理等等這類涉及到計算的系統),這可不是說發現問題才查文檔就能解決的(如果有些問題他說查文檔能解決且知道在文檔哪一處,網速快的前提下,就讓他在 10 秒內翻到文檔或手冊對應位置,熟悉的肯定能做到,一開始錯誤犯下,那後期就是噩夢。所以獨當一面的後端這個問題犯錯就咔嚓。

不同類型比較結果這個問題題主之前有問,這個按理不應該答錯。不過要注意,這類問題用不著搞奇葩的變種問題,純屬浪費時間,題主這個問題就很好,簡單明了。

require 的文件內代碼所處作用域這個問題就很有趣了,非常適合需要招聘一些相對實力比較好的後端,這個不但考察對變數作用域的了解,還考慮到了多層引用,因為這也是模板引擎用到的原理,這對於原生開發或使用定製改良開發框架時,肯定涉及到的部分。

後面的問題都備註了 PHP 版本,其實按道理目前 PHP5.6 和 PHP 7.0 是主流,考慮到國內大環境,仍然很多 5.3 以及更低版本的。這個問題主要考查後端對新的版本特性變更是否有較為深刻的了解,這意味著其發展意願,這對於初創企業十分重要。當然如果題主正好用的是相對以前有新特性的版本,可以拿一個比較有代表性的特性提問。切記,哪怕他說了這個特性運用在了什麼地方、有什麼有趣的實現,依舊不代表其真的了解很深,例如說生成器可用於實現協程的,如果真的會,有機會讓他寫一段試試(不過面試時就別這麼來,沒意義)

3. PHP 進階相關

這部分考察內容相對綜合,但對於題主要求,仍然必要。

CLI 模式和 CGI 模式的區別?輸出響應的辦法有哪些?區別是什麼?Session 的實現?

第一個問題比較直接,目的很明確,就是想知道回答者除了用 PHP 做 web 開發還能不能做點其他什麼,所以這個問題回答結果不重要態度很重要。

第二個問題其實還算基礎,但是涉及到的一些諸如封裝協議、文件讀寫等等,如果不了解可能就只能答出 echo/print 等,不過 echo 、 print 在這個問題下,實際上沒有區別。重點是考察其對 PHP 輸入輸出流的理解。這對於處理數據導出、大文件輸出、文件下載時的許可權控制等有實際意義。

第三個問題很綜合,首先得了解 HTTP 協議,知道 Session 的本質,和 Cookie 的關係,只要明確這幾點,就能夠回答了。當然,直接回答使用什麼 session_ 打頭函數的,說明根本沒理解問題,當然真沒理解問題的話,作為問方,要講明白問題問的是什麼,不要故弄玄虛。這個題目標是確保其對很多細節有了解,且能夠利用基礎知識,對於後期業務增長、系統迭代重構時,快速、穩定的節奏有直接影響。

然後說說另外的問題:為什麼所謂經常把 「查閱手冊、資料、文檔就可以解決問題」 這句話掛在應聘場合這樣的人在這個情境下不能要,因為題主不是要找一個僅僅是完成任務的人。還有一個原因,說這樣話的人工作年限如果大於 2 年,必然很水很水很水,其水平絕對達不到與其工作年限匹配的程度,進步速度也會很慢。

另外:真的有達到之前幾條要求的,亦或者滿足題主需要的人,薪資要到位。


這些面試題出的感覺好蹩腳,很奇怪。


不邀自答。六年php經驗,某行業國內第一大互聯網公司。

先回答題主問題:不合適。

以這樣的水平和經驗,在任何叫的上名的互聯網公司里都難以獨當一面,更別說擔當創業公司里的唯一後端工程師了。

然後說說關於面試題的問題。

* 關於apache/nginx配置

不否認一個人可以在編程上很有天賦但還沒有接觸過伺服器配置,也不否認一個人可以有大量的編程經驗但沒有伺服器維護經驗。不過我不相信一個連基本的配置都不了解的程序員有很認真的鑽研過php這門語言。(事實上後面幾乎每個答不出來的題目都指向一個事實:這位面試者當前遠遠沒有掌握(master)PHP,其能力很可能停留在{基於對php有限的了解(或許還加上其他編程語言的一些經驗),把不怎麼複雜的、有例可循的程序搗鼓到可以正常運行}的水平。)

* 關於cookie

你們的意思應該是自己實現一套session機制吧?這道題目考察面試者是否了解session機制。如果沒有去刻意研究過,是答不上來的,更不可能知道php提供了session handler的重載機制。至於知道這個有什麼用,我只能說對於只招一個後端的初創公司來說短時間內沒太大用。如果真的就來了個百萬

* 關於抓圖片的和抓網頁的題

抓圖片的考察常規curl應用。抓網頁的則考察正則表達式,以及常規的數據存儲。爬蟲程序應該是很多phper自學時會考慮的練手項目,如果有這個經驗的話這兩個題會比較輕鬆。(面試者沒有回答,那麼顯然沒有這類自學經驗)

* 關於驗證碼

這道題目主要考察gd庫的API,屬於價值偏低的一道實戰題,除非你們公司確實有這個需求。如果能改成闡述實現原理,倒是可以考察面試者是否有了解過驗證碼的實現方式——但也僅此而已了。通常用php處理圖形的場景就那麼幾個,都屬於非常固定的應用場景,因此有大量開源的類庫。作為創業公司,應該不會考慮讓唯一的後端從零封裝出一套牛逼的圖形庫吧。

* 關於看代碼說結果

最後一題要考察的是調用時按引用傳參,但這個已經過時了(原則上需要函數編寫者為每個參數都考慮兩種情況,帶來無謂的複雜度),並且被PHP解釋器所拋棄。

倒數第二題考察全局變數和global。這個知識點可能也已經過時了,因為大量使用全局變數會降低程序的可維護性,在現代框架中更是完全杜絕了全局變數的使用。但是當編寫小規模的腳本時,通過全局變數來共享狀態和數據,也是可以接受的,甚至可能更加輕鬆和直白。

倒數第三題考察靜態變數。這個只能算是基本知識吧。看手冊就能學會,也沒有什麼複雜的變化。

倒數第二題考察empty語句。

倒數第一題考察零值的類型轉換和比較。

這兩個題雖然本身看上去都是手冊里的東西,但作為php面試題,卻是非常有價值的。錯的越多,越說明經驗少,或者工作中不求甚解。(寫出if (!empty($var) $var != "" ) 這種代碼的就是典型的不求甚解。)作為動態語言,這些知識點就是萬年坑點,不熟悉的後果往往就是埋坑了不自知。

————

事實上,看代碼說結果,在考察知識點之餘,還可以考驗面試者的基本素養。所謂的基本素養,也就是用大腦運行代碼的能力。能夠僅憑閱讀就能快速搞清楚一段程序(不僅限於一個函數/方法)在做什麼事情,不同的輸入會有怎樣的輸出,這將有助於快速定位問題。實際工作中,並不總是有條件讓你靠打斷點、打日誌、插入var_dump來調試程序,甚至有時候都無法重現觸發bug的輸入。這個時候,就只能靠大腦來運行代碼,嘗試推測問題所在了。題主所述的崗位職責是二開,這種素養的作用會更加明顯:可以加快上手速度,提高二開的交付質量。


出筆試題的分兩種:

1.過濾掉一些吹逼、理論派。
2.你們這裡沒人懂php.

換以前,我是甩頭就走的!
後面年長了,覺得還是配合一下吧?
萬一過了,又說我不符合價值觀怎麼辦?!

簡歷上已經給你背書了一遍,然後你眼瞎。

背調不會嗎?老子給的工資條是做的假?!

程序員有多種,面向手冊編程,面向記憶編程等。

筆試題佔比重的,這種面試官(未來領導)腦子應該可能有坑。

貌似一般有筆試題的,就算過了,我都沒去!

一葉障目,你們公司老子也會去?


我感覺考這些題目很沒意思。

而且出這種題目讓我感覺到你們公司可能有點坑……


這樣的崗位給多少錢


抓取加refer應該是curl加header?

我只用過nginx 哭暈,你要是問我怎麼配nginx的我還會答

cookie 的話 http2頭部壓縮?

curl爬蟲?

gd庫可以看php manual嗎?

某種意義上來說是很基礎。但是很多是看php manual 才能用的就別問了吧。

感覺問的問題偏向http協議,SQL注入,csrf,SQL優化,負載均衡更好,正則。如果只有一個後端最好還問問linux。比如grep,awk,lsof 一路問下去。

雖然我是個0年的工作經驗的php碼農。


題主的這些題很難招到你口中獨當一面的PHP工程師,與之相反的是,你很容易找到那些在培訓班啃了幾個月面試寶典的人。

說句題外話,10-15K的薪酬真心找不到一個能夠獨當一面的php程序員,如果僅僅是需要一個有二次開發能力的人就另說了......


作為一名招黑php程序員,我覺的這些問題如果答不上來,的確這個人有一定的問題。

不過誠如大家所說,這些問題真的看不出來他的真實水平。下次面試不如問一問喜歡什麼的技術博客,php數組c語言層面是如何實現的等一些問題,還可以問問時髦的技術比如swoole是個啥玩意,對於laravel的設計哲學有什麼看法,或者你覺得php程序員為什麼如此招黑?我想,這些問題都自己見解,將會是一個不錯的php程序員。

這些都是為了看出來他是否已經進入了舒適區,或者是否是一名終身學習者。再者就可以問問構架方面的了,不過這個一般也沒啥好問的,一般幾年的,用redis mysql 加第三方框架和composer隨便就能搞出來一套。


羞愧,有超過一半的題答不到。
不過我覺得能分分鐘百度到的題真的沒有任何考察意義,因為很多東西你們考的是記憶,不是技術。

面試應該問應聘者會什麼,而不是不會什麼。這樣才能考察出他的真正價值,最終結果無非是他不適合您們公司而已,您們沒權貶低應聘者。你們不會技術就算了,還要亂點評技術人員。呵呵。

真感謝幾個東家都沒讓我筆試。不然可能會失業了。btw,不知道用戶百萬級的cookie系統應該是什麼,主要解決什麼問題?求大神賜教。

-----

題主說的題我最不會的應該是safe_mode這個,我反省,然後我去看了一下手冊。然後給你們截個圖

重點我已經勾出來了。我想作為創業公司,難道貴公司還在用php5.4或比5.4還低的版本?

那就厲害了!


你們要是招聘獨當一面的工程師,面試這些問題沒有什麼意義。

你們應該注重的設計系統的能力,而不是寫代碼的能力。比如你們可以考一下如何設計一個商城系統呀,用戶多了怎麼辦呀,怎麼確保並發安全呀。。。。。。

真正有能力的人,能和你就這些問題談笑風生一下午。


確實考得好全面,好細。我是一線大廠不到兩年經驗的工程師,30%沒有答出來。那兩條特別細的題目,錯一兩個是可以原諒的。但是我覺得這個人確實有點問題。

要是公司用這樣的題目面我,我做題目的時候就不想去了,何況還招一個人。我會感覺這家公司不太好。

我建議不用考那麼細,稍微幾道題過濾一下人就好,最重要的是考察人的基礎,思路,素質,解決過什麼數據量多少並發的問題。沒有人能把手冊完全背到腦里。


說真的,培訓機構特別喜歡你這樣的題目。 我就是一年半前培訓機構出來的, 說真的,除了你表明的那個cookie看不懂(完全不認為客戶端的東西和並發有什麼關聯),其他的全寫在各大培訓機構的《面試寶典》裡面了,專門坑你這樣的面試官!


老鐵你們招文科生好了幹嘛要招php,全是死記硬背的東西


題目很多,就看了第6題,應該是傳引用和傳值的區別。

我感覺是不確定的,說不定行,說不定不行。

我誰也不得罪(給機智的自己點贊)。


結論上來說他不適合。

但一個創業公司裝什麼!你們就像招一人給一份工資干多人的活…

我在三家創業工作待了好些年:老闆的想法主要是要快准狠,但需求反覆更改…並不會考慮你的代碼實現得多麼優美,演算法多麼牛逼…

你們適合找:任勞任怨,性價比高的人…

現在這麼多公司倒閉…我甚至懷疑貴公司能否堅持超過一年時間


不寫薪資的招聘毫無意義,笑。

某行業排名第一的公司的高手當然看不上這樣的程序員,但是這種高手也不會去你們公司呀。

招聘這事還是適合自己好,我就見過一些三五個人的創業公司月薪3000招php js linux精通。


感覺都會……但是一點不查全部手寫就不會了……


推薦閱讀:

有哪些 PHP 調試技巧?
php學到什麼程度就可以就業了?
有哪些為了精通 php 而一定要自己實現一次的例子? demo?
為什麼現在很多框架都用Composer來安裝,增加了學習難度?
php查詢資料庫用了一個c寫的擴展,這樣做有什麼好處呢?

TAG:PHP | Linux | PHP開發 | 後端工程師 |