日韩 亚洲一区二_久久vs国产综合色大全_国产精品福利在线_欧美在线一级A片免费观看欧美在线_女同性毛片60分钟

您現(xiàn)在所在的位置:首頁(yè) >學(xué)員就業(yè) > 就業(yè)寶典 > 編程技術(shù)面試五大要點(diǎn),程式設(shè)計(jì)師必備技能你做到了嗎?

編程技術(shù)面試五大要點(diǎn),程式設(shè)計(jì)師必備技能你做到了嗎?

來(lái)源:奇酷教育 發(fā)表於:

  我們要想找到心儀的工作,難免需要經(jīng)過(guò)很多輪面試。編程面試是程式設(shè)計(jì)師面試過(guò)程中最為重要的一個(gè)環(huán)節(jié)。如果能在編程面試的環(huán)節(jié)充分展示自

  我們要想找到心儀的工作,難免需要經(jīng)過(guò)很多輪面試。編程面試是程式設(shè)計(jì)師面試過(guò)程中最為重要的一個(gè)環(huán)節(jié)。如果能在編程面試的環(huán)節(jié)充分展示自己的能力,那麼拿到中意的Offer就是水到渠成的事情。奇酷教育總結(jié)面試與被面試的經(jīng)驗(yàn),發(fā)現(xiàn)儘管面試官的背景、性格各不相同,但都關(guān)注應(yīng)聘者五種素質(zhì):(1)紮實(shí)的基礎(chǔ)知識、(2)能寫(xiě)高質(zhì)量的代碼、(3)分析問(wèn)題時(shí)思路清晰、(4)能優(yōu)化時(shí)間效率和空間效率、(5)具備包括學(xué)習(xí)能力、溝通能力、發(fā)散思維能力等在內(nèi)的綜合能力。

紮實(shí)的基礎(chǔ)知識
  紮實(shí)的基本功是成為優(yōu)秀程式設(shè)計(jì)師的前提條件,因此面試官首要關(guān)注應(yīng)聘者的素質(zhì)就是是否具備紮實(shí)的基礎(chǔ)。通常基本功在編程面試環(huán)節(jié)體現(xiàn)在兩(liǎng)個(gè)方面:一是程式語言,二是數(shù)據(jù)結(jié)構(gòu )和算法。
  每個(gè)程式設(shè)計(jì)師至少要熟練掌握一兩(liǎng)門(mén)程式語言。面試官從應(yīng)聘者在面試過(guò)程中寫(xiě)的代碼以及跟進(jìn)的提問(wèn)中,能看出他程式語言掌握的熟練程度。以大部分公司面試要求的C++舉個(gè)例子。如果函數(shù)需要傳入一個(gè)指針,面試官可能會(huì)問(wèn)是否需要為該指針加上const,把const加在指針不同的位置有什麼區(qū)別。如果寫(xiě)的函數(shù)需要傳入的參數(shù)是一個(gè)複雜類(lèi)型的實(shí)例,面試官可能會(huì)問(wèn)傳入值參數(shù)或者引用參數(shù)有什麼區(qū)別,什麼時(shí)候需要為傳入的引用參數(shù)加上const。
  數(shù)據(jù)結(jié)構(gòu )通常是編程面試過(guò)程中考察的重點(diǎn)。在參加面試之前,應(yīng)聘者需要熟練掌握鍊表、樹、棧、隊(duì)列以及哈希表等數(shù)據(jù)結(jié)構(gòu )以及它們的操作。如果我們留心各大公司的面試題,就會(huì)發(fā)現(xiàn)鍊表和二叉樹相關(guān)的問(wèn)題是很多面試官喜歡問(wèn)的問(wèn)題。這方面的問(wèn)題看似簡(jiǎn)單,但真正掌握也很不容易,特別適合在短短幾十分鐘的面試時(shí)間內(nèi)檢驗(yàn)應(yīng)聘者的基本功。如果應(yīng)聘者事先對(duì)鍊表的插入和刪除結(jié)點(diǎn)了如指掌,對(duì)二叉樹的各種遍歷方法的循環(huán)和遞歸寫(xiě)法都爛熟於胸,那麼真正到了面試的時(shí)候也就遊刃有餘了。
  大部分公司對(duì)算法的要求都只是考察查找和排序。應(yīng)聘者可以在了解各種查找和排序算法的基礎(chǔ)上,重點(diǎn)掌握二分查找、歸併排序和快速排序,因為很多面試題都只是這些算法的變體而已。比如把排序好的數(shù)組的前面若干個(gè)數(shù)字移到數(shù)組的後面,然後問(wèn)怎麼在這個(gè)數(shù)組之中找到最小的數(shù)字。這道題其本質(zhì)就是考查二分查找。少數(shù)對(duì)算法很重視的公司比如谷歌或者百度,還會(huì)要求應(yīng)聘者熟練掌握動(dòng)態(tài)規(guī)劃(huà)和貪婪算法。如果對(duì)這種類(lèi)型的公司感興趣,那麼應(yīng)聘者在參加面試之前就應(yīng)該加強(qiáng)對(duì)相關(guān)算法題目的練習(xí)。
高質(zhì)量的代碼
  只有注重質(zhì)量的程式設(shè)計(jì)師,才能寫(xiě)出魯棒穩(wěn)定的大型軟體。在面試過(guò)程中,面試官總會(huì)格外關(guān)注邊界條件、特殊輸(shū)入等看似細(xì)枝末節(jié)但實(shí)質(zhì)至關(guān)重要的地方,分析應(yīng)聘者是否注重代碼質(zhì)量。很多時(shí)候,面試官發(fā)現(xiàn)應(yīng)聘者寫(xiě)出來(lái)的代碼只能完成最基本的功能,一旦輸(shū)入特殊的邊界條件參數(shù)就會(huì)錯誤百出甚至程序崩潰。
  舉個(gè)很多應(yīng)聘者都被問(wèn)過(guò)的一個(gè)問(wèn)題:寫(xiě)一個(gè)函數(shù),把字符串轉(zhuǎn)化成整數(shù)。這道題看似很簡(jiǎn)單,絕大部分計(jì)算機(jī)專(zhuān)業(yè)的畢業(yè)生都能用十行以內(nèi)的代碼實(shí)現(xiàn)最基本的功能。可是在實(shí)際面試過(guò)程中,十個(gè)應(yīng)聘者中只有一個(gè)人能通過(guò)這道題的面試,因為絕大部分應(yīng)聘者不能全面各種特殊輸(shū)入,比如輸(shū)入的字符串含中有非數(shù)字的符號(hào)、在字符串的開(kāi)頭有正負(fù)號(hào)、字符串中有正負(fù)號(hào)但其位置不是在字符串的開(kāi)頭。除此之外,面試官還希望應(yīng)聘者能考慮的邊界條件包括2147483647(0x7FFFFFFF,int能表示的最大正整數(shù))和-2147483648(0x80000000,int能表示的最小負(fù)整數(shù))。
  除了邊界條件和特殊輸(shū)入考慮不足之外,面試官還有一個(gè)不能容忍的錯誤就是程序崩潰。面試的時(shí)候有很多應(yīng)聘者都會(huì)忘了對(duì)空指針做特殊處理而導(dǎo )致程序崩潰。如果面試的時(shí)候遇到鍊表、二叉樹相關(guān)的題目,應(yīng)聘者一定要特別小心。因為這兩(liǎng)種題目對(duì)應(yīng)的代碼裡通常會(huì)有大量的指針操作,如果考慮不周到,就有可能對(duì)空指針進(jìn)行操作而使程序崩潰。比如這樣的一道題:輸(shū)入一個(gè)鍊表的頭指針和一個(gè)無(wú)符號(hào)整數(shù)k,輸(shū)出該鍊表的倒數(shù)第k個(gè)結(jié)點(diǎn)。這個(gè)題目很多人都能想到用兩(liǎng)個(gè)指針來(lái)解決這個(gè)問(wèn)題:第一個(gè)指針先在鍊表上移動(dòng)k-1步,然後同時(shí)讓第一個(gè)指針和第二個(gè)指針在鍊表上移動(dòng)。當(dāng)第一個(gè)指針移動(dòng)到尾指針的時(shí)候,第二個(gè)指針指向的就是倒數(shù)第k個(gè)結(jié)點(diǎn)。然而不是每個(gè)應(yīng)聘者都能根據(jù)正確思路寫(xiě)出完整的代碼。不少應(yīng)聘者會(huì)忽略兩(liǎng)種可能:一是輸(shū)入的鍊表頭指針有可能是空指針;二是鍊表上結(jié)點(diǎn)的數(shù)目有可能少於k個(gè)。忽略這兩(liǎng)點(diǎn)的代碼都存在崩潰的可能,不是魯棒的程序,從而很也很難獲得面試官的青睞。
  要想寫(xiě)出魯棒的高質(zhì)量代碼,我們需要在動(dòng)手寫(xiě)代碼之前想好測(cè)試用例。在寫(xiě)代碼之前,我們先要想好各種邊界條件和特殊輸(shū)入作為測(cè)試用例。當(dāng)代碼寫(xiě)好之後,自己在心裡用之前想好的測(cè)試用例來(lái)檢驗(yàn)自己寫(xiě)出的代碼。這樣就能在面試官的前面發(fā)現(xiàn)並解決問(wèn)題。以求鍊表的倒數(shù)第k個(gè)結(jié)點(diǎn)為例,如果事先想到了輸(shū)入頭指針為空指針和鍊表上的結(jié)點(diǎn)總數(shù)少於k這兩(liǎng)個(gè)測(cè)試用例,並且在寫(xiě)好代碼之後在心裡模擬代碼的運(yùn)行過(guò)程,確保能夠通過(guò)這兩(liǎng)個(gè)測(cè)試用例的測(cè)試,那麼這輪面試必然是能夠通過(guò)的。
清晰的思路
  只有思路清晰,應(yīng)聘者才有可能在面試過(guò)程中解決複雜的問(wèn)題。有些時(shí)候面試官會(huì)有意出一些比較複雜的問(wèn)題,以考察能否在短時(shí)間內(nèi)形成清晰的思路並解決問(wèn)題。對(duì)於確實(shí)很複雜的問(wèn)題,面試官甚至不期待應(yīng)聘者能在面試不到一個(gè)小時(shí)的時(shí)間裡給出完整的答案,他更看重的可能還是應(yīng)聘者是否有清晰的思路。面試官通常不會(huì)喜歡應(yīng)聘者在沒有形成清晰思路之前就草率地開(kāi)始寫(xiě)代碼,結(jié)果寫(xiě)出來(lái)的代碼容易邏輯混亂錯誤百出。
  應(yīng)聘者可以用幾個(gè)簡(jiǎn)單的方法幫助自己形成清晰的思路。首先是舉幾個(gè)簡(jiǎn)單的具體例子讓自己理解問(wèn)題。當(dāng)我們一眼看不出問(wèn)題中隱藏的規(guī)律的時(shí)候,可以試著用一兩(liǎng)個(gè)具體的例子模擬操作的過(guò)程,這樣說(shuō)不定就能通過(guò)具體的例子找到抽象的規(guī)律。其次可以試著用圖形表示抽象的數(shù)據(jù)結(jié)構(gòu )。像分析與鍊表、二叉樹相關(guān)的題目,我們都可以畫出它們的結(jié)構(gòu )圖來(lái)簡(jiǎn)化題目。最後可以試著把複雜的問(wèn)題分解成若干個(gè)簡(jiǎn)單的子問(wèn)題,再一一解決。很多基於遞歸的思路,包括分治法和動(dòng)態(tài)規(guī)劃(huà)法,都是把複雜的問(wèn)題分解成一個(gè)或者多個(gè)簡(jiǎn)單的子問(wèn)題。
  比如把二叉搜索樹轉(zhuǎn)化排序的雙向鍊表這個(gè)問(wèn)題就很複雜。碰到這個(gè)問(wèn)題,我們不妨先畫出一兩(liǎng)個(gè)具體的二叉搜索樹及其對(duì)應(yīng)的排序雙向鍊表,直觀(guān)地感受二叉搜索樹和排序的雙向鍊表有哪些聯(lián)繫。如果一下子找不出轉(zhuǎn)換(huàn)的規(guī)律,我們可以把整個(gè)二叉樹看出三部分:根結(jié)點(diǎn)、左子樹和右子樹。當(dāng)我們遞歸地把轉(zhuǎn)換(huàn)左右子樹這兩(liǎng)個(gè)子問(wèn)題解決之後,再把轉(zhuǎn)換(huàn)左右子樹得到的鍊表和根結(jié)點(diǎn)連結(jié)起來(lái),整個(gè)問(wèn)題也就解決了。
優(yōu)化代碼的能力
  優(yōu)秀的程式設(shè)計(jì)師對(duì)時(shí)間和空間的消耗錙銖必較,他們很有激情不斷優(yōu)化自己的代碼。當(dāng)面試官出的題目有多種解法的時(shí)候,通常他會(huì)期待應(yīng)聘者最終能夠找到最優(yōu)解。這就要求應(yīng)聘者在面試官提示還有更好的解法的時(shí)候,不能放棄思考,而應(yīng)該努力尋找在時(shí)間消耗或者空間消耗上可以優(yōu)化的地方。
  要想優(yōu)化時(shí)間或者空間效率,首先要知道如何分析效率。即使是同一個(gè)算法,用不同方法實(shí)現(xiàn)的效率可能也會(huì)大不相同,我們要能夠分析出算法及其代碼實(shí)現(xiàn)的效率。例如求斐波那契數(shù)列,很多人喜歡用遞歸公式f(n)=f(n-1)+f(n-2)求解。如果分析它的遞歸調(diào)用樹,我們就會(huì)發(fā)現(xiàn)有大量的計(jì)算是重複的,時(shí)間效率是以n的指數(shù)增加。但如果我們先求f(1)、f(2),再根據(jù)f(1)和f(2)求出f(3),接下來(lái)根據(jù)f(2)、f(3)求出f(4),並以此類(lèi)推用一個(gè)循環(huán)求出f(n),這種計(jì)算方法的時(shí)間效率就只有O(n),比前面遞歸的方法要好很多。
  要想優(yōu)化代碼的效率,我們還要熟知各種數(shù)據(jù)結(jié)構(gòu )的優(yōu)缺點(diǎn),並能選擇合適的數(shù)據(jù)結(jié)構(gòu )解決問(wèn)題。我們在數(shù)組中根據(jù)下標(biāo)可以用O(1)完成查找。數(shù)組的這個(gè)特徵可以用來(lái)實(shí)現(xiàn)簡(jiǎn)單的哈希表解決很多面試題,比如在字符串中找到第一個(gè)只出現(xiàn)一次的字符。再比如為了找出n個(gè)數(shù)字中最小的k個(gè)數(shù),我們需要一個(gè)數(shù)據(jù)容器來(lái)存儲(chǔ)k個(gè)數(shù)字。在這個(gè)數(shù)據(jù)容器中我們希望能夠快速地找到最大值並且能快速地替換(huàn)其中的數(shù)字。經(jīng)過(guò)權(quán)衡,我們發(fā)現(xiàn)二叉樹比如最大堆或者紅黑樹都是實(shí)現(xiàn)這個(gè)數(shù)據(jù)容器的理想選擇。
  要想優(yōu)化代碼的效率,我們也要熟練掌握常用的算法。面試中最常用的算法是查找和排序。如果從頭到尾順序掃描一個(gè)數(shù)組,我們需要O(n)時(shí)間才能完成查找操作。但如果數(shù)組是排序的,應(yīng)用二分查找算法就能把時(shí)間複雜度降低到O(logn)。排序算法除了能夠給數(shù)組排序之外,還能用來(lái)解決其他問(wèn)題。比如快速排序算法中的Partition函數(shù)能夠用來(lái)在n個(gè)數(shù)裡查找第k大的數(shù)字,從而可以用O(n)的時(shí)間在數(shù)組中找到出現(xiàn)次數(shù)超過(guò)數(shù)組長(zhǎng)度一半的數(shù)字。如果面試題是一個(gè)求最大值或者最小值的題目,我們都可以嘗試用動(dòng)態(tài)規(guī)劃(huà)法或者貪婪算法。比如我們可以用動(dòng)態(tài)規(guī)劃(huà)法求出數(shù)組中連續(xù)子數(shù)組的最大和。
優(yōu)秀的綜合能力
  在面試過(guò)程中,應(yīng)聘者除了展示自己的編程能力和技術(shù)功底之外,還需要展示自己的軟技能,諸如溝通能力和學(xué)習(xí)能力。隨著軟體系統(tǒng)的規(guī)模越來(lái)越大,軟體開(kāi)發(fā)已經(jīng)告別了單打獨(dú)鬥的年代,程式設(shè)計(jì)師與他人的溝通變得越來(lái)越重要。在面試過(guò)程中,面試官會(huì)觀(guān)察應(yīng)聘者在介紹項(xiàng)目經(jīng)驗(yàn)或者算法思路時(shí)是否觀(guān)點(diǎn)明確、邏輯清晰,並以此判斷他溝通能力的強(qiáng)弱。另外,面試官也會(huì)從應(yīng)聘者說(shuō)話(huà)的神態(tài)和語氣來(lái)判斷他是否有團(tuán)隊(duì)合作的意識。通常面試官不會(huì)喜歡高傲或者輕視合作者的人。
  IT行業(yè)知識更新很快,因此程式設(shè)計(jì)師只有具備很好的學(xué)習(xí)能力才能跟上知識更替的步伐。通常面試官有兩(liǎng)種辦法考查應(yīng)聘者的學(xué)習(xí)能力。面試官的第一種方法是詢問(wèn)應(yīng)聘者最近在看什麼書(shū)、從中學(xué)到了哪些新技術(shù)。面試官可以用這個(gè)問(wèn)題了解應(yīng)聘者的學(xué)習(xí)願望和學(xué)習(xí)能力。面試官的第二種方法是拋出一個(gè)新概念,接下來(lái)他會(huì)觀(guān)察應(yīng)聘者能不能在較短時(shí)間內(nèi)理解這個(gè)新概念並解決相關(guān)的問(wèn)題。比如面試官要求應(yīng)聘者計(jì)算第1500個(gè)醜數(shù)。很多人都沒有聽說(shuō)過(guò)醜數(shù)這個(gè)概念。這個(gè)時(shí)候面試官就會(huì)觀(guān)察應(yīng)聘者面對(duì)醜數(shù)這個(gè)新概念時(shí),能不能經(jīng)過(guò)提問(wèn)、思考、再提問(wèn)的過(guò)程,最終找出醜數(shù)的規(guī)律從而找到解決方案。
  知識遷移能力是一種特殊的學(xué)習(xí)能力。如果我們能夠把已經(jīng)掌握的知識遷移到其他領(lǐng)域,那麼學(xué)習(xí)新技術(shù)或者解決新問(wèn)題就會(huì)變得容易。面試官經(jīng)常會(huì)先問(wèn)一個(gè)簡(jiǎn)單的問(wèn)題,再問(wèn)一個(gè)很複雜但和前面的簡(jiǎn)單問(wèn)題相關(guān)的問(wèn)題。這個(gè)時(shí)候面試官期待應(yīng)聘者能夠從簡(jiǎn)單問(wèn)題中得到啟示,從而找到解決複雜問(wèn)題的竅門(mén)。比如面試官先要求應(yīng)聘者寫(xiě)一個(gè)函數(shù)求斐波那契數(shù)列,再問(wèn)一個(gè)青蛙跳臺(tái)階的問(wèn)題:一隻青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2即臺(tái)階。請問(wèn)這隻青蛙跳上n級(jí)的臺(tái)階總共有多少種跳法?應(yīng)聘者如果具有較強(qiáng)的知識遷移能力,就能分析出青蛙跳臺(tái)階問(wèn)題實(shí)質(zhì)上只是斐波那契數(shù)列的一個(gè)應(yīng)用。
  還有不少面試官喜歡考查應(yīng)聘者的抽象建模能力和發(fā)散思維能力。面試官從日常生活中提煉出問(wèn)題,比如如何判斷5張撲克牌是不是順子,考查應(yīng)聘者能不能把問(wèn)題抽象出來(lái)用合理的數(shù)據(jù)結(jié)構(gòu )表示,並找到其中的規(guī)律解決這個(gè)問(wèn)題。面試官也可以限制應(yīng)聘者不得使用常規(guī)方法,這要求應(yīng)聘者具備創(chuàng)新精神,能夠打開(kāi)思路從多角度去分析、解決問(wèn)題。比如面試官要求應(yīng)聘者不用加減乘除四則運(yùn)算實(shí)現(xiàn)兩(liǎng)個(gè)整數(shù)的加法。此時(shí)面試官期待應(yīng)聘者能夠打開(kāi)思路,用位運(yùn)算實(shí)現(xiàn)整數(shù)的加法。