
この記事では、目立たない学生である私が、Biggiesリストに載っている企業の1つであるFacebookで、特に問題なくインタビューをノックアウトした方法について説明します。
要点: githubで
残念ながら、FBは私の優先事項ではありません。 インタビューに行き、質問を見て、質問された内容とスタジオでインタビューを依頼できることについて次の記事を書きます。
猫の下で興味を持ってください。
事前に警告します。テキストを部分に分割することはありません。 全体の背景と決定には2時間もかかりませんでした。 超自然的な何かのためにあなた自身を準備する必要はありません-私はこの問題がロシアの学校のプログラミングサークルで与えられていると思う。
それは火曜日でした。大学の後は何の関係もありませんでした。無料のピザを食べにキャンパスでFacebookの講義に参加しました。 ちなみに、私は3つのスライスを食べましたが、私の記憶の中で最もおいしいピザはElectronic Artsのプレゼンテーションでした。 ザッカーバーグの男たちは約150人の学生を収容しました。 FBへの応募プロセス、一連のインタビューについて話し、「配列内の重複の検索を実装する」などの簡単なタスクをいくつか決定しました。30〜40秒間の幼稚園レベルのタスクについて考えてください。
私は去ろうとしていました-ピザは終わりました、そして、私は非常に退屈していました。 さらに、私はすべての人を悩ませることができました-私は他の人よりも先に手を挙げ、常により良い解決策を提供しました。 講義の途中で、彼らは私に尋ねることをやめ、私に注意を払いました。 しかし、結論として、彼らは私たちに「宿題パズル」を与え、チーフリクルーターは私に、それが突然現れたらメールで彼に決定を落とすように言った。
私は非常に驚いた:数字(正方形の辺)を取り、らせん状にねじれた数字のシーケンスを生成する関数を書く必要があった。 9に等しい正方形の辺の例を以下に示します。

最初はこの問題を忘れていましたが、答えのために提示されたポスターに書き直しました。 そして、彼らは他の人にTシャツを配りました。 彼がたくさん答えたという事実のために。
家に帰る途中でバスに飽きました(10分間耐えるのが難しい)ので、同じポスターに近似アルゴリズムを投げました。 私が家に着いたとき、私はさらに数時間私の心を鋭く保つためにいくつかのエネルギードリンクを飲み、Objective-Cでコードを書き始めました。 私は十分なレベルでプロを知らないからです。 私はとても残念だからです。
プログラムのインターフェイスをホイップアップし、わずかにテーマにした-突然100のソリューションが採用担当者に届きましたが、それらはすべて同じですか? ここでは、どういうわけか群衆から目立つ必要があります!

まあ、それは問題ではありません。 マトリックスの基礎として2次元配列を使用しました。 私の場合、NSNumberのNSArrayのNSArrayです。 そしてすぐに、この配列を目的のウィンドウに出力するメソッドを作成しました。 ウィンドウはWebViewでした。HTMLで簡単にプレートを作成できます。
注意コード!
/** * , WebView * * @param result */ - (void)printResult:(NSArray *)result { // css , NSString *css = @"<style>*{font-size:17px; font-family:\"Helvetica\";} td{text-align:center;}</style>"; // css NSMutableString *resultString = [NSMutableString stringWithFormat:@"%@<table>",css]; // for (NSArray *inner in result) { // [resultString appendString:@"<tr>"]; // for (NSNumber *number in inner) { // [resultString appendString:@"<td>"]; // [resultString appendString:[number stringValue]]; // [resultString appendString:@"</td>"]; } // [resultString appendString:@"</tr>"]; } // [resultString appendString:@"</table>"]; // HTML WebView [self.resultWebView.mainFrame loadHTMLString:resultString baseURL:nil]; }
配列をデータで埋めるだけです。 メソッドコードの目を通して、以下でいくつかのポイントを強調します。
注意コード!
/** * * * @param side () * * @return , , [[1,2,3],[8,9,4],[7,6,5]] */ - (NSArray *)getNumbersArrayForSide:(int)side { // NSMutableArray *result = [NSMutableArray array]; // for (int i = 0; i < side; i++) { NSMutableArray *temp = [NSMutableArray array]; for (int j = 0; j < side; j++) [temp addObject:[NSNull null]]; [result addObject:temp]; } // , int currentSide = side; // int offset = 0; int currentNumber = 1; // , while (offset < (side/2.0)) { // for (int i = 0; i < currentSide; i++) { result[offset][offset+i] = @(currentNumber); currentNumber++; } // for (int i = 0; i < currentSide-2; i++) { result[1+offset+i][side-1-offset] = @(currentNumber); currentNumber++; } // if (side/2 - offset > 0) { for (int i = 0; i < currentSide; i++) { result[side-1-offset][side-1-i-offset] = @(currentNumber); currentNumber++; } } // for (int i = 0; i < currentSide-2; i++) { result[side-2-offset-i][offset] = @(currentNumber); currentNumber++; } // , offset++; currentSide-=2; } return result; }
- NSNullオブジェクトで満たされた適切なサイズのマトリックスを作成することにしました。 正しい番号を入力します。
- 各反復で、正方形の辺は2つ減少します。これは、2つの辺から1つの数値を切り取るためです。
- オフセットは、現在の正方形の開始点の座標です(「x」と「y」は同じです)。
- 各正方形は、最初に上部、次に右側、次に下部、次に左側を描画します。
- 正方形の辺が1の場合、下を描く必要はありません。 それ以外の場合、中央番号はさらに1になります。 なんで? そして、ここに宿題があります:)
そして、ここに正方形に8に等しい結果があります:

コーディングとテストが正常に完了したら、履歴書とソリューションを記載したメールをメインの採用担当者のメールに送信しました。 今夜、私は答えを見つけました:オフィスでのインタビューに感謝し、招待されました。
正直、びっくりしました。 確かに、人々はより良い解決策を送ってきました。なぜ私なのですか? すべてがシンプルであることが判明しました。 電話での会話から、講義室にいる150人のうち、3人しか解決策を送っていないことに気付きました(私もその中にいます)。 1つのソリューションはコンパイルされず、もう1つのソリューションはプロのシンプルなコンソールソリューションでした。 選択が明らかだったようです。
会社に履歴書を送った後、電話がかからないという苦情を学生がよく耳にします。 私は神についての冗談と宝くじを思い出します。
最後まで読んでくれてありがとう! そこで、学校レベルの問題を解決する助けを借りて、なんとかFacebookでインタビューを受けました。 もっと簡単な解決策があると確信しており、本当に知りたいです! コメントでソリューションを共有してください。
伝統により、 私のエラーとタイプミスをすべてhabracenterに知らせるようお願いします。