最近、2つの面接の質問に遭遇し、ボンデージ広告(RPM)

自分の家から資本への悪い私は、毎日虐殺、古いが迫っなかった仕事、それが憂鬱です。私は自宅で楽しんで会社を見つけるために、広告を作ることを余儀なく。もちろん、私は、ホームページ移動タイルの上に、このような広告を投げるつもりはなかったです。

そのため、最近の株狂気のインタビュー二人は出会った顔の質問を

最初のトピックは、インタビューは、対象のアップグレード版、私は最終的な結果が実行されるのかわからなかった時間を確認するとき、私は今日まで、その主なバージョンを満たし、非常に興味深いです。さらに騒ぎがなければ、次のトピック:
パブリッククラスA
{
  公共の静的なint型X;
  静的A()
  {
    X = BY + 1。
  }
}

パブリッククラスB
{
  パブリックstatic int型Y = AX + 1。
  静的B()
  {}
}

Console.WriteLineを( "X = {0}、Y = {1}"、AX、BY)。

出力結果を要求します。

実際に、私たちは前に見てきた静的コンストラクタをテーマに、実行順序を理解し、静的コンストラクタと、コンストラクタを調査することです。この質問創意工夫のタッチは、静的コンストラクタと静的メンバ初期化実行順序の二つのタイプにエスカレート。
我々は、すべての静的コンストラクタはタイプがロードされるときに実行している間の静的コンストラクタは、静的メンバの初期化とコンパイルされ、静的コンストラクタの一部であることを知っている、この質問の頭痛の目的は、最終的に見て非常に明白されていない、ということですファーストクラスのローディングまたはフロントロードタイプB。クラスローダは、内の他の言葉で、タイプBは、負荷に結合され、クラスAの静的コンストラクタを行う場合初めて Y = 0(XデフォルトようBY + 1この式フロント結果、タイプBは、ロードされなければなりませんゼロ)+ 1 = 1、X = 1(Yは)+ 1 = 2に初期化。最初の初期化は、クラスBの場合、結果は反対です。最後に、フロントロードタイプA、結果は、Y = 1、X = 2であるべきと考えています。しかし、実際に終わりを気にしませんでした。

一言で言えば、非常に一般的と言うための第2の話題今日はフィボナッチ数のNビットの再帰的なアルゴリズムを使用して計算されて、私はこのトピックは何度も何度も脳死せることができるかわかりませんテストプログラマは、基本的な品質は、反復再帰を使用してこの問題を認識することができるはず任意のプログラマは、N回よりも優れています。

ここでは、私が最初に再帰アルゴリズムをいまいましいソリューションを与えます:
int型いまいましいフィボナッチ機能(int型のインデックス)を計算する再帰アルゴリズム
{
  リターン・インデックス<= 2 1:?  気フィボナッチ再帰アルゴリズム演算関数(指数は- 1)+  フィボナッチ再帰アルゴリズム演算機能(インデックス- 2)いまいましいです。
}

ここで私は再び話をする必要があり、フィボナッチ計算列再帰的な反復よりもはるかに良いです!

このトピックは、脳の損傷が、少しの変化もありますが、Number関数のコンピューティングフィボナッチ最高の計算効率を実現し、それは非常に興味深い質問です。私たちはILモーメントの観点から開始する必要があり、私は、このようなILの次を考えることができ、本当に極端な効率性を追求するために、最も計算効率されていると思います:

私たちは、最初の2つのローカル変数がint型があることを前提としてい

その後:


ldc.i4.1
ldc.i4.1は// 2 1にスタックするプッシュします
ldc.i4.1
1 stloc.0は//再び押し、その後、ローカル変数0にそれを置きます。
:架空のラベル
スタックに//スタックのポップを追加し、その結果に2つの数値を追加します。
// DUP結果のスタックコピーのトップ
stloc.1 //が計算結果は、ローカル変数1に格納します
ldloc.0は//ローカル変数値0をスタック
スタック1へのローカル変数の値// ldloc.1
stloc.0 //データ・スタックのスタック(ローカル変数1)とローカル変数は0に割り当てられました。
今左スタック何を思いますか?2コピーがローカル変数を吐出するコピーを格納し、演算の結果がコピーであり、0が1であるローカル変数、スタック、スタック21で、ローカル変数aの値は、2であり、スタックの値、スタック212の上に、積層体2の上部は、ローカル変数0スタックに割り当てられている、スタック2はローカル変数で、ローカル変数0が2で、21です。
然后这里跳转到add
br 假想的Label

跳转后,堆栈继续把2+1计算完毕,堆栈上是3,然后2被推进去,堆栈变成3 2,然后两个局部变量的值都被变换为3,又一次循环,堆栈上是5,3被推进去,成为5 3,周而复始计算斐波那契。

接下来的问题是,怎么用C#来体现这个IL逻辑?你能想到的最接近的方案是什么呢?
另外一个问题是,其实这个IL还算不上是效率最高的,应该还有效率更高的算法,你找出来没?

最后容我大吼一声,谁赏口饭吃吧。。。。。

おすすめ

転載: www.cnblogs.com/xyy2019/p/11783357.html