【.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
//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);
}
}
}
}