C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2011/03/09 01:13

Java/.NETアーキテクトを見分ける10の質問 ( by @yfakariya ) - 猫とC#について書くmatarilloの日記

おかしなところあったら誰か突っ込みお願いします。。。


1. try-catch-finally が try-catch および try-finally について不適切である理由を述べよ(try-catch-finally のほうが多くの場合適切であると思う場合はその理由を述べよ)
どれが適切かはケースバイケース。
try-catch のスコープはできるだけ狭くすることが推奨されるため、それに従うと try-catch-finally よりも、try-finally の中に try-catch がネストされることが多くなる。が、個人的にはキャッチ対象の例外が他にスローされる可能性がないのならば、スコープを広げて try-catch-finally を使用しても良いと考える。

2. Unicode で制御文字を検出する正規表現を記述せよ。
[^\d\w\s]
自信がなかったので PowerShell で検証したけど問題なさそうかな。。。

3. UTC 時刻とローカル時刻のメリットとデメリットについて説明せよ。
UTC 時刻はロケール非依存のため世界共通で使用できるが、直観的ではない。
ローカル時刻は直観的であるが、ロケール依存のため世界共通で使用できない。

4. 基底クラスとインターフェイスの使い分けについて述べよ。ただし、セマンティクスとバージョニングの観点は必ず含めること。
ユーザーが実装するべき型に対して、概念的に汎化しているのならば基底クラス。
ユーザーが実装するべき型に対して、規約を表すのならばインターフェイス。

バージョニングってのは、、、基底クラスならば型を拡張する際に仮想メソッドとすることでユーザー側の対応を必須にせずに済む、ってことかな…?使い分けの基準にはしないなぁ。。。

5. Windows NT と Linux それぞれにおいて、ファイルのアップロードプログラムのセキュリティのためのアクセス権およびユーザー権限の設定について述べよ。
次のような要件を想定。
・アプリケーション形態:Web Application (イントラネット)
・認証方式:Windows 認証
・ファイルの格納方法:ファイルシステム
・アップロード許可範囲:限られたユーザーのみ

この場合、グループを作成し、そのグループに対して Write のアクセス権を付加。アップロードを許可するユーザーはそのグループに所属させる。

Linux はさっぱり。

6. 分散環境における同期呼び出しと非同期呼び出しについて、それぞれの利点と欠点を上げ、比較せよ。
同期呼び出しはシンプルに処理できるが、処理中の空きリソースが無駄。
非同期呼び出しはリソースを有効的に使用できるが、結果を受け取る必要がある場合は処理が複雑になりがち。

7. Web AP のスケーラビリティを向上させるための方法を 3 つ以上上げよ。必要であればまだ未リリースの技術を使用しても構わない。
・ロードバランサー
・Key-Value ストア
・分散処理フレームワーク

8. TCP/IP プロトコル上で WS-Reliable Messaging を採用する意義を述べよ。
TCP/IP はプロトコルレベルでは信頼性を保証しないけれど、WS-Reliable Messaging を採用することで信頼性を保証できるようになる。

9. MVC パターンの目的、メリット、デメリットを述べよ。
テスト容易性や保守性が向上する。
MVC パターンを想定して作られていない高機能 UI コントロールとの相性が悪い場合がある。

10. レイヤーアーキテクチャの欠点と適用すべきでない事例をあげよ。
レイヤーアーキテクチャをドメインモデル主体の3層構造として。
欠点としては、仕様として扱うデータの種類が増えた場合、全レイヤーに影響が出る。
適用すべきでない事例は、ドメインロジックをほぼ持たず、画面上の項目とデータベース上の項目がほぼ一致する単純なデータ管理システム等には適用すべきではない。

スポンサーサイト



タグ: .NET
2007/12/04 22:10
2006/09/25 19:07
前に書いたTransactionScopeによる暗黙のトランザクションの実装や、COM+による自動トランザクションは、MSDTCというWindowsサービスを利用している。
これらのトランザクション実装は、MSDTCが起動されていないと正常に動作しない。

MSDTCは Distributed Transaction Coordinator という名前でWindowsサービスに登録されている。
MSDTCが起動されていない場合は、以下のようにしてMSDTCが自動で起動するよう設定する。


  1. [ コントロール パネル ] - [ 管理ツール ] - [ サービス ] を開く。

  2. サービスの [ Distributed Transaction Coordinator ] という項目を右クリックし、プロパティを開く。

  3. [ 全般 ]タブの中にある [ スタートアップの種類 ] を [ 自動 ] に変更する。

  4. [ 開始 ] ボタンをクリックする。

  5. [ OK ] ボタンをクリックする。


これで正常にトランザクション処理が行われる。

また、SQL Server 2005のドキュメントの [ 2.5.3 Windows で MS DTC が一部無効になっている ] という項目を見ると、MS DTCを完全に有効にする手順が記載されている。

分散トランザクションを使用するリンク サーバー、分散クエリ、およびリモート ストアド プロシージャが、この問題の影響を受ける場合があります。
このような問題を回避するには、SQL Server 2005 がインストールされているサーバーで MS DTC を完全に有効にする必要があります。

と書いてあるので、そういう問題に遭遇した場合は完全に有効にすればいい(遭遇しなきゃしなくていい)ってことかな。たぶん。
2006/09/15 23:28
.NET Frameworkでは、トランザクションの実装方法が複数存在する。
大きく分けると明示的なトランザクションと暗黙的なトランザクションに分かれる。
明示的なトランザクションはトランザクションの開始,コミット,ロールバックを明示的に行う管理方法。トランザクションの開始、終了が明確に決まる。
暗黙的なトランザクションはトランザクションの開始,コミット,ロールバックが暗黙的に行われる管理方法。既にトランザクションが開始されていたらそのトランザクションに参加(便乗)する、といったことが可能。

以下に、.NET Frameworkでのトランザクション実装方法を挙げる。

【 従来からあるトランザクション実装方法 】
従来からある方法として、データベーストランザクション,手動トランザクション,自動トランザクションがある。

[ データベーストランザクション ]
ストアドプロシージャ内でのトランザクション処理。
SQL Server 2005 なら、SQL CLRにより、C#やVB.NETなどの.NET言語で実装できる。
@IT:.NETエンタープライズWebアプリケーション開発技術大全 3.2 データベーストランザクション
データベース エンジンの .NET Framework プログラミング

[ 手動トランザクション ]
ADO.NETが提供する、明示的なトランザクション処理。
トランザクションの実行
@IT:.NETエンタープライズWebアプリケーション開発技術大全 3.3 マニュアルトランザクション
SqlTransaction クラス (System.Data.SqlClient)
OracleTransaction クラス (System.Data.OracleClient)
DbTransaction クラス (System.Data.Common) (.NET Framework2.0で新しく追加された。)

[ 自動トランザクション ]
COM+を利用した、暗黙的なトランザクション処理。
COM+を利用するには、ServicedComponentクラスを継承させる。また、アセンブリを厳密名で署名し、サービスコンポーネントとして登録する必要がある。
自動トランザクションと .NET Framework クラス
方法 : .NET Framework クラスで自動トランザクションを使用する
サービス コンポーネントの作成
@IT:.NETエンタープライズWebアプリケーション開発技術大全 3.4 自動トランザクション
System.EnterpriseServices 名前空間
ServicedComponent クラス (System.EnterpriseServices)
TransactionAttribute クラス (System.EnterpriseServices)


【 .NET2.0から提供される、System.Transactions名前空間 】
.NET2.0では、新しくSystem.Transactions名前空間(System.Transactions.dll)が追加された。主なクラスとして、明示的なトランザクションを提供するCommittableTransactionクラスと、暗黙的なトランザクションを提供するTransactionScopeクラスがある。
TransactionScopeの方が手軽で、CommittableTransactionよりもTransactionScopeを使用すべきである。
トランザクション アプリケーションの作成
System.Transactions で提供される機能
.NET Framework 2.0 の System.Transactions について
トランザクション管理の昇格
System.Transactions 名前空間

[ CommittableTransactionによる明示的なトランザクション ]
明示的なトランザクション処理。CommittableTransactionよりもTransactionScopeを使用すべき。
CommittableTransaction を使用した明示的なトランザクションの実装
CommittableTransaction クラス (System.Transactions)
Transaction クラス (System.Transactions)

[ TransactionScopeによる暗黙的なトランザクション ]
COM+による自動トランザクションよりも遥かに容易に実現できる、暗黙的なトランザクション処理。
トランザクション スコープを使用した暗黙的なトランザクションの実装
10 行でズバリ !! TransactionScope の利用 (C#)
Enterprise Service および COM+ トランザクションとの相互運用性
TransactionScope クラス (System.Transactions)
TransactionScopeOption 列挙体 (System.Transactions)