.net主要題型積累

一、簡述 private、 protected、 public、 internal 修飾符的訪問權限。 css

private : 私有成員, 在類的內部才能夠訪問。html

protected : 保護成員,該類內部和繼承類中能夠訪問。前端

public : 公共成員,徹底公開,沒有訪問限制。 node

internal: 當前程序集內能夠訪問。ios

二、ADO.NET中的五個主要對象程序員

Connection:主要是開啓程序和數據庫之間的鏈接。沒有利用鏈接對象將數據庫打開,是沒法從數據庫中取得數據的。Close和Dispose的區別,Close之後還能夠Open,Dispose之後則不能再用。web

Command:主要能夠用來對數據庫發出一些指令,例如能夠對數據庫下達查詢、新增、修改、刪除數據等指令,以及調用存在數據庫中的存儲過程等。這個對象是架構在Connection 對象上,也就是Command 對象是透過鏈接到數據源。面試

DataAdapter:主要是在數據源以及DataSet 之間執行數據傳輸的工做,它能夠透過Command 對象下達命令後,並將取得的數據放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。ajax

DataSet:這個對象能夠視爲一個暫存區(Cache),能夠把從數據庫中所查詢到的數據保留起來,甚至能夠將整個數據庫顯示出來,DataSet是放在內存中的。DataSet 的能力不僅是能夠儲存多個Table 而已,還能夠透過DataAdapter對象取得一些例如主鍵等的數據表結構,並能夠記錄數據表間的關聯。DataSet 對象能夠說是ADO.NET 中重量級的對象,這個對象架構在DataAdapter對象上,自己不具有和數據源溝通的能力;也就是說咱們是將DataAdapter對象當作DataSet 對象以及數據源間傳輸數據的橋樑。DataSet包含若干DataTable、DataTable包含若干DataRow。正則表達式

DataReader:當咱們只須要循序的讀取數據而不須要其它操做時,能夠使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,這些數據是存在數據庫服務器中的,而不是一次性加載到程序的內存中的,只能(經過遊標)讀取當前行的數據,並且這些數據是隻讀的,並不容許做其它的操做。由於DataReader 在讀取數據的時候限制了每次只讀取一筆,並且只能只讀,因此使用起來不但節省資源並且效率很好。使用DataReader 對象除了效率較好以外,由於不用把數據所有傳回,故能夠下降網絡的負載。

ADO.NET 使用Connection 對象來鏈接數據庫,使用Command 或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,而後再使用取得的DataReader 或DataAdapter 對象操做數據結果。

三、列舉ASP.NET 頁面之間傳遞值的幾種方式。 

1.使用QueryString, 如....?id=1; response. Redirect().... 

2.使用Session變量 

3.使用Server.Transfer

4.Cookie傳值

5.Application傳值 HttpContext.Current.Application["count"] = 3;//全局的,全部用戶均可以訪問

6.PreviosPage(*)

四、C#中的委託是什麼?事件是否是一種委託?事件和委託的關係。

委託能夠把一個方法做爲參數代入另外一個方法。

委託能夠理解爲指向一個函數的指針。

委託和事件沒有可比性,由於委託是類型,事件是對象,下面說的是委託的對象(用委託方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委託實現的。由於對於事件來說,外部只能「註冊本身+=、註銷本身-=」,外界不能夠註銷其餘的註冊者,外界不能夠主動觸發事件,所以若是用Delegate就無法進行上面的控制,所以誕生了事件這種語法。事件是用來閹割委託實例的,類比用一個自定義類閹割List。事件只能add、remove本身,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委託和add、remove兩個方法

面試聊:用Reflector查看.Net的類的內部實現,解決問題。

五、override與重載(overload)的區別 

重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要。重載(overload)是面向過程的概念。

Override 是進行基類中函數的重寫。Override是面向對象的概念

六、C#中索引器是否只能根據數字進行索引?是否容許多個索引器參數?

參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯能夠看出,索引器的內部本質上就是set_item、get_item方法。加分的補充回答:回答傳智播客.net培訓中講解設計模式中開發的SettingsProvider就是用的string類型的參數名作索引器參數。

基礎知識:

索引的語法:

public string this[string s],經過get、set塊來定義取值、賦值的邏輯

索引能夠重載。

若是隻有get沒有set就是隻讀的索引。

索引其實就是set_Item、get_Item兩個方法。

七、屬性和public字段的區別是什麼?調用set方法爲一個屬性設值,而後用get方法讀取出來的值必定是set進去的值嗎?

屬性能夠對設值、取值的過程進行非法值控制,好比年齡禁止設值負數,而字段則不能進行這樣的設置。雖然通常狀況下get讀取的值就是set設置的值,可是可讓get讀取的值不是set設置的值的,極端的例子。Public Age{get{return 100;}set{}}。加分的補充回答:用reflector反編譯能夠看出,屬性內部本質上就是set_***、get_***方法,詳細參考傳智播客.net培訓視頻中串講.net基礎的部分。

class Person

{

public int Age

{

get

{

return 3;

}

set

{

}

}

}

Person p1 = new Person();

p1.Age = 30;

p1.Age++;

Console.Write(p1.Age);//輸出3

八、三層架構

一般意義上的三層架構就是將整個業務應用劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。

區分層次的目的即爲了「高內聚,低耦合」的思想。

表現層(UI):通俗講就是展示給用戶的界面,即用戶在使用一個系統的時候的所見所得。

業務邏輯層(BLL):針對具體問題的操做,也能夠說是對數據層的操做,對數據業務邏輯處理。

數據訪問層(DAL):該層所作事務直接操做數據庫,針對數據的增添、刪除、修改、更新、查找等每層之間是一種垂直的關係。

三層結構是N層結構的一種,

,下層代碼未肯定其接口(契約)前,上層代碼是沒法開發的,下層代碼接口(契約)的變化將使上層的代碼一塊兒變化。

優勢: 分工明確,條理清晰,易於調試,並且具備可擴展性。

缺點: 增長成本。

九、MVC模式 (*)

MVC(Model View Controller)模型-視圖-控制器

aspx就是View,視圖;Model:DataSet、Reader、對象;Controller:cs代碼。

MVC是典型的平行關係,沒有說誰在上誰在下的關係,模型負責業務領域的事情,視圖負責顯示的事情,控制器把數據讀取出來填充模型後把模型交給視圖去處理。而各類驗證什麼的應該是在模型裏處理了。它強制性的使應用程序的輸入、處理和輸出分開。MVC最大的好處是將邏輯和頁面分離。 

MVC和三層的區別:MVC是UI層的技術。

十、關於拆箱裝箱:

1)什麼是裝箱(boxing)和拆箱(unboxing)? (*)

Object是引用類型,可是它的子類Int32居然不能去Object能去的「要求必須是引用類型」

的地方,違反了繼承的原則,因此須要把Int32裝在Object中才能傳遞。

裝箱:從值類型接口轉換到引用類型。

拆箱:從引用類型轉換到值類型。

object obj = null;//引用類型

obj = 1;//裝箱,boxing。把值類型包裝爲引用類型。

int i1 = (int)obj;//拆箱。unboxing

2)下面三句代碼有沒有錯,以inboxing或者unboxing爲例,解釋一下內存是怎麼變化的

int i=10;

object obj = i;

int j = obj;

分析:在inboxing(裝箱)時是不須要顯式的類型轉換的,不過unboxing(拆箱)須要顯式的類型轉換,因此第三行代碼應該改成:

3 int j = (int)obj;

要掌握裝箱與拆箱,就必須瞭解CTS及它的特色:

NET重要技術和基礎之一的CTS(Common Type System)。CTS是爲了實如今應用程序聲明和使用這些類型時必須遵循的規則而存在的通用類型系統。.Net將整個系統的類型分紅兩大類 :值類型和引用類型。

CTS中的全部東西都是對象;全部的對象都源自一個基類——System.Object類型。值類型的一個最大的特色是它們不能爲null,值類型的變量總有一個值。爲了解決值類型不能夠爲null,引用類型能夠爲null的問題,微軟在.Net中引入了裝箱和拆箱:裝箱就是將值類型用引用類型包裝起來轉換爲引用類型;而從引用類型中拿到被包裝的值類型數據進行拆箱。

十二、CTS、CLS、CLR分別做何解釋(*)把英文全稱背過來。

C#和.Net的關係:

C#只是抽象的語言,能夠把C#編譯生成Java平臺的二進制代碼,也能夠把Java代碼編譯生成.Net平臺的二進制代碼。因此C#只是提供了if、while、+-*/、定義類、int、string等基礎的語法,而Convert.ToInt3二、FileStream、SqlConnection、String.Split等都屬於.Net的東西。深藍色是C#的,淺藍色是.Net的。

C# new→IL:newobj

C# string →.Net中的String

類型的差異:.net中的Int32在C#中是int,在VB.Net中是Integer。

語法的差異:IL中建立一個對象的方法是L_0001: newobj instance void 索引.C1::.ctor()

C#中是new C1();VB.net中是 Dim c1 As New C1

CTS:Common Type System 通用類型系統。Int3二、Int16→int、String→string、Boolean→bool。每種語言都定義了本身的類型,.Net經過CTS提供了公共的類型,而後翻譯生成對應的.Net類型。

CLS:Common Language Specification 通用語言規範。不一樣語言語法的不一樣。每種語言都有本身的語法,.Net經過CLS提供了公共的語法,而後不一樣語言翻譯生成對應的.Net語法。

CLR:Common Language Runtime 公共語言運行時,就是GC、JIT等這些。有不一樣的CLR,好比服務器CLR、Linux CLR(Mono)、Silverlight CLR。至關於一個發動機。

1三、在dotnet中類(class)與結構(struct)的異同?

Class能夠被實例化,屬於引用類型,是分配在內存的堆上的,類是引用傳遞的。

Struct屬於值類型,是分配在內存的棧上的。結構體是複製傳遞的。加分的回答:Int3二、Boolean等都屬於結構體。

1四、堆和棧的區別?

棧是編譯期間就分配好的內存空間,所以你的代碼中必須就棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧內存中。

堆是程序運行期間動態分配的內存空間,你能夠根據程序的運行狀況肯定要分配的堆內存的大小。

1五、能用foreach遍歷訪問的對象的要求

須要實現IEnumerable接口或聲明GetEnumerator方法的類型。

1六、GC是什麼? 爲何要有GC? 

GC是垃圾收集器(Garbage Collection)。程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。GC只能處理託管內存資源的釋放,對於非託管資源則不能使用GC進行回收,必須由程序員手工回收,一個例子就是FileStream或者SqlConnection須要程序員調用Dispose進行資源的回收。

要請求垃圾收集,能夠調用下面的方法:GC.Collect()通常不須要手動調用GC.Collect()。當一個對象沒有任何變量指向(再也不能使用)的時候就能夠被回收了。

基礎知識:當沒有任何變量指向一個對象的時候對象就能夠被回收掉了,但不必定會當即被回收。

object obj = new object();//只有new纔會有新對象

Console.WriteLine(obj);

object obj2 = obj;

obj = null;

obj2 = null;

Console.WriteLine();

1七、 string s1 = "abc";

string s2 = "123";

string s3 = "abc";

上面代碼有兩個字符串對象,由於s一、s3都引用了字符串拘留池中的"abc"

string s1 = "abc";

string s2 = "123";

string s4 = new string(new char[]{'a','b','c'});

中有三個字符串對象,由於new就必定會建立新的字符串對象

基礎知識:字符串拘留池(Intern)

由於字符串是不可變的,因此若是程序發現聲明瞭一個以前聲明過的字符串,那麼會複用以前的那個字符串對象的實例。

string s1 = "abc";

string s2 = "123";

string s3 = "abc";

//string s4 = new string("abc");//錯誤的用法

string s4 = new string(new char[]{'a','b','c'});

Console.WriteLine(object.ReferenceEquals(s1,s2));

Console.WriteLine(object.ReferenceEquals(s1, s3));//字符串拘留池複用對象

Console.WriteLine(object.ReferenceEquals(s1, s4));//new就會建立新的對象

1八、值類型和引用類型的區別?

一、一個值類型變量賦給另外一個值類型變量時,將複製包含的值。引用類型變量的賦值只複製對對象的引用,而不復制對象自己。

二、類型不可能派生出新的類型:全部的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也能夠實現接口。

三、值類型不可能包含 null 值:然而,可空類型功能容許將 null 賦給值類型。 

四、每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。 

1九、C#中的接口和類有什麼異同。 

不一樣點:接口不能直接實例化、不包含方法的實現、能夠多繼承,類只能單繼承,類定義可在不一樣的源文件之間進行拆分。

相同點:接口、類和結構均可以繼承多個接口,接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員,接口和類均可以包含事件、索引器、方法和屬性。

基礎知識:接口只能定義方法(只能定義行爲,不能定義實現也就是字段),由於事件、索引器、屬性本質上都是方法,因此接口中也能夠定義事件、索引器、屬性。

20、abstract class和interface有什麼區別? 

相同點: 都不能被直接實例化,均可以經過繼承實現其抽象方法。

不一樣點:

一、接口支持多繼承;抽象類不能實現多繼承。 

二、接口只能定義行爲;抽象類既能夠定義行爲,還可能提供實現。 

三、接口能夠用於支持回調(Callback);抽象類不能實現回調,由於繼承不支持。

四、接口只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義字段和包含實現的方法;

五、抽象類能夠定義字段、屬性、包含有實現的方法。 

六、接口能夠做用於值類型(Struct)和引用類型(Class);抽象類只能做用於引用類型。例如,Struct就能夠繼承接口,而不能繼承類。

加分的補充回答:講設計模式的時候SettingsProvider的例子。

2一、是否能夠繼承String類? 

String類是sealed類故不能夠繼承。

2二、 static void Main(string[] args)

{

Console.WriteLine(GetIt());

Console.ReadKey();

}

static int GetIt()

{

int i = 8;

try

{

i++;

Console.WriteLine("a");

return i;//把返回值設定爲i,而後「儘快」返回(沒啥事就回去吧)

}

finally

{

Console.WriteLine("b");

i++;

}

}

上面程序的執行結果是ab9

try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的代碼會不會被執行,何時被執行? 

會執行,在return後執行。

static void Main(string[] args)

{

//Console.WriteLine(GetIt());

Console.WriteLine(GetPerson().Age);

Console.ReadKey();

}

static int GetIt()

{

int i = 8;

try

{

i++;

Console.WriteLine("a");

return i;//把返回值設定爲i,而後「儘快」返回(沒啥事就回去吧。搞完就走)

}

finally

{

Console.WriteLine("b");

i++;

}

}

static Person GetPerson()

{

Person p = new Person();

p.Age = 8;

try

{

p.Age++;

Console.WriteLine("a");

return p;//把返回值設定爲i,而後「儘快」返回(沒啥事就回去吧。搞完就走)

}

finally

{

Console.WriteLine("b");

p.Age++;

}

}

加分的補充回答(也助記):讀取數據庫中數據的條數的程序

public int QueryCount()

{

…..

try

{

return cmd.ExecuteScalar();

}

finally

{

cmd.Dispose();

}

}

先執行cmd.ExecuteScalar(),把返回值暫時存起來,而後再去執行finally(錢放在這,我去劫個色),而後把返回值返回。return都是最後執行,可是return後的表達式的計算則是在finally以前。

若是C#設計的是先執行cmd.Dispose()再執行return就會出現return執行失敗了,由於cmd已經Dispose了。

2三、new 關鍵字用法(*)

new 運算符 用於建立對象和調用構造函數。

new 修飾符用於向基類成員隱藏繼承成員。表示「個人這個方法和父類的同名方法不要緊」,new只是不讓編譯器警告而已

new 約束 用於在泛型聲明中約束可能用做類型參數的參數的類型。

2五、描述線程與進程的區別?(*)

1.線程(Thread)與進程(Process)兩者都定義了某種邊界,不一樣的是進程定義的是應用程序與應用程序之間的邊界,不一樣的進程之間不能共享代碼和數據空間,而線程定義的是代碼執行堆棧和執行上下文的邊界。

2.一個進程能夠包括若干個線程,同時建立多個線程來完成某項任務,即是多線程。而同一進程中的不一樣線程共享代碼和數據空間。用一個比喻來講,若是一個家庭表明一個進程,在家庭內部,各個成員就是線程,家庭中的每一個成員都有義務對家庭的財富進行積累,同時也有權利對家庭財富進行消費,當面對一個任務的時候,家庭也能夠派出幾個成員來協同完成,而家庭以外的人則沒有辦法直接消費不屬於本身家庭的財產。

2七、什麼是反射? 

程序集包含模塊,而模塊又包括類型,類型下有成員,反射就是管理程序集,模塊,類型的對象,它可以動態的建立類型的實例,設置現有對象的類型或者獲取現有對象的類型,能調用類型的方法和訪問類型的字段屬性。它是在運行時建立和使用類型實例

加分的補充回答:聊用反射實現編輯器動態插件和如鵬網項目中插件體系實現第三方支付和定時任務的案例。

2八、int、DateTime、string是否能夠爲null?

null表示「不知道」,而不是「沒有」。沒有年齡和不知道年齡是不同。

數據庫中null不能用0表示。0歲和不知道多少歲不同。

Sex is zero。《色便是空》

//int i1 = null;

//int? i2 = null;//值類型後加?就成了可空數據類型

////int i3 = i2;//因此把可空的賦值給必定不能爲空的會報錯。

//int i4 = (int)i2;//能夠顯式轉換,由程序員來保證「必定不爲空」

//int? i5 = i4;//必定會成功!

//using()→try{]catch{}finally{}

//int?是微軟的一個語法糖。是一種和int沒有直接關係的Nullable類型

Nullable<int> d1 = new Nullable<int>();//int? d1=null;

Nullable<int> d2 = new Nullable<int>(3);//int? d2=3;

Console.WriteLine(d1==null);

int、DateTime不能,由於其爲Struct類型,而結構屬於值類型,值類型不能爲null,只有引用類型才能被賦值null。string能夠爲null。

C#中int等值類型不能夠爲null、而數據庫中的int能夠爲null,這就是糾結的地方。int?就變成了可空的int類型。bool?、DateTime?

int i1 = 3;

int? i2 = i1;

//int i3 = i2;//不能把可能爲空的賦值給必定不能爲空的變量

int i3 = (int)i2;//顯式轉換

可空數據類型經典應用場景:三層中的Model屬性的設計。

int?翻譯生成.Net的Nullable<int>,CTS。

2九、using關鍵字有什麼用?什麼是IDisposable?

using能夠聲明namespace的引入,還能夠實現非託管資源的釋放,實現了IDisposiable的類在using中建立,using結束後會自動調用該對象的Dispose方法,釋放資源。加分的補充回答:using其實等價於try……finally,用起來更方便。

30、XML 與 HTML 的主要區別

1. XML是區分大小寫字母的,HTML不區分。 

2. 在HTML中,若是上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你能夠省略</p>或者</li>之類的結束標記。在XML中,絕對不能省略掉結束標記。

HTML:<img src="1.jpg"><br><br>

XML:<img src="1.jpg"></img><br/><br/>

3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符做爲結尾。這樣分析器就知道不用查找結束標記了。 

4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。 

5. 在HTML中,能夠擁有不帶值的屬性名。在XML中,全部的屬性都必須帶有相應的值。

XML是用來存儲和傳輸數據的

HTML是用來顯示數據的

若是使用了徹底符合XML語法要求的HTML,那麼就叫作符合XHTML標準。符合XHTML標準的頁面有利於SEO。

3一、string str = null 與 string str = 「」說明其中的區別。 

答:string str = null 是不給他分配內存空間,而string str = \"\" 給它分配長度爲空字符串的內存空間。 string str = null沒有string對象,string str = 「」有一個字符串對象。

32.寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動增加的ID做爲主鍵,注意:ID可能不是連續的。 

答:解1: select top 10 * from A where id not in (select top 30 id from A)

演變步驟:

1)select top 30 id from T_FilterWords--取前條

2)select * from T_FilterWords

where id not in (select top 30 id from T_FilterWords)--取id不等於前三十條的

--也就是把前條排除在外

3)select top 10 * from T_FilterWords

where id not in (select top 30 id from T_FilterWords)

--取把前條排除在外的前條,也就是-40條

解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 

解答3:用ROW_NUMBER實現

33.面向對象的語言具備 ______性、_________性、________性 

答:封裝、繼承、多態。

34.在.Net中全部可序列化的類都被標記爲_____? 

答:[serializable] 

3五、什麼是code-Behind技術。 

就是代碼隱藏,在ASP.NET中經過ASPX頁面指向CS文件的方法實現顯示邏輯和處理邏輯的分離,這樣有助於web應用程序的建立。好比分工,美工和編程的能夠個幹各的,不用再像之前asp那樣都代碼和html代碼混在一塊兒,難以維護。code-Behind是基於部分類技術實現的,在個人項目的三層代碼生成器中用到了部分類。

3六、接口是一種引用類型,在接口中能夠聲明(a),但不能夠聲明公有的域或私有的成員變量。

a) 方法、屬性、索引器和事件;  

b) 索引器和字段;   c) 事件和字段;  

解讀:接口中不能聲明字段只能聲明方法,屬性、索引器和事件最終都編譯生成方法。

37. 在ADO.NET中,對於Command對象的ExecuteNonQuery()方法和ExecuteReader()方法,下面敘述錯誤的是(c)。   a) insert、update、delete等操做的Sql語句主要用ExecuteNonQuery()方法來執行;    b) ExecuteNonQuery()方法返回執行Sql語句所影響的行數。    c) Select操做的Sql語句只能由ExecuteReader()方法來執行;    d) ExecuteReader()方法返回一個DataReader對象;  

拿SQLHelper實現一下。 38. 下列關於C#中索引器理解正確的是(c )  a) 索引器的參數必須是兩個或兩個以上   b) 索引器的參數類型必須是整數型   c) 索引器沒有名字   d) 以上皆非  

39. 下面關於XML的描述錯誤的是(d)。

a) XML提供一種描述結構化數據的方法;   b) XML是一種簡單、與平臺無關並被普遍採用的標準;   c) XML文檔可承載各類信息;   d) XML只是爲了生成結構化文檔;   40、如下的C#代碼,試圖用來定義一個接口:   public interface IFile  {  int A;  int delFile()  {  A = 3;  }  void disFile();  } 關於以上的代碼,如下描述錯誤的是(d)。  

a) 以上的代碼中存在的錯誤包括:不能在接口中定義變量,因此int A代碼行將出現錯誤;   b) 以上的代碼中存在的錯誤包括:接口方法delFile是不容許實現的,因此不能編寫具體的實現函數;  c) 代碼void disFile();聲明無錯誤,接口能夠沒有返回值;   d) 代碼void disFile();應該編寫爲void disFile(){};

4一、在ASP.NET中有Button控件myButton,要是單擊控件時,導航到其餘頁面http://www.abc.com, 正確的代碼爲( c )  a)private void myButton_Click(object sender, System.EventArgs e){Redirect(「http://www.abc.com」);}  b)private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(「http://www.abc.com」);} c)private void myButton_Click(object sender, System.EventArgs e){Reponse.Redirect(「http://www.abc.com」);}

d)private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(「http://www.abc.com」);return true;}

42. 聲明一個委託public delegate int myCallBack(int x); 則用該委託產生的回調方法的原型應該是(b)。 a) void myCallBack(int x) ;   b) int receive(int num) ;  

c) string receive(int x) ;   d) 不肯定的;  

43.StringBuilder 和 String 的區別?

答:String 在進行運算時(如賦值、拼接等)會產生一個新的實例,而 StringBuilder 則不會。因此在大量字符串拼接或頻繁對某一字符串進行操做時最好使用 StringBuilder,不要使用 String

若是要操做一個不斷增加的字符串,儘可能不用String類,改用StringBuilder類。兩個類的工做原理不一樣:String類是一種傳統的修改字符串的方式,它確實能夠完成把一個字符串添加到另外一個字符串上的工做沒錯,可是在.NET框架下,這個操做實在是划不來。由於系統先是把兩個字符串寫入內存,接着刪除原來的String對象,而後建立一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了很多時間。而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,可以在已有對象的原地進行字符串的修改,簡單並且直接。固然,通常狀況下覺察不到這兩者效率的差別,但若是你要對某個字符串進行大量的添加操做,那麼StringBuilder類所耗費的時間和String類簡直不是一個數量級的。 

4四、.請敘述屬性與索引器的區別。 (*)

屬性 索引器  

經過名稱標識。 經過簽名標識。  

經過簡單名稱或成員訪問來訪問。 經過元素訪問來訪問。  

能夠爲靜態成員或實例成員。 必須爲實例成員。  

屬性的get訪問器沒有參數。 索引器的get訪問器具備與索引器相同的形參表。  

屬性的set訪問器包含隱式value參數。 除了value參數外,索引器的set訪問器還具備與索引器相同的形參表。 

45.請敘述const與readonly的區別。(*)

對於公用的static字段,好比數據庫鏈接字符串 ,若是有人有意無心的修改了它的值,系統就壞掉了,因此應該是設置成只讀的:

public static readonly string connstr =

ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

readonly的字段只能在聲明時初始化,之後就不能再賦值了。

public const string myconnstr="aaaaaaaaaaaaa";//定義常量,不變的量

永遠不會變的量(今天、一萬年之後,我這個電腦或者美國的電腦)都不會變的值纔會聲明爲常量,好比圓周率能夠,可是匯率不能夠。經過計算出來的值就不能定義爲常量,因此下面是錯誤的:

public const string connstr =

ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

const 關鍵字用於修改字段或局部變量的聲明。它指定字段或局部變量的值不能被修改。常數聲明引入給定類型的一個或多個常數。

const數據成員的聲明式必須包含初值,且初值必須是一個常量表達式。由於它是在編譯時就須要徹底評估。

const成員能夠使用另外一個const成員來初始化,前提是二者之間沒有循環依賴。

readonly在運行期評估賦值,使咱們得以在確保「只讀訪問」的前提下,把object的初始化動做推遲到運行期進行。

readonly 關鍵字與 const 關鍵字不一樣: const 字段只能在該字段的聲明中初始化。readonly 字段能夠在聲明或構造函數中初始化。所以,根據所使用的構造函數,readonly 字段可能具備不一樣的值。另外,const 字段是編譯時常數,而 readonly 字段可用於運行時常數。 const不能是「算出來的」

readonly 只能在聲明時或者構造函數裏面初始化,而且不能在 static 修飾的構造函數裏面。 

參考資料:

http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

http://www.cnblogs.com/jams742003/archive/2010/03/23/1692913.html

http://www.cnblogs.com/wayfarer/archive/2006/04/27/386658.html

46. 請解釋ASP.NET中的web頁面與其隱藏類之間的關係?

一個ASP.NET頁面通常都對應一個隱藏類,通常都在ASP.NET頁面的聲明中指定了隱藏類例如一個頁面Tst1.aspx的頁面聲明以下

<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.aspx.cs" 代表經編譯此頁面時使用哪個代碼文件

Inherits="T1.Tst1" 表用運行時使用哪個隱藏類

aspx頁面會編譯生成一個類,這個類從隱藏類繼承。

47. 什麼是viewstate,可否禁用?是否所用控件均可以禁用?

Viewstate是保存狀態的一種機制,EnableViewState屬性設置爲false便可禁用。最有力的舉例子:Label、TextBox在禁用ViewState後不一樣的表現來講明。

4八、你對web service的體會?

答:若是本身寫的一些程序也但願別人能夠經過Web服務來使用,也能夠把本身編寫的方法貼上標籤[WebMethed]來實現Web 服務。[是當編寫程序時,但願實現一些別的網站已經實現過的,也用Web服務可視成XML語言的編碼。能夠使用別人的編碼生成的XML找到本身須要的信息,來實現本身編寫的程序的一些功能。把傳智播客.net培訓的如鵬網項目中用WebService實現管理客戶端的例子說出來。

SOAP、WSDL。

4九、您在什麼狀況下會用到虛方法?它與接口有什麼不一樣?

答案:子類從新定義父類的某一個方法時,必須把父類的方法定義爲virtual 

在定義接口中不能有方法體,虛方法能夠。

實現時,子類能夠不從新定義虛方法,但若是一個類繼承接口,那必須實現這個接口。

50. 不定項選擇:

(1) 如下敘述正確的是: B C

A. 接口中能夠有虛方法。 B. 一個類能夠實現多個接口。 

C. 接口不能被實例化。 D. 接口中能夠包含已實現的方法。 

(2) 從數據庫讀取記錄,你可能用到的方法有:B C D

A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader

(3)對於一個實現了IDisposable接口的類,如下哪些項能夠執行與釋放或重置非託管資源相關的應用程序定義的任務?(多選) ( ABC )

A.Close B.Dispose C.Finalize D.using E.Quit

(4)如下關於ref和out的描述哪些項是正確的?(多選) ( ACD ) 

A.使用ref參數,傳遞到ref參數的參數必須最早初始化。  

B.使用out參數,傳遞到out參數的參數必須最早初始化。  

C.使用ref參數,必須將參數做爲ref參數顯式傳遞到方法。  

D.使用out參數,必須將參數做爲out參數顯式傳遞到方法。 

51. 單項選擇:

(1)下列選項中,(C)是引用類型。

a)enum類型  b)struct類型  c)string類型  d)int類型

(2)關於ASP.NET中的代碼隱藏文件的描述正確的是(C)

a)Web窗體頁的程序的邏輯由代碼組成,這些代碼的建立用於與窗體交互。編程邏輯惟一與用戶界面不一樣的文件中。該文件稱做爲「代碼隱藏」文件,若是用C#建立,該文件將具備「.ascx.cs擴展名。

b)項目中全部Web窗體頁的代碼隱藏文件都被編譯成.EXE文件。

c)項目中全部的Web窗體頁的代碼隱藏文件都被編譯成項目動態連接庫(.dll)文件。

d)以上都不正確。

(3)下列描述錯誤的是(D)

a)類不能夠多重繼承而接口能夠;

b)抽象類自身能夠定義成員而接口不能夠;

c)抽象類和接口都不能被實例化;

d)一個類能夠有多個基類和多個基接口;

5二、DataReader和DataSet的異同?

DataReader使用時始終佔用SqlConnection,在線操做數據庫

每次只在內存中加載一條數據,因此佔用的內存是很小的

是隻進的、 只讀的

DataSet則是將數據一次性加載在內存中.拋棄數據庫鏈接,讀取完畢即放棄數據庫鏈接(非鏈接模式)

DataSet將數據所有加載在內存中.因此比較消耗內存,可是確比DataReader要靈活,能夠動態的添加行,列,數據.對數據庫進行 回傳更新操做(動態操做讀入到內存的數據)

5三、public static const; int A = 1;這段代碼有錯誤麼? 

錯誤:const不能被修飾爲static ;由於定義爲常量 (const )後就是靜態的(static )。

5四、傳入某個屬性的set方法的隱含參數的名稱是什麼?

value,它的類型和屬性所聲名的類型相同。 

5五、C#支持多重繼承麼?

類之間不支持,接口之間支持。類對接口叫作實現,不叫繼承。 類是爹、接口是能力,能有多個能力,但不能有多個爹。

5六、C#中全部對象共同的基類是什麼?

System.Object

5七、經過超連接怎樣傳遞中文參數?

答:用URL編碼,經過QueryString傳遞,用urlencode編碼用urldecode解碼

5八、string、String;int、Int32;Boolean、bool的區別

String、Int3二、Boolean等都屬於.Net中定義的類,而string、int、bool至關於C#中對這些類定義的別名。CTS。

5九、Server.Transfer和Response.Redirect的區別是什麼?(常考)

答: Server.Transfer僅是服務器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;Response.Redirect則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。

Server.Transfer是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。 這個過程當中瀏覽器和Web服務器之間通過了一次交互。

Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求。這個過程當中瀏覽器和Web服務器之間通過了兩次交互。

60、不是說字符串是不可變的嗎?string s="abc";s="123"不就是變了嗎?(傳智播客.Net培訓班原創模擬題)

String是不可變的在這段代碼中,s原先指向一個String對象,內容是 "abc",而後咱們將s指向"123",那麼s所指向的那個對象是否發生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另外一個 String對象,內容爲"123",原來那個對象還存在於內存之中,只是s這個引用變量再也不指向它了。

6一、是否能夠從一個static方法內部發出對非static方法的調用? 

不能夠。由於非static方法是要與對象關聯在一塊兒的,必須建立一個對象後,才能夠在該對象上進行方法調用,而static方法調用時不須要建立對象,能夠直接調用。也就是說,當一個static方法被調用時,可能尚未建立任何實例對象,若是從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪一個對象上的呢?這個邏輯沒法成立,因此,一個static方法內部不能發出對非static方法的調用。

6三、說出一些經常使用的類、接口,請各舉5個 

要讓人家感受你對.Net開發很熟,因此,不能僅僅只列誰都能想到的那些東西,要多列你在作項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。

經常使用的類:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T> 

經常使用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

要出乎意料!不要僅僅完成任務!筆試不是高考!

6四、BS與CS的聯繫與區別。 

C/S是Client/Server的縮寫。客戶端須要安裝專用的客戶端軟件。 

B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器。在這種結構下,用戶界面徹底經過WWW瀏覽器實現,一部分事務邏輯在前端實現,可是主要邏輯在服務器端實現。瀏覽器經過Web Server 同數據庫進行數據交互。 

C/S 與 B/S 區別: 

1).硬件環境不一樣: 

C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門服務器提供鏈接和數據交換服務. 

B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備. 信息本身

管理. 有比C/S更強的適應範圍, 通常只要有操做系統和瀏覽器就行 

2).對安全要求不一樣 

 C/S 通常面向相對固定的用戶羣, 對信息安全的控制能力很強. 通常高度機密的信息系統採用C/S 結構適宜. 能夠經過B/S發佈部分可公開信息. 

B/S 創建在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。 

3).處理問題不一樣 

 C/S 程序能夠處理用戶面固定, 而且在相同區域, 安全要求高需求, 與操做系統相關. 應該都是相同的系統。C/S的客戶端因爲是本地程序,所以和本地硬件、程序的交互性很強,好比能夠控制本機的其餘程序、能夠讀寫本地磁盤文件、能夠與硬件交互。

 B/S 創建在廣域網上, 面向不一樣的用戶羣, 分散地域, 這是C/S沒法做到的. 與操做系統平臺關係最小,正由於如此B/S很難和本地硬件、程序、文件進行交互,好比很難控制本機的其餘程序、很難讀寫本地磁盤文件、很難與硬件交互,固然能夠用ActiveX技術解決,好比網銀等就是這麼解決的,這樣作的問題就是可能會被客戶拒絕,並且只侷限於Windows操做系統。

6五、編寫一個單例(Singleton)類。

參考複習ppt。

把構造函數設置爲private,設置一個public、static的對象實例

public FileManager

{

private FileManager(){};

public readonly static FileManager Instance = new FileManager();

}

擴展:搜「C# Singleton」,有線程安全的更牛B的實現

6六、什麼是sql注入?如何避免sql注入?

用戶根據系統的程序構造非法的參數從而致使程序執行不是程序員指望的,惡意SQL語句。使用參數化的SQL就能夠避免SQL注入。

詳細參考複習ppt。舉例子,擺事實!

1' or 1=1

6七、數據庫三範式是什麼?

用本身的話解釋,而不是背概念。

傳智播客風格的非嚴謹卻一會兒明瞭的解答方式:

第一範式:字段不能有冗餘信息,全部字段都是必不可少的。

第二範式:知足第一範式而且表必須有主鍵。

第三範式:知足第二範式而且表引用其餘的表必須經過主鍵引用。

記憶順序:本身內部不重複→別人引用本身→本身引用別人。

1)不必定知足第一範式,好比拼音檢索中增長一個「拼音」字段。

Id Name pinyin

1 楊中科 yangzhongke

2 楊開慧 yangkaihui

3 趙美美 zhaomeimei

whwere pinyin like 'yang%'

6八、說出一些數據庫優化方面的經驗?如何優化有百萬條數據的數據庫?

(1)在常常檢索的字段上(select * from Person where Name=@Name)使用索引提升查詢速度。索引內部原理:想象成Dictionary,插入、刪除、更新的速度慢了,加上索引也多佔用了空間,查詢的速度快了,加上索引之後速度提高很是明顯。對於範圍查詢的字段使用匯集索引。

(2)select中只列出必要的字段,而不是*。

(3)避免全表掃描:避免隱式類型轉換形成的全表掃描,在索引上使用函數也會形成全表掃描(由於索引只是爲字段創建的,一旦使用表達式或者函數,那麼索引就是失效了,固然也能夠使用「函數索引」、「表達式索引」解決這個問題),使用索引不必定能提升查詢速度。好比對於Name字段使用SubStr進行過濾就會形成全表掃描;避免字段計算形成的全表掃描。

(4)避免在索引列上使用計算(where Name+'A'=@MyName)

加分的回答:不進行無心義優化,根據性能查看器的報表,對最耗時的SQL進行優化。

(5)分表。T_Comments,T_Comments_1,T_Comments_二、T_Comments_3,不一樣的表放到不一樣的服務器上、磁盤上。須要程序進行處理。

6九、什麼是數據庫事務?

事務三個特性:一致性、原子性、隔離性。

幾個SQL語句,要麼所有執行成功,要麼所有執行失敗。舉例就用最經典的銀行轉帳的例子就行,而後再舉一個項目中用的例子:傳智播客.net培訓中批量導入客戶數據的時候要麼所有導入成功,要麼所有導入失敗。事務的三個操做:Begin、Commit、RollBack。

取剛插入數據的id值,就要用事務來隔離:Insert 和select top 1 id from ....

70、談談你對設計模式的理解(傳智播客.Net培訓班原創模擬題)

世界上本沒有模式,用的人多了,也就有了模式。不用刻意記每種模式的名字,手中無模式,心中有模式。

大部分設計模式就是接口、抽象類的一個組合。ADO.Net基於接口編程,SafeDbCommand、SafeConnection。SettingsProvider。不必記模式的名字。

舉例:傳智播客.net培訓時SettingsProvider的例子、工廠模式的例子。

7一、談談ViewState。談談對ASP.Net原理的理解。

Label、Textbox在禁用ViewState的時候自增的不一樣表現

Http是無狀態的,WebForm爲了實現基於http的「有狀態」從而簡化開發,ViewState用來在兩次請求間保持狀態。頁面返回前將界面的狀態序列化到ViewState中,這樣就將狀態保存在了瀏覽器中,下次頁面提交的時候會順便再將ViewState提交到服務器,這樣服務器就根據ViewState還原了狀態,這樣WebForm開發就像有狀態同樣了。談談自定義AutoInc控件。

常考:談談ASP.Net生命週期。背鄒老師講課說的那串。而且說:這是WebForm控件開發纔會涉及到生命週期(用戶請求到IIS到ASP.Net這部分正常回答,能夠蔑視的部分是頁面那些PreRender等那些方法),我不多用服務端控件開發,在我眼中只有:請求處理響應!

7二、post、get的區別

get的參數會顯示在瀏覽器地址欄中,而post的參數不會顯示在瀏覽器地址欄中;

使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器通常會提示「是否從新提交」,而get則不會;

用get的頁面能夠被搜索引擎抓取,而用post的則不能夠;

用post能夠提交的數據量很是大,而用get能夠提交的數據量則很是小(2k),受限於網頁地址的長度。

用post能夠進行文件的提交,而用get則不能夠。

參考閱讀:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html

7三、下面的程序執行結果是什麼?(傳智播客.Net培訓班原創模擬題)

class Person

{

public int Age { get; set; }

}

int i1 = 20;

int i2 = i1;

i1++;

Console.WriteLine(i2);

Person p1 = new Person();

p1.Age = 20;

Person p2 = p1;

p1.Age++;

Console.WriteLine(p2.Age);

答案: 20 21 解釋:引用類型和值類型的區別。 

7四、Http默認的端口號是(80)、Ftp默認的端口號是(21)、SQLServer的默認端口號是(1433)(傳智播客.Net培訓班原創模擬題)

7五、運算符++a表示(先將a加1,而後表達式的值爲a加1後的值),i++表示(表達式的值爲a,而後a加1)。

int i = 10;

Console.WriteLine(i++);

Console.WriteLine(++i);

結果是:10 12

7六、下面程序的執行結果是什麼?(傳智播客.Net培訓班原創模擬題)

int i = 10;

Console.WriteLine(i++);

Console.WriteLine(++i);

Console.WriteLine(i=20);

Console.WriteLine(i==20);

答案:10 12 20 True

解答:前兩個參考第80題,i++表達式的值爲i自增以前的值,因此打印10,執行完成後i變成11,執行++i的時候表達式的值爲自增之後的值12。C#中賦值表達式的值爲變量被賦值的值,所以最後一個就輸出i賦值後的值20

while((line=reader.ReadLine())!=null)

{

}

下面程序的執行結果是什麼?

bool b=false;

if(b=true)

{

Console.WriteLine("yes");

}

else

{

Console.WriteLine("no");

}

7七、若是不用VisualStudio,用哪一個命令行編譯C#程序?(*)(傳智播客.Net培訓班原創模擬題)

答:csc.exe 格式:csc.exe Test.cs

csc(C Sharp compiler)

7八、下列哪一個名詞和WebService不直接相關?(B)(傳智播客.Net培訓班原創模擬題)

A、UDDI B、GUID C、WSDL D、SOAP

SOAP和HTTP的關係:SOAP基於Http協議的,和普通網頁不一樣的是網頁返回HTML,SOAP則是符合SOAP協議的XML數據。

7九、.Net Framework中的類是專門供C#調用的是嗎?(傳智播客.Net培訓班原創模擬題)

答:錯。VB.Net等語言均可以調用.Net Framework中的類。CTS、CLS。

80、開放性問題:說出儘量多的基於.Net Framework的語言。(*)(傳智播客.Net培訓班原創模擬題)

參考解答:C#、VB.Net、F#、PowerShell、IronPython、J#、Ruby.Net

8一、.Net、ASP.Net、C#、VisualStudio之間的關係是什麼?(傳智播客.Net培訓班原創模擬題)

答:.Net通常指的是.Net Framework,提供了基礎的.Net類,這些類能夠被任何一種.Net編程語言調用,.Net Framework還提供了CLR、JIT、GC等基礎功能。

ASP.Net是.Net中用來進行Web開發的一種技術,ASP.Net的頁面部分寫在aspx 文件中,邏輯代碼一般經過Code-behind的方式用C#、VB.Net等支持.Net的語言編寫。

C#是使用最普遍的支持.Net的編程語言。除了C#還有VB.Net、IronPython等。

VisualStudio是微軟提供的用來進行.Net開發的集成開發環境(IDE),使用VisualStudio能夠簡化不少工做,不用程序員直接調用csc.exe等命令行進行程序的編譯,並且VisualStudio提供了代碼自動完成、代碼高亮等功能方便開發。除了VisualStudio,還有SharpDevelop、MonoDevelop等免費、開源的IDE,VisualStudio Express版這個免費版本。

8二、AJAX解決什麼問題?如何使用AJAX?AJAX有什麼問題須要注意?項目中哪裏用到了AJAX?(傳智播客.Net培訓班原創模擬題)

答:AJAX解決的問題就是「無刷新更新頁面」,用傳統的HTML表單方式進行頁面的更新時,每次都要將請求提交到服務器,服務器返回後再重繪界面,這樣界面就會經歷:提交→變白→從新顯示這樣一個過程,用戶體驗很是差,使用AJAX則不會致使頁面從新提交、刷新。

AJAX最本質的實現是在Javascript中使用XMLHttpRequest進行Http的請求,開發中一般使用UpdatePanel、JQuery等方式簡化AJAX的開發,UpdatePanel的方式實現AJAX最簡單,可是數據通信量比較大,由於要來回傳整個ViewState,並且不靈活,對於複雜的需求則能夠使用JQuery提供的ajax功能。

UpdatePanel的內部原理。

AJAX最重要的問題是沒法跨域請求(www.rupeng.com →so.rupeng.com),也就是沒法在頁面中向和當前域名不一樣的頁面發送請求,能夠使用在當前頁面所在的域的服務端作代理頁面的方式解決。

在如鵬網項目中發帖的時候顯示相關帖的功能、站內搜索項目中顯示搜索Suggestion、數據採集項目中都用到了AJAX。

常考:不用任何框架編寫一個AJAX程序。XHR:XmlHttpRequest。

8三、NET經過對各語言先編譯成( IL),而後再執行時用( JIT)將其編譯成本地平臺代碼,來實現異構平臺下對象的互操做。(*)

8四、Application 、Cookie和 Session 兩種會話有什麼不一樣?

答:Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。Cookie是保存在客戶端的,機密信息不能保存在Cookie中,只能放小數據;Session是保存在服務器端的,比較安全,能夠放大數據。

8五、開放式問題:你常常訪問的技術類的網站是什麼?

博客園(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文檔、msdn論壇(遇到問題先到網上搜解決方案,還不行就問同事,同事也解決不了就去MSDN論壇提問,必定能獲得解決)

8六、你對.net的GC的理解

GC是.Net的垃圾收集器,能夠進行內存資源的回收,程序員無需關心資源的回收,當一個對象沒有任何引用的時候就能夠被回收了。一個對象能夠被回收並不意味着必定會被當即回收,GC會選擇時機進行回收。能夠調用GC.Collect()讓GC當即回收。GC不能回收非託管資源,對於非託管資源通常都實現了IDisposable接口,而後使用using關鍵字進行資源的回收。

8七、請寫一個SQL語句:從user表中取出name列中的起始字符是「北京」的所有記錄

select * from [user] wherer name like '北京%'

8八、請你簡單的說明數據庫創建索引的優缺點

使用索引能夠加快數據的查詢速度,不過因爲數據插入過程當中會建索引,因此會下降數據的插入、更新速度,索引還會佔磁盤空間。

8九、什麼是WEB服務控件?使用WEB服務控件有那些優點、劣勢?

web服務控件就是能夠在服務器執行的控件,優點在於能夠回傳數據(ViewState),帶有事件驅動(doPostBack),簡化了Html標籤的使用,使得開發asp.net程序能夠像開發Winform程序同樣簡單。Web服務控件最終仍是被渲染(Render)爲Html標籤。使用WEB服務控件的劣勢是會生成一些無用的屬性、ViewState等,不利於SEO,通常在內網系統或者互聯網系統的後臺中使用WEB服務控件。若是沒有複雜的服務器交互動做,就不用Web服務器控件。

runat=server的HTML控件有什麼特色:路徑不用程序員解析,能夠使用「~」來虛擬路徑。

90、下面程序的執行結果是什麼?(傳智播客.Net培訓班原創模擬題)

int i = 10;

if (i <=0);

Console.WriteLine("i必須大於0");

Console.WriteLine("ok");

答案:i必須大於0 ok

解答:注意if (i <=0)後面的「;」,因爲有了「;」,因此Console.WriteLine("i必須大於0")再也不是和if一塊兒的一部分,而是獨立的語句。

for循環也是如此。

9一、下面程序的執行結果是什麼?(傳智播客.Net培訓班原創模擬題)(*)

static void Main(string[] args)

{

Console.WriteLine(Calc());

Console.ReadKey();

}

static int Calc()

{

int i = 0;

try

{

return i;

}

finally

{

Console.WriteLine("finally");

i++;

}

}

答案: finally 0

解釋:參考第22題的值,return先執行,finally後執行,因此return的值是沒有i++以前的0。注意並非return的時候函數真的就「返回、執行結束」了,return只是標記函數的返回值是0,標記完了還會執行finally中的代碼,只有finally中的代碼執行完成後函數才真正的返回。

class Person

{

public int Age{get;set;}

}

static void Main(string[] args)

{

Console.WriteLine(Calc().Age);

Console.ReadKey();

}

static Person Calc()

{

Person p1 = new Person();

p1.Age=10;

try

{

return p1;

}

finally

{

Console.WriteLine("finally");

p1.Age++;

}

}

答案:finally 11

9二、開放式問題:工做中遇到不懂的問題是怎樣去解決的?(傳智播客.Net培訓班原創模擬題)

參考解答:首先到百度上搜索中文的資料,通常均可以找到解決方案,若是還找不到解決方案就到google上搜索英文的資料,若是尚未解決方案就請教同事,若是同事也沒有解決方案,就將問題提交到MSDN論壇。

傳智播客.doc9三、開放性問題:能說出儘量多的數據庫管理系統?(傳智播客.Net培訓班原創模擬題)傳智播客筆試面試寶典.doc

參考解答: MSSQLServer、Oracle、Access、DB二、Sybase

9四、開放性問題:你能說出儘量多的你據說過的編程語言?(傳智播客.Net培訓班原創模擬題)(*)

參考解答:C#、VB.Net、Ada、Cobol、C、C++、Delphi、Erlang、F#、Fortran、Java、JavaScript、Pascal、Python、PowerShell、Ruby、Smalltalk。

9五、請翻譯下面的文章(*) The BaseDataBoundControl is the root of all data-bound control classes. It defines the DataSource and DataSourceID properties and validates their assigned content. DataSource accepts enumerable objects obtained and assigned the ASP.NET 1.x way.

Mycontrol1.DataSource = dataSet;

Mycontrol1.DataBind();

DataSourceID is a string and refers to the ID of a bound data source component. Once a control is bound to a data source, any further interaction between the two (in both reading and writing) is handled out of your control and hidden from view. This is both good and bad news at the same time. It is good (rather, great) news because you can eliminate a large quantity of code. The ASP.NET framework guarantees that correct code executes and is written according to recognized best practices. You're more productive because you author pages faster with the inherent certainty of having no subtle bugs in the middle. If you don't like this situation—look, the same situation that many ASP.NET 1.x developers complained about—you can stick to the old-style programming that passes through the DataSource property and DataBind method. Also in this case, the base class saves you from common practices even though the saving on the code is less remarkable.

參考翻譯(自我感受翻譯的很爛,僅供參考。):

BaseDataBoundControl是全部的數據綁定控件類的根類。它定義了DataSource、DataSourceID兩個屬性,而且對爲它們賦值的內容進行驗證。DataSource屬性接受讀取、設置ASP.Net 1.x方式的IEnumerable 對象。

Mycontrol1.DataSource = dataSet;

Mycontrol1.DataBind();

DataSourceID 是一個字符串,引用綁定的數據源控件的ID。一旦一個控件綁定到了數據源,這二者之間的任何交互(讀和寫)都會在你的控件以外被處理,而且被隱藏起來。這既是好消息也是壞消息。ASP.Net框架保證代碼按照最佳實踐進行代碼的執行、編寫。你會更加高效,由於你編寫了更快的、沒有任何錯誤的分頁代碼。若是你不喜歡這樣的行爲(看,就和ASP.Net 1.x開發人員抱怨的同樣),你仍然能夠使用老的編程風格,也就是將對象傳遞給DataSource屬性,而後調用DataBind方法。另外在這種狀況下,基類能夠幫你避免常規的作法,即便看起來改進不明顯。

9六、A.int i=100;while (1) { i=i%100+1; if (i>100) break; }

B.for (;;);

C.int k=1000; do { ++k; }while(k>=10000);

D.int s=36; while (s);--s;

9七、下列哪一個是和數據庫訪問技術關係不大的技術(C)

A、SQLHelper

B、EnterPrise Library

C、AppDomain

D、Linq

9八、下列哪些說法是錯誤的(傳智播客.Net培訓班原創模擬題)

A、將bmp格式的文件修改成jpg是修改圖片格式最簡單的方法

B、將QQ動態表情顯示在網頁上用gif格式比較好

C、將bmp格式的圖片放到網頁中能夠優化網站速度

D、png格式用在網頁中能夠實現透明的效果。

答案:A、C。A錯誤是由於修改文件的後綴並無真的修改文件的格式,要使用Photoshop、mspaint等圖片處理工具進行轉換才能夠。C錯誤是由於在網頁中不能使用bmp圖片。

9九、從如下簡寫中任選一個簡單描述

OA\MIS\HRM\CRM\KM

參考答案:

OA(Office Automation):辦公自動化

MIS(Managment Information system):管理信息系統

HRM(Human Resource Managment):人力資源管理,包括員工管理、薪資管理、入職管理、離職管理、報銷管理、請假管理等

CRM(Customer Relation Managment):客戶關係管理系統,包括客戶管理、客戶關懷、客戶回訪、投訴管理、諮詢管理、報修管理等

KM(Knowledge Managment):知識管理

ERP(Enterprise Resource Planning):企業資源計劃。

100、請在數據庫中設計表來保存一個樹狀結構的公司組織結構

參考呼叫中心項目的代碼和板書。

10一、下面程序的執行結果是什麼?

public struct Point

{

public int x;

public int y;

public Point(int x, int y)

{

this.x = x;

this.y = y;

}

}

Point p1 = new Point(100, 100);

Point p2 = p1;

p1.x = 200;

Console.WriteLine("{0},{1}", p1.x, p2.x);

答案:

200,100 解答:結構體是複製傳遞的。

10二、在Windows命令行中敲入下面的指令各有什麼反應(傳智播客.Net培訓班原創模擬題):

cd ..

notepad

cmd

ipconfig

dir

答案:

cd ..:進入上一級目錄

notepad:打開記事本

cmd:啓動另一個命令行

ipconfig:打印網絡設置信息

dir:顯示當前目錄下的文件

10四、開放式問題:若是程序連不上SQLServer數據庫服務器服務器,你會怎麼排除這個故障?(傳智播客.Net培訓班原創模擬題)

參考解答:首先ping一下服務器IP,看是否可以ping通,若是不能ping通,則看是否網絡有問題;若是能ping通,再telnet一下服務器的1433端口,看是否可以連通;若是不能連通則多是SQLServer服務停掉了或者是服務器上的防火牆封掉了1433端口;若是能連通再檢查是否是本地程序的問題、驅動的問題。

SQLServer客戶端和SQLServer服務器端也是Socket通信,因此也須要端口,默認就是1433。

10五、下面的IP地址有什麼含義?(傳智播客.Net培訓班原創模擬題)

127.0.0.1:本地迴環地址(LoopBack),localhost,在hosts文件中把localhost解析爲了127.0.0.1

0.0.0.0:監聽全部的網卡。AnyIP。(瞭解)

255.255.255.0

106:不用JQuery等框架實現AJAX無刷新登陸。

提示:用純XMLHttpRequest實現。

107:Http狀態碼各是什麼意思。

301:(永久重定向)、302 :重定向 404 :頁面不存在

500:服務器內部錯誤

108:對html文本框進行賦值的JQuery語句,對html文本框進行取值的JQuery語句,對TextBox服務端控件進行取值的語句JQuery。

109:IE和FireFox的不一樣,IE6和IE8的不一樣。

1)XMLHttpRequest。不一樣瀏覽器實現AJAX的代碼是不同的。

2)CSS、Javascript、dom。有的瀏覽器不支持InnerText

3)咱們項目開發中爲了不這些跨瀏覽器兼容的問題,就是用JQuery框架,他幫咱們屏蔽了瀏覽器的差別。

1十、Session有什麼重大BUG,微軟提出了什麼方法加以解決?

iis中因爲有進程回收機制,系統繁忙的話Session會丟失,IIS重啓也會形成Session丟失。這樣用戶就要從新登陸或者從新添加購物車、驗證碼等放到Session中的信息。能夠用State server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。可是(必定要寫上,這樣纔夠拽)我認爲這不是Bug,只能說是In-Proc方式存儲Session的缺陷,缺陷是和Bug不同的,In-Proc方式存儲Session會由服務器來決定何時釋放Session,這是By Design,In-Proc方式不知足要求的話徹底能夠用StateServer和數據庫的方式。

StateServer還能夠解決集羣Session共享的問題。

配置StateServer的方法:

http://support.microsoft.com/kb/317604

http://blog.csdn.net/zj1103/archive/2008/09/14/2926773.aspx

1十一、asp.net中<%%>、<%=%>、<%#%>的區別是什麼

<%%>是執行<%%>中的C#代碼,<%=%>是將=後表達式的值輸出到Response中,<%#%>是數據綁定,通常用在ListView、GridView、Repeater等控件的綁定中。數據綁定分爲:Eval:單向綁定和Bind:雙向綁定。

1十二、去掉「aaa bb cc afsdf」中的多個空格只保留一個空格。

提示:參考正則表達式哪一章。

Regex.Replace(str,@"(\s+)"," ")

11三、說說在軟件設計中你遇到的以空間換時間的例子?

參考回答:談Cache(緩存)、索引這些例子。用額外的磁盤、內存空間的消耗來提升執行速度。

11四、 asp.net中的錯誤機制。

參考:

一、定製錯誤頁來將顯示一個友好的報錯頁面。

二、頁面中未捕獲同樣會觸發Page_Error,應用程序中的未捕獲異常會觸發Application_Error。經過HttpContext.Current.Server.GetLastError()拿到未捕捉異常,記錄到Log4Net日誌中。

11五、不用中間變量交換兩個變量

int i = 500;

int j = int.MaxValue - 10;

//int i = 10;

//int j = 20;

Console.WriteLine("i={0},j={1}", i, j);

i = i + j;//i=30

j = i - j;//j=10;

i = i - j;//i=20;

Console.WriteLine("i={0},j={1}",i,j);

另一個解決方案:位運算。

int a=5; int b=6;

a=a^b; b=b^a; //b^a至關於 b^a^b 也就是 b^a^b的值就是a了, 下邊相同 a=a^b;

11六、橫表、縱錶轉換

1)、縱表結構 TableA 

Name

Course

Grade

張三

語文

75

張三

數學

80

張三

英語

90

李四

語文

95

李四

數學

55

2)橫表結構 TableB

Name

語文

數學

英語

張三

75

80

90

李四

95

55

0

先理解:

select Name, 

(case Course when ‘語文‘ then Grade else 0 end) as 語文,

(case Course when ‘數學‘ then Grade else 0 end) as 數學,

(case Course when ‘英語‘ then Grade else 0 end) as 英語 

from TableA

而後理解標準答案:

select Name, 

sum(case Course when ‘語文‘ then Grade else 0 end) as 語文,

sum(case Course when ‘數學‘ then Grade else 0 end) as 數學,

sum(case Course when ‘英語‘ then Grade else 0 end) as 英語 

from TableA

group by Name

2)、橫錶轉縱表的"SQL"示例 橫表結構: TEST_H2Z  ID 姓名 語文 數學 英語   1 張三 80 90 70   2 李四 90 85 95   3 王五 88 75 90  轉換後的表結構:   ID 姓名 科目 成績   1 張三 語文 80   2 張三 數學 90   3 張三 英語 70   4 李四 語文 90   5 李四 數學 80   6 李四 英語 99   7 王五 語文 85   8 王五 數學 96   9 王五 英語 88  橫錶轉縱表SQL示例: SELECT 姓名,'語文' AS 科目,語文 AS 成績 FROM TEST_H2Z UNION ALL  SELECT 姓名,'數學' AS 科目,數學 AS 成績 FROM TEST_H2Z UNION ALL  SELECT 姓名,'英語' AS 科目,英語 AS 成績 FROM TEST_H2Z ORDER BY 姓名,科目 DESC; 

11七、刪除姓名、年齡重複的記錄

Id name age salary

1 yzk 80 1000

2 yzk 80 2000

3 tom 20 20000

4 tom 20 20000

5 im 20 20000

//取得不重複的數據

select * from Persons

where Id in

(

SELECT MAX(Id) AS Expr1

FROM Persons

GROUP BY Name, Age

)

根據姓名、年齡分組,取出每組的Id最大值,而後將Id最大值以外的排除。

刪除重複的數據:

delete from Persons

where Id not in

(

SELECT MAX(Id) AS Expr1

FROM Persons

GROUP BY Name, Age

)

11八、介紹幾個使用過的開源的項目

Lucene.net、NPOI、JQuery、ASP.Net AJAX toolkit、Quartz.Net、JqueryUI、ASP.Net MVC。在CodePlex、SourceForge等網站上有更多的開源項目。

11九、說出五個集合類

List、Dictionary、Set、Stack(先入後出)、Queue、Tree等。

120有一個10個數的數組,計算其中不重複數字的個數。{3,5,9,8,10,5,3}

工程化的非最優解答:用HashSet

int[] values = { 3, 5, 9, 8, 10, 5, 3 };

HashSet<int> set = new HashSet<int>();

foreach (int i in values)

{

set.Add(i);

}

foreach (int i in set)

{

Console.WriteLine(i);

}

12一、現有1~100共一百個天然數,已隨機放入一個有98個元素的數組a[98]。要求寫出一個儘可能簡單的方案,找出沒有被放入數組的那2個數,並在屏幕上打印這2個數。注意:程序不用實現天然數隨機放入數組的過程。

參考:http://www.rupeng.com/forum/thread-1363-1-1.html

12二、下面是一個由*號組成的4行倒三角形圖案。要求:一、輸入倒三角形的行數,行數的取值3-21之間,對於非法的行數,要求拋出提示「非法行數!」;二、在屏幕上打印這個指定了行數的倒三角形。

*******

*****

***

*

12三、一個文本文件含有以下內容:

4580616022644994|3000|趙濤

4580616022645017|6000|張屹

4580616022645090|3200|鄭欣夏

上述文件每行爲一個轉帳記錄,第一列表示賬號,第二列表示金額,第三列表示開戶人姓名。

建立一張數據庫表(MS SQLServer數據庫,表名和字段名自擬),請將上述文件逐條插入此表中。

12四、一個文本文件含有以下內容,分別表示姓名和成績:

張三 90

李四 96

王五 78

趙六 82

提供用戶一個控制檯界面,容許用戶輸入要查詢的姓名,輸入姓名而且按回車之後,打印出此人的成績,若是不輸入姓名直接按回車則顯示全部人的姓名以及成績。(注意:不能使用數據庫)

12五、Equals和==的區別

參考:http://www.cnblogs.com/jiahaipeng/archive/2008/04/11/1146316.html

12六、下面程序的執行結果是什麼?

class Program

{

static void Main(string[] args)

{

Person p1 = new Person();//1:00

Console.WriteLine(DateTime.Now);

Thread.Sleep(1000 * 10);

Console.WriteLine(DateTime.Now);

Console.WriteLine(p1.BirthDay);

//打印出來的是對象New出來的時間

//由於字段是對象被new出來的時候初始化的

Console.ReadKey();

}

}

class Person

{

public DateTime BirthDay = DateTime.Now;

}

12七、說一下SQLServer中索引的兩種類型

參考:聚簇(cluster)索引和非聚簇索引。

字典的拼音目錄就是聚簇(cluster)索引,筆畫目錄就是非聚簇索引。這樣查詢「G到M的漢字」就很是快,而查詢「6劃到8劃的字」則慢。

聚簇索引是一種特殊索引,它使數據按照索引的排序順序存放表中。聚簇索引相似於字典,即全部詞條在字典中都以字母順序排列。聚簇索引實際上重組了表中的數據,因此你只能在表中創建一個聚簇索引。 當數據按值的範圍查詢時,聚簇索引就顯得特別有用。由於全部SQLServer都必需先找到所查詢範圍的第一行,而後依次下去,直到該範圍的最後一個值找到爲止,而且保證了全部其餘值也落在這個範圍內。舉一個例子,一個應用程序要查找首字母位於G和P之間的姓名列表,SQLServer首先找到以字母G開頭的名字,取出全部記錄,直到找到以字母P開頭的名字爲止,這種方法使得查詢過程很是高效。

進行大量數據改動的表不適宜用聚簇索引,由於SQLServer將不得不在表中維護行的次序。若是要索引的值極少,例如一個列包含的全都是1和0,建立聚簇索引就不是個好主意。若是表常常由一個指定的列來排序,該列將是簇索引的最佳候選列。這是由於表中的數據已經爲你排好序了。若是訪問一個表並使用BETWEEN、<、>、>=或<=操做符來返回一個範圍的值時,應該考慮使用聚簇索引。

12八、滬江網網申題:

1).可否脫離VS用相似editplus的工具手寫代碼?你以爲如何才能提升代碼的效率和性能?

能夠,使用CSC.exe 來編譯.cs文件!

能夠根據業務流程、業務數據的特色進行優化,好比能夠採用緩存、索引、表驅動等來提高代碼的效率和性能,同時不要進行無心義的代碼優化,重點優化系統的性能瓶頸。

2)如何提升頁面的顯示速度?假如一個頁面的加載時間是10.89s,你會用什麼樣的方式進行優化?

提示:分而治之的思想。

首先要找出問題所在,是服務器端運行的速度慢仍是服務器端到客戶端的下載慢仍是頁面在瀏覽器的加載速度慢。

若是是服務器端運行速度慢,則找是數據庫的緣由仍是算法的問題,若是是數據庫的問題則嘗試添加索引、優化SQL語句,若是是算法的問題,則優化算法。若是對於一些不常常改動的頁面能夠使用靜態頁技術!對於一些數據不須要及時更新的並且取數據的過程很是耗時能夠使用緩存。頁面中的內容能夠按需加載(好比說能夠像verycd網站的評論那樣當用戶須要看的時候再加載其內容),能夠在圖片須要顯示的時候再進行加載。

若是是服務器端到客戶端的下載慢則看是頁面體積過於臃腫仍是網絡問題,若是是頁面體積過於臃腫,則優化HTML代碼,去掉無用的標籤,壓縮JS、CSS,能夠用CSS Spirit技術將多個圖片放到一個圖片中,減小向服務器的請求。若是是網絡問題,則嘗試在不一樣的網絡、地區部署服務器,而後使用CDN技術加速訪問。

若是是頁面中的JavaScript運行復雜致使運行速度慢,則優化JavaScript。

3).在程序編碼的時候,你會對Sql注入漏洞的防範採起什麼樣的措施?

儘可能不要拼SQL語句!使用參數化查詢或存儲過程能夠防止SQL注入攻擊!在必須用SQL拼接的地方對用戶輸入的內容進行檢查、過濾。

4).你會採用什麼樣的策略和方法來實現系統緩存?

在ASP.NET中 緩存有 頁面緩存,數據源緩存,和一些本身定義的緩存!

對於那些整個頁面不常常變化的咱們能夠使用頁面緩存,而對於那些執行很是耗時的SQL語句而且數據的及時性要求不高的咱們能夠使用數據源緩存。

對於頁面緩存、數據源緩存等都不知足要求的狀況下采用直接操做HttpRuntime.Cache來自定義緩存策略。若是須要用多臺Web服務器做爲一個集羣來承載網站的狀況,則能夠部署專門的分佈式緩存服務器,好比Memcached。

5)網站想要實現文件防盜鏈的功能,說說你的解決方案。

讀取HTTP報文頭中的UrlReferrer在Application_BeginRequest中咱們能夠判斷用戶的請求是否來源於本網站。若是不是咱們能夠終止用戶的請求(Response.End();)!

6).有這樣一個功能需求,用戶新註冊的時候須要給他推薦3個好友,說說你的推薦算法

好比說相似豆瓣網咱們能夠根據用戶興趣來匹配,相似於人人網那些地區性比較比較強的網站咱們能夠根據用戶的地區來匹配。

7).若是給學英語的用戶設計一個在線應用,你會選擇什麼做爲切入點,簡述你的想法和理由。

英語學習資料的下載、在線答疑、用戶交流做爲切入點。

8).你眼中的滬江是怎樣的?談談你對滬江的理解

我眼中的滬江是爲那些愛好外語,須要學習外語人提供一個學校交流的平臺!

9).是否有如下相關開發經驗?若有請簡要說明開發狀況(有可看項目網址也請提供)。

a、lucene相關開發經驗

b、分佈式文件處理經驗

c、流媒體相關開發經驗

d、語音技術

e、高負載網站開發

在下述選項時,沒有構成死循環的程序是 (C)

f、手機相關開發 

熟悉lucene,曾經用luncene.net作過一個DISCUZNT論壇的站內搜索。主要使用luncene.net、盤古分詞、Log4Net、Quartz.net等組件。

12九、請編程遍歷頁面上全部TextBox控件並給它賦值爲string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } }

130、億陽信通二面

1).什麼是多線程,如何解決多線程死鎖問題?

2).說出TCP和UDP之間的區別,各有什麼優缺點?

3).說出socket通訊原理

4).有沒有作過C/S的項目,談談你在項目中遇到哪些困難?

5).說出幾個你知道的設計模式?並寫出示例代碼?

6).http底層是什麼?

7).反射原理是什麼?

8).說出ajax的原理,並用僞代碼或寫出一段代碼描述出來?

9).說下DataSet和DataReader之間的區別,各有什麼優缺點?

10).現有一個list<int>,刪除裏面等於0值的全部項。參考:倒序刪除。

List<int> list = new List<int>();

list.Add(0);

list.Add(0);

list.Add(2);

list.Add(5);

list.Add(0);

list.Add(0);

list.Add(3);

list.Add(0);

//錯誤

//for (int i = 0; i < list.Count; i++)

//{

// if (list[i] == 0)

// {

// list.RemoveAt(i);

// }

//}

for (int i = list.Count-1; i >=0; i--)

{

if (list[i] == 0)

{

list.RemoveAt(i);

}

}

foreach (int i in list)

{

Console.WriteLine(i);

}

13二、 int i=2000;

object o=i;

i=2001;

int j=(int)o;

Console.WriteLine("i={0},o={1},j={2}",i,o,j);

輸出的結果是:

13三、. float f = -123.567F;

int i = (int)f;

Console.WriteLine(i);

輸出地結果是:

134.一個數組:1,1,2,3,5,8,13,21...+m,求第30位數是多少?用遞歸實現;

解答:總結遞歸規律:F(n)=F(n-2)+F(n-1) Fibonacci數列

static int F(int n)

{

if (n == 1)

{

return 1;

}

if (n == 2)

{

return 1;

}

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

}

非遞歸(有bug嗎?),遞歸算法的缺點:測試大數據

int n = Convert.ToInt32(Console.ReadLine());

if(n<=0)

{Console.WriteLine("必須大於0");return;}

if(n==1) //時刻注意邊界值!!!

{  Console.WriteLine("1");

return;

}

int[] data =new int[n];

data[0] = 1;

data[1] = 1;

for(int i=2;i<n;i++)

{

data[i] = data[i-1]+data[i-2];

}

Console.WriteLine(data[n-1]);

上面程序的時間複雜度爲O(n),空間複雜度爲O(n)

參考:算法複雜度:時間複雜度:算法運行須要消耗的時間的數量級、空間複雜度:算法運行須要消耗的內存的數量級。

消耗的時間或者內存隨着問題規模的擴大而成正比增長,就是O(n)。

消耗的時間或者內存隨着問題規模的擴大而不變,就是O(1)。

消耗的時間或者內存隨着問題規模的擴大而n*n增長,就是O(n*n)

算法複雜度只考慮最差狀況,而且算法複雜度忽略常量和低階。把數組數一遍和數兩遍的時間複雜度都是O(n)。

13五、Remoting與WebService的區別?

.net Remoting的資料:http://www.cnblogs.com/Terrylee/archive/2005/11/03/267621.html

136.ref與out的區別?

137.表A字段Id爲numberic(18,0),哪一個SQL語句是錯誤的:

select * from A where id='';

select * from A where id='13';

select * from A where id=null;

select * from A where id=' 13';

138.在SQLServer中求當前時間與2012-01-01 0:0:0相差的秒數?

13九、你對Html 5瞭解多少?

140、作一個表格,三行三列,第一列,前兩行合一;第二行,後兩列合一。

14一、下面的HTML代碼

<style type="text/css">

#Text1{ MARGIN-BOTTOM: 0pt" class="p17"> .txt{  margin-bottom: 0pt;" class="p0">input { MARGIN-BOTTOM: 0pt" class="p17"> </style>

<input id="Text1" type="text" class="txt" />

<input type="text" class="txt" />

兩個文本框各是什麼顏色?

參考資料:我的大於集體:元素單獨設置的樣式>class命名樣式>標籤樣式。樣式override。

14二、北京時代引擎

1) UML主要有哪些組成部分,試將其圖形繪出?

UML早已淘汰,IBM撈錢的老東西!敏捷開發、迭代式開發(持續集成)、結對編程。

2 ) Web2.0有哪些主要應用?

不是由網站產生的,而是由用戶產生網站內容(UGC:User Generate Content),好比微博、博客、開心網、貓撲、糗事百科、博客園等都是。

3 ) 主要AJAx框架有哪些。UpdatePanel、Ajax Toolkit。JQuery AJAx、最根本的就是XHR。

4 ) AJAx與後臺交換數據主要有哪些方式

5) Web頁面的佈局安排主要有哪兩種方式。參考:Div和Table

6 ) 什麼是測試驅動的開發,在.NET平臺上如何實現。使用VS2010的測試項目,使用Assert類進行斷言。單元測試。輸入輸入驗證是不是指望的輸出。

7) 從Web界面上得到一個對象的50個屬性值,如何更好的驗證並保存到數據庫?

8 ) 什麼是ASP.NET MVC框架,有什麼特色和優點?

143. 請編程實現一個冒泡排序算法? 答: int[] array = new int[] { 3, 9, 2, 90, 22, 105, 99 };

for (int i = 0; i < array.Length - 1; i++)

{

for (int j = i + 1; j < array.Length; j++)

{

if (array[j] < array[i])

{

int temp = 0;

temp = array[i];

array[i] = array[j];

array[j] = temp;

}

}

}

foreach (int i in array)

{

Console.WriteLine(i);

}

144. 求如下表達式的值,寫出您想到的一種或幾種實現方法:1-2+3-4+……+m 用數學的方法。

14五、傳智播客.net培訓精品就業班學員總結SQL題

表一:student_info

學號

姓名

性別

出生年月

家庭住址

備註

0001

張三

1981-8-9

北京

NULL

 

 

 

 

 

 

 

 

 

 

 

 

表二:curriculum

課程編號

課程名稱

學分

0001

計算機基礎

2

0002

C語言

2

表三:grade

學號

課程編號

分數

0001

0001

80

0001

0002

90

題目:條件查詢:

1 在GRADE表中查找80-90份的學生學號和分數

select 學號,分數 from grade where 分數 between 80 and 90

2 在GRADE 表中查找課程編號爲003學生的平均分

select avg(分數) from grade where 課程編號='003'

3 在GRADE 表中查詢學習各門課程的人數

Select課程編號,count(學號) as 人數from grade group by 課程編號

4 查詢全部姓張的學生的學號和姓名

select 姓名,學號 from student_info where 姓名 like '張%'

嵌套查詢:

一、 查詢和學號’0001’的這位同窗性別相同的全部同窗的姓名和出生年月

select 姓名,出生年月 from student_info where 性別 in(select 性別 from student_info where sno='0001')

二、 查詢全部選修課程編號爲0002 和0003的學生的學號、姓名和性別

select 學號,姓名,性別 from student_info where 學號 in(select 學號 from grade where 課程編號='0002' and 學號 in(select 學號 from grade where 課程編號='0001'))

三、 查詢出學號爲0001的學生的分數比0002號學生最低分高的課程編號的課程編號和分數

select 課程編號, 分數 from grade where 學號='0001' and 分數>(select min(分數) from grade where 學號='0002')

多表查詢:

一、 查詢分數在80-90分的學生的學號、姓名、分數

select student_info.學號,student_info.姓名,grade.分數 from student_info,grade where grade.分數 between 80 and 90

二、 查詢學習了’C語言’課程的學生學號、姓名和分數

select student_info.學號,student_info.姓名,grade.成績from student_info,grade,curriculum where student_info.學號=grade.學號and grade.課程號=curriculum.課程號and curriculum.課程名='C語言'

三、 查詢全部學生的總成績,要求列出學號、姓名、總成績,沒有選課的學生總成績爲空。

select grade.學號,student_info.姓名,sum(grade.成績) as 總成績from student_info,grade where grade.學號=student_info.學號group by grade.學號,student_info.姓名

題目、活期存款中,「儲戶」經過「存取款單」和「儲蓄所」發生聯繫。假定儲戶包括:帳號,姓名,電話,地址,存款額;「儲蓄所」包括:儲蓄所編號,名稱,電話,地址(假定一個儲戶能夠在不一樣得儲蓄所存取款) 一、寫出設計以上表格的語句(4分) 二、建立一個觸發器TR1完成下面內容: 當向「存取款單」表中插入數據時,若是存取標誌=1則應該更改儲戶表讓存款額加上存取金額,若是存取標誌=0則應該更改儲戶表讓存款額減去存取金額,若是餘額不足顯示餘額不足錯誤。

CREATE TABLE CREATE TRIGGER tr1 on qukuan after insert

AS

BEGIN

declare @sid nvarchar(50)

declare @type int

declare @qian int

declare @yuer int

select @sid=sid,@type=[type],@m=m from inserted

select @yuer=yuer from cunkuan

if(@type=1)

begin

update cunkuan set yuer=yuer+@qian

end

else

begin

if(@yuer<@qian)

begin

print '餘額不足'

end

else

begin

update cunkuan set yuer=yuer-@qian

end

end

END

GO

本題用到下面三個關係表:

CARD 借書卡: (CNO 卡號,NAME 姓名,CLASS 班級)

BOOKS 圖書: (BNO 書號,BNAME 書名,AUTHOR 做者,PRICE 單價,QUANTITY 庫存冊數 )

BORROW 借書記錄: (CNO 借書卡號,BNO 書號,RDATE 還書日期

備註:限定每人每種書只能借一本;庫存冊數隨借書、還書而改變。

要求實現以下處理:

一、 寫出自定義函數,要求輸入借書卡號能獲得該卡號所借書金額的總和

CREATE FUNCTION getSUM

(

@CNO int

)

RETURNS int

AS

BEGIN

declare @sum int

select @sum=sum(price) from BOOKS where bno in (select bno from BORROW where cno=@CNO)

return @sum

END

GO

2. 找出借書超過5本的讀者,輸出借書卡號及所借圖書冊數。

select CNO,count(BNO) as 借書數量from BORROW group by CNO having count(BNO)>3

3. 查詢借閱了"水滸"一書的讀者,輸出姓名及班級。

select name,class from card where cno in( select cno from borrow where bno in(

select bno from BOOKS where bname='水滸'))

4. 查詢過時未還圖書,輸出借閱者(卡號)、書號及還書日期。

select CNO,BNO,RDATE from borrow where getdate()>RDATE

5. 查詢書名包括"網絡"關鍵詞的圖書,輸出書號、書名、做者。

select bno,bname,author from books where bname like '網絡%'

6. 查詢現有圖書中價格最高的圖書,輸出書名及做者。

select bname,author from books where price in(select max(price) from books )

7. 查詢當前借了"計算方法"但沒有借"計算方法習題集"的讀者,輸出其借書卡號,並按卡號降序排序輸出。

select cno from borrow where bno in (select bno from books where bname='計算方法') and cno not in ( select cno from borrow where bno in(select bno from books where bname='計算方法習題集')) order by cno desc

SELECT a.CNO

FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO AND b.BNAME=N'計算方法'

AND NOT EXISTS(

SELECT * FROM BORROW aa,BOOKS bb

WHERE aa.BNO=bb.BNO

AND bb.BNAME=N'計算方法習題集'

AND aa.CNO=a.CNO)

ORDER BY a.CNO DESC

8. 將"C01"班同窗所借圖書的還期都延長一週。

update borrow set rdate=dateadd(day,7,rdate) from BORROW where cno in(select cno from card where class='一班')

9. 從BOOKS表中刪除當前無人借閱的圖書記錄。

DELETE A FROM BOOKS a

WHERE NOT EXISTS(

SELECT * FROM BORROW

WHERE BNO=a.BNO)

10.若是常常按書名查詢圖書信息,請創建合適的索引。

(這個不肯定對不 90%應該是對的 本身看了下書寫的)

CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)

11.在BORROW表上創建一個觸發器,完成以下功能:若是讀者借閱的書名是"數據庫技術及應用",就將該讀者的借閱記錄保存在BORROW_SAVE表中(注ORROW_SAVE表結構同BORROW表)。

CREATE TRIGGER TR_SAVE ON BORROW

FOR INSERT,UPDATE

AS

IF @@ROWCOUNT>0

INSERT BORROW_SAVE SELECT i.*

FROM INSERTED i,BOOKS b

WHERE i.BNO=b.BNO

AND b.BNAME=N'數據庫技術及應用'

12.創建一個視圖,顯示"力01"班學生的借書信息(只要求顯示姓名和書名)。

CREATE VIEW V_VIEW

AS

select name,bname

from books,card,borrow

where borrow.cno=card.cno and borrow.bno=books.bno and class='一班'

13.查詢當前同時借有"計算方法"和"組合數學"兩本書的讀者,輸出其借書卡號,並按卡號升序排序輸出。

select a.cno from borrow a,borrow b

where a.cno=b.cno and

a.bno in(select bno from books where bname='計算方法') and

b.bno in(select bno from books where bname='組合數學')

order by a.cno desc

SELECT a.CNO

FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO

AND b.BNAME IN('計算方法','組合數學')

GROUP BY a.CNO

HAVING COUNT(*)=2

ORDER BY a.CNO DESC

1四、用事務實現以下功能:一個借書卡號借走某書號的書,則該書的庫存量減小1,當某書的庫存量不夠1本的時候,該卡號不能借該書

alter PROCEDURE pro_jieshu

@cno int,

@bno int,

@date datetime

AS

BEGIN

begin tran

declare @quantity int

select @quantity=quantity from books where bno=@bno

insert into borrow values(@cno,@bno,@date)

update books set quantity=@quantity-1 where bno=@bno

if(@quantity>0)

begin

commit tran

end

else

begin

print '已無庫存'

rollback

end

END

GO

1五、用遊標實現將書號爲‘A001’的書本的價格提升10元

declare @bno int

declare @bname nvarchar(50)

declare @author nvarchar(50)

declare @price int

declare @quantity int

declare mycursor cursor for select * from books

open mycursor

fetch next from mycursor into @bno,@bname,@author,@price,@quantity

while(@@fetch_status=0)

begin

if(@bno=2)

begin

update books set price=@price+10 where current of mycursor

end

fetch next from mycursor into @bno,@bname,@author,@price,@quantity

end

close mycursor

deallocate mycursor

Student(S#,Sname,Sage,Ssex) 學生表

Course(C#,Cname,T#) 課程表

SC(S#,C#,score) 成績表

Teacher(T#,Tname) 教師表

問題:

一、 查詢「001」課程比「002」課程成績高的全部學生的學號;

select a.S# from (select s#,score from SC where C#='001') a,(select s#,score

from SC where C#='002') b

where a.score>b.score and a.s#=b.s#;

二、查詢平均成績大於60分的同窗的學號和平均成績;

select S#,avg(score)

from sc

group by S# having avg(score) >60;

三、查詢全部同窗的學號、姓名、選課數、總成績;

select Student.S#,Student.Sname,count(SC.C#),sum(score)

from Student left Outer join SC on Student.S#=SC.S#

group by Student.S#,Sname

四、查詢姓「李」的老師的個數;

select count(distinct(Tname))

from Teacher

where Tname like '李%';

五、查詢沒學過「葉平」老師課的同窗的學號、姓名;

select Student.S#,Student.Sname

from Student

where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平');

六、查詢學過「001」而且也學過編號「002」課程的同窗的學號、姓名;

select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');

七、查詢學過「葉平」老師所教的全部課的同窗的學號、姓名;

select S#,Sname

from Student

where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='葉平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='葉平'));

八、查詢課程編號「002」的成績比課程編號「001」課程低的全部同窗的學號、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;

九、查詢全部課程成績小於60分的同窗的學號、姓名;

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

十、查詢沒有學全全部課的同窗的學號、姓名;

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

十一、查詢至少有一門課與學號爲「1001」的同窗所學相同的同窗的學號和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

十二、查詢至少學過學號爲「001」同窗全部一門課的其餘同窗學號和姓名;

select distinct SC.S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

1三、把「SC」表中「葉平」老師教的課的成績都更改成此課程的平均成績;

update SC set score=(select avg(SC_2.score)

from SC SC_2

where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='葉平');

1四、查詢和「1002」號的同窗學習的課程徹底相同的其餘同窗學號和姓名;

select S# from SC where C# in (select C# from SC where S#='1002')

group by S# having count(*)=(select count(*) from SC where S#='1002');

1五、刪除學習「葉平」老師課的SC表記錄;

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';

1六、向SC表中插入一些記錄,這些記錄要求符合如下條件:沒有上過編號「003」課程的同窗學號、二、

號課的平均成績;

Insert SC select S#,'002',(Select avg(score)

from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

1七、按平均成績從高到低顯示全部學生的「數據庫」、「企業管理」、「英語」三門的課程成績,按以下形式顯示: 學生ID,,數據庫,企業管理,英語,有效課程數,有效平均分

SELECT S# as 學生ID

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 數據庫

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企業管理

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英語

,COUNT(*) AS 有效課程數, AVG(t.score) AS 平均成績

FROM SC AS t

GROUP BY S#

ORDER BY avg(t.score)

1八、查詢各科成績最高和最低的分:以以下形式顯示:課程ID,最高分,最低分

SELECT L.C# As 課程ID,L.score AS 最高分,R.score AS 最低分

FROM SC L ,SC AS R

WHERE L.C# = R.C# and

L.score = (SELECT MAX(IL.score)

FROM SC AS IL,Student AS IM

WHERE L.C# = IL.C# and IM.S#=IL.S#

GROUP BY IL.C#)

AND

R.Score = (SELECT MIN(IR.score)

FROM SC AS IR

WHERE R.C# = IR.C#

GROUP BY IR.C#

);

1九、按各科平均成績從低到高和及格率的百分數從高到低順序

SELECT t.C# AS 課程號,max(course.Cname)AS 課程名,isnull(AVG(score),0) AS 平均成績 ,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分數 FROM SC T,Course

where t.C#=course.C#

GROUP BY t.C#

ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

20、查詢以下課程平均成績和及格率的百分數(用"1行"顯示): 企業管理(001),馬克思(002),OO&UML (003),數據庫(004)

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企業管理平均分

,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企業管理及格百分數

,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 馬克思平均分

,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 馬克思及格百分數

,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分數

,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 數據庫平均分

,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 數據庫及格百分數

FROM SC

2一、查詢不一樣老師所教不一樣課程平均分從高到低顯示

SELECT max(Z.T#) AS 教師ID,MAX(Z.Tname) AS 教師姓名,C.C# AS 課程ID,MAX(C.Cname) AS 課程名稱,AVG(Score) AS 平均成績

FROM SC AS T,Course AS C ,Teacher AS Z

where T.C#=C.C# and C.T#=Z.T#

GROUP BY C.C#

ORDER BY AVG(Score) DESC

2二、查詢以下課程成績第 3 名到第 6 名的學生成績單:企業管理(001),馬克思(002),UML (003),數據庫(004)

[學生ID],[學生姓名],企業管理,馬克思,UML,數據庫,平均成績

SELECT DISTINCT top 3

SC.S# As 學生學號,

Student.Sname AS 學生姓名 ,

T1.score AS 企業管理,

T2.score AS 馬克思,

T3.score AS UML,

T4.score AS 數據庫,

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 總分

FROM Student,SC LEFT JOIN SC AS T1

ON SC.S# = T1.S# AND T1.C# = '001'

LEFT JOIN SC AS T2

ON SC.S# = T2.S# AND T2.C# = '002'

LEFT JOIN SC AS T3

ON SC.S# = T3.S# AND T3.C# = '003'

LEFT JOIN SC AS T4

ON SC.S# = T4.S# AND T4.C# = '004'

WHERE student.S#=SC.S# and

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

NOT IN

(SELECT

DISTINCT

TOP 15 WITH TIES

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

FROM sc

LEFT JOIN sc AS T1

ON sc.S# = T1.S# AND T1.C# = 'k1'

LEFT JOIN sc AS T2

ON sc.S# = T2.S# AND T2.C# = 'k2'

LEFT JOIN sc AS T3

ON sc.S# = T3.S# AND T3.C# = 'k3'

LEFT JOIN sc AS T4

ON sc.S# = T4.S# AND T4.C# = 'k4'

ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

2三、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ <60]

SELECT SC.C# as 課程ID, Cname as 課程名稱

,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

FROM SC,Course

where SC.C#=Course.C#

GROUP BY SC.C#,Cname;

2四、查詢學平生均成績及其名次

SELECT 1+(SELECT COUNT( distinct 平均成績)

FROM (SELECT S#,AVG(score) AS 平均成績

FROM SC

GROUP BY S#

) AS T1

WHERE 平均成績 > T2.平均成績) as 名次,

S# as 學生學號,平均成績

FROM (SELECT S#,AVG(score) 平均成績

FROM SC

GROUP BY S#

) AS T2

ORDER BY 平均成績 desc;

2五、查詢各科成績前三名的記錄:(不考慮成績並列狀況)

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

2六、查詢每門課程被選修的學生數

select c#,count(S#) from sc group by C#;

2七、查詢出只選修了一門課程的所有學生的學號和姓名

select SC.S#,Student.Sname,count(C#) AS 選課數

from SC ,Student

where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

2八、查詢男生、女生人數

Select count(Ssex) as 男生人數 from Student group by Ssex having Ssex='男';

Select count(Ssex) as 女生人數 from Student group by Ssex having Ssex='女';

2九、查詢姓「張」的學生名單

SELECT Sname FROM Student WHERE Sname like '張%';

30、查詢同名同性學生名單,並統計同名人數

select Sname,count(*) from Student group by Sname having count(*)>1;;

3一、1981年出生的學生名單(注:Student表中Sage列的類型是datetime)

select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age

from student

where CONVERT(char(11),DATEPART(year,Sage))='1981';

3二、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列

Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;

3三、查詢平均成績大於85的全部學生的學號、姓名和平均成績

select Sname,SC.S# ,avg(score)

from Student,SC

where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;

3四、查詢課程名稱爲「數據庫」,且分數低於60的學生姓名和分數

Select Sname,isnull(score,0)

from Student,SC,Course

where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname='數據庫'and score <60;

3五、查詢全部學生的選課狀況;

SELECT SC.S#,SC.C#,Sname,Cname

FROM SC,Student,Course

where SC.S#=Student.S# and SC.C#=Course.C# ;

3六、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;

SELECT distinct student.S#,student.Sname,SC.C#,SC.score

FROM student,Sc

WHERE SC.score>=70 AND SC.S#=student.S#;

3七、查詢不及格的課程,並按課程號從大到小排列

select c# from sc where scor e <60 order by C# ;

3八、查詢課程編號爲003且課程成績在80分以上的學生的學號和姓名;

select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';

3九、求選了課程的學生人數

select count(*) from sc;

40、查詢選修「葉平」老師所授課程的學生中,成績最高的學生姓名及其成績

select Student.Sname,score

from Student,SC,Course C,Teacher

where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='葉平' and SC.score=(select max(score)from SC where C#=C.C# );

4一、查詢各個課程及相應的選修人數

select count(*) from sc group by C#;

4二、查詢不一樣課程成績相同的學生的學號、課程號、學生成績

select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;

4三、查詢每門功成績最好的前兩名

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 2 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

4四、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,查詢結果按人數降序排列,若人數相同,按課程號升序排列

select C# as 課程號,count(*) as 人數

from sc

group by C#

order by count(*) desc,c#

4五、檢索至少選修兩門課程的學生學號

select S#

from sc

group by s#

having count(*) > = 2

4六、查詢所有學生都選修的課程的課程號和課程名

select C#,Cname

from Course

where C# in (select c# from sc group by c#)

4七、查詢沒學過「葉平」老師講授的任一門課程的學生姓名

select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='葉平');

4八、查詢兩門以上不及格課程的同窗的學號及其平均成績

select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;

4九、檢索「004」課程分數小於60,按分數降序排列的同窗學號

select S# from SC where C#='004'and score <60 order by score desc;

50、刪除「002」同窗的「001」課程的成績

delete from Sc where S#='001'and C#='001';

14. 假定在建BOOKS表時沒有定義主碼,寫出爲BOOKS表追加定義主碼的語句

--實現代碼:

ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)

15.1 將NAME最大列寬增長到10個字符(假定原爲6個字符)

--實現代碼:

ALTER TABLE CARD ALTER COLUMN NAME varchar(10)

15.2 爲該表增長1列NAME(系名),可變長,最大20個字符

--實現代碼:

ALTER TABLE CARD ADD 系名 varchar(20)

樹的廣度優先遍歷

private void PrintNodeWidthFirst(IEnumerable<TreeNode> treenodes)

{

//要遍歷的下級節點

List<TreeNode> listNodes = new List<TreeNode>();

foreach (TreeNode childNode in treenodes)

{

//若是節點有子節點則將子節點加入listNodes以備稍後遍歷

if (childNode.Nodes.Count > 0)

{

listNodes.AddRange(childNode.Nodes.OfType<TreeNode>());

}

textBox1.AppendText(childNode.Text + "\r\n");

}

//若是有待遍歷的子節點

if (listNodes.Count > 0)

{

PrintNodeWidthFirst(listNodes);

}

}

鎖的問題:

public void Test(int i)

{

lock (this)

{

if (i > 10)

{

i--;

Test(i);

}

}

}

執行Test(10)是否會形成死鎖?

答:不會,由於多線程纔有鎖的問題,線程沒法本身鎖本身(單線程必然是有前後執行順序的,不必鎖)

相關文章
相關標籤/搜索