プログラマーのキャリア、またはクラッキングコーディングインタビュー

最初のレビュー投稿の1つでは、プロフェッショナルとして改善および開発したいすべてのプログラマーに推奨する素晴らしい本を選びました。 これは、プログラミングの本の中で西部のベストセラーの本の1つである第5版です- コーディングインタビューのクラッキング:150のプログラミングインタビューの質問と回答「プログラマーのキャリア。 Google、Microsoft、または他の大手IT企業で仕事を得る方法



画像



IT関連の本の場合、この本はAmazonのWebサイトで信じられないほどの評価を持っています(9月6日現在、本の一般評価で388、コンピューター&テクノロジーセクションで第1位です)。したがって、このプロジェクトのキュレーターとして、ピーターがロシアでこのベストセラーの本を出版する独占的な権利を受け取ったとき。



本の著者について少し。 ゲイル・ラックマンかわいいアメリカのIT少女ですが、ロシア語版の準備中に結婚し、マクダウェルの2番目の名前を取得することができました。 Gailは、Google、Microsoft、Appleの応募者に数年間インタビューし、その後、プログラマーが大手IT企業でのインタビューの準備をするのを支援する自分の会社CareerCupを設立しました。 そしてもちろん、ゲールは長年西洋で再版されており、ベストセラーの本チャートのトップラインを下回っていない本Cracking Coding Interviewの著者としても有名です。 Gail Luckmanは、個人的に自分の本の出版社として活動しているという事実によって企業についても語っています。ロシアで本のライセンスを取得することについても直接交渉しました(一般的に、現代の出版ビジネスにとってはナンセンスです)。



この本は何についてですか?



名前は、大企業での面接と雇用のプロセスを説明することに専念しているという印象を与える可能性があります:服装の仕方、行動の仕方、GoogleまたはMicrosoftで面接を実施する慣行は何ですか、各企業の好ましくない求職者は拒否されています。 実際、NO。



ところで、興味深い話:Ozonオンラインストアの同僚も本のタイトルに混乱しており、「人事経理と記録管理」のセクションにそれを置いて、出版物を正しい分類子ブランチに戻すのに少し手間がかかりました。



そのため、クラッキングコーディングインタビューは、プログラマーに考えさせて改善させるアルゴリズムに関する古典的な本と並ぶべきです。 上記のトピックには実際には少しのスペース(つまり、50ページ)がありますが、本の主要で最も価値のある部分は、世界で最も有名なIT企業でのインタビュー中に応募者が受け取る実際の質問とテスト項目のほぼ400ページです。 もちろん、この本は、Googleで実際にインタビューを行う場合に役立ちますが、それだけでプログラマーは、抽象的なだけでなく非常に現実的なタスクと実際に使用できるソリューション。



合計で、この本には、OOP、テスト、再帰、ツリーとグラフ、データベース、フロー、および確率理論などのトピックに関する150のタスク(およびそれらに対する正解!)が含まれています。 このリンクで類似の本の内容を見ることができます(出版社のウェブサイトのPDFファイル)。



また、シードとして、「複雑さを増すタスク」セクションの本のテストタスクのいずれかを完了することをお勧めします。

タスク

サイズnの配列からm個の整数のランダムシーケンスを生成するメソッドを記述します。 すべての要素は同じ確率で選択されます。


本からの答えは、明日、9月7日の18:00にコメントに掲載されます。 手がかりを与えないという本の所有者への要求。



そして、以下では、例として、「再帰と動的プログラミング」セクションから別のタスクに正解を与えます。

タスク。

多くの画像エディタで使用される塗りつぶし関数を実装します。 平面(色の2次元配列)、周囲の空間全体を塗りつぶすために必要な点と色を与え、異なる色で塗りつぶします。



解決策

まず、メソッドを視覚化しましょう。 paintFillを呼び出す(グラフィカルエディターで[塗りつぶし]ボタンを押す)と、たとえば緑のピクセルで、境界線を拡大します。 周囲のピクセルに対してpaintFillを呼び出すことにより、さらに移動します。 ピクセルの色が緑と異なる場合、停止します。



このアルゴリズムを再帰的に実装できます。



1列挙型Color {

2黒、白、赤、黄、緑

3}

4

5 boolean paintFill(Color [] [] screen、int x、int y、Color ocolor、

6色ncolor){

7 if(x <0 || x> = screen [0] .length ||

8年<0 || y> = screen.length){

9はfalseを返します。

10}

11 if(screen [y] [x] == ocolor){

12画面[y] [x] = ncolor;

13 paintFill(screen、x-1、y、ocolor、ncolor); //左

14 paintFill(画面、x + 1、y、ocolor、ncolor); //正しい

15 paintFill(screen、x、y-1、ocolor、ncolor); //トップ

16 paintFill(screen、x、y + 1、ocolor、ncolor); //下

17}

18はtrueを返します。

19}

20

21 boolean paintFill(Color [] [] screen、int x、int y、Color ncolor){

22 return paintFill(screen、x、y、screen [y] [x]、ncolor);

23}



画面の[y] [x]配列のxyの順序に注意し、コンピューターグラフィックスに関連する問題を解決するときは、この順序を使用する必要があることに注意してください。 xは水平方向に対応するため、この変数は行番号ではなく列番号を表します。 値yは行番号に対応します。 インタビュー中と毎日のプログラミング中の両方で、この場所で間違いを犯すのは非常に簡単です。







All Articles