大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)
本文目的
寫(xiě)本文的目的,大叔不是為了裝逼(雖然說(shuō)話的口氣有時(shí)候也確實(shí)有點(diǎn)裝逼,性格導(dǎo)致的,咳。。。我得改),其實(shí)大叔在公司也只是小羅羅,本文的目的主要是為了向大家展示如何通過(guò)各種軟技能應(yīng)對(duì)面試官,這個(gè)應(yīng)對(duì)包括如何溝通,引導(dǎo),展示技巧以及更多地讓面試官跟著你的思路走,讓面試官根據(jù)你的亮點(diǎn)挖掘你其它的優(yōu)勢(shì),而不是一味地跟著面試官的思路走(這就有點(diǎn)危險(xiǎn)了),也就是如何更多地展示你強(qiáng)的一面而盡量避免暴露自己的弱點(diǎn),尤其是Senior和Lead在面試的時(shí)候需要注意這一點(diǎn),當(dāng)然,這確實(shí)需要下很多功夫,那就體會(huì)一下大叔在去年的一次面試經(jīng)歷吧。
起源
事情起源于一個(gè)2010年11月12號(hào)(周五)的一個(gè)電話,下午剛吃晚飯被部門(mén)領(lǐng)導(dǎo)叫進(jìn)一個(gè)小會(huì)議室說(shuō)有事找我談?wù)?#xff0c;大概事情是歐美一個(gè)大客戶要在北京總公司建立第2個(gè)ODC(離岸研發(fā)中心)(第1個(gè)ODC已經(jīng)在公司的另一個(gè)分公司建立了1年多了大約400人),這次面試很多高級(jí)開(kāi)發(fā)工程師都已經(jīng)面過(guò)了,但是客戶就是不給簽約ECA(個(gè)人另外和客戶單獨(dú)簽的安全協(xié)議),原因是ODC的技術(shù)帶頭人一直沒(méi)招到,公司提供了大批的架構(gòu)師、Tech Lead、以及懂技術(shù)的項(xiàng)目經(jīng)理去面試,都栽進(jìn)去了,所以讓我去試試,說(shuō)一會(huì)公司的高級(jí)副總M先生馬上就打電話過(guò)來(lái)。
在1萬(wàn)多人的公司工作,能讓VP親自打電話,其實(shí)心里還是蠻激動(dòng)的,但其實(shí)大叔是不愿意去的,因?yàn)楫?dāng)時(shí)手頭的項(xiàng)目也是很不錯(cuò)的,做亞洲最大的KTV連鎖系統(tǒng)相關(guān)的東西(數(shù)據(jù)實(shí)時(shí)采集,商業(yè)智能分析,以及后期全新開(kāi)發(fā)的WPF版的KTV點(diǎn)播系統(tǒng)),下面30多人,其實(shí)也挺不錯(cuò)的,主要是有了孩子,所以想先穩(wěn)定2年。可是M先生打來(lái)電話了,大意就是客戶面試比較嚴(yán)格,視頻會(huì)議以及遠(yuǎn)程桌面現(xiàn)場(chǎng)編程,這就意味著,面試個(gè)過(guò)程中客戶不僅可以看到你的表情和心里,還要通過(guò)遠(yuǎn)程桌面在你現(xiàn)場(chǎng)編程的時(shí)候看到你每敲的任何一個(gè)字母。很多人技術(shù)很強(qiáng),但是印度式英語(yǔ)溝通上,或者代碼編程細(xì)節(jié)上,甚至MSDN查詢的細(xì)節(jié)上都有可能被客戶challenge住,公司已經(jīng)浪費(fèi)了幾個(gè)月時(shí)間,而且也浪費(fèi)了大批的優(yōu)秀候選人,客戶給了deadline,如果沒(méi)有滿意的人,客戶有可能就把這個(gè)ODC建立到歐洲那個(gè)公司了,所以希望我去試試。雖然我不情愿,但是在領(lǐng)導(dǎo)近于命令式的語(yǔ)言以及一大堆的憧憬中,大叔也沒(méi)有辦法,嘗試著說(shuō)先給我一周時(shí)間準(zhǔn)備吧,因?yàn)槲乙呀?jīng)1年多沒(méi)有進(jìn)行編程了,但領(lǐng)導(dǎo)說(shuō),事情緊急,就下周一吧,給你兩天準(zhǔn)備時(shí)間。在堅(jiān)決地拒絕以后(因?yàn)橹芤灰?guó)貿(mào)客戶現(xiàn)場(chǎng)講解新項(xiàng)目的架構(gòu),所以沒(méi)辦法),面試終于選擇在周二早上8點(diǎn)進(jìn)行。
其實(shí)周一下午公司的人還是給予了一些面試指導(dǎo),畢竟所有的人都很看重這個(gè)事情,尤其是和客戶溝通方面需要注意的事情以及稍微了解了一下客戶的脾氣(因?yàn)橹坝袀€(gè)人很堅(jiān)持自己的方案牛逼,不愿意聽(tīng)從客戶的方案解釋,所以被fire)。
技術(shù)面試
北京時(shí)間早上8點(diǎn)(客戶時(shí)間:下午4點(diǎn)):
雖然之前有過(guò)和印度人共事的1年多經(jīng)驗(yàn),但是依然有點(diǎn)怯,連通視頻我一瞬間,大叔驚愕了,面試官居然是Martin Fowler的翻版:
(Martin Fowler頭像, 我的偶像啊!)
不過(guò)人還是挺友善的,在剛開(kāi)始的5分鐘,我主要是做個(gè)人介紹,大概介紹了一下最近2年做過(guò)的項(xiàng)目,和承擔(dān)的職責(zé),其實(shí)客戶對(duì)這個(gè)不太感興趣,他們感興趣的是現(xiàn)場(chǎng)面試,so, 我說(shuō)了一句:我準(zhǔn)備好了,我們可是開(kāi)始了么?客戶來(lái)勁了,視頻里說(shuō)了一下題目,同時(shí)Live Meeting里也把英文題目發(fā)過(guò)來(lái)了(可能是怕聽(tīng)不懂吧),題目非常簡(jiǎn)單:找出第一個(gè)句子中有而第二個(gè)句子中沒(méi)有的單詞。
我很詫異,面試不會(huì)這么簡(jiǎn)單吧,就算我1年多沒(méi)寫(xiě)過(guò)代碼了,完成這個(gè)題目也是不成問(wèn)題的吧,可是回過(guò)頭來(lái)一想,我面的職位不是高級(jí)開(kāi)發(fā),也不是架構(gòu)師,而是技術(shù)管理,于是我明白了。。。
客戶:這時(shí)候客戶直接問(wèn)我要estimate估時(shí)了
大叔:這個(gè)時(shí)候我并沒(méi)有告訴客戶說(shuō),我需要時(shí)間先分析一下,問(wèn)完問(wèn)題才能給你時(shí)間,而是直接告訴他,我還沒(méi)用細(xì)想,但是我覺(jué)得大概的樂(lè)觀(optimistic)估時(shí)應(yīng)該是1小時(shí)(其中包括,5分鐘的思考,5分鐘的問(wèn)題確認(rèn),5分鐘的設(shè)計(jì),25分鐘的編碼,10分鐘的code review以及10分鐘的測(cè)試和bug fix),但悲觀估時(shí)可能是1小時(shí)20分鐘左右,因?yàn)闆_突可能會(huì)出現(xiàn)無(wú)法預(yù)知的問(wèn)題需要客戶或者相關(guān)人的幫助。
客戶表示Good。那就開(kāi)始吧,滴答,滴答,滴答。。。。
在考慮了一系列的常見(jiàn)的和特殊的場(chǎng)景以后,我問(wèn)了很多問(wèn)題,但總時(shí)不超過(guò)5分鐘,大概如下(記不太清楚了,就寫(xiě)這么多)
然后又誠(chéng)懇地問(wèn)了一下,英文下除了逗號(hào),句號(hào),空格,問(wèn)號(hào),斜杠,感嘆號(hào)以外,還有其它的語(yǔ)言符號(hào)么?(因?yàn)橐眠@些分割單詞哦),客戶比較開(kāi)心這個(gè)問(wèn)題,又告訴了我?guī)讉€(gè):反斜杠,引號(hào),又特別提示了一下我,中劃線不算分隔符。 中途也遇到了一點(diǎn)尷尬,就是對(duì)這些符號(hào)的英文單詞,記得不是很清楚,所以老搞錯(cuò),最后客戶還是直接在live meeting上敲出才確認(rèn)的,感謝IM。
北京時(shí)間早上8:15(客戶時(shí)間:下午4:15)
編碼正式開(kāi)始了,其實(shí)中途的編碼過(guò)程到時(shí)沒(méi)什么問(wèn)題,因?yàn)轭}目確實(shí)比較簡(jiǎn)單,但是代碼總不能都在控制臺(tái)的Program.cs吧,也不能只寫(xiě)一個(gè)簡(jiǎn)單的靜態(tài)方法吧?題目雖然簡(jiǎn)單,不能體現(xiàn)什么架構(gòu),但是要展示點(diǎn)東西吧,于是一個(gè)有點(diǎn)搞笑的類文件InterviewEngine.cs出來(lái)了,但這時(shí)候,我并沒(méi)用急于寫(xiě)代碼,而是把我的代碼處理邏輯的想法用英文寫(xiě)在這個(gè)類的summary里了,寫(xiě)了大概5分鐘左右(這就姑且算我的設(shè)計(jì)吧),然后代碼上,寫(xiě)了一個(gè)單例(有點(diǎn)不倫不類,后面會(huì)解釋)(靜態(tài)字段+靜態(tài)構(gòu)造函數(shù)的方式),當(dāng)然在正式處理方法里也仔細(xì)考慮了很久,比如2個(gè)參數(shù)的空值判斷,異常判斷,以及分隔符的定義易修改等做了處理,當(dāng)然中途我故意把字符的大小寫(xiě)沒(méi)用區(qū)分(因?yàn)槲蚁朐诤竺娴腸ode review階段來(lái)體現(xiàn)),當(dāng)然該有的注釋啥的也都有。
北京時(shí)間早上8:45(客戶時(shí)間:下午4:45)
代碼結(jié)束,為了表明自己真的做了code review,自己還是硬著頭皮把鍵盤(pán)提示符一行一行地走了一遍,以便讓客戶在編輯器里看到我真的是在做這件事,因?yàn)閏ode review是項(xiàng)目里非常重要的一步,也為了證明我做了,我在這時(shí)候才把上面故意沒(méi)用區(qū)分大小寫(xiě)的問(wèn)題加上了。
?
由于不是按照TDD的方式來(lái)做的,所以單元測(cè)試是在基本的code review以后才開(kāi)始做的,由于之前和客戶確認(rèn)了,不用使用MBUnit/NUnit之類的單元測(cè)試工具,所以只是手工寫(xiě)了一些case,做的case不僅包括了正常的,也包括了不正常的了,當(dāng)然邊界測(cè)試,空值測(cè)試,異常捕獲等也都覆蓋到了。(后面項(xiàng)目開(kāi)始的時(shí)候,客戶由于知道我熟悉MBUnit,所以在項(xiàng)目上讓我們用了這個(gè),而沒(méi)有用其它人都推崇的NUnit)。
北京時(shí)間早上9:00(客戶時(shí)間:下午5:00)
時(shí)間比我預(yù)想的提前了5分鐘,暗自慶幸中,于是告訴客戶,我已經(jīng)寫(xiě)完了,當(dāng)然也客氣的說(shuō)了一句:“你能幫我check一下,有沒(méi)有其它的我沒(méi)用想到的錯(cuò)誤么?”。
"Okay, Tom....",客戶舒了一口氣說(shuō),你再檢查一下獲取單詞集合的時(shí)候有沒(méi)有什么遺漏?我實(shí)在想不起來(lái)遺漏了哪個(gè)判斷,參數(shù)判斷,單詞萃取,單詞存儲(chǔ),查詢性能等都考慮到,只有虛心而真誠(chéng)地請(qǐng)教了客戶:“I cann't find any problem now, could you give me some comments?”
客戶這時(shí)候在IM上敲了一句話:Hello, tom, how??????? are you?
OK, God,我明白了,原來(lái)是分隔符連續(xù)的問(wèn)題,這時(shí)候分割出來(lái)的單詞是空,所以這時(shí)候不需要在去判斷集合里是否包含這個(gè)單詞了,因?yàn)榭崭揪筒恍枰砑拥郊侠铩N覍?duì)客戶的提示表示感謝:“Oh, good catch, thanks R****.”,然后很快給予了修復(fù),并且添加了相應(yīng)的測(cè)試用例。
北京時(shí)間早上9:25(客戶時(shí)間:下午5:25)
客戶對(duì)題目表示滿意,本意為面試就要結(jié)束了,但是客戶這時(shí)候又給了一個(gè)需求變更,讓我在現(xiàn)有控制臺(tái)程序的基礎(chǔ)上做一個(gè)方便測(cè)試代碼,經(jīng)過(guò)互相討論,最終的理解是:做一個(gè)控制臺(tái)的輸入功能,讓用戶分別輸入2段字符串,然后給出結(jié)果,在這一步,我差一點(diǎn)栽了,因?yàn)閷?duì)Console.Read,Console.ReadLine以及Console.ReadKey的用法實(shí)在想不起來(lái)了,再試了很多次之后,才搞定的了,以至于客戶問(wèn)了我一句:你是不是這些知識(shí)已經(jīng)忘記了,我只得遺憾地回答:“是的,長(zhǎng)時(shí)間不寫(xiě)類似的程序,很多基本的東西都忘記了,看來(lái)需要經(jīng)常來(lái)回顧一下用法。” 沒(méi)想到,客戶說(shuō)了一句:“對(duì),我也是經(jīng)常忘!”
哈哈,看來(lái)沒(méi)丟臉。
北京時(shí)間早上10:00(客戶時(shí)間:下午6:00)
客戶又問(wèn)了一下,我平時(shí)編碼的時(shí)候是如何保證質(zhì)量的?我會(huì)意的笑了一下,我說(shuō)我有T氏法則,也就是我整理的Guideline,所有Team的人都要遵守,Guideline里囊括了開(kāi)發(fā)過(guò)程中要預(yù)防的各種各樣的問(wèn)題,比如輸入輸出驗(yàn)證,編碼,性能,加密解密,信息安全,客戶端安全,多條件,多線程,異常處理,資源釋放,代碼覆蓋率,單元測(cè)試等等,還順便問(wèn)了一句,你要看么?因?yàn)槲椰F(xiàn)在用的是自己的機(jī)器,可以發(fā)給你一份。
客戶表示想看,看了我發(fā)的英文版以后,客戶表示:你在我們這里干的話,我想你的很多條規(guī)則都是可以用上的。
之后客戶又突然回來(lái),問(wèn)我為什么面試的時(shí)候要用單例,我很誠(chéng)實(shí)地回答,因?yàn)槊嬖嚂r(shí)間有限,所以我要想辦法體現(xiàn)我的各種各樣的能力,然后我們倆又針對(duì)單例討論了很久鐘,期間我講我了解的單例模式,然后所有的實(shí)現(xiàn)都在VS2010里用代碼展示給他了,最后,我連把單例的泛型版本都展示給他看了,他表示贊許,因?yàn)槲以谝曨l里看到他點(diǎn)頭了。
面試持續(xù)了2個(gè)多小時(shí)了,因?yàn)楹茏孕抛约涸谠O(shè)計(jì)模式方面的理解,所以為了搶占主動(dòng)權(quán),所以我豁出去地說(shuō)了一句:你還想問(wèn)我其它的設(shè)計(jì)模式么?
R先生:不用了,看你對(duì)單例研究這么深入,我覺(jué)得也沒(méi)有必要再問(wèn)其它的設(shè)計(jì)模式了,因?yàn)槲蚁嘈拍憧隙ㄒ埠苁煜ち?#xff0c;而且你的職位又不是開(kāi)發(fā)人員,而是要Manage他們,好了,你能再把你之前的工作經(jīng)歷詳細(xì)地和我說(shuō)一遍么?
有戲了,客戶居然再次讓我介紹之前的項(xiàng)目了,于是把自己之前的幾個(gè)項(xiàng)目介紹了一下,由于之前的項(xiàng)目都不小(第一個(gè)項(xiàng)目,26人做了2.5年,第二個(gè),16人做了1年,第三個(gè)34人做了半年),客戶了解了我的職責(zé)以后,什么都沒(méi)有說(shuō),只是說(shuō)了一句,我們的項(xiàng)目和第一個(gè)差不多,你應(yīng)該能夠cover住的,技術(shù)面試這里就先結(jié)束了,1小時(shí)以后我們繼續(xù)來(lái)聊非技術(shù)的吧,因?yàn)槲乙然丶页燥?#xff08;因?yàn)檫@時(shí)候已經(jīng)是客戶時(shí)間晚上7點(diǎn)了)。
什么?!!這才是上半場(chǎng)?下午我還要和我Team的人開(kāi)會(huì)布置任務(wù)呢!!不過(guò)還是禮貌性地說(shuō)了一句,感謝你的面試,我的準(zhǔn)時(shí)上線的。
技術(shù)面試總結(jié)
在這里,其實(shí)我自己感覺(jué),技術(shù)面試這一關(guān)其實(shí)應(yīng)該是八九不離十了,因?yàn)閺暮涂蛻魷贤ǖ男Ч麃?lái)看,基本上都是贊許,下半場(chǎng)還沒(méi)開(kāi)始,所以我在這里先總結(jié)一下我的面試體會(huì):
技術(shù)上:
1. 要有非常明確、規(guī)范、令人信服的整體結(jié)構(gòu)。所以對(duì)代碼分塊很重要,同時(shí)這也是我們很容易疏忽的地方。各塊代碼的功能如下:
Block 1:描述性的注釋。首先把題目放到注釋里,讓reviewer知道你現(xiàn)在做的是哪道題;其次是要對(duì)題目進(jìn)行簡(jiǎn)短的分析,讓reviewer了解你的思路,節(jié)省他閱讀代碼的時(shí)間;再次是提一下你將用到的關(guān)鍵技術(shù)以及你的concern。比如說(shuō)你現(xiàn)在是按小文本的輸入寫(xiě)出的最好的代碼,但如果是大文本輸入,需要更改邏輯。這主要體現(xiàn)出一個(gè)人的溝通能力。不管你自己知不知道該怎么做,首先要想到的是讓對(duì)方知道哪些是你能夠應(yīng)付得來(lái)的,哪些是你的問(wèn)題。忌諱按照自己的假設(shè)去答題。如果條件不明確,需要你自己提出來(lái)。客戶很喜歡別人跟他討論,這樣可以明確需求,減少風(fēng)險(xiǎn)和不確定性。客戶也很喜歡別人有問(wèn)題時(shí)馬上提出來(lái)。總體來(lái)說(shuō),他們很能容忍你有問(wèn)題,但不能容忍你隱瞞問(wèn)題。
Block 2:自動(dòng)生成的代碼。這里最重要的是注意命名規(guī)則。根據(jù)需要增加一些注釋也是很好的習(xí)慣
Block 3:代碼的主體部分。方法前面加注釋是好習(xí)慣。變量最好集中聲明,顯得比較整潔有條理。一定不能遺漏的是數(shù)據(jù)的合法性驗(yàn)證,健壯性是代碼的重要指標(biāo)之一。Good test case 和 bad test case 至少各有一個(gè)。程序的可擴(kuò)展性也很重要,少用hard code。
Block 4:異常處理。一定要有。
2. 盡可能多地去顯示你的能力。從客戶的角度來(lái)說(shuō),他們也很歡迎candidate全面地去展示自己
1. 多用OO的概念去思考問(wèn)題
2. 替客戶去想他們自己都沒(méi)有想到的問(wèn)題,但不要天馬行空。例如,Scalability就能很好地展示自己思維的縝密
3. 適當(dāng)展示自己design的能力,這一點(diǎn)很重要。即使是很小的問(wèn)題,也是需要全局把控的。
3. 一個(gè)很重要的觀念需要candidates轉(zhuǎn)變過(guò)來(lái)。客戶面試的根本目的不是為了難倒candidates,而是為了給candidates一個(gè)展示自己能力的平臺(tái)。所以對(duì)于客戶給出的題目,應(yīng)該用工作的態(tài)度去應(yīng)對(duì),而不是用考試的態(tài)度去應(yīng)付。很多優(yōu)秀的候選人給我們的感覺(jué)是:讓他實(shí)際工作,他可能會(huì)考慮得很全面,而答題的時(shí)候,他就顯得比較馬虎,完成要求就算結(jié)束。原因大概就在這里。這樣的結(jié)果是,別人只能看到他考試的能力,看不到他工作的能力。
管理上:
技術(shù)上半場(chǎng)是技術(shù)面試,沒(méi)有問(wèn)到管理的問(wèn)題,但是我也想辦法體現(xiàn)了自己的能力,比如告訴客戶我還是比較了解軟件開(kāi)發(fā)過(guò)程的,從需求分析,需求確認(rèn),設(shè)計(jì),編碼,Code Review,測(cè)試以及需求變更方便的東西,在估時(shí)方便有悲觀估時(shí)也有樂(lè)觀估時(shí),同時(shí)在自我介紹的時(shí)候也通過(guò)項(xiàng)目的實(shí)際經(jīng)驗(yàn)向客戶灌輸一些其實(shí)你懂很多東西這個(gè)觀點(diǎn)。
溝通:
客戶相對(duì)來(lái)說(shuō)是個(gè)比較容易溝通的人,在需求確認(rèn)的時(shí)候就能看出來(lái)了,沒(méi)有趾高氣揚(yáng)的架勢(shì),以至于后來(lái)我反而去表?yè)P(yáng)了他一句“Good catch”,所以,在任何面試的場(chǎng)合,只要溝通做到位了,其實(shí)技術(shù)差一點(diǎn)也無(wú)所謂,就像前面,我連Console.Read的基本用法都不會(huì)了,也沒(méi)有什么事。
非技術(shù)面試
下半場(chǎng)的面試是下午1點(diǎn)開(kāi)始的(客戶時(shí)間晚上8點(diǎn)),主要是問(wèn)項(xiàng)目/Team管理和溝通方面的問(wèn)題,主要問(wèn)題如下:
客戶要看我們?nèi)粘m?xiàng)目里的文檔,這個(gè)沒(méi)什么問(wèn)題,因?yàn)槠綍r(shí)項(xiàng)目都是有的,我只是把Code review的文檔做了一些詳細(xì)講解,比如兩輪review+錯(cuò)誤分級(jí)和優(yōu)化分級(jí),然后把平時(shí)發(fā)給客戶用的日?qǐng)?bào)和周報(bào)也都展示了一下,但是在后面展示給面試官看架構(gòu)文檔和設(shè)計(jì)文檔的時(shí)候,我特地說(shuō)了一句,這個(gè)文檔我現(xiàn)在不能傳給你,因?yàn)闋可娴街暗目蛻粜畔?#xff0c;由于我們公司不允許把每一個(gè)客戶項(xiàng)目相關(guān)的任何內(nèi)容公布,所以如果想看的話,我要把一些信息加工屏蔽處理以后,才能發(fā)給你一個(gè)大綱,客戶表示滿意,因?yàn)樗f(shuō)了句:恩,我們的項(xiàng)目也是需要保密的。
估時(shí)這個(gè)問(wèn)題相對(duì)來(lái)說(shuō),比較寬泛,如果按照自己的絕對(duì)堅(jiān)持的方式告訴客戶,很有可能和客戶的預(yù)期不一致,所以我的大體答復(fù)如下:
在真正做需求分析之前,估時(shí)的話,我一般是參考?xì)v史數(shù)據(jù)來(lái)估計(jì),主要是包括之前是否做個(gè)相似的系統(tǒng)或者子模塊,或者是公司是否有現(xiàn)成的系統(tǒng)或者子模塊的解決方案可以直接利用,然后再參考一些特殊的要求給出一個(gè)預(yù)計(jì)。
在做需求分析之后估時(shí),一般會(huì)按照up2down的方式,也就是將系統(tǒng)細(xì)分成子系統(tǒng),子系統(tǒng)細(xì)分成子模塊,子模塊細(xì)分成子function,然后逐一估計(jì),另外我也會(huì)讓Senior(或者我的backup)給出自己的估時(shí)清單,最后會(huì)進(jìn)行比較,然后對(duì)有較大差異的部分進(jìn)行重新估計(jì)與討論,以便最終達(dá)成相對(duì)的一致。
另外,我也列舉了一般估時(shí)需要考慮的點(diǎn):
1. 項(xiàng)目大小以及項(xiàng)目難易程度
2. 客戶或公司的特殊限制約束
3. 每個(gè)Level的工程師數(shù)量以及Skill的能力
4. 開(kāi)發(fā)步驟,每個(gè)步驟大概需要多少天(調(diào)研、分析、原型設(shè)計(jì)、架構(gòu)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試、bug修改、維護(hù))
5. 交付物的數(shù)量(即客戶需要什么樣的交付物,因?yàn)椴煌墓究赡苄枰煌慕桓段镂臋n)
6. 會(huì)議、溝通、培訓(xùn)、Travel的時(shí)間
7. 有無(wú)任何可以重用的組件或者解決方案
8. 項(xiàng)目風(fēng)險(xiǎn)(CR,離職,換人等)以及Buffer
我的答復(fù):主要職責(zé)是項(xiàng)目和技術(shù)分析,方案決策,task assignment, schedule, scope, quality, technology and communication等,有時(shí)候,TL就是一個(gè)manager,因?yàn)樗枰櫤涂刂祈?xiàng)目的進(jìn)度,找出項(xiàng)目風(fēng)險(xiǎn)然后避免這些風(fēng)險(xiǎn),有時(shí)候又是一個(gè)BA,因?yàn)樗枰幸粋€(gè)好的知識(shí)去完全理解客戶的需求,所以說(shuō)TL也是架構(gòu)師和開(kāi)發(fā)人員之間一座非常重要的橋梁,另外,TL也應(yīng)該是一個(gè)技術(shù)決策者,在合適的時(shí)機(jī)做合理的決策,同時(shí)TL也在平時(shí)也應(yīng)該負(fù)責(zé)整個(gè)Team的培訓(xùn)工作。
在列舉優(yōu)勢(shì)和劣勢(shì)的時(shí)候,優(yōu)勢(shì)肯定要是優(yōu)勢(shì),劣勢(shì)也得時(shí)優(yōu)勢(shì)才行,當(dāng)然你不能太明顯了,我的答復(fù)如下:
優(yōu)勢(shì):
1. 很強(qiáng)的IT背景和分析的能力
2. Team管理經(jīng)驗(yàn)和項(xiàng)目交付方面有很多經(jīng)驗(yàn)
3. 擅長(zhǎng)溝通(從客戶/公司到Team,從Team到公司/客戶)
劣勢(shì):
1. 對(duì)項(xiàng)目成員要求非常嚴(yán)格(比如所有的文檔必須用我指定的統(tǒng)一的模板,成員一般都喜歡flexible的風(fēng)格)
2. 做Solution review的時(shí)候,太注重細(xì)節(jié)(經(jīng)常在做決策的時(shí)候浪費(fèi)不少時(shí)機(jī))
3. 經(jīng)常開(kāi)會(huì)(但開(kāi)發(fā)人員一把都討厭開(kāi)會(huì)太多的會(huì))
主要還是想了解我最近的項(xiàng)目的結(jié)構(gòu)和大小,以便確保我能否勝任他的工作,我按實(shí)際情況回答如下:
1. BA:2個(gè)
2. 架構(gòu)師: 1個(gè)
3. C#開(kāi)發(fā)組:9個(gè)(1個(gè)Lead,6個(gè)高級(jí),2個(gè)中級(jí))
4. BI開(kāi)發(fā)組:8個(gè)(1個(gè)Lead,4個(gè)高級(jí),3個(gè)中級(jí))
5. C#測(cè)試組:7個(gè)(1個(gè)Lead,6個(gè)測(cè)試)
6. BI測(cè)試組:6個(gè)(1個(gè)Lead,5個(gè)測(cè)試)
這個(gè)問(wèn)題,剛開(kāi)始還是以技術(shù)背景來(lái)理解的,后來(lái)想了想,應(yīng)該是以管理背景來(lái)回答這個(gè)問(wèn)題,首先,應(yīng)該先找到問(wèn)題的原因,然后列出關(guān)鍵點(diǎn)和對(duì)當(dāng)前項(xiàng)目帶來(lái)的風(fēng)險(xiǎn),然后提供至少2個(gè)解決方案,同時(shí)給出每個(gè)解決方案的優(yōu)缺點(diǎn),最后會(huì)根據(jù)issue的重要程序和影響的大小來(lái)決定最終使用哪個(gè)方案。
給出的例子,就是上個(gè)項(xiàng)目里遇到的,當(dāng)初客戶要求用Windows服務(wù)+Access數(shù)據(jù)庫(kù)的形式來(lái)部署到100個(gè)KTV門(mén)店上,后來(lái)實(shí)施部署的時(shí)候發(fā)現(xiàn)部分程序的門(mén)店使用的是SQLite數(shù)據(jù)庫(kù)或是Excel表。后來(lái)我們只用了4天就解決了支持多數(shù)據(jù)庫(kù)源的問(wèn)題,首先我們?cè)蚴前l(fā)現(xiàn)了,然后列出了修改這些程序的風(fēng)險(xiǎn)和方案,后來(lái)結(jié)合客戶的要求,先部署可以部署的程序,程序升級(jí)以后在通過(guò)我們的自動(dòng)升級(jí)機(jī)制來(lái)升級(jí)成通用版本,當(dāng)然這也得益于IOC這種技術(shù)的幫助,不過(guò)這個(gè)4天的時(shí)間依然在我們的Buffer之內(nèi),并且我們的代碼也能很好的支持其它的數(shù)據(jù)源了。
由于很推崇敏捷,所以我們的開(kāi)發(fā)一部都是按照2周為一個(gè)Sprint,所以每個(gè)Sprint我們都有明確的工作計(jì)劃,明確了我們應(yīng)該做什么,有什么樣的交付物,另外分配任務(wù)的時(shí)候會(huì)根據(jù)不同的level的人給不同的任務(wù),誰(shuí)熟悉那一塊就盡量做那一塊,當(dāng)然以便我們可以高效地利用時(shí)間,另外優(yōu)先級(jí)比較低但是也比較重要的任務(wù)也會(huì)讓middle的人去做,不過(guò)通常我都會(huì)指定一個(gè)Senior的人做他的mentor.
關(guān)于項(xiàng)目跟蹤,我們一直使用的是DailyScrum的形式來(lái)監(jiān)控進(jìn)度,通過(guò)跟蹤4個(gè)事情來(lái)確保項(xiàng)目處在合理的軌道:你今天做了啥?/你正在做啥?/有沒(méi)有任何問(wèn)題需要?jiǎng)e人的幫助?/明天的計(jì)劃是什么?,當(dāng)然在問(wèn)這些問(wèn)題之前,他們還有一定的時(shí)間去做pair review的。
我的Team在質(zhì)量控制方面一般分位2部分:
1. 任何設(shè)計(jì)和方案無(wú)論大小,在Coding之前必須經(jīng)過(guò)review和approved以后才能開(kāi)始,
2. 所有的task都要進(jìn)行2輪的Code review,第一輪是編碼中期,以確保方案理解是否正確,第二輪是編碼結(jié)束以后。
同時(shí),所以的bug都要進(jìn)行逐一分析和總結(jié)教訓(xùn),一般下一次不再犯類似的錯(cuò)誤。
答復(fù)如下:工作過(guò)程中,如果我們?cè)谠O(shè)計(jì),技術(shù)或者issue上做出決策的話,我們會(huì)發(fā)生郵件給Onsite尋求幫助,不過(guò)在尋求幫助之前,我們會(huì)至少提供2個(gè)方案,列出每個(gè)方案的優(yōu)點(diǎn)和缺點(diǎn),告訴我們比較傾向于哪個(gè)方案(以及為什么),方案包括分析結(jié)果、技術(shù)方案、估時(shí)、風(fēng)險(xiǎn)等,在offshore經(jīng)過(guò)充分的討論以后,會(huì)發(fā)給客戶尋求幫助。(注:千萬(wàn)不要說(shuō),我們只要不懂,就發(fā)郵件問(wèn)客戶,因?yàn)榭蛻舫龀鲥X(qián)讓你干活的,不是來(lái)培訓(xùn)你的,充分提供資料給客戶,讓客戶做決策是個(gè)好主意,因?yàn)榭蛻袅私獾淖约汗镜臇|西遠(yuǎn)遠(yuǎn)比我們多)
在如何向新人transfer方面,一般剛開(kāi)始會(huì)有一個(gè)high level的培訓(xùn)會(huì)議,然后show一些重要的PPT給他一個(gè)整體的講解。然后每天會(huì)給新人提供很多文檔用于學(xué)習(xí),每個(gè)文檔都會(huì)有一些key point一般他能否很快速的了解相應(yīng)的業(yè)務(wù)知識(shí),第一個(gè)月,我們有每周一次的check meeting來(lái)檢查他的學(xué)習(xí)狀態(tài)和學(xué)習(xí)結(jié)果,以便確保他能理解這些東西,當(dāng)然也會(huì)回答他各種各樣的問(wèn)題,與此同時(shí),如果我們發(fā)現(xiàn)有一些東西需要更新或者通過(guò)新人提問(wèn)也讓我們發(fā)現(xiàn)有些東西需要加進(jìn)去的話,我們也會(huì)更新我們的文檔。在學(xué)習(xí)結(jié)束以后,一般我們會(huì)分配1-3個(gè)簡(jiǎn)單的任務(wù)給新人,同時(shí)指定一個(gè)Mentor帶著他做,以確保他能真正上手項(xiàng)目,并且熟悉我們的開(kāi)發(fā)流程。
如果讓所有的人都知道需求變更,首先會(huì)把所有的CR發(fā)送給所有的項(xiàng)目組成員以確保所有的人都理解這個(gè)CR,然后所有的人都要對(duì)這個(gè)CR進(jìn)行分析,以便確保這個(gè)CR到底和自己手頭的活有沒(méi)有關(guān)系或影響,如果有影響的話,自己的改動(dòng)又會(huì)不會(huì)再次影響別的人;同時(shí)所有干系人都要提供針對(duì)這個(gè)CR的方案、估時(shí)和執(zhí)行計(jì)劃。
然后,我們會(huì)和onsite客戶溝通我們的這些方案和計(jì)劃,讓他們來(lái)accept或者reject這個(gè)CR。
當(dāng)然,我們也有自己的Traceability Matrix系統(tǒng)來(lái)跟著所有的需求變更,以便后期可以做分析總結(jié),提示我們做分析、設(shè)計(jì)、架構(gòu)、編碼的能力,盡量在每個(gè)CR到來(lái)的時(shí)候不需要改動(dòng)太多的代碼。(其實(shí)還有一點(diǎn)作用,就是,萬(wàn)一出現(xiàn)問(wèn)題,可以拿出來(lái)作為證據(jù),因?yàn)檫@個(gè)系統(tǒng)里也記錄了客戶的郵件呢,嘿嘿,只不過(guò)這個(gè)一點(diǎn)沒(méi)有告訴面試官)
交叉培訓(xùn)這一塊,其實(shí)我本人是贊成的,因?yàn)槊總€(gè)人都有自己的強(qiáng)項(xiàng)和弱項(xiàng),通過(guò)在項(xiàng)目過(guò)程中或者項(xiàng)目結(jié)束大家可以share各自的信息以便互相提高。
不過(guò),對(duì)于交叉培訓(xùn),我有2個(gè)理解,一個(gè)是同一項(xiàng)目組不同skills人的培訓(xùn)(比如CSS高手和JS高手互相培訓(xùn)),在這一個(gè)層面上,大家互相share的東西相對(duì)比較多,另外一個(gè)是不同項(xiàng)目組之間的交叉培訓(xùn),比如DW BI Team可以向C#開(kāi)發(fā)Team共享一些東西,C#也可以共享一些東西給他們,這個(gè)層面上,我本人不希望有太深入的培訓(xùn),畢竟不是主業(yè)。
不管怎么說(shuō),交叉培訓(xùn)其實(shí)還是挺好的,因?yàn)榭梢宰屆總€(gè)人或者每個(gè)項(xiàng)目組都有一些提升。
再回答完這些問(wèn)題的時(shí)候,其實(shí)基本上已經(jīng)過(guò)了3個(gè)小時(shí)了,因?yàn)闆_突可能因?yàn)橛《仁接⑽牡睦斫馍系⒄`了一些實(shí)際,但總體效果上還是不錯(cuò)的,充分表達(dá)了我想說(shuō)的內(nèi)容。
后面又大概聊了半個(gè)多小時(shí),主要是問(wèn)我平時(shí)是如何發(fā)郵件的,郵件里的To/CC/BCC都是怎么用的,以及如何給項(xiàng)目組成員作評(píng)價(jià),如果想領(lǐng)導(dǎo)要特殊的支持等方面的軟技能了,平時(shí)怎么做的,我也就按實(shí)說(shuō)了。
?
最后,估計(jì)R先生也覺(jué)得問(wèn)個(gè)差不多了,而且他也困了(已經(jīng)是他的夜里快12點(diǎn)了),所以就說(shuō)我們到此為止吧,還說(shuō)會(huì)盡快給答復(fù)的,當(dāng)然最后我也花了很多詞匯恭維他,因?yàn)樗麖南挛?點(diǎn)一直到夜里12點(diǎn)一直花時(shí)間來(lái)面試我:我很appreciate你花了那么多時(shí)間來(lái)面我,對(duì)我來(lái)說(shuō)這是一個(gè)很excited的面試,你真的是一個(gè)很Nice的人,我真的很希望能做你的項(xiàng)目和你一起共事。
?
非技術(shù)面試總結(jié)
這一塊面試,主要考察的是2部分,一部分是項(xiàng)目管理方面的東西,看你是不是能很熟練地管理項(xiàng)目,確保項(xiàng)目質(zhì)量按實(shí)提交交付物,同時(shí)也考察了你如何和客戶進(jìn)行溝通規(guī)避風(fēng)險(xiǎn),最后要問(wèn)了一些軟技能的東西,比如發(fā)郵件的時(shí)候,什么時(shí)候該To,什么時(shí)候該C,而又什么時(shí)候該BCC,以及和同事相處及評(píng)價(jià)的態(tài)度等方面的問(wèn)題。
另外還有一點(diǎn),我覺(jué)得也是非常重要,那就是面試官花了很多時(shí)間在你身上,在結(jié)束的時(shí)候你應(yīng)該多感謝一下他,這樣他會(huì)很開(kāi)心,即便不要你,以后說(shuō)不定還有機(jī)會(huì)呢。
結(jié)果
通過(guò)了,終于讓VP Happy了一把,之前pending的一批已經(jīng)通過(guò)面試但不讓簽ECA安全協(xié)議的人也都陸續(xù)開(kāi)始和客戶簽協(xié)議了,當(dāng)然我也從原來(lái)的部門(mén)調(diào)到了新成立的ODC,同時(shí)原部門(mén)把博客園的兄弟NewSea挖了進(jìn)來(lái),以便能夠繼續(xù)之前的工作,1個(gè)月交接以后,我就飛往西雅圖,去客戶現(xiàn)場(chǎng)進(jìn)行Domain Knowledge的培訓(xùn)去了。
后續(xù)
以至于,后來(lái)還沒(méi)用交接完,客戶就讓我自己去招聘下面的Senior人選了,估計(jì)也是為了向他的老板匯報(bào)一下吧,所以,在找到合適的人選后,我的第一份正式的郵件,就這樣發(fā)出了(文中的H*,也是博客園的一個(gè)大牛哦,目前和我一個(gè)組,有機(jī)會(huì)和大家介紹一下):
We are having the candidate H*** who qualify from our interview, we would like get your approval on the hire recommendation.
Below is my feedback after talk with H***, please let me know if you have any concerns.
Thanks.
General feeling in the interview:
H*** is proactive on communication, he has a good communication, also he would like to focus on .net development and passionate about the ODC project.he is talkative and introduce a lot aspects of himself and showing interests in ODC project on the project size, working method, etc.
Strength:
He show a good technical background especially on OOP Design/javascript/asp.net areas.
Deep understand on .NET CLR and OOP Design.
He is confident on the asp.net/JavaScript, and self-learning capabilities.
Weakness:
Limited oral English, however he shows potential as their reading/written English is good.
Hire recommendation: Hire
招聘
另外,我們最近也在招人,有興趣的請(qǐng)聯(lián)系我,基本條件如下:
同步與推薦
本文已同步至目錄索引:《大叔手記全集》
大叔手記:旨在記錄日常工作中的各種小技巧與資料(包括但不限于技術(shù)),如對(duì)你有用,請(qǐng)推薦一把,給大叔寫(xiě)作的動(dòng)力。
轉(zhuǎn)載于:https://www.cnblogs.com/TomXu/archive/2011/12/21/2292722.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (Joomla)字符串截取
- 下一篇: 认识Mahout下的云计算机器学习