top 50 c interview questions with answers
プログラミングとコーディングに関するC#の基本的なインタビューに関するよくある質問:
C#は、急速に成長し、広く使用されているプログラミング言語です。需要が高く、用途が広く、クロスプラットフォームもサポートしています。
ウィンドウだけでなく、他の多くのオペレーティングシステムにも使用されます。したがって、ソフトウェアテスト業界のあらゆる仕事に就くには、この言語を深く理解することが非常に重要です。
以下に、C#に関する最もよくある質問のセットだけでなく、C#人口の群衆から目立つように理解すべきいくつかの非常に重要なトピックも示します。
C#は広大なトピックであるため、すべての概念に簡単に対応できるように、このトピックを以下の3つの部分に分けました。
- 基本的な概念に関する質問
- 配列と文字列に関する質問
- 高度な概念
この記事には、面接の準備に役立つように、C#の面接に関する上位50の質問と回答のセットが含まれています。
学習内容:
最も人気のあるC#インタビューの質問と回答
基本概念
Q#1)オブジェクトとクラスとは何ですか?
回答: クラスは、リアルタイムエンティティを表すために使用されるプロパティとメソッドのカプセル化です。これは、すべてのインスタンスを1つのユニットにまとめるデータ構造です。
オブジェクトは、クラスのインスタンスとして定義されます。技術的には、変数、配列、またはコレクションの形式で格納できるのは、割り当てられたメモリのブロックにすぎません。
Q#2)基本的なOOPの概念は何ですか?
回答:オブジェクト指向プログラミングの4つの基本的な概念は次のとおりです。
- カプセル化 :ここでは、オブジェクトの内部表現は、オブジェクトの定義の外側のビューから非表示になっています。必要な情報のみにアクセスでき、残りのデータ実装は非表示になっています。
- 抽象化: これは、オブジェクトの重要な動作とデータを識別し、無関係な詳細を排除するプロセスです。
- 継承 :別のクラスから新しいクラスを作成する機能です。これは、親クラスのオブジェクトの動作にアクセス、変更、および拡張することによって行われます。
- ポリモーフィズム :名前は、1つの名前、多くの形式を意味します。これは、同じ名前で実装が異なる複数のメソッドを持つことで実現されます。
Q#3)マネージドコードとアンマネージドコードとは何ですか?
回答: マネージコードは、CLR(共通言語ランタイム)によって実行されるコードです。つまり、すべてのアプリケーションコードは.Netプラットフォームに基づいています。ガベージコレクターを内部的に使用して未使用のメモリをクリアする.Netフレームワークのため、管理対象と見なされます。
アンマネージコードとは、.Net以外のフレームワークのアプリケーションランタイムによって実行されるコードです。アプリケーションランタイムは、メモリ、セキュリティ、およびその他のパフォーマンス操作を処理します。
Q#4)インターフェースとは何ですか?
回答: インターフェイスは実装のないクラスです。含まれているのは、メソッド、プロパティ、およびイベントの宣言だけです。
Q#5)C#のクラスの種類は何ですか?
回答:C#のクラスの種類は次のとおりです。
- 部分クラス: これにより、メンバーを分割したり、複数の.csファイルと共有したりできます。キーワードで表されます 部分的。
- 封印されたクラス: 継承できないクラスです。封印されたクラスのメンバーにアクセスするには、クラスのオブジェクトを作成する必要があります。キーワードで表されます 封印 。
- 抽象クラス :オブジェクトをインスタンス化できないクラスです。クラスは継承することしかできません。少なくとも1つのメソッドが含まれている必要があります。キーワードで表されます 概要 。
- 静的クラス :継承を許可しないクラスです。クラスのメンバーも静的です。キーワードで表されます 静的 。このキーワードは、静的クラスの偶発的なインスタンスをチェックするようにコンパイラーに指示します。
Q#6)C#でのコードコンパイルについて説明してください。
回答:C#でのコードコンパイルには、次の4つのステップが含まれます。
- C#コンパイラによるソースコードのマネージコードへのコンパイル。
- 新しく作成されたコードをアセンブリに結合します。
- 共通言語ランタイム(CLR)の読み込み。
- CLRによるアセンブリの実行。
Q#7) クラスと構造体の違いは何ですか?
回答:クラスと構造体の違いは次のとおりです。
クラス | 構造体 |
---|---|
継承をサポート | 継承をサポートしていません |
クラスは参照渡し(参照型) | 構造体はコピー渡し(値型) |
メンバーはデフォルトでプライベートです | メンバーはデフォルトで公開されています |
より大きな複雑なオブジェクトに適しています | 小さな孤立したモデルに適しています |
メモリ管理にごみ収集作業員を使用できます | ガベージコレクタを使用できないため、メモリ管理ができません |
Q#8)仮想メソッドと抽象メソッドの違いは何ですか?
回答: Virtualメソッドには、常にデフォルトの実装が必要です。ただし、必須ではありませんが、派生クラスでオーバーライドできます。を使用してオーバーライドできます オーバーライド キーワード。
抽象メソッドには実装がありません。抽象クラスにあります。派生クラスは抽象メソッドを実装する必要があります。アン オーバーライド キーワードは使用できますが、ここでは必要ありません。
Q#9)C#の名前空間について説明してください。
回答: これらは、大規模なコードプロジェクトを編成するために使用されます。 「システム」は、C#で最も広く使用されている名前空間です。独自の名前空間を作成することも、ネストされた名前空間と呼ばれる別の名前空間で使用することもできます。
それらはキーワード「名前空間」で示されます。
Q#10)C#の「using」ステートメントとは何ですか?
回答: 「using」キーワードは、特定の名前空間がプログラムによって使用されていることを示します。
例えば、 システムを使用する
ここに、 システム 名前空間です。クラスConsoleは、Systemで定義されています。したがって、プログラムでconsole.writeline(“…。”)またはreadlineを使用できます。
Q#11)抽象化について説明してください。
回答: 抽象化はOOPの概念の1つです。クラスの重要な機能のみを表示し、不要な情報を非表示にするために使用されます。
車の例を見てみましょう。
車の運転手は、色、名前、ミラー、ステアリング、ギア、ブレーキなど、車の詳細を知っている必要があります。彼が知る必要がないのは、内部エンジン、排気システムです。
したがって、抽象化は、何が必要かを知り、内部の詳細を外部から隠すのに役立ちます。内部情報の非表示は、プライベートなどのパラメータを使用して宣言することで実現できます。 民間 キーワード。
Q#12)ポリモーフィズムについて説明してください。
回答: プログラム的に、ポリモーフィズムは同じ方法ですが、実装が異なります。コンパイル時とランタイムの2種類があります。
- コンパイル時のポリモーフィズム 演算子のオーバーロードによって実現されます。
- ランタイムポリモーフィズム オーバーライドすることで実現されます。継承および仮想関数は、ランタイムポリモーフィズム中に使用されます。
例えば 、クラスにメソッドVoidAdd()がある場合、ポリモーフィズムはメソッドをオーバーロードすることによって実現されます。つまり、void Add(int a、int b)、void Add(int add)はすべてオーバーロードされたメソッドです。
Q#13)C#では例外処理はどのように実装されていますか?
回答:例外処理は、C#で4つのキーワードを使用して行われます。
- 試してみてください :例外がチェックされるコードのブロックが含まれています。
- キャッチ :例外ハンドラを利用して例外をキャッチするプログラムです。
- 最後に :例外がキャッチされたかどうかに関係なく実行するように記述されたコードのブロックです。
- スロー :問題が発生すると例外をスローします。
Q#14)C#I / Oクラスとは何ですか?一般的に使用されるI / Oクラスは何ですか?
回答: C#にはSystem.IO名前空間があり、作成、削除、開く、閉じるなど、ファイルに対してさまざまな操作を実行するために使用されるクラスで構成されています。
一般的に使用されるI / Oクラスは次のとおりです。
- ファイル –ファイルの操作に役立ちます。
- StreamWriter –ストリームに文字を書き込むために使用されます。
- StreamReader –ストリームへの文字の読み取りに使用されます。
- StringWriter –文字列バッファの読み取りに使用されます。
- StringReader –文字列バッファの書き込みに使用されます。
- 道 –パス情報に関連する操作を実行するために使用されます。
Q#15) StreamReader / StreamWriterクラスとは何ですか?
回答: StreamReaderとStreamWriterは、名前空間System.IOのクラスです。これらは、それぞれcharact90、リーダーベースのデータを読み書きするときに使用されます。
StreamReaderのメンバーの一部は次のとおりです。 Close()、Read()、Readline()。
StreamWriterのメンバーは次のとおりです。 Close()、Write()、Writeline()。
Class Program1 { using(StreamReader sr = new StreamReader(“C:ReadMe.txt”) { //----------------code to read-------------------// } using(StreamWriter sw = new StreamWriter(“C:ReadMe.txt”)) { //-------------code to write-------------------// } }
Q#16)C#のデストラクタとは何ですか?
回答: デストラクタは、メモリをクリーンアップしてリソースを解放するために使用されます。しかし、C#では、これはガベージコレクターによって独自に行われます。 System.GC.Collect()は、クリーンアップのために内部的に呼び出されます。ただし、デストラクタを手動で実装する必要がある場合もあります。
例えば:
~Car() { Console.writeline(“….”); }
Q#17)抽象クラスとは何ですか?
回答: 抽象クラスは、抽象キーワードで示されるクラスであり、基本クラスとしてのみ使用できます。このクラスは常に継承する必要があります。クラス自体のインスタンスは作成できません。プログラムでクラスのオブジェクトを作成したくない場合は、そのようなクラスを抽象化できます。
抽象クラスのどのメソッドにも、同じクラスの実装はありません。ただし、子クラスに実装する必要があります。
例えば:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
抽象クラスのすべてのメソッドは、暗黙的に仮想メソッドです。したがって、virtualキーワードは、抽象クラスのどのメソッドでも使用しないでください。
Q#18)ボクシングとボックス化解除とは何ですか?
回答: 値型を参照型に変換することをボクシングと呼びます。
例えば:
int Value1- = 10;
// - - ボクシング - - - //
オブジェクトboxedValue = Value1;
同じ参照型(ボクシングによって作成された)から値型への明示的な変換が呼び出されます 開封 。
例えば:
// ————ボックス化解除—————— //
int UnBoxing = int(boxedValue);
Javaでリンクリストを宣言する方法
Q#19)ContinueステートメントとBreakステートメントの違いは何ですか?
回答: Breakステートメントはループを中断します。プログラムを制御してループを終了します。 Continueステートメントは、現在の反復のみを終了するようにプログラムを制御します。ループを壊すことはありません。
Q#20)finallyブロックとfinalizeブロックの違いは何ですか?
回答: 最後に ブロックは、tryおよびcatchブロックの実行後に呼び出されます。例外処理に使用されます。例外がキャッチされたかどうかに関係なく、このコードブロックが実行されます。通常、このブロックにはクリーンアップコードがあります。
finalizeメソッドは、ガベージコレクションの直前に呼び出されます。アンマネージコードのクリーンアップ操作を実行するために使用されます。特定のインスタンスが後で呼び出されない場合は、自動的に呼び出されます。
配列と文字列
Q#21)アレイとは何ですか?単一および多次元配列の構文を教えてください。
回答: 配列は、同じタイプの複数の変数を格納するために使用されます。これは、連続したメモリ位置に格納されている変数のコレクションです。
例えば:
二重数=新しいdouble (10);
int ()スコア=新しいint (4) {25,24,23,25};
1次元配列は、変数が1行に格納される線形配列です。上 例 は一次元配列です。
配列は複数の次元を持つことができます。多次元配列は、長方形配列とも呼ばれます。
例えば 、int (、) numbers = new int (3,2) {{1,2}、{2,3}、{3,4}};
Q#22)ギザギザの配列とは何ですか?
回答: ギザギザの配列は、要素が配列である配列です。配列の配列とも呼ばれます。単一次元または複数次元のいずれかです。
int () jaggedArray = new int (4) ();
Q#23)配列のいくつかのプロパティに名前を付けます。
回答:配列のプロパティは次のとおりです。
- 長さ: 配列内の要素の総数を取得します。
- IsFixedSize: 配列のサイズが固定されているかどうかを示します。
- IsReadOnly :配列が読み取り専用かどうかを示します。
Q#24)配列クラスとは何ですか?
回答: Arrayクラスは、すべての配列の基本クラスです。それは多くのプロパティとメソッドを提供します。名前空間システムに存在します。
Q#25)文字列とは何ですか?文字列クラスのプロパティは何ですか?
回答: 文字列はcharオブジェクトのコレクションです。 c#で文字列変数を宣言することもできます。
文字列名=「C#の質問」;
C#の文字列クラスは文字列を表します。文字列クラスのプロパティは次のとおりです。
- イワナ 現在の文字列のCharオブジェクトを取得します。
- 長さ 現在の文字列内のオブジェクトの数を取得します。
Q#26)エスケープシーケンスとは何ですか? C#でいくつかの文字列エスケープシーケンスに名前を付けます。
回答: エスケープシーケンスは円記号()で示されます。バックスラッシュは、それに続く文字を文字どおりに解釈する必要があるか、特殊文字であることを示します。エスケープシーケンスは単一の文字と見なされます。
文字列のエスケープシーケンスは次のとおりです。
- n –改行文字
- b –バックスペース
- \ –バックスラッシュ
- ’–一重引用符
- ’’ –二重引用符
Q#27)正規表現とは何ですか?正規表現を使用して文字列を検索しますか?
回答: 正規表現は、一連の入力に一致するテンプレートです。パターンは、演算子、構成、または文字リテラルで構成できます。正規表現は、文字列の解析と文字列の置換に使用されます。
例えば:
*前の文字と0回以上一致します。したがって、a * b正規表現は、b、ab、aaab、aaabなどと同等です。
正規表現を使用して文字列を検索する:
static void Main(string() args) { string() languages = { 'C#', 'Python', 'Java' }; foreach(string s in languages) { if(System.Text.RegularExpressions.Regex.IsMatch(s,'Python')) { Console.WriteLine('Match found'); } } }
上記の例では、言語配列からの入力セットに対して「Python」を検索します。入力でパターンが見つかった場合にtrueを返すRegex.IsMatchを使用します。パターンは、照合する入力を表す任意の正規表現にすることができます。
Q#28)基本的な文字列操作とは何ですか?説明する。
回答:基本的な文字列操作のいくつかは次のとおりです。
- 連結する :System.String.Concatを使用するか、+演算子を使用して、2つの文字列を連結できます。
- 変更 :Replace(a、b)は、文字列を別の文字列に置き換えるために使用されます。 Trim()は、文字列の最後または最初をトリミングするために使用されます。
- 比較する :System.StringComparison()は、大文字と小文字を区別する比較または大文字と小文字を区別しない2つの文字列を比較するために使用されます。主に、元の文字列と比較対象の文字列の2つのパラメータを取ります。
- 探す :StartWith、EndsWithメソッドは、特定の文字列を検索するために使用されます。
Q#29)解析とは何ですか?日時文字列を解析する方法は?
回答: 解析により、文字列が別のデータ型に変換されます。
例えば:
string text =“ 500”;
int num = int.Parse(text);
500は整数です。したがって、Parseメソッドは、文字列500を独自の基本型(int)に変換します。
同じ方法に従って、DateTime文字列を変換します。
string dateTime =“ 2018年1月1日”;
DateTime parsedValue = DateTime.Parse(dateTime);
高度な概念
Q#30)デリゲートとは何ですか?説明する。
回答: デリゲートは、メソッドへの参照を保持する変数です。したがって、これは関数ポインタまたは参照型です。すべてのデリゲートは、System.Delegate名前空間から派生しています。 Delegateとそれが参照するメソッドの両方が同じ署名を持つことができます。
- 代理人の宣言: パブリックデリゲートvoidAddNumbers(int n);
デリゲートの宣言後、デリゲートがnewキーワードを使用してオブジェクトを作成する必要があります。
AddNumbers an1 = new AddNumbers(number);
デリゲートは、参照メソッドに一種のカプセル化を提供します。これは、デリゲートが呼び出されたときに内部的に呼び出されます。
public delegate int myDel(int number); public class Program { public int AddNumbers(int a) { int Sum = a + 10; return Sum; } public void Start() { myDel DelgateExample = AddNumbers; } }
上記の例では、整数値をパラメーターとして受け取るデリゲートmyDelがあります。クラスプログラムには、AddNumbers()と呼ばれるデリゲートと同じ署名のメソッドがあります。
デリゲートのオブジェクトを作成するStart()と呼ばれる別のメソッドがある場合、そのオブジェクトはデリゲートと同じ署名を持っているため、AddNumbersに割り当てることができます。
Q#31)イベントとは何ですか?
回答: イベントは、応答する必要のあるアプリケーションへの通知を生成するユーザーアクションです。ユーザーアクションには、マウスの動き、キーの押下などがあります。
プログラムでは、イベントを発生させるクラスはパブリッシャーと呼ばれ、イベントを応答/受信するクラスはサブスクライバーと呼ばれます。イベントには少なくとも1つのサブスクライバーが必要です。それ以外の場合、そのイベントは発生しません。
デリゲートは、イベントを宣言するために使用されます。
パブリックデリゲートvoidPrintNumbers();
イベントPrintNumbersmyEvent;
Q#32)イベントでデリゲートを使用するにはどうすればよいですか?
回答: デリゲートは、イベントを発生させて処理するために使用されます。常にデリゲートを最初に宣言してから、イベントを宣言する必要があります。
例を見てみましょう:
患者と呼ばれるクラスを考えてみましょう。患者クラスからの患者の死亡情報を必要とする他の2つのクラス、保険と銀行について考えてみます。ここでは、InsuranceとBankがサブスクライバーであり、Patientクラスがパブリッシャーになります。死亡イベントがトリガーされ、他の2つのクラスがイベントを受信する必要があります。
namespace ConsoleApp2 { public class Patient { public delegate void deathInfo();//Declaring a Delegate// public event deathInfo deathDate;//Declaring the event// public void Death() { deathDate(); } } public class Insurance { Patient myPat = new Patient(); void GetDeathDetails() { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetDeathDetails----------// myPat.deathDate += GetDeathDetails; } } public class Bank { Patient myPat = new Patient(); void GetPatInfo () { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetPatInfo ----------// myPat.deathDate += GetPatInfo; } } }
Q#33) 代表者の種類は何ですか?
回答:さまざまな種類の委任者は次のとおりです。
- シングルデリゲート :単一のメソッドを呼び出すことができるデリゲート。
- マルチキャストデリゲート :複数のメソッドを呼び出すことができるデリゲート。 +および–演算子は、それぞれサブスクライブおよびサブスクライブ解除に使用されます。
- ジェネリックデリゲート :デリゲートのインスタンスを定義する必要はありません。アクション、ファンク、述語の3つのタイプがあります。
- アクション –上記のデリゲートとイベントの例では、Actionキーワードを使用してデリゲートとイベントの定義を置き換えることができます。アクションデリゲートは、引数で呼び出すことができるが結果を返さないメソッドを定義します
パブリックデリゲートvoiddeathInfo();
公開イベントdeathInfodeathDate;
//アクションに置き換える//
公開イベントアクションdeathDate;
アクションは暗黙的にデリゲートを参照します。
-
- 機能 – Funcデリゲートは、引数で呼び出すことができるメソッドを定義し、結果を返します。
Func myDel と同じです bool myDel(int a、string b);を委任します。
-
- 述語 –引数で呼び出すことができ、常にブール値を返すメソッドを定義します。
述語myDel と同じです bool myDel(string s);を委任します。
Q#34) マルチキャストデリゲートとはどういう意味ですか?
回答: 複数のメソッドを指すデリゲートは、マルチキャストデリゲートと呼ばれます。マルチキャストは、+および+ =演算子を使用して実現されます。
Q#32の例を考えてみましょう。
のサブスクライバーは2つあります deathEvent、GetPatInfo 、および GetDeathDetails 。したがって、+ =演算子を使用しました。それはいつでも myDel が呼び出されると、両方のサブスクライバーが呼び出されます。デリゲートは、追加された順序で呼び出されます。
Q#35)イベントのパブリッシャーとサブスクライバーについて説明してください。
回答: Publisherは、さまざまなタイプの他のクラスのメッセージを公開する責任があるクラスです。上記の質問で説明したように、メッセージはイベントに他なりません。
から 例 Q#32では、ClassPatientはPublisherクラスです。イベントを生成しています deathEvent 、他のクラスによって受信されます。
無料のウェブサイトからメールアドレスを抽出する
サブスクライバーは、関心のあるタイプのメッセージをキャプチャします。 例 Q#32の、クラス保険と銀行は加入者です。彼らはイベントに興味を持っています deathEvent タイプの ボイド 。
Q#36)同期および非同期操作とは何ですか?
回答: 同期は、常に1つのスレッドのみがリソースにアクセスできるスレッドセーフなコードを作成する方法です。非同期呼び出しは、プログラムフローを続行する前に、メソッドが完了するのを待ちます。
同期プログラミングは、1つのスレッドのみが使用されるため、ユーザーが時間のかかる操作を実行しようとすると、UI操作に悪影響を及ぼします。非同期操作では、メソッド呼び出しはすぐに返されるため、呼び出されたメソッドが特定の状況で作業を完了している間、プログラムは他の操作を実行できます。
C#では、非同期プログラミングを実現するためにAsyncキーワードとAwaitキーワードが使用されます。同期プログラミングの詳細については、Q#43を参照してください。
Q#37)C#でのリフレクションとは何ですか?
回答: リフレクションは、実行時にアセンブリのメタデータにアクセスするコードの機能です。プログラムはそれ自体を反映し、メタデータを使用してユーザーに通知したり、その動作を変更したりします。メタデータとは、オブジェクト、メソッドに関する情報を指します。
名前空間System.Reflectionには、ロードされたすべてのタイプとメソッドの情報を管理するメソッドとクラスが含まれています。これは主にWindowsアプリケーションに使用されます。 例えば 、Windowsフォームでボタンのプロパティを表示します。
クラスリフレクションのMemberInfoオブジェクトは、クラスに関連付けられた属性を検出するために使用されます。
リフレクションは2つのステップで実装されます。最初にオブジェクトのタイプを取得し、次にそのタイプを使用してメソッドやプロパティなどのメンバーを識別します。
クラスの型を取得するには、次のように使用できます。
タイプmytype = myClass.GetType();
クラスのタイプを取得すると、クラスに関する他の情報に簡単にアクセスできます。
System.Reflection.MemberInfo情報= mytype.GetMethod (「addNumbers」);
上記のステートメントは、名前の付いたメソッドを見つけようとします AddNumbers クラスで 私のクラス 。
Q#38)ジェネリッククラスとは何ですか?
回答: GenericsまたはGenericクラスは、特定のデータ型を持たないクラスまたはオブジェクトを作成するために使用されます。データ型は、実行時、つまりプログラムで使用されるときに割り当てることができます。
例えば:
したがって、上記のコードから、stringとintを比較するために、最初に2つのcompareメソッドが表示されます。
他のデータ型パラメーター比較の場合、多くのオーバーロードされたメソッドを作成する代わりに、ジェネリッククラスを作成し、代替データ型、つまりTを渡すことができます。したがって、Tは、Main()メソッドで特に使用されるまでデータ型として機能します。 。
Q#39)アクセサのプロパティの取得と設定について説明してください。
回答: GetとSetはアクセサーと呼ばれます。これらはプロパティによって使用されます。このプロパティは、プライベートフィールドの値を読み書きするメカニズムを提供します。そのプライベートフィールドにアクセスするために、これらのアクセサーが使用されます。
Get Propertyは、プロパティの値を返すために使用されます
Set Propertyアクセサーは、値を設定するために使用されます。
getとsetの使用法は次のとおりです。
Q#40)スレッドとは何ですか?マルチスレッドとは何ですか?
回答: スレッドは、実行可能な一連の命令であり、プログラムが並行処理を実行できるようにします。並行処理は、一度に複数の操作を実行するのに役立ちます。デフォルトでは、C#にはスレッドが1つしかありません。ただし、他のスレッドを作成して、元のスレッドと並行してコードを実行することもできます。
スレッドにはライフサイクルがあります。スレッドクラスが作成されるたびに開始され、実行後に終了します。 System.Threading スレッドを作成してそのメンバーを使用するために含める必要のある名前空間です。
スレッドは、スレッドクラスを拡張することによって作成されます。 開始() メソッドは、スレッドの実行を開始するために使用されます。
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C#は、一度に複数のタスクを実行できます。これは、さまざまなスレッドによってさまざまなプロセスを処理することによって行われます。これはマルチスレッドと呼ばれます。
マルチスレッド操作を処理するために使用されるいくつかのスレッドメソッドがあります。
開始、スリープ、中止、一時停止、再開、参加。
これらの方法のほとんどは自明です。
Q#41)スレッドクラスのいくつかのプロパティに名前を付けます。
回答:スレッドクラスのいくつかのプロパティは次のとおりです。
- 生きている –スレッドがアクティブな場合は値Trueが含まれます。
- 名前 –スレッドの名前を返すことができます。また、スレッドの名前を設定できます。
- 優先度 –オペレーティングシステムによって設定されたタスクの優先値を返します。
- IsBackground –スレッドをバックグラウンドプロセスにするかフォアグラウンドにするかを示す値を取得または設定します。
- ThreadState –スレッドの状態を記述します。
Q#42) スレッドのさまざまな状態は何ですか?
回答:スレッドのさまざまな状態は次のとおりです。
- 未開始 –スレッドが作成されます。
- ランニング –スレッドが実行を開始します。
- WaitSleepJoin –スレッドはスリープを呼び出し、呼び出しは別のオブジェクトを待機し、呼び出しは別のスレッドで結合します。
- 一時停止 –スレッドが中断されました。
- 中止 –スレッドは停止していますが、停止状態に変更されていません。
- 停止 –スレッドが停止しました。
Q#43) Async and Awaitとは何ですか?
回答: AsyncおよびAwaitキーワードは、Cで非同期メソッドを作成するために使用されます。
非同期プログラミングとは、プロセスがメインプロセスまたは他のプロセスから独立して実行されることを意味します。
AsyncとAwaitの使用法は次のとおりです。
- メソッド宣言にはAsyncキーワードを使用します。
- カウントは、メソッドCalculateCount()を呼び出すint型のタスクです。
- Calculatecount()は実行を開始し、何かを計算します。
- 独立した作業が私のスレッドで行われ、その後、awaitcountステートメントに到達します。
- 計算カウントが終了していない場合、myMethodは呼び出し元のメソッドに戻るため、メインスレッドはブロックされません。
- 計算カウントがすでに終了している場合は、コントロールが待機カウントに達したときに結果を利用できます。したがって、次のステップは同じスレッドで続行されます。ただし、上記の場合、1秒の遅延が発生する状況ではありません。
Q#44)デッドロックとは何ですか?
回答: デッドロックは、2つ以上のプロセスが相互の終了を待機しているために、プロセスが実行を完了できない状況です。これは通常、マルチスレッドで発生します。
ここでは、共有リソースがプロセスによって保持されており、別のプロセスが最初のプロセスがそれを解放するのを待っており、ロックされたアイテムを保持しているスレッドが別のプロセスが完了するのを待っています。
以下の例を考えてみましょう。
- タスクの実行はobjBにアクセスし、1秒間待機します。
- その間、PerformtaskBはObjAにアクセスしようとします。
- 1秒後、PeformtaskAはPerformtaskBによってロックされているObjAにアクセスしようとします。
- PerformtaskBは、PerformtaskAによってロックされているObjBにアクセスしようとします。
これにより、デッドロックが発生します。
Q#45)Lについて説明してください オック 、 モニター 、および ミューテックス スレッド内のオブジェクト。
回答: Lockキーワードを使用すると、常に1つのスレッドのみがコードの特定のセクションに入ることができます。上記で 例 、lock(ObjA)は、このプロセスがロックを解放するまでロックがObjAに配置されることを意味し、他のスレッドはObjAにアクセスできません。
ミューテックスもロックのようなものですが、一度に複数のプロセスで機能します。 WaitOne()はロックに使用され、ReleaseMutex()はロックを解除するために使用されます。ただし、ミューテックスは、取得して解放するのに時間がかかるため、ロックよりも低速です。
Monitor.EnterおよびMonitor.Exitは、内部でロックを実装します。ロックはモニターのショートカットです。 lock(objA)は内部的に呼び出します。
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
Q#46)競合状態とは何ですか?
年: 競合状態は、2つのスレッドが同じリソースにアクセスし、同時にそれを変更しようとしたときに発生します。最初にリソースにアクセスできるスレッドは予測できません。
T1とT2の2つのスレッドがあり、それらがXという共有リソースにアクセスしようとしている場合。両方のスレッドがXに値を書き込もうとすると、Xに最後に書き込まれた値が保存されます。
Q#47) スレッドプールとは何ですか?
年: スレッドプールはスレッドのコレクションです。これらのスレッドは、プライマリスレッドを妨害することなくタスクを実行するために使用できます。スレッドがタスクを完了すると、スレッドはプールに戻ります。
System.Threading.ThreadPool名前空間には、プール内のスレッドとその操作を管理するクラスがあります。
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
上記の行はタスクをキューに入れます。 SomeTaskメソッドには、Object型のパラメーターが必要です。
Q#48)シリアル化とは何ですか?
回答: シリアル化は、コードをバイナリ形式に変換するプロセスです。バイトに変換されると、簡単に保存して、ディスクやそのようなストレージデバイスに書き込むことができます。シリアル化は主に、コードの元の形式を失いたくない場合に役立ち、将来いつでも取得できます。
属性(Serializable)でマークされているクラスは、バイナリ形式に変換されます。
バイナリ形式からC#コードを取得する逆のプロセスは、逆シリアル化と呼ばれます。
オブジェクトをシリアル化するには、オブジェクトをシリアル化する必要があります。シリアル化されたオブジェクトと名前空間System.Runtime.Serializationを含むことができるストリームには、シリアル化のためのクラスを含めることができます。
Q#49)シリアル化の種類は何ですか?
回答:さまざまなタイプのシリアル化は次のとおりです。
- XMLシリアル化 –すべてのパブリックプロパティをXMLドキュメントにシリアル化します。データはXML形式であるため、さまざまな形式で簡単に読み取ったり操作したりできます。クラスはSystem.sml.Serializationにあります。
- 石鹸 –クラスはSystem.Runtime.Serializationにあります。 XMLに似ていますが、SOAPを理解するすべてのシステムで使用できる完全なSOAP準拠のエンベロープを生成します。
- バイナリシリアル化 –任意のコードをバイナリ形式に変換できます。パブリックプロパティと非パブリックプロパティをシリアル化して復元できます。それはより速く、より少ないスペースを占有します。
Q#50)XSDファイルとは何ですか?
回答: XSDファイルはXMLスキーマ定義の略です。 XMLファイルの構造を提供します。これは、XMLが持つべき要素と、存在するべき順序とプロパティを決定することを意味します。 XMLに関連付けられたXSDファイルがない場合、XMLには、任意のタグ、任意の属性、および任意の要素を含めることができます。
Xsd.exeツールは、ファイルをXSD形式に変換します。 C#コードのシリアル化中に、クラスはxsd.exeによってXSD準拠の形式に変換されます。
結論
C#は日々急速に成長しており、ソフトウェアテスト業界で主要な役割を果たしています。
この記事により、面接の準備がはるかに簡単になり、C#のほとんどのトピックについてかなりの知識が得られると確信しています。
自信を持ってC#インタビューに直面する準備ができていることを願っています!!