程序員都會(huì)碰到的三個(gè)面試題
如果你只想獲取一些面試準(zhǔn)備經(jīng)驗(yàn),那么你可以直接跳到文章的最后部分。
對(duì)于算法面試問題是否有效一直飽受爭議。然而,代碼編寫問題有時(shí)候能夠很好篩選人才。在我們的例子中:
1. 這些問題是“CS101”水平的;
2. 我們相信一個(gè)優(yōu)秀的開發(fā)者需要能夠做出好的決定,并且這種好的決
定是基于對(duì)有多少個(gè)復(fù)雜系統(tǒng)在交互的深刻理解上。如果一個(gè)開發(fā)者不能反轉(zhuǎn)一個(gè)字符串,那么他們又怎么可能理解大型客戶端面臨軟件的性能含義?
誠然,參與我們CS02課程的中學(xué)生都很聰明(其中一個(gè)還是美國計(jì)算機(jī)奧林匹克對(duì)隊(duì)員)。然而,在對(duì)大型軟件公司(如微軟、亞馬遜、谷歌等)的多年采訪后,我們發(fā)現(xiàn)專業(yè)的開發(fā)者們并沒有比我們的職業(yè)顧問人員牛多少。
問題如下:
1. 求從10到100中能被3或5整除的數(shù)的和
int sum = 0;
for(int i = 10; i <= 100; i++) if( i % 3 == 0 || i % 5 == 0) sum += i;
System.out.println(sum);
2. 將一個(gè)字符串逆序,不要使用反轉(zhuǎn)函數(shù)
String message = "he saw a racecar";
StringBuilder rev = new StringBuilder();
for(int i = message.length()-1; i >= 0; i--) rev.append(message.charAt(i));
System.out.println(rev.toString());
3. 反轉(zhuǎn)一個(gè)棧
import java.util.*;
public class MyProgram extends com.ktbyte.submit.Coder {
public static void main(String[] args) {
Stack items = new Stack();
items.push("he"); //he is at the bottom of the stack
items.push("saw");
items.push("a");
items.push("racecar");
reverseStack(items); //now he is at the top
//print in order pushed:
while(items.size()>0) System.out.println(items.pop());
}
public static void reverseStack(Stack stack) {
Queue rev = new LinkedList();
while(stack.size()>0) rev.offer(stack.pop());
while(rev.size()>0) stack.push(rev.poll());
}
}
問題解決的步驟和錯(cuò)誤:
1. 解析問題,手工“解決”
(1)對(duì)于孩子和成年人而言,這一步對(duì)前者來說更困難
(2)然而,如果要求誤解了問題的學(xué)生來重讀這個(gè)問題,孩子們的表現(xiàn)會(huì)超過成年人
2. 想出一個(gè)偽代碼算法
(1)在這一步,學(xué)生的表現(xiàn)比成年人要好。
(2)讓人震驚的是,很多成年人不知道如何用他們偏好的編程語言從一個(gè)字符串中抽取一個(gè)字符。
3. 將算法轉(zhuǎn)換為代碼
(1)我們有一些C++程序員,他們不知道方括號(hào)以及一些C程序員,他們采用指針運(yùn)算,但是卻失敗了。
(2)更讓人吃驚的是,當(dāng)他們?cè)试S查閱java API 文檔 或者使用參考書,很多成年人無法找到合適的文檔來幫助解決問題。
(3)的確,一些中學(xué)生已經(jīng)忘了如何使用;蛘邔(shí)例化一個(gè)隊(duì)列,但是,所有人都能夠在適當(dāng)?shù)臅r(shí)間內(nèi)通過查閱找到解決辦法。
(4)會(huì)寫代碼的成年人(曾經(jīng)會(huì))經(jīng)常會(huì)超過時(shí)間限制。
有很多糟糕的代碼編寫者,即便你也是其中一個(gè),也別不要害怕
下面的方法并不是為了讓求職者參加一個(gè)“完整的堆棧訓(xùn)練營”。相反,如果你是一個(gè)正在努力和“編程謎題”做斗爭的成年人:
1. 不停練習(xí),直到你能快速且正確地寫出小的代碼片段。沒有任何理由用自己喜歡的語言寫不出一個(gè)雙循環(huán)。找一些帶有例子的小的代碼智力題,你能在一分鐘以內(nèi)理解這些問題。對(duì)這類問題做成百上千遍的練習(xí)(不僅僅是幾十遍,切記!)。
2. 為課本上的每個(gè)算法寫一個(gè)用例列表。一個(gè)共同的錯(cuò)誤就是僅僅記住計(jì)算復(fù)雜度表。但是看一些算法的'使用例子,例如 A*搜索在哪些地方使用,這比學(xué)習(xí)代碼本身要有用的多。
3. 至少做一個(gè)能逼迫你使用與工作相關(guān)的接口/用例的大型項(xiàng)目。語言通常不是很重要,而且獨(dú)自寫一個(gè)大型工程能夠強(qiáng)迫你去學(xué)新的設(shè)計(jì)模式以及遠(yuǎn)離遺留代碼維護(hù)。代碼面試是智利測試。所以它們很少關(guān)注具體的體系。
4. 讓自己接觸更優(yōu)秀的程序員。隨著 CS 崗位的快速增長,應(yīng)對(duì)“檸檬市場”的當(dāng)前解決辦法就是技術(shù)面試。但是同樣也有其他的方式來反映被面試者的信息。例如,對(duì)熱點(diǎn)話題、博客、技術(shù)的知識(shí)可以反映出對(duì)重要問題的意識(shí)。類似地,對(duì)恐怖故事采用幽默的代碼書寫方式,可以反映出經(jīng)驗(yàn)和處理新問題的能力。幸運(yùn)的是,在線代碼編寫社區(qū)隨處可見,所以唯一地障礙就是是否肯花時(shí)間和保持謙虛。
編注:市場上產(chǎn)品質(zhì)量等級(jí)不同,質(zhì)量的差異與不確定存在于很多市場,而買賣雙方的信息不對(duì)稱,產(chǎn)品的賣方對(duì)產(chǎn)品的質(zhì)量擁有比買方更多的信息,這種信息不對(duì)稱情況下的市場可能導(dǎo)致某市場萎縮甚至消失,也就是所謂的檸檬市場。
原文出處:KTByte
編譯:伯樂在線 – 黃詩友
1. 在這個(gè)信息爆炸的時(shí)代,人們已然被大量、快速并且簡短的信息所包圍。然而,我們相信:過多“快餐”式的閱讀只會(huì)令人“虛胖”,缺乏實(shí)質(zhì)的內(nèi)涵。伯樂在線博客團(tuán)隊(duì)正試圖以我們微薄的力量,把優(yōu)秀的原創(chuàng)/譯文分享給讀者,為“快餐”添加一些“營養(yǎng)”元素。
http://fnhaliao.com/【程序員都會(huì)碰到的三個(gè)面試題】相關(guān)文章:
程序員面試題收集整理報(bào)告10-24
三個(gè)特點(diǎn)帶你認(rèn)識(shí)基層崗位常見面試題03-30
美國碩士留學(xué)申請(qǐng)容易碰到的問題有哪些12-03
離婚后的女人都會(huì)要什么04-04
護(hù)士的面試題09-15
深圳海關(guān)的面試題04-12
企業(yè)計(jì)劃的面試題04-11
群碩的面試題04-11
谷歌的面試題目04-11
知名IT企的面試題04-11