第一篇:程序員面試技巧大梳理
程序員面試技巧大梳理
程序員面試技巧大梳理
郭帥
1.著裝篇
程序員的面試和其他的面試不同,不要求面試著穿的西裝革履,也不需要程序媛打扮的天花亂墜,當然你也不可能穿著程序員戰斗套裝去參與面試褲頭-背心-趿拉板。其實程序員的面試著裝要注意干凈整潔,可以背雙肩包,總之一句話讓別人一眼看上去,就覺得你是一位資深開發人員最好了。這里面有1個小案例希望大家能從中學習。案例1.一位程序員去面試的前一天因為某些不可描述的原因,晚上睡覺睡的很晚。第二天頭也沒洗,帶著黑眼圈就出去面試了。到了面試地點,技術官看到他,覺得十
分詭異,就問了一句,小伙子你狀態怎么這么差。由于這位程序員比較的機智,反手就是一個么么噠,哦不是,反手就是一句話,我之前公司加班比較的累,可能黑眼圈比較的重,不好意思,順勢還打了個哈欠。面試官看了不太忍心的說,放心吧小伙子,我們公司加班沒有那么的嚴重。這個案例1就是所謂的衣著和身份的匹配加上該程序員臨場的應變能力。成功的贏取了面試官的好感。
2.簡歷投遞篇
簡歷的投遞也是面試的重要環節,下面介紹一下簡歷投遞的技巧。技巧1超級無敵海底佛跳墻,也就是只選好面試的城市和薪資和職位之后開始無限制,慘絕人寰的海投,投到面試安排的滿滿當當為止。這種投遞方式適合面試初期的程序員,主要用于積累面試經驗和收集素材。技巧2區域劃分政策,也就是按照區域投遞自己的簡歷,這樣的方式能夠使得自己的面試變得輕松一些,可以少跑不少冤枉路,也可弄個
Excel,安排好每天的面試,盡量把距離近的公司安排到一起,增加面試的效率。技巧3利用一些專業的投遞網站,這里不是打廣告。在經歷過前面的大范圍面試之后,第一確立了自己的面試目標,第二準備好了自己的面試話術,這個時候就是需要精挑細選的時候了,推薦2個網站拉鉤和boss直聘。根據自己的需求去對接了解。技巧4人際關系篇,大家可能聽過很多的內推啊之類的東西,但是有的程序員說我沒有這方面的資源怎么辦啊。這里教你一招,去加qq群去群里認識一些朋友,有可能會發現一些獵頭,也有可能發現一些公司的招聘信息,這個時候直接一個窗口懟過去私聊他,如果能聊的開心,很有可能會贏取一次內推的機會。
3.人事面試篇
人事面試一般都妹子給程序員面試,這里注意,雖然平時看妹子的機會不多,面試的時候也不要總是緊盯著妹子去看,不然人家會不好意思的。還有
注意就是不要為了展現自己去跟人事夸夸其談技術,這樣是很招人煩的。和人事的交談可以多問問他們,公司的情況反客為主。
這時候人事發現你對他們公司十分的關系,會提升對你的好感度。和人事聊天,注意突出你的3點能力,抗壓,溝通和學習能力。
4.技術面試篇
這里就要說一句是時候展現真正的技術了。和技術官面試到底有沒有套路呢,答案是肯定的。有。技巧1答非所問,如果面試官問到了你不會的問題千萬別愣神,想盡辦法去回答和該問題相關的周邊問題。最后在落實一句這個技術我真的不是很了解。這樣做不會減分太多。技巧2多米諾骨牌大法,回答一個問題的時候一定不是只回答一個問題,一定要想辦法把自己精通的技術拉扯上來。這樣做一方面能更好的表現自己一方面面試官會覺得你有擴展性。其實很多面試官也會詞窮,他只是想更好 的了解你,你自己能去介紹何樂而不為呢。技巧3拍馬屁大法,遇到真一點都打不上的的問題的時候,準備好了開始捧面試官了,多說點好話,一般做技術的都比較高傲,這個時候以請教的態度去問問他,相信他會跟你說的除非他自己不會他會讓你回去自己查查看,聽得過程中務必暴露崇拜的眼神。這樣的面試非但不會減分,還有可能會加分,當然妹子使用最佳。
本文由黑馬程序員上海校區就業部郭帥老師投稿
第二篇:JAVA程序員面試技巧
java程序員面試題 第一部分:選擇題 question no: 1
1、public class test { public static void changestr(string str){ } public static void main(string[] args){ string str=1234;changestr(str);system.out.println(str);} } please write the output result : question no:2 1.public class test { 2.static boolean foo(char c){ 3.system.out.print(c);4.return true;5.} 6.public static void main(string[] argv){ 7.int i =0;8.for(foo(a);foo(b)&&(i<2);foo(c)){ 9.i++;10.foo(d);12.} 13.} 14.} what is the result? a.abdcbdcb b.abcdabcd d.an exception is thrown at runtime.question no: 3 1.class a { 2.protected int method1(int a, int b){ return 0;} 3.} which two are valid in a class that extends class a?(choose two)a.public int method1(int a, int b){ return 0;} b.private int method1(int a, int b){ return 0;} c.private int method1(int a, long b){ return 0;} d.public short method1(int a, int b){ return 0;} e.static protected int method1(int a, int b){ return 0;} question no: 4 1.public class outer{ 2.public void someoutermethod(){ 3.// line 3 4.} 5.public class inner{} 6.public static void main(string[]argv){ 7.outer o = new outer();8.// line 8 9.} 10.} which instantiates an instance of inner? a.new inner();// at line 3 b.new inner();// at line 8 c.new o.inner();// at line 8 d.new outer.inner();// at line 8//new outer().new inner()question no: 5 which method is used by a servlet to place its session id in a url that is written to the servlet’s response output stream? question no: 6 which two are equivalent?(choose two)a.b.c.d.e.f.g.question no: 7 which of the following statements regarding the lifecycle of a session bean are correct? 1.java.lang.illegalstateexception is thrown if sessioncontext.getejbobject()is invoked when a stateful session bean instance is passivated.2.sessioncontext.getrollbackonly()does not throw an exception when a session bean with bean-managed transaction demarcation is activated.3.an exception is not thrown when sessioncontext.getusertransaction()is called in the afterbegin method of a bean with container-managed transactions.5.accessing resource managers in the sessionsynchronization.afterbegin method of a stateful session bean with bean-managed transaction does not throw an exception.第二部分:概念題
1.描述struts體系結構?對應各個部分的開發工作主要包括哪些? 3.jsp有哪些內置對象和動作?它們的作用分別是什么?
4、sql問答題
select * from table 和
select * from table where name like %% and addr like %% and(1_addr like %% or 2_addr like %% or 3_addr like %% or 4_addr like %%)的檢索結果為何不同?
5、sql問答題
表結構:
1、表名:g_cardapply 字段(字段名/類型/長度): g_applyno varchar 8;//申請單號(關鍵字)g_applydate bigint 8;//申請日期 g_state varchar 2;//申請狀態
2、表名:g_cardapplydetail 字段(字段名/類型/長度): g_applyno varchar 8;//申請單號(關鍵字)g_name varchar 30;//申請人姓名 g_idcard varchar 18;//申請人身份證號 g_state varchar 2;//申請狀態
其中,兩個表的關聯字段為申請單號。
題目:
1、查詢身份證號碼為***的申請日期
2、查詢同一個身份證號碼有兩條以上記錄的身份證號碼及記錄個數
3、將身份證號碼為***的記錄在兩個表中的申請狀態均改為07
4、刪除g_cardapplydetail表中所有姓李的記錄
華為java筆試題
一、單項選擇題
1.java是從()語言改進重新設計。a.ada b.c++ c.pasacal d.basic篇二:java程序員面試注意事項
一、回答問題的思路
先正面敘述一些基本的核心知識,然后描述一些特殊的東西,最后再來一些錦上添花的東西。要注意有些不是錦上添花,而是畫蛇添足的東西,不要隨便寫上。把答題像寫書一樣寫。我要回答一個新技術的問題大概思路和步驟是:我們想干什么,干這個遇到了什么問題,現在用什么方式來解決。其實我們講課也是這樣一個思路。
答題時,先答是什么,再答有什么作用和要注意什么(這部分最重要,展現自己的心得)。答案的層次分明,條理清楚都非常重要,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。要講你做出答案的思路過程,或者說你記住答案的思想都寫下來。把答題想著是辯論賽。答題就是給別人講道理、擺事實。答題不局限于什么格式和形式,就是要將自己的學識展現出來!
另外,不要因為人家題目本來就模棱兩可,你就心里膽怯和沒底氣了,不敢回答了。你要大膽地指出對方題目很模糊和你的觀點,不要把面試官想得有多高,其實他和你就是差不多的,你想想,如果他把你招進去了,你們以后就是同事了,可不是差不多的嗎?
二、關于就業薪水
如果你是應屆生,那不能要高工資,好比大餅的故事,要拿高工資,就去中關村!少數人基礎確實很好,在校期間確實又做過一些項目,那仍然是可以要到相對高的工資的。
初級程序員薪水:2000-4500 中級程序員薪水:4000-7000 高級程序員薪水:7000以上
公司招聘程序員更看重的要用到的編碼技術、而不是那些業務不太相關的所謂項目經歷:
三、公司想招什么樣的人
對于一些公司接到了一些項目,想招聘一些初中級的程序員過來幫助寫代碼,完成這個項目,你更看重的是他的專業技術功底,還是以前做過幾個項目的經歷呢?我們先排除掉那些編碼技術功底好,又正好做過相似項目的情況,實際上,這種魚和熊掌兼得的情況并不常見。其實公司很清楚,只要招聘進來的人技術真的很明白,那他什么項目都可以做出來,公司招人不是讓你去重復做你以前的項目,而是做一個新項目,業務方面,你只要進了項目團隊,自然就能掌握。所以,大多數招聘單位在招聘那些編碼級別的程序員時也沒指望能招聘到做過類似項目的人,也不會刻意去找做過類似項目的人,用人單位也不是想把你招進,然后把你以前做過的項目重做一遍,所以,用人單位更看重招進來的人對要用到的編碼技術的功底到底怎樣,技術扎實不扎實,項目則只要跟著開發團隊走,自然就沒問題。除非是一些非常專業的行業,要招聘特別高級的開發人員和系統分析師,招聘單位才特別注重他的項目經驗和行業經驗,要去找到行業高手,公司才關心項目和與你聊項目的細節,這樣的人通常都不是通過常規招聘渠道去招聘進來的,而是通過各種手段挖過來的,這情況不再我今天要討論的范圍中。
四、公司面試會問什么,.技術學得明白不明白,人家幾個問題就把你的深淺問出來了,只要問一些具體的技術點,就很容易看出你是真懂還是假懂,很容看出你的技術深度和實力,所以,技術是來不得半點虛假的,必須扎扎實實。
由于項目的種類繁多,涉及到現實生活中的各行各業,什么五花八門的業務都有,例如,酒店房間預定管理,公司車輛調度管理,學校課程教室管理,超市進銷存管理,知識內容管理,等等……成千上萬等等,但是,不管是什么項目,采用的無非都是我們學習的那些目前流行和常用的技術。技術好、經驗豐富,則項目做出來的效率高些,程序更穩定和更容易維護些;技術差點,碰碰磕磕最后也能把項目做出來,無非是做的周期長點、返工的次數多點,程序代碼寫得差些,用的技術笨拙點。如果一個人不是完完全全做過某個項目,他是不太關心該項目的業務的,對其中的一些具體細節更是一竅不知,(如果我招你來做圖書管理,你項目經歷說你做過汽車調度,那我能問你汽車調度具體怎么回事嗎?不會,所以,你很容易蒙混過去的)而一個程序員的整個職業生涯中能實實在在和完完整整做出來的項目沒幾個,更別說在多個不同行業的項目了,有的程序員更是一輩子都只是在做某一個行業的項目,結果他就成了這個行業的專家(專門干一件事的家伙)。所以,技術面試官通常沒正好親身經歷過你簡歷寫的那些項目,他不可能去問你寫的那些項目的具體細節,而是只能泛泛地問你這個項目是多少人做的,做了多長時間,開發的過程,你在做項目的過程中有什么心得和收獲,用的什么技術等面上的問題,所以,簡歷上的項目經歷可以含有很多水分,很容易作假,技術面試官也無法在項目上甄別你的真偽。
五、簡歷怎么寫
簡歷該怎么寫:精通哪些技術,有一些什么項目經歷
六、怎樣達到簡歷上的標準(培訓中心教項目的目的)教項目是為了鞏固和靈活整合運用技術,增強學習的趣味性,熟悉做項目的流程,或得一些專業課程中無法獲得的特有項目經驗,增強自己面試的信心。講的項目應該真實可靠才有價值,否則,表面上是項目,實際上還是知識點的整合,對鞏固技術點和增強學習的趣味性,但無法獲得實際的項目經驗。
第三篇:java程序員面試自我介紹技巧
java程序員應試者應充分利用各種個人資源。想了解java程序員面試指南?除了前面提到的應試者面帶微笑、目光交流、坐姿端正等表情、身體語言外,請以沉穩平靜的聲音、以中等語速、以清晰的吐字發音、以開朗響亮的聲調給考官以愉悅的聽覺享受,聲音小而模糊、吞吞吐吐的人,一定是膽怯、緊張、不自信和缺乏活力與感染力的。面試中java程序員自我介紹的重要性:通過自我介紹,主動地向面試考官推薦自己,這是面試組成結構的重要內容,同時也是面試測評的重要指標。下面一起來透視java程序員面試指南,java程序員自我介紹。
java程序員面試指南--實力是關鍵
可以分為實際操作的能力和理論上的知識。雖然上機很少,但是毫無疑問的是,如果你在IDE下很強,那么你就有很強的自信。有自信不一定行,但沒有自信一定不行,我想大多數人都是這樣認為的吧!理論的東西你可以花點時間系統的研究一下,不過如何才算系統呢?我也不知道,我是把《java2核心技術》看了兩遍。
java程序員面試指南--態度是成功的催化劑
態度說穿了就是面試技巧問題,你的實際態度不重要,重要的是如何讓他認為你態度不錯,是個“知書達理”的好孩子。將來是否好管理是老板一類的人最在意的。
java程序員面試指南--經驗是能力體現
這個沒有什么好說的,一般來說經驗越多,能力越強。如果他要求的工資不高的話,當然優先啦!小公司通常都是這么想的。
java程序員面試指南--運氣也需要
我有同學,大學畢業之后在廣州找了兩個月沒有找到工作,主要原因一是基礎差點,加上沒有經驗,筆試,面試都過不去。偏偏有一次他去應聘,筆試答完之后,本來是技術員給他面試的,經理剛好過來。就問了他是哪里人,大學有沒有補考之類的問題,五分鐘之后就讓他下個星期過來上班,月薪2500。后來他了解了一下,經理錄用他的理由很簡單,我同學是安徽人,經理接觸過的安徽人給他的印象很好,什么踏實,肯干,任勞任怨。總之就是安徽人有優先權。不過我怎么感覺主要的理由是“比較聽話”。
java程序員自我介紹--報出自己的姓名和身份
可能應試者與面試考官打招呼時,已經將此告訴了對方,而且考官們完全可以從你的報名表、簡歷等材料中了解這些情況,但仍請你主動提及。這是禮貌的需要,還可以加深考官對你的印象。
java程序員自我介紹--簡單地介紹一下你的學歷、工作經歷等基本個人情況
請提供給考官關于你個人情況的基本的、完整的信息,如:學歷、工作經歷、家庭概況、興趣愛好、理想與報負等。這部分的陳述務必簡明扼要、抓住要點。例如介紹自己的學歷,一般只需談本專科以上的學歷。工作單位如果多,選幾個有代表性的或者你認為重要的介紹,就可以了,但這些內容一定要和面試及應考職位有關系。請保證敘述的線索清晰,一個結構混亂、內容過長的開場自,會給考官們留下雜亂無章、個性不清晰的印象,并且讓考官倦怠,削弱對繼續進行的面試的興趣和注意力。
應試者還要注意這部份內容應與個人簡歷、報名材料上的有關內容相一致,不要有出入。在介紹這些內容時,應避免書面語言的嚴整與拘束,而使用靈活的口頭語進行組織。這些個人基本情況的介紹沒有對或錯的問題——都屬于中性問題,但如果因此而大意就不妥了。
java程序員自我介紹--以經驗來說明自己的能力
接下來由這部份個人基本情況,自然地過渡到一兩個自己本科或工作期間圓滿完成的事件,以這一兩個例子來形象地、明晰他說明自己的經驗與能力,例如:在學校擔任學生干部時成功組織的活動;或者如何投入到社會實踐中,利用自己的專長為社會公眾服務;或者自己在專業上取得的重要成績以及出色的學術成就。
java程序員自我介紹--說明應聘該職位的原因
接下來要著重結合你的職業理想說明你應考這個公務員職位的原因,這一點相當重要。你可以談你對應考單位或職務的認識了解,說明你選擇這個單位或職務的強烈愿望。原先有工作單位的應試者應解釋清楚自己放棄原來的工作而做出新的職業選擇的原因。你還可以談如果你被錄取,那么你將怎樣盡職盡責地工作,并不斷根據需要完善和發展自己。當然這些都應密切聯系你的價值觀與職業觀。不過,如果你將自己描述為不食人間煙火的、不計較個人利益的“圣人”,那么考官們對你的求職動機的信任,就要大打折扣了。
對于 java程序員自我介紹,這里我們介紹了一條清晰的線索,便于你組織你的自我介紹。為了保證結構明確,有條有理,你可以多用短句子以便于口語表述,并且在段與段之間使用過渡句子,口語也要注意思路、敘述語言的流暢,盡量避免顛三倒四,同一句話反復說幾遍的“粘糊勁,同時不要用過于隨便的表述。而在java程序員面試指南里建議讀者不要表示將來踏上工作崗位,將“一定要……“絕對……諸如此類的保證,似乎在做就職演講。這些例子很多畫蛇添足似的自我介紹不但不會為你的形象增添色彩,會“越抹越黑”!。
第四篇:求職面試程序員的技巧和注意事項
我們在面試程序員的時候一定要注意一些面試技巧和注意事項。程序員是從事程序開發、維護的專業人員。大家都知道求職程序員崗位一定要專業知識雄厚,但是在求職過程中注意基本禮儀和技巧是必不可少的。還需要對自我的認知,是否適合此工作。
了解自己
與很多人的看法不同,所有的程序員都是不一樣的。了解您是哪一種類型的程序員對找到合適的工作是很關鍵的。盡管您也許能完成許多不同類型的編程任務,但您對這些任務的興趣卻是不同的。做并非真正喜歡的事情在短時間內是可以的,但對于需要長時間持續做的事情,您需要有興趣,對所做的事情感到興奮。最好的程序員對他們的工作充滿激情,對于興趣一般的事情,您是不會真正產生激情的。如果您不能確定自己是否喜歡,可以問自己以下問題:
1.您是一名架構師還是一名編碼人員?
每一個編碼職位都需要某方面的設計能力,但某些工作比其他工作更需要設計能力。如果您喜歡設計甚于喜歡編碼,軟件架構師的職位可能更有吸引力。也就是說,架構師的職位可能涉及許多與他人的互動,較少涉及編碼或根本不涉及編碼,盡管您需要很好地理解如何進行編碼才能有效地進行架構設計。除非您接受軟件架構方面的正規培訓,否則成為一名架構師的一般途徑就是先參加編碼工作,然后展示出您在設計和項目各部分集成方面的才能。
前面這些問題涉及您對哪一種類型的工作感興趣,下面的問題與編程無關,但也是需要考慮的。
2.您是一名系統程序員還是一名應用程序員?
系統程序員與保持計算機系統運行的代碼打交道,這些代碼包括框架、工具、編譯器、驅動程序、服務器等。另一些程序員是他們自己的主要聽眾,他們很少與非程序員打交道。應用程序開發者與此不同,他們所編寫的程序被非程序員用來完成其工作,他們與非技術人員的互動更為頻繁。
3.您喜歡編寫用戶界面嗎?
如果是這樣,而且如果您擁有這方面的技能,那就要恭喜自己的好運氣了。用戶界面設計是極為講究的工作,容易被批評,很難做好,特別是在要考慮國際化和易用性問題的時候。
4.您更喜歡開放源碼項目嗎?
絕大部分編程工作通常都涉及知識產權,封閉源代碼的項目,某些程序員是反對這一點的。現在有一些向更開放的軟件開發轉變的傾向,為像您這樣的人提供了更多的機會,可以參與開放源碼項目并同時獲得報酬。
5.您喜歡測試嗎?
測試也稱為品質保證,或縮寫為QA,常常遭到缺乏經驗的程序員的詆毀,但那些有經驗的程序員非常看重獨立測試的價值。好的測試人員很難找到。編寫工具和自動化的測試用例常常需要編程技能。
6.您善于除錯嗎?
如果您認為在自己的代碼中除錯已經是夠麻煩了,請想像一下替別人的代碼除錯是怎樣的感覺。這需要很強的分析能力和解決問題的能力。找到并消除缺陷可能是很有價值的,但肯定不是每個人都適合這項工作。
7.您想為小公司工作嗎?
薪水可能少一些,但隨著公司的發展和成功,從底層進入一個新公司肯定對將來有好處(可能會帶來相當大的報酬)。當然,不好的一面是大部分新的嘗試都會失敗,您可能在一兩年內失去這份工作。
8.您想為大公司工作嗎?
在大的公司中工作既有好的一面也有不利的一面。例如,大的公司通常能夠提供更大的工作穩定性,以及某種類型的職業發展途徑。它也可能擁有非技術人員知道的品牌。但在另一方面,您也可能對大公司中常常發生的繁文縟節、要求嚴格和公司內部斗爭感到窒息。
9.您希望參加長期的項目還是短期的項目?
某些程序員渴望改變,最多在每個項目上花上幾個月的時間。如果您喜歡短期的項目,而且不介意出差,那么成為一名咨詢公司的雇員可能比成為一名傳統公司的雇員要更好一些。重要的是您必須明白,這些問題沒有標準答案,沒有正確或錯誤的答題方式。但是,您在這些問題上對自己越誠實,就越有可能找到真正喜歡的編程工作。
10.您對管理有興趣嗎?
某些程序員的長期目標是成為一名經理,但另一些程序員對這個想法會產生恐懼。但如果您的目標是成為管理者,就需要培養自己的領導才能,并展示出您在處理技術問題的同時,也能夠管理軟件開發中“人”的問題。如果您的目標不是成為管理者,請尋找那些提供良好的技術職業發展途徑的公司,這樣在提升時就不需要被迫去管理人。
此文由傳邦人才網 整理轉載請注明出處。
第五篇:程序員的面試小技巧總結
程序員的面試小技巧總結
總結是把一定階段內的有關情況分析研究,做出有指導性結論的書面材料,它有助于我們尋找工作和事物發展的規律,從而掌握并運用這些規律,因此好好準備一份總結吧。總結怎么寫才不會流于形式呢?以下是小編收集整理的程序員的面試小技巧總結,歡迎閱讀與收藏。
在深入代碼之前,大多數面試官喜歡聊聊你的背景。他們想知道:
1、你對編碼認知。你是否知道如何編寫好代碼?
2、個人能力/領導力。你是否經歷過整個工作流程?你是否修復過并不怎么正確的東西,即使你并不需要這么去做?
3、溝通。和你交流技術問題是有用的還是痛苦的?
你應該至少說明以下中的一個:
1、你曾解決的一個有趣的技術問題
2、你曾克服的一個人際沖突
3、顯示領導力或個人能力的例子
4、你曾在以往項目中做出的貢獻
5、最喜歡的語言的一些瑣事,對這種語言你做了什么,以及你不喜歡它哪里
6、有關公司產品/業務的問題
7、關于該公司的工程策略(測試,Scrum,等等)
熱愛技術。表達你對你所做的一切感到驕傲,你對自己的選擇充滿自信,你對語言和工作流有著自己的看法。
溝通
涉及到編碼問題的時候,溝通是關鍵。一個在工作時需要幫助卻能和人正確溝通的求職者比那些能輕松解決問題的求職者甚至更好。
了解這是哪種問題。有兩種類型的問題:
1、編碼。面試官希望你能針對問題寫出簡潔高效的代碼。
2、閑聊。面試官希望能和你聊一聊。話題通常是(1)高水平的系統設計(“如何克隆Twitter?”)或(2)瑣事(“Javascript中的hoisting是什么意思?”)。有時候這些瑣事中也會引入“實際”問題,例如,“如何迅速排序整數列?好的,如果不是整數,是其他類型的呢…… ”。
如果你開始編寫代碼,并且面試官并不想多說廢話,只想盡快過渡到“實際”問題,那么如果你羅哩叭嗦太多的話,她可能會覺得厭煩。不妨直接問,“是不是為這個問題寫代碼?”
讓人感覺你有團隊精神。面試官想知道和你一起工作是什么感覺,會有什么問題,所以要讓他們看到你的團隊合作性。使用“我們”來代替“我”,例如,“如果那個時候我們做廣度優先搜索的話,就能及時/準時得到解決方案。”如果讓你選擇在紙上還是在白板上編碼的話,選白板。這樣,你就可以接近面試官,直接面對他提出的問題(而不是和她在桌子兩邊遙遙相望)。
把自己的想法大聲說出來。不是開玩笑,比如說:“我不知道這樣做是否有效——但請讓我試一試。”如果你不知道怎么辦,不知道這個問題該如何解決,那么就說一說你現在的想法。說一說你認為怎么做可能會有效。說一說你認為哪些會有用,以及為什么沒用的原因。這同樣適用于瑣碎的閑聊問題。當面試官要求你解釋Javascript閉包的時候,“這與范圍有關,不妨把它放到一個函數中”可能會讓你得到90%的分數。
不知為不知。如果正在談論的話題(例如,具體的語言事務,具體的瑣事,運行時分析)的確是你不曾涉獵的內容,那么不要不懂裝懂。相反,你可以直接說:“我不知道,但我猜$thing,因為……”,因為后面可以通過分析排除其他選項,還可以拿其他語言或問題做例子。
說話不要不經大腦。不要自信地將答案脫口而出。如果是正確的,那么你還是需要時間來考慮如何解釋,如果是錯的,那會顯得你沖動魯莽。你不是在和人比速度,而且你這么做更有可能因為打斷她的話或者妄下結論而惹惱她。
擺脫困境
有時候你會陷入僵局。放松。這并不意味著你已經失敗了。請記住,面試官通常更在乎的,是你能否巧妙地從幾個不同的角度去揭示問題,而不是一根筋走到底地堅持正確答案。
畫圖。不要浪費時間在腦袋里思考,可以畫到板上。畫出幾個不同的測試輸入。畫出你如何手動如愿得到所需的輸出。然后想想將你的方法轉換成代碼。
解決問題的簡單版本。不知道如何找到集合中的第4大條目?那么想想如何找到第1大條目,然后試試能否沿用這種方法。
寫一個簡潔低效的解決方案,然后對其進行優化。竭盡全力。盡一切可能的方法得到某種答案。
講講自己的思路。講一講你知道什么。講一講你認為什么可能工作以及為什么無效的'原因。你可能突然會意識到它實際上是可以工作的,或修改版本是有效的。也有可能,你會得到提示。
等待提示。不要用期待的眼光盯著面試官,但可以有短暫的“思考”時間——面試官或許已經決定給你個提示也說不定呢,等待她的提示以免打斷她。
考慮空間和運行時的界限。如果你不知道你是否可以優化解決方案,那么就說出來。例如:
“我必須至少看看所有的條目,我做不到時間復雜度比O(n)還好的了。”
“蠻力方法才能檢驗所有的可能性。”
“答案將包含n^2數據項,所以我必須至少花費N^2的時間。”
寫下你的思路想法
憑空地想很容易自我矛盾。把你的想法寫下來,然后再去考慮細節。
調用幫助函數,繼續前進。如果你不能或多或少地馬上想出如何實現算法,那就跳過它。寫一個命名合理的調用函數,例如:“this will do X”,然后繼續下一步驟。如果幫助函數非常微不足道,你甚至可以將它忽略。
不要擔心語法。不妨一笑而過。如果你非要考慮語法,那就還原到英語。只要向面試官說明稍后會回來整理即可。
預備足夠的空間。你可能后面會想要在代碼行之間添加代碼或筆記。從白板的頂部開始寫,并在每一行之間留一條空白。
最后寫一個重頭檢查的標志。不要擔心你寫的for循環是否應該有“”或“=”。在代碼的最后畫個勾選提醒自己最后再檢查一遍。先按自己的思路走。
使用描述性的變量名。想名字需要時間,但可以防止你忘記自己寫某段代碼的目的。使用names_to_phone_nums_map而不是nums。在名稱中說明類型。返回布爾值的函數應該以“is_ *”,保存列表的Vars應該以“s”結尾。標準化很有意義。
完成之后的整理
瀏覽解決方案,大聲地講,輸入一個例子。當程序運行時記錄下變量保存的值——如果你只是記在腦子里,不會讓你贏得任何加分。這有助于你發現bug和消除面試官的困惑。
尋找差一錯誤。你的for循環是不是應該使用“=”來代替“”?
測試邊緣情況。措施包括空集合,單項目集合或負數。加分點:提一提單元測試!
不要惹人厭煩。有的面試官可能并不在意這些整理步驟。如果你不確定,可以這樣說,“我通常會檢測一些邊緣情況——那么我們接下來是不是做這個呢?“
實踐
最后,運行實踐問題是沒有捷徑的。
好記性不如爛筆頭。對自己誠實。用筆寫可能一開始會讓你覺得別扭。但是如果你現在就能克服這個難題,那么當面試的時候,你就不會覺得笨拙和不順手了。
本文中的實踐問題只是提供了每個面試過程的線索要點,沒有真正的金科玉律,在真正面試時還需實際問題實際解決。最后,祝大家面試成功。