2016年7月10日 星期日

C#題庫

以下為c#在面試中常出的問題,也有附上參考答案。

一.填空題
1.c#中的三元運算符是_____?
Ans. (expression) ? (if true) : (if false)
2.當整數a賦值給一個object物件時,整數a將會被_____?
Ans. 裝箱
3.類成員有_____種可訪問形式?

關鍵字 中文翻譯 同一Class 繼承的Class 同一namesapce 不同namesapce
Private 私有 不可 不可 不可
Protected 保護 不可 不可
Internal 內部 不可 不可
Protected Internal 保護內部 不可 Protected和Internal的聯集
Public 公共


4.public static const int A=1;這段代碼有錯誤麼?是什麼?
Ans. 錯誤,C#不允計變數宣告時同時指定static和const。
static 就是靜態,相對於動態的屬性方法...等,他不因物件不同而不同,在同一類別內,靜態的屬性是一致的,例如Math.PI就是一個靜態屬性。
const 就是常數,一但變數宣告初始化後就不能再assgin新的值。
5.float f=-123.567F;int i=(int)f;i的值現在是_____?
Ans.i=-123
6.利用operator聲明且僅聲明了==,有什麼錯誤麼?
Ans.還要聲明!=才可以。
7.委託聲明的關鍵字是______?
Ans. delegate
8.用sealed修飾的類有什麼特點?
類別禁止繼承,方法禁止覆寫
9.在Asp.net中所有的自定義用戶控制項都必須繼承自________?
Ans. System.Web.UI.UserControl
10.在.Net中所有可序列化的類都被標記為_____?
Ans. [Serializable]
11.在.Net託管代碼中我們不用擔心記憶體漏洞,這是因為有了______?
Ans. Garbage Collection

12.下面的代碼中有什麼錯誤嗎?_______
using System;
class A{
 public virtual void F(){
  Console.WriteLine("A.F");
 }
}
abstract class B:A{
 public abstract override void F();
}

Ans.雖B類別繼承A類別且覆寫F方法,但因為設成abstract所以無法創建B類別的實例。
13.當類T只聲明了私有實例構造函數時,則在T的程式文本外部,______(可以 or 不可以)從T
派生出新的類,____(可以 or 不可以)直接創建T的任何實例。

Ans.不可以(private 不可從外部呼叫)。不可以(private 不可從子類別覆蓋)。14.下面這段代碼有錯誤麼?
switch (i){
 case():
 CaseZero();
 break;
 
 case 1:
 CaseOne();
 break;
 
 case 2:
 dufault;
 CaseTwo();
 break;
}
Ans.case 不能是(),dufault;要改成default:
15.在.Net中,類System.Web.UI.Page 可以被繼承麼?
Ans.可以(一般的asp.net網頁預設會繼承System.Web.UI.Page)
------------------------------------------------------------------------------------------
二.簡答題
1.在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?
Ans. using指示詞:匯入某命名空間的類別
using陳述式:寫在using後()內的變數會在離開{}後呼叫Dispose()把佔用的資用釋放掉。
        new指示詞:用來指定該方法覆寫父類別的同名方法。
        new陳述式: 會動態產生一個新的物件。
2.在下面的例子裏
using System;
class A{
 public A(){
  PrintFields();
 }
public virtual void PrintFields(){}
}
class B:A{
 int x=1;
 int y;
 public B(){
  y=-1;
 }
 public override void PrintFields(){
  Console.WriteLine("x={0},y={1}",x,y);
 }
}
當使用new B()創建B的實例時,產生什麼輸出? Ans.x=1,y=0
創建B的實例時會有以下步驟
1.呼叫父類別A的建構子A()執行方法PrintFields()
2.因為方法PrinFields()被子類別B覆寫,所以會輸出x=1,y=0(因為B建構子還未呼叫,所以y仍是0)
3.呼叫子類別B的建構子B()把y設成-1
4.結束

3.下面的例子中
using System;
class A{
 public static int X;
 static A(){
  X=B.Y+1;
 }
}
class B{
 public static int Y=A.X+1;
 static B(){}
 static void Main(){
  Console.WriteLine("X={0},Y={1}",A.X,B.Y);
 }
}
產生的輸出結果是什麼?
Ans. X=1,Y=2
1. 建構類別會循序執行,此例中會先建構類別A再建構類別B
2. 在建構A類別呼叫A()時有使用到B.Y,此時B.Y因為B類別還未建構完成,所以B.Y=0
3. X=B.Y+1=0+1=1
4. 在建構B類別後,Y=A.X+1=1+1=2
5.所以A.X=1 B.Y=2

4.談談類和結構的區別?
Ans. 1.struct不支援繼承,class支援繼承
        2.struct是value type 存在stack,class是reference type 存在 heap

5.一個長度為10000的字串,通過隨機從a-z中抽取10000個字元組成。請用c#語言編寫主要程
序來實現。

Ans.
static void Main()
{
 string alphabet = "abcdefghijklmnopqrstuvwxyz";
 Random r = new Random();

 char[] s = new char[10000];
 for(int i = 0; i < s.Length; i++)
 {
  s[i] = alphabet[r.Next(26)] ;
 }
 string str = new string(s);

 Console.WriteLine(str);
}

6.對於這樣的一個枚舉類型:
enum Color:byte{
 Red,
 Green,
 Blue,
 Orange
}

試寫一段程式顯示出枚舉類型中定義的所有符號名稱以及它們對應的數值。 Ans.
7.您瞭解設計模式麼?請列出您所知道的設計模式的名稱。
Ans.
8.請在SQL Server中設計表來保存一個樹狀結構的組織結構圖(假設結構圖中只有名稱這一項內容
需要保存),如果我想查詢某一職位下的所有職位,用一個存儲過程來實現,你有什麼思路?

Ans.

--create table Employees
create table Employees(Name varchar(50) primary key, Manager varchar(50))
--insert data
insert into Employees values ('e1',''),('e2','e1'),('e3','e1'),('e4','e2'),('e5','e2'),('e6','e5'),('e7','e5')
--the stored procedure use "Recursive Queries Using Common Table Expressions" to traverse the tree data structure
--https://msdn.microsoft.com/en-us/library/ms186243.aspx?f=255&MSPPError=-2147217396
create procedure dbo.getAll(@Name varchar(50))
as
begin
 With T as(
  --Anchor member
  select e.Name, e.Manager, 0 as Depth
  from Employees e 
  where Manager= @Name
  union all
  --Recursive member
  select e2.Name, e2.Manager, Depth+1
  from Employees e2
   Join T
    on T.Name = e2.Manager
 )
 select Name from T;
end
go
--execute procedure put employee you want to replace 'e2'
exec dbo.getAll 'e2' 

9.什麼叫做SQL注入,如何防止?請舉例說明。
Ans.
如果登入驗証查詢為:
strSQL = "select * from users where(name='"+userName+"')and(pw ='"+passWord +"');"
填入userName = "1' OR '1'='1";和passWord = "1' OR '1'='1";
就可以在不知帳號密碼情況下登入系統。
可以用參數化查詢。

10.下面這段代碼輸出什麼?為什麼?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
 Console.WriteLine("Equal");
else
 Console.WriteLine("Not Equal");
Ans. Not Equal, i和j是不同的物件。
------------------------------------------------------------------------------------------------------
.NET & C# 基礎知識試題 (20%)
1. 在.net(C# or vb.net)中如何獲得當前表單或控制項的控制碼,特別是控制項本身的控制碼(請列舉)。
Ans:

2. 在.net(C# or vb.net)中如何用戶自定義消息,並在表單中處理這些消息。
Ans:

3. 在.net(C# or vb.net)如何啟動另一個程式。
Ans:

4. 在.net(C# or vb.net)中如何取消一個表單的關閉。
Ans:
5. 在.net(C# or vb.net)中,Appplication.Exit 還是 Form.Close有什麼不同?
Ans:

6. 在C#中有一個double型的變數,比如10321.5,比如122235401.21644,作為貨幣的值如何按各個不同國家的習慣來輸出。比如美國用$10,321.50和$122,235,401.22而在英國則為£10 321.50和£122 235 401.22
Ans:

7. 某一密碼僅使用K、L、M、N、O共5個字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規則:
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現,則出現次數不止一次
(4) M不能使最後一個也不能是倒數第二個字母
(5) K出現,則N就一定出現
(6) O如果是最後一個字母,則L一定出現
問題一:下列哪一個字母可以放在LO中的O後面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
Ans:

問題二:如果能得到的字母是K、L、M,那麼能夠形成的兩個字母長的密碼單詞的總數是多少?
A)1個 B)3個 C)6個 D)9個
Ans:
問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
Ans:

8. 62-63=1 等式不成立,請移動一個數字(不可以移動減號和等於號),使得等式成立,如何移動?Ans:








沒有留言:

張貼留言