原文出處: heyzap 譯文出處:陳慶霆
感謝作者
在過(guò)去5年中,我面試了數(shù)百名IT工程師零渐,我認(rèn)為很值得把我的面試IT工程師的經(jīng)驗(yàn)同大家分享。這能夠:
幫助人們?yōu)樗麄兊南乱粋€(gè)面試準(zhǔn)備
幫助IT工程師找到合適的工作系忙。
幫助IT工程師創(chuàng)造更好的環(huán)境诵盼。
我們通過(guò)兩個(gè)方面面試IT工程師:
技術(shù)技能:包括理論和實(shí)踐技能以及經(jīng)驗(yàn)等。
非技術(shù)技能:性格银还,溝通技巧拦耐,是否能夠融入我們的文化環(huán)境。
第1部分中见剩,我將主要從技能部分講述杀糯。
1、一個(gè)IT工程師應(yīng)該具有的技能
我認(rèn)為實(shí)用技能包含3個(gè)方面苍苞,如圖1所示:
圖1
這些都是很重要的:
編碼:你必須能夠在限定時(shí)間內(nèi)編寫(xiě)出高質(zhì)量的代碼固翰。
經(jīng)驗(yàn):具有相關(guān)經(jīng)驗(yàn)表明你對(duì)該行業(yè)的熱情狼纬,并能夠在一開(kāi)始就進(jìn)入工作狀態(tài)。
理論:理論知識(shí)是IT工程師的基礎(chǔ)骂际,好的理論知識(shí)能夠讓你快速解決新出現(xiàn)的問(wèn)題疗琉。
而準(zhǔn)備工作面試的過(guò)程是一個(gè)提升自己各種能力的絕佳機(jī)會(huì)。
1歉铝、提高你的理論知識(shí)
(1)學(xué)習(xí)C語(yǔ)言
C語(yǔ)言是編程的基礎(chǔ)盈简。因此,學(xué)習(xí)C語(yǔ)言能為我們了解高層概念打下堅(jiān)實(shí)的基揣習(xí)C語(yǔ)言的基礎(chǔ)知識(shí)并不會(huì)花太長(zhǎng)時(shí)間太示,只需要幾個(gè)星期的時(shí)間一般就能夠掌握柠贤。C沒(méi)有太多的抽象封裝,這就使得C語(yǔ)言相對(duì)簡(jiǎn)單类缤,和其他人一樣我學(xué)習(xí)C語(yǔ)言是看《C程序設(shè)計(jì)語(yǔ)言》這本書(shū)臼勉。
一旦你能夠真正理解C語(yǔ)言中的指針和內(nèi)存管理,C就會(huì)變成一門(mén)有趣的語(yǔ)言餐弱,因?yàn)樗鼘椭覀儚奶幚砥鲗用妫ǖ讓佑布﹣?lái)理解語(yǔ)言宴霸,而這正是其他大多數(shù)的高級(jí)語(yǔ)言所不具備的。同時(shí)了解這些概念膏蚓,也將有助于你了解更高層次的語(yǔ)言工作瓢谢。
(2)了解數(shù)據(jù)結(jié)構(gòu)和算法
雖然在網(wǎng)站/應(yīng)用程序開(kāi)發(fā)中編寫(xiě)復(fù)雜的算法和數(shù)據(jù)結(jié)構(gòu)比較少見(jiàn),但是數(shù)據(jù)結(jié)構(gòu)和算法在我們編寫(xiě)復(fù)雜系統(tǒng)的時(shí)候?qū)?huì)影響我們的思維驮瞧。即使你不需要編寫(xiě)自己的數(shù)據(jù)結(jié)構(gòu)恩闻,你也可能會(huì)在編程中使用到他,因此剧董,了解基本的選擇是至關(guān)重要的幢尚。
我推薦這本書(shū),《算法導(dǎo)論》翅楼。由于這本書(shū)是很長(zhǎng)尉剩,如果你沒(méi)有時(shí)間把他讀完,那也要學(xué)習(xí)其中的排序毅臊,哈希表理茎,二叉樹(shù),字符串匹配部分管嬉。
一旦你很好的掌握了數(shù)據(jù)結(jié)構(gòu)和算法皂林,你會(huì)發(fā)現(xiàn)這些概念將只是將你做的每件事都總結(jié)成問(wèn)題而已。
2蚯撩、比較編程語(yǔ)言
一開(kāi)始础倍,你會(huì)經(jīng)常接觸多中編程語(yǔ)言。你可能還需要快速學(xué)習(xí)新的語(yǔ)言和概念胎挎。
為了加快學(xué)習(xí)沟启,學(xué)習(xí)不同語(yǔ)言有助于我們了解他們的概念以及他們的相似及不同之處忆家。
最好的辦法是在下面每種風(fēng)格的語(yǔ)言中學(xué)一門(mén)語(yǔ)言:
底層:C語(yǔ)言。
面向?qū)ο螅篔AVA德迹,C++等芽卿。
動(dòng)態(tài)語(yǔ)言,高層次的語(yǔ)言:python, ruby 等
函數(shù)式語(yǔ)言: Lisp, Erlang, Haskell等
3胳搞、至少精通某一種語(yǔ)言和一種框架
這能夠說(shuō)明:
你既然能在一個(gè)領(lǐng)域成為專家卸例,就表明你同樣能在其他領(lǐng)域做得一樣好。
你理解這些語(yǔ)言/框架的細(xì)節(jié)可以讓你根據(jù)不同技術(shù)的優(yōu)缺點(diǎn)來(lái)做出決定肌毅。
你有激情去深究一個(gè)項(xiàng)目并且深入語(yǔ)言的最底層筷转。
想要成為專家需要花一定的時(shí)間和經(jīng)歷。這里有一些建議:
嘗試做不同的項(xiàng)目芽腾,這樣能夠幫助你理解編程語(yǔ)言。
閱讀其他人的技術(shù)博客页衙。Hacker News是一個(gè)很好的去處摊滔。
為開(kāi)源社區(qū)做出自己的貢獻(xiàn),例如在GitHub上能夠查到你的代碼店乐。
4艰躺、提高實(shí)際編碼能力
在這里我們?cè)诿嬖嚂r(shí)主要通過(guò)3中方法來(lái)測(cè)試工程師的編碼能力:
你貢獻(xiàn)到開(kāi)源社區(qū)的代碼(例如,在GitHub上)
現(xiàn)場(chǎng)編寫(xiě)一段代碼
連續(xù)2小時(shí)編寫(xiě)代碼的挑戰(zhàn)
一個(gè)工程師的編碼能力的質(zhì)量和速度是重要的眨八,而這只能來(lái)自于實(shí)踐經(jīng)驗(yàn)腺兴。
另外,使用合適的語(yǔ)言和框架對(duì)于一個(gè)項(xiàng)目也是很有幫助的廉侧。例如用Python和Ruby等腳本語(yǔ)言可以比使用像Java页响、C++這類(lèi)靜態(tài)語(yǔ)言的許多情況下更快。因?yàn)槲覀冎酪粋€(gè)求職者可能在動(dòng)態(tài)腳本語(yǔ)言方面沒(méi)有太多經(jīng)驗(yàn)段誊,所以我們面試的時(shí)候并沒(méi)有將其作為重點(diǎn)闰蚕。
做一些有挑戰(zhàn)的編程測(cè)試可以磨練你的技能。網(wǎng)上可以找到了大量的資源连舍,這也可以測(cè)試你的編程速度没陡,從而讓你可以進(jìn)一步提升你編寫(xiě)代碼的速度。Google Code Jam上面有一些不錯(cuò)的題目索赏。
5盼玄、提高您的相關(guān)技術(shù)經(jīng)驗(yàn)
有一些相關(guān)工作經(jīng)驗(yàn)是很重要的:
這表明你對(duì)編程有一定的激情
你的開(kāi)發(fā)經(jīng)驗(yàn)可以引導(dǎo)公司里的其他人
你將會(huì)在工作中一鳴驚人。
你有能力可以探究更多的現(xiàn)代技術(shù)潜腻,并有一個(gè)更加全面的視角
你可以從你以前的公司里或者其他項(xiàng)目中學(xué)到這些經(jīng)驗(yàn)埃儿。