1. 程式人生 > >【.NET程式設計師面試題----初級】第一卷

【.NET程式設計師面試題----初級】第一卷

//1.遞迴演算法求30位數字

        public static int MyFoun_04(int n)

        {

            //一組數值排序如下1、1、2、3、5、8、13、21、34....用遞迴求30位數字

            if (n<=1)

            {

                return 1;

            }

            return MyFoun_04(n - 1) + MyFoun_04(n - 2);

        }

//2.據要求寫SQL語句:取出表A第31到第40記錄(以自動增長的ID為主鍵,ID可能不是連續的)。

SELECT

 * FROM PersonsORDER BY Id OFFSET 2ROWS FETCH NEXT 3ROWS ONLY

//3.中的委託是什麼?事件是不是一種委託?事件和委託的關係。

委託(Delegate)是存有對某個方法的引用的一種引用型別變數。引用可在執行時被改變。

事件在類中宣告且生成,且通過使用同一個類或其他類中的委託與事件處理程式關聯。包含事件的類用於釋出事件。這被稱為 釋出器(publisher) 類。其他接受該事件的類被稱為 訂閱器(subscriber) 類

事件使用 釋出-訂閱(publisher-subscriber) 模型。

//4.用LINQ技術輸出MyNum陣列中所有大於100的偶數子項。

public static void MyFoun_07()

 {

       int[] MyNum = new int[] { 100, 20, 2, 8, 4, 104, 1, 21, 101, 102, 201, 202 };

            var Num=fromITEMinMyNum

             whereITEM% 2 == 0&& ITEM>100

             selectITEM;

            foreach (variteminNum)

            {

                Console.WriteLine(item);

            }

}

//5.C#中,string str=null與string str=“”,請儘量使用文字或影象說明其中區別

打個小明考試的比方:

string str=null:相當於小明沒有去考試沒有分數

String str=””:相當於小明考試了,卻只得了0分

此處分數代表分配的記憶體空間

//6..NET程式是如何編譯的

解答:

.NET的程式是由多種語言編譯的,如C#、VB、C++、J#等,但是最後都會由各自的編譯器編譯為一致的中間語言(IL)。最後由【CLR提供執行環境】,將中間語言編譯為【機器碼】,供CPU執行。

為了儘量減少中間程式碼編譯為機器程式碼的效能損失,中間語言採用【即使編譯】,也被稱為【JIT編譯】。這種編譯方式只編譯呼叫的程式碼部分,而並非全部編譯程式中的所有程式碼,編譯過的部分會儲存在記憶體中,下次執行時不需要重複編譯,當退出程式時,已編譯的部分程式碼才會被清除。這種策略極大的降低了中間程式碼的效能損失,使程式靈活性和效能相權衡的較佳方案。

 

.NET Framework的核心是CLR【公共語言執行庫】,CLR是.NET程式的執行庫。中間語言需要在CLR中執行並轉碼為機器碼,所以.NET程式必須依賴.NET Framework。

.NET Framework由【公共語言】執行時(CLR)和基類庫(BCL)組成,前者提供執行庫環境,而後者提供豐富的類庫,適合全部.NET程式語言呼叫。基類庫不僅封裝了各種型別,而且還支援很多服務

.NET程式的中間語言(IL)也被稱為託管程式碼,優點:

1. 平臺無關性。

2. JIT效能優化。

3. 語言互操作性。支援多種語言編寫程式,並編譯為中間語言。

/6.C#中值型別和引用型別的區別

值型別

基本:

(1)直接包含資料

(2)離開作用域將被從記憶體中清除

儲存:

(1)值型別變數將直接儲存資料,並存儲在記憶體的堆疊中

(2)堆疊從記憶體地址高位儲存資料

操作:

(1)直接操作其資料

引用型別

基本:

(1)只包含資料記憶體地址

(2)引用物件一直儲存在託管堆,.Net收集器選擇時自動將其銷燬。

儲存:

(1)引用型別變數只儲存資料記憶體地址的引用,資料儲存在託管堆中

(2)託管堆從記憶體地址低位儲存資料

操作:

(1)操作引用型別的引用資料的記憶體地址

//8.跳轉語句break,continue,return各有什麼作用,分別適用什麼環境

Break:

直接跳出當前的迴圈,從當前迴圈外面開始執行,忽略迴圈體中任何其他語句和迴圈條件測試。他只能跳出一層迴圈,如果你的迴圈是巢狀迴圈,那麼你需要按照你巢狀的層次,逐步使用break來跳出. 

Continue:    

也是終止當前的迴圈過程,但他並不跳出迴圈,而是繼續往下判斷迴圈條件執行語句.他只能結束迴圈中的一次過程,但不能終止迴圈繼續進行

Return:

語句可被用來使 正在執行分支程式返回到呼叫它方法。

//9.C#中的集合型別,並說說其特點

1. Array 陣列:用於儲存一組資料,建立陣列需要明確陣列儲存的型別及長度,一旦確定不可改變,沒有方便的新增,刪除,查詢方法。

2. ArrayList 動態陣列:可以根據元素個數的多少進行長度變化,可以儲存任意型別,並且自身已經具備了常用的操作方法,Add(),Remove(),Insert(),Indexof(), 在讀取,儲存的過程中會涉及到裝箱拆箱效率不高

3. Stack 棧:棧是一種特殊的資料型別,先儲存的元素最後被使用,這種操作通常稱為先進後出(FILO),通常的操作只有兩種,分別是入棧(壓棧),出棧。兩種操作的元素都在棧頂

4. Queue 佇列:佇列是一種先進先出的資料型別,常用操作有兩種,分別是入列出列,入列元素新增到隊尾,出列的元素從隊頭取出

5. Hashtable 雜湊表:是一種通過一個‘ 鍵 ’對應一個 ‘值’ 的形式進行資料儲存,類似陣列的下標訪問,此時的下標可以自定義

//10.百雞百錢

  public static void ほうほう_04()

   {

      int Cock = 0;//公雞

       int Hen = 0;//母雞

       int Chick = 0;//小雞

       int Price = 100;//總價錢

       for (Cock = 0; Cock < 20; Cock++)

         {

           for (Hen = 0; Hen < 34; Hen++)

             {

                Chick = 100-(Cock + Hen);

                  if ((Cock * 5 + Hen * 3 + Chick/3)== Price)

                   {

                         Console.WriteLine("公雞有:{0}只, 母雞有:{1}, 小雞有:{2}", Cock, Hen, Chick);

                    }

                }

          }

     }