試験 70-483 C＃ でのプログラミング について

# 概要

試験時間・・・120分(+冒頭オリエンテーション30分)
問題数・・・・40-60問
合格点・・・・700点以上

・日本語公式ページ
https://www.microsoft.com/ja-jp/learning/exam-70-483.aspx

・試験のポリシーと FAQ
https://www.microsoft.com/ja-jp/learning/certification-exam-policies.aspx

試験範囲は以下の通り。

# 範囲

1. プログラム フローの管理(25 - 30%)
2. 型の作成と使用(25 - 30%)
3. アプリケーションのデバッグとセキュリティの実装(25 - 30%)
4. データ アクセスの実装(25 - 30%)

出題割合は均等で、各10～18問と思われる。
以下、個々の範囲を確認していく。

# プログラム フローの管理

参考：
[Async および Await を使用した非同期プログラミング (C#)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/index)
[マネージド スレッド処理](https://docs.microsoft.com/ja-jp/dotnet/standard/threading/)
[選択ステートメント (C# リファレンス)](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/selection-statements)

1. マルチスレッド処理と非同期処理を実装する
    - Parallel.For メソッド, PLINQ, Tasksを含むタスク並列ライブラリを使用する。継続タスクを作成する。ThreadPoolを使用してスレッドを生成する。UIのブロックを解除する。 asyncとawait keywordsを使う。並行コレクションを使用してデータを管理する
2. マルチスレッドを管理する
    - リソースの同期、ロックの実装、長時間実行されるタスクのキャンセル、スレッドセーフなメソッドの実装による競合状態の処理
3. プログラム フローを実装する
    - コレクションと配列項目の反復処理、switch ステートメント、if/then、および演算子を使用したプログラム決定、式の評価
4. イベントとコールバックを作成および実装する
    - イベント ハンドラーの作成、イベントのサブスクライブとサブスクライブ解除、組み込みのデリゲート型を使用したイベントの作成、デリゲートの作成、ラムダ式、匿名メソッド
5. 例外処理を実装する
    - SQL例外、ネットワーク例外、通信例外、ネットワークタイムアウト例外を含む例外タイプを処理する。catchステートメントを使用する。例外の基本クラスを使用する。 try-catchfinallyブロックを実装する。 例外をスローする。 例外を再起する。 カスタム例外を作成する。 内側の例外を処理する。 集約例外を処理する。

# 型の作成と使用

参考：
[型 (C# プログラミング ガイド)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/types/index)
[クラスと構造体 (C# プログラミング ガイド)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/index)
[オブジェクト指向プログラミング (C#)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/object-oriented-programming)

1. 型を作成する
    - 値の型 (構造体、列挙型)、参照型、ジェネリック型、コンストラクター、静的変数、メソッド、クラス、拡張メソッド、オプションおよび名前付きパラメーター、インデックス付きプロパティの作成、オーバーロード メソッドとオーバーライド メソッドの作成
2. 型を使用する
    - ボックスまたはアンボックスによる値の型間の変換、型のキャスト、型の変換、動的な型の処理、アンマネージ コードの相互運用性の確保 (動的なキーワードなど)
3. カプセル化を強制実行する
    - プロパティ、アクセサー (public、private、protected)、および明示的なインターフェイスの実装によるカプセル化の強制実行
4. クラス階層の作成および実装
    - インターフェイスの設計と実装、基本クラスからの継承、IComparable、IEnumerable、IDisposable、および IUnknown インターフェイスに基づくクラスの作成と実装
5. リフレクションを使用して実行時に型を検索、実行、および作成する
    - 属性を作成して適用する。 属性を読み込む。 CodeDomとLambda式を使用して実行時にコードを生成する。Assembly、PropertyInfo、MethodInfo、Typeを含む　System.Reflection名前空間の型を使用する 
6. オブジェクトのライフサイクルを管理する
    - アンマネージ リソースの管理、IDisposable の実装 (終了処理との対話を含む)、Using ステートメントを使用した IDisposable の管理、終了処理とガベージ コレクションの管理
7. 文字列を操作する
    - StringBuilder、StringWriter、およびStringReaderクラスを使用して文字列を操作します。 検索文字列。 文字列メソッドを列挙する。 フォーマット文字列。 文字列補間を使う

# アプリケーションのデバッグとセキュリティの実装

参考：
[.NET の正規表現](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expressions)

1. アプリケーションの入力を検証する
    - JSONデータを検証する。 適切なデータ収集タイプを選択する。 データの完全性を管理する。 正規表現を評価して入力フォーマットを検証する。 組み込み関数を使用してデータ型とコンテンツを検証する
2. 対称および非対称の暗号化を実行する
    - 適切な暗号化アルゴリズムの選択、証明書の管理と作成、キー管理の実装、System.Security 名前空間の実装、データのハッシュ、ストリームの暗号化
3. アセンブリを管理する
    - アセンブリのバージョン管理、厳密な名前を使用したアセンブリの署名、side-by-side ホスティングの実装、グローバル アセンブリ キャッシュへのアセンブリの追加、WinMD アセンブリの作成
4. アプリケーションをデバッグする
    - コンパイラ ディレクティブの作成と管理、適切なビルドの種類の選択、データベース ファイルとシンボルのプログラミングの管理
5. アプリケーションに診断を実装する
    - ログ記録とトレースの実装、アプリケーションのプロファイリング、パフォーマンス カウンターの作成と監視、イベント ログへの書き込み

# データ アクセスの実装

参考：
[ファイル システムとレジストリ (C# プログラミング ガイド)](https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/file-system/index)

1. I/O 操作を実行する
    - ファイルとストリームの読み取りと書き込み、System.Net 名前空間のクラスを使用したネットワークからの読み取りと書き込み、非同期 I/O 操作の実装
2. データを使用する
    - データベースからのデータの取得、データベース内のデータの更新、JSON と XML データの使用、Web サービスを使用したデータの取得
3. LINQ を使用してデータとオブジェクトをクエリおよび操作する
    - 演算子を使用したデータのクエリ (projection、join、group、take、skip、aggregate)、メソッドベースの LINQ クエリの作成、クエリを含む構文を使用したデータのクエリ、匿名型を使用したデータの選択、クエリの強制実行、LINQ to XML を使用したデータ構造の読み取り、フィルター、作成、および変更
4. データをシリアル化および逆シリアル化する
   - バイナリ シリアル化、カスタム シリアル化、XML シリアライザー、JSON シリアライザー、およびデータ コントラクト シリアライザーを使用したデータのシリアル化と逆シリアル化
5. コレクションにデータを格納およびコレクションからデータを取得する
    - ディクショナリ、アレイ、リスト、セット、およびキューを使用したデータの格納と取得、コレクション型の選択、コレクションへのアイテムの追加およびコレクションからのアイテムの削除、型指定および型が指定されていないコレクションの使用、カスタム コレクションの実装、コレクション インターフェイスの実装

# 感想

- 結構範囲広い
- 70-480とどっちが容易か

以上