EPAMクエスト:.NETインタビューからの5つのタスク





EPAMに参加する前に、私はサンクトペテルブルクのIT企業で約20のインタビューに参加し、多くがタスクを与えられました。 私は自分の経験を総合し、オンラインテストや対面インタビューを行うタスクに似た5つのタスクを思いつきました。



5月19〜20日、サンクトペテルブルクでDotNextカンファレンスが開催され、参加者にこれらのタスクで構成されるクエストを通過するよう招待しました。 タスクに正しく答えると、参加者は以下を受け取りました。



最初の3つは後輩が処理できますが、インタビューでよく似た質問をされます。 4番目のものは誰にでも尋ねることができますが、私は中級レベルの専門家を頼りにしています。



5番目のタスクはユニットによって行われました。 その複雑さは、selectで何が起こるかを計算することではなく(多くの人がそれを扱っているだけです)、シーケンスの次の数を見つけることにあり、これには十分な数学的知識が必要です。 プログラマーにとって数学的な基礎は非常に重要であるように思えます。



会議の参加者が出てきて、問題を解決する方法と完全なリストをどこで見ることができるかを尋ね、私はそれらをここで公開することを約束しました。 正解とコメントは非表示になっているため、タスクを初めて見る人はプロンプトを表示せずにそれらを解決できます。



それでは始めましょう。



1)このプログラムはどのような結果をコンソールに出力しますか?



class Program { static void Main(string[] args) { var numbers = new int[] { 7, 2, 5, 5, 7, 6, 7 }; var result = numbers.Sum() + numbers.Skip(2).Take(3).Sum(); var y = numbers.GroupBy(x => x).Select(x => { result += x.Key; return x.Key; }); Console.WriteLine(result); } }
      
      





答え
56. LINQの機能を考慮します。 バイナリ表現:111000。



解説
インタビューでも同様のタスクが頻繁に行われます。 クエストについて話すと、参加者の約80%が正しい答えを出しました。 最も一般的な間違いは、リクエストの実行が遅れたことに人々が気付かなかったことです。 詳細はこちらをご覧ください



2)このプログラムはどのような結果をコンソールに出力しますか?



  class Program { private static string GetNumber(int input) { try { throw new Exception(input.ToString()); } catch (Exception e) { throw new Exception((int.Parse(e.Message) + 3).ToString()); } finally { throw new Exception((++input).ToString()); } return (input += 4).ToString(); } static void Main(string[] args) { string result; try { result = GetNumber(1); } catch (Exception e) { result = e.Message; } Console.WriteLine(int.Parse(result) * 100); } }
      
      





答え
200.最終的に詳細を考慮します。 バイナリ表現:11001000。



解説
私自身もインタビューで同様の質問に出会いました。 クエストの参加者について話すと、約70%が正しく答えることができました。 彼らはフィードバックと提案を残しましたが、その中の余分なコードの量を減らしてください。 私たちはこれを議論し、人為的に誤解を招くコードの読みやすさを減らす方が良いという結論に達しました。



3)このプログラムはどのような結果をコンソールに出力しますか?



  class MagicValue { public int Left { get; set; } public int Right { get; set; } public MagicValue(int left, int right) { Left = left; Right = right; } public static void Apply(MagicValue magicValue) { magicValue.Left += 3; magicValue.Right += 4; magicValue = new MagicValue(5, 6); } public static void ApplyRef(ref MagicValue magicValue) { magicValue.Left += 7; magicValue.Right += 8; magicValue = new MagicValue(9, 10); } } class Program { static void Main(string[] args) { var magicValue = new MagicValue(1, 2); MagicValue.ApplyRef(ref magicValue); MagicValue.Apply(magicValue); Console.WriteLine(magicValue.Left * magicValue.Right); } }
      
      





答え
168. refの機能を検討します。 バイナリ表現:10101000。



解説
これはインタビューで非常に人気のある質問です。 私自身も、おそらく毎秒、同様の問題を解決しました。 ここでこのトピックを読むことができます 。 ところで、クエスト参加者の45%だけが適切なソリューションを見つけることができました。 多くの場合、間違いはrefの原理を理解するのではなく、数学にありました。



4)与えられた9つの機能。 各関数は1から9までの数字に対応します。関数を複雑度の高い順に並べ、9個のソートされた関数を数式に順番に代入します_ _ _-_ _ _ + _ _ _ _ = "?"。 「?」と等しいものを書きます。



1。 loglogN

2。 N2/9

3。 N

4。 N

5。 3N

6。 90010000000

7。 N

8。 N3

9。 NN



答え
1221.バイナリ表現:10011000101。

解決策:

6。 90010000000

1。 loglogN

3。 N

2。 N2/9

4。 N

9。 NN

8。 N3

5。 3N

7。 N

6 1 3-2 4 9 + 8 5 7 = 1221



解説
このようなタスクはインタビューではあまり一般的ではありませんが、アルゴリズムの複雑さを研究する人にとっては良い出発点です。 数式には多くのリソースがあり、それらを見つけるのは簡単です。 さらに、問題は紙の「置換」によって解決できます。 インタビューで、彼らはいくつかのアルゴリズムの複雑さに関連する質問をすることができます、そして、答えが一般的な知識によってサポートされるとき、それは素晴らしいです。 クエストについて話すと、参加者の30%だけがタスクに対処しました。



5)carTableテーブルに次の値を含めます。

id モデル 価格
1 日産 1000
2 BMW 2000年
3 トヨタ 1000
4 ルノー 2000年
5 プジョー 1000
6 オペル 2000年


以下のSQLクエリの結果は、<1>と<2>の2つの値になります。



 ;WITH someTable AS (SELECT 1 val UNION ALL SELECT val + 1 FROM someTable WHERE val BETWEEN 1 AND 3) SELECT carTable.price / SUM(CASE WHEN carTable.price = 1000 THEN 1 ELSE 2 END) / 250 AS result FROM someTable INNER JOIN carTable ON carTable.id = someTable.val GROUP BY carTable.price ORDER BY carTable.price ASC
      
      





<1>および<2>は、シーケンス<1>、<2>、6、34、270、<?>の最初の番号です。

次のシーケンス番号を見つけます。



答え
2698.バイナリ表現:101010001010。

解決策:

クエリ結果は番号2と2になります(BETWEENは1,2,3,4を選択します。結合は最初の4つのレコードで機能し、GROUP BYはそれらをグループ化し、SELECTは次のように計算されます 1000/1+1/250=22000/2+2/250=2 。 シーケンスは次のように計算されます xn+1=xn2n2 どこで n -すでに受け取ったアイテムの数。

すなわち:

2212=2

2222=6

6232=34

34ドル* 2 * 4-2 = 270ドル

270252=$269



解説
これは断然最も難しいタスクです。 クエスト参加者の15%のみがそれに対処しました。



おわりに



問題を解決したすべての人、特に最後までやり遂げた人に感謝します! レビューやコメントを読むのは面白かったです。 そして、条件を注意深く読み、バイナリ形式で答えを出した人たちは二重によくやった!



DotNext会議のアーカイブから撮影した写真。



All Articles