Microsoftの面接を通過した人の体験記

http://slashdot.jp/it/article.pl?sid=08/07/03/0219246
/.あたりでは、Googleをやめて古巣のMicrosoftに戻ったひとの話題でもりあがっていますが。


こちらは、実際にダブリンのMicrosoftで面接を受けた人の体験記
http://www.nakov.com/blog/2008/03/15/rejected-a-program-manager-position-at-microsoft-dublin-my-successful-interview-at-microsoft/



Microsoft had a small fault. They didn’t ask me to sing any NDA agreement, so I can share all the interview questions to help all other candidates that want to join Microsoft.

Microsoftはちょっとしたミスを犯したね。僕にNDAのサインするように求めなかったんだ。
だから、今後Microsoftに入ろうと思っている人たちのために、面接のときの質問を公開するよ。



I had 5 interviewers asking me lots of software engineering questions. The questions were very adequate for the team leader position that was my objective (”program manager” position in Microsoft is senior technical position, like team leader in a typical software development company). Interviewers was not only asking me to explain some concept. They gave me a blackboard to write some code and to see how I am attacking the problems, what types of pictures I draw, how my thinking flows, etc.

面接官は5人で、ソフトウェアエンジニアリングに関連のたくさんの質問をされた。質問の内容は、僕の応募したチームリードのポジションに適したものだった。(プログラムマネージャというのは、Microsoftでのシニア技術者のポジションだ。一般的なソフトウェア開発会社でいうところのチームリーダだ。)。面接官は、コンセプトについての説明だけでなく、ホワイトボードにコードを書かせて、僕がどのように問題に取り組んでいるのかも見ているようだった。どんな図を描くのか?思考フローはどうなっているのか?など


Question 1: You need to architecture the security for a bank software. What shall you do?

質問1:銀行向けソフトウェアのセキュリティアーキテクチャを構築することになりました。何をしますか?



Question 2: You are given a string. You want to reverse the words inside it. Example “this is a string”  > “string a is this”. Design an algorithm and implement it. You are not allowed to use String.Split. After you are done with the code, test it. What will you test? What tests you will write?

質問2:ある文字列の中の単語を逆順に並べ替える(たとえば、“this is a string”を“string a is this”にする)アルゴリズムを設計し実装してください。ただし、String.Splitを使用することは禁止します。コードが完成したらテストをおこなってください。何をテストしますか?どのようなテストを書きますか?



Question 3: What is the difference between black box and white box testing?

質問3:ブラックボックステストホワイトボックステストの違いは何ですか?



Question 4: What is cross-site scripting (XSS)?

質問4:クロスサイトスクリプティング(XSS)とは何ですか?



Question 5: What is SQL injection?

質問5:SQLインジェクションとは何ですか?



Question 6: What is the most challengeable issue with multithreading?

質問6:マルチスレッドに関連での最大の問題は何ですか?



Question 7: Explain about deadlocks. How to avoid them.

質問7:デッドロックを説明してください。どのようにして回避しますか?



Question 8: Do you know some classical synchronization problem?

質問8:同期化についての古典的な問題を知っていますか?


Question 9: You need to design a large distributed system system with Web and mobile interface. Through the Web customers subscribe for stock quotes (choosing a ticker and time interval) and get notified by SMS at their mobile phones about the price for given tickers and the requested intervals. A web service for getting the price for given ticker is considered already existing.

質問9:Webとモバイル向けの大規模な分散システムを設計することになりました。顧客はWebで株価情報の購読(銘柄と通知間隔の設定)をし、設定した間隔で指定された銘柄の株価を携帯電話のメールで受け取ります。していた銘柄の株価を取得するWebサービスはすでに存在するものとします。
どのようにしますか?



Question 10: How you secure the stock quote notification system?

質問10:株価通知システムのセキュリティをどのようにして確保しますか?



Question 11: How you write a distributed Web crawler (Web spider)? Think about Windows Live Search which crawls the Internet every day.

質問11:Webクローラ(スパイダー)をどのようにして実装しますか?毎日インターネットをクロールしているWindows Live Searchを思い浮かべてください。



Question 12: You have a set of pairs of characters that gives a partial ordering between the characters. Each pair (a, b) means that a should be before b. Write a program that displays a sequence of characters that keeps the partial ordering (topolocial sorting).

質問12:文字列の部分的な順序を表した文字のペアを複数個与えられた時、たとえば(a,b)はaがbの前に来るということを表しています。この文字順を保ったまま文字列を出力するプログラムを書いてください。



Question 13: You are given a coconut. You have large building (n floors). If you throw the coconut from the first floor, if can be croken or not. If not you can throw it from the second floor. With n attempts you can find the maximal floor keeping the coconut intact.

質問13:ココナッツとn階建のビルがあるとします。ココナッツを1階から落としたら割れるでしょうか?割れなかった場合、2階からではどうでしょうか?ココナッツが無事である最大の階数を求めるには何回の試行が必要ですか?



Question 14: You have 1000 campaigns for advertisments. For each of them you have the returns of investments for every day in a fixed period of time in the past (e.g. 1 year). The goal is to visualize all the campaigns in a single graphics or different UI form so the user can easily see which campaigns are most effective.

質問14:1000の広告キャンペーンを実施しています。それぞれのキャンペーンについて、毎日、特定期間(たとえば1年間)の投資対効果の情報を取得できます。あなたの目標は、すべてのキャンペーンの結果を、一つのグラフィックまたはそれに代わるUIで、どのキャンペーンが最も効果的であるかをユーザに提示することです。どうしますか?


まずは、面接の内容をこんなに細かいところまで覚えている筆者がすごい。
「富士山をどうやって動かしますか?」みたいな、突拍子もない質問はなかったんだ。
最後のほうの質問は、その場で答えろと言われたら、すこし詰まってしまうかも。