1. ホーム
  2. .net

[解決済み】優れた.NET開発者なら答えられるはずの質問?[クローズド]

2022-04-02 22:10:51

質問

私の会社では、これから採用する .NET開発者 . 私たちは様々な.NETプラットフォームで仕事をしています。ASP.NET、Compact Framework、Windowsforms、Web Servicesなど、さまざまな.NETプラットフォームに取り組んでいます。応募者が経験豊富かどうかを見るための最低基準のような、良い質問のリスト/カタログを編集したいのですが、どうすればいいですか?そこで、質問です。

どんな質問 が良いと思いますか? .NETプログラマーが答えられるようになるには ?

という見方もできますね。 チェックリスト 自分自身のために、どこに欠陥があるのかを確認するために (たくさんありますが...) .

*UPDATE:私たちは.NETの知識だけをテストしているわけではなく、問題解決能力と一般的なプログラミングスキルがより重要であることを明確にしたいと思います。

どのように解決するの?

基本的な質問は以下の通りです。

通常、応募者に次のような簡単なコーディングの練習をさせるのが効果的だと思います。

  • 組み込みのクラスを使用せずに、独自のリンクリストクラスを作成する。
  • 組み込みクラスを使わずにハッシュテーブル・クラスを作成する。
  • 二分木を表現するクラスを作成する。ツリーのすべてのノードを走査するメソッドを作成しなさい。
  • 組み込みメソッドを使用せずに、配列のバイナリサーチを行うメソッドを作成しなさい。
  • ブログのデータベーススキーマを描く。各ユーザは1つのブログしか持たず、各ブログは多くのカテゴリを持ち、各カテゴリは多くの投稿を持ち、各投稿は複数のカテゴリに属することができる。応募者には、特定の情報を引き出すためのクエリを書いてもらいましょう。

次に、具体的な技術的ノウハウを求めます。

  • (イベントハンドラ)カスタムイベントハンドラを持つクラスを作成し、そのカスタムイベントハンドラにフックする別のクラスを作成します。
  • (XML) XML 文書を読み込み、プロパティ x、y、z を持つすべてのノードを選択します。
  • (関数型プログラミング)他の関数をパラメータとして受け取る関数を作成します。Map関数やFold関数は、このような場合にとても効果的です。
  • (Reflection)あるクラスが特定の属性を持つかどうかを判断する関数を書け。
  • (Regex) HTMLのブロックからすべてのタグを削除する正規表現を書きなさい。

どれも熟練したC#プログラマーが答えるには特に難しい問題ではありませんし、応募者の特定の強みを知ることができるはずです。また、特定のデザインパターンを利用した質問・コードサンプルをいくつか組み込んでおくとよいでしょう。

[明確化のための編集]。 :

なぜこのような質問をするのか、多くの人が理解できないようです。いくつかの人のコメントに触れてみましょう(直接引用するのではなく、言い換えています)。


Q: 最後に揮発性物質や弱いリファレンスを使った人はいつですか?

A: 私が技術面接をするとき、その人が高度な技術を理解しているかどうかを見ます。 .NETの低レベルの機能です。揮発性物質と弱い参照は、.NETが提供する2つの低レベルの機能です。これらの機能が実際にはあまり使用されないとしても、これらの質問に対する回答は非常に分かりやすいものです。

  • volatilesをよく理解しているということは、コンパイラの最適化によってコードの正しさがどのように変わるか、スレッドが共有状態のローカルコピーを保持し、それらが任意の時点で同期していない可能性があることを理解しており、マルチスレッドコードの複雑さのいくつかを最低限認識していることを示しています。

  • 弱参照をよく理解しているということは、ガベージコレクタの詳細と、ガベージコレクタがどのようにメモリの解放時期を決定するかについて知っていることを示しています。もちろん、候補者に「ガベージコレクタはどのように動作するのか」と尋ねることもできますが、弱参照について尋ねると、より良い、より思慮深い返答を得ることができます。

.NETはかなり抽象的な言語ですが、優秀な開発者はほとんどの場合、CLRと.NETのランタイムの低レベルの詳細について深い理解を持っています。


Q: なぜ、独自のハッシュテーブルやリンクリストを実装する必要があるのでしょうか?

A: 私は、Dictionaryクラスが劣っているとか、人々は自分でハッシュテーブルをロールバックするべきだとほのめかしているわけではありません。これは基本的な質問であり、その人が 最小限の データ構造について理解している。それがこの質問で試されることです:最低限の理解です。

このハッシュテーブルやリンクリストについては、データ構造101の初日に習いますよね。もし、ハッシュテーブルやリンクリストをゼロから書けない人がいるとしたら、その人は 巨大 技術的な知識にギャップがあるのです。


Q: なぜ、このようなクドイ質問をするのでしょうか?

A: このスレッドのタイトルは「優秀な.NET開発者が知っておくべき質問"」ですから。すべての.NET開発者は、粗悪なアプリケーションを書くことからキャリアを始めますが、人々が生活のために行うすべてのアプリケーション開発の90%は、業務用アプリケーションに関係しています。

コンパイラ開発、ゲームエンジン開発、定理証明、画像処理など、非常に特殊なニッチ分野の開発者を求めているのでなければ、業務用アプリケーションの知識を問う質問はほとんどの場合において適切であると思います。