<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    面試軟件設計人員的方法,附面試題(轉)

    前段時間招聘。因為我一直在我的部門推行一些有效卻被絕大多數中國公司忽視的開發理念,比如平級人事結構、測試驅動開發、制度化績效、設計先行、迭代開發等等,所以招軟件設計師非常困難。最終問題還算解決了吧。以下是我的面試總結。 



      一般來說,作為迎接面試的人,我會借著詢問路況、接引進會議室或者索要簡歷,來表達出自己的禮貌,讓對方有一定緊張感。這樣我認為有利于對方表現出自然狀態的思路。 

      然后我會根據簡歷,大概咨詢下對方工作中所做過的設計工作。因為我在招軟件設計師,所以只問設計,看看他對設計的理解是什么樣子。通過這種詢問,可以考察對方的簡歷是否作假,如果作假那么無法明確講述其過往工作。還需要看對方的表達能力,即主動展現自己思路的能力。按照我這一批面試的人看,大多數人會講述其項目經歷的業務或者架構。只有一個人能夠把軟件設計和架構設計、軟件開發分離出來。 

      然后就會開始做面試題了。面試題附在下邊。我會先讓其看第一大題,設計能力,請ta選擇一道題目作答。看題之后,對方一般會陷入思考沉默。那么根據對方眼神不再在題目間掃動,表示對方已經針對某一個題目思考。當然,如果是溝通能力好的人,這這之前會主動告訴我,ta準備作答哪道題目。此時需要打斷沉默,對對方說,希望對方談一談想法,任何一點想法都可以說出來。這個時候如果對方能夠針對題目問一些具體沒表示明白的細節,或者自行設定細節,都表明此人溝通能力極好,否則應該認為其溝通能力打折扣。
     

      當對方陸陸續續講述自己的設計時,作為面試的人,需要指出其沒有思考到的地方,或者贊揚對方想的很合理。一般來說,面試的人在經歷了之前的客套和緊張之后,不太容易沉下心來仔細思考。凡是這時候依然能保持有序高效的思考能力,說明這個人抗壓能力極強,至少是心理調節能力極好。通過這時的回答,就可以看出此人對設計是否了解,設計能力怎么樣。
     

      以 1.1 為例,我隨便說幾個要點。比如說,我們應該抽象出牌局狀態這么一個類,作為傳輸給每一個玩家的內容。比如說,我們可以抽象出一張牌這么一類,作為出牌的玩家上報的內容。比如說,此場景應該有一個短連接請求處理類,還應該有一個房間控制類;房間控制類里邊維護一個個開通的房間;當每一個進入房間的請求來臨時,都應該通過房間控制類,將連接轉移到這個對應的房間編號;那么房間編號可以由客戶端通過參數傳遞上來。比如說,每一個房間能夠維護一組長連接,這可以開一個線程來處理;線程由一個單例的線程維護器對象來啟動。比如說,房間在新線程中執行的代碼,應該是輪詢每個長連接看誰發來了“牌”,然后調用數據計算模塊,通過牌和原有牌局(保存在房間對象里),得到新牌局,發送給每一個連接。當然了,如果能對斷鏈識別什么的做出設計就更好了。不過控制此題時間不要超過 10 分鐘,所以一般不可能講述出太多內容。
     

      接下來,要根據剛才設計方面的能力,中轉到 2 或者 3 。如果設計能力不錯,則應該轉移到 3 ;如果設計能力不好,則應該轉移到 2 。這個設計能力的好不好,是根據面試者覺得達標不達標,夠用不夠用來說的。
     

      先來說說轉到 2 編程能力測試的情況。首先,應讓其在 2.1 和 2.2 中選一道作答。2.1 的要點,是建立合適的數據結構。最佳的是 money 與 id 雙排序的基礎對象構建的 TreeSet ,通過 NavigableSet 提供的子樹功能,以 size() 獲取名次。自己前后幾位可通過正反向迭代器取得。當然,也可以使用鏈表和散列集合的二重結構。這要慢不少,但是也還算在可接受范圍內能實現功能。 

      此題非常多的面試者會聯想到 SQL 的 order by 子句。問題是這些人應該設計不出合適的二維表結構,配合 SQL 實現想要的功能。如果面試者能夠實現,那也至少算能夠做出來一種實現,不應苛求。 

      2.2 我認為用二維表傳統關系型數據庫很合適。應該有二個表,一個是歷史表,一個是實際操作記錄表。每次受影響玩家登錄,都會激活從實際操作記錄表到歷史記錄表的總結過程;這是一種最小型的數據挖掘。受試者能夠正確寫出總結過程,能夠正確寫出讀取歷史表的合并過程,則是滿分。
     

      編程過程測試,可以隨時提供設計思路指導。旨在督促受試者利用短暫的面試時間,認真思考,發揮出最強的思維能力,以檢測其通過自己思考解決問題的水平。如果能在不斷的設計方案提示下,指出語句寫法,則應該認為設計能力為零,但編程基本功很扎實。如果算法也需要提示,則認為編寫程序的技能本身不好,但語言知識尚可。
     

      做完 2.1 和 2.2 其中一題,應準備查資料的條件,也就是連接互聯網的瀏覽器,讓其做第 3 題。如果其對 Java5.0 多線程類庫非常了解,則認為此人關注技術新聞,有很強的技術敏感性和學習能力。否則則應通過觀察其查資料選用關鍵詞的方式、查看內容的耐心敏感度,來判斷此人的學習能力和心性。至此,您應該對面試的人有了較全面的認識。推薦記錄下來,以便比較不同的面試者,誰綜合看來更適用。
     

      我們再來說說直接從 1 題轉移到 3 題的情況。同樣是 3.1 和 3.2 選做一題,來測試受試者的架構能力。以和設計能力測評同樣的節奏進入互動,然后探尋受試者思路。架構的核心,在于指派分布,即指派哪些邏輯運行在什么地方,以及這些“地方”的布局方式。非常多的受試者無法分清軟件設計和架構設計的區別。每當這個時候,面試官就應該主動給受試者講述架構的含義,同時記錄受試者不具備可用的架構工作經驗,但應根據接下來的思路表現,來判斷其架構見識、思路以及資質。 

      3.1 的要點在于網絡存檔應該與應用服務分離。應用服務做負載均衡的話,應制作單獨的數據服務以支持網絡存檔。這樣可以保證無論是運營后臺還是玩家都能夠看到全部的數據。如果受試者無法擺脫分區的概念,則應指出,運營后臺頁面,能夠選擇分區,每次選擇,程序能夠連接到不同區的數據服務。 

      3.2 首先這種全球性質或者打地理范圍的系統,肯定要使用地域分流的域名服務(DNS)負載均衡。那么也需要建立專門的用戶數據傳輸機制,以保證用戶大范圍移動物理位置之時,能夠在對應區域取得自己的數據。為此,也就需要設置統一的數據中心,以登記不同區域的位置關系以及服務器地址。考慮到系統不可能一次性完成,使用能夠自動加載的云基礎結構,應該會是一個最合理的選擇。
     

      通過架構測評,如果受試者能夠展現出關于自由軟件的很多知識,則說明此人在技術進步上有較高追求。架構這邊如果用時很短,也就是受試者表示出了對架構的恐懼和放棄,應該認為受試者面對困難問題的解決決心堅韌程度打折扣。這時應將其引導至 2.3 題,以考察其通過查資料解決問題的水平和心性。面試完畢之后,您應該記錄面試情況,以便比較不同的面試者,誰綜合看來更適用。
     

      最后我想說一句。很多面試官都相信自己對受試者的感覺。其實面試流程的目的,就是通過流程,讓受試者更多地表現自己,以豐富面試官的感覺,以防以偏概全、認識不足等情況發生。 



    下邊附面試題目 


    1 設計能力(選做其一) 
    ---------- ---------- ---------- ---------- 
    1.1 現有多人卡牌游戲,由用戶根據場上情況出牌。玩家出的牌可被其它玩家看到。每一種游戲牌將會對場上局面造成某些影響。請設計本游戲服務器端關于數據傳輸部分;其它部分如需指明,也可以指出。 

    1.2 現有某軍事對戰型網絡游戲。架構設計安排在戰斗發起之前,通過短連接方式進行信息處理。對戰為一對一,對戰開始之后,進行長連接,傳輸雙方對軍隊控制的操作。請設計本游戲開始建立長連接以及傳輸操作數據部分的服務器程序。 


    2 編程能力(2.1 和 2.2 選作其一) 
    ---------- ---------- ---------- ---------- 
    2.1 數據結構 
    有一種數據,結構是 

        id: 38, 
        name: "Shane", 
        money: 3010.50 

    數據量大概有 100 0000 份。 
    請你設計一種方式,能夠支持以下要求。 

    首先,需要能往已有數據集里邊追加數據。如果 id 重復,則為修改。 
    其次,需要得到某指定 id 對應的人,全部數據按照 money 排序,其所在的名次。此過程不能太慢。 
    最后,能得到這個 id 對應的人,全部數據按照 money 排序,其名次的前、后幾名的 name 。此過程不能太慢。 

    2.2 邏輯 
    一個社交游戲,玩家可以互相訪問,并在訪問時對對方進行某些操作。被訪問的人在登錄時統一接收上次登錄到這次登錄之間被訪問的報告。 
    獲取記錄通過 InteractSysRecord.INST.getRecord(int userId) 方法,獲得一個 List<ActRecord> 。 
    ActRecord 具有如下屬性 
    int fromUserId 
    int toUserId 
    Kind actKind 
    int actEffect 
    其中 Kind 是一個枚舉,包括一些類型,比如“贈送禮金”、“傷害”、“偷錢”等。 

    玩家獲取的記錄,需要按人整理。也就是說,在一個玩家登錄之時,與其上次登錄之間,某一另外玩家多次訪問此玩家生成的多個 ActRecord ,應該合成一條。 

    請編程完成記錄整理。允許設計合理的 InteractSysRecord 結構。 

    2.3 多線程(允許查資料,希望觀點能獨特、精辟、有實效) 
    請簡述 Java5.0 多線程框架的機制和要點 


    3 架構能力(選做其一) 
    ---------- ---------- ---------- ---------- 
    3.1 請為如下功能需求設計架構。文字或圖示都行。 
    現有某多客戶端弱聯網網絡游戲,需要實現網絡存檔。請簡述網絡游戲存檔的架構方案。注意,后臺操作人員應該能任意查看、修改任何人的存檔。要求說明設計理由。 

    3.2 現有基于位置的移動網絡游戲。在游戲界面中,當玩家離開自己實際位置之時,就會在游戲中受到一個吸引力,吸引游戲中的角色回到玩家現實中的位置。此吸引力隨著距離增加而增加。所有的玩家在統一的世界地圖上進行對戰。請設計此網絡游戲的架構方案。并說明設計理由。 
    @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

    posted on 2012-11-07 21:50 paulwong 閱讀(819) 評論(1)  編輯  收藏 所屬分類: Project Management

    Feedback

    # re: 面試軟件設計人員的方法,附面試題(轉) 2012-11-09 10:48 Shane Loo LI

    本文原作者,也就是我,來標明原文地址啦:

    本文發表在 Shane 的技術博客
    CSDN : http://blog.csdn.net/shanelooli/article/details/8155765
    ITeye : http://surmounting.iteye.com/blog/1717879
    開源中國: http://my.oschina.net/shane1984/blog/87480
    51CTO: http://shanelooli.blog.51cto.com/5523233/1052248

    另外,我最近參加了博客大賽,來給我投張票支持一下吧~
    http://blog.51cto.com/contest2012/5523233  回復  更多評論   


    主站蜘蛛池模板: 亚洲中文字幕久久精品无码喷水 | 免费观看男人免费桶女人视频| 全免费a级毛片免费看| 两个人看的www高清免费视频| 国产99视频精品免费视频76| 一个人看的免费视频www在线高清动漫| 午夜免费国产体验区免费的 | 亚洲成在人线av| 亚洲av日韩av激情亚洲| 亚洲成AV人片在| 久久亚洲熟女cc98cm| 亚洲成在人线中文字幕| 亚洲中文字幕乱码AV波多JI| 亚洲日本成本人观看| 国产亚洲视频在线观看网址| 一级做a毛片免费视频| 日韩电影免费在线观看网站| 久久精品中文字幕免费| 亚洲高清免费在线观看| 日韩精品成人无码专区免费| 日韩免费无砖专区2020狼| vvvv99日韩精品亚洲| 亚洲免费观看视频| 亚洲美免无码中文字幕在线| 中文文字幕文字幕亚洲色| 含羞草国产亚洲精品岁国产精品| 一级做a爱片特黄在线观看免费看| a毛片在线看片免费| 亚洲第一网站免费视频| 在线视频免费观看www动漫| 亚洲国产成人影院播放| 日韩亚洲欧洲在线com91tv| 亚洲天堂福利视频| 国产亚洲福利一区二区免费看| 国产精品美女免费视频观看| 免费人妻无码不卡中文字幕系| 噼里啪啦电影在线观看免费高清| 免费a级毛片视频| 亚洲国产精品无码久久一线| 亚洲一区免费在线观看| 乱淫片免费影院观看|