以下はNET面接のすべてではありませんが、私が漏れやすいと思うものを書いています。
一、面接まとめ
注意点:深セン龍崗李朗 YH 股份はオファーをドタキャンする可能性あり
オファーをドタキャンされたため、再度就職活動を行い、8日から12日まで面接を行いました(11社)。全体的に面接の難易度は高くありませんが、多くの会社はただの手続きであり、実際に人を必要としているわけではなく、中には一言二言話しただけで帰って待つように言われることもありました。面接前に会社が何をしているか、大まかな事業内容を理解しておくことが重要です。なぜなら、履歴書が通過するのは技術が合っているか、または似たようなプロジェクトがあるからであり、これにより二次面接で答えられなくなるのを避けられます。また、同じ都市での面接はできるだけ誠実に行うべきです。なぜなら、お互いのHRや管理職が知り合いである可能性があるからです。
二、面接内容まとめ:
バックエンド技術の要点:オブジェクト指向、一般的なアルゴリズムとその実装、一般的なデザインパターン、C#の基礎、.NET Core(ミドルウェア、.NETとの違い、IOC/DI、AOP、国産フレームワーク(Furion))、EF Core と ORM 関連、マルチスレッド、パフォーマンス最適化、キャッシュ(Redis、MongoDB)、MQ、マイクロサービス、分散(少なめ)、Docker(少なめ)、CI/CD(少なめ)、Linux(少なめ)、シャーディング(少なめ)。
データベース技術の要点:SQL構文、インデックス、クエリ最適化、ストアドプロシージャ、主要なデータベースの違い(SQL Server、MySQL、PostgreSQL(少なめ))、デッドロック、トランザクション、関数、B+ツリー、赤黒木、Bツリー(この部分はごくわずか)。
フロントエンド技術の要点:Vue、jQuery、uni-app。
業務関連:1. 顧客や現場と直接要件をやり取りするか、どのように行っているか。2. プロジェクトの機能やシナリオを説明し、問題に直面したか、どのように解決したか。
面接問題(覚えている部分):
- オブジェクト指向についての理解とその特徴を述べてください。
参考回答:https://blog.csdn.net/weixin_51201930/article/details/122652397
回答:オブジェクト指向とは、現実世界の事物をオブジェクトとして抽象化し、各オブジェクトが対応するメソッドと属性を持つことを指します。オブジェクト指向の三大特性は、継承、カプセル化、ポリモーフィズムです。
- 普段の仕事でどのようなアルゴリズムを使用していますか?
参考回答:https://blog.csdn.net/dreame_life/article/details/104342490 https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
回答:再帰、バブル、二分探索。(この質問はデータ構造を尋ねていると思います。参考:https://blog.csdn.net/heyuchang666/article/details/49891635)
- 一般的なデザインパターンにはどのようなものがありますか?仕事ではどのパターンを使用していますか?
参考回答:https://www.cnblogs.com/abcdwxc/archive/2007/10/30/942834.html
回答:アダプター、デコレーター、抽象ファクトリー
- C#の値型と参照型にはどのようなものがありますか?違いは何ですか?
参考:https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/value-types
回答:値型には整数型、浮動小数点型、ブール型、構造体、列挙型、タプル、charがあります。参照型にはclass、interface、delegate、record、dynamic、object、stringがあります。
値型の変数はその型のインスタンスを含みます。参照型の変数は型のインスタンスへの参照を含む点で異なります。
値型はすべて暗黙的にSystem.ValueTypeから派生します。
- C#のコレクションにはどのようなものがありますか?その違いは何ですか?
参考:https://learn.microsoft.com/ja-jp/dotnet/standard/collections/commonly-used-collection-types
回答:よく使われるものはArrayList、List、Queue、Hashtable、Dictionaryです。違いはスレッドセーフと適用シナリオにあります。例えば、Listの読み取りはスレッドセーフですがArrayListはそうではありません。Listはジェネリックを使用してソートや検索が可能で、Dictionaryはキーと値のペアのディクショナリコレクションです。Queueは先入れ先出しのオブジェクトコレクションを表し、項目への先入れ先出しアクセスが必要な場合に使用します。ハッシュテーブルの各項目はキーと値のペアを持ち、ハッシュキーを使用してコレクション内の項目に直接アクセスできます。
- char、string、StringBuilderの違いは何ですか?
参考:https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/strings/ https://blog.csdn.net/qq_44034384/article/details/106739003
回答:charは単一の文字を格納するために使用されます。stringはcharオブジェクトの読み取り専用の順序付きコレクションであり、stringを変更するたびに新しいstringオブジェクトが作成されます。StringBuilderクラスは異なり、操作は毎回自身のオブジェクトに対して行われ、新しいオブジェクトを生成しません。そのため、内容が増えるにつれて占有スペースが拡張され、大量の変更操作を行う際に匿名オブジェクトが多数生成されてシステムパフォーマンスに影響を与えることはありません。
- .NET Framework、.NET Standard、.NET Core、.NET 5/6/7の違いは何ですか?
回答:.NET Frameworkと.NET Coreはどちらも複数の種類のアプリケーションを生成するために使用できます。.NET FrameworkフレームワークはWindows上でのみ動作します。
.NET Coreは、Windows、Linux、macOSオペレーティングシステム向けの無料のオープンソースでホストされるフレームワークです。
.NET 5/6/7は.NET Coreの安定バージョンです。
.NET Standardは一連の仕様であり、.NET Frameworkの特定のアセンブリを.NET Coreに対応付ける関係テーブルのようなものです。
- .NET Coreのミドルウェアとパイプラインについて説明してください。
参考:https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/middleware/?view=aspnetcore-6.0
回答:アプリケーションの完全なリクエスト処理をパイプラインと呼びます。ミドルウェアは、リクエストとレスポンスを処理するためにアプリケーションパイプラインに組み込まれるコンポーネントであり、ログ記録、例外キャッチ、リクエストインターセプト、キャッシュ処理によく使用されます。
- IOC、DI、AOPとは何ですか?なぜ使用するのですか?どのように使用しますか?
参考:https://learn.microsoft.com/ja-jp/dotnet/core/extensions/dependency-injection
IOCは制御の反転(Inversion of Control)であり、それは考え方です。クラスの具体的な実装を外部のコンテナに委ね、クラスが直接インスタンス化するのではなく、この反転によって制御権を外部コンテナに移すことで、クラス間の結合度を低減します。
DIは依存性注入(Dependency Injection)であり、IOCの具体的な実装です。クラス間の依存関係を結びつける役割を担い、次の3つのライフサイクルがあります:
- Transient:サービスは常に異なり、サービスが取得されるたびに新しいインスタンスが作成されます。
- Scoped:サービスは新しいスコープでのみ変更されますが、特定のスコープ内では同じインスタンスです。
- Singleton:サービスは常に同じで、新しいインスタンスは1回だけ作成されます。
ネイティブのDIはコンストラクタインジェクションまたはServiceProvider.CreateScope.GetServiceによるインスタンス取得をサポートします。注入を拡張する必要がある場合はAutofacを使用できます。
AOPはアスペクト指向プログラミングであり、プリコンパイル方式や実行時動的プロキシを使用してプログラム機能の統一的なメンテナンスを実現する技術です。私の理解では、実行時にDLLを動的にマッピングしてクラスインスタンスを取得することです。
- EF Core と ORM 関連
参考:https://blog.csdn.net/u011854789/article/details/72783902
回答:ORMはオブジェクト指向のオブジェクトモデルとリレーショナルデータベースのデータ構造との間の相互変換を指します。EFには3つのプログラミング方法があります:Database First、Model First、Code First。
マルチスレッドについてはこちらを参照:https://www.yuque.com/zhanglin-l1ak6/ll06t7/tkq97k
Redis面接についてはこちらを参照:https://blog.csdn.net/adminpd/article/details/122934938
インデックスとは何ですか?インデックスにはどのような種類がありますか?(SQL Server)
参考:https://learn.microsoft.com/ja-jp/sql/relational-databases/indexes/indexes?view=sql-server-ver16
回答:インデックスはクエリのパフォーマンスを高速化するために使用されます。テーブルからのデータ取得をより迅速に行えるようにします。
- ストアドプロシージャとは何ですか?その長所と短所は何ですか?
回答:ストアドプロシージャは、特定の機能を達成するためのSQL文の集合であり、データベースに格納されます。
ストアドプロシージャの長所:
-
- 効率が高い
ストアドプロシージャは一度コンパイルされるとデータベースに保存され、呼び出しのたびに直接実行されます。一方、通常のSQL文は他の場所(例:メモ帳)に保存する必要があり、実行前に解析・コンパイルが必要です。そのため、ストアドプロシージャの方が効率的です。
-
- ネットワークトラフィックの削減
ストアドプロシージャはコンパイルされてデータベースに置かれるため、リモートから呼び出す際に大量の文字列型のSQL文を転送する必要がありません。
-
- 再利用性が高い
ストアドプロシージャは特定の機能のために作成されることが多く、同じ機能が必要な場合に再度そのストアドプロシージャを呼び出すことができます。
-
- 保守性が高い
機能要件が少し変更された場合、以前のストアドプロシージャを修正するのが比較的容易で、労力も少なくて済みます。
-
- セキュリティが高い
特定の機能を実現するストアドプロシージャは通常、特定のユーザーのみが使用でき、使用に制限があるため、より安全です。
ストアドプロシージャの短所:
- データベースごとにストアドプロシージャの構文がほぼ異なり、保守が非常に困難(汎用性がない)
- ビジネスロジックをデータベースに置くと、イテレーションが難しい
手書き例:
create proc StuProc
@sname varchar(100)
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc '赵雷' -- 実行文
- デッドロックとは何ですか?どのように回避しますか?
回答:デッドロックとは、2つ以上のプロセスが実行中にリソースを奪い合うことで相互に待機状態になり、外部からの力がなければどちらも進行できなくなる現象です。同じ順序でオブジェクトにアクセスする、トランザクション内でのユーザーインタラクションを避ける、トランザクションを短く保ち1つのバッチにまとめる、フルテーブルスキャンを避けるためにインデックスを適切に設計するなどが対策です。
SqlServer 関数の作成:https://www.cnblogs.com/Brambling/p/6686947.html
トランザクションとは何ですか?その特徴は何ですか?
回答:トランザクションは一種のメカニズムであり、操作のシーケンスです。一連のデータベース操作コマンドを含みます。トランザクションはすべてのコマンドを一つの全体としてシステムに提出または取り消しを要求します。つまり、この一連のデータベースコマンドはすべて実行されるか、または全く実行されないかのどちらかです。したがって、トランザクションは分割不可能な作業論理単位です。トランザクションには4つの特性、すなわち原子性(Atomicity)、一貫性(Consistency)、分離性(Isolation)、永続性(Durability)があり、これら4つの特性は通常ACIDと略されます。
フロントエンド部分:Vue関連の基礎知識、コンポーネント間通信と再利用、jQueryとの違い、JavaScript構文、JavaScript基礎、よく使われるUIフレームワークなど。
また、キャッシュミドルウェア、メッセージミドルウェア、ログミドルウェア(ログ報告と統計)、テーブル分割・データベース分割、キャッシュの永続性と一貫性、マスタースレーブ同期、データの読み書き分離、データベースのB+ツリー、赤黒木、Bツリーなども質問されることがあります。