文章更新
2015-06-15 01:00AM: 感謝各位的支持,簡歷和解決方案接收截止。
2015-06-08 08:30AM: 已經收到一些簡歷和解決方案,正在篩選中。職位仍然開放,歡迎發送簡歷及解決方案。
根據博客園管理員的建議,已移至博客園招聘頻道,有感興趣的朋友可以和我直接聯系!
一. 背景
2014年6月30日離開微軟新加坡,第二天隨即加入現在的公司,之后一直忙碌着公司的新項目,權限系統、以及舊項目的維護與重構,整體來說一起都比較順利,每天都忙碌、痛苦並快樂着。
由於前面幾個系統的順利開發完成並上線,所以忙里偷閑,恰巧最近公司突然來了一個在我看來非常大且持久的項目,面對挑戰,我希望能把它順利的接下來並做大做好,遂希望招聘幾名志同道合的.NET程序猿。
二. 招聘信息
具體招聘條件:
- Bachelor degree in business, software engineering, or computer science.
- Experience creating ASP.NET views in MVC/Razor utilizing CSS and jQuery/JavaScript.
- C# .NET development in Framework 4 or newer.
- Experience with WCF web services or Web API.
- Familiarity with Microsoft Unit Testing tools, including MS Test and MS Fakes.
- Experience with source-control management systems, particularly Microsoft TFS.
- Demonstrated ability to make informed decisions quickly and leverage communication abilities to implement them.
- Any experience or knowledge on MVVM Framework (Angular.js or Knockout.js) will be a big Plus.
工作地點為新加坡。
三. 項目相關信息
自從加入公司后,做完了兩個比較大一點的項目,其中也完善了一些基本的架構設計及框架,所以這次的新項目希望能復用之前的一些設計成果。
架構設計圖:
- 01_Client:存放UI相關的項目,比如Winform, WPF,ASP.NET, Silverlight,ASP.NET MVC或者相關的Web Model及View Model項目。
- 02_Hosting:存放與Service相關的項目,可以是Direct Service,Remoting Service,Web Service,WCF Service或者Web API Service 。
- 03_Domain:業務邏輯相關的所有實體以及操作(根據OO的思想設計類以及類之間的關系)。
- 04_Infrastructure:非業務方面的功能框架 (Data,Common,DataContract,AOP, IOC,Logging,Encryption,Email)。
- 05_Database:數據庫項目(包含所有數據庫腳本,方便開發,部署以及維護)。
- 06_Tests:所有測試項目(數據訪問測試,框架測試,業務邏輯測試,服務測試以及View Model測試)。
- 07_ReferenceLibs:項目相關的外部引用。
- 08_Tools:一些簡單的工具,方便開發,測試以及部署。
組件及部署圖:
執行序列圖
調用Service之前需要調用Service Adapter,然后根據項目配置來決定調用WCF Service,Web API Service 還是直接DLL引用:
四. 對項目的期望
為了項目的可維護性及擴展性,希望項目能具有以下特性:
- Organized:如果系統組織比較好,可以起到事半功倍的效果。
- Encapsulated:對功能,結構,數據進行有效的封裝,會使系統維護變得更加容易。
- Reusable:對常用功能以及組件進行有效的封裝,可以使系統變得結構清晰且方便維護。
- Extensible:在設計系統的時候,如果很好的遵守OO的設計理念(OO的五大原則SOLID),即使系統做得很大,也會像火箭一樣直沖雲霄!
- Replaceable:在很多時候我們需要考慮到系統,組件或者功能的可替換性,因為需求是會變的。
- Testable:做到系統的可測性,會大大幫助開發以及維護,對團隊開發以及分工協作起着非常重要的作用。
- Loose Coupling:隔離耦合是架構設計必須要考慮的一個因素,如果系統不能做到高內聚、低耦合,那么在維護,升級,新功能開發方面就會是一場噩夢!
- High Performance:高性能是系統設計必須重視的要點,用戶不可能忍受簡單頁面加載超過十秒,也不可能接受頁面操作頻繁卡死的情形,所以在架構設計的時候必須從數據庫,邏輯,服務以及UI進行合理的優化。
- Scalability:如果能做到前面的幾點,那么我有理由相信你的系統一定具備Scalability。
- Enjoy Your Life:最后一點也是最重要的一點,不要忙碌於重復的碼農工作,喝杯咖啡,享受代碼,早點回家,陪老婆、陪小孩,環球旅游,享受生活!
五. 面試題目
之前在網上看到一個比較有意思的面試題,做完之后才發現可以通過這道題考察很多方面的知識點,遂將其做了一些簡單的改編,用以面試或者基礎考察。
其實面試題目比較簡單,主要考察最基本的算法、面向對象及項目經驗:
Solution Implementation: Meeting Track Management
Suppose you are planning a big programming Meeting and have received many proposals which have passed the initial screen process but you're having trouble fitting them into the time constraints of the day -- there are so many possibilities! So you write a program to do it for you.
- • The Meeting has multiple tracks each of which has a morning and afternoon session.
- • Each session contains multiple talks.
- • Morning sessions begin at 9am and must finish by 12 noon, for lunch.
- • Afternoon sessions begin at 1pm and must finish in time for the networking event.
- • The networking event can start no earlier than 4:00 and no later than 5:00.
- • No talk title has numbers in it.
- • All talk lengths are either in minutes (not hours) or lightning (5 minutes).
- • Presenters will be very punctual; there needs to be no gap between sessions.
Note that depending on how you choose to complete this problem, your solution may give a different ordering or combination of talks into tracks. This is acceptable; you don’t need to exactly duplicate the sample output given here.
Test input:
- Writing Fast Tests Against Enterprise Rails 60min
- Overdoing it in Python 45min
- Lua for the Masses 30min
- Ruby Errors from Mismatched Gem Versions 45min
- Common Ruby Errors 45min
- Rails for Python Developers lightning
- Communicating Over Distance 60min
- Accounting-Driven Development 45min
- Woah 30min
- Sit Down and Write 30min
- Pair Programming vs Noise 45min
- Rails Magic 60min
- Ruby on Rails: Why We Should Move On 60min
- Clojure Ate Scala (on my project) 45min
- Programming in the Boondocks of Seattle 30min
- Ruby vs. Clojure for Back-End Development 30min
- Ruby on Rails Legacy App Maintenance 60min
- A World Without HackerNews 30min
- User Interface CSS in Rails Apps 30min
Test output:
Track 1:
- 09:00AM Writing Fast Tests Against Enterprise Rails 60min
- 10:00AM Overdoing it in Python 45min
- 10:45AM Lua for the Masses 30min
- 11:15AM Ruby Errors from Mismatched Gem Versions 45min
- 12:00PM Lunch
- 01:00PM Ruby on Rails: Why We Should Move On 60min
- 02:00PM Common Ruby Errors 45min
- 02:45PM Pair Programming vs Noise 45min
- 03:30PM Programming in the Boondocks of Seattle 30min
- 04:00PM Ruby vs. Clojure for Back-End Development 30min
- 04:30PM User Interface CSS in Rails Apps 30min
- 05:00PM Networking Event
Track 2:
- 09:00AM Communicating Over Distance 60min
- 10:00AM Rails Magic 60min
- 11:00AM Woah 30min
- 11:30AM Sit Down and Write 30min
- 12:00PM Lunch
- 01:00PM Accounting-Driven Development 45min
- 01:45PM Clojure Ate Scala (on my project) 45min
- 02:30PM A World Without HackerNews 30min
- 03:00PM Ruby on Rails Legacy App Maintenance 60min
- 04:00PM Rails for Python Developers lightning
- 05:00PM Networking Event
Requirements:
Use OOP, Algorithms and your experience to implement your solution with the following applications:
- 1. WPF with MVVM
- 2. ASP.NET MVC
- 3. ASP.NET MVC with MVVM (AngularJS, KnockoutJs or Backbone.js)
六. 待遇
關於待遇,大家可以參考我之前寫的一篇關於新加坡IT薪酬。
七. 歡迎有興趣的朋友與我聯系
最后,歡迎有興趣的朋友與我聯系,發送簡歷及面試解決方案到我的郵箱(sggeekcoder(at)gmail(dot)com或者KnightsWarrior(at)msn(dot)com ),盡力做到查閱必回。