[DotNet Development Hopping]公開番号では、ホストが皆さんのために. NET実戦面接の質問のバッチを用意しました。
この記事のウェブマスターはAIを通じて詳細な回答を追加しました。これらの質問は、. NETフレームワーク、C#言語、ASP.NET、ADO.NET、データベースなど、. NET開発のあらゆる側面をカバーしています。比較学習を通じて、これらの知識ポイントをよりよく理解し、習得することができます。
面接の過程では、これらの質問を理解し、理解することが非常に重要です。面接官は通常、. NET開発の理解と実践的な経験をテストするためにこれらの質問を使用します。したがって、これらの面接問題を学ぶことで、より良い面接準備と競争力の向上ができます。
** インタビューの内容:**
- CTS、CLS、CLR
- CLR技術とCOM技術の比較
- JITの仕組みは?
- アセンブリをGACに入れる方法
- 値型と参照型の違い
- C#の文字列と文字列の違いは何ですか?
- NETのスタックとヒープの特徴と違いの概要
- NETでのGCの仕組み
- C#におけるオーバーライド、オーバーロード、隠蔽の概念の概要
- C#でクラスを継承できないことを宣言する方法
- Int[]が参照型か値型か
- ジェネリックの基礎を説明する
- Serializable機能とは?
- シリアル化とデシリアル化のプロセスをカスタマイズする方法
- IFormattableインターフェイスを使用してフォーマット出力を実装する方法
- NETが提供するタイマーの種類
- System.Objectで定義された3つの比較メソッドの違いは何ですか?
- 委任の基本を説明してください。
- 静的メソッドとインスタンスメソッドの違いは何ですか?
- チェーン委任とは?
- イベントの基本的な使用方法を説明してください
- 反射の基本原理とその実現の基礎を説明してください。
- リフレクションを使ってファクトリーモードを実装する方法
- 少ないメモリコストでType、Field、Method情報を保存する方法
- Threadとは
- NETスレッドプールの使い方
- C#のlockキーワードは何ですか?
- ASP.NETの動作方法を説明してください。
- GETリクエストとPOSTリクエストの違い
- ASP.NETのページライフサイクルの概要
- ページジャンプを実装するいくつかの方法。
- SQLインジェクション攻撃を防ぐ方法
- ADO.NETがサポートするデータソース
- データベース接続プールの仕組みについて簡単に説明してください。
- 接続文字列に含めることができる属性
- 強型付きデータセットとは?
- XMLとは?
- XMLの名前空間の使い方
- NETでXMLドキュメントのフォーマットを確認する方法
- XSLTとは何か、XSLTの役割
- コード内でXSLTドキュメントを使用する方法
- SOAPプロトコルを参照。
- NETでWebサービスを作成する方法
- Webサービスプロキシタイプの生成方法
- 接続プール内の接続の再利用率を高める方法
- ADO.NETがリレーショナルデータベースにアクセスする2つの方法
- リレーショナルデータベースと非リレーショナルデータとは?
- セッションの保存方法、違い、設定方法は何ですか?
- ViewStateの機能と実装について教えてください。
- データベースの行転送、列転送とは?
- ADO.NETとORMの関係は?
1. CTS、CLS、CLR
CTS Common Type Systemは、. NETにおける仕様であり、共通言語システムであり、サポートされているすべてのデータ型と操作を定義し、異なる言語間の相互運用性を保証します。
CLS Common Language Specificationは、CTSのサブセットであり、異なる言語で書かれたコードが互いに呼び出せるようにするための最小限の規則と規約のセットを定義しています。
CLR(Common Language Runtime)は. NETのコアコンポーネントであり、. NETコードを実行可能コードにコンパイルして実行する責任があり、メモリ管理、セキュリティ、例外処理などの機能を提供します。
详解:面试必备:NET 中 .CTS、CLS 和 CLR 分别作何解释?
2. CLR技術とCOM技術の比較
CLR技術とCOM技術はどちらもコンポーネント化開発に使用される技術ですが、いくつかの違いがあります。CLRは、自動メモリ管理、型安全性、例外処理などの機能を提供するマネージドコード指向技術であり、異なる言語で書かれたコードを単一の統合環境で実行できるようにする多言語開発をサポートします。
COMは非管理コード向けの技術であり、コンポーネント化開発のメカニズムを提供するが、手動でメモリ管理と例外処理を行う必要があり、C++とCOM互換言語のみの開発をサポートする。
COMは手動でメモリを管理する必要があるが、CLRは自動ガベージコレクションを提供する。
CLRは強力なセキュリティとコードアクセス管理を提供しますが、COMは弱いセキュリティを提供します。
CLRは言語中立で複数の言語をサポートしているが、COMはC++を好む。
CLRはメタデータベースのアセンブリを使用し、COMはコンポーネントの登録と検索にレジストリを使用する。
3. JITの仕組みは?
JIT:ジャスト·イン·タイムはCLRの重要なコンポーネントであり、ILコード(中間言語)をネイティブの機械語コードにコンパイルする責任がある。JITは実行時にILコードを必要に応じて機械語コードにコンパイルし、実行効率を向上させます。
これは. NETが実行可能プログラムを実行する基本的な方法です。つまり、実行する必要があるときに対応するILコードをネイティブ命令にコンパイルします。JITに入力されるILコードは、出力はネイティブコードであるため、一部の暗号化ソフトウェアはJITをフックしてIL暗号化を行い、プログラムの正常な動作を保証します。JITの実行は、解釈されたコードよりもはるかに効率的です。
NETプログラムが起動されると、ILコードはCLRによって最初に解釈されます。しかし、実行効率を向上させるために、CLRはILコードを部分的にネイティブコードにコンパイルし、後で使用するためにキャッシュします。
JITコンパイルは遅延コンパイルの一形態であり、実際にILコードを実行する必要がある場合にのみコンパイルされる。
JITには3つのモデルがある。
- 事前コンパイルモード(Ngen):すなわち、ILコードをネイティブのマシンコードに事前コンパイルする。
- 遅延コンパイルモード(JIT-Compiler):実行時にILコードをオンデマンドでコンパイルする。
- “混合モード”Mixed Mode。つまり、プリコンパイルと遅延コンパイルの両方を使用します。
4. アセンブリをGACに配置する方法
アセンブリをGAC(Global Assembly Cache)に入れるとアセンブリのグローバル共有とバージョン管理が実現でき、一般的な理解は様々な. NETプラットフォームの下で使用する必要があるdllを格納する場所である。
可以使用 Gacutil 工具将程序集安装到 GAC 中(gacutil /i YourAssembly.dll),也可以手动将程序集复制到 GAC 目录(一般位于C:\Windows\Assembly)中。
または. NETコードを使用してインストールし、インストール後にアンインストールすることもできます。
GAC内のアセンブリをプログラム内で参照する場合、フルパスを指定することなく、アセンブリ名を直接使用できます。
5. 値型と参照型の違い
値型と参照型は、. NETの2つの基本データ型です。
値型はスタック上に格納され、整数、浮動小数点数、文字などの単純な型を含み、その値は変数に直接格納されます。
参照型はクラス、インタフェース、デリゲートなどの複合型を含むヒープに格納され、変数はオブジェクトへの参照を格納し、参照はスタックまたはヒープ上のどこかに格納され、実際のオブジェクトはヒープに格納されます。
値型の代入は実際の値を新しい変数にコピーしますが、参照型の代入は同じオブジェクトを指す参照をコピーします。
値型の渡しは値渡しで、参照型の渡しは参照渡しである。
値型への各代入はフィールド単位のコピーを実行し、参照型への代入はポインタの渡しに過ぎず、新しいポインタインスタンスを生成します。
6. C#の文字列と文字列の違いは何ですか?
C#では、stringは. NETの文字列型を表すC#キーワードです。
StringはSystem.Stringクラスのエイリアス、すなわちstringはStringのエイリアスであり、実質的な違いはない。
Stringは. NET Frameworkの旧名です。C#1.0で導入され、C#2.0で文字列に置き換えられた。実際には、実質的な違いなしに互いに変換することができます。
7. NETのスタックとヒープの特徴と違い
NETでは、ヒープとスタックはメモリ割り当ての2つの異なる方法です。
ヒープは参照型のオブジェクトを格納するために使用され、ガベージコレクタはメモリの割り当てと解放を管理し、new、mallocなどの割り当てメモリ関数を使用して割り当てられたものはヒープ上にあります。
スタックは値型の変数やメソッド呼び出しのコンテキスト情報を格納するために使用され、メモリの割り当てと解放はコンパイラによって自動的に管理され、関数本体で定義された変数は通常スタック上にあります。
ヒープの割り当て速度は遅いですが、メモリを動的に割り当てて解放することができます。順序はありません。彼は不連続なメモリ領域であり、ユーザー自身が制御して解放します。ユーザー自身が解放しない場合、メモリが一定の特定の値に達したときに、ガベージコレクタGCによって回収されます。
スタック割り当ては高速ですが、サイズは固定されており、ライフサイクルは短く、ストレージ順序を管理するためにスタックに格納され、高度なポストアウトの原則を維持し、彼は連続メモリ領域であり、システムは自動的に割り当てられ、メンテナンスされ、スタックメモリは管理する必要はありませんが、GCによって管理されません。スタックトップ要素が使用されたら、解放されます。GCのクリーンアップが必要です。参照型を使用する場合、通常は参照型オブジェクト自体ではなくポインタに対して行われます。値型はそれ自体を操作します。
スタックのライフサイクルはメソッド呼び出しによって決定され、ヒープ上のオブジェクトは長いライフサイクルを持ち、ガベージコレクタによって管理されます。
8. NETでのGCの動作メカニズム:
GCは ** ガベージコレクション ** の略で、CLRの一部であり、. NETのコア機構の重要な部分であり、使用されなくなったオブジェクトを定期的にチェックして占有しているメモリを解放することで、メモリを自動的に管理する機構です。ガベージコレクタはオブジェクトの参照関係を追跡し、オブジェクトが参照されなくなると、ガベージコレクタはオブジェクトをガベージオブジェクトとしてマークし、必要に応じて占有したメモリを再利用します。ガベージコレクタには、マーク-クリア、コピー、マーク-クリーンアップなど、さまざまなアルゴリズムとポリシーがあります。
基本的な仕組みは、マネージドヒープ内のオブジェクトをトラバースし、使用されているオブジェクト(誰も使用していないオブジェクトはジャンクと呼ばれる)をマークし、到達可能なオブジェクトを連続したアドレス空間に移動し(圧縮とも呼ばれる)、残りの未使用のオブジェクトメモリをすべてリサイクルすることです。
9. 書き換え、オーバーロード、隠れた概念
C#では、オーバーライドoverrideとは、派生クラスがベースクラスの仮想メソッドを再実装することを指す。
オーバーロードoverloadとは、同じクラス内に同名だが引数リストが異なるメソッドを複数定義し、異なるニーズに合わせて複数回オーバーロードすることであり、“オーバーライド”を意味し、サブクラスが親クラスのメソッドをオーバーライドすることである。サブクラスのオブジェクトは、親クラスのメソッドにアクセスできなくなりました。
隐藏(new)是指子类隐藏了父类的方法,当然,通过一定的转换,可以在子类的对象中访问父类的方法,如果使用子类声明的对象,调用隐藏方法会调用子类的,如果使用父类声明对象,那么就会调用父类中的隐藏方法。【参考:C#——隐藏方法】
オーバーライドとオーバーロードはポリモーフィックの表現であり、隠蔽はベースクラスのメンバーを隠すことである。
详解:面试必备:C#实现多态的过程中 overload 重载 与 override 重写的区别
10. C#でクラスを継承できないことを宣言する方法
C#では、sealedキーワードを使ってクラスを継承できないことを宣言できます。あるクラスがsealedと宣言されると、他のクラスはそのクラスを継承できなくなる。
sealed class MySealedClass { }
11. int[]が参照型か値型か
int[]は配列型であるため参照型です。配列型は参照型であり、ヒープに格納されますが、配列変数自体はスタックに格納され、ヒープ内のデータを指します。
12. ジェネリックの基礎を説明する
ジェネリックは. NETの機能であり、型の安全性とコード再利用のためにコンパイル時に型パラメータを指定できる。ジェネリックの基本原理は、コンパイル時の型チェックと型推論によって特定の型のコードを生成することです。実行時、ジェネリックコードは実行効率を向上させるために特定の型にインスタンス化されます。
ジェネリックは、型ごとに異なるコードを記述することなく、異なるデータ型で動作するコードを記述することができます。
ジェネリックを使用する場合、テンプレート(クラス、インターフェイス、メソッドなど)を定義でき、そのうちのいくつかの型は実際に使用するときに指定できます。
13. Serializable機能とは?
Serializable属性は、クラスがシリアル化できること、すなわちオブジェクトを格納または転送のためのバイトストリームに変換できることを示すために使用されます。Serializableプロパティは、コンパイラーとランタイム環境に、クラスのインスタンスをシリアライズおよびデシリアライズできることを伝えます。
シリアライズはオブジェクトをバイトストリームに変換し、デシリアライズはバイトストリームをオブジェクトに変換することです。
14. シリアル化とデシリアル化のプロセスをカスタマイズする方法
カスタマイズされたシリアライズとデシリアライズのプロセスは、ISerializableインターフェイスを実装することで実現できます。ISerializableインターフェイスは2つのメソッドを定義しています。オブジェクトのデータをバイトストリームにシリアライズするGetObjectDataと、デシリアライズを取得するために使用されるコンストラクタであるCustomSerializableClassです。
[Serializable]
public class CustomSerializableClass : ISerializable
{
public string Name { get; set; }
public int Age { get; set; }
// 实现 ISerializable 接口的方法
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Name", Name);
info.AddValue("Age", Age);
}
// 构造函数用于反序列化
protected CustomSerializableClass(SerializationInfo info, StreamingContext context)
{
Name = info.GetString("Name");
Age = info.GetInt32("Age");
}
}
15. IFormattableインターフェイスを使用してフォーマット出力を実装する方法
フォーマット出力はIFormattableインタフェースを使用して実装できます。IFormattableインターフェイスは、フォーマット文字列とフォーマットプロバイダを引数として受け取り、フォーマット文字列とフォーマットプロバイダの要件に従ってオブジェクトを文字列に変換するToStringメソッドを定義します。
参考:IFormattable 接口 (System) | Microsoft Learn
16. NETが提供するタイマーの種類
NETには、System.Timers.Timer、System.Threading.Timer、System.Windows.Forms.Timerなど、いくつかのタイマタイプがあります。
System.Timers.Timer
これはイベントベースのタイマーで、System.Timers名前空間内にあります。これはSystem. Threading.Timerをカプセル化したもので、コールバックメソッドはデフォルトでタイマーを作成したスレッドで実行されるため、マルチスレッド環境での使用に適しています。単一または定期的なタスクスケジューリングをサポートします。
System.Threading.Timer
これは、System.Threading名前空間にあるスレッドベースのタイマーです。指定された間隔でコールバックメソッドを実行し、単一または定期的なタスクスケジューリングを可能にします。コールバックメソッドは別のスレッドで実行されるため、コールバックメソッドでスレッド同期の問題に注意してください。
System.Windows.Forms.Timer
これは、System.Windows.Forms名前空間にあるWindowsフォームアプリケーションのタイマーです。これは主にWindowsフォームアプリケーションで定期的なUI 更新を実行するために使用され、コールバックメソッドはUIスレッドで実行されます。
System.Diagnostics.Stopwatch
これは、System.名前にある高精度タイマーです。典型的なタイマーではありませんが、スニペットの実行時間を測定するために使用され、パフォーマンス分析に役立ちます。
System.Threading.Tasks.Task.Delay
これは従来のタイマーではなく、Task.Delayメソッドで実装された非同期遅延です。非同期操作を実行するのを一定時間待ってから行うことができ、遅延タスクの実装に使用できます。
详解:C#3 种定时器使用
17. System.Objectで定義された3つの比較メソッドの違いは何ですか?
System.Objectには、Equals object、Equals object object、ReferenceEquals object object objectの3つの比較メソッドが定義されています。
これら3つのメソッドはすべて、2つのオブジェクトが等しいかどうかを比較するために使用されます。しかし、比較の仕方は異なります。
Equals objectメソッドは仮想メソッドであり、サブクラスでオーバーライドできます。2つのオブジェクトの値が等しいかどうかを比較します。
Equals object objectメソッドは静的メソッドであり、サブクラスによってオーバーライドすることはできません。2つのオブジェクトへの参照が等しいかどうかを比較します。
ReferenceEquals object objectメソッドは静的メソッドであり、サブクラスでオーバーライドすることはできません。2つのオブジェクトの参照が同じオブジェクトを指しているかどうかを比較します。
18. 委任の基本を説明してください。
C#における委任Delegateは、CまたはC++における关数のポインタに似ている。デリゲート(Delegate)とは,あるメソッドへの参照を持つ参照型変数の一種であり,参照は実行時に変更できる.また、本質的にはメソッドの型を定義するクラスでもあり、メソッドを別のメソッドの引数として渡すことができます。これは、メソッドをパラメータに動的に割り当てる方法です。
デリゲートはメソッドの呼び出しをカプセル化する参照型で、関数ポインタと同様の方法でメソッドを引数として渡すことができます。デリゲートにはメソッドへの参照とオプションのターゲットオブジェクトが含まれ、デリゲートが参照するメソッドが実際に呼び出されます。
デリゲートの基本原理は、メソッドへの参照と呼び出しのコンテキスト情報を含むデリゲートインスタンスを介してメソッドを呼び出すことです。
19. 静的メソッドとインスタンスメソッドの違いは何ですか?
デリゲートコールバック静的メソッドとインスタンスメソッドの違いは、呼び出し方法です。コールバック静的メソッドを委任する場合は、クラス名を使って直接静的メソッドを呼び出すことができます。コールバックインスタンスメソッドを委任する場合は、まずインスタンスオブジェクトを作成してから、インスタンスオブジェクトを使ってインスタンスメソッドを呼び出す必要があります。
//伪代码 仅供参考
// 委托回调静态方法
Action<int> myAction = MyStaticMethod;
myAction(10);
// 委托回调实例方法
MyClass myObject = new MyClass();
Action<MyClass> myAction2 = myObject.MyInstanceMethod;
myAction2(myObject);
20. チェーン委任とは?
チェーン委任とは、複数の委任オブジェクトをリンクして委任チェーンを形成することを意味する。チェーンデリゲートが呼び出されると、1つのデリゲートがnull以外の値を返すか、すべてのデリゲートが呼び出されるまで、各デリゲートオブジェクトが順番に呼び出されます。チェーンデリゲートは、イベントハンドラーチェーン、非同期オペレーションチェーン、その他の複雑なタスクを実装するために使用できます。
在 C# 中,可以使用 + 运算符来链接委托。例如,以下代码将两个委托链接在一起:
Action<int> myAction1 = (x) => Console.WriteLine(x);
Action<int> myAction2 = (x) => Console.WriteLine(x * x);
Action<int> myChainedAction = myAction1 + myAction2;
myChainedAction(10); // 输出:10 100
21. イベントと基本的な使い方を教えてください。
イベントは、特定の状況が発生した場合にクラスが他のクラスやコードに通知できるようにするクラスメンバです。
定义事件时,需要使用 delegate 关键字声明一个委托类型,然后定义一个事件成员。
通过 += 运算符将订阅者的方法添加到事件的委托链中,当事件触发时,委托链中的方法将被调用。
22. 反射の基本原理とその実現の基礎を説明してください。
リフレクションは、実行時に型の情報を取得して操作するための. NETのメカニズムです。
リフレクションは. NETプラットフォームの重要な機能であり、実行時にアセンブリ、型、メンバなどの情報を取得して操作することができます。
リフレクションの基本原理は、実行時にアクセスできるメタデータによって型の構造を記述することであり、型に関する詳細な情報を得ることができる。
反射的基石是元数据(metadata),它是程序集的一部分,包含有关类型、成员、方法等的描述信息。这使得程序可以在运行时了解其自身的结构和组成。
23. リフレクションを使ってファクトリーモードを実装する方法
まず、インスタンス化されたクラスの代わりにファクトリーパターンがどのように実装されるかを理解する。リフレクションを使用してファクトリパターンを実装すると、各オブジェクトのインスタンス化newオブジェクトを明示的に指定することなく、特定のクラス名や条件に基づいてオブジェクトのインスタンスを作成できます。
using System;
// 定义接口
public interface IVehicle
{
void Move();
}
// 实现 IVehicle 接口的两个类
public class Car : IVehicle
{
public void Move()
{
Console.WriteLine("Car is moving");
}
}
public class Bike : IVehicle
{
public void Move()
{
Console.WriteLine("Bike is moving");
}
}
// 工厂类,利用反射根据类名创建对象实例
public class VehicleFactory
{
public IVehicle CreateInstance(string vehicleType)
{
Type type = Type.GetType(vehicleType); // 获取类型
if (type == null || !typeof(IVehicle).IsAssignableFrom(type))
{
throw new ArgumentException("无效车类型");
}
// 创建实例
IVehicle vehicle = (IVehicle)Activator.CreateInstance(type);
return vehicle;
}
}
//main调用
#region
// 工厂类实例
VehicleFactory factory = new VehicleFactory();
// 通过工厂类创建不同类型的实例
IVehicle car = factory.CreateInstance("Car");
IVehicle bike = factory.CreateInstance("Bike");
car.Move(); // 输出:Car is moving
bike.Move(); // 输出:Bike is moving
#endregion
24. 少ないメモリコストでType、Field、Method情報を保存する方法
使用轻量级的结构如 System.Reflection.Emit 中的 DynamicMethod 或 DynamicType 来保存 Type、Field 和 Method 信息,以较小的内存开销创建和操作类型。
25. Threadとは
スレッドはプログラム実行の最小単位であり、オペレーティングシステムがタスクスケジューリングを行う基本単位である。プロセスは複数のスレッドを含むことができ、それぞれが独自の実行パスと実行状態を持つ。スレッドは同時に実行でき、プログラムの実行効率が向上します。. NETでは、System.Threading名前空間がスレッドをサポートしています。
26. NETスレッドプールの使い方
スレッドプールでは、パフォーマンスを向上させるためにスレッドを再利用でき、スレッドの作成と破棄のオーバーヘッドを削減できます。また、ThreadPool.QueueUserWorkItemメソッドを使用して、作業アイテムをスレッドプール内のスレッドが実行するスレッドプールに配置できます。ThreadPoolクラスを使用すると、. NETのスレッドプールを使用できます。
static void Main()
{
// 将工作项放入线程池队列
ThreadPool.QueueUserWorkItem(DoWork, "Hello ThreadPool!");
ThreadPool.QueueUserWorkItem(DoWork, "Hello ThreadPool2!");
// 主线程继续执行其他工作
Console.WriteLine("欢迎关注公众号[dotnet开发跳槽].");
// 防止控制台直接关闭
Console.ReadLine();
}
static void DoWork(object state)
{
// 从线程池中的线程执行的工作方法
string message = (string)state;
Console.WriteLine($"ThreadPool 工作: {message}");
}
27. C#のlockキーワードは何ですか?
スレッドセーフは重要であり、lockキーワードはマルチスレッド環境で共有リソースへの安全なアクセスを保証するために使用されます。オブジェクトのミューテックスを取得することでコードブロックを保護し、スレッドがロックを解除するまで1つのスレッドだけがクリティカルセクションに入ることができます。lockキーワードは、一度に1つのスレッドのみがロックされたコードブロックにアクセスできるようにし、複数のスレッドが共有リソースに同時にアクセスすることによるデータの不整合の問題を回避します。
28. ASP.NETの動作方法を説明してください。
ASP.NETはWebサーバ上で動作し、HTTPリクエストを処理してHTTPレスポンスを生成することでWebサービスを提供します。ASP.NETは、IISプロセスホストモードやセルフホストモードを含むアウトプロセスモードまたはインプロセスモードで実行できます。
** ASP.NET Coreとは?
ASP.NET CoreはWebサーバー上で実行され、HTTPリクエストを処理してHTTPレスポンスを生成することでWebサービスを提供することもできます。従来のASP.NETとは異なり、ASP.NET Coreはクロスプラットフォームであり、Windows、Linux、macOSなどのオペレーティングシステム上で動作します。
ASP.NET Coreは、プロセス外またはプロセス内モードで実行できます。オフプロセスモードでは、ASP.NET Coreアプリケーションは独立したプロセスで実行され、HTTPプロトコルを介してWebサーバーと通信できます。一般的なWebサーバには、IIS、Nginx、Apacheがあります。
インプロセスモードでは、ASP.NET CoreアプリケーションはWebサーバプロセスに直接埋め込まれ、Webサーバと同じプロセス空間を共有します。このモードでは、ASP.NET Coreアプリケーションはリクエストをより効率的に処理でき、プロセス間通信のオーバーヘッドを削減できます。
ASP.NET Coreは、アプリケーションをWebサーバーに依存せずにスタンドアロンのコンソールアプリケーションとして直接実行できるセルフホスティングモデルもサポートしています。セルフホスティングモードでは、ASP.NET CoreアプリケーションはKestrelを組み込みWebサーバーとして使用することも、他のサードパーティ製Webサーバーとして使用することもできます。
要約すると、ASP.NET Coreはアウトプロセスモードまたはインプロセスモードで実行でき、特定のニーズに応じて適切な実行方法を選択できるセルフホスティングモードをサポートしています。
29. GETリクエストとPOSTリクエストの違い
GETリクエストとPOSTリクエストはHTTPプロトコルの2つの一般的なリクエストメソッドですが、実際にはほとんど違いはありません。主な違いはデータ転送方法です。GETリクエストはリクエストパラメータをURLに添付し、クリアテキスト形式で送信し、データの取得に適しています。POSTリクエストはリクエストパラメータをリクエストボディに配置し、より安全で長さ制限がなく、データの送信に適しています。GETリクエストのパラメータには長さ制限があり、POSTリクエストのパラメータには長さ制限がない。
HTTP GETリクエストのクエリパラメータの長さには制限があり、ブラウザによってクエリパラメータの長さの制限は異なります。クエリパラメータの長さに関する一般的なブラウザの制限事項は次のとおりです。
- Internet Explorer:Internet Explorer 9以前のクエリパラメータの長さは2,083文字に制限されています。
- Microsoft Edge:Microsoft Edgeブラウザのクエリパラメータの長さは8,192文字に制限されています。
- Chrome:Chromeブラウザのクエリパラメータの長さは8,192文字に制限されています。
- Firefox:Firefoxブラウザのクエリパラメータの長さは65,53 6文字に制限されています。
- Safari:Safariブラウザのクエリパラメータの長さは80,000文字に制限されています。
これらの制限はクエリパラメータの長さを指し、URLの他の部分(プロトコル、ドメイン名、パスなど)は含まれないことに注意してください。また、ブラウザのバージョンによって異なる場合があり、上記の制限はあくまで目安です。長いクエリパラメータを渡す必要がある場合は、POSTリクエストを使用するか、リクエスト本体にパラメータを渡すことを検討してください。
30. ASP.NETのページライフサイクルの概要
ASP.NETのページライフサイクルには、ページ初期化、ページロード、ページレンダリング、イベント処理、ページアンロードなどの複数のフェーズが含まれます。各フェーズでは、ASP.NETは対応するイベントハンドラメソッドを呼び出し、開発者は特定の機能を実装するために独自のコードを記述できます。
31. ページジャンプを実装するいくつかの方法。
従来のMVCプロジェクトでは、新しいプロジェクトでは読み書きが分離される。ページジャンプを実装するメソッドには、Respons.Redirect、Server.Transfer、Server.Execute、ハイパーリンクやボタンコントロールを使用したナビゲーション機能、Java Scriptのwindow.locationメソッドなどがあります。
32. SQLインジェクション攻撃を防ぐ方法
ORMを使うと、通常は現れません。SQLインジェクション攻撃を防ぐために、パラメータ化クエリまたはストアドプロシージャを使用してデータベース操作を実行できます。パラメトリッククエリは、ユーザー入力データをSQLステートメントに直接接続し、入力データを検証およびフィルタリングしてSQLコードの悪意のあるインジェクションを防止するのではなく、ユーザー入力データをデータベースにパラメータとして渡します。ストアド·プロシージャは、SQL文をデータベースにカプセル化し、パラメータを介してユーザが入力したデータを渡すことができます。
33. ADO.NETがサポートするデータソース
ADO.NETが継続的に開発されれば、サポートされるデータソースは無制限になる。ADO. NETは、SQL Server、Oracle、OLE DB、ODBC、XMLなど、さまざまなデータソースをサポートしています。
34. データベース接続プールの仕組みについて簡単に説明してください。
データベース接続プールは、データベース接続を管理するためのメカニズムです。アプリケーションの起動時に一定数のデータベース接続を作成し、それらを接続プールに保持し、アプリケーションがデータベースに接続する必要があるときに、接続プールから利用可能な接続を取得し、使用後に接続を閉じる代わりに接続プールに戻すことで、接続の開閉にかかる時間を短縮し、接続の再利用とパフォーマンスを向上させます。
35. 接続文字列に含めることができる属性
接続文字列には、データ·ソース、ユーザー名、パスワード、接続タイムアウトなど、のプロパティを含めることができる。一般的な接続文字列プロパティは、接続するデータベースとプロバイダに応じて、Data Sourceデータソース、Initialデータベース名、User IDユーザー名、Passwordパスワード、Connect Timeout接続タイムアウトなどです。
36. 強型付きデータセットとは?
強型付けされたDataSetは、設計時に構造がわかっているDataSetです。Visual StudioのDataset Designerを使用して作成され、コンパイル時の型チェックとIntelliSenseをサポートしている。強型付けされたDataSetでは、テーブルとカラムの型は、汎用のObject型を使用するのではなく、明示的に指定されます。
37. XMLとは?
XML eXtensible Markup Languageは、データを格納して転送するためのマークアップ言語です。ラベルを使用してデータの構造と内容を記述し、自己記述的で拡張可能です。
38. XMLの名前空間の使い方
XML内の名前空間は、要素名と属性名の衝突を避けるために使用されます。xmlns属性を使用して名前空間を定義でき、プレフィックスを使用して名前空間内の要素と属性を参照できます。
39. NETでXMLドキュメントのフォーマットを確認する方法
XMLファイルを使用してXMLを検证するか、ReaderクラスまたはDocumentクラスを使用してXMLの形式を検证できます。
XmlReaderクラスは、XmlReaderSettingsクラスのプロパティを設定して検証オプションを指定することで、XMLドキュメントを読み取り、検証するストリーミング方法を提供します。
XmlDocumentクラスは、XMLドキュメントを読み込んで検証するDOM方法を提供します。XmlValidatingReaderクラスのプロパティを設定して検証オプションを指定できます。
40. XSLTとは何か、XSLTの役割
XSLT(eXtensible Stylesheet Language Transformations)は、XMLドキュメントを別のXMLドキュメント、HTMLページ、または他のテキスト形式に変換するために使用されるXMLベースの変換言語です。XSLTは、テンプレートとルールを定義することでXMLドキュメントを変換および処理でき、XMLドキュメントをHTML、PDFなどの形式に変換するためによく使用されます。
41. コード内でXSLTドキュメントを使用する方法
XslCompiledTransformやXmlDocumentなどの. NET Frameworkのクラスを使用してXSLTドキュメントをロードし、XMLデータを変換するためにドキュメントを適用します。Transformメソッドを使用してXMLドキュメントを別の形式に変換します。
42. SOAPプロトコルを参照。
SOAP Simple Object Access Protocolは、構造化された情報を交換するための通信プロトコルです。XMLフォーマットを使用してデータをカプセル化して転送し、Webベースのサービス間の通信を可能にし、異なる環境や言語間の相互運用性をサポートします。
43. NETでWebサービスを作成する方法
ASP.NETのWeb Serviceクラスを使用してWebサービスを作成できます。Webサービスクラスで公開されたメソッドを定義し、WebMethod属性でそれらのメソッドをマークして、HTTPリクエストで呼び出すことができます。
44. Webサービスプロキシタイプの生成方法
wsdl.exeツールまたはVisual Studioのサービス参照の追加機能を使用して、Webサービスプロキシタイプを生成できます。wsdl.exeツールではWebサービスのWSDLドキュメントからプロキシクラスを生成できます。また、“サービス参照の追加”機能では、Webサービスのメタデータからプロキシクラスを生成できます。生成されたプロキシクラスはWebサービスのメソッドを呼び出すために使用できます。
45. コネクションプール内の接続の再利用率を高めるには?
A:接続プール内の接続の再利用率を高めるには、いくつかの方法があります。
- 接続プールのパラメータを合理的に設定する:アプリケーションのニーズに応じて、接続プールの最大接続数、最小接続数、接続タイムアウト時間などのパラメータを設定できます。合理的なパラメータ設定は、接続プール内の接続の過剰な作成と破棄を回避し、接続の再利用率を向上させます。
- 接続プール内接続の解放メカニズムの使用:接続プール内の接続を使用する場合は、接続リソースをタイムリーに解放することが重要です。using文を使用するか、接続のCloseメソッドを手動で呼び出して接続リソースを解放し、他の要求で再利用できるように、接続が時間内に接続プールに戻されるようにします。
- 長時間の接続の使用を避ける:接続を使用する際の接続の使用時間を最小限に抑えます。データベース操作が完了した後、できるだけ早く接続リソースを解放し、接続の長時間の使用を回避し、接続の可用性と再利用率を向上させることができます。
- 接続文字列を使用する接続プールプロパティ:接続文字列では、最大接続数、接続タイムアウト時間など、接続プール関連のプロパティを設定できます。これらのプロパティを適切に設定することで、接続プール内の接続の数とライフサイクルを制御し、接続の再利用を増やすことができます。
46. ADO.NETはリレーショナルデータベースにアクセスする2つの方法をサポートする。
ADO.NETは2つのプロバイダでリレーショナルデータベースにアクセスできます。
- SQLClientプロバイダSQLClientプロバイダは、Microsoft SQL ServerデータベースにアクセスするためのADO. NETプロバイダです。SQL文への接続、実行、結果の処理のためのクラスとメソッドのセットを提供し、SQL Serverデータベースと簡単に対話できます。
- OLE DB Provider:OLE DB Providerは、複数のタイプのリレーショナルデータベースにアクセスするために使用できる汎用データアクセスインタフェースです。接続、SQL文の実行、結果の処理を行うためのクラスとメソッドのセットを提供し、アダプタ·スキーマを介して異なるデータベースに適合させることができます。
47. リレーショナルデータベースとは何か?非関係データベースとは?
リレーショナルデータベースは、テーブルを使用してデータを整理して保存するデータベースです。リレーショナルモデルを使用してデータ間の関係を記述し、テーブル内の行と列を介してデータを格納して表現します。リレーショナル·データベースは、データ操作とクエリにStructured Query Language SQLを使用します。
非リレーショナルデータベースは、リレーショナルモデルとSQLを使用しないデータベースです。異なるデータモデルとクエリ言語を使用してデータを格納し操作します。一般的な非リレーショナルデータベースには、ドキュメントデータベース、キーバリューデータベース、カラムストレージデータベースなどがあります。非リレーショナルデータベースは、拡張性と柔軟性を備えた大量の非構造化データの格納と処理に適しています。
48. セッションの保存方法は何ですか?その違いは何ですか?
セッションにはいくつかの保存方法があります。
- サーバーメモリ:セッションデータをサーバーのメモリに保存します。この方法は高速ですが、サーバーのメモリリソースを消費します。
- データベース:セッションデータをデータベースに保存します。このアプローチはセッションを永続させるが、データベースへのアクセスコストが増加する。
- Redisなどの外部サービス:セッションデータをRedisなどの外部キャッシュサービスに保存します。このアプローチは、セッションの分散ストレージと共有を実現し、システムのスケーラビリティとパフォーマンスを向上させます。
设置 Session 的存储方式可以通过配置文件或代码来实现。在 ASP.NET 中,可以通过 Web.config 文件的<sessionState>元素来配置 Session 的存储方式和其他属性。可以设置 mode 属性来指定存储方式(如 InProc、SQLServer、Redis 等),并设置相应的连接字符串或其他配置信息。也可以通过代码来设置 Session 的存储方式,如使用 SessionStateModule 的 SessionStateMode 属性来设置存储方式。
49. ViewStateの機能と実装メカニズムを簡単に説明してください。
ViewStateは、Webページのポストバック間でページコントロールの状態情報を保存するためのメカニズムです。ページコントロールのプロパティ値、イベントステータス、ビューステータスなどの情報を保存し、ページのポストバック時にページの状態を復元できます。
ViewState 的实现机制是将页面控件的状态信息保存在隐藏字段中,这个隐藏字段的名称为__VIEWSTATE。在页面回发时,ASP.NET 会自动将隐藏字段的值解析并恢复页面控件的状态。
ViewStateの機能には次のものがあります。
- ページコントロールのプロパティ値を保存する:ViewStateは、テキストボックスのテキスト、チェックボックスの選択状態、ドロップダウンリストの選択項目など、ページコントロールのプロパティ値を保存できます。
- ページコントロールのイベント状態を保存する:ViewStateは、ボタンクリックイベント、チェックボックスの選択イベントなど、ページコントロールのイベント状態を保存できます。
- ページコントロールのビュー状態を保存する:ViewStateは、ページコントロールのビュー状態、つまりページ上のコントロールの位置やスタイルなどの情報を保存します。
ViewStateはページサイズを大きくし、ネットワーク転送のオーバーヘッドを増加させることに注意することが重要です。ViewStateを使用する場合は、過度のデータ転送やページ読み込みの遅延を避けるために、ViewStateのサイズを制御するように注意してください。EnableViewStateプロパティを設定してViewStateを有効にするかどうかを制御し、ViewStateModeプロパティを使用してViewStateのモードEnabled、Disabled、Inheritなどを制御できます。
50. データベースの行転送、列転送とは?
データベースの行と列の遷移は、データベース内のデータ変換を行う操作です。
データベースの行から列へRow to Columnは、データベース内の行データを列データに変換する操作です。通常、データベース内のデータは行形式で格納され、各行はレコードを表し、各列はフィールドを表します。しかし、データ分析やクエリを容易にするために、行データを列データに変換する必要がある場合があります。これは、集計関数、PIVOT 操作、またはカスタムクエリ文を使用して実現できます。
データベース列転toは、データベース内の列データを行データに変换する操作である。行転列転とは対照的に、列転はデータベース中の列データを何らかのルールに従って行データに変换することである。これは、UNPIVOT 操作またはカスタムクエリ文を使用して実現できます。
51. ADO.NETとORMの関係は?
ADO.NET(ActiveX Data Objects.NET)とORM(Object-Relational Mapping)は、データベースにアクセスするために使用される2つの技術であり、データベースアクセスのレベルで関係があります。
ADO.NETは、データベースにアクセスするために使用される. NETフレームワークのクラスとメソッドのセットです。データベースと対話するための接続、コマンド、データリーダに基づく方法を提供します。ADO.NETは、データベースへの接続、SQL文の実行、結果の処理を可能にする一連のクラス(SqlConnection、SqlCommand、SqlDataReaderなど)とメソッドを提供します。
ORMは、オブジェクトモデルとリレーショナルデータベース間のマッピング技術です。データベース内のテーブルやレコードをオブジェクトや属性にマップし、開発者がオブジェクト指向の方法でデータベースを操作できるようにします。ORMフレームワークは、オブジェクトとデータベース間の変換を自動化し、データアクセス層の開発を簡素化します。
ADO.NETとORMの関係は、ADO.NETが低レベルのデータベースアクセス技術であるのに対し、ORMはADO.NETの上に高レベルの抽象化とカプセル化を提供するということです。ORMフレームワークは、オブジェクトとデータベース間の関係をマッピングすることで、オブジェクトの永続性とデータベース操作の簡素化を実現するための基盤となるデータベースアクセス技術としてADO.NETを使用できます。
ORMフレームワークを使用することで、データベース操作をオブジェクト操作に変換できるため、開発者はデータベースアクセスの基礎となる詳細に注意を払うことなく、ビジネスロジックの実装に集中できます。ORMフレームワークは、キャッシュ、遅延ロードなどの追加機能を提供しながら、開発効率とコードの保守性を向上させることができる。ただし、ORMフレームワークはすべてのプロジェクトやシナリオで動作するわけではなく、複雑なデータベース操作にはADO.NETの基盤となる機能を使用する必要があります。
まとめまとめまとめ
この記事では、ネチズンから提供された. NET面接の質問と、面接の準備に役立つことを願って、各質問への回答をリストします。上記の問題のいくつかは少し古いですが、これも会社の古い技術を反映しています。面接のシナリオや質問の方向性が異なるため、状況に応じて適切に回答することができ、回答は参考用です。面接を成功させるためには、常に基礎知識を向上させ、最新の技術的方向性を理解する必要があります。
インタビューの質問について異なる意見がある場合は、記事にコメントまたはPRを投稿することができます: