一童太、面試的流程
1.1 面試官說
1.初級程序員米辐,偏重考察算法和數(shù)據(jù)結(jié)構(gòu),基本功书释;高級程序員翘贮,關(guān)注專業(yè)技能和項目經(jīng)驗。
2.面試前要做好準備爆惧,對公司近況狸页、項目情況有所了解,體現(xiàn)熱情扯再,要準備合適的問題
3.不要過于緊張芍耘,解決問題,首先要清除要解決的問題叔收,開始做一些整體的設(shè)計和規(guī)劃齿穗,寫完以后要自己review,并借助一些測試用例來走幾遍代碼饺律,找出可能的錯誤
1.2 面試形式
電話面試
- 電話面試窃页,可能搞突襲,在投出簡歷的一兩個星期內(nèi)复濒,要保證手機電池至少連續(xù)通話一個小時脖卖。
- 要盡量用形象化的語言把細節(jié)講清楚。
- 聽不清或者聽不懂巧颈,要大膽pardon
共享桌面遠程面試
- 看中編程習(xí)慣和調(diào)試能力
- 良好的編程習(xí)慣包括 1畦木、思考清楚再開始編碼 2、良好的代碼命名和縮進習(xí)慣 3砸泛、能夠單元測試
現(xiàn)場面試
- 規(guī)劃路徑十籍、估算出行時間
- 得體衣服
- 注意面試邀約里的面試流程,如果很長可帶提神飲料
- 準備幾個問題
1.3 面試環(huán)節(jié)
行為面試
5-10min唇礁,是一個warm up勾栗。
應(yīng)聘者可以利用這幾分鐘調(diào)整自己的情緒,進入面試的狀態(tài)盏筐。
- 自我介紹
最開始最有個自我介紹围俘,30min-1分鐘介紹自己的主要學(xué)習(xí)、工作經(jīng)歷即可。
面試官會對照簡歷去詳細了解他感興趣的項目界牡。 - 項目經(jīng)驗
應(yīng)聘者在準備簡歷的時候簿寂,需要根據(jù)STAR模型描述自己經(jīng)歷過的每一個項目
- Situation 項目的背景:項目的規(guī)模、開發(fā)軟件的功能宿亡、目標用戶
- Task 自己完成的任務(wù):注意如果只是參與了常遂,不要用“負責(zé)”二字。
- Action 為了完成任務(wù)挽荠,自己做了哪些工作烈钞,是怎么做的。這里可以做詳細介紹坤按。比如我要面開發(fā),要將基于什么工作在哪個平臺下應(yīng)用了哪些技術(shù)馒过。
- Result 自己的貢獻:最好能用數(shù)字說明臭脓,如果參與了功能開發(fā),可以說按時完成了多少功能腹忽;如果是優(yōu)化来累,可以說性能提高百分之多少
除此之外,常問的問題包括:
在項目中遇到的最大問題是什么窘奏,你是怎么解決的嘹锁。
從這個項目中你學(xué)到了什么
什么時候會和其他團隊成員有什么樣的沖突,你們是解決沖突的着裹。
tips:在面試時领猾,在介紹項目經(jīng)驗是,不必詳細描述項目的背景骇扇,而是要突出自己完成的工作和取得的成績摔竿。
- 應(yīng)聘者掌握的技能
要注重“了解”、“熟悉”少孝、“精通”的區(qū)別继低。
“了解”是對一個技術(shù)知識上過課或者看過書,但是沒有做過實際的項目稍走。一般不建立在簡歷中列出知識付錢了解過的技能袁翁,除非這個技術(shù)應(yīng)聘的職位的確需要。
簡歷中婿脸,我們描述的技能的掌握程度大部分應(yīng)該是“熟悉”粱胜。在實際項目中,使用一項技術(shù)有較長的時候盖淡,能夠通過查閱文檔獨立解決大部分問題年柠,我們就熟悉它了。對于畢業(yè)應(yīng)屆生而言,畢設(shè)所用到的技能冗恨,可以用“熟悉”答憔,對于已經(jīng)工作的,在項目開發(fā)過程中所用到的的技能掀抹,可以用“熟悉”
精通:使用一項技術(shù)得心用手虐拓,在項目開發(fā)中,當同學(xué)同事向我們請教這個領(lǐng)域的問題我們也有信心傲武、有能力去解決蓉驹,才可以說是“精通”。不要充大說精通揪利,本領(lǐng)大不到家會適得其反态兴。 - 為何跳槽
應(yīng)屆生可能用不到,也許會和問為什么不要去實習(xí)過的單位吧疟位。
避免提到老板太苛刻瞻润、同事難相處、加班太頻繁甜刻、工資太低绍撞。
筆者給我的答案四,現(xiàn)在的工作做了一段時間得院,已經(jīng)沒有太多激情了傻铣,因此需要尋求一份更有挑戰(zhàn)的工作。需要具體論述為什么有些眼圈現(xiàn)在的支委祥绞,以及面試的支委我為什么有興趣等非洲。
技術(shù)面試
技術(shù)面試,一般占據(jù)一小時的面試的40-50min就谜。
是面試的重頭戲怪蔑。
應(yīng)聘者的5種素質(zhì):
1. 基礎(chǔ)知識扎實全面
- 編程語言的熟練程度
- 數(shù)據(jù)結(jié)構(gòu),熟練掌握鏈表丧荐、樹缆瓣、棧、隊列虹统、哈希表等數(shù)據(jù)結(jié)構(gòu)和它們的操作弓坞。很多面試管喜歡問鏈表(插入、刪除)车荔、樹(遍歷)的問題渡冻。
- 查找和排序算法,重點掌握二分查找忧便、歸并排序族吻、快速排序。少數(shù)公司要求熟練掌握動態(tài)規(guī)劃和貪婪算法。
2. 能寫出正確超歌、完整砍艾、魯邦的高質(zhì)量代碼 - 面試官會格外關(guān)注邊界條件、特殊輸入(null巍举、空字符串)脆荷、錯誤處理等看似細枝末節(jié)但實則至關(guān)重要的地方,來考察應(yīng)聘者是否注重代碼質(zhì)量懊悯。
- 解決以上問題的最好辦法就是在動手寫diamante之前想好測試用例蜓谋,只有把各種可能的輸入實現(xiàn)都想好了,才能在寫代碼的時候把各種情況做相應(yīng)的處理炭分。
- 寫完代碼中桃焕,也不要立刻交給面試官檢查,而是要在心理默默地運行捧毛,當之前的輸入的測試用例是否都能得到合理的輸出覆旭。
- 簡單的問題,一定要注重細節(jié)岖妄,寫出完整、魯棒的代碼
3. 能思路清晰的分析寂祥、解決復(fù)雜問題
幾個簡單的方式幫助自己形成思路: - 舉例讓抽象問題具體化:舉幾個簡單的例子讓自己理解問題荐虐,說不準能發(fā)現(xiàn)抽象的規(guī)律
-畫圖讓抽象問題形象化: 試著用圖形表示抽象的數(shù)據(jù)結(jié)構(gòu) - 分解使復(fù)雜問題簡單化:試著把復(fù)雜的問題分解成若干簡單的子問題,再一一解決丸凭。許多遞歸的思路福扬,包括分治法和動態(tài)規(guī)劃都屬此類。
4. 能從時間惜犀、空間復(fù)雜度兩方面優(yōu)化算法效率 - 如何分析效率
- 熟悉各種數(shù)據(jù)結(jié)構(gòu)的優(yōu)缺點铛碑,選擇合適的數(shù)據(jù)結(jié)構(gòu)解決問題
- 熟練掌握常用的算法
5. 具備優(yōu)秀的溝通能力、學(xué)習(xí)能力虽界、發(fā)散思維能力等 - 在面試過程中汽烦,應(yīng)聘者還應(yīng)該主動提問,以弄清題目的要求莉御,表現(xiàn)自己的溝通能力撇吞。
- 考察學(xué)習(xí)能力會問:最近在看什么書、從中學(xué)習(xí)到什么新技術(shù)礁叔;拋出一個新概念牍颈,觀察應(yīng)聘者是否能在較短的時間內(nèi)理解這個新概念,并解決相關(guān)的問題琅关。(思考煮岁、提問、再思考)
- 知識遷移能力
面試官會現(xiàn)問題各簡單的問題,再問一個很復(fù)雜但是和前面簡單的問題相關(guān)的問題画机。他期望應(yīng)聘者從簡單問題中得到啟示冶伞。 - 抽象建模能力和發(fā)散思維能力
限制不得使用常規(guī)方法,考察創(chuàng)新能力
應(yīng)聘者提問
最后的5-10min色罚,至少準備1-2個問題碰缔,問的合適,是加分的好機會戳护。
不適合問的問題
- 和自己的職位沒有關(guān)系的問題
- 不要問薪水金抡,薪水是面試之后和HR談的
- 不要打聽面試結(jié)果
推薦問 - 與招聘的職位和項目相關(guān)的問題
問好這個問題首先需要對應(yīng)聘的職位或者項目背景有一定的了解。兩方面可以去了解:一是面試前做足功課腌且、到網(wǎng)上收集一些信息梗肝,做到對公司成立時間、主要業(yè)務(wù)铺董、職位要求都了然于胸巫击;二是面試官說過的話,不少面試官在面試之前都會簡單介紹與招聘職位相關(guān)的項目精续,其中會包含其他渠道無法得知的信息坝锰,比如項目進展情況,應(yīng)聘者可以從中找出一兩個點重付,然后提問
二顷级、面試需要的基礎(chǔ)知識
編程語言
面試編程語言通常有三個類型:
- 面試官直接詢問對某個語言的理解程度
- 面試官拿出事先準備好的代碼,讓應(yīng)聘者分析代碼的結(jié)果
3.要求應(yīng)聘者寫代碼定義一個類型或者實現(xiàn)類型中的成員函數(shù)
數(shù)據(jù)結(jié)構(gòu)
數(shù)組和字符串是兩個最基本的數(shù)據(jù)結(jié)構(gòu)
數(shù)組-簡單哈希表确垫,時間高效
解決空間效率不高的問題弓颈,動態(tài)數(shù)組 ArrayList鏈表和樹是面試中出現(xiàn)頻率最高的數(shù)據(jù)結(jié)構(gòu),要留意代碼的魯棒性
要熟練掌握樹的前序遍歷删掀、中序遍歷翔冀、后序遍歷、層序遍歷披泪、二叉搜索樹纤子、堆、紅黑樹款票。
棧是一個與遞歸緊密相關(guān)的數(shù)據(jù)解耦
隊列和廣度優(yōu)先算法遍歷相關(guān)
算法和數(shù)據(jù)結(jié)構(gòu)
重點掌握二分查找计福、歸并排序和快速排序。
遞歸和循環(huán):很多算法都可以用遞歸和循環(huán)兩種方式來實現(xiàn)徽职。遞歸的實現(xiàn)方式代碼會比較簡潔象颖,但是性能不如基于循環(huán)的實現(xiàn)方式(由于函數(shù)調(diào)用自身,而函數(shù)調(diào)用是有時間和空間消耗的姆钉;每一次函數(shù)調(diào)用说订,都要在內(nèi)存棧中分配空間以保存參數(shù)抄瓦、返回地址即臨時變量,而且往棧中壓入和彈出數(shù)據(jù)都需要時間陶冷。)钙姊。在面試的時候,可以根據(jù)題目的特點埂伦,甚至是與面試官進行討論來選擇煞额。
位運算是一種特殊的算法,總共有與沾谜、或膊毁、抑或、左移基跑、右移5種位運算婚温。
如果面試題要求在排序的數(shù)組中查找一個數(shù)字或者某個數(shù)字的統(tǒng)計次數(shù),都可以嘗試二分查找
二分查找的循環(huán)實現(xiàn)
int binarySearch(int[] nums, int target) {
int left = 0;
int right = nums.length - 1; // 注意
while(left <= right) {
int mid = (right + left) / 2;
if(nums[mid] == target)
return mid;
else if (nums[mid] < target)
left = mid + 1; // 注意
else if (nums[mid] > target)
right = mid - 1; // 注意
}
return -1;
}
二分查找的遞歸實現(xiàn)
public static int search(int[] nums, int target) {
return search(nums,0,nums.length-1,target);
}
public static int search(int[] nums, int start, int end, int target) {
int min = start;
int max = end;
int mid = (min + max) / 2;
while (min < max) {
if (nums[mid] == target) {
return mid;
}else if(nums[mid]<target){
return search(nums,mid+1,max,target);
}else {
return search(nums,min,mid-1,target);
}
}
return -1;
}
哈希表和二叉排序樹的考察重點在于數(shù)據(jù)結(jié)構(gòu)而不是算法
- 哈希表的最主要優(yōu)點是我們利用他查找數(shù)據(jù)O(1)的時間復(fù)雜度媳否,是最高效率的查找方式栅螟,缺點在于需要額外的空間。
- 二叉排序樹算法對應(yīng)的數(shù)據(jù)結(jié)構(gòu)是二叉搜索書篱竭。
- 關(guān)于排序力图,面試官會要求應(yīng)聘者比較插入排序、冒泡排序掺逼、歸并排序搪哪、快速排序等不同算法的優(yōu)勢,要求我們能從額外空間消耗坪圾、平均時間復(fù)雜度、最差時間復(fù)雜度等方面去比較
三惑朦、高質(zhì)量的代碼
3.1 代碼的規(guī)范性
規(guī)范代碼書寫清晰
規(guī)范的代碼布局清晰
規(guī)范的代碼命名
3.2 代碼的完整性
在編碼之前兽泄,要先考慮測試用例:普通功能測試的測試用例、邊界值的測試用例漾月、各種可能出錯的測試用例
有三種錯誤處理方式:
- 返回值:把錯誤信息傳遞給函數(shù)調(diào)用者病梢。缺點是不能發(fā)變得使用計算結(jié)果
- 全局變量:設(shè)定一個全局變量,如果運行出錯梁肿,則設(shè)置這個全局變量蜓陌。缺點是,在調(diào)用出錯的時候忘記做相應(yīng)的錯誤處理吩蔑,容易留下隱患
-
異常:運行出錯钮热,則拋出異常。優(yōu)點是邏輯清晰明了烛芬,缺點是有些語言不支持異常隧期。
注意飒责,由于計算機表示小數(shù)(包括float和double型的小數(shù))都有誤差,所以不能直接用==判斷兩個小數(shù)是否相同仆潮。應(yīng)當:如果兩個小數(shù)的差值很小宏蛉,就可以認為他們是相等的。
細節(jié):右移運算符代替除以2性置;左移代替乘以2拾并;a&0x1代替區(qū)域。位運算比乘除法及求余操作效率高很多鹏浅。
四嗅义、面試中的各項能力
1. 溝通能力
- 無論是介紹項目經(jīng)驗還是介紹解題思路的時候,都需要邏輯清晰明了篡石,語言詳略得當芥喇,重點突出,觀點明確凰萨。
- 知之為知之继控,不知為不知,對于不清楚的知識點胖眷,要勇敢承認武通,不要不懂裝懂
- 外企,要注意提高自己的英文交流能力珊搀。
2.學(xué)習(xí)能力
兩種方式考察應(yīng)聘者的學(xué)習(xí)能力冶忱。
第一種方法是詢問應(yīng)聘者最近在看什么書或者在做什么項目,從中學(xué)習(xí)到了什么新技術(shù)境析。---從而了解其學(xué)習(xí)的愿望和學(xué)習(xí)能力囚枪。
第二種時拋出一個新概念,看應(yīng)聘者能不能在較短時間內(nèi)理解這個新概念并解決相關(guān)的問題劳淆。面試官期待應(yīng)聘者能夠通過思考链沼、提問、再思考的過程沛鸵,理解它們并最終解決問題括勺。