像專業(yè)人士那樣聊天
在深入代碼之前,大部分面試官都喜歡聊聊你的背景。他們想知道:
關(guān)于編程的元認(rèn)知。你有考慮過如何才能更好地編程嗎?(譯者注:元認(rèn)知(Metacognition)或譯為后設(shè)認(rèn)知,這個(gè)名詞由 Swartz 及 Perkins 發(fā)明及定義,即“認(rèn)知的認(rèn)知”或“知識(shí)的知識(shí)”。簡言之,就是對(duì)自己的認(rèn)知過程(包括:記憶、感知、計(jì)算、聯(lián)想等各項(xiàng))的思考。)
自主精神/領(lǐng)導(dǎo)能力。你看到你的工作完成了嗎?就算你不必這樣做,你會(huì)主動(dòng)修正不對(duì)的事情嗎?
溝通。他們會(huì)和你聊聊技術(shù)上的問題是有用的,還是痛苦的?
你至少應(yīng)該準(zhǔn)備好下面中的一項(xiàng):
你解決過技術(shù)問題中一個(gè)有趣的例子
你克服人際沖突的一個(gè)例子
領(lǐng)導(dǎo)能力或自主精神的例子
你在過去項(xiàng)目中應(yīng)該做什么的故事
你最喜歡語言的一些細(xì)節(jié),以及關(guān)于你喜歡和不喜歡說的語言上的一些事情
關(guān)于公司產(chǎn)品或業(yè)務(wù)的問題
關(guān)于公司工程戰(zhàn)略的問題(測試,Scrum等)
好好準(zhǔn)備相關(guān)材料。你要展示你做過最自豪的事情,你很希望了解他們正在做什么,而且你對(duì)語言和工作流程有一些自己的想法。
溝通
一旦涉及到編程的問題,溝通是關(guān)鍵。在過程中需要幫助但可以清楚與人溝通的候選人,要比那些可以輕而易舉解決問題的候選人更加難得。
理解它是哪一類問題。問題有兩類:
編程。面試官希望看到你解決問題,并且可以寫出整潔和有效的代碼。
聊聊而已。面試官只是想讓你說點(diǎn)什么。這些問題通常要么是高層次的系統(tǒng)設(shè)計(jì)(“你如何設(shè)計(jì) Twitter 的備份?”),要么是瑣碎的事情(“JavaScript 中 hoisting 是什么?”)。有時(shí)候瑣事是為了引出一個(gè)“真正的”問題,比如,“我們?nèi)绾文芸炫乓粋€(gè)整數(shù)數(shù)組?好的,現(xiàn)在假設(shè)我們不再使用整數(shù)而是……”
如果面試官在進(jìn)入“真正的”問題之前,只是想很快得到一個(gè)類似閑聊的回答,而你卻開始編寫代碼了,她會(huì)感到失望。只需要問一句,“我們要為它編寫代碼嗎?”
讓人覺得你們是一個(gè)團(tuán)隊(duì)的。面試官想知道和你一起解決問題會(huì)是什么樣子的,所以要讓面試官覺得你是樂于合作的。用“我們”來代替“我”,比如,“如果我們采用一個(gè)廣度優(yōu)先搜索,我們會(huì)很快得到一個(gè)答案。”如果要你選擇在紙上還是在白板上編寫代碼,最好選擇白板。這樣你就可以坐在面試官的旁邊,面對(duì)著問題(而不是和她隔著一個(gè)桌子)。
說出你的想法。我是認(rèn)真的。“讓我們試著這樣做——但我還不確定它是否會(huì)起作用。”,如果你被卡住了,就說出你的想法。說說什么可能會(huì)有用。說說你認(rèn)為什么東西可以工作,以及為什么它不工作。這也適用于瑣碎的閑聊問題。當(dāng)被要求解釋 JavaScript 閉包時(shí),“它跟范圍有關(guān),而且是在函數(shù)中實(shí)現(xiàn)”,這樣的回答就可以讓你拿到 90% 的分?jǐn)?shù)。
說你不知道。如果你碰到一個(gè)事實(shí)(例如,特定語言的邊邊角角,一個(gè)涉及分析運(yùn)行時(shí)的難題),不要不懂裝懂。相反應(yīng)該說“我不確定,但我猜測是這樣,因?yàn)椤保@個(gè)『因?yàn)椤话ㄍㄟ^展示其它選項(xiàng)的荒謬性來排除它們,或者從其它語言或問題中找到類似的例子。
放慢步調(diào)。不要自信地脫口而出一個(gè)答案。如果它是正確的,你仍然需要解釋它,如果它是錯(cuò)誤的,就會(huì)顯得你很魯莽。你并沒有因?yàn)樗俣瓤於A得什么,相反更可能會(huì)因?yàn)榇驍嗨蚣庇诘贸鼋Y(jié)論而惹惱面試官。
擺脫困境
你有時(shí)會(huì)被卡住。放松。這并不意味著你已經(jīng)失敗了。記住與找到正確答案的能力相比,面試官通常更加關(guān)注從不同角度探索問題的能力。就算希望渺茫,也要繼續(xù)探索不放棄。
畫圖。別浪費(fèi)時(shí)間光在腦袋里面想 —— 在黑板上思考。畫幾個(gè)不同的測試輸入。用手畫出如何獲得想要的輸出。然后思考將你的方法轉(zhuǎn)換成代碼。
解決一個(gè)更簡單的問題。不知道如何找到集合中第四大的項(xiàng)目?先思考如何找到最大項(xiàng),再看看你能否改變一下方法。
先寫一個(gè)簡單和低效的方法,再想辦法去優(yōu)化它。使用暴力的方法。盡一切努力得到答案。
更加大聲說出你的想法。說出你知道的。說說你認(rèn)為什么可能會(huì)工作和為什么它行不通。你可能會(huì)意識(shí)到它確實(shí)有用,或者一個(gè)改進(jìn)的版本會(huì)游有用。或者你可能會(huì)得到一個(gè)提示。
等待提示。不要一臉期待地盯著面試官,只需要停下來“想一下” —— 你的面試官可能已經(jīng)決定給你一個(gè)提示,只是在等待一個(gè)時(shí)機(jī),避免影響到你。
考慮空間和運(yùn)行時(shí)間的限制。如果你不確定是否能優(yōu)化解決方案,大聲說出你的想法。例如:
“我至少要查看所有的項(xiàng),所以我不能再優(yōu)化了。”
“暴力的辦法就是測試所有的可能性”
“這個(gè)答案將包含 n^2 個(gè)項(xiàng),所以我至少要花這么多時(shí)間。”
把你的想法寫下來
你很容易讓自己陷入混亂。你先集中精神把想法寫下來,最后才去關(guān)心細(xì)節(jié)。
調(diào)用輔助函數(shù)并進(jìn)行下去。如果你不能很快想到如何實(shí)現(xiàn)一部分的算法,不論大小都跳過它。呼叫一個(gè)命名合理的輔助函數(shù),聲明“這將會(huì)完成某事”,并進(jìn)行下去。如果輔助功能不重要,你完全可以不去實(shí)現(xiàn)它。
不要擔(dān)心語法。只要略過它就好了。如果必須的話請轉(zhuǎn)換成英語。只需要說你會(huì)回頭看它的。
給自己留下足夠的空間。你后面可能要在兩行之間添加代碼或注釋。從白板的頂部開始,在每一行之間留下一個(gè)空白行。
為最后的檢查做好標(biāo)記。別擔(dān)心你的循環(huán)應(yīng)該是 “《” 還是 “《=” 。你可以做一個(gè)標(biāo)記提醒自己最后去檢查。只要把整體算法寫下來。
使用描述性的變量名稱。這樣會(huì)花一些時(shí)間,但會(huì)防止你忘記代碼正在做的事情。使用 names_to_phone_nums_map 代替 nums。在命名中暗示類型。返回布爾值的函數(shù)應(yīng)該以 “is_ ” 開頭。擁有一個(gè)列表的變量應(yīng)該以“s”結(jié)尾。選擇你能理解的標(biāo)準(zhǔn)并堅(jiān)持下去。
當(dāng)你完成后,記得做好善后工作。
你輸入一個(gè)例子,手動(dòng)過一遍你的方法,并大聲說出你的想法。當(dāng)程序運(yùn)行時(shí),你寫下變量保存的值 —— 在腦袋里做這些不會(huì)給你帶來任何加分。這樣可以幫你查找問題,并且可以消除面試官對(duì)于你正在做什么的疑惑。
查找一開始的錯(cuò)誤。你應(yīng)該在循環(huán)中使用“《=”而不是“《”?
測試邊界情況。包括空集、單個(gè)元素集合或負(fù)數(shù)等等。加分項(xiàng):提一下單元測試!
不要覺得麻煩。有些面試官并不在意這些善后步驟。如果你不是很確定這一點(diǎn),可以這樣說:“我通常會(huì)用一些邊界條件來測試代碼 —— 接下來我們要這么做嗎?”
實(shí)踐
最后,處理實(shí)際問題是無法替代的。
用紙和筆來編寫代碼。誠實(shí)地面對(duì)自己。剛開始可能會(huì)覺得很棘手。這沒什么。如果你現(xiàn)在能克服這種棘手的問題,等到真正面試的時(shí)候,就不會(huì)顯得笨手笨腳了。
我們遇到的實(shí)際問題反映了面試的流程,即當(dāng)你陷入困境時(shí)會(huì)得到提示,當(dāng)你的算法可以進(jìn)一步優(yōu)化時(shí)也會(huì)得到鼓勵(lì)。
-
編程
+關(guān)注
關(guān)注
88文章
3642瀏覽量
94080 -
程序員
+關(guān)注
關(guān)注
4文章
953瀏覽量
29879
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
“程序員將消失”,李彥宏/黃仁勛都贊同,三大方向可“自救”
![“<b class='flag-5'>程序員</b>將消失”,李彥宏/黃仁勛都贊同,三大方向可“自救”](https://file1.elecfans.com/web2/M00/C4/C5/wKgaomXu20uAR0RtAAJB92DbaiA567.png)
阿里云升級(jí)通義靈碼AI程序員,全面上線
TMS320C55x DSP CPU程序員參考補(bǔ)充
![TMS320C55x DSP CPU<b class='flag-5'>程序員</b>參考補(bǔ)充](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
UCD3138A64/UCD3138128程序員手冊
![UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
機(jī)械革命發(fā)布CODE AI程序員本
Linux驅(qū)動(dòng)程序程序員指南
![Linux驅(qū)動(dòng)<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AI編程工具會(huì)不會(huì)搶程序員飯碗
程序員去面試只需一個(gè)技能征服所有面試官!
![<b class='flag-5'>程序員</b>去<b class='flag-5'>面試</b>只需一個(gè)技能征服所有<b class='flag-5'>面試</b>官!](https://file1.elecfans.com/web1/M00/F4/5E/wKgaoWcqAuCAaT7WAAA840SPbbA762.png)
第五屆長沙·中國1024程序員節(jié)開幕
程序員節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)
![<b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)](https://file1.elecfans.com/web2/M00/8D/79/wKgaomS7KZ-AY3GzAAArJzrUg1c443.png)
程序員節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!
![<b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!](https://file1.elecfans.com/web2/M00/F7/E1/wKgaomaDZHyAdCpxAACC-PIdRiA155.png)
薪資高、青春飯,是不是程序員=青樓?
瑞薩Flash程序員V3 發(fā)布說明
![瑞薩Flash<b class='flag-5'>程序員</b>V3 發(fā)布說明](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論