想僱到搞軟件開發的聰明人可不容易。萬一一不當心,就會搞到一堆低能大狒狒。我去年就碰到這種事了。你確定不想這樣吧。聽個人,沒錯。在樹上開站立會議門都沒有。程序員
問點有難度的問題能幫你把聰明人跟狒狒們分開。我決定把我本身整理出來的軟件開發者面試百問發出來,但願能幫到大家的忙。面試
這個列表涵蓋了軟件開發知識體系中定義的大多數知識域。固然,若是你只想找出類拔萃的程序員,便只需涉及結構、算法、數據結構、測試這幾個話題。若是想僱架構師,也能夠只考慮需求、功能設計、技術設計這些地方。算法
不過無論你怎麼作,都要牢記一點:數據庫
這裏大多數問題的答案都沒有對錯之分!編程
你能夠把個人這些問題做爲引子,展開討論。例以下面有個問題是使用靜態方法或是單例的原因。若是那個面試的就此展開長篇大論,那他頗有多是個聰明能幹的傢伙!若是他一臉茫然的看着你,發出這種聲音,很明顯這就是隻狒狒了。一樣,想知道一個數是否是2的乘方也有不少方法,不過要是面試的人想用mod運算符,嗯……你知道個人意思吧。(你不知道也不要緊,來根香蕉?)設計模式
需求數組
- 你能給出一些非功能性(或者質量)需求的例子麼?
- 若是客戶須要高性能、使用極其方便而又高度安全,你會給他什麼建議?
- 你能給出一些用來描述需求的不一樣技術麼?它們各自適用於什麼場景?
- 需求跟蹤是什麼意思?什麼是向前追溯,什麼是向後追溯?
- 你喜歡用什麼工具跟蹤需求?
- 你怎麼看待需求變化?它是好是壞?給出你的理由。
- 你怎樣研究需求,發現需求?有哪些資源能夠用到?
- 你怎麼給需求制定優先級?有哪些技術?
- 在需求過程當中,用戶、客戶、開發人員各自的職責是什麼?
- 你怎麼對待不完整或是使人費解的需求?
功能設計安全
- 在功能設計中有哪些隱喻?給出幾個成功的例子。
- 若是有些功能的執行時間很長,怎麼能讓用戶感受不到太長的等待?
- 若是用戶必需要在一個很小的區域內,從一個經常的列表中選擇多個條目,你會用什麼控件?
- 有哪些方法能夠保證數據項的完整?
- 創建系統原型有哪些技術?
- 應用程序怎樣創建對用戶行爲的預期?給出一些例子。
- 如何入手設計一組數量龐大而又複雜的特性,你能舉出一些設計思路嗎?
- 有一個列表,其中有10個元素,每一個元素都有20個字段能夠編輯,你怎樣設計這種狀況?若是是1000個元素,每一個元素有3個字段呢?
- 用不一樣的顏色對一段文本中的文字標記高亮,這種作法有什麼問題?
- Web環境和Windows環境各有些什麼限制?
技術設計網絡
- 什麼是低耦合和高聚合?封裝原則又是什麼意思?
- 在Web應用中,你怎樣避免幾我的編輯同一段數據所形成的衝突?
- 你知道設計模式嗎?你用過哪些設計模式?在什麼場合下用的?
- 是否瞭解什麼是無狀態的業務層?長事務如何與之相適應?
- 在搭建一個架構,或是技術設計時,你用過幾種圖?
- 在N層架構中都有哪些層?它們各自的職責是什麼?
- 有哪些方法能夠確保架構中數據的正確和健壯?
- 面向對象設計和麪向組件設計有哪些不一樣之處?
- 怎樣在數據庫中對用戶受權、用戶配置、權限管理這幾項功能建模?
- 怎樣按照等級制度給動物王國(包括各類物種和各自的行爲)建模?
結構數據結構
- 你怎樣保證你的代碼能夠處理各類錯誤事件?
- 解釋一下什麼是測試驅動開發,舉出極限編程中的一些原則。
- 看別人代碼的時候,你最關心什麼地方?
- 何時使用抽象類,何時使用接口?
- 除了IDE之外,你還喜歡哪些必不可少的工具?
- 你怎麼保證代碼執行速度快,而又不出問題?
- 何時用多態,何時用委派?
- 何時使用帶有靜態成員的類,何時使用單例?
- 你在代碼裏面怎麼提早處理需求的變化?給一些例子。
- 描述一下實現一段代碼的過程,從需求到最終交付。
算法
- 怎樣知道一個數字是否是2的乘方?怎樣判斷一個數是否是奇數?
- 怎樣找出鏈表中間的元素?
- 怎樣改變10,000個靜態HTML頁面中全部電話號碼的格式?
- 舉出一個你所用過的遞歸的例子。
- 在哈希表和排序後的列表中找一個元素,哪一個查找速度最快?
- 不論是書、雜誌仍是網絡,你從中所學到的最後一點算法知識是什麼?
- 怎樣把字符串反轉?你能不用臨時的字符串麼?
- 你願意用什麼類型的語言來編寫複雜的算法?
- 有一個數組,裏面是從1到1,000,000的整數,其中有一個數字出現了兩次,你怎麼找出那個重複的數字?
- 你知道「旅行商問題(Traveling Salesman Problem)」麼?
數據結構
- 怎樣在內存中實現倫敦地鐵的結構?
- 怎樣以最有效的方式在數據庫中存儲顏色值?
- 隊列和堆棧區別是什麼?
- 用堆或者堆棧存儲數據的區別是什麼?
- 怎樣在數據庫中存儲N維向量?
- 你傾向於用哪一種類型的語言編寫複雜的數據結構?
- 21的二進制值是什麼?十六制值呢?
- 不論是書、雜誌仍是網絡,你從中所學到的最後一點數據結構的知識是什麼?
- 怎樣在XML文檔中存儲足球比賽結果(包括隊伍和比分)?
- 有哪些文本格式能夠保存Unicode字符?
測試
- 什麼是迴歸測試?怎樣知道新引入的變化沒有給現有的功能形成破壞?
- 若是業務層和數據層之間有依賴關係,你該怎麼寫單元測試?
- 你用哪些工具測試代碼質量?
- 在產品部署以後,你最常碰到的是什麼類型的問題?
- 什麼是代碼覆蓋率?有多少種代碼覆蓋率?
- 功能測試和探索性測試的區別是什麼?你怎麼對網站進行測試?
- 測試棧、測試用例、測試計劃,這三者之間的區別是什麼?你怎麼組織測試?
- 要對電子商務網站作冒煙測試,你會作哪些類型的測試?
- 客戶在驗收測試中會發現不滿意的東西,怎樣減小這種狀況的發生?
- 你去年在測試和質量保證方面學到了哪些東西?
維護
- 你用哪些工具在維護階段對產品進行監控?
- 要想對一個正在產品環境中被使用的產品進行升級,該注意哪些重要事項?
- 若是在一個龐大的文件中有錯誤,而代碼又沒法逐步跟蹤,你怎麼找出錯誤?
- 你怎樣保證代碼中的變化不會影響產品的其餘部分?
- 你怎樣爲產品編寫技術文檔?
- 你用過哪些方式保證軟件產品容易維護?
- 怎樣在產品運行的環境中進行系統調試?
- 什麼是負載均衡?負載均衡的方式有哪些種?
- 爲何在應用程序的生命週期中,軟件維護費用所佔的份額最高?
- re-engineering和reverse engineering的區別是什麼?
配置管理
- 你知道配置管理中基線的含義麼?怎樣把項目中某個重要的時刻凍結?
- 你通常會把哪些東西歸入版本控制?
- 怎樣能夠保證團隊中每一個人都知道誰改變了哪些東西?
- Tag和Branch的區別是什麼?在什麼狀況下該使用tag,何時用branch?
- 怎樣管理技術文檔——如產品架構文檔——的變化?
- 你用什麼侗劇管理項目中全部數字信息的狀態?你最喜歡哪一種工具?
- 若是客戶想要對一款已經發布的產品作出變更,你怎麼處理?
- 版本管理和發佈管理有什麼差別?
- 對文本文件的變化和二進制文件的變化進行管理,這兩者有什麼不一樣?
- 同時處理多個變動請求,或是同時進行增量開發和維護,這種事情你怎麼看待?
項目管理
- 範圍、時間、成本,這三項中哪些是能夠由客戶控制的?
- 誰該對項目中所要付出的一切作出估算?誰有權設置最後期限?
- 減小交付的次數,或是減小每一個每一個交付中的工做量,你喜歡哪一種作法?
- 你喜歡用哪一種圖來跟蹤項目進度?
- 迭代和增量的區別在哪裏?
- 試着解釋一下風險管理中用到的實踐。風險該如何管理?
- 你喜歡任務分解仍是滾動式計劃?
- 你須要哪些東西幫助你判斷項目是否符合時間要求,在預算範圍內運做?
- DSDM、Prince二、Scrum,這三者之間有哪些區別?
- 若是客戶想要的東西太多,你在範圍和時間上怎樣跟他達成一致呢?