C#面試題 收藏
問答題沿用
S1 C#:
Ch1:
1、= = 與Equals方法的區(qū)別,?
對(duì)于值類型:由于值類型是存儲(chǔ)在棧中,,兩者都是比較的是兩個(gè)變量的在棧中的值是否相等。
對(duì)于引用類型:引用類型是在堆一個(gè)存儲(chǔ)引用,,指向堆中的某個(gè)具體值,。= =判斷引用地址,equals判斷值
2,、Java中的switch于C#中的switch的區(qū)別
Java中的switch:只能判斷int, short及比int所占字節(jié)還少的類型
C#中的switch:可以判斷string及比string所占字節(jié)少的類型
Ch2:
1,、 冒泡排序(c#)口訣
int[] numbers ={ 49, 12, 65, 45, 88, 54 };
//排序前
Console.WriteLine("排序前:");
foreach (int i in numbers)
{
Console.Write(i + " ");
}
//冒泡排序
for (int i = 0; i < numbers.Length; i++ )
{
for (int j = 0; j < numbers.Length - 1 - i; j++ )
{//將最大數(shù)交換到最后
if(numbers[j] > numbers[j+1])
{
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
//排序后
Console.WriteLine("\n排序后:");
foreach (int i in numbers)
{
Console.Write(i + " ");
}
2、 分別寫出四種循環(huán)語法
for(int i=0;i<length;i++){} while(true){} foreach(int i in numbers){} do{}while(true);
3,、 編程求數(shù)組中的最大數(shù),,打印所有的水仙花數(shù),打印九九乘法表
求最大數(shù):int[] numbers ={ 49, 12, 65, 45, 88, 54 };
int max = 0;
for (int i = 0; i < numbers.Length-1; i++ )
{
if(numbers[i] > numbers[i+1])
{
max = numbers[i];
}
}
Console.WriteLine("最大數(shù)為:"+max);
水仙花數(shù):for (int i = 100; i < 1000; i++ )
{
int a = i % 10; //個(gè)位數(shù)
int b = i % 100; //十位數(shù)
b = b / 10;
int c = i / 100; //百位數(shù)
int number = (int)Math.Pow(a, 3) + (int)Math.Pow(b, 3) + (int)Math.Pow(c, 3);
if(number == i)
{
Console.Write(i + " ");
}
}
打印九九乘法表:for (int i = 1; i <= 9; i++ )
{
for (int j= 1; j <= i; j++)
{
Console.Write("{0}×{1}={2}\t", j, i, i * j);
}
Console.WriteLine();
}
Ch3:
1,、 命名空間的含義:包,,便于管理
2、 引用傳遞和值傳遞的區(qū)別:主要是相對(duì)于值類型,,用引用傳遞加ref,,就可實(shí)現(xiàn)其值真正的改變。值傳遞,,當(dāng)調(diào)用方法結(jié)束后,,則不會(huì)改變值。
3,、 請(qǐng)寫出String的常用方法(10個(gè)),并描述功能
Equals():判斷值相等 Split():以…分割每個(gè)字符為string[]數(shù)組 IndexOf():返回指定字符的索引
Concat():連接,,相當(dāng)于’+’號(hào) Trim():忽略前后空格 ToUpper():轉(zhuǎn)換為大寫 ToLower():轉(zhuǎn)換為小寫
StartsWith():開頭字符是否匹配 SubString():截取字符串 ToCharArray():轉(zhuǎn)換為char[]數(shù)組
4、 分別寫出數(shù)據(jù)類型轉(zhuǎn)換(至少四種)的方法,,代碼舉例
顯示轉(zhuǎn)換:int i=(int)12.9;
隱式轉(zhuǎn)換:double d=12;
int/double/float.parse ()轉(zhuǎn)換:string s=”13”; int i=int.parse(s);
convert:int x = 13; double d = Convert.ToDouble(x);
Ch4:
1,、 Partial關(guān)鍵字的含義
Partial局部類型允許我們將一個(gè)類、結(jié)構(gòu)或接口分成幾個(gè)部分,,分別實(shí)現(xiàn)在幾個(gè)不同的.cs文件中,。
適用于以下情況:(1) 類型特別大,不宜放在一個(gè)文件中實(shí)現(xiàn),。(2) 一個(gè)類型中的一部分代碼為自動(dòng)化工具生成的代碼,,不宜與我們自己編寫的代碼混合在一起,。(3) 需要多人合作編寫一個(gè)類
2、 Windows窗體的生命周期常用事件有哪些,?
Initialize, Load, Activated(窗體被激活時(shí)), Deactivate(窗體被停用時(shí)), FormClosed, FormClosing
3,、 寫出常用的控件鍵盤事件和鼠標(biāo)事件
鍵盤事件:KeyDown, KeyUp, KeyPress
鼠標(biāo)事件:Click,DoubleClick,MouseClick,MouseDown,MouseEnter,MouseHover,MouseLeave,MouseMove,MouseUp
4、 請(qǐng)寫出MessageBox常用的四種類型,,以及返回值類型
MessageBox.Show(“消息內(nèi)容”); 返回類型:DialogResult
MessageBox.Show(“消息內(nèi)容”,”標(biāo)題”); 返回類型:DialogResult
MessageBox.Show(“消息內(nèi)容”,”標(biāo)題”); 返回類型:DialogResult
MessageBox.Show(“消息內(nèi)容”,”標(biāo)題”, MessageBoxButtons按鈕類型); 返回類型:DialogResult
MessageBox.Show(“消息內(nèi)容”,”標(biāo)題”, MessageBoxButtons按鈕類型, MessageBoxIcon圖標(biāo)類型
); 返回類型:DialogResult
Ch5:
1,、 anchor和dock的區(qū)別
anchor(錨定):距離容器邊緣的距離,當(dāng)控件錨定到某個(gè)邊緣時(shí),,與指定邊緣最接近的控件邊緣與指定邊緣之間的距離將保持不變,。
dock(停靠):將控件??吭诖绑w或容器的邊緣,,距離為0px
2、 如何創(chuàng)建一個(gè)MDI窗體(步驟),,即多文檔窗體
1)設(shè)置子窗體:子窗體名稱 form = new Form(); form.MdiParent=this(父窗體); form.show();
2)設(shè)置父窗體屬性:isMdiContainer=true;
3,、 模式窗體和非模式窗體的區(qū)別
模式窗體:form.ShowDialog();有返回值:DialogResult;程序會(huì)中斷,,主窗體不能激活,,必須關(guān)閉模式窗體才能激活主窗體, 只能show出一個(gè)
非模式窗體:form.Show (); 無返回值,,程序不會(huì)中斷;可以show出多個(gè)
4,、 使用第三方類傳遞窗體間的數(shù)據(jù)(代碼演示)
public class UserHelpper
{
public static string loginId = ""; //用戶名
public static string loginType = ""; //登錄類型
}
Ch6:
1,、 ADO.Net重要組件(那幅圖6.2)
.NetFramework和DateSet
2,、 數(shù)據(jù)提供者程序有哪些
3、 連接字符串的寫法(兩種)
"Data Source=.\SQLEXPRESS;Initial Catalog=數(shù)據(jù)庫名;Integrated security=true;"
"server=.\sqlexpress; database=數(shù)據(jù)庫名; uid=用戶名; password=密碼"
4,、 Connection對(duì)象的屬性和方法:數(shù)據(jù)庫連接對(duì)象
屬性:state 連接狀態(tài), DataBase 獲取連接對(duì)象的數(shù)據(jù)庫名稱, DataSource連接對(duì)象的實(shí)例名
方法:Open()/Close() 打開/關(guān)閉數(shù)據(jù)庫, Dispose() 釋放連接資源, ChangeDatabase() 為打開的當(dāng)前連接對(duì)象更改數(shù)據(jù)庫名,。
5、 異常處理各關(guān)鍵字的作用
try:可能發(fā)生異常的代碼塊
catch:捕獲到何種異常,,如何去處理, 可以跟多個(gè)catch塊,,但子類異常必須寫在父類異常的前面
finally:不管有沒有異常都將執(zhí)行的代碼塊
6、 Command對(duì)象的屬性和方法:SQL語句執(zhí)行命令
屬性:CommandText獲取或設(shè)置要對(duì)數(shù)據(jù)源執(zhí)行的 Transact-SQL 語句,、表名或存儲(chǔ)過程,。 Connection獲取或設(shè)置 SqlCommand 的此實(shí)例使用的 SqlConnection
方法:ExecuteNonQuery() 執(zhí)行增,刪,,改語句,,并返回受影響行數(shù); ExecuteScalar() 執(zhí)行查詢,,返回結(jié)果的第一行第一列,,忽略其他列或行,; ExecuteReader() 執(zhí)行查詢,返回DataReader對(duì)象
Ch7:
1,、 DataReader對(duì)象的主要屬性和方法
屬性:HasRows 有沒有讀取到DataReader中的數(shù)據(jù),;IsClosed 是否已關(guān)閉DataReader對(duì)象
方法:Read() 讀取一行數(shù)據(jù);GetString()/GetDouble()… 獲取何種類型的數(shù)據(jù)值,; Close() 關(guān)閉DataReader對(duì)象,; IsDBNull() 獲取一個(gè)值,用于指示列中是否包含不存在的或缺少的值
2,、 請(qǐng)寫出獲取并使用DataReader對(duì)象的步驟
1)建立數(shù)據(jù)庫連接conn=new …Connection(…); 2)創(chuàng)建Command對(duì)象cmd= new …Command(sql, conn); 3)執(zhí)行SQL查詢命令sdr=cmd. ExecuteReader(); 4)處理數(shù)據(jù) while(sdr.Read()){int i=sdr.getInt(0);}
Ch8:
1,、 請(qǐng)寫出DataSet(臨時(shí)數(shù)據(jù)庫)的內(nèi)部結(jié)構(gòu)(圖8.2)
2、 寫出填充一個(gè)DataSet的步驟
3,、 數(shù)據(jù)集的工作原理(圖8.3)
4,、 如何將數(shù)據(jù)集中的數(shù)據(jù)保存到數(shù)據(jù)庫,請(qǐng)寫出步驟
S2 深入.NET
Ch1:
1,、 畫出.NET框架的結(jié)構(gòu)(圖1.7)
.net Framework類庫:ASP.Net(Web和Web Service),、WinForms、ADO.Net和XML類,、基本框架類,。
CLR:CLS和CTS。
2,、 解釋CTS(Common Type System通用類型系統(tǒng))和CLS(Common Language Specification公共語言規(guī)范)的含義
CTS:解決不同語言的數(shù)據(jù)類型不同的問題,。
CLS:實(shí)現(xiàn)多種語言之間的互操作性。
3,、 C#編譯器
畫出.NET編譯過程(圖1.8) C#代碼
Microsoft中間語言 (MSIL)
平臺(tái)專用代碼 VB.Net代碼 VB.net編譯器 CLR JIT編譯器 4,、 解釋.NET解決了DLL災(zāi)難 5、 解釋垃圾回收機(jī)制工作原理(回去查資料)
垃圾回收器是用來管理應(yīng)用程序的內(nèi)存分配和釋放的,。當(dāng)一個(gè)應(yīng)用程序在運(yùn)行的時(shí)候,,垃圾回收器設(shè)置了一個(gè)托管堆。每次當(dāng)開發(fā)人員使用 new 運(yùn)算符創(chuàng)建對(duì)象時(shí),,運(yùn)行庫都從托管堆為該對(duì)象分配內(nèi)存,。新創(chuàng)建的對(duì)象被放在上次創(chuàng)建的對(duì)象之后。垃圾回收器保存了一個(gè)指針,,該指針總是指向托管堆中最后一個(gè)對(duì)象之后的內(nèi)存空間,。當(dāng)新的對(duì)象被產(chǎn)生時(shí),運(yùn)行庫就知道應(yīng)該將新的對(duì)象放在內(nèi)存的什么地方,。當(dāng)垃圾回收器的指針指向托管堆以外的內(nèi)存空間時(shí),,就需要回收內(nèi)存中的垃圾了。在這個(gè)過程中,垃圾回收器首先假設(shè)在托管堆中所有的對(duì)象都需要被回收,。然后它在托管堆中尋找被根對(duì)象引用的對(duì)象(根對(duì)象就是全局,,靜態(tài)或處于活動(dòng)中的局部變量以及寄存器指向的對(duì)象),找到后將它們加入一個(gè)有效對(duì)象的列表中,,并在已經(jīng)搜索過的對(duì)象中尋找是否有對(duì)象被新加入的有效對(duì)象引用,。直到垃圾回收器檢查完所有的對(duì)象后,就有一份根對(duì)象和根對(duì)象直接或間接引用了的對(duì)象的列表,,而其它沒有在表中的對(duì)象就被從內(nèi)存中回收
6,、 CLR主要用途(Common Language Runtime公共語言運(yùn)行時(shí))
是所有.Net應(yīng)用程序運(yùn)行時(shí)的環(huán)境,所有應(yīng)用程序都要使用的編程基礎(chǔ),,它如同一個(gè)支持.Net應(yīng)用程序運(yùn)行和開發(fā)的虛擬機(jī),。
Ch2:
1、 什么是類和對(duì)象
類:具有相同特征工共同行為的一級(jí)對(duì)象的集合,。是一個(gè)模子,。
對(duì)象:是真實(shí)的實(shí)體。
它們的關(guān)系:由對(duì)象歸納為類,,是歸納對(duì)象共性的過程,;在類的基礎(chǔ)上,將狀態(tài)和行為實(shí)體化為對(duì)象的過程稱為實(shí)例化,。
2,、 什么是封裝
封裝是面向?qū)ο蟮娜筇匦灾唬糜陔[藏內(nèi)部實(shí)現(xiàn),,對(duì)外只暴露對(duì)類的基本操作,,而不會(huì)讓其他對(duì)象影響類的實(shí)現(xiàn)。
3,、 什么是函數(shù)重載
一個(gè)類中兩個(gè)以上的方法,,名字相同使用的參數(shù)類型或參數(shù)個(gè)數(shù)不同,稱為重載,。
其方式包括兩種:參數(shù)不同類型的重載和參數(shù)個(gè)數(shù)不同的重載,。
4、 解釋靜態(tài)方法和實(shí)例方法的差別(表2-2)
實(shí)例方法:需要使用類的實(shí)例對(duì)象來調(diào)用的方法
靜態(tài)方法:通過“類名.方法名”來調(diào)用的方法 不需要static關(guān)鍵字 Static關(guān)鍵字修飾 實(shí)例對(duì)象調(diào)用 類名調(diào)用,,不需要new出來 可以直接訪問靜態(tài)成員 可以訪問靜態(tài)成員 可以直接訪問實(shí)例成員 不可以直接訪問實(shí)例成員 可以直接調(diào)用實(shí)例方法和靜態(tài)方法 不能直接調(diào)用實(shí)例方法 實(shí)例化對(duì)象時(shí)初始化 調(diào)用前初始化 5、 寫出Pascal和Camel命名法的意義
Pascal命名法:類,、屬性,、方法(公有成員)的命名,單詞的第一個(gè)字母要大寫,。
Camel命名法:變量(私有成員)的命名,,首字母小寫,后面的單詞首字母大寫。
只通過名稱就能猜出此變量的含義,采取有意義的單詞,。
6,、 寫出out與ref的區(qū)別:都可以將參數(shù)值的更改保留
out傳遞參數(shù):側(cè)重于輸出,必須對(duì)out參數(shù)先進(jìn)行賦值,。
ref傳遞參數(shù): 側(cè)重于修改,,可以不先賦值。
Ch3:
1,、 說明枚舉的作用
枚舉可以避免不合理的賦值,,它表示一組有限的值,對(duì)可能的值進(jìn)行約束,;更易于輸入,,使代碼更清晰,允許描述性的名稱表示數(shù)據(jù),,使用時(shí)直觀方便,。
2、 寫出如何用枚舉來進(jìn)行復(fù)合狀態(tài)判斷(上課擴(kuò)展):http://aierong./blog/282925
定義性別枚舉:public enum Gender
{
male=0, female=1
}
//將字符串”male”轉(zhuǎn)換為枚舉:Gender 性別 = (Gender)Enum.Parse(typeof(Gender), "male");
//將數(shù)字0轉(zhuǎn)換為枚舉:Gender 性別男 = (Gender)Enum.Parse(typeof(Gender), "0");
//將枚舉轉(zhuǎn)換為數(shù)字:int i = Convert.ToInt32(Gender.male);
或:int j = ((IConvertible)((System.Enum) Gender.male)).ToInt32(null);
3,、 結(jié)構(gòu)和類的差別(表3-1)
結(jié)構(gòu)struct
類class 值類型 引用類型 不能被繼承 可以被繼承 可以有默認(rèn)構(gòu)造函數(shù) 可以有默認(rèn)構(gòu)造函數(shù) 添加的構(gòu)造函數(shù)必須帶參數(shù) 可以添加無參的構(gòu)造函數(shù) 創(chuàng)建對(duì)象可以不用new 創(chuàng)建對(duì)象必須使用new 在結(jié)構(gòu)中給字段賦值是錯(cuò)誤的 類中可以給字段賦值,,不能寫屬性 都可以包含字段、方法,,也都可以實(shí)現(xiàn)接口 4,、 什么是值類型,什么是引用類型
值類型:每個(gè)值類型的對(duì)象都有一個(gè)獨(dú)立的內(nèi)存區(qū)域保存自己的值,,源自System.ValueType,,主要包括基本數(shù)據(jù)類型、結(jié)構(gòu),、枚舉
引用類型:存儲(chǔ)的是對(duì)象的引用,,源自System.Object,主要包括類類型,、接口類型,、數(shù)組等
5、 int i=0; object o=new object();運(yùn)行前兩句的內(nèi)存圖
棧區(qū):
int i
0 100H new Object() 堆區(qū): Object o=100H
6,、 什么是裝箱拆箱并舉例說明 裝箱:把值類型轉(zhuǎn)換成引用類型的過程 int i=10; object obj=i;
拆箱:由引用類型轉(zhuǎn)換為值類型的過程 int j=(int)obj;
7,、 請(qǐng)創(chuàng)建一個(gè)學(xué)生類的類關(guān)系圖
Ch4: 1、 arrayList和hashtable的區(qū)別點(diǎn),,寫出兩種集合的常用方法
ArrayList:實(shí)現(xiàn)IList接口,IList繼承自ICollection
HashTable:鍵-值 key-value 使用大小可按需動(dòng)態(tài)增加的數(shù)組實(shí)現(xiàn) 表示鍵/值對(duì)的集合,,這些鍵/值對(duì)根據(jù)鍵的哈希代碼進(jìn)行組織 只能通過數(shù)字索引訪問元素 可以通過數(shù)字索引和key訪問元素 常用方法:Add()、Contains(),、Remove(),、RemoveAt(),、ToArray()、Clear(); 屬性:Count,、Item
Add(),、ContainsKey()、ContainsValue(),、Remove(),、Clear(); 屬性:Keys、Values,、Count,、Item
2、 什么是泛型,,解釋泛型的含義及優(yōu)點(diǎn) 泛型:將類型參數(shù)化,,通過泛型可以定義類型安全的數(shù)據(jù)類型,保證了類型的安全性,,其性能更高,。
如:List<int> list=new List<int>; 訪問時(shí)不用再進(jìn)行類型轉(zhuǎn)換,添加元素時(shí)也只能添加int類型的數(shù)據(jù),。
Ch5:
1,、 文件讀寫流程
1)創(chuàng)建文件流:FileStream fs = new FileStream(@"C:\test.txt", FileMode.Create);
2)創(chuàng)建寫入器:StreamWriter sw = new StreamWriter(fs); /讀取器:StreamReader sr
3)寫入內(nèi)容:sw.Write("aaaaaa"); /string content=fs.ReadToEnd();
4)關(guān)閉寫入器:sw.Close(); /sr.Close();
5)關(guān)閉文件流:fs.Close();
2、 靜態(tài)類和非靜態(tài)類的區(qū)別
靜態(tài)類
非靜態(tài)類 用static修飾 不用static修飾 只包含靜態(tài)成員 可以包含靜態(tài)成員,,也可以包含非靜態(tài)成員 不可以包含實(shí)例成員 可以包含實(shí)例成員 使用類名調(diào)用靜態(tài)成員:類名.方法名() 使用實(shí)例對(duì)象調(diào)用非靜態(tài)成員 不能被實(shí)例化 可以被實(shí)例化 不能包含實(shí)例構(gòu)造函數(shù) 可以包含實(shí)例構(gòu)造函數(shù) 3,、 什么是XML:eXtensible Markup Language 可擴(kuò)展標(biāo)記性語言 XML用于描述數(shù)據(jù),每對(duì)標(biāo)記稱為節(jié)點(diǎn),,是成對(duì)出現(xiàn)的,,其各個(gè)節(jié)點(diǎn)可以自由地?cái)U(kuò)展,節(jié)點(diǎn)區(qū)分大小寫
4,、 寫出xmlDocument,、xmlNode的常用屬性和方法
xmlDocument對(duì)象可表示整個(gè)XML文檔:Load() 讀取整個(gè)XML結(jié)構(gòu)、ChildNodes 獲取所有子節(jié)點(diǎn),、DocumentElement獲取根節(jié)點(diǎn),。
xmlNode表示XML中的節(jié)點(diǎn):InnerText 當(dāng)前節(jié)點(diǎn)的內(nèi)容、Name當(dāng)前節(jié)點(diǎn)的名字,、ChildNodes當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn),。
Ch6:
1、 什么是繼承
一個(gè)類可以繼承自另一個(gè)類,,比如學(xué)生類Student和老師類Teacher繼承自Person類,,被繼承的類稱為父類或基類,繼承自其他類的類稱為子類或派生類,。
繼承關(guān)系在類圖中用箭頭表示,箭頭指向父類。它們符合is-a的關(guān)系,,即子類is a父類,。
繼承中的方法重寫,虛方法等,。用base關(guān)鍵字可以從子類訪問父類的屬性與方法,。
2、 請(qǐng)寫出public,、private,、protected的區(qū)別(表6-1)
修飾符
類內(nèi)部 子類 其他類 public 可以 可以 可以 private 可以 不可以 不可以 protected 可以 可以 不可以 Ch7: 1、 什么是抽象類,,什么是抽象方法
抽象方法是一個(gè)沒有實(shí)現(xiàn)的方法,,在定義方法時(shí)增加關(guān)鍵字abstract聲明,它沒有包括方法執(zhí)行邏輯的方法體,。如:public abstract void SayHi(); 含有抽象方法的類稱為抽象類,。但抽象類的方法并不一定全是抽象方法,也可以包括具體方法,。抽象類不能被實(shí)例化,,也不能是密封或靜態(tài)的。
2,、 Override和new的區(qū)別
override:在子類或?qū)崿F(xiàn)類中用來重寫抽象方法或虛方法,。將覆蓋父類的方法。
new:在子類的用new關(guān)鍵字修飾的方法,,將會(huì)是一個(gè)新的方法,,它不會(huì)覆蓋父類的方法。
3,、 解釋什么是里氏替換原則(左父右子)
一般發(fā)生在多態(tài)的情況下,。如:父類類型 對(duì)象 = new 子類類型();
4、 is和as的區(qū)別
is:用于判斷類型時(shí),,返回true/false,。
as:用于兩個(gè)對(duì)象之間的類型轉(zhuǎn)換,當(dāng)轉(zhuǎn)換失敗時(shí),,返回null,,不會(huì)引發(fā)異常。
5,、 解釋關(guān)鍵字virtual的含義
Virtual用來修飾虛方法,,虛方法可以有具體的實(shí)現(xiàn),也可以被子類重寫,。
6,、 請(qǐng)畫圖說明簡(jiǎn)單工廠設(shè)計(jì)模式
父類產(chǎn)品
子類產(chǎn)品A 子類產(chǎn)品B 子類產(chǎn)品C 工廠 客戶 7,、 虛方法和抽象方法的區(qū)別 虛方法
抽象方法 用virtual修飾 用abstract修飾 要有方法體,哪怕只有一個(gè)分號(hào) 不能有方法體 可以被子類override 必須被子類override 除了密封類外都可以寫 只能在抽象類中 8,、 面向?qū)ο蟮娜筇匦允鞘裁? 并簡(jiǎn)述每個(gè)原則的基本功能
三在特征:封裝,、繼承、多態(tài),。
Ch8:
1,、 請(qǐng)解釋接口和抽象類的異同點(diǎn)(表8-1)
接口
抽象類 用interface修飾 用abstract修飾 實(shí)現(xiàn)類可以實(shí)現(xiàn)多個(gè)接口 只能繼承一個(gè)類 實(shí)現(xiàn)接口的類必須實(shí)現(xiàn)所有接口中的成員 非抽象派生類必須實(shí)現(xiàn)抽象方法 直接實(shí)現(xiàn) 需要override實(shí)現(xiàn)抽象方法 都不能實(shí)例化,且均包含未實(shí)現(xiàn)的方法,,其派生類必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法,。 2、 接口作為參數(shù)的意義和接口作為返回值的意義
接口作為參數(shù)時(shí),,我們只需要傳遞一個(gè)實(shí)現(xiàn)了接口的對(duì)象,,只要此對(duì)象實(shí)現(xiàn)了該接口都可作為參數(shù)傳遞進(jìn)去。
接口作為返回值時(shí),,實(shí)際上要返回的也是實(shí)現(xiàn)了接口的對(duì)象,。
3、 隱式實(shí)現(xiàn)接口和顯示實(shí)現(xiàn)的操作(代碼)
定義接口:public interface IPerson
{
void SayHi();
}
隱式實(shí)現(xiàn):public void SayHi()
{
throw new Exception("The method or operation is not implemented.");
}
顯示實(shí)現(xiàn): 避免了接口成員之間因?yàn)橥l(fā)生混淆,。不能通過類的實(shí)例進(jìn)行訪問,,強(qiáng)制轉(zhuǎn)換為接口調(diào)用。
void IPerson.SayHi()
{
throw new Exception("The method or operation is not implemented.");
}
Ch9:
1,、 什么是特性
特性:即為目標(biāo)元素(可以是數(shù)據(jù)集,、模塊、類,、屬性,、方法、甚至函數(shù)參數(shù)等)加入附加信息,,類似于注釋,。其本質(zhì)上也是一個(gè)類。一般來說,,特性命名都以Attribute結(jié)尾,使用時(shí)可以省略,。
2、 什么是序列化,,寫出序列化的基本過程(圖9-3)
格式化程序
序列化:將對(duì)象的狀態(tài)存儲(chǔ)到特定存儲(chǔ)介質(zhì)中的過程,,也可以說是將對(duì)象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。在序列化過程中,,會(huì)將對(duì)象的公有成員,,私有成員包括類名,都轉(zhuǎn)換成數(shù)據(jù)流的形式,,存儲(chǔ)到存儲(chǔ)介質(zhì)中,,即通常所說的文件,。 對(duì)象是否可序列化
對(duì)象的成員是否 可序列化
格式化器將對(duì)象格式化為特定格式數(shù)據(jù)流 寫入文件 結(jié)束 異常處理退出 Yes No No Yes 3、 序列化和反序列化的用途 當(dāng)我們需要將對(duì)象的字段值保存在磁盤中時(shí),,不需要再去編寫大量對(duì)象去寫入,,只需要將每個(gè)對(duì)象加一個(gè)可序列化標(biāo)記[Serializable],,就可實(shí)現(xiàn),。在遠(yuǎn)程通信中應(yīng)用非常廣泛。
4,、 程序集和命名空間的區(qū)別
程序集就是一個(gè)編譯好的.exe文件,,是.net框架應(yīng)用程序的生成塊,它包含編譯好的代碼邏輯單元,。.dll也是一個(gè)程序集,。
而命名空間namespace是相當(dāng)于一個(gè)包,使用管理我們的代碼,。
5,、 程序集的結(jié)構(gòu)
程序集由描述它的程序集清單(包含指定該程序集的版本要求和安全標(biāo)識(shí)所需的所有元數(shù)據(jù))、類型元數(shù)據(jù),、MSIL代碼(實(shí)現(xiàn)類型元數(shù)據(jù)的中間代碼)和資源組成,。
6、 Sealed修飾屬性,、方法,、類的含義
Sealed修飾類時(shí),表示該類不能再被繼承,,不能和 abstract 同時(shí)使用,,因?yàn)樗鼈冊(cè)诤x上互相排斥。
用于方法和屬性時(shí),,表示該方法或?qū)傩圆荒茉俦恢貙?,必須?override 關(guān)鍵字一起使用,因?yàn)槭褂?sealed 修飾符的方法或?qū)傩钥隙ㄊ腔愔邢鄳?yīng)的虛成員,。
通常用于實(shí)現(xiàn)第三方類庫時(shí)不想被客戶端繼承,,或用于沒有必要再繼承的類以防止濫用繼承造成層次結(jié)構(gòu)體系混亂
7、 什么是反射,,及功能
反射就是可以用ILDasm反編譯工具瀏覽一個(gè)dll和exe的構(gòu)成,。反射可以獲取已加載的程序集和在其中定義的類型(如類、接口和值類型)的信息,。也可以利用反射在運(yùn)行時(shí)創(chuàng)建類型實(shí)例以及調(diào)用和訪問這些實(shí)例,。還可以查找程序集的信息。
8,、 使用反射實(shí)現(xiàn)加載程序集,,并實(shí)例化該程序集中某一類型,,并調(diào)用該類型中的某一方法(代碼實(shí)現(xiàn))
如:string version=Assembly.LoadFile(@“D:\test.ext”).GetName().Version.ToString();
S2 在.NET框架下開發(fā)三層結(jié)構(gòu)
Ch1:
1、 什么是三層結(jié)構(gòu),,并解釋各層次的主要功能(圖1-7)
三層:表示層,、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問層(DAL),。
表示層
業(yè)務(wù)邏輯層 數(shù)據(jù)訪問層 為用戶提供交互操作界面 負(fù)責(zé)關(guān)鍵業(yè)務(wù)的處理和數(shù)據(jù)傳遞 實(shí)現(xiàn)數(shù)據(jù)庫訪問 2,、 請(qǐng)寫出三層數(shù)據(jù)傳遞方向(圖1-12) 表示層
業(yè)務(wù)邏輯層 數(shù)據(jù)訪問層 客戶請(qǐng)求 客戶請(qǐng)求 響應(yīng)數(shù)據(jù) 響應(yīng)數(shù)據(jù) 3、 三層開發(fā)的優(yōu)勢(shì) 便于維護(hù)與后期開發(fā),,分工明確,。
Ch2:
1、 什么是DataView
就是DataTable的動(dòng)態(tài)視圖,,并可以對(duì)動(dòng)態(tài)生成的視圖中的數(shù)據(jù)進(jìn)行排序,、篩選等操作。
2,、 使用三層開發(fā)用戶登陸(畫類圖)
3,、 使用代碼實(shí)現(xiàn)DataSet結(jié)構(gòu)(32頁)
兩種方式:1)通過指定DataSet中具體的DataTable的某行某列來獲取數(shù)據(jù):通過表名(從DataSet中獲取指定的DataTable)、通過索引(從DataTable中獲取指定的DataRow),、通過列名(從DataRow中獲取指定列的數(shù)據(jù)),。2)將DataSet中的數(shù)據(jù)直接綁定到數(shù)據(jù)展示控件上
Ch3:
1、 實(shí)體類在三層結(jié)構(gòu)中的應(yīng)用(圖3.1)
三層結(jié)構(gòu)之間數(shù)據(jù)傳遞的載體,,可以消除關(guān)系數(shù)據(jù)與類之間的差別,,以便更好地使用面向?qū)ο笏枷雭韺?shí)現(xiàn)系統(tǒng)。
2,、 Using關(guān)鍵字在c#中的用法
有兩種用法:1)作為指令,,引入命名空間;2)作為語句,,允許用戶定義一個(gè)范圍,,并在此范圍末尾自動(dòng)釋放對(duì)象。
Ch4:
1,、 為什么需要異常處理
處理程序運(yùn)行時(shí)發(fā)生的錯(cuò)誤,。
當(dāng)異常發(fā)生時(shí),系統(tǒng)要能夠自動(dòng)處理,,避免系統(tǒng)終止運(yùn)行,,防止出現(xiàn)故障而導(dǎo)致的系統(tǒng)崩潰。
2,、 如何進(jìn)行異常處理
Try…catch…finally
注意:不要用太多的異常處理,,同時(shí)要盡量避免使用嵌套異常處理,因?yàn)楫惓L幚硎褂貌缓侠頃?huì)使系統(tǒng)的性能下降。
3,、 什么是單元測(cè)試
軟件開發(fā)中的單元測(cè)試是對(duì)整個(gè)項(xiàng)目中的某一個(gè)模塊及模塊中的某一個(gè)類,、或某類中的某一個(gè)方法的測(cè)試。
4,、 為什么需要單元測(cè)試
單元測(cè)試要確保編寫的代碼語法和語義都正確,,確保軟件質(zhì)量的具體操作方法。
5,、 如何使用VSTS寫單元測(cè)試(步驟)
創(chuàng)建測(cè)試,、編寫測(cè)試、運(yùn)行測(cè)試,。
6,、 Exception類的常用屬性(MESSAGE,SOURCE)的含義
Message:提供引用異常的詳細(xì)信息
Source:導(dǎo)致異常發(fā)生的應(yīng)用程序或?qū)ο蟮拿Q。
7,、 簡(jiǎn)述throw關(guān)鍵字在異常處理中的使用過程
throw表示手動(dòng)拋出一個(gè)異常。
如:throw new Exception(“我拋出的異常,!”);
Ch5:
1,、 什么是設(shè)計(jì)模式
設(shè)計(jì)模式描述了軟件開發(fā)過程中某一類常見問題的一般性解決方案。
而面向?qū)ο笤O(shè)計(jì)模式是對(duì)在特定場(chǎng)景下,,解決一般設(shè)計(jì)問題中類與相互通信工程對(duì)象的描述,。
2、 客戶
抽象工廠設(shè)計(jì)模式結(jié)構(gòu)圖(圖5-4\圖5-5) 抽象工廠(基類)
實(shí)體工廠1 實(shí)體工廠2 抽象產(chǎn)品A 實(shí)體產(chǎn)品A2 實(shí)體產(chǎn)品A1 抽象產(chǎn)品B 實(shí)體產(chǎn)品B2 實(shí)體產(chǎn)品B1 3,、 簡(jiǎn)述使用接口,、抽象類、抽象方法實(shí)現(xiàn)抽象工程設(shè)計(jì)模式的過程 Y2 ASP.NET
Ch1:
1,、 ASP.NET的特色與優(yōu)勢(shì)(第7頁)
優(yōu)點(diǎn):1)與瀏覽器無關(guān),;2)方便設(shè)置斷點(diǎn)、易于調(diào)試,;3)編譯后執(zhí)行,,運(yùn)行效果提高;
4)豐富的控件庫,;5)代碼后置,;
Ch2:
1、 簡(jiǎn)述ASP.NET的請(qǐng)求流程,,說明第一次請(qǐng)求和第二次請(qǐng)求
.aspx文件
Asp.net 引擎
后置代碼 生成的頁面類 頁面類 第一次請(qǐng)求 解析 生成 編譯 響應(yīng) 第二次請(qǐng)求 第二個(gè)請(qǐng)求 實(shí)例化
2,、 說明Page的Language、AutoEventWireup,、CodeFile,、Inherits的含義 Language:指定頁面代碼和后置代碼使用的語言;
AutoEventWireup:設(shè)置頁面是否自動(dòng)調(diào)用網(wǎng)頁事件,,默認(rèn)為true,;
CodeFile:指定代碼后置的文件名
Inherits:頁面類
3,、 Request對(duì)象的QueryString、Form,、ServerVariable,、params的含義
QueryString:收集以Get方式請(qǐng)求而發(fā)送的數(shù)據(jù);
Form:收集以Post方式請(qǐng)求而發(fā)送的數(shù)據(jù),;
ServerVariable(環(huán)境變量):包含服務(wù)器和客戶端的系統(tǒng)信息,;
Params:以上三種方式的集合,不區(qū)分是由哪種方式傳遞的參數(shù),。
4,、 COOKIE、SESSION,、APPLICATION的區(qū)別(表42頁)
Cookie:保存少量的,、簡(jiǎn)單的數(shù)據(jù),一般不允許超過4KB(與瀏覽器有關(guān))使用期限可以靈活設(shè)定,,面向單個(gè)用戶,,保存在客戶端。
Session:也只能保存少量的,、簡(jiǎn)單的數(shù)據(jù),,面向單個(gè)用戶,單個(gè)連接的信息,,保存在服務(wù)器端,。當(dāng)Session超時(shí)或被關(guān)閉時(shí),將清空保存的數(shù)據(jù)(20分鐘),。一般用來保存單個(gè)用戶的登錄信息,。
Application:能夠保存任意大小的信息,在整個(gè)應(yīng)用程序周期中有效,,是面對(duì)所有應(yīng)用程序用戶的,,保存在服務(wù)器端。一般保存一些用戶共享的的信息,。
5,、 簡(jiǎn)述一個(gè)session的生命周期(創(chuàng)建->銷毀的過程)
一般來說,一個(gè)IE啟動(dòng)后,,開始請(qǐng)求服務(wù)器端的數(shù)據(jù)開始,,Session就創(chuàng)建,當(dāng)用戶停止使用應(yīng)用程序后(會(huì)話結(jié)束時(shí)),,SessionSession一般還要保存20分鐘才真正銷毀,。
6、 說明Server對(duì)象的常用方法(第43頁表2)
HtmlEncode:可將其html標(biāo)簽,在瀏覽器中顯示成字母,,而不轉(zhuǎn)換成標(biāo)簽,。
HtmlDecode:與HtmlEncode相反,對(duì)已編碼的內(nèi)容進(jìn)行解碼,。
MapPath:返回指定路徑在磁盤中的絕對(duì)路徑,。
UrlEncode:對(duì)URL進(jìn)行編碼,如’#’,’&’等,。
UrlDecode:與UrlEncode相反,,對(duì)URL地址進(jìn)行解碼。
Execute:可將兩個(gè)頁面合并成一個(gè)頁面顯示,。
Transfer:服務(wù)器端轉(zhuǎn)向,,使地址欄不發(fā)生變化。
7,、 進(jìn)程COOKIE和永久化COOKIE的區(qū)別
進(jìn)程COOKIE:內(nèi)存cookie,,服務(wù)器停止就消失,在服務(wù)器運(yùn)行
永久化COOKIE:
8,、 代碼演示從客戶端取COOKIE,,并回寫到客戶端
9、 用session和Cookie保存購物車的流程
Ch3:
1,、 html服務(wù)器控件和web服務(wù)器控件的區(qū)別
html服務(wù)器控件;直接產(chǎn)生html標(biāo)簽,,響應(yīng)較快,,但功能弱。繼承自:System.Web.UI.HtmlControls類,。
web服務(wù)器控件:轉(zhuǎn)換以后產(chǎn)生html標(biāo)簽,,功能強(qiáng),響應(yīng)慢,,可以執(zhí)行復(fù)雜的頁面請(qǐng)求,。繼承自:System.Web.UI.Control類。以asp:為前綴,。
2,、 母版頁的特點(diǎn)
母版頁是以“.master”為后綴的文件,它可以將頁面上的公用元素整合到一起,,對(duì)應(yīng)內(nèi)容頁,。
有4個(gè)特點(diǎn):1)有利于站點(diǎn)修改和維護(hù),降低開發(fā)人員的工作強(qiáng)度,。2)提供高效的內(nèi)容整合能力,。3)有利于實(shí)現(xiàn)頁面布局。4)提供一種便于利用的對(duì)象模型。
3,、 母版頁和普通頁的區(qū)別
區(qū)別:1)聲明:母版頁對(duì)應(yīng)Master,,普通頁對(duì)應(yīng)Page。2)擴(kuò)展名:母版頁對(duì)應(yīng).master,普通頁對(duì)應(yīng).aspx,。3)ContentPlaceHolder控件:母版頁可以使用ContentPlaceHolder控件,,而普通頁不可以使用該控件,普通頁應(yīng)用母版頁時(shí)多產(chǎn)生標(biāo)簽asp:content。
Ch5:
1,、 Control類
數(shù)據(jù)源控件的說明(表5-1) 普通數(shù)據(jù)源控件
層次化數(shù)據(jù)源控件 ObjectDataSource SqlDataSource XMLDataSource SiteMapDataSource AccessDataSource 2,、 Eval和Bind的區(qū)別 Eval:只讀(單向數(shù)據(jù)綁定),所綁定的內(nèi)容不會(huì)提交回服務(wù)器,,有一個(gè)重載的方法,,以實(shí)現(xiàn)格式化
Bind:支持讀/寫(雙向),可以更新數(shù)據(jù),,常常為TextBox控件綁定數(shù)據(jù),,以提交給服務(wù)器
Ch6:
1、 驗(yàn)證控件的工作原理
2,、 寫出5大驗(yàn)證控件,,并分別寫出常用屬性
驗(yàn)證控件都有一個(gè)共同的屬性:ControlToValidate 要驗(yàn)證的控件ID
1) RequiredFieldValidator非空驗(yàn)證: Text, ErrorMessage
2) CompareValidator 驗(yàn)證用戶輸入的內(nèi)容是否符合要求。
3) RangeValidator 檢查范圍: MaximumValue, MinimumValue, Type
4) RegularExpressionValidator 正則表達(dá)式:
5) CustomValidator 用戶自定義驗(yàn)證: ClientValidationFunction, OnServerValidate;
Ch7:
1,、自定義分頁的SQL語句
Select Top PageSize * from tablename where 條件 and id not in(select Top PageSize * (pageIndex-1)*PageSize order by 排序條件) order by 排序
2,、使用自定義分頁的步驟用名字描述
3、 GridView,、DataList,、repeater三大控件的特點(diǎn)
dataList, repeater兩控件的用戶類似: repeater不會(huì)產(chǎn)生多余的html標(biāo)簽
gridView:比較古板的多行顯示。
Ch9:
1,、 什么是用戶控件: User Control
一種自定義的組合控件,,通常由系統(tǒng)提供的可視化控件組合而成。它不僅可以定義顯示界面,,還可以編寫事件處理代碼,。
2、 用戶控件和普通頁面的區(qū)別(表9-1)
用戶控件 普通頁面 后綴名 .ascx .aspx 指令 @Control @Page 繼承 System.Web.UI.UserControl System.Web.UI.Page 包含 可以包含控件和其他用戶控件,,也可以被其他用戶控件和頁面包含 可以包含控件和所有用戶控件,,但是不可以被其他頁面所包含 直接訪問 不可以,必須包含在頁面中才能發(fā)揮作用 可以 標(biāo)簽 不能包含<Html>,、<body>等html標(biāo)簽 可以包含所有的html標(biāo)簽 編譯和運(yùn)行 可以獨(dú)立編譯,,但不能單獨(dú)運(yùn)行。不可以直接訪問,。 可直接訪問 3,、 寫出用代碼加載用戶控件的步驟
4,、 寫出ASP.NET http請(qǐng)求內(nèi)部過程(圖9-12)并解釋HTTPMODEL和HTTPHandler
5、 使用HTTPhandler實(shí)現(xiàn)水印的步驟
Ch10:
1,、 web.config和machine.config的層次結(jié)構(gòu)(圖10.1)
2,、 配置節(jié)點(diǎn)和讀取該節(jié)點(diǎn)的代碼
3、 解釋身份驗(yàn)證類型(表10-1)
4,、 Form常用屬性(表10-2)
5,、 如何配置自定義錯(cuò)誤(P257)
Y2 使用AJAX和WEB Service重構(gòu)網(wǎng)上書店
Ch1:
1、 web service的優(yōu)點(diǎn)
1) 是可互操作的分布式應(yīng)用程序 2)具有普通性,,它使用HTTP和XML進(jìn)行通信
3)可以穿越防火墻,,真正實(shí)現(xiàn)自由通信 4)通過SOAP實(shí)現(xiàn)異地調(diào)用
2、 解釋SOAP協(xié)議
SOAP是Web Service的基本通信協(xié)議,。它是在分散或分布式的環(huán)境中交換信息的,,是基于XML的協(xié)議。通過它我們可以實(shí)現(xiàn)不同項(xiàng)目,、不同站點(diǎn),,甚至異地調(diào)用。
3,、 說明WSDL的作用,,描述XML配置節(jié)的含義
Ch2:
1、 ajax的組成原理,,并用代碼實(shí)現(xiàn)
XmlHttpRequest從服務(wù)器(數(shù)據(jù)服務(wù)器或WEB服務(wù)器)獲取數(shù)據(jù)到客戶端的內(nèi)存中,,然后javascript根據(jù)實(shí)際需要對(duì)這些資源進(jìn)行處理,并通過CSS和DOM實(shí)現(xiàn)界面布局呈現(xiàn)給瀏覽器,。
2,、 ASP.NET AJAX框架組成
主要包括:核心組件、工具包,、增值組件、示例代碼,、框架類庫5個(gè)部分
Ch4:
1,、 為什么需要使用緩存,緩存的優(yōu)勢(shì)
因?yàn)椋篧eb應(yīng)用程序通常是需要不斷的和數(shù)據(jù)庫交互,,如果在數(shù)據(jù)量非常大的情況下,,將會(huì)嚴(yán)重降低應(yīng)用程序的性能,甚至還會(huì)造成Web應(yīng)用程序崩潰,。
使用緩存是把訪問頻繁的數(shù)據(jù)以及需要大量處理時(shí)間來創(chuàng)建的數(shù)據(jù)存儲(chǔ)在服務(wù)器內(nèi)存中,,當(dāng)用戶請(qǐng)求這些數(shù)據(jù)時(shí),系統(tǒng)直接將內(nèi)存中的數(shù)據(jù)返回給用戶,,從而大大提高應(yīng)用程序的性能,。
2,、 整頁緩存的主要屬性P85
Duration:必需屬性,表示緩存時(shí)間
VaryByParam:參數(shù)傳遞的緩存
VaryByControl:用戶控件的緩存
Location:指定輸出緩存項(xiàng)的位置,,默認(rèn)為Any
VaryBycustom:自定義輸出緩存
3,、 緩存的依賴性有哪些(數(shù)據(jù)緩存)
4、 如何實(shí)現(xiàn)部分頁面緩存
最常用的方法是緩存后替換:
通過使用控件substitution實(shí)現(xiàn),,此控件可以用來替換緩存頁面需要更新的部分,。
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/xiangchengboy/archive/2009/11/05/4770320.aspx
發(fā)表于 @ 2009
本文來自CSDN博客,,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/fqw1987815/archive/2009/11/14/4810652.aspx |
|