@[C++|面試|數(shù)據(jù)結(jié)構(gòu)|算法]
高質(zhì)量的代碼
代碼的規(guī)范性
- 書寫清晰
- 布局清晰
- 命名合理
代碼的完整性
- 完成基本功能
- 考慮邊界條件
- 做好錯(cuò)誤處理
代碼的魯棒性
- 采取防御式編程
- 處理無(wú)效的輸入
優(yōu)化時(shí)間和空間效率
編程面試的時(shí)候,面試官通常對(duì)時(shí)間復(fù)雜度和空間復(fù)雜度都會(huì)有要求,并且一般情況下面試官更加關(guān)注時(shí)間復(fù)雜度。
降低時(shí)間復(fù)雜度的方法:
- 改用更加高效的算法跪帝,如聯(lián)想快速排序中的Partition璧函,采用動(dòng)態(tài)規(guī)劃等算法
- 用空間換取時(shí)間宇色,經(jīng)常通過(guò)輔助內(nèi)存和簡(jiǎn)單的哈希表驱犹,實(shí)現(xiàn)利用較小的空間的消耗提高時(shí)間效率
當(dāng)然匹厘,也不是所有情況下屯蹦,以空間換取時(shí)間都是可行的
- 如果輔助空間消耗的太多维哈,可能得不償失
- 如果是在嵌入式開(kāi)發(fā)等對(duì)空間要求較高的情況下盯漂,也要格外注意空間消耗
解決面試題的思路
畫圖
圖形化能使抽象的問(wèn)題形象化。當(dāng)面試題涉及鏈表笨农、二叉樹(shù)等數(shù)據(jù)結(jié)構(gòu)時(shí)就缆,如果在紙上畫幾張草圖,題目中隱藏的規(guī)律就有可能變得很直觀谒亦。
舉列
一兩個(gè)例子能使抽象的問(wèn)題具體化竭宰。很多與算法相關(guān)的問(wèn)題都很抽象,未必一眼就能看出它們的規(guī)律份招。這個(gè)時(shí)候我們不妨舉幾個(gè)例子切揭,一步一步模擬運(yùn)行的過(guò)程,說(shuō)不定就能發(fā)現(xiàn)其中的規(guī)律锁摔,從而找到解決問(wèn)題的竅門廓旬。
分解
把復(fù)雜的問(wèn)題分解成若干個(gè)小問(wèn)題,是解決很多復(fù)雜問(wèn)題的有效方法谐腰。如果我們遇到的問(wèn)題很大孕豹,可以嘗試先把大問(wèn)題分解成小的問(wèn)題,然后遞歸地解決這些小問(wèn)題十气。分治法励背、動(dòng)態(tài)規(guī)劃等方法都是應(yīng)用分解復(fù)雜問(wèn)題的思路。
面試中的各項(xiàng)能力
“應(yīng)聘者會(huì)被問(wèn)及一些需求不是很明確的問(wèn)題砸西,解決這些問(wèn)題需要應(yīng)聘者和面試官進(jìn)行溝通叶眉,以及在講解思路和代碼的過(guò)程中與需要和面試官交流互動(dòng)。溝通及學(xué)習(xí)能力是面試成績(jī)中關(guān)鍵的考察點(diǎn)芹枷⌒聘恚” ——堯敏(淘寶,資深經(jīng)理)
應(yīng)聘者的綜合素質(zhì)
- 編程能力
- 溝通能力
- 學(xué)習(xí)能力
- 知識(shí)遷移能力
- 發(fā)散思維能力
- 抽象建模能力
- ...
溝通能力和學(xué)習(xí)能力
隨著軟件鸳慈、系統(tǒng)功能越來(lái)越復(fù)雜饱溢,開(kāi)發(fā)團(tuán)隊(duì)的規(guī)模越來(lái)越大,開(kāi)發(fā)者蝶涩、測(cè)試者和項(xiàng)目經(jīng)理的溝通交流變得越來(lái)越重要理朋。因此在面試過(guò)程中絮识,面試官也越來(lái)越看重溝通能力绿聘,因此也常常在面試的過(guò)程中,面試題描述比較含糊次舌,從而希望應(yīng)聘者能夠主動(dòng)溝通熄攘,充分理解題意,有效表達(dá)自己的想法和見(jiàn)解彼念。
而對(duì)于學(xué)習(xí)能力挪圾,由于軟件技術(shù)發(fā)展日新月異浅萧,只有具備很強(qiáng)的學(xué)習(xí)能力和學(xué)習(xí)欲望的人,才能不斷完善自己的知識(shí)結(jié)構(gòu)哲思,不斷學(xué)習(xí)新的現(xiàn)金技術(shù)洼畅,讓自己職業(yè)生涯保持長(zhǎng)久的生命力。
知識(shí)遷移能力
知識(shí)遷移能力的通俗說(shuō)法就是“舉一反三”的能力棚赔。能夠根據(jù)已知的知識(shí)來(lái)理解新的概念帝簇,以及根據(jù)解決一道題的思路,從而去解決一類問(wèn)題靠益。如面試題求解二叉樹(shù)的深度:
int TreeDepth(BinaryTreeNode* pRoot)
{
if(pRoot == NULL)
return 0;
int nLeft = TreeDepth(pRoot->m_pLeft);
int nRight = TreeDepth(pRoot->m_pRight);
return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}
知識(shí)遷移能力能夠幫助我們輕松地解決很多問(wèn)題丧肴。有些面試官在提問(wèn)難題之前,會(huì)問(wèn)一道相關(guān)但比較簡(jiǎn)單的題目胧后,也是希望我們能夠從解決問(wèn)題的過(guò)程中受到啟發(fā)芋浮,最總解決較為復(fù)雜的問(wèn)題。
抽象建模能力
- 建模的第一步就是選擇合理的數(shù)據(jù)結(jié)構(gòu)來(lái)表述問(wèn)題壳快。實(shí)際生產(chǎn)生活中的問(wèn)題千變?nèi)f化纸巷,而常用的數(shù)據(jù)結(jié)構(gòu)卻只有有限的幾種。
- 建模的第二部就是分析模型中的內(nèi)在規(guī)律眶痰,并用編程語(yǔ)言表述這種規(guī)律何暇。
發(fā)散思維能力
- 發(fā)散思維的特點(diǎn)是思維活動(dòng)的多向性和變通性,也就是我們?cè)谒伎紗?wèn)題時(shí)注重運(yùn)用多思路凛驮、多方案裆站、多途徑地解決問(wèn)題。
- 通過(guò)考查發(fā)散思維能力黔夭,面試官能夠
- 了解應(yīng)聘者探索新思路的激情
- 了解應(yīng)聘者的靈活性和變通性
- 了解面試者知識(shí)面的廣度和深度
備注:文中主要內(nèi)容參考《劍指Offer》——何海濤宏胯,書中有很多編程實(shí)例,就不在這里贅述了本姥,推薦急于找工作的同學(xué)和感興趣的人閱讀