Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks

          作者 Jurgen Appelo譯者 李劍 發(fā)布于 2009年1月20日 上午2時(shí)2分

          1月13日,著名博客作者Jurgen Appelo寫了一篇博文:“軟件開發(fā)者面試百問”。該文甚受讀者歡迎,15日便登上了delicious,Popurls.com,Reddit的首頁。InfoQ中文站在得到作者許可之后,將其全文翻譯為中文,希望可以對(duì)國內(nèi)讀者有所助益。



          想雇到搞軟件開發(fā)的聰明人可不容易。萬一一不小心,就會(huì)搞到一堆低能大狒狒。我去年就碰到這種事了。你肯定不想這樣吧。聽我的,沒錯(cuò)。在樹上開站立會(huì)議門都沒有。

          問點(diǎn)有難度的問題能幫你把聰明人跟狒狒們分開。我決定把我自己整理出來的軟件開發(fā)者面試百問發(fā)出來,希望能幫到你們的忙。

          這個(gè)列表涵蓋了軟件工程知識(shí)體系中定義的大多數(shù)知識(shí)域。當(dāng)然,如果你只想找出類拔萃的程序員,便只需涉及結(jié)構(gòu)、算法、數(shù)據(jù)結(jié)構(gòu)、測(cè)試這幾個(gè)話題。如果想雇架構(gòu)師,也可以只考慮需求、功能設(shè)計(jì)、技術(shù)設(shè)計(jì)這些地方。

          不過不管你怎么做,都要牢記一點(diǎn):

          這里大多數(shù)問題的答案都沒有對(duì)錯(cuò)之分!

          你可以把我的這些問題作為引子,展開討論。例如下面有個(gè)問題是使用靜態(tài)方法或是單例的緣由。如果那個(gè)面試的就此展開長(zhǎng)篇大論,那他很有可能是個(gè)聰明能干的家伙!如果他一臉茫然的看著你,發(fā)出這種聲音,很明顯這就是只狒狒了。同樣,想知道一個(gè)數(shù)是不是2的乘方也有很多方法,不過要是面試的人想用mod運(yùn)算符,嗯……你知道我的意思吧。(你不知道也沒關(guān)系,來根香蕉?)

          需求

          1. 你能給出一些非功能性(或者質(zhì)量)需求的例子么?
          2. 如果客戶需要高性能、使用極其方便而又高度安全,你會(huì)給他什么建議?
          3. 你能給出一些用來描述需求的不同技術(shù)么?它們各自適用于什么場(chǎng)景?
          4. 需求跟蹤是什么意思?什么是向前追溯,什么是向后追溯?
          5. 你喜歡用什么工具跟蹤需求?
          6. 你怎么看待需求變化?它是好是壞?給出你的理由。
          7. 你怎樣研究需求,發(fā)現(xiàn)需求?有哪些資源可以用到?
          8. 你怎么給需求制定優(yōu)先級(jí)?有哪些技術(shù)?
          9. 在需求過程中,用戶、客戶、開發(fā)人員各自的職責(zé)是什么?
          10. 你怎么對(duì)待不完整或是令人費(fèi)解的需求?

          功能設(shè)計(jì)

          1. 在功能設(shè)計(jì)中有哪些隱喻?給出幾個(gè)成功的例子。
          2. 如果有些功能的執(zhí)行時(shí)間很長(zhǎng),怎么能讓用戶感覺不到太長(zhǎng)的等待?
          3. 如果用戶必須要在一個(gè)很小的區(qū)域內(nèi),從一個(gè)常常的列表中選擇多個(gè)條目,你會(huì)用什么控件?
          4. 有哪些方法可以保證數(shù)據(jù)項(xiàng)的完整?
          5. 建立系統(tǒng)原型有哪些技術(shù)?
          6. 應(yīng)用程序怎樣建立對(duì)用戶行為的預(yù)期?給出一些例子。
          7. 如何入手設(shè)計(jì)一組數(shù)量龐大而又復(fù)雜的特性,你能舉出一些設(shè)計(jì)思路嗎?
          8. 有一個(gè)列表,其中有10個(gè)元素,每個(gè)元素都有20個(gè)字段可以編輯,你怎樣設(shè)計(jì)這種情況?如果是1000個(gè)元素,每個(gè)元素有3個(gè)字段呢?
          9. 用不同的顏色對(duì)一段文本中的文字標(biāo)記高亮,這種做法有什么問題?
          10. Web環(huán)境和Windows環(huán)境各有些什么限制?

          技術(shù)設(shè)計(jì)

          1. 什么是低耦合和高聚合?封裝原則又是什么意思?
          2. 在Web應(yīng)用中,你怎樣避免幾個(gè)人編輯同一段數(shù)據(jù)所造成的沖突?
          3. 你知道設(shè)計(jì)模式嗎?你用過哪些設(shè)計(jì)模式?在什么場(chǎng)合下用的?
          4. 是否了解什么是無狀態(tài)的業(yè)務(wù)層?長(zhǎng)事務(wù)如何與之相適應(yīng)?
          5. 在搭建一個(gè)架構(gòu),或是技術(shù)設(shè)計(jì)時(shí),你用過幾種圖?
          6. 在N層架構(gòu)中都有哪些層?它們各自的職責(zé)是什么?
          7. 有哪些方法可以確保架構(gòu)中數(shù)據(jù)的正確和健壯?
          8. 面向?qū)ο笤O(shè)計(jì)和面向組件設(shè)計(jì)有哪些不同之處?
          9. 怎樣在數(shù)據(jù)庫中對(duì)用戶授權(quán)、用戶配置、權(quán)限管理這幾項(xiàng)功能建模?
          10. 怎樣按照等級(jí)制度給動(dòng)物王國(包括各種物種和各自的行為)建模?

          程序設(shè)計(jì)

          1. 你怎樣保證你的代碼可以處理各種錯(cuò)誤事件?
          2. 解釋一下什么是測(cè)試驅(qū)動(dòng)開發(fā),舉出極限編程中的一些原則。
          3. 看別人代碼的時(shí)候,你最關(guān)心什么地方?
          4. 什么時(shí)候使用抽象類,什么時(shí)候使用接口?
          5. 除了IDE以外,你還喜歡哪些必不可少的工具?
          6. 你怎么保證代碼執(zhí)行速度快,而又不出問題?
          7. 什么時(shí)候用多態(tài),什么時(shí)候用委派?
          8. 什么時(shí)候使用帶有靜態(tài)成員的類,什么時(shí)候使用單例?
          9. 你在代碼里面怎么提前處理需求的變化?給一些例子。
          10. 描述一下實(shí)現(xiàn)一段代碼的過程,從需求到最終交付。

          算法

          1. 怎樣知道一個(gè)數(shù)字是不是2的乘方?怎樣判斷一個(gè)數(shù)是不是奇數(shù)?
          2. 怎樣找出鏈表中間的元素?
          3. 怎樣改變10,000個(gè)靜態(tài)HTML頁面中所有電話號(hào)碼的格式?
          4. 舉出一個(gè)你所用過的遞歸的例子。
          5. 在散列表和排序后的列表中找一個(gè)元素,哪個(gè)查找速度最快?
          6. 不管是書、雜志還是網(wǎng)絡(luò),你從中所學(xué)到的最后一點(diǎn)算法知識(shí)是什么?
          7. 怎樣把字符串反轉(zhuǎn)?你能不用臨時(shí)的字符串么?
          8. 你愿意用什么類型的語言來編寫復(fù)雜的算法?
          9. 有一個(gè)數(shù)組,里面是從1到1,000,000的整數(shù),其中有一個(gè)數(shù)字出現(xiàn)了兩次,你怎么找出那個(gè)重復(fù)的數(shù)字?
          10. 你知道“旅行商問題(Traveling Salesman Problem)”么?

          數(shù)據(jù)結(jié)構(gòu)

          1. 怎樣在內(nèi)存中實(shí)現(xiàn)倫敦地鐵的結(jié)構(gòu)?
          2. 怎樣以最有效的方式在數(shù)據(jù)庫中存儲(chǔ)顏色值?
          3. 隊(duì)列和堆棧區(qū)別是什么?
          4. 用堆或者棧存儲(chǔ)數(shù)據(jù)的區(qū)別是什么?
          5. 怎樣在數(shù)據(jù)庫中存儲(chǔ)N維向量?
          6. 你傾向于用哪種類型的語言編寫復(fù)雜的數(shù)據(jù)結(jié)構(gòu)?
          7. 21的二進(jìn)制值是什么?十六制值呢?
          8. 不管是書、雜志還是網(wǎng)絡(luò),你從中所學(xué)到的最后一點(diǎn)數(shù)據(jù)結(jié)構(gòu)的知識(shí)是什么?
          9. 怎樣在XML文檔中存儲(chǔ)足球比賽結(jié)果(包括隊(duì)伍和比分)?
          10. 有哪些文本格式可以保存Unicode字符?

          測(cè)試

          1. 什么是回歸測(cè)試?怎樣知道新引入的變化沒有給現(xiàn)有的功能造成破壞?
          2. 如果業(yè)務(wù)層和數(shù)據(jù)層之間有依賴關(guān)系,你該怎么寫單元測(cè)試?
          3. 你用哪些工具測(cè)試代碼質(zhì)量?
          4. 在產(chǎn)品部署之后,你最常碰到的是什么類型的問題?
          5. 什么是代碼覆蓋率?有多少種代碼覆蓋率?
          6. 功能測(cè)試和探索性測(cè)試的區(qū)別是什么?你怎么對(duì)網(wǎng)站進(jìn)行測(cè)試?
          7. 測(cè)試套件、測(cè)試用例、測(cè)試計(jì)劃,這三者之間的區(qū)別是什么?你怎么組織測(cè)試?
          8. 要對(duì)電子商務(wù)網(wǎng)站做冒煙測(cè)試,你會(huì)做哪些類型的測(cè)試?
          9. 客戶在驗(yàn)收測(cè)試中會(huì)發(fā)現(xiàn)不滿意的東西,怎樣減少這種情況的發(fā)生?
          10. 你去年在測(cè)試和質(zhì)量保證方面學(xué)到了哪些東西?

          維護(hù)

          1. 你用哪些工具在維護(hù)階段對(duì)產(chǎn)品進(jìn)行監(jiān)控?
          2. 要想對(duì)一個(gè)正在產(chǎn)品環(huán)境中被使用的產(chǎn)品進(jìn)行升級(jí),該注意哪些重要事項(xiàng)?
          3. 如果在一個(gè)龐大的文件中有錯(cuò)誤,而代碼又無法逐步跟蹤,你怎么找出錯(cuò)誤?
          4. 你怎樣保證代碼中的變化不會(huì)影響產(chǎn)品的其他部分?
          5. 你怎樣為產(chǎn)品編寫技術(shù)文檔?
          6. 你用過哪些方式保證軟件產(chǎn)品容易維護(hù)?
          7. 怎樣在產(chǎn)品運(yùn)行的環(huán)境中進(jìn)行系統(tǒng)調(diào)試?
          8. 什么是負(fù)載均衡?負(fù)載均衡的方式有哪些種?
          9. 為什么在應(yīng)用程序的生命周期中,軟件維護(hù)費(fèi)用所占的份額最高?
          10. 再造工程(re-engineering)和逆向工程(reverse engineering)的區(qū)別是什么?

          配置管理

          1. 你知道配置管理中基線的含義么?怎樣把項(xiàng)目中某個(gè)重要的時(shí)刻凍結(jié)?
          2. 你一般會(huì)把哪些東西納入版本控制?
          3. 怎樣可以保證團(tuán)隊(duì)中每個(gè)人都知道誰改變了哪些東西?
          4. Tag和Branch的區(qū)別是什么?在什么情況下該使用tag,什么時(shí)候用branch?
          5. 怎樣管理技術(shù)文檔——如產(chǎn)品架構(gòu)文檔——的變化?
          6. 你用什么侗劇管理項(xiàng)目中所有數(shù)字信息的狀態(tài)?你最喜歡哪種工具?
          7. 如果客戶想要對(duì)一款已經(jīng)發(fā)布的產(chǎn)品做出變動(dòng),你怎么處理?
          8. 版本管理和發(fā)布管理有什么差異?
          9. 對(duì)文本文件的變化和二進(jìn)制文件的變化進(jìn)行管理,這二者有什么不同?
          10. 同時(shí)處理多個(gè)變更請(qǐng)求,或是同時(shí)進(jìn)行增量開發(fā)和維護(hù),這種事情你怎么看待?

          項(xiàng)目管理

          1. 范圍、時(shí)間、成本,這三項(xiàng)中哪些是可以由客戶控制的?
          2. 誰該對(duì)項(xiàng)目中所要付出的一切做出估算?誰有權(quán)設(shè)置最后期限?
          3. 減少交付的次數(shù),或是減少每個(gè)每個(gè)交付中的工作量,你喜歡哪種做法?
          4. 你喜歡用哪種圖來跟蹤項(xiàng)目進(jìn)度?
          5. 迭代和增量的區(qū)別在哪里?
          6. 試著解釋一下風(fēng)險(xiǎn)管理中用到的實(shí)踐。風(fēng)險(xiǎn)該如何管理?
          7. 你喜歡任務(wù)分解還是滾動(dòng)式計(jì)劃?
          8. 你需要哪些東西幫助你判斷項(xiàng)目是否符合時(shí)間要求,在預(yù)算范圍內(nèi)運(yùn)作?
          9. DSDM、Prince2、Scrum,這三者之間有哪些區(qū)別?
          10. 如果客戶想要的東西太多,你在范圍和時(shí)間上怎樣跟他達(dá)成一致呢?

          閱讀英文原文100 Interview Questions for Software Developers


          給InfoQ中文站投稿或者參與內(nèi)容翻譯工作,請(qǐng)郵件至editors@cn.infoq.com。也歡迎大家加入到InfoQ中文站用戶討論組中與我們的編輯和其他讀者朋友交流。

          posted on 2009-02-03 17:00 seal 閱讀(477) 評(píng)論(1)  編輯  收藏 所屬分類: 綜合

          評(píng)論

          # re: 軟件開發(fā)者面試百問(轉(zhuǎn)自-InfoQ) 2009-02-13 11:55 唐僧師徒
          唐僧師徒一行經(jīng)歷九九八十一難終于見到了如來佛求取真經(jīng)
          如來問:“你們帶U盤了么?”
          唐僧師徒。。。。
          如來又問:“移動(dòng)硬盤呢?”
          。。。。。
          如來繼續(xù)問:“IPOD也可以哇”
          悟空挖起耳朵來
          如來嘆了口氣:“那只有網(wǎng)上發(fā)給你們了,你們就原路回去吧  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 班戈县| 高邑县| 普兰县| 庆云县| 奉新县| 固阳县| 岳普湖县| 乌什县| 宜兰市| 顺义区| 舟山市| 桂平市| 南靖县| 山东省| 商水县| 常德市| 颍上县| 兴化市| 化德县| 公安县| 巍山| 黔南| 邓州市| 齐齐哈尔市| 曲阳县| 灵山县| 玉环县| 沙河市| 奉新县| 夏河县| 双峰县| 望都县| 娄底市| 柯坪县| 葫芦岛市| 政和县| 三穗县| 谢通门县| 屯留县| 玉环县| 江阴市|