程序員面試攻略大全今日?qǐng)D靈
62 2017-04-19
我們有很多的面試官似乎分不清,什么是操作能力,什么是知識(shí),什么是經(jīng)驗(yàn),什么是能力,這導(dǎo)致了我們的面試官經(jīng)常錯(cuò)誤地對(duì)面試者下結(jié)論,我認(rèn)為分不清這些事的人是沒(méi)有資格做面試官的。所以,我有必要在這里把這個(gè)問(wèn)題先講清楚。
操作。我們的面試官分不清楚什么是操作技能,什么是知識(shí),他們甚至認(rèn)為操作技能就是知識(shí)甚至經(jīng)驗(yàn)。比如他們會(huì)問(wèn)如下的問(wèn)題,請(qǐng)問(wèn)Java中的final是什么意思?怎么查看進(jìn)程的CPU利用率?怎么編寫一個(gè)管道程序?怎么查看進(jìn)程的程序路徑?VI中的拷貝粘貼命令是什么?包括面向?qū)ο蟮腦X模式是什么。等等。我以為,這些能夠通過(guò)查況相關(guān)操作手冊(cè)或是能夠google到的東西只能說(shuō)明這個(gè)人的操作技術(shù),并不能說(shuō)明他有知識(shí)或有經(jīng)驗(yàn)。
知識(shí)。知識(shí)是一個(gè)人認(rèn)知和學(xué)習(xí)的體現(xiàn),可能會(huì)是一些基礎(chǔ)概念和知識(shí)。比如這些問(wèn)題:TCP和UDP的優(yōu)缺點(diǎn)比較,鏈表和哈希表的優(yōu)缺點(diǎn)的比較。什么是堆什么是棧?進(jìn)程間是怎么通信的?進(jìn)程和線程的優(yōu)缺點(diǎn)?同步和異步的優(yōu)缺點(diǎn)?面向?qū)ο蟮腦X設(shè)計(jì)模式的主要原則是什么,等等。我以為,“知其然”只是操作技術(shù),“知其所以然”才是真正的知識(shí)。知識(shí)不夠并不代表他不能工作,會(huì)操作技能就可以應(yīng)付工作,但是知識(shí)的欠缺一定會(huì)限制你的經(jīng)驗(yàn)和能力,同樣會(huì)影響你的開(kāi)發(fā)質(zhì)量。
經(jīng)驗(yàn)。經(jīng)驗(yàn)通常跟一個(gè)人的經(jīng)歷有關(guān)系。一個(gè)人的知識(shí)范圍,一個(gè)人經(jīng)歷過(guò)的事,通常會(huì)成為一個(gè)人經(jīng)驗(yàn)的體現(xiàn)。面試中,我們會(huì)問(wèn)這些問(wèn)題:你解決過(guò)最難的問(wèn)題是什么?你是怎么設(shè)計(jì)這個(gè)系統(tǒng)的?你是怎么調(diào)試和測(cè)試你的程序的?你是怎么做性能調(diào)優(yōu)的?什么樣的代碼是好的代碼?等等。對(duì)于工作年限不長(zhǎng)的人來(lái)說(shuō),經(jīng)歷和做過(guò)的事的確會(huì)成為其經(jīng)驗(yàn)的主要因素,尤其是業(yè)務(wù)上的有行業(yè)背景的東西。但是,我更以為,經(jīng)驗(yàn)可能更多的是你對(duì)知識(shí)的運(yùn)用和駕馭,是你對(duì)做過(guò)事情的反思和總結(jié),是你對(duì)他人的學(xué)習(xí),觀察和交流。
能力。一個(gè)人的能力并不會(huì)因?yàn)橹罇|西少而不行,也不會(huì)因?yàn)闆](méi)有經(jīng)驗(yàn)而沒(méi)有能力。一個(gè)人的能力是他做事情的一種態(tài)度,性格,想法,思路,行為,方法和風(fēng)格。只要有熱情,有想法,有好的行為方法,以及好的行事風(fēng)格,那么知識(shí)和經(jīng)驗(yàn)對(duì)他來(lái)說(shuō)只是一個(gè)時(shí)間問(wèn)題。比如:學(xué)習(xí)能力,專研精神,分析能力,溝通能力,組織能力,問(wèn)題調(diào)查能力,合作能力等等。所以,對(duì)于一個(gè)新手來(lái)說(shuō),也許他的知識(shí)和經(jīng)驗(yàn)有限,但并不代表他能力上有問(wèn)題,但是對(duì)于一個(gè)老手來(lái)說(shuō),如果其存在知識(shí)和經(jīng)驗(yàn)欠缺的問(wèn)題,那么通常都是其能力的問(wèn)題。你可能暫時(shí)懷才不遇,但我不相信你會(huì)長(zhǎng)期懷才不遇。如果是的話,那么你必然些問(wèn)題其讓你的能力發(fā)揮不出來(lái)。而此時(shí),“沒(méi)有經(jīng)歷過(guò)”只會(huì)是你“沒(méi)有能力”的一個(gè)借口。
我不否認(rèn)這四樣?xùn)|西對(duì)于一個(gè)優(yōu)秀的程序員來(lái)說(shuō)都很重要。但是,通過(guò)上述的分析,我們可以知道,能力和經(jīng)驗(yàn)和知識(shí)需要分開(kāi)對(duì)待。當(dāng)然,這些東西是相輔相成的,你的能力可以讓你獲得知識(shí),你的知識(shí)可以讓你更有經(jīng)驗(yàn),你的經(jīng)驗(yàn)又會(huì)改變你的想法和思路,從而改善你的能力。在面試中,我們需要清楚的認(rèn)識(shí)到,應(yīng)聘者的操作技能,知識(shí)和經(jīng)驗(yàn)只是其能力的必要條件,并不是充要條件,而我們更應(yīng)該關(guān)注于應(yīng)聘者的能力。
如果面試只是考查這個(gè)人的操作技能的話,那么這個(gè)面試完全失敗。這是一個(gè)沒(méi)有資格的面試官。
如果面試只是在考查這個(gè)人的知識(shí)和經(jīng)驗(yàn)的話,那么成功了一半。因?yàn)槟懔私饬嘶A(chǔ)知和做過(guò)的事,但這并不代表你完全了解他的真正能力。
如果你能夠在了解這個(gè)人的知識(shí)和經(jīng)驗(yàn)的過(guò)程中重點(diǎn)關(guān)注其能力(態(tài)度、性格、想法,思路,行為,方法和風(fēng)格),并能正確地評(píng)估這個(gè)人的能力,那么你的面試算是非常成功的。
也許用這四個(gè)詞來(lái)描述定套東西并不太合適,但我相信你明白我想表達(dá)的。另外,我想說(shuō)的是,我們不是出個(gè)題來(lái)考倒應(yīng)聘者,而是要找到應(yīng)聘者的亮點(diǎn)和長(zhǎng)處。
不要膚淺地認(rèn)識(shí)算法題和智力題
很多公司都會(huì)在面試的時(shí)候給一些算法題或是一些智力題或是一些設(shè)計(jì)題,我相信算法題或是智力題是程序員們?cè)诿嬖囘^(guò)程中最反感的事了。很多人都很BS面試官問(wèn)的算法題,因?yàn)樗麄冋J(rèn)為面試官問(wèn)的這些算法題或智力題在實(shí)際工作當(dāng)中用不到。但我想在這里說(shuō),問(wèn)難的算法智力題并沒(méi)有錯(cuò),錯(cuò)的很多面試官只是在膚淺甚至錯(cuò)誤地理解著面試中的難題的目的。他們認(rèn)為,能做出算法題和智力題的人就是聰明的人就是有能力的人,這種想法實(shí)在是相當(dāng)?shù)哪w淺。
其實(shí),能解難題并不意味著這個(gè)人就有能力就能在工作中解決問(wèn)題,你可以想想,小學(xué)奧數(shù)題可能比這些題更難,但并不意味著那些奧數(shù)能手就有實(shí)際工作能力。你可以想一想你們班考試得高分的同學(xué)并不一定就是聰明的人,也不一定就是有能力的人,相反,這樣的人往往者是在應(yīng)試教育下培養(yǎng)出來(lái)的書呆子。
所以,我認(rèn)為解難題的過(guò)程更重要,你要主要是通過(guò)解題查看這個(gè)應(yīng)聘者的思路,方法,運(yùn)用到的知識(shí),有沒(méi)有一些經(jīng)驗(yàn),和你一起交互時(shí)和溝通得是否順暢,等等,這些才是你重點(diǎn)要去觀察的。當(dāng)然,最終是要找到答案的。
我想,讓面試者解決一個(gè)難題的真正思路是:
看看他對(duì)知識(shí)的應(yīng)用和理解。比如,他是否會(huì)用一些基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)和算法來(lái)解決算法題?
看看他的整個(gè)解題思路和想法。答案是次要的,他的想法和行為才是重要的。
看看他是如何和你討論交流的。把面試者當(dāng)成你未來(lái)的同事,當(dāng)成你的工作伙伴,一起解題,一起討論,這樣可以看看大家是否可以在一起工作。
這些方面才是考查應(yīng)聘者的能力(思路,方法、態(tài)度,性格等),并順帶著考查面試者的經(jīng)驗(yàn)和知識(shí)。下面是一些面試的點(diǎn):
應(yīng)聘者在解算法題時(shí)會(huì)不會(huì)分解或簡(jiǎn)化這個(gè)難題。這是分析能力。
應(yīng)聘者在解算法題時(shí)會(huì)不會(huì)使用一些基礎(chǔ)知識(shí),如數(shù)據(jù)結(jié)構(gòu)和基礎(chǔ)算法。這是知識(shí)。
應(yīng)聘者在解題時(shí)和你討論的過(guò)程中你有沒(méi)有感到應(yīng)聘者的專研精神和良好的溝通。
應(yīng)聘者在對(duì)待這個(gè)算法題的心態(tài)和態(tài)度。如,面試面是否有畏難情緒。
應(yīng)聘者在解題時(shí)的思路和方法是否得當(dāng),是否是比較科學(xué)的方法?
等等。
在解難題的過(guò)程中考查應(yīng)聘者的能力才是最終目的,而不是為難應(yīng)聘者,不然,你只是一個(gè)傲慢而無(wú)知的面試官。
模擬實(shí)際中的挑戰(zhàn)和能力
作為面試官的你,你應(yīng)該多想想你的工作,以及你的成長(zhǎng)經(jīng)歷。這會(huì)對(duì)你的面試很有幫助。你在工作中解決問(wèn)題的實(shí)際情況是什么?你寫代碼的實(shí)際情況是什么?你的成長(zhǎng)經(jīng)歷是什么?你是怎么獲得知識(shí)和能力的?你喜歡和什么樣的人工作?相信你不難會(huì)發(fā)現(xiàn)你工作中的實(shí)際情況和面試的情況完全是兩碼事,那么,你怎么可以用這種與實(shí)際情況差別那么大的面試來(lái)評(píng)估一個(gè)人的能力呢?
所以,最為理想的面試是一起工作一段時(shí)間。當(dāng)然,這個(gè)在招聘過(guò)程中,操作起來(lái)幾乎不可能,因此,這就要求我們的面試官盡可能地把面試的過(guò)程模擬成平時(shí)工作的過(guò)程。大家一些討論來(lái)解決一個(gè)難題,和應(yīng)聘者一起回顧一下他已經(jīng)做過(guò)的事情,并在回礎(chǔ)的過(guò)程中相互討論相互學(xué)習(xí)。下面舉一個(gè)例子。
我們知道,對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō),開(kāi)發(fā)軟件不難,難是的下面是這些挑戰(zhàn):
軟件的維護(hù)成本遠(yuǎn)遠(yuǎn)大于軟件的開(kāi)發(fā)成本。
軟件的質(zhì)量變得越來(lái)越重要,所以,測(cè)試工作也變得越來(lái)越重要。
軟件的需求總是在變的,軟件的需求總是一點(diǎn)一點(diǎn)往上加的。
程序中大量的代碼都是在處理一些錯(cuò)誤的或是不正常的流程。
所以,當(dāng)我們?cè)诳疾閼?yīng)聘者的代碼能力時(shí)候,我們?yōu)槭裁床荒苣M這樣的過(guò)程呢?比如,讓應(yīng)聘者實(shí)現(xiàn)一個(gè)atoi()的函數(shù),實(shí)現(xiàn)起來(lái)應(yīng)該很簡(jiǎn)單,然后不斷地往上加新的需求或新的案例,比如:處理符號(hào),處理非數(shù)字的字母的情況,處理有空格的情況,處理十六進(jìn)制,處理二進(jìn)制,處理“逗號(hào)”,等等,我們要看應(yīng)聘者是怎么修改他的代碼的,怎么寫測(cè)試案例的,怎么重構(gòu)的,隨著要處理的東西越來(lái)越多,他的代碼是否還是那么易讀和清晰。如果只是考查編碼能力,一個(gè)小時(shí),就問(wèn)這一個(gè)問(wèn)題,足矣。真正的程序員每天都在和這樣的事打交道的。
如果要考查應(yīng)聘者的設(shè)計(jì)能力,同樣可以如法泡制。不斷地加新的功能,新的需求??纯疵嬖囌叩乃悸?,想法,分析的方法,和你的討論是否流暢,說(shuō)沒(méi)說(shuō)在點(diǎn)上,思想清不清晰,會(huì)應(yīng)用什么樣的知識(shí),他在設(shè)計(jì)這個(gè)系統(tǒng)時(shí)的經(jīng)驗(yàn)是會(huì)是什么樣的,面對(duì)不斷的修改和越來(lái)越復(fù)雜的需求,他的設(shè)計(jì)是否還是那么好?
當(dāng)然,因?yàn)闀r(shí)間比較短,所以,你不能出太復(fù)雜的問(wèn)題,這需要你精心設(shè)計(jì)一些精制的有代表性的問(wèn)題。
把應(yīng)聘者當(dāng)成你的同事
有些公司的面試官,在面試過(guò)程中問(wèn)你一個(gè)算法題,然后等著你解答了,如果你給出一個(gè)答案,然后就會(huì)問(wèn)你有沒(méi)有更好的答案,如果你給出了正確的答案,他們就會(huì)問(wèn)你一個(gè)更難的問(wèn)題,如此循環(huán)下去。他們基本上很少給你提示,甚至不停地質(zhì)問(wèn)你,挑戰(zhàn)你,搞得應(yīng)聘者很緊張。
另外,有很多問(wèn)題是沒(méi)有標(biāo)準(zhǔn)答案的,或者說(shuō)是,同一個(gè)答案的描述方法有多種,很多面試官會(huì)覺(jué)得你沒(méi)有回答到他想要的答案,因此表現(xiàn)得有對(duì)你不屑,并表現(xiàn)出你不行的樣子,并覺(jué)得你的能力有問(wèn)題。真是可笑了。比如我一個(gè)朋友在回答什么是異步的問(wèn)題時(shí),舉例說(shuō)明了異步調(diào)用就是不能處理完就返回,并且需要傳遞一個(gè)回調(diào)函數(shù)給調(diào)用方以便完成后回調(diào)通知結(jié)果。這樣的回答并沒(méi)有錯(cuò),但是這并不符合面試官心里想要的答案,面試官對(duì)此并不滿意,進(jìn)而認(rèn)為我這個(gè)朋友還需要去多讀讀書。
我相信大多數(shù)面試官都會(huì)這樣干的。我想問(wèn)問(wèn)這樣的面試官,你們有沒(méi)有用面試的方式對(duì)過(guò)你的同事?在你的工作場(chǎng)景中,你會(huì)不會(huì)用面試的風(fēng)格和你的同事進(jìn)行交流和說(shuō)話?不妨讓我們來(lái)問(wèn)我們自己下面幾個(gè)問(wèn)題:
你在工作當(dāng)中遇到難題時(shí)你是怎么解決的?你會(huì)和人討論嗎?你只用15分鐘就能得出最優(yōu)解嗎?
你在工作當(dāng)中解決難題時(shí)是否會(huì)有一個(gè)人在旁邊質(zhì)問(wèn)你并給你壓力嗎?
你在工作當(dāng)中會(huì)為難你的同事嗎?會(huì)讓你的同事緊張嗎?你覺(jué)得在緊張的狀態(tài)下能做好工作嗎?
你在工作中覺(jué)得同事的回答并不是你想要的答案,不是符合你的答案,你會(huì)認(rèn)為你的同事不行嗎?
你的成長(zhǎng)過(guò)程是什么樣的?在是壓力和天天被人質(zhì)問(wèn)的情況下成長(zhǎng)的嗎?
大家都知道學(xué)校里應(yīng)試教育的弊端,你覺(jué)得你的面試是不是一種應(yīng)試呢?
(看看這么多的應(yīng)聘者們都在做各種各樣的算法題,這不就是一種應(yīng)試嗎?)
想一想你的日常工作,問(wèn)自己一下上面這些問(wèn)題,想一想你自己的成長(zhǎng)過(guò)程,想一想你和你的同事是怎么相處的,想一想你的日常工作中是什么樣的,相信你自己也能得出結(jié)論的。
如果你把應(yīng)聘者當(dāng)成自己未來(lái)的同事,那么你的面試會(huì)有下面的收獲:
面試的氣氛會(huì)很不錯(cuò),應(yīng)聘者會(huì)放松,表現(xiàn)自然,更接受于真實(shí)的狀態(tài)。
面試中的交流和互動(dòng)(而不是一問(wèn)一答)會(huì)讓你更全面的考查和了解一個(gè)人。
非應(yīng)試的面試,會(huì)讓你了解得更多。
真實(shí)的了解一個(gè)人,你才能做出真正正確的結(jié)論。
向應(yīng)聘者學(xué)習(xí)
下面有幾個(gè)觀點(diǎn)
面試的過(guò)程是一個(gè)相互學(xué)習(xí)的過(guò)程,并不是你為難面試者的過(guò)程。
一問(wèn)一答是很一種呆板死板的過(guò)程,相互討論相互學(xué)習(xí),有良好的互動(dòng)才是好的面試過(guò)程。
面試官要證明的不是你有多強(qiáng)有多聰明,而是要挖掘應(yīng)聘者的優(yōu)勢(shì)和能力。
面試官用為自己的問(wèn)題預(yù)設(shè)好一個(gè)標(biāo)準(zhǔn)答案,看看應(yīng)聘者能為你帶來(lái)什么。
向來(lái)應(yīng)聘的人學(xué)習(xí),而不是刁難。
無(wú)論你多牛,要難倒你實(shí)在是太容易了。出難題不是目的,難倒人也很容易,出難題只不過(guò)是用來(lái)了解應(yīng)聘者能力的一個(gè)手段,而不是面試的全部。
我不知道你喜歡不喜歡一些競(jìng)技類的運(yùn)動(dòng)?比如踢球,打籃球,羽毛球,下象棋等,你一般想和什么樣的人玩?是差的,還是強(qiáng)的?所以,能夠從面試者那里學(xué)到東西,喜歡和面試者一起工作,這才是面試真正的目的。
對(duì)于一個(gè)團(tuán)隊(duì)來(lái)說(shuō),如果大家都是一樣的想法,一樣的主張,一樣的傾向,那么這個(gè)團(tuán)隊(duì)最終會(huì)是一個(gè)閉塞的團(tuán)隊(duì),你如果不能真正接納不同想法的人,不同主張的人,那么你也將失去進(jìn)步的機(jī)會(huì)。如果你的團(tuán)隊(duì)總是在招入和你一樣的人,那么你的團(tuán)隊(duì)怎么可能會(huì)有out-of-box的想法呢?世界因?yàn)椴煌篮谩?/p>
另外,對(duì)于公司來(lái)說(shuō),如果你招進(jìn)來(lái)的人還不如已經(jīng)有的人,作為一個(gè)公司,你又怎么能有更好的人讓你的公司進(jìn)步呢?
所以,面試應(yīng)該是向面試者學(xué)習(xí)的一個(gè)過(guò)程。當(dāng)然,如果你從他身上學(xué)不到什么,那么你就教他一些吧。這樣,就算是面試不通過(guò),面試者也會(huì)欣然接受的。不然,讓面試者產(chǎn)生一些負(fù)面情緒,出去說(shuō)一些不好的話,也有損你和公司的形象。
掃一掃
獲取更多福利
獵學(xué)網(wǎng)企業(yè)微信
獵學(xué)網(wǎng)訂閱號(hào)
獵學(xué)網(wǎng)服務(wù)號(hào)