2005年2月の過去ログ

 

以前にもこのブログで取り上げましたが、Scott Hanselmanさんのブログから続きを取り上げ、この場で考えていきたいと思います。


更新:一応翻訳しました。回答は後ほどこのブログで。


  • Describe the difference between Interface-oriented, Object-oriented and Aspect-oriented programming.
    (インタフェース指向、オブジェクト指向、アスペクト指向のそれぞれの違いを述べなさい。)

  • Describe what an Interface is and how it’s different from a Class.
    (Interfaceは何か述べなさい。それが普通のクラスとどう違うかも述べなさい。)

  • What is Reflection?
    (Reflectionとは何か?)

  • What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP?
    (ASMXを使用したWeb ServiceとSOAPを使用した.NET Remotingの違いは?)

  • Are the type system represented by XmlSchema and the CLS isomorphic?
    (意味がわかりません。特にCLS isomorphic。わかる人助けてください。)

  • Conceptually, what is the difference between early-binding and late-binding?
    (概念的にアーリーバインディングとレイトバインディングの違いを述べよ。)

  • Is using Assembly.Load a static reference or dynamic reference?
    (Assembly.Loadを使用することは静的参照かそれとも動的参照か。)

  • When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?
    (どういう場合にAssembly.LoadFromを使用し、また他のどういう場合にAssembly.LoadFileを使用するのが適当か。)

  • What is an Asssembly Qualified Name? Is it a filename? How is it different?
    (Assembly Qualified名とは何か?ファイル名との違いを述べよ。)

  • Is this valid? Assembly.Load(”foo.dll”);
    (Assembly.Load(”foo.dll”);は適当か。)

  • How is a strongly-named assembly different from one that isn’t strongly-named?
    (strongネームアセンブリとそうではないアセンブリの違いを述べよ。)

  • Can DateTimes be null?
    (DateTimeはnullになり得るか。)

  • What is the JIT? What is NGEN? What are limitations and benefits of each?
    (JITとは何か。NGenとは何か。それぞれの制限と利益を述べよ。)

  • How does the generational garbage collector in the .NET CLR manage object lifetime? What is non-deterministic finalization?
    (.NETのCLRにおいて世代ガーベージコレクタはどのようにオブジェクトのライフタイムを管理するか述べよ。オブジェクトの非決定的な終了とは?)

  • What is the difference between Finalize() and Dispose()?
    (Finalize()とDispose()の違いを述べよ。)

  • How is the using() pattern useful? What is IDisposable? How does it support deterministic finalization?
    (using()使用したパターンはどのように役立つか。IDisposableとは何か。それはどのようにオブジェクトの決定的な終了を促すか。)

  • What does this useful command line do? tasklist /m “mscor*”
    (tasklist /m “mscor*” のコマンドによってどのような情報が得られるか。)

  • What is the difference between in-proc and out-of-proc?
    (インプロセスとアウトオブプロセスの違いを述べよ。)

  • What technology enables out-of-proc communication in .NET?
    (.NETにおいてどの技術がアウトオブプロセス間のコミュニケーションを可能にするか。)

  • When you’re running a component within ASP.NET, what process is it running within on Windows XP? Windows 2000? Windows 2003?
    (Windows XP, Windows 2000, またはWindows 2003上でASP .NET内でコンポーネントを実行しているときに、どのプロセス内でコンポーネントは実行されているか答えよ。)

     


  • Data Link Propertiesなるものをご存じだろうか。ある程度経験のある方だったら絶対一度は目にしたことのあるUIだと思います。下のUIからデータソースへのアクセスができるかどうかをチェックし、ConnectionStringを返してくれます。これをWindows上で直接試すには、デスクトップ上にTest.txtというテキストファイルを作って、拡張子をudlに買えてやります。udlに変えてやるとアイコンが変わり、それをダブルクリックしてやると下のようなダイアログボックスが出てきます。これはVB .NETやC#からも呼び出し可能です。COMオブジェクトなのでVBScriptなどからも呼び出し可能でしょう。


    DataLinkProperties.gif


    上のコンポーネントはCOMオブジェクトで下の画像でハイライトされているコンポーネントを参照してやるとそれが使えるようになります。ちなみに名前空間はMSDASCです。


    OLEDBServiceComponent1.0TypeLibrary.gif


    ちなみにコードはこんな感じでいけます。


    Dim Instance As New DataLinksClass
    Dim NewConn As Object = Instance.PromptNew()

    If Not NewConn Is Nothing Then
    Dim connection As Connection = CType(NewConn, Connection)
    txtConnStr.Text = connection.ConnectionString
    <以下省略>


    Data Link Propertiesから返されたConnection Stringは.NETではSystem.Data.OleDb.OleDbConnectionオブジェクトで直接使えます。


     


    うーむ、パブリックベータは6月になりそうですね。前は3月末とかじゃなかったですか?だんだんリリースがのびてきてます。でもその前にこれから2ヶ月ぐらいにわたって「暫定ビルド」をリリースするそうです。Beta1はすでにインストールしてありますが、Beta2はさらに待ち遠しい。今年の夏はまた忙しくなりそうなのでどれだけBeta 2で遊べるかわからないけど、いろいろやってみたいと思っておりますです。


    ここにVS2005のC#におけるIDEの向上点10が載っています。早くリリースしてくれー



    StreamをByte配列に変換する必要があるんですが、私にはこれぐらいしか思いつきませんでした。他にもっと効果的な方法はありますでしょうか?


    Public Shared Function ConvertStreamToByteArray(ByVal Stream As Stream) As Byte()
    Stream.Position = 0 <-追加しました。これってなくてはいけないみたいです。
    Dim sr As New StreamReader(Stream)
    Dim Content As String = sr.ReadToEnd()
    Dim bytes() As Byte = System.Text.Encoding.Default.GetBytes(Content)
    Return bytes
    End Function


    以前のブログアイテムに関連するものなんですが、.NET CPUなるものがあるようです。チップの中にCLRが組み込まれているようです。我々にとってはこういうのどんどん出てきて欲しいですよね。


    JIT

    JITが必要なのは現在存在するCPUがIL(中間言語)を直接実行できないから。将来、ILを直接実行できるようになったらJITが必要じゃなくなりますね。ちょっと思い浮かんだので、書いてみました。


    前に書きました質問の答えです。間違えやご指摘ありましたら、遠慮なく怒ってください。



    1. プロセスとスレッドの違いを述べなさい。
      プロセスとは実行されたEXEのことであり、一つのプロセスには少なくとも一つのスレッドが存在する。スレッドは独自で存在することは不可能である。

    2. Windows Serviceとは何か?普通のEXEと比べてどのようなライフサイクルの違いがあるか?
      Windows Serviceは開始、一時停止、停止の状態がある。サービスが開始している状態だったら、再スタートすることができる。これは設定を変えた後、またはキャッシュなどの問題が発生したときに有効である。Windows Serviceはユーザがログインしていなくても自動的にスタートするように設定しておけばプロセスを開始してくれる。

    3. Windowsにおける一つのプロセスが処理できる最大のメモリの容量は?これはシステムに対するバーチャルメモリの最大値とは異なるか?これはシステムデザインにどのように影響するのか?
      この質問はちょっとリサーチが必要です。私には今のところよくわかりません。

    4. EXEとDLLの違いは?
      EXEにははプロセスをスタートさせるエントリーポイントがあり、独自で実行することができる。DLLはEXEのコンテキストで動作する。DLLは必ずEXEから呼び出されて初めて動作するものである。
      TaskManager.gif

    5. 厳密な型と弱い型の違いは?どちらが好ましいか?またそれはどうしてか?
      厳密な型を使用するとオブジェクトのメンバーを使用するときにキャストしなくてもすむ。つまり、Boxingと呼ばれる手法でクラスを一般的なObjectに格納しておき、それをUnboxingして元の型に変換(キャスト)するときにシステムに多少の負荷がかかる。厳密な型はそれがなくシステムにはそれほど負荷がかからない。もっと大きな利点は、実行時のエラーよりもコンパイル時のエラーにより、より多くのバグをコンパイル時に発見できるのが厳密な型の利点である。従って、厳密な型が好ましい。

    6. Windows Serverファミリーには3つのコンポーネントコンテイナーが存在するが、それらをすべてあげよ。
      COM+, .NET Remoting, IIS (?) これはとっても自信がないです。

    7. PIDとは何か?システムの問題を解決するときにどのように役立つか?
      PID = Process IDで、それぞれのプロセスを見分ける。プロセスが暴走したり、メモリーリークを起こしているときにはそれを元にプロセスをkillすることが可能である。

    8. いくつのプロセスが一つのTCP/IPのポートをリッスンできる
      一つだけ。

    9. GACとは何か?それによってどのような問題が解決されるか?
      Global Assembly Cacheの略。複数のアプリケーションで一つのDLLを共有するためのメカニズム。バージョンごとに登録できるのでDLL Hellのような事態を避けることができる。(ちなみに私はほとんどこの技術を使ったことはありません。必要性を感じない・・・)


    師匠と尊敬しますScott Hanselmanさんのブログに、.NETエンジニアが答えられるべき質問集が掲載されました。どれもかなり突っ込んだ質問で、自分の.NETの知識の見直しになるでしょう。時間があったら日本語にして訳してここで考えていきたいと思います。




    • Everyone who writes code(コードを書く人すべて)



      • Describe the difference between a Thread and a Process?
        (スレッドとプロセスの違いを述べなさい。)
      • What is a Windows Service and how does its lifecycle differ from a “standard” EXE?
        (Windows Serviceとは何か?普通のEXEと比べてどのようなライフサイクルの違いがあるか?)
      • What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?
        (Windowsにおける一つのプロセスが処理できる最大のメモリの容量は?これはシステムに対するバーチャルメモリの最大値とは異なるか?これはシステムデザインにどのように影響するのか?)
      • What is the difference between an EXE and a DLL?
        (EXEとDLLの違いは?)
      • What is strong-typing versus weak-typing? Which is preferred? Why?
        (厳密な型と弱い型の違いは?どちらが好ましいか?またそれはどうしてか?)
      • Corillian’s product is a “Component Container.” Name at least 3 component containers that ship now with the Windows Server Family.
        (Windows Serverファミリーには3つのコンポーネントコンテイナーが存在するが、それらをすべてあげよ。)
      • What is a PID? How is it useful when troubleshooting a system?
        (PIDとは何か?システムの問題を解決するときにどのように役立つか?)
      • How many processes can listen on a single TCP/IP port?
        (いくつのプロセスが一つのTCP/IPのポートをリッスンできる?)
      • What is the GAC? What problem does it solve?
        (GACとは何か?それによってどのような問題が解決されるか?)

    いくつかは簡単なのもありますが、結構手ごわいものばかり。後ほど解答を載せたいと思います。わかった方は、コメントに書いてください。よろしくお願いします。


    ウェブアプリでも大変Windows Formアプリに近いことができるんですが、今日その一環としてAlt+Sなどのショートカットキーをどうにかしてウェブアプリでもできないかとがんばっていました。一時間ぐらいリサーチしてましたが、できなかったのであきらめかけようとしてたら同僚が、「俺にもリサーチさせろ」と言ってきました。すると20分ぐらいしたら、できたぞ!といって問題を解決しやがったのです。私は初めはこんな感じでやっていました。


    <input type=”button” onclick=”SomeFunction();” value=”Save” id=”btnSave” accesskey=”s”>


    でも上の方法だと、アンダーラインがSの下につきません。value=”Save”とやってもそのまま表示されてしまいます。どうにかしてアンダーラインをつけようとtext-decoration:underlineなどをやってみたのですが、だめでした。同僚が取った方法は


    <button onclick=”SomeFunction();” id=”btnSave” accesskey=”s”><u>S</u>ave</button>


    こうするとSの下にきちんとアンダーラインがついたボタンができて、Alt+Sを押すとonclickイベントが起こります。同僚に簡単に解決されて悔しいけど、非常に面白いと思いました。お試しあれ。