青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

編程技術面試的五大要點(zt)

文 / 何海濤

扎實的基礎知識、高質量的代碼、清晰的思路、優化代碼的能力、優秀的綜合能力是編程技術面試的五大要點。

找工作一直是一個熱門話題。要想找到心儀的工作,難免需要經過多輪面試。編程面試是程序員面試過程中最為重要的一個環節。如果能在編程面試的環節充分展示自己的能力,那么拿到中意的Offer就是水到渠成的事情。

我先后在歐特克、微軟和思科等公司任軟件工程師,多次接受他人的面試,同時也面試過很多人。總結面試與被面試的經驗,我發現盡管面試官的背景、性格各不相同,但都關注應聘者五種素質:扎實的基礎知識;能寫高質量的代碼;分析問題時思路清晰;能優化時間效率和空間效率;具備包括學習能力、溝通能力、發散思維能力等在內的綜合能力。

扎實的基礎知識

扎實的基本功是成為優秀程序員的前提條件,因此面試官首要關注應聘者的素質即是否具備扎實的基礎。通常基本功在編程面試環節體現在兩個方面:一是編程語言,二是數據結構和算法。

每個程序員至少要熟練掌握1~2門編程語言。面試官從應聘者在面試過程中寫的代碼以及跟進的提問中,能看出他編程語言掌握的熟練程度。以大部分公司面試要求的C++為例,如果函數需要傳入一個指針,面試官可能會問是否需要為該指針加上const,把const加在指針不同的位置有什么區別;如果寫的函數需要傳入的參數是一個復雜類型的實例,面試官可能會問傳入值參數或者引用參數有什么區別,什么時候需要為傳入的引用參數加上const。

數據結構通常是編程面試過程中考查的重點。在參加面試之前,應聘者需要熟練掌握鏈表、樹、棧、隊列以及哈希表等數據結構以及它們的操作。如果我們留心各大公司的面試題,就會發現鏈表和二叉樹相關的問題是很多面試官喜歡問的問題。這方面的問題看似簡單,但真正掌握也很不容易,特別適合在短短幾十分鐘的面試時間內檢驗應聘者的基本功。如果應聘者事先對鏈表的插入和刪除結點了如指掌,對二叉樹的各種遍歷方法的循環和遞歸寫法都爛熟于胸,那么真正到了面試時也就游刃有余了。

大部分公司對算法的要求都只是考查查找和排序。應聘者可以在了解各種查找和排序算法的基礎上,重點掌握二分查找、歸并排序和快速排序,因為很多面試題都只是這些算法的變體而已。比如把排序好的數組的前面若干個數字移到數組的后面,然后問怎樣在這個數組之中找到最小的數字。這道題其本質就是考查二分查找。少數對算法很重視的公司比如谷歌或者百度,還會要求應聘者熟練掌握動態規劃和貪婪算法。如果對這種類型的公司感興趣,那么應聘者在參加面試之前就應該加強對相關算法題目的練習。

高質量的代碼

只有注重質量的程序員,才能寫出魯棒穩定的大型軟件。在面試過程中,面試官總會格外關注邊界條件、特殊輸入等看似細枝末節但實質至關重要的地方,以此來分析應聘者是否注重代碼質量。很多時候,面試官發現應聘者寫出來的代碼只能完成最基本的功能,一旦輸入特殊的邊界條件參數就會錯誤百出甚至程序崩潰。

舉個很多應聘者都被問過的一個問題:寫一個函數,把字符串轉化成整數。這道題看似很簡單,絕大部分計算機專業的畢業生都能用十行以內的代碼實現最基本的功能。可是在實際面試過程中,十個應聘者中只有一個人能通過這道題的面試,因為絕大部分應聘者不能全面考慮到各種特殊輸入,比如輸入的字符串含中有非數字的符號、在字符串的開頭有正負號、字符串中有正負號但其位置不是在字符串的開頭。

除此之外,面試官還希望應聘者能考慮的邊界條件包括2147483647(0×7FFFFFFF,int能表示的最大正整數)和-2147483648(0×80000000,int能表示的最小負整數)。

除了邊界條件和特殊輸入考慮不足之外,面試官還有一個不能容忍的錯誤就是程序崩潰。面試時很多應聘者都會忘記對空指針做特殊處理而導致程序崩潰。如果面試時遇到鏈表、二叉樹相關的題目,應聘者一定要特別小心。因為這兩種題目對應的代碼里通常會有大量的指針操作,如果考慮不周到,就有可能對空指針進行操作而使程序崩潰。

比如這樣一道題:輸入一個鏈表的頭指針和一個無符號整數k,輸出該鏈表的倒數第k個結點。這個題目很多人都能想到用兩個指針來解決:第一個指針先在鏈表上移動k-1步,同時讓第一個指針和第二個指針在鏈表上移動。當第一個指針移動到尾指針時,第二個指針指向的就是倒數第k個結點。然而不是每個應聘者都能根據正確思路寫出完整的代碼。不少應聘者會忽略兩種可能:一是輸入的鏈表頭指針有可能是空指針;二是鏈表上結點的數目有可能少于k個。忽略這兩點的代碼都存在崩潰的可能,從而很難獲得面試官的青睞。

要想寫出魯棒的高質量代碼,需要在動手寫代碼之前想好測試用例。在寫代碼之前,先要想好各種邊界條件和特殊輸入作為測試用例。當代碼寫好之后,自己在心里用之前想好的測試用例來檢驗自己寫出的代碼,這樣就能在面試官之前發現并解決問題。以求鏈表的倒數第k個結點為例,如果事先想到了輸入頭指針為空指針和鏈表上的結點總數少于k這兩個測試用例,并且在寫好代碼之后在心里模擬代碼的運行過程,確保能夠通過這兩個測試用例的測試,那么這輪面試必然是能夠通過的。

清晰的思路

只有思路清晰,應聘者才有可能在面試過程中解決復雜的問題。有時面試官會有意出一些比較復雜的問題,以考查能否在短時間內形成清晰的思路并解決問題。對于確實很復雜的問題,面試官甚至不期待應聘者能在面試不到一個小時的時間里給出完整的答案,他更看重的可能還是應聘者是否有清晰的思路。面試官通常不會喜歡應聘者在沒有形成清晰思路之前就草率地開始寫代碼,結果寫出來的代碼容易邏輯混亂、錯誤百出。

應聘者可以用幾個簡單的方法幫助自己形成清晰的思路。

首先是舉幾個簡單的具體例子讓自己理解問題。當一眼看不出問題中隱藏的規律時,可以試著用1~2個具體的例子模擬操作的過程,這樣說不定就能通過具體的例子找到抽象的規律。

其次可以試著用圖形表示抽象的數據結構。像分析與鏈表、二叉樹相關的題目時,可以畫出它們的結構圖來簡化題目。

最后可以試著把復雜的問題分解成若干個簡單的子問題,再一一解決。很多基于遞歸的思路,包括分治法和動態規劃法,都是把復雜的問題分解成一個或者多個簡單的子問題。

比如把二叉搜索樹轉化排序的雙向鏈表這個問題就很復雜。碰到這個問題,不妨先畫出1~2個具體的二叉搜索樹及其對應的排序雙向鏈表,直觀地感受二叉搜索樹和排序的雙向鏈表有哪些聯系。如果一下子找不出轉換的規律,可以把整個二叉樹看出三部分:根結點、左子樹和右子樹。當遞歸地把轉換左右子樹這兩個子問題解決之后,再把轉換左右子樹得到的鏈表和根結點鏈接起來,整個問題也就解決了。

優化代碼的能力

優秀的程序員對時間和空間的消耗錙銖必較,他們很有激情不斷優化自己的代碼。當面試官出的題目有多種解法時,通常他會期待應聘者最終能夠找到最優解。這就要求應聘者在面試官提示還有更好的解法時,不能放棄思考,而應該努力尋找在時間消耗或者空間消耗上可以優化的地方。

要想優化時間或者空間效率,首先要知道如何分析效率。即使是同一個算法,用不同方法實現的效率可能也會大不相同,要能夠分析出算法及其代碼實現的效率。例如求斐波那契數列,很多人喜歡用遞歸公式f(n)=f(n-1)+f(n-2)求解。如果分析它的遞歸調用樹,就會發現有大量的計算是重復的,時間效率是以n的指數增加。但如果先求f(1)、f(2),再根據f(1)和f(2)求出f(3),接下來根據f(2)、f(3)求出f(4),并以此類推用一個循環求出f(n),這種計算方法的時間效率就只有O(n),比前面遞歸的方法要好很多。

要想優化代碼的效率,還要熟知各種數據結構的優缺點,并能選擇合適的數據結構解決問題。我們在數組中根據下標可以用O(1)完成查找。數組的這個特征可以用來實現簡單的哈希表解決很多面試題,比如在字符串中找到第一個只出現一次的字符。再比如為了找出n個數字中最小的k個數,需要一個數據容器來存儲k個數字。在這個數據容器中,我們希望能夠快速地找到最大值并且能快速地替換其中的數字。經過權衡,我們發現二叉樹比如最大堆或者紅黑樹都是實現這個數據容器的理想選擇。

要想優化代碼的效率,也要熟練掌握常用的算法。面試中最常用的算法是查找和排序。如果從頭到尾順序掃描一個數組,需要O(n)時間才能完成查找操作。但如果數組是排序的,應用二分查找算法就能把時間復雜度降低到O(logn)。排序算法除了能夠給數組排序之外,還能用來解決其他問題。比如快速排序算法中的Partition函數能夠用來在n個數里查找第k大的數字,從而可以用O(n)的時間在數組中找到出現次數超過數組長度一半的數字。如果面試題是一個求最大值或者最小值的題目,則可以嘗試用動態規劃法或者貪婪算法,比如用動態規劃法求出數組中連續子數組的最大和。

優秀的綜合能力

在面試過程中,應聘者除了展示自己的編程能力和技術功底之外,還需要展示自己的軟技能,諸如溝通能力和學習能力。隨著軟件系統的規模越來越大,軟件開發已經告別了單打獨斗的年代,程序員與他人的溝通變得越來越重要。在面試過程中,面試官會觀察應聘者在介紹項目經驗或者算法思路時是否觀點明確、邏輯清晰,并以此判斷他溝通能力的強弱。另外,面試官也會從應聘者說話的神態和語氣來判斷他是否有團隊合作的意識。通常面試官不會喜歡高傲或者輕視合作者的人。

IT行業知識更新很快,因此程序員只有具備很好的學習能力才能跟上知識更替的步伐。通常面試官有兩種辦法考查應聘者的學習能力。第一種方法是詢問應聘者最近在看什么書、從中學到了哪些新技術。面試官可以用這個問題了解應聘者的學習愿望和學習能力。第二種方法是拋出一個新概念,接下來他會觀察應聘者能不能在較短時間內理解這個新概念并解決相關的問題。比如面試官要求應聘者計算第1500個丑數。很多人都沒有聽說過丑數這個概念。這時面試官就會觀察應聘者面對丑數這個新概念,能不能經過提問、思考、再提問的過程,最終找出丑數的規律從而找到解決方案。

知識遷移能力是一種特殊的學習能力。如果我們能夠把已經掌握的知識遷移到其他領域,那么學習新技術或者解決新問題就會變得容易。面試官經常會先問一個簡單的問題,再問一個很復雜但和前面的簡單問題相關的問題。這時面試官期待應聘者能夠從簡單問題中得到啟示,從而找到解決復雜問題的竅門。比如面試官先要求應聘者寫一個函數求斐波那契數列,再問一個青蛙跳臺階的問題:一只青蛙一次可以跳上1級臺階,也可以跳上2級臺階,請問這只青蛙跳上n級的臺階總共有多少種跳法?應聘者如果具有較強的知識遷移能力,就能分析出青蛙跳臺階問題實質上只是斐波那契數列的一個應用。

還有不少面試官喜歡考查應聘者的抽象建模能力和發散思維能力。面試官從日常生活中提煉出問題,比如如何判斷5張撲克牌是不是順子,考查應聘者能不能把問題抽象出來用合理的數據結構表示,并找到其中的規律解決這個問題。面試官也可以限制應聘者不得使用常規方法,這要求應聘者具備創新精神,能夠打開思路從多角度去分析、解決問題。比如面試官要求應聘者不用加減乘除四則運算實現兩個整數的加法。此時面試官期待應聘者能夠打開思路,用位運算實現整數的加法。

小結

我們可以用下圖來總結出應聘者需要具備的素質。

未命名_副本

從上圖可以看出,應聘者在面試之前需要做足準備,對編程語言、數據結構和算法等基礎知識有全面的了解。面試時如果碰到簡單的問題應聘者一定要注重細節寫出完整、魯棒的代碼。如果碰到復雜的問題應聘者可以通過畫圖、舉具體例子分析和分解復雜問題等方法先理清思路再動手編程。除此之外,應聘者還應該不斷優化時間效率和空間效率,力求找到最優的解法。在面試過程中,應聘者還應該主動提問弄清楚題目的要求,表現自己的溝通能力。當面試官前后問的兩個問題有相關性時,盡量把解決前面問題的思路遷移到后面的問題中去,展示自己良好的學習能力。如果能做到這么幾點,那么應聘者順利通過面試獲得心儀的職位將是瓜熟蒂落的事情。

posted on 2011-10-15 10:44 zhengtao 閱讀(290) 評論(0)  編輯 收藏 引用 所屬分類: 其它


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产日韩美| 欧美激情一区二区三区在线视频 | 亚洲第一网站免费视频| 性欧美在线看片a免费观看| 午夜精品亚洲一区二区三区嫩草| 亚洲男女自偷自拍图片另类| 亚洲欧美另类中文字幕| 欧美一区二区精品| 久久久久久久久一区二区| 猛干欧美女孩| 欧美中文日韩| 欧美护士18xxxxhd| 亚洲精品偷拍| 亚洲欧美经典视频| 免费欧美日韩| 国产精品免费观看视频| 国产亚洲精品久久久久婷婷瑜伽| 在线观看日韩www视频免费 | 久久国产直播| 欧美成人xxx| 国产精品日韩专区| 亚洲人成7777| 久久精品日韩| 亚洲最黄网站| 美女脱光内衣内裤视频久久影院 | 一本大道久久a久久精品综合| 亚洲图片激情小说| 六十路精品视频| 国产伦精品一区二区三区视频孕妇 | 久久嫩草精品久久久久| 亚洲激情六月丁香| 欧美一级欧美一级在线播放| 欧美精品v国产精品v日韩精品 | 国产亚洲免费的视频看| 亚洲乱码国产乱码精品精天堂| 午夜精品久久久久久久久久久久| 欧美成人网在线| 欧美一区二区三区精品电影| 欧美久久99| 亚洲人成亚洲人成在线观看| 久久久人成影片一区二区三区| 亚洲欧洲日产国产网站| 久久午夜电影网| 国产日产欧产精品推荐色| 亚洲图片自拍偷拍| 亚洲日本中文| 欧美福利小视频| 亚洲丁香婷深爱综合| 久久手机精品视频| 欧美在线播放一区| 国产视频丨精品|在线观看| 亚洲综合欧美| 亚洲香蕉伊综合在人在线视看| 欧美精品日韩| 日韩视频亚洲视频| 国产亚洲毛片在线| 国产精品日日摸夜夜添夜夜av| 99国产精品视频免费观看| 久久夜色精品亚洲噜噜国产mv| 香蕉久久夜色精品国产| 国产亚洲欧洲一区高清在线观看| 性欧美大战久久久久久久免费观看 | 欧美一级一区| 国产精品揄拍500视频| 亚洲欧美在线磁力| 午夜精品久久久| 国产综合在线看| 久久人体大胆视频| 久久天堂精品| 亚洲人成网站在线观看播放| 亚洲日本中文字幕免费在线不卡| 欧美国产日韩免费| 亚洲欧洲综合另类| 一本综合精品| 六月丁香综合| 亚洲国产小视频在线观看| 久久久久www| 久久久久国产精品人| 亚洲福利在线看| 亚洲人体一区| 国产精品乱子久久久久| 欧美在线影院| 欧美一区二粉嫩精品国产一线天| 国产一区二区三区黄视频| 女主播福利一区| 欧美日韩国产一区| 久久国产一区| 欧美大片网址| 香蕉尹人综合在线观看| 久久精品免视看| 99视频精品全国免费| 亚洲一区在线播放| 亚洲国产日韩一级| 一本色道久久加勒比88综合| 国产精品一区二区三区乱码| 亚洲一级片在线观看| 亚洲欧美日韩中文播放| 亚洲福利视频在线| 亚洲图片欧洲图片av| 激情婷婷久久| 99re成人精品视频| 激情婷婷亚洲| 一区二区三区导航| 在线日本高清免费不卡| 日韩视频在线一区| 亚洲国产一区二区在线| 亚洲一区二区三区在线看| 在线精品视频免费观看| 99精品热视频| 亚洲国产精品精华液2区45| 中文av一区特黄| 亚洲激情成人| 欧美在线一级va免费观看| 亚洲在线成人精品| 99国产精品自拍| 午夜在线a亚洲v天堂网2018| 亚洲国产成人不卡| 亚洲免费在线| 日韩一级不卡| 久久亚洲国产精品日日av夜夜| 亚洲婷婷在线| 欧美日韩免费一区| 免费不卡视频| 国产精品视频午夜| 日韩视频一区二区在线观看 | 亚洲电影有码| 亚洲欧美在线网| 亚洲一区二区免费看| 欧美成人tv| 欧美国产日韩视频| 欧美视频精品一区| 最新成人av在线| 在线观看欧美| 久久久免费精品| 久久精品麻豆| 国产精品一区二区a| 99国产精品久久久| 亚洲狼人精品一区二区三区| 久久久久久久久久久成人| 久久久99精品免费观看不卡| 国产老肥熟一区二区三区| 亚洲一区二区高清视频| 亚洲综合色噜噜狠狠| 欧美亚洲成人网| 在线视频亚洲一区| 亚洲男人的天堂在线aⅴ视频| 欧美日韩精品免费在线观看视频| 亚洲日本中文| 欧美亚洲视频一区二区| 国产精品视频yy9099| 亚洲图片激情小说| 欧美一区二区精品在线| 国产日韩欧美在线看| 欧美在线免费一级片| 麻豆精品精华液| 亚洲欧洲精品成人久久奇米网| 欧美精品一区在线播放| 夜夜嗨av一区二区三区中文字幕| 亚洲欧美日韩精品久久亚洲区| 国产精品国色综合久久| 午夜在线视频一区二区区别| 久久人体大胆视频| 亚洲日本成人在线观看| 欧美日韩亚洲91| 亚洲欧美国产日韩天堂区| 美女国产一区| 亚洲精品乱码久久久久久蜜桃麻豆 | 蜜桃精品久久久久久久免费影院| 亚洲电影在线播放| 欧美日韩色婷婷| 欧美与欧洲交xxxx免费观看| 免费91麻豆精品国产自产在线观看| 亚洲国产美女精品久久久久∴| 欧美精品日韩一本| 亚洲欧美韩国| 亚洲二区在线视频| 欧美一区二区视频97| 午夜精品视频在线观看一区二区| 国产日韩欧美一区二区| 蘑菇福利视频一区播放| 亚洲午夜黄色| 亚洲国产高清一区| 午夜欧美视频| 最新日韩欧美| 国产亚洲欧美色| 欧美激情一区二区三区全黄| 一区二区三区国产精华| 麻豆精品视频在线观看| 亚洲欧美成人一区二区三区| 极品少妇一区二区三区精品视频| 欧美激情视频在线播放 | 老牛嫩草一区二区三区日本| 一区二区激情| 亚洲第一精品电影| 久久精品视频va| 亚洲一区二区三区四区在线观看| 在线观看亚洲视频啊啊啊啊| 国产精品入口| 欧美视频在线观看 亚洲欧| 欧美高清在线一区|