答 . private : 私有成員, 在類的內部才能夠訪問。css
protected : 保護成員,該類內部和繼承類中能夠訪問。html
public : 公共成員,徹底公開,沒有訪問限制。java
internal: 在同一命名空間內能夠訪問。c++
答.程序員
1.使用QueryString, 如....?id=1; response. Redirect()....web
2.使用Session變量面試
3.使用Server.Transferajax
4.Cookie傳值正則表達式
3. 一列數的規則以下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少,用遞歸算法實現。算法
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
答:委託能夠把一個方法做爲參數代入另外一個方法。
委託能夠理解爲指向一個函數的指針。
委託和事件沒有可比性,由於委託是類型,事件是對象,下面說的是委託的對象(用委託方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委託實現的。由於對於事件來說,外部只能「註冊本身+=、註銷本身-=」,外界不能夠註銷其餘的註冊者,外界不能夠主動觸發事件,所以若是用Delegate就無法進行上面的控制,所以誕生了事件這種語法。事件是用來閹割委託實例的,類比用一個自定義類閹割List。事件只能add、remove本身,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委託和add、remove兩個方法
委託能夠理解爲指向一個函數的引用。
是,是一種特殊的委託
答:
override 與重載的區別。重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要
Override 是進行基類中函數的重寫。爲了適應須要。
答: cxz
this.Server.Transfer
答:
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 ;
}
}
答:
int [] array = new int ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
答:不是。能夠用任意類型。
答:
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
11.用.net作B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及爲何要這樣分層?
答:通常爲3層
數據訪問層,業務層,表示層。
數據訪問層對數據庫進行增刪查改。
業務層通常分爲二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。
表示層爲了與用戶交互例如用戶添加表單。
優勢:分工明確,條理清晰,易於調試,並且具備可擴展性。
缺點:增長成本。
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的實例時,產生什麼輸出?
答:X=1,Y=0;x= 1 y = -1
答:應用程序域能夠理解爲一種輕量級進程。起到安全的做用。佔用資源小。
答:CTS:通用語言系統。CLS:通用語言規範。CLR:公共語言運行庫。
答:從值類型接口轉換到引用類型裝箱。從引用類型轉換到值類型拆箱。
答:unsafe:非託管代碼。不通過CLR運行。
答:RTTI:類型識別系統。
答:DataSet:數據存儲器。
DataCommand:執行語句命令。
DataAdapter:數據的集合,用語填充。
答:10。Windwos(默認)用IIS...From(窗體)用賬戶....Passport(密鑰)
就是代碼隱藏,在ASP.NET中經過ASPX頁面指向CS文件的方法實現顯示邏輯和處理邏輯的分離,這樣有助於web應用程序的建立。好比分工,美工和編程的能夠個幹各的,不用再像之前asp那樣都代碼和html代碼混在一塊兒,難以維護。code-Behind是基於部分類技術實現的,在個人項目的三層代碼生成器中用到了部分類。
答:程序集。(中間語言,源數據,資源,裝配清單)
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項
答:服務器端向客戶端發送一個進程編號,一個程序域編號,以肯定對象的位置。
答: Class能夠被實例化,屬於引用類型,是分配在內存的堆上的。類是引用傳遞的。
Struct屬於值類型,是分配在內存的棧上的。結構體是複製傳遞的。加分的回答:Int32、Boolean等都屬於結構體。
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//請在如下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。
}
}
}
}
答:if( OnNew != null )
OnNew( this, e );
以上代碼執行完後,i= j=
答:i=13,j=10
26.SQLSERVER服務器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務號, LastUpdateDate表示更新時的服務器時間,請使用一句SQL語句得到最後更新的事務號
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
27.根據線程安全的相關知識,分析如下代碼,當調用test方法時i>10時是否會引發死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,因此每次改變的都只是一個副本,所以不會出現死鎖。但若是把int換作一個object,那麼死鎖會發生)
28.簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
答:WS主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。
29.公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到如下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的全部行 (排序的方式如DataGrid類似)。根據您的知識,請簡要談一下您的思路
答:根據點擊的列頭,包該列的ID取出,按照該ID排序後,在給綁定到ListView中。
< DriverC >
請畫出遍歷全部文件名(FileName)的流程圖(請使用遞歸算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
{
You Found a file;
}
else if ( fof is Directory )
{
FindFile( fof );
}
}
}
31.寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動增加的ID做爲主鍵,注意:ID可能不是連續的。
答:答:解1: select top 10 * from A where id not in (select top 30 id from A)
解2:select top 10 * from (select top 40 * from A order by ID) order by ID desc
演變步驟:
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實現
select top m * from tablename where id not in (select top n * from tablename) SELECT TOP 10 * FROM (SELECT TOP 40 * FROM tb ORDER by id) t ORDER BY id desc select top 10 * from (select top 40 * from table) t order by id desc
答:封裝、繼承、多態。
33.能用foreach遍歷訪問的對象須要實現 ________________接口或聲明________________方法的類型。
答:IEnumerable 、 GetEnumerator。
34.GC是什麼? 爲何要有GC?
答:GC是垃圾收集器。程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,能夠調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
35.String s = new String("xyz");建立了幾個String Object?
答:兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
36.abstract class和interface有什麼區別?
答:
聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。
37.啓動一個線程是用run()仍是start()?
答:啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。
38.接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
答:接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
39.構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。
40.是否能夠繼承String類?
答:String類是final類故不能夠繼承。
41.try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?
答:會執行,在return後執行。
static void Main(string[] args)
{
//Console.WriteLine(GetIt());
Console.WriteLine(GetPerson().Age);
Console.ReadKey();
}
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了。
42.兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
答:不對,有相同的hash code。
43.swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?
答:switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。
44.當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
45.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。
46.List, Set, Map是否繼承自Collection接口?
答:List,Set是Map不是
47.Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
答:Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
48.數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法。
49.sleep() 和 wait() 有什麼區別?
答:sleep()方法是使線程中止一段時間的方法。在sleep 時間間隔期滿後,線程不必定當即恢復執行。這是由於在那個時刻,其它線程可能正在運行並且沒有被調度爲放棄執行,除非(a)「醒來」的線程具備更高的優先級
(b)正在運行的線程由於其它緣由而阻塞。
wait()是線程交互時,若是線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
50.short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
答:short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化爲short型。可修改成s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
51.談談final, finally, finalize的區別。
答:
final—修飾符(關鍵字)若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中只能讀取,不可修改。被聲明爲 final的方法也一樣只能使用,不能重載
finally—再異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹配的 catch 子句就會執行,而後控制就會進入 finally 塊(若是有的話)。
finalize—方法名。Java 技術容許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的。
52.如何處理幾十萬條併發數據?
答:用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法併發的時候是不會有重複主鍵的..取得最大標識要有一個存儲過程來獲取.
53.Session有什麼重大BUG,微軟提出了什麼方法加以解決?
答:是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。
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
54.進程和線程的區別?
答:進程是系統進行資源分配和調度的單位;線程是CPU調度和分派的單位,一個進程能夠有多個線程,這些線程共享這個進程的資源。
55.堆和棧的區別?
答:
棧:由編譯器自動分配、釋放。在函數體中定義的變量一般在棧上。
堆:通常由程序員分配釋放。用new、malloc等分配內存函數分配獲得的就是在堆上。
56.成員變量和成員函數前加static的做用?
答:它們被稱爲常成員變量和常成員函數,又稱爲類成員變量和類成員函數。分別用來反映類的狀態。好比類成員變量能夠用來統計類實例的數量,類成員函數負責這種統計的動做。
57.ASP。NET與ASP相比,主要有哪些進步?
答:asp解釋形,aspx編譯型,性能提升,有利於保護源碼。
61.產生一個int數組,長度爲100,並向其中隨機插入1-100,而且不能重複。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
58.請說明在.net中經常使用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
答:session(viewstate) 簡單,但易丟失
application 全局
cookie 簡單,但可能不支持,可能被僞造
input ttype="hidden" 簡單,可能被僞造
url參數簡單,顯示於地址欄,長度有限
數據庫穩定,安全,但性能相對弱
59.請指出GAC的含義?
答:全局程序集緩存。
60.向服務器發送請求有幾種方式?
答:get,post。get通常爲連接方式,post通常爲按鈕方式。
61.DataReader與Dataset有什麼區別?
答:一個是隻能向前的只讀遊標,一個是內存中的表。
62.軟件開發過程通常有幾個階段?每一個階段的做用?
答:需求分析,架構設計,代碼編寫,QA,部署
63.在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?using 指令和語句 new 建立實例 new 隱藏基類中方法。
答:using 引入名稱空間或者使用非託管資源
new 新建實例或者隱藏父類方法
64.須要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,若是字符串中間還有連續空格的話,僅保留一個空格,即容許字符串中間有多個空格,但連續的空格數不可超過一個.
答:string inputStr=" xx xx ";
inputStr=Regex.Replace(inputStr.Trim()," *"," ");
65.下面這段代碼輸出什麼?爲何?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
{
Console.WriteLine("Equal");
}
Else
{
Console.WriteLine("Not Equal");
}
答:不相等,由於比較的是對象
66.什麼叫作SQL注入,如何防止?請舉例說明。
答:利用sql關鍵字對網站進行攻擊。過濾關鍵字'等
67.什麼是反射?
答:動態獲取程序集信息
68.用Singleton如何寫設計模式
答:static屬性裏面new ,構造函數private
69.什麼是Application Pool?
答:Web應用,相似Thread Pool,提升併發性能。
70.什麼是虛函數?什麼是抽象函數?
答:虛函數:沒有實現的,可由子類繼承並重寫的函數。抽象函數:規定其非虛子類必須實現的函數,必須被重寫。
71.什麼是XML?
答:XML便可擴展標記語言。eXtensible Markup Language.標記是指計算機所能理解的信息符號,經過此種標記,計算機之間能夠處理包含各類信息的文章等。如何定義這些標記,便可以選擇國際通用的標記語言,好比HTML,也能夠使用象XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。XML是從SGML中簡化修改出來的。它主要用到的有XML、XSL和XPath等。
72.什麼是Web Service?UDDI?
答:Web Service即是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵照具體的技術規範,這些規範使得Web Service能與其餘兼容的組件進行互操做。
UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。
73.什麼是ASP.net中的用戶控件?
答:用戶控件通常用在內容多爲靜態,或者少量會改變的狀況下..用的比較大..相似ASP中的include..可是功能要強大的多。
74.列舉一下你所瞭解的XML技術及其應用
答:xml用於配置,用於保存靜態數據類型.接觸XML最多的是web Services..和config
75.ADO.net中經常使用的對象有哪些?分別描述一下。
答:Connection 數據庫鏈接對象
Command 數據庫命令
DataReader 數據讀取器
DataSet 數據集
76.什麼是SOAP,有哪些應用。
答:simple object access protocal,簡單對象接受協議.以xml爲基本編碼結構,創建在已有通訊協議上(如http,不過聽說ms在搞最底層的架構在tcp/ip上的soap)的一種規範Web Service使用的協議..
77.C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏?
Property的解釋以下: Property通常是指一對get,set方法,能夠稱爲是類的成員屬性,它大部分時候用來對類的成員變量進行讀取或賦值。
Attributes的解釋以下: 公共語言運行時容許你添加相似關鍵字的描述聲明,叫作attributes, 它對程序中的元素進行標註,如類型、字段、方法和屬性等。Attributes和Microsoft .NET Framework文件的元數據保存在一塊兒,能夠用來向運行時描述你的代碼,或者在程序運行的時候影響應用程序的行爲。 說的通俗些Attribute是類,不過是一類比較特殊的類,Attribute必須寫在一對方括號中,用來處理net中多種問題:序列化、程序的安全特徵等等.
在翻譯方面,雖然均可以翻譯成「屬性」,可是爲了區別開來,Attributes也翻譯成「特性」. 對於Property,咱們能夠用Attributes給它加上一些「特性」,好比是否能夠序列化等。
對於Property來講,和直接使用成員變量相比,好處不少,好比,能夠在賦值或讀取值前進行數據校驗,能夠很容易提供觸發事件的方法等等。固然也能夠提供只讀或只寫的屬性。 而Attributes的引入,使得咱們在設計方法,屬性,事件等的時候,能夠加入咱們的一些信息或約束。使得咱們編程更加方便
78.XML 與 HTML 的主要區別
答:1. XML是區分大小寫字母的,HTML不區分。
2. 在HTML中,若是上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你能夠省略
或者之類的結束標記。在XML中,絕對不能省略掉結束標記。
3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符做爲結尾。這樣分析器就知道不用查找結束標記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,能夠擁有不帶值的屬性名。在XML中,全部的屬性都必須帶有相應的值。
79.c#中的三元運算符是?
答:?:。
80.當整數a賦值給一個object對象時,整數a將會被?
答:裝箱。
81.類成員有_____種可訪問形式?
答:this.;new Class().Method;
82.public static const int A=1;這段代碼有錯誤麼?是什麼?
答:const不能用static修飾。
83.float f=-123.567F; int i=(int)f;i的值如今是_____?
答:-123。
84.委託聲明的關鍵字是______?
答:delegate.
85.用sealed修飾的類有什麼特色?
答:密封,不能繼承。
86.在Asp.net中全部的自定義用戶控件都必須繼承自_____?
答:Control。
87.在.Net託管代碼中咱們不用擔憂內存漏洞,這是由於有了____?
答:GC。
88.下面的代碼中有什麼錯誤嗎?_____
using System;
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
abstract class B:A
{
public abstract override void F(); 答:abstract override 是不能夠一塊兒修飾.
} // new public abstract void F();
89.當類T只聲明瞭私有實例構造函數時,則在T的程序文本外部,___能夠___(能夠 or 不能夠)從T派生出新的類,不能夠____(能夠 or 不能夠)直接建立T的任何實例。
答:不能夠,不能夠。
90.下面這段代碼有錯誤麼?
switch (i){
case(): 答://case()條件不能爲空
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
dufault; 答://wrong,格式不正確
CaseTwo();
break;
}
91.在.Net中,類System.Web.UI.Page 能夠被繼承麼?
答:能夠。
92..net的錯誤處理機制是什麼?
答:.net錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch爲止。
93.利用operator聲明且僅聲明瞭==,有什麼錯誤麼?
答:要同時修改Equale和GetHash() ? 重載了"==" 就必須重載 "!="
94.在.net(C# or vb.net)中如何用戶自定義消息,並在窗體中處理這些消息。
答:在form中重載DefWndProc函數來處理消息:
protected override void DefWndProc ( ref System.WinForms.Message m )
{
switch(m.msg)
{
case WM_Lbutton :
///string與MFC中的CString的Format函數的使用方法有所不一樣
string message = string.Format("收到消息!參數爲:{0},{1}",m.wParam,m.lParam);
MessageBox.Show(message);///顯示一個消息框
break;
case USER:
處理的代碼
default:
base.DefWndProc(ref m);///調用基類函數處理非自定義消息。
break;
}
}
95.在.net(C# or vb.net)中如何取消一個窗體的關閉。
答:private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}
96.在.net(C# or vb.net)中,Application.Exit 仍是 Form.Close有什麼不一樣?
答:一個是退出整個應用程序,一個是關閉其中一個form。
97.在C#中有一個double型的變量,好比10321.5,好比122235401.21644,做爲貨幣的值如何按各個不一樣國家的習慣來輸出。好比美國用$10,321.50和$122,235,401.22而在英國則爲£10 321.50和£122 235 401.22
答:System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");爲英國貨幣類型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);
98.某一密碼僅使用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
答案:B
問題二:若是能獲得的字母是K、L、M,那麼可以造成的兩個字母長的密碼單詞的總數是多少?
A)1個 B)3個 C)6個 D)9個
答案:A
問題三:下列哪個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
8. 62-63=1 等式不成立,請移動一個數字(不能夠移動減號和等於號),使得等式成立,如何移動?
答案:62移動成2的6次方
99.對於這樣的一個枚舉類型:
enum Color:byte
{
Red,
Green,
Blue,
orange
}
答:string[] ss=Enum.GetNames(typeof(Color));
byte[] bb=Enum.GetValues(typeof(Color));
100. C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏?
答:attribute:自定義屬性的基類;property :類中的屬性
101.C#能否對內存進行直接的操做?
答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法
102.ADO。NET相對於ADO等主要有什麼改進?
答:1:ado.net不依賴於ole db提供程序,而是使用.net託管提供的程序,2:不使用com3:不在支持動態遊標和服務器端遊 4:,能夠斷開connection而保留當前數據集可用 5:強類型轉換 6:xml支持
103.寫一個HTML頁面,實現如下功能,左鍵點擊頁面時顯示「您好」,右鍵點擊時顯示「禁止右鍵」。並在2分鐘後自動關閉頁面。
答:
104.大概描述一下ASP。NET服務器控件的生命週期
答:初始化加載視圖狀態處理回發數據加載發送回發更改通知處理回發事件預呈現保存狀態呈現處置卸載
105.Anonymous Inner Class (匿名內部類) 是否能夠extends(繼承)其它類,是否能夠implements(實現)interface(接口)?
答:不能,能夠實現接口
106.Static Nested Class 和 Inner Class的不一樣,說得越多越好
答:Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。
107.,&和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and).
108.HashMap和Hashtable的區別。
答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable.
109.Overloaded的方法是否能夠改變返回值的類型?
答:Overloaded的方法是能夠改變返回值的類型。
110.error和exception有什麼區別?
答:error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
111. 和有什麼區別?
答:表示綁定的數據源
是服務器端代碼塊
112.你以爲ASP.NET 2.0(VS2005)和你之前使用的開發工具(.Net 1.0或其餘)有什麼最大的區別?你在之前的平臺上使用的哪些開發思想(pattern / architecture)能夠移植到ASP.NET 2.0上 (或者已經內嵌在ASP.NET 2.0中)
答:1 ASP.NET 2.0 把一些代碼進行了封裝打包,因此相比1.0相同功能減小了不少代碼.
2 同時支持代碼分離和頁面嵌入服務器端代碼兩種模式,之前1.0版本,.NET提示幫助只有在分離的代碼文件,沒法在頁面嵌入服務器端代碼得到幫助提示,
3 代碼和設計界面切換的時候,2.0支持光標定位.這個我比較喜歡
4 在綁定數據,作表的分頁.Update,Delete,等操做均可以可視化操做,方便了初學者
5 在ASP.NET中增長了40多個新的控件,減小了工做量
113.重載與覆蓋的區別?
答:1、方法的覆蓋是子類和父類之間的關係,是垂直關係;方法的重載是同一個類中方法之間的關係,是水平關係
2、覆蓋只能由一個方法,或只能由一對方法產生關係;方法的重載是多個方法之間的關係。
3、覆蓋要求參數列表相同;重載要求參數列表不一樣。
4、覆蓋關係中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;重載關係,是根據調用時的實參表與形參表來選擇方法體的。
114.在C#中,string str = null 與 string str = " " 請儘可能使用文字或圖象說明其中的區別。
答:null是沒有空間引用的;
" " 是空間爲0的字符串;
115.分析如下代碼,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代碼執行完後,i= j=
答:i=13.j=10
116.分析如下代碼。
public static void test(string ConnectString)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = ConnectString;
try
{
conn.Open();
…….
}
catch(Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
finally
{
if (!conn.State.Equals(ConnectionState.Closed))
conn.Close();
}
}
請問
1)以上代碼能夠正確使用鏈接池嗎?
答:回答:若是傳入的connectionString是如出一轍的話,能夠正確使用鏈接池。不過如出一轍的意思是,連字符的空格數,順序徹底一致。
2)以上代碼所使用的異常處理方法,是否全部在test方法內的異常均可以被捕捉並顯示出來?
答:只能夠捕捉數據庫鏈接中的異常吧. (finally中,catch中,若是有別的可能引起異常的操做,也應該用try,catch。因此理論上並不是全部異常都會被捕捉。)
117.什麼是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension) 包來提供最新的WEB服務安全保證,目前最新版本2.0。
118.在下面的例子裏
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的實例時,產生什麼輸出?
答:X=1,Y=0
119.下面的例子中
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);
}
}
產生的輸出結果是什麼?
答:x=1,y=2
120.C#中 property 與 attribute(抽像類)的區別,他們各有什麼用處,這種機制的好處在哪裏?
答:property和attribute漢語都稱之爲屬性。不過property是指類向外提供的數據區域。而attribute則是描述對象在編譯時或運行時屬性的。這二者是有本質區別的。
121.在下面的例子裏
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的實例時,產生什麼輸出?
答:X=1,Y=0;x= 1 y = -1
答:接口能夠繼承接口。抽像類能夠實現(implements)接口,抽像類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
答:SOAP(Simple Object Access Protocol )簡單對象訪問協議是在分散或分佈式的環境中交換信息並執行遠程過程調用的協議,是一個基於XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最經常使用的仍是HTTP協議),能夠容許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通訊。這種相互通訊採用的是XML格式的消息。
SOAP也被稱做XMLP,爲兩個程序交換信息提供了一種標準的工做機制。在各種機構之間經過電子方式相互協做的狀況下徹底有必要爲此制定相應的標準。
SOAP描述了把消息捆綁爲XML的工做方式。它還說明了發送消息的發送方、消息的內容和地址以及發送消息的時間。SOAP是Web Service的基本通訊協議。SOAP規範還定義了怎樣用XML來描述程序數據(Program Data),怎樣執行RPC(Remote Procedure Call)。大多數SOAP解決方案都支持RPC-style應用程序。SOAP還支持 Document-style應用程序(SOAP消息只包含XML文本信息)。
最後SOAP規範還定義了HTTP消息是怎樣傳輸SOAP消息的。MSMQ、SMTP、TCP/IP均可以作SOAP的傳輸協議。
SOAP 是一種輕量級協議,用於在分散型、分佈式環境中交換結構化信息。 SOAP 利用 XML 技術定義一種可擴展的消息處理框架,它提供了一種可經過多種底層協議進行交換的消息結構。這種框架的設計思想是要獨立於任何一種特定的編程模型和其餘特定實現的語義。
SOAP 定義了一種方法以便將 XML 消息從 A 點傳送到 B 點。爲此,它提供了一種基於 XML 且具備如下特性的消息處理框架: 1) 可擴展, 2) 可經過多種底層網絡協議使用, 3) 獨立於編程模型。
Connection:主要是開啓程序和數據庫之間的鏈接。沒有利用鏈接對象將數據庫打開,是沒法從數據庫中取得數據的。Close和Dispose的區別,Close之後還能夠Open,Dispose之後則不能再用。
Command:主要能夠用來對數據庫發出一些指令,例如能夠對數據庫下達查詢、新增、修改、刪除數據等指令,以及調用存在數據庫中的存儲過程等。這個對象是架構在Connection 對象上,也就是Command 對象是透過鏈接到數據源。
DataAdapter:主要是在數據源以及DataSet 之間執行數據傳輸的工做,它能夠透過Command 對象下達命令後,並將取得的數據放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。
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 對象操做數據結果。
答:<%# %>表示綁定的數據源<% %>是服務器端代碼塊
public static void test(string ConnectString)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = ConnectString;
try
{
conn.Open();
…….
}
catch(Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
finally
{
if (!conn.State.Equals(ConnectionState.Closed))
conn.Close();
}
}
請問
1)以上代碼能夠正確使用鏈接池嗎?
答:回答:若是傳入的connectionString是如出一轍的話,能夠正確使用鏈接池。不過如出一轍的意思是,連字符的空格數,順序徹底一致。
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的實例時,產生什麼輸出?
答:X=1,Y=0
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);
}
}
產生的輸出結果是什麼?
答:x=1,y=2
重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要。重載(overload)是面向過程的概念。
Override 是進行基類中函數的重寫。Override是面向對象的概念
參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯能夠看出,索引器的內部本質上就是set_item、get_item方法。
基礎知識:
索引的語法:
public string this[string s],經過get、set塊來定義取值、賦值的邏輯
索引能夠有多個參數、參數類型任意
索引能夠重載。
若是隻有get沒有set就是隻讀的索引。
索引其實就是set_Item、get_Item兩個方法。
屬性能夠對設值、取值的過程進行非法值控制,好比年齡禁止設值負數,而字段則不能進行這樣的設置。雖然通常狀況下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
必須手寫掌握的代碼(既包含拿電腦寫,拿筆寫):
1、手寫三層架構
2、手寫冒泡排序
3、手寫AJAX:XMLHttpRequest
4、手寫增刪改查、SQLHelper
一般意義上的三層架構就是將整個業務應用劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
區分層次的目的即爲了「高內聚,低耦合」的思想。
表現層(UI):通俗講就是展示給用戶的界面,即用戶在使用一個系統的時候的所見所得。
業務邏輯層(BLL):針對具體問題的操做,也能夠說是對數據層的操做,對數據業務邏輯處理。
數據訪問層(DAL):該層所作事務直接操做數據庫,針對數據的增添、刪除、修改、更新、查找等每層之間是一種垂直的關係。
三層結構是N層結構的一種,通常來講,層次之間是向下依賴的,下層代碼未肯定其接口(契約)前,上層代碼是沒法開發的,下層代碼接口(契約)的變化將使上層的代碼一塊兒變化。
優勢:分工明確,條理清晰,易於調試,並且具備可擴展性。
缺點:增長成本。
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中引入了裝箱和拆箱:裝箱就是將值類型用引用類型包裝起來轉換爲引用類型;而從引用類型中拿到被包裝的值類型數據進行拆箱。
(*)
object.ReferenceEquals();//用來判斷兩個對象是不是同一個對象
Console.WriteLine(object.ReferenceEquals(3,3));//由於兩個3被裝到了兩個箱子中,因此是false
Equals ==的關係
C#和.Net的關係。
C#只是抽象的語言,能夠把C#編譯生成Java平臺的二進制代碼,也能夠把Java代碼編譯生成.Net平臺的二進制代碼。因此C#只是提供了if、while、+-*/、定義類、int、string等基礎的語法,而Convert.ToInt32、FileStream、SqlConnection、String.Split等都屬於.Net的東西。深藍色是C#的,淺藍色是.Net的。
C# new→IL:newobj
C# string →.Net中的String
類型的差異:.net中的Int32在C#中是int,在VB.Net中是Integer。String、Int32等公共類型。
語法的差異:IL中建立一個對象的方法是L_0001: newobj instance void 索引.C1::.ctor()
C#中是new C1();VB.net中是 Dim c1 As New C1
CTS:Common Type System 通用類型系統。Int32、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(CoreCLR)。至關於一個發動機,負責執行IL。
須要實現IEnumerable接口或聲明GetEnumerator方法的類型。
1.將一個值類型變量賦給另外一個值類型變量時,將複製包含的值。引用類型變量的賦值只複製對對象的引用,而不復制對象自己。
2.值類型不可能派生出新的類型:全部的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也能夠實現接口。
3.值類型不可能包含 null 值:然而,可空類型功能容許將 null 賦給值類型。
4.每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。
不一樣點:
不能直接實例化接口。
接口不包含方法的實現。
接口能夠多繼承,類只能單繼承。
類定義可在不一樣的源文件之間進行拆分。
相同點:
接口、類和結構均可以從多個接口繼承。
接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員。
接口和類均可以包含事件、索引器、方法和屬性。
基礎知識:接口只能定義方法(只能定義行爲,不能定義實現也就是字段),由於事件、索引器、屬性本質上都是方法,因此接口中也能夠定義事件、索引器、屬性。
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
139.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。
using能夠聲明namespace的引入,還能夠實現非託管資源的釋放,實現了IDisposiable的類在using中建立,using結束後會自動調用該對象的Dispose方法,釋放資源。加分的補充回答:using其實等價於try……finally,用起來更方便。
答:string str = null 是不給他分配內存空間,而string str = \"\" 給它分配長度爲空字符串的內存空間。 string str = null沒有string對象,string str = 「」有一個字符串對象。
string s3 = string.Empty;//反編譯發現,string.Empty就是在類構造函數中 Empty = "";
答:封裝、繼承、多態。
不要背,腦子中要有聯想。
答:[serializable]
a) 方法、屬性、索引器和事件;
b) 索引器和字段;
c) 事件和字段;
解讀:接口中不能聲明字段只能聲明方法,屬性、索引器和事件最終都編譯生成方法。由於字段屬於實現層面的東西,只有存取值的時候纔會用到字段,因此中接口中不能定義字段。
a) insert、update、delete等操做的Sql語句主要用ExecuteNonQuery()方法來執行;
b) ExecuteNonQuery()方法返回執行Sql語句所影響的行數。
c) Select操做的Sql語句只能由ExecuteReader()方法來執行;
d) ExecuteReader()方法返回一個DataReader對象;
拿SQLHelper實現一下。
a) 索引器的參數必須是兩個或兩個以上
b) 索引器的參數類型必須是整數型
c) 索引器沒有名字
d) 以上皆非
a) XML提供一種描述結構化數據的方法;
b) XML 是一種簡單、與平臺無關並被普遍採用的標準;
c) XML文檔可承載各類信息;
d) XML只是爲了生成結構化文檔;
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(){};
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;
}
a) void myCallBack(int x);
b) int receive(int num);
c) string receive(int x);
d) 不肯定的;
答:String 在進行運算時(如賦值、拼接等)會產生一個新的實例,而 StringBuilder 則不會。因此在大量字符串拼接或頻繁對某一字符串進行操做時最好使用 StringBuilder,不要使用 String
若是要操做一個不斷增加的字符串,儘可能不用String類,改用StringBuilder類。兩個類的工做原理不一樣:String類是一種傳統的修改字符串的方式,它確實能夠完成把一個字符串添加到另外一個字符串上的工做沒錯,可是在.NET框架下,這個操做實在是划不來。由於系統先是把兩個字符串寫入內存,接着刪除原來的String對象,而後建立一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了很多時間。而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,可以在已有對象的原地進行字符串的修改,簡單並且直接。固然,通常狀況下覺察不到這兩者效率的差別,但若是你要對某個字符串進行大量的添加操做,那麼StringBuilder類所耗費的時間和String類簡直不是一個數量級的。
屬性索引器
經過名稱標識。經過簽名標識。
經過簡單名稱或成員訪問來訪問。經過元素訪問來訪問。
能夠爲靜態成員或實例成員。必須爲實例成員。
屬性的 get 訪問器沒有參數。索引器的 get 訪問器具備與索引器相同的形參表。
屬性的 set 訪問器包含隱式 value 參數。除了 value 參數外,索引器的 set 訪問器還具備與索引器相同的形參表。
一個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頁面會編譯生成一個類,這個類從隱藏類繼承。
答案:子類從新定義父類的某一個方法時,必須把父類的方法定義爲virtual
在定義接口中不能有方法體,虛方法能夠。
實現時,子類能夠不從新定義虛方法,但若是一個類繼承接口,那必須實現這個接口。
(1) 如下敘述正確的是: B C
A. 接口中能夠有虛方法。B. 一個類能夠實現多個接口。 C. 接口不能被實例化。 D. 接口中能夠包含已實現的方法。
(2) 從數據庫讀取記錄,你可能用到的方法有:B C D
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
(3).對於一個實現了IDisposable接口的類,如下哪些項能夠執行與釋放或重置非託管資源相關的應用程序定義的任務?(多選) (ABCD)
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參數顯式傳遞到方法。
(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)一個類能夠有多個基類和多個基接口;
DataReader使用時始終佔用SqlConnection,在線操做數據庫
每次只在內存中加載一條數據,因此佔用的內存是很小的
是隻進的、只讀的
DataSet則是將數據一次性加載在內存中.拋棄數據庫鏈接..讀取完畢即放棄數據庫鏈接(非鏈接模式)
DataSet將數據所有加載在內存中.因此比較消耗內存...可是確比DataReader要靈活..能夠動態的添加行,列,數據.對數據庫進行回傳更新操做(動態操做讀入到內存的數據)
錯誤:const不能被修飾爲static ;由於定義爲常量(const )後就是靜態的(static )。
value,它的類型和屬性所聲名的類型相同。
類之間不支持,接口之間支持。類對接口叫作實現,不叫繼承。類是爹、接口是能力,能有多個能力,但不能有多個爹。
System.Object
答:用URL編碼,經過QueryString傳遞,用urlencode編碼用urldecode解碼
String、Int32、Boolean等都屬於.Net中定義的類,而string、int、bool至關於C#中對這些類定義的別名。CTS。
答:Server.Transfer僅是服務器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;Response.Redirect則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。
Server.Transfer是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,因此它的地址欄中仍是原來的地址。這個過程當中瀏覽器和Web服務器之間通過了一次交互。
Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求。這個過程當中瀏覽器和Web服務器之間通過了兩次交互。
Server.Transfer不能夠轉向外部網站,而Response.Redirect能夠。
Server.Execute效果和Server.Transfer相似,可是是把執行的結果嵌入當前頁面。
String是不可變的在這段代碼中,s原先指向一個String對象,內容是 "abc",而後咱們將s指向"123",那麼s所指向的那個對象是否發生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另外一個 String對象,內容爲"123",原來那個對象還存在於內存之中,只是s這個引用變量再也不指向它了。
不能夠。由於非static方法是要與對象關聯在一塊兒的,必須建立一個對象後,才能夠在該對象上進行方法調用,而static方法調用時不須要建立對象,能夠直接調用。也就是說,當一個static方法被調用時,可能尚未建立任何實例對象,若是從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪一個對象上的呢?這個邏輯沒法成立,因此,一個static方法內部不能發出對非static方法的調用。
要讓人家感受你對.Net開發很熟,因此,不能僅僅只列誰都能想到的那些東西,要多列你在作項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。
經常使用的類:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>
經常使用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary
要出乎意料!不要僅僅完成任務!筆試不是高考!到處要顯出牛!
說出幾個開源軟件?MySQL、Linux、 Discuz、Apache、Paint.Net、Android、Chrome、Notepad++……
開源項目有一些是開發包。開源軟件指的是能夠直接用的。Jquery、NPOI、ASP.Net MVC、Silverlight Toolkit、AJAX toolkit、json.net
把構造函數設置爲private,設置一個public、static的對象實例
public FileManager
{
private FileManager(){}
public readonly static FileManager Instance = new FileManager();
}
擴展:搜「C# Singleton」,有線程安全的更牛B的實現
用戶根據系統的程序構造非法的參數從而致使程序執行不是程序員指望的惡意SQL語句。使用參數化的SQL就能夠避免SQL注入。
詳細參考複習ppt。舉例子,擺事實!
1' or 1=1
用本身的話解釋,而不是背概念。
傳智播客風格的非嚴謹卻一會兒明瞭的解答方式:
第一範式:字段不能有冗餘信息,全部字段都是必不可少的。
第二範式:知足第一範式而且表必須有主鍵。
第三範式:知足第二範式而且表引用其餘的表必須經過主鍵引用。
員工內部→本身的老大→外部的老大
記憶順序:本身內部不重複→別人引用本身→本身引用別人。
get的參數會顯示在瀏覽器地址欄中,而post的參數不會顯示在瀏覽器地址欄中;
使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器通常會提示「是否從新提交」,而get則不會;
用get的頁面能夠被搜索引擎抓取,而用post的則不能夠;
用post能夠提交的數據量很是大,而用get能夠提交的數據量則很是小(2k),受限於網頁地址的長度。
用post能夠進行文件的提交,而用get則不能夠。
參考閱讀:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html
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
解釋:引用類型和值類型的區別。
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");
}
A、UDDI
B、GUID
C、WSDL
D、SOAP
WebService解決的三個問題:接口的自我描述;採用Http協議等常規協議,不用寫原始的Socket;基於Web服務器,不佔用80端口以外的端口。
UDDI用來自動發現WebService的協議(*)
SOAP和HTTP的關係:SOAP基於Http協議的,和普通網頁不一樣的是網頁返回HTML,SOAP則是符合SOAP協議的XML數據。
WSDL(WebService Defination Language)是對WebService上的方法名、參數進行描述的協議。對接口的自描述。
SOAP(Simple Object Access Protocol)是對參數、返回值以什麼樣的格式進行傳遞進行描述的協議。對報文的格式規範。
實際工做中應該是本身調用別人的WebService或者別人調用本身的WebService,溝通語言就是WSDL,拿到WSDL什麼都不用操心。
WebService是跨平臺、跨語言調用,能夠跨防火牆;缺點:效率低。因此適用於兩個非內部系統的通信(好比炒股軟件和證券交易所之間的通信)
WCF是對WebService、Socket、MQ等通信方式的一個統一,底層仍是採用這些通訊協議,能夠簡化這些程序的開發,不用再換不一樣通訊協議的時候重寫代碼而且學一堆新的技術。因此WCF和WebService不是一個競爭取代關係。
WCF是對.Net Remoting、WebService、MQ等通信方式的一個高級封裝,讓咱們開發不一樣通信協議的程序的時候很簡單,不用學更多的東西。並非替代.Net Remoting、WebService、MQ這些東西。
答:.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版這個免費版本。
答: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。背也要背下來!
若是面試的時候談AJAX談到UpdatePanel的時候,就是NB的時候!!!先侃UpdatePanel的原理!引出爲何Dom操做的動態效果在用UpdatePanel提交刷新之後沒有了,以及CKEditor被套在UpdatePanel中提交之後也變成了textarea,爲何把Fileupload放到Updatepanel中沒法實現無刷新上傳。說成是公司內部的一個菜鳥用UpdatePanel遇到這樣問題,因爲我懂XHR、UpdatePanel的原理,因此輕鬆解決!UpdatePanel生成的上萬行JS腳本,不適合於互聯網項目。「WebForm怎麼可能把開發人員編程傻子呢!不明白原理苦命呀!仍是MVC好呀,MVC。。。。。。。」
答:Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。Cookie是保存在客戶端的,機密信息不能保存在Cookie中,只能放小數據;Session是保存在服務器端的,比較安全,能夠放大數據。
談到Session的時候就侃Session和Cookie的關係:Cookie中的SessionId。和別人對比說本身懂這個原理而給工做帶來的方便之處。
博客園(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文檔、msdn論壇(遇到問題先到網上搜解決方案,還不行就問同事,同事也解決不了就去MSDN論壇提問,必定能獲得解決)。Cnbeta.com。
GC是.Net的垃圾收集器,能夠進行內存資源的回收,程序員無需關心資源的回收,當一個對象沒有任何引用的時候就能夠被回收了。一個對象能夠被回收並不意味着必定會被當即回收,GC會選擇時機進行回收。能夠調用GC.Collect()讓GC當即回收。GC不能回收非託管資源,對於非託管資源通常都實現了IDisposable接口,而後使用using關鍵字進行資源的回收。
select * from [user] wherer name like '北京%'
使用索引能夠加快數據的查詢速度,不過因爲數據插入過程當中會建索引,因此會下降數據的插入、更新速度,索引還會佔磁盤空間。
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
解答:結構體是複製傳遞的。
擴展:爲啥this.Size.Width = 100;編譯不經過。
提示:用純XMLHttpRequest實現。
301(永久重定向)、302 :重定向
404 :頁面不存在
500:服務器內部錯誤
Lucene.net、NPOI、JQuery、ASP.Net AJAX toolkit、Quartz.Net、JqueryUI、ASP.Net MVC。在CodePlex、SourceForge等網站上有更多的開源項目。
186.asp.net中<%%>、<%=%>、<%#%>的區別是什麼
<%%>是執行<%%>中的C#代碼,<%=%>是將=後表達式的值輸出到Response中,<%#%>是數據綁定,通常用在ListView、GridView、Repeater等控件的綁定中。數據綁定分爲:Eval:單向綁定和Bind:雙向綁定。
參考回答:談Cache(緩存)、索引這些例子。用額外的磁盤、內存空間的消耗來提升執行速度。Lucene.Net也是一個例子。
參考:
定製錯誤頁來將顯示一個友好的報錯頁面。
頁面中未捕獲同樣會觸發Page_Error(不經常使用),應用程序中的未捕獲異常會觸發Application_Error。經過HttpContext.Current.Server.GetLastError()、HttpContext.Current.Error;拿到未捕捉異常,記錄到Log4Net日誌中。
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;
下面的SQL題是常考題中的常考題,必須重視!!!!!!!!
1)縱表結構 TableA
Name
Course
Grade
張三
語文
75
張三
數學
80
張三
英語
90
李四
語文
95
李四
數學
55
橫表結構 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;
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
)
List、Dictionary、Set、Stack(先入後出)、Queue(先入先出)、Tree等。
解答:HashSet用於盛放不一樣的數據,相同的數據只保留一份
工程化的非最優解答:用HashSet或者List
int[] values = { 3, 5, 9, 8, 10, 5, 3 };
HashSet<int> set = new HashSet<int>();
foreach (int i in values)
{
set.Add(i);
}
Console.WriteLine(set.Count);
*******
*****
***
*
4580616022644994|3000|趙濤
4580616022645017|6000|張屹
4580616022645090|3200|鄭欣夏
上述文件每行爲一個轉帳記錄,第一列表示賬號,第二列表示金額,第三列表示開戶人姓名。
建立一張數據庫表(MS SQLServer數據庫,表名和字段名自擬),請將上述文件逐條插入此表中。
張三 90
李四 96
王五 78
趙六 82
提供用戶一個控制檯界面,容許用戶輸入要查詢的姓名,輸入姓名而且按回車之後,打印出此人的成績,若是不輸入姓名直接按回車則顯示全部人的姓名以及成績。(注意:不能使用數據庫)
class Person
{
public DateTime BirthDay = DateTime.Now;
}
static void Main(string[] args)
{
Person p1 = new Person();//1:00:00
Console.WriteLine(DateTime.Now);
Thread.Sleep(1000 * 10);
Console.WriteLine(DateTime.Now);
Console.WriteLine(p1.BirthDay);
}
經過在public DateTime BirthDay = DateTime.Now上設定斷點來驗證。
再難一點
class Person
{
public static int A = 30;
static Person()//靜態構造函數在static字段初始化完成後執行
{//靜態構造函數只執行一次
A++;
}
public int B = A++;//字段的初始化賦值代碼只是在new一個對象的時候執行,而不是每次用字段的時候都執行
public Person()
{B++;}
}
程序的執行結果是什麼?
Person p1 = new Person();
Console.WriteLine(p1.B);
Console.WriteLine(Person.A);
Console.WriteLine(p1.B);
Console.WriteLine(Person.A);
Person p2 = new Person();
Console.WriteLine(p2.B);
Console.WriteLine(Person.A);
參考:聚簇(或者叫作彙集,cluster)索引和非聚簇索引。
字典的拼音目錄就是聚簇(cluster)索引,筆畫目錄就是非聚簇索引。這樣查詢「G到M的漢字」就很是快,而查詢「6劃到8劃的字」則慢。
聚簇索引是一種特殊索引,它使數據按照索引的排序順序存放表中。聚簇索引相似於字典,即全部詞條在字典中都以字母順序排列。聚簇索引實際上重組了表中的數據,因此你只能在表中創建一個聚簇索引。
當數據按值的範圍查詢時,聚簇索引就顯得特別有用。由於全部SQLServer都必需先找到所查詢範圍的第一行,而後依次下去,直到該範圍的最後一個值找到爲止,而且保證了全部其餘值也落在這個範圍內。舉一個例子,一個應用程序要查找首字母位於G和P之間的姓名列表,SQLServer首先找到以字母G開頭的名字,取出全部記錄,直到找到以字母P開頭的名字爲止,這種方法使得查詢過程很是高效。
進行大量數據改動的表不適宜用聚簇索引,由於SQLServer將不得不在表中維護行的次序。若是要索引的值極少,例如一個列包含的全都是1和0,建立聚簇索引就不是個好主意。若是表常常由一個指定的列來排序,該列將是簇索引的最佳候選列。這是由於表中的數據已經爲你排好序了。若是訪問一個表並使用BETWEEN、<、>、>=或<=操做符來返回一個範圍的值時,應該考慮使用聚簇索引。
能夠,使用CSC.exe 來編譯.cs文件!
能夠根據業務流程、業務數據的特色進行優化,好比能夠採用緩存、索引、表驅動等來提高代碼的效率和性能,同時不要進行無心義的代碼優化,重點優化系統的性能瓶頸。
回答要大氣!顯得很牛!
提示:分而治之的思想。
首先要找出問題所在,是服務器端運行的速度慢仍是服務器端到客戶端的下載慢仍是頁面在瀏覽器的加載速度慢。
若是是服務器端運行速度慢,則找是數據庫的緣由仍是算法的問題,若是是數據庫的問題則嘗試添加索引.優化SQL語句,若是是算法的問題,則優化算法。若是對於一些不常常改動的頁面能夠使用靜態頁技術!對於一些數據不須要及時更新的並且取數據的過程很是耗時能夠使用緩存。頁面中的內容能夠按需加載(好比說能夠像verycd網站的評論那樣當用戶須要看的時候再加載其內容),能夠在圖片須要顯示的時候再進行加載。
若是是服務器端到客戶端的下載慢則看是頁面體積過於臃腫仍是網絡問題,若是是頁面體積過於臃腫,則優化HTML代碼,去掉無用的標籤,壓縮JS.CSS,能夠用CSS Spirit技術將多個圖片放到一個圖片中,減小向服務器的請求。若是是網絡問題,則嘗試在不一樣的網絡.地區部署服務器,而後使用CDN技術加速訪問。
若是是頁面中的JavaScript運行復雜致使運行速度慢,則優化JavaScript。
webkaka:測網速。
對於常常進行檢索的字段建立索引,對於常常進行範圍查詢的一個字段建立彙集索引;
當有大量數據進行插入的時候進行批量插入;
一些代碼用存儲過程進行重寫(當一個邏輯有多行SQL要執行的時候用存儲過程能夠優化速度,能夠避免客戶端和SQLServer之間屢次交互);
(*)集羣.讀寫分離;
(*)分區.分表;
儘可能不要拼SQL語句!使用參數化查詢或存儲過程能夠防止SQL注入攻擊!在必須用SQL拼接的地方對用戶輸入的內容進行檢查.過濾。
在ASP.NET中 緩存有 頁面緩存,數據源緩存,和一些本身定義的緩存!
對於那些整個頁面不常常變化的咱們能夠使用頁面緩存,而對於那些執行很是耗時的SQL語句而且數據的及時性要求不高的咱們能夠使用數據源緩存。
對於頁面緩存.數據源緩存等都不知足要求的狀況下采用直接操做HttpRuntime.Cache來自定義緩存策略。若是須要用多臺Web服務器做爲一個集羣來承載網站的狀況,則能夠部署專門的分佈式緩存服務器,好比Memcached。
讀取HTTP報文頭中的UrlReferrer在Application_BeginRequest中咱們能夠判斷用戶的請求是否來源於本網站。若是不是咱們能夠終止用戶的請求(Response.End();)!
好比說相似豆瓣網咱們能夠根據用戶興趣來匹配,相似於人人網那些地區性比較比較強的網站咱們能夠根據用戶的地區來匹配。
英語學習資料的下載.在線答疑.用戶交流.在線英語角做爲切入點。
a.lucene相關開發經驗
b.分佈式文件處理經驗
c.流媒體相關開發經驗
d.語音技術
e.高負載網站開發
f.手機相關開發
答:
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 ;
}
}
int i=2000;
object o=i;
i=2001;
int j=(int)o;
Console.WriteLine("i={0},o={1},j={2}",i,o,j);
輸出的結果是:
寫遞歸要肯定兩個:遞歸的終止條件;遞歸表達式。
解答:總結遞歸規律: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)
用BigInteger解決溢出的問題。
若是回答斐波那契數列:提到用非遞歸實現.注意邊界條件以及用BigInteger解決溢出問題!
參考:
算法複雜度:時間複雜度:算法運行須要消耗的時間的數量級.空間複雜度:算法運行須要消耗的內存的數量級。
消耗的時間或者內存隨着問題規模的擴大而成正比增長,就是O(n)。
消耗的時間或者內存隨着問題規模的擴大而不變,就是O(1)。
消耗的時間或者內存隨着問題規模的擴大而n*n增長,就是O(n*n)
算法複雜度只考慮最差狀況(從一個數組中找出第一個大於10的數,時間複雜度爲O(n)),而且算法複雜度忽略常量和低階。把數組數一遍和數兩遍的時間複雜度都是O(n)。把長度爲n的數組數n/2遍的時間複雜度仍是O(n*n)。
上課時把數組先後顛倒的算法的時間複雜度爲O(n),空間複雜度爲O(1)。
select * from A where id='';
select * from A where id='13';
select * from A where id=null;
select * from A where id=' 13';
<style type="text/css">
#Text1{ /style>
<input id="Text1" type="text" class="txt" />
<input type="text" class="txt" />
參考資料:我的大於集體:元素單獨設置的樣式>class命名樣式>標籤樣式。樣式override父級別的。
表一:student_info學號,姓名,性別,出生年月,家庭住址,備註
0001, 張三,男,1981-8-9,北京,NULL
表二:curriculum課程編號 課程名稱 學分
0001 計算機基礎 2
0002 C語言 2
表三:grade 學號 課程編號 分數
0001 0001 80
0001 0002 90
select 學號,分數 from grade where 分數 between 80 and 90
select avg(分數) from grade where 課程編號='003
Select課程編號,count(學號) as 人數from grade group by 課程編號
select 姓名,學號 from student_info where 姓名 like '張%'
select 姓名,出生年月 from student_info where 性別 in(select 性別 from student_info where sno='0001')
select 學號,姓名,性別 from student_info where 學號 in(select 學號 from grade where 課程編號='0002' and 學號 in(select 學號 from grade where 課程編號='0001'))
select 課程編號, 分數 from grade where 學號='0001' and 分數>(select min(分數) from grade where 學號='0002')
select student_info.學號,student_info.姓名,grade.分數 from student_info,grade where grade.分數 between 80 and 90
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.姓名
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='葉平');
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='葉平'));
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;
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);
select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';
select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
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='葉平');
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');
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';
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;
Select count(Ssex) as 男生人數 from Student group by Ssex having Ssex='男';
Select count(Ssex) as 女生人數 from Student group by Ssex having Ssex='女';
SELECT Sname FROM Student WHERE Sname like '張%';
select Sname,count(*) from Student group by Sname having count(*)>1;;
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age
from student
where CONVERT(char(11),DATEPART(year,Sage))='1981';
Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;
select Sname,SC.S# ,avg(score)
from Student,SC
where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;
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;
SELECT SC.S#,SC.C#,Sname,Cname
FROM SC,Student,Course
where SC.S#=Student.S# and SC.C#=Course.C# ;
SELECT distinct student.S#,student.Sname,SC.C#,SC.score
FROM student,Sc
WHERE SC.score>=70 AND SC.S#=student.S#;
select c# from sc where scor e <60 order by C# ;
select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';
select count(*) from sc;
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# );
select count(*) from sc group by C#;
select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;
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#;
select C# as 課程號,count(*) as 人數
from sc
group by C#
order by count(*) desc,c#
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='葉平');
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#;
select S# from SC where C#='004'and score <60 order by score desc;
delete from Sc where S#='001'and C#='001';
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');
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)
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#
);
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
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
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
[學生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);
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;
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;
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#;
select c#,count(S#) from sc group by C#;
select S#
from sc
group by s#
having count(*) > = 2
select C#,Cname
from Course
where C# in (select c# from sc group by c#)
--實現代碼:
ALTER TABLE CARD ALTER COLUMN NAME varchar(10)
--實現代碼:
ALTER TABLE CARD ADD 系名 varchar(20)
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
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
select CNO,count(BNO) as 借書數量from BORROW group by CNO having count(BNO)>3
select name,class from card where cno in( select cno from borrow where bno in(
select bno from BOOKS where bname='水滸'))
select CNO,BNO,RDATE from borrow where getdate()>RDATE
select bno,bname,author from books where bname like '網絡%'
select bname,author from books where price in(select max(price) from books )
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
update borrow set rdate=dateadd(day,7,rdate) from BORROW where cno in(select cno from card where class='一班')
DELETE A FROM BOOKS a
WHERE NOT EXISTS(
SELECT * FROM BORROW
WHERE BNO=a.BNO)
(這個不肯定對不 90%應該是對的 本身看了下書寫的)
CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)
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'數據庫技術及應用'
CREATE VIEW V_VIEW
AS
select name,bname
from books,card,borrow
where borrow.cno=card.cno and borrow.bno=books.bno and class='一班'
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
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
答案:Round 四捨五入:Math.Round(-11.5)=-12,由於是按照絕對值考慮。
擴展:Math.Ceiling(-11.6)=-11,由於負數的天花板也在上面。
Math.Floor(-11.5)=-12
答案:第一個有錯,由於1是int類型,int+short結果是int,沒法隱式轉換,改成s = (short)(s + 1);就能夠了。
第二個沒錯,通過反編譯發現編譯器自動優化成s = (short)(s + 1);
解答:Random類是一個僞隨機數算法,原理:
r(n)=(sed+r(n-1))%100;
class MyRand
{
private int seed;
private int prevNumber = 10;
public MyRand(int seed)
{
this.seed = seed;
}
public int Next()
{
int newRand = (seed + prevNumber) % 100;
prevNumber = newRand;
return newRand;
}
}
生成的隨機數是依賴於上一個的,因此叫「隨機數序列」。,肯定的種子產生肯定的隨機數序列。
爲了不每次生成的隨機數序列都同樣,因此通常採用當前系統運行的毫秒數Environment.TickCount作種子。
這就明白爲何
//for (int i = 0; i < 10; i++)
//{
// Random rand = new Random();
// Console.WriteLine(rand.Next(100));
//}
是錯的。
通過反編譯,Random類的無參構造函數最終也是調用有參的,傳遞的就是當前毫秒數
public Random() : this(Environment.TickCount)
這就驗證了
//for (int i = 0; i < 10; i++)
//{
// Random rand = new Random();
// Console.WriteLine(rand.Next(100));
//}
爲何同樣,或者一半同樣,是由於在同一毫秒內。
作法1:
List<int> list = new List<int>();
Random rand = new Random();
while (list.Count < 100)
{
int number = rand.Next(1, 101);//>=1,<101
if (!list.Contains(number))//若是list中已經含有這個數,則不插入
{
list.Add(number);
}
}
foreach (int i in list)
{
Console.WriteLine(i);
}
作法2:
先把1-100這100個數按順序放入數組arr,再重複100次下面的操做,生成兩個介於 >=0,<100 之間的隨機數m.n,顛倒arr[m]和arr[n]的數。
int[] arr = new int[100];
//把100個數順序放入
for (int i = 0; i < 100; i++)
{
arr[i] = i + 1;
}
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
//隨機生成兩個位置
int m = rand.Next(0, 100);
int n = rand.Next(0, 100);
//顛倒兩個位置
int temp = arr[m];
arr[m] = arr[n];
arr[n] = temp;
}
select top 1 * from t order by id desc
insert into T_Persons(name,age) values('小明',20);
insert into T_Persons(name,age) values('小明',20);
insert into T_Persons(name,age) values('小黑',20);
insert into T_Persons(name,age) values('小明',20);
insert into T_Persons(name,age) values('小宏',20);
若是是知名公司,就說仰慕貴公司,(舉例,看到大家網站發展速度快,還據說過關於大家技術團隊.技術架構的介紹);若是是不知名公司,就說喜歡這個行業。描述本身針對這個職位的優點
解答:從左向右運算,int+string是string。因此是"78"
"8"+2+5是"825",而"8"+(2+5)是「87」
227.
(1)
var x=1;
var y=0;
var z=0;
function add(n){n=n+1;return n;}
y=add(x);
function add(n){n=n+3;return n;}
z=add(x);
求y和z的值是多少?
參考:JavaScript引擎會先解析全部的命名函數,再去從上向下執行js代碼。因此第二個add覆蓋了第一個add的定義。所以結果是4.4
參考:var add = function(n){n=n+1;return n;}是把一個變量名add指向匿名函數。執行的時候add指向哪一個函數,就執行哪一個函數。從上向下執行。結果是2.4。因此寫程序的時候最好用匿名函數。
命名函數的add就是函數的名字。而var add = function(n){n=n+1;return n;}則是建立一個匿名函數,而且把變量add指向它,這個函數仍是匿名函數,並不會由於有一個變量指向它他就不是匿名函數了。
value,它的類型和屬性所聲名的類型相同。
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) 教師表
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#;
在繼承或間接繼承與這個類的子類中能夠訪問。
會,可是不能被訪問。因此看上去他們彷佛是不能被繼承的,但實際上確實被繼承了。
兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,因此須要手動實現那個無參數構造函數。
234.重載和複寫有什麼區別?
重載提供了對一個方法簽名的不一樣參數調用的實現。覆寫提供了子類中改變父類方法行爲的實現。
select min(id) from T_Persons group by name,age;--按照name和age分組
select * from T_Persons where id in (select min(id) from T_Persons group by name,age--按name和age分組 )
delete from T_Persons where id not in( select min(id) from T_Persons group by name,age--按照name和age分組)
238.可以阻止某一個類被其餘類繼承麼?
能夠,使用關鍵字sealed。
239.可以實現容許某個類被繼承,但不容許其中的某個方法被覆寫麼?
能夠,標記這個類爲public,並標記這個方法爲sealed。
240什麼是抽象類(abstract class)?
一種不能夠被實例化的類。抽象類中通常含有抽象方法,固然也可有具體實現。繼承類只有實現過全部抽象類的抽象方法後才能被實例化。
241.什麼時候必須聲明一個類爲抽象類?
當這個類中包含抽象方法時,或是該類並無徹底實現父類的抽象方法時。
242.接口(interface)是什麼?
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。
243.爲何不能指定接口中方法的修飾符?
接口中的方法用來定義對象之間通訊的契約,指定接口中的方法爲私有或保護沒有意義。他們默認爲公有方法。
244.能夠繼承多個接口麼?
固然。
245.那麼若是這些接口中有重複的方法名稱呢?
這種狀況中你能夠決定如何實現。固然須要特別得當心。可是在編譯環節是沒有問題的。
246.接口和抽象類的區別是什麼?
接口中全部方法必須是抽象的,而且不能指定方法的訪問修飾符。抽象類中能夠有方法的實現,也能夠指定方法的訪問修飾符。
247.如何區別重載方法?
不一樣的參數類型,不一樣的參數個數,不一樣的參數順序。
248.C1onst和readonly有什麼區別?
const關鍵字用來聲明編譯時常量,readonly用來聲明運行時常量。
249.System.String 和System.StringBuilder有什麼區別?
System.String是不可變的字符串。System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法。
250.列出override跟new用法的不一樣. 什麼是shadowing? (Juxtapose the use of override with new. What is shadowing?)
簡單的講, 子類的override, 將忽略父類用virtual修飾的同名方法. 但子類的new, 將被父類用virtual修飾的同名方法所遮蓋. 聽起來有點抽象, 用下面代碼演示一下, 就明瞭了.
複製代碼
public class Animal
{
public virtual string DoSomething()
{
return "I can breathe";
}
}
public class Bird : Animal
{
public override string DoSomething()
{
return "I can fly";
}
}
public class Cat : Animal
{
public new string DoSomething()
{
return "I can run";
}
}
1 var animal = new Animal();
2 animal.DoSomething() // I can breathe
3 var bird = new Bird();
4 bird.DoSomething() // I can fly
5 var cat = new Cat();
6 cat.DoSomething() // I can run
1 var animal = new Animal();
2 animal.DoSomething() // I can breathe
3 Animal bird = new Bird();
4 bird.DoSomething() // I can fly
5 Animal cat = new Cat();
6 cat.DoSomething() // I can breathe
251.解釋virtual, sealed, override 跟 abstract 的用法 (Explain the use of virtual, sealed, override, and abstract.)
virtual: 容許被子類重寫.
sealed: 不容許被繼承.
override: 在子類使用, 重寫在父類中用virtual, abstract 或 override修飾的函數.
abstract: 只能被繼承, 不能被實例化. 函數自己不能有實現代碼, 可是能夠有屬性
252.解釋Foo.Bar,Version=2.0.205.0,Culture=neutral, PublicKeyToken=593777ae2d274679d 這行裏每一個部分的重要性跟用法
Foo.Bar: Assembly(程序集)的名字,
Version: 版本號, 就像 ASP.MCV 1.0, 2.0, 3.0
Culture: 這個程序集適用的文化環境
PublicKeyToken: 原做者在發佈此程序集的時候生成, 用來鑑別這個程序集是否被別人修改過
253.使用Primary Interop Assembly (PIA)的好處是什麼?
254. UNite 是經過什麼機制知道要測試哪個方法的?
255. catch(Exception e){throw e;} 和 catch(Exception e){throw;}的區別
前者不保留原先的stacktrace, 後者保留原先的stacktrace.
256. What is the difference between typeof(foo) and myFoo.GetType()?
typeof(foo), foo 是類, 在編譯的時候執行,myFoo.GetType(), myFoo 是類的一個實列,在運行時執行。沿用上面Bird跟Animal的例子
var bird = new Bird();
if (bird.GetType() == typeof(Animal))
{
// can not go in here
}
if (bird is Animal)
{
// can go in here
Console.WriteLine("bird is an Animal");
}
257. Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?
public a(string a) : this() {} 調用base constructor public c(){}. 好處是當base constructor c()有邏輯時(e.g. 初始化域)能夠避免重複代碼。
258."This" 是什麼?能夠用在static函數中嗎?
this 代指當前實例自己, 不能夠用在靜態函數中。由於靜態函數不須要實例來調用的
259.數據庫的範式
第一範式(1NF)無重複的列
第二範式(2NF)屬性徹底依賴於主鍵 [ 消除部分子函數依賴 ]
第三範式(3NF)屬性不依賴於其它非主屬性 [ 消除傳遞依賴 ]
說個個人記憶方式吧
第一範式,1NF,無重複列,字段不冗餘且必不可少。這必須得記住
第二範式,2NF,知足第一範式且表必須有主鍵
第三範式,3NF,知足第二範式且表引用其餘表必須經過主鍵引用
260.數據庫有哪幾種索引
A)彙集索引,表數據按照索引的順序來存儲的。
B)非彙集索引,表數據存儲順序與索引順序無關。
261.C#中,值類型和引用類型的區別
不一樣的值類型,在棧中分配的空間大小不同。不一樣的引用類型,在棧中分配的空間上同樣的,在堆中空間不同
C#的全部值類型均隱式派生自System.ValueType:
如 Sbyte,byte,short,int,long,DateTime,ushort,unit,ulong,char,float,double,decimal,bool,struct,enum,還有可空類型,如int?是值類型
引用類型:數組,類,接口,委託,Object,String
例外狀況來了,必定要說:值類型的實例會存儲在棧上,可是,當某個類的實例有個字段是值類型,那麼實際該字段會和類的實例保持在同一個地方,即堆上。
F12咱們發現,string是被sealed修飾的。
sealed :密封,
故名思義,就是由它修飾的類或方法將不能被繼承或是重寫。
262.Final,finaly,finallize的區別
1、inal 修飾符(關鍵字)若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中只能讀取,不可修改。被聲明爲final的方法也一樣只能使用,不能重載。 一句話:final修飾類時:沒有祖先的光棍(不能繼承也不能被繼承),final修飾變量或者方法時:固定的,只能拿來用,不能改。
2、finally 在異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹配的 catch 子句就會執行,而後控制就會進入 finally 塊(若是有的話)
3、finalize 方法名。使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的。
263.HTTP中Post和Get區別
根據HTTP規範,Get用於信息獲取,並且應該是安全的和冪等的。 參數在URL後,以?分割,以&相連。
根據HTTP規範,Post表示可能修改服務器的資源請求。數據存在HTTP包中
由於Get是安全的,因此Get返回的內容能夠被瀏覽器,Cache服務器緩存起來,可是,緩存服務器不會緩存Post的請求內容,索引有些時候你提交表單後按下F5的時候,跳出來確認框。
264.UDP,TCP區別
TCP(Transmission Control Protocol,傳輸控制協議)是基於鏈接的協議。一個TCP鏈接必需要通過三次「對話」才能創建起來,其中的過程很是複雜,這隻作簡單、形象的介紹,由於我只作到了理解這個過程。
主機A向主機B說:「我想給你發數據,能夠嗎?」 這是第一次對話;主機A向主機B
主機B回答A說:「能夠,你何時發?」 這是第二次對話;主機B向主機A
主機A向主機B說:「我如今就發,你接着吧!」 這是第三次對話;主機A向主機B
三次「對話」的目的是使數據包的發送和接收同步,通過三次「對話」以後,主機A才向主機B正式發送數據。
UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去。如咱們打電話,聊QQ。不用管對方贊成,能夠直接撥打和發送信息。
265.C#中如何判斷兩個對象是否是相等?
判斷相等有 ==,Equal,ReferenceEquals
ReferenceEquals是Object的靜態方法,用於比較兩個引用類型的變量是不是對於同一個對象的引用。對於值類型它老是返回false。
==是一個能夠重載的二元操做符,能夠用於比較兩個對象是否相等。
對於內置值類型,==判斷的是兩個對象的代數值是否相等。它會根據須要自動進行必要的類型轉換,並根據兩個對象的值是否相等返回true或者false。而對於用戶定義的值類型,若是沒有重載==操做符,==將是不可以使用的。對於引用類型,== 默認的行爲與ReferenceEquals的行爲相同,僅有兩個對象指向同一個Reference的時候才返回true。可是.NET Framework中的類不少對==進行了重載,例如String類的==與Equals的行爲相同,判斷兩個字符串的內容是否相等。因此在應用中,對於 系統定義的引用類型建議不要使用==操做符,以避免程序出現與預期不一樣的運行結果。
Equals方法對於值類型和引用類型的定義不一樣,對於值類型,類型相同,而且數值相同(對於struct的每一個成員都必須相同),則Equals返回 true,不然返回false。而對於引用類型,默認的行爲與ReferenceEquals的行爲相同,僅有兩個對象指向同一個Reference的時 候才返回true。
266.怎樣實現多態
1.經過對象直接調用成員函數時,始終默認使用該對象的類的成員函數(除非用::顯示指定類名)
2.經過指向對象的指針或引用調用成員函數時,若是該函數是實函數,則調用該指針或引用的類的成員函數;若是該函數是虛函數,則調用該指針或引用指向的對象的類的成員函數。
267.什麼是裝箱和拆箱?
從值類型接口轉換到引用類型爲裝箱。從引用類型轉換到值類型爲拆箱。
裝箱(boxing)是將值類型轉換成引用類型,int i=3;object o=i;這即是裝箱過程。
而拆箱(unboxing)是將引用類型數據轉換成值類型,int j=(int)o;
268.什麼是Interface?它與Abstract Class有什麼區別?
接口(Interface)是用來定義行爲規範的,不會有具體實現,而抽象類除定義行爲規範外,能夠有部分實現,但一個類能實現多個接口,但只能繼承一個父類
269.何時使用抽象類,何時用接口
接口用於規範,抽象類用於共性。接口中只能聲明方法、屬性、事件、索引器。而抽象類中能夠有方法的實現,也能夠定義非靜態的類變量。抽象類是類,因此只能被單繼承,可是接口卻能夠一次實現多個。抽象了能夠提供某些方法的部分實現,接口不能夠。抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的。在抽象類中假如一個方法,那麼它的子類就同時有了這個方法。而在接口中加入新的方法,那麼實現它的類就要從新編寫(這就是爲何說接口是一個類的規範了)。接口成員被定義爲公共的,但抽象類的成員也能夠是私有的、受保護的、內部的、或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。
此外接口不能包含字段、構造函數、析構函數、靜態成員或常量。
270.什麼是抽象類(Abstract Class)?
一種不能夠被實例化的類。抽象類中通常含有抽象方法,固然也能夠有具體實現。繼承類只有實現過全部抽象類的抽象方法後才能被實例化。
271.什麼時候必須聲明一個類爲抽象類?
當這個類中包含抽象方法時,或是該類並無徹底實現父類的抽象方法時。
272.爲何不能指定接口中方法的修飾符?
接口中的方法用來定義對象之間通訊的契約,指定接口中的方法爲私有或保護沒有意義。他們默認爲共有方法。
273.若是接口中存在重複的方法名稱該如何?
這種狀況中你能夠決定如何實現,固然須要特別的當心。可是在編譯環節是沒有問題的。
274.C#接口和類有什麼異同。
異:
不能直接實例化接口。
接口不包含方法的實現。
接口、類和結構可從多個接口繼承。可是C#只支持單繼承:類只能從一個基類繼承實現。
類定義可在不一樣的源文件之間進行拆分。
同:
接口、類和結構可從多個接口繼承。
接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員。
接口能夠包含事件、索引器、方法和屬性。
一個類能夠實現多個接口。
275.有哪幾種方法能夠實現一個類存取另一個類的成員函數及屬性
276.A類是B類的基類,而且都有本身的構造,析構函數,請舉例證實B類從實例化到消亡過程當中構造,析構函數的執行過程.請附code
277.講一講你理解的web service,在dot net framework中,怎麼很好的結合xml?
278.C#能否對內存進行直接的操做?若是能,如何操做;若是不能,爲何?
279.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
280.面向對象的思想主要包括什麼?
面向對象三大特徵:繼承,封套,多態.面相對象的主要思想就是減小代碼重複,增大代碼複用率..
281.什麼是ASP.net中的用戶控件
問這樣的問題,通常是迷惑你.由於新手仍是分不清楚用戶控件和服務器控件(也稱自定義控件)..用戶控件通常用在內容多爲靜態,或者少量會改變的狀況下..用的比較大..相似ASP中的include..可是功能要強大的多..
若是現有的 ASP.NET 服務器控件都不符合應用程序的特定要求,則能夠建立封裝所需功能的 Web 用戶控件或 Web 自定義控件。這兩種控件之間的主要區別在於設計時的易建立性與易用性。
Web 用戶控件易於建立,但它們在高級方案中使用起來可能不太方便。開發 Web 用戶控件的方式與開發 Web 窗體頁的方式幾乎徹底相同。與 Web 窗體類似,用戶控件能夠在可視化設計器中建立,能夠使用與 HTML 隔離的代碼來編寫,而且能夠處理執行事件。可是,因爲 Web 用戶控件在運行時動態地進行編譯,因此不能將它們添加到工具箱中,並且它們在添加到頁面上時由簡單的佔位符標誌符號來表示。若是您習慣於徹底的 Visual Studio .NET 設計時支持(包括「屬性」窗口和「設計」視圖預覽),這將會使 Web 用戶控件使用起來更不方便。 此外,在應用程序之間共享用戶控件的惟一方式是將一個單獨的副本放入每一個應用程序,所以若是對該控件做出了更改,將須要進行比較多的維護。
Web 自定義控件是編譯的代碼,這使得 Web 自定義控件更易於使用但更難於建立;Web 自定義控件必須使用代碼來建立。一旦建立該控件,那麼,您就能夠將其添加到工具箱中,並在具備徹底「屬性」窗口支持和 ASP.NET 服務器控件的其餘全部設計時功能的可視化設計器中顯示該控件。此外,還能夠在全局程序集緩存中安裝 Web 自定義控件的單個副本,並在應用程序之間共享該副本,這將使維護變得更容易。有關更多信息,請參閱全局程序集緩存。
若是您的控件包含大量靜態佈局,用戶控件則多是較佳的選擇。若是您的控件主要是動態生成的(例如數據綁定表的行、樹視圖的節點或選項卡 (TabControl) 控件的選項卡),自定義控件則多是較佳的選擇。
下表概述了這兩種類型之間的主要區別:
Web 用戶控件
1.難於建立
2.爲使用可視化設計工具的使用者提供有限的支持
3. 每一個應用程序中須要控件的一個單獨副本
4. 不能添加到 Visual Studio 中的工具箱
5. 適用於靜態佈局
Web 自定義控件
1.易於建立
2. 爲使用者提供徹底的可視化設計工具支持
3. 僅在全局程序集緩存中須要控件的單個副本
4. 能夠添加到 Visual Studio 中的工具箱
5. 適用於動態佈局
282.CTS、CLS和CLR分別做何解釋?
這個須要當前描述了..東西太多..打字要打死了..找個比較簡單的說說吧!
CTS:公共類型系統.主要是爲了語言之間的進行標準化處理.
CLS:公共語言規範.主要是確保代碼能夠在任何語言中訪問的最小標準集體
CLR:公共語言運行時.主要是管理代碼..處理,加載代碼,以及全部服務的代碼
283.值類型和引用類型的區別?寫出C#的樣例代碼。
值類型是在內存中保存,引用類型是在內存中保存一副本.你在內存中能夠有多個某種引用對象..可是值類型始終只有一個.
最多見的值類型就是static,struct;
例如:
static int aa = 1;//值類型
若是多個用戶改變aa的值則,aa的值會以最後一個修改的記錄爲準.其餘人的修改則會被沖掉.
引用類型,最能說明問題的就是實例化..你new出來的對象單獨分配一個獨立的內存..因此值不會互相沖突/
靜態成員:靜態類中的成員加入static修飾符,便是靜態成員.能夠直接使用類名+靜態成員名訪問此靜態成員,由於靜態成員存在於內存,非靜態成員須要實例化纔會分配內存,因此靜態成員不能訪問非靜態的成員..由於靜態成員存在於內存,因此非靜態成員能夠直接訪問類中靜態的成員.
非成靜態員:全部沒有加Static的成員都是非靜態成員,當類被實例化以後,能夠經過實例化的類名進行訪問..非靜態成員的生存期決定於該類的生存期..而靜態成員則不存在生存期的概念,由於靜態成員始終駐留在內容中..
一個類中也能夠包含靜態成員和非靜態成員,類中也包括靜態構造函數和非靜態構造函數..
對於winApp來講,靜態成員對於程序員自己省了不少事,並且由於靜態成員駐留內存,在方法與方法之間傳遞共享數據的時候,因此靜態成員成了個人首選..可是不要由於方便,大量使用,尤爲是在內存緊張或者
用靜態方法操做一些共享值的時候.或者要寫多用戶系統的時候,要慎之又慎.好比:
static int id = 0;
sql = "select * from table where id=" + id;l
6.ADO.net中經常使用的對象有哪些?分別描述一下。
Connection 數據庫鏈接對象
Command 數據庫命令
DataReader 數據讀取器
DataSet 數據集
285..net中讀寫數據庫須要用到哪些類?他們的做用
看第六題..答案差很少
286.ASP.net的身份驗證方式有哪些?分別是什麼原理?
window驗證:爲每一個用戶開啓window賬號,驗證其身份.安全性較高.
forms驗證:爲每一個登錄用戶寫入一個身份驗證票據..在web使用最廣的驗證方式..靈活方便.
287.進程和線程分別怎麼理解?
進程:Process
288.活動目錄的做用。
活動目錄是window2000的最重要的功能.能夠將用戶信息所有集成起來,登錄之後能夠訪問多個不一樣的網絡服務..沒深刻研究過.
289..net中讀寫XML的類都歸屬於哪些命名空間?
System.XML類
290.經常使用的調用webservice方法有哪些?
我通常用的是WSDL..或者web引用..
291.如何把一個array複製到arrayList裏
foreach( object o in array )arrayList.Add(o);
292.datagrid.datasouse能夠鏈接什麼數據源
dataset,datatable,dataview , IList
A。在建立工資表時爲」工資「字段創建缺省
B。在建立工資表時爲」工資「字段創建檢查約束
C。在工資表創建一個觸發器
D。爲工資表數據輸入編寫一個程序進行控制
(時間30分鐘)
結果集:日期
表名:t_rain 降雨記錄
表結構:
fstartTimedatetime (有時間信息) 降雨開始時間
fendTimedatetime 降雨結束時間 (可能跨日的)
他們決定這麼分:
1。抽籤決定本身的號碼(1,2,3,4,5)
2。首先,由1號提出分配方案,而後你們5人進行表決,當且僅當半數和超過半數的人贊成時,按照他的提案進行分配,不然將被扔入大海喂鯊魚。
3。若是1號死後,再由2號提出分配方案,而後你們4人進行表決,當且僅當半數和超過半數的人贊成時,按照他的提案進行分配,不然將被扔入大海喂鯊魚。
4。依次類推......
問題:第一個海盜提出怎樣的分配方案纔可以使本身的收益最大化
條件:每一個海盜都是很聰明的人,都能很理智的判斷得失,從而作出選擇。
表結構:
id int
name varchar(20)
有如下數據:
[id] [name]
1 aaa
2 bbb
3 aaa
4 ccc
SELECT `vPART_ID` FROM `buybill` group by vPART_ID HAVING COUNT(vPART_ID)>1
不支持。能夠用接口來實現。
被protected internal修飾的屬性/方法只能在它的在同一個程序集(Assembly)中的子類被訪問。
兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,因此須要手動實現那個無參數構造函數。
被virtual修飾的方法能夠被子類覆寫。
不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改成override。
不能夠,甚至子類中沒法訪問父類中的私有方法。
答:SOAP(Simple Object Access Protocol )簡單對象訪問協議是在分散或分佈式的環境中交換信息並執行遠程過程調用的協議,是一個基於XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最經常使用的仍是HTTP協議),能夠容許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通訊。這種相互通訊採用的是XML格式的消息,具體請看:http://playist.blogchina.com/2521621.html
323.填空: (1)面向對象的語言具備________性、_________性、________性。
(2)能用foreach遍歷訪問的對象須要實現 ________________接口或聲明________________方法的類型。
(3)列舉ADO.net中的五個主要對象_______________、_____________、_______________、_______________、_________________。
(1) 如下敘述正確的是:
A. 接口中能夠有虛方法。 B. 一個類能夠實現多個接口。
C. 接口不能被實例化。 D. 接口中能夠包含已實現的方法。
(2) 從數據庫讀取記錄,你可能用到的方法有:
A. ExecuteNonQuery B. ExecuteScalar
C. Fill D. ExecuteReader
class Class1 {
private string str = "Class1.str";
private int i = 0;
static void StringConvert(string str) {
str = "string being converted.";
}
static void StringConvert(Class1 c) {
c.str = "string being converted.";
}
static void Add(int i) {
i++;
}
static void AddWithRef(ref int i) {
i++;
}
static void Main() {
int i1 = 10;
int i2 = 20;
string str = "str";
Class1 c = new Class1();
Add(i1);
AddWithRef(ref i2);
Add(c.i);
StringConvert(str);
StringConvert(c);
Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(c.i);
Console.WriteLine(str);
Console.WriteLine(c.str);
}
}
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B: A
{
public B()
{
Console.WriteLine('B');
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}
public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
}
public class B : A
{
public override void Fun1(int i)
{
base.Fun1 (i + 1);
}
public static void Main()
{
B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
}
}
328.程序設計: 貓大叫一聲,全部的老鼠都開始逃跑,主人被驚醒。
要求: 1.要有聯動性,老鼠和主人的行爲是被動的。
考慮可擴展性,貓的叫聲可能引發其餘聯動效應。
要點:1. 聯動效果,運行代碼只要執行Cat.Cryed()方法。2. 對老鼠和主人進行抽象
評分標準: <1>.構造出Cat、Mouse、Master三個類,並能使程序運行(2分)
<2>從Mouse和Master中提取抽象(5分)
<3>聯動效應,只要執行Cat.Cryed()就能夠使老鼠逃跑,主人驚醒。(3分)
public interface Observer
{
void Response(); //觀察者的響應,如是老鼠見到貓的反映
}
public interface Subject
{
void AimAt(Observer obs); //針對哪些觀察者,這裏指貓的要撲捉的對象---老鼠
}
public class Mouse : Observer
{
private string name;
public Mouse(string name, Subject subj)
{
this.name = name;
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer
{
public Master(Subject subj)
{
subj.AimAt(this);
}
public void Response()
{
Console.WriteLine("Host waken!");
}
}
public class Cat : Subject
{
private ArrayList observers;
public Cat()
{
this.observers = new ArrayList();
}
public void AimAt(Observer obs)
{
this.observers.Add(obs);
}
public void Cry()
{
Console.WriteLine("Cat cryed!");
foreach (Observer obs in this.observers)
{
obs.Response();
}
}
}
class MainClass
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat);
cat.Cry();
}
}
//---------------------------------------------------------------------------------------------
設計方法二: 使用event -- delegate設計..
public delegate void SubEventHandler();
public abstract class Subject
{
public event SubEventHandler SubEvent;
protected void FireAway()
{
if (this.SubEvent != null)
this.SubEvent();
}
}
public class Cat : Subject
{
public void Cry()
{
Console.WriteLine("cat cryed.");
this.FireAway();
}
}
public abstract class Observer
{
public Observer(Subject sub)
{
sub.SubEvent += new SubEventHandler(Response);
}
public abstract void Response();
}
public class Mouse : Observer
{
private string name;
public Mouse(string name, Subject sub) : base(sub)
{
this.name = name;
}
public override void Response()
{
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer
{
public Master(Subject sub) : base(sub){}
public override void Response()
{
Console.WriteLine("host waken");
}
}
class Class1
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat);
cat.Cry();
}
}
a 產生一個int數組,長度爲100,並向其中隨機插入1-100,而且不能重複.
b 對上面生成的數組排序,須要支持升序.降序兩種順序
1.c#中的三元運算符是__?.___?
2.當整數a賦值給一個object對象時,整數a將會被__裝箱(封裝)___?
3.類成員有_____種可訪問形式? this.;new Class().Method;
4.public static const int A=1;這段代碼有錯誤麼?是什麼? const不能用static修飾
5.float f=-123.567F;
int i=(int)f;
i的值如今是_____? 123
6.利用operator聲明且僅聲明瞭「==」,有什麼錯誤麼?
delagete
Control
gc
using System;
class A
{
public virtual void F(){
Console.WriteLine("A.F");
}
}
abstract class B.A
{
public abstract override void F(); // new public abstract void F();
}
switch (i){
case().
CaseZero();
break;
case 1.
CaseOne();
break;
case 2.
dufault; //wrong
CaseTwo();
break;
}
using 指令和語句
new 建立實例 new 隱藏基類中方法
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");
//不相等,由於比較的是對象
a)SQL Server .NET Framework 數據提供程序;
b)OLE DB .NET Framework 數據提供程序;
c)ODBC .NET Framework 數據提供程序;
d)Oracle .NET Framework數據提供程序;
a)enum類型
b)struct類型
c)string類型
d)int類型
a)Web窗體頁的程序的邏輯由代碼組成,這些代碼的建立用於與窗體交互.編程邏輯惟一與用戶界面不一樣的文件中.該文件稱做爲「代碼隱藏」文件,若是用C#建立,該文件將具備「.ascx.cs」擴展名.
b)項目中全部Web窗體頁的代碼隱藏文件都被編譯成.EXE文件.
c)項目中全部的Web窗體頁的代碼隱藏文件都被編譯成項目動態連接庫(.dll)文件.
d)以上都不正確.
a)在C++中支持抽象類而在C#中不支持抽象類.
b)C++中可在頭文件中聲明類的成員而在CPP文件中定義類的成員,在C#中沒有頭文件而且在同一處聲明和定義類的成員.
c)在C#中可以使用 new 修飾符顯式隱藏從基類繼承的成員.
d)在C#中要在派生類中從新定義基類的虛函數必須在前面加Override.
a)值類型和調用類型;
b)值類型和引用類型;
c)引用類型和關係類型;
d)關係類型和調用類型;
a)類不能夠多重繼承而接口能夠;
b)抽象類自身能夠定義成員而接口不能夠;
c)抽象類和接口都不能被實例化;
d)一個類能夠有多個基類和多個基接口;
a)save方法
b)load方法
c)loadXML方法
d)send方法
a)構造函數能夠聲明返回類型.
b)構造函數不能夠用private修飾
c)構造函數必須與類名相同
d)構造函數不能帶參數
a)public enum var1{ Mike = 100, Nike = 102, Jike }
b)public enum var1{ Mike = 100, Nike, Jike }
c)public enum var1{ Mike=-1 , Nike, Jike }
d)public enum var1{ Mike , Nike , Jike }
435.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(d).
a)9
b)2
c)6
d)越界
436.接口是一種引用類型,在接口中能夠聲明(a),但不能夠聲明公有的域或私有的成員變量.
a)方法.屬性.索引器和事件;
b)方法.屬性信息.屬性;
c)索引器和字段;
d)事件和字段;
437.ASP.NET框架中,服務器控件是爲配合Web表單工做而專門設計的.服務器控件有兩種類型,它們是(a)
a)HTML控件和Web控件
b)HTML控件和XML控件
c)XML控件和Web控件
d)HTML控件和IIS控件
438.ASP.NET中,在Web窗體頁上註冊一個用戶控件,指定該控件的名稱爲」Mike」,正確的註冊指令爲(b)
a)<%@Register TagPrefix = 「Mike」 TagName = 「Space2」 Src = 「myX.ascx」%>
b)<%@Register TagPrefix = 「Space2」 TagName = 「Mike」 Src = 「myX.ascx」%>
c)<%@Register TagPrefix = 「SpaceX」 TagName = 「Space2」 Src = 「Mike」%>
d)以上皆非
439.在ADO.NET中,對於Command對象的ExecuteNonQuery()方法和ExecuteReader()方法,下面敘述錯誤的是(c).
a)insert.update.delete等操做的Sql語句主要用ExecuteNonQuery()方法來執行;
b)ExecuteNonQuery()方法返回執行Sql語句所影響的行數.
c)Select操做的Sql語句只能由ExecuteReader()方法來執行;
d)ExecuteReader()方法返回一個DataReder對象;
a)SqlConnection con1 = new Connection(「Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB」);
b)SqlConnection con1 = new SqlConnection(「Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB」);
c)SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB);
d)SqlConnection con1 = new OleDbConnection(「Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB」);
a)Buttons屬性表示ToolBar控件的全部工具欄按鈕
b)ButtonSize屬性表示ToolBar控件上的工具欄按鈕的大小,如高度和寬度
c)DropDownArrows屬性代表工具欄按鈕(該按鈕有一列值須要如下拉方式顯示)旁邊是否顯示下箭頭鍵
d)ButtonClick事件在用戶單擊工具欄任何地方時都會觸發
442.在ADO.NET中執行一個存儲過程時,若是要設置輸出參數則必須同時設置參數的方向和(d ),必要時還要設置參數尺寸.
a)大小;
b)上限;
c)初始值;
d)類型;
a)窗體沒有邊框並不能調整大小;
b)窗體沒有邊框但能調整大小;
c)窗體有邊框但不能調整大小;
d)窗體是透明的;
a)要將FormBoderStyle屬性設置爲None;
b)要將Opacity屬性設置爲小於100%得值;
c)要將locked 屬性設置爲True;
d)要將 Enabled屬性設置爲True;
a)索引器的參數必須是兩個或兩個以上
b)索引器的參數類型必須是整數型
c)索引器沒有名字
d)以上皆非
a)窗體也是控件;
b)窗體也是類;
c)控件是從窗體繼承來的;
d)窗體的父類是控件類;
a)System.ComponentModel命名空間;
b)System.Collections命名空間;
c)System.Threading命名空間;
d)Microsoft.Win32命名空間;
a)DrawGrid;
b)ShowInTaskbar;
c)Enabled;
d)IsMdiContainer;
a)TreeNode;
b)int;
c)string;
d)TreeView;
a)XML提供一種描述結構化數據的方法;
b)XML 是一種簡單.與平臺無關並被普遍採用的標準;
c)XML文檔可承載各類信息;
d)XML只是爲了生成結構化文檔;
public interface IFile
{
int A;
int delFile()
{
A = 3;
}
void disFile();
}
a)以上的代碼中存在的錯誤包括.不能在接口中定義變量,因此int A代碼行將出現錯誤;
b)以上的代碼中存在的錯誤包括.接口方法delFile是不容許實現的,因此不能編寫具體的實現函數;
c)代碼void disFile();聲明無錯誤,接口能夠沒有返回值;
d)代碼void disFile();應該編寫爲void disFile(){};
453.在C#中利用Socket進行網絡通訊編程的通常步驟是.創建Socket偵聽.( a)30.聲明一個委託public delegate int myCallBack(int x); 則用該委託產生的回調方法的原型應該是(b ).
a)void myCallBack(int x) ;
b)int receive(int num) ;
c)string receive(int x) ;
d)不肯定的;
1.( T)在C#中,裝箱操做是將值類型轉化成引用類型.
2.( F)接口中的成員不能夠有訪問域修飾符,但能夠有其它修飾符.
3.( F)在C#中,索引器是專門用來訪問對象中的數組信息的.
4.( T)在C#中,接口能夠被多重繼承而類不能.
5.( F)在C#中,int[][]是定義一個int型的二維數組.
6.( T)異常類對象均爲System.Exception類的對象.
7.(T ) 當窗體最小化後,再次還原成爲活動窗體時將自動觸發Paint事件.
8.( T) ASP.NET中,使用驗證控件來驗證用戶輸入,要求用戶不可跳過該項輸入,而且用戶輸入值在0和1000之間,則適用RequiredFieldValidator和RangeValidator控件.
9.( F) 聲明委託其實是聲明瞭一個方法.
10.(T ) 任何事物都是對象.
1.請簡述一下用Socket進行同步通信編程的詳細步驟
1.在應用程序和遠程設備中使用協議和網絡地址初始化套接字
2.在應用程序中經過指定端口和地址創建監聽
3.遠程設備發出鏈接請求
4.應用程序接受鏈接產生通訊scoket
5.應用程序和遠程設備開始通信(在通信中應用程序將掛起直到通信結束)
6.通信結束,關閉應用程序和遠程設備的Socket回收資源
2.比較ADO 與ADO.NET 的不一樣.
a)SQL Server .NET Framework 數據提供程序;
b)OLE DB .NET Framework 數據提供程序;
c)ODBC .NET Framework 數據提供程序;
d)Oracle .NET Framework數據提供程序;
a)save方法
b)load方法
c)loadXML方法
d)send方法
a)構造函數能夠聲明返回類型.
b)構造函數不能夠用private修飾
c)構造函數必須與類名相同
d)構造函數不能帶參數
a)public enum var1{ Mike = 100, Nike = 102, Jike }
b)public enum var1{ Mike = 100, Nike, Jike }
c)public enum var1{ Mike=-1 , Nike, Jike }
d)public enum var1{ Mike , Nike , Jike }
a)方法.屬性.索引器和事件;
b)方法.屬性信息.屬性;
c)索引器和字段;
d)事件和字段;
a)Buttons屬性表示ToolBar控件的全部工具欄按鈕
b)ButtonSize屬性表示ToolBar控件上的工具欄按鈕的大小,如高度和寬度
c)DropDownArrows屬性代表工具欄按鈕(該按鈕有一列值須要如下拉方式顯示)旁邊是否顯示下箭頭鍵
d)ButtonClick事件在用戶單擊工具欄任何地方時都會觸發
a)窗體沒有邊框並不能調整大小;
b)窗體沒有邊框但能調整大小;
c)窗體有邊框但不能調整大小;
d)窗體是透明的;
a)要將FormBoderStyle屬性設置爲None;
b)要將Opacity屬性設置爲小於100%得值;
c)要將locked 屬性設置爲True;
d)要將 Enabled屬性設置爲True;
a)System.ComponentModel命名空間;
b)System.Collections命名空間;
c)System.Threading命名空間;
d)Microsoft.Win32命名空間;
a)DrawGrid;
b)ShowInTaskbar;
c)Enabled;
d)IsMdiContainer;
468. 用Visual C++ 6.0編寫的代碼(unmanaged code),如何在CLR下和其餘dot net component結合?
469. 之前做過的一些項目?介紹一下本身的編程經驗.(這是矇混不過去的,基本一問就知道是真是假)
472.ASP.net的身份驗證方式有哪些?分別是什麼原理?
window驗證:爲每一個用戶開啓window賬號,驗證其身份.安全性較高. forms驗證:爲每一個登錄用戶寫入一個身份驗證票據..在web使用最廣的驗證方式..靈活方便.
473.進程和線程分別怎麼理解?
進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位. 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源.
474.如何在C#中實現繼承? 在類名後加上一個冒號,再加上基類的名稱。 C#支持多重繼承麼?
不支持。能夠用接口來實現。 被protected修飾的屬性/方法在何處能夠訪問? 在繼承或間接繼承與這個類的子類中能夠訪問。 私有成員會被繼承麼? 會,可是不能被訪問。因此看上去他們彷佛是不能被繼承的,但實際上確實被繼承了。 請描述一下修飾符protected internal。 被protected internal修飾的屬性/方法只能在它的在同一個程序集(Assembly)中的子類被訪問。 C#提供一個默認的無參數構造函數,當我實現了另一個有一個參數的構造函數時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數? 兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,因此須要手動實現那個無參數構造函數。
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//請在如下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。
}
}
}
}
答:if( OnNew != null )
OnNew( this, e );
答:Select ID
FROM table1
Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
477.根據線程安全的相關知識,分析如下代碼,當調用test方法時i>10時是否會引發死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,因此每次改變的都只是一個副本,所以不會出現死鎖。但若是把int換作一個object,那麼死鎖會發生)
478.分析如下代碼
public static void test(string ConnectString)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = ConnectString;
try
{
conn.Open();
…….
}
catch(Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
finally
{
if (!conn.State.Equals(ConnectionState.Closed))
conn.Close();
}
}
請問
答:回答:若是傳入的connectionString是如出一轍的話,能夠正確使用鏈接池。不過如出一轍的意思是,連字符的空格數,順序徹底一致。
答:只能夠捕捉數據庫鏈接中的異常吧. (finally中,catch中,若是有別的可能引起異常的操做,也應該用try,catch。因此理論上並不是全部異常都會被捕捉。)
答:WS主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。
答:根據點擊的列頭,包該列的ID取出,按照該ID排序後,在給綁定到ListView中
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}
簡單的說就是從根節點開始遍歷找子節點,在從找到的子節點找它的子節點,一層層下去
儘量的使用約束(主鍵,惟一鍵,外鍵,非空字段)實現,效率高,其次使用觸發器,不管何種業務訪問數據庫均可以維護數據庫的完整性,一致性,最後下下之策就是自寫業務邏輯,此方法效率低,編程複雜.
接口是能夠多繼承,而類只能單繼承,接口強調了必須實現但沒有具體的方法.類是方法功能的實現和集合,而接口是規範類,約束類
接口是一個純粹的抽象類,沒有任何實際的東西,只是定義了一個框架,而抽象類裏面能夠有實際的一個方法,並不須要全部的方法都是抽象的,能夠實現一個接口中的全部方法也能夠繼承一個抽象的類,而後覆寫其中的方法,接口通常只有法防,而沒有數據成員或屬性.抽象類有方法也有數據成員和屬性,通常狀況下先考慮用接口,只有當可能要訪問到數據成語或屬性時,用抽象類
類是方法功能的實現和集合,接口是規範類,約束類
C++速度快,功能強大,類庫須要手動選擇,編譯型跨平臺
java運行速度慢,須要虛擬機環境,徹底跨平臺,類庫豐富,功能中庸沒法進行底層的高級操做
c#運行速度中等,須要虛擬機環境,即將跨平臺,類庫豐富,功能比java略多,主要是能夠與操做系統底層交互
c#吸取了java的語法結果,結合了c++的結構,進行了一些改進,C#不像java徹底解釋執行,採用編譯的彙編代碼進行執行,故而c#的運行效率比java快,但不如c++,C#能夠跟操做系統底層交
互,而java則不能, 例如建一個半透明的窗體,c#跟C++能夠輕易完成,而java 則顯得比登天還難
property 討論的是主題全部物的內容,狀態等,好比,人能說話思考,這裏的是否能說話思考就是一個屬性
attribute討論的是主題的天性,好比人是人類,這裏的人類就是一個特性
vc編寫的代碼,編譯成動態連接庫,而後交給.net平臺調用
使用數據庫關係,這樣能夠儘量的規範編碼,對比較大型的開發來講也容易,最後是本身編寫邏輯:這樣會形成數據的一致性,完整性的維護邏輯至關大,原型如何改變,業務邏輯都沒必要作任何改動,繼承性和多態性似的代碼的可重用性
ado是以recordset存儲,而ado.net則是以Dataset表示
ado採用的COM技術,而ado.net基於XML格式
c#中索引器的實現過程,能夠用任何類型進行索引
一個類型要想支持foreache遍歷,必須實現IEnumerable,IEnumerator兩個接口
final 修飾符用於指定類不能擴展或者方法或屬性不能重寫,他將防止其餘類經過重寫重要的函數來更改該類的行爲.帶有final修飾符的方法協議由派生類總的方法來隱藏或重載
finally塊用於請給出try塊中分配的任何資源,控制重視傳遞給finally塊,與try塊的存在方式無關
whindows驗證:爲每一個用戶開啓window帳號,驗證其身份,安全性較高
forms驗證:爲每一個登陸用戶寫入一個身份驗證票據,在web中使用最廣的驗證方式,靈活方便
passport驗證:爲成員站點提供單一登陸和核心配置
web service是跨網絡提供服務的一項技術的集合,主要經過各類不一樣的協議來實現一個服務的支持, 好比http(Hypertext Transfer Protocol) 協議, xml(eXtensible Markup Language), soap(Simple Object Access Protocol)協議, WSDL (Web Services Description Language), UDDI (Universal Description, Discovery and Integration)。 .net framework中提出了xml web service的概念: 這個概念主要闡述了將xml web service做爲一個英特網上進行分佈式計算的基礎構架。 開放標準和通訊,實現經過人與應用程序的協做, 經過xml web service整合應用程序來建立一個平臺。 應用程序從不一樣的源中通過xml web service來整合實現。 如下是.net關於xml web service的定義: . xml web service經過一個標準的協議向web用戶公佈實用功能。大多數狀況下這個協議是SOAP協議。 . xml web service經過一種方法去描述接口, 這些信息必須足夠詳細以便用戶能根據這些信息去實現一個客戶應用程序。 這個描述一般是以一個xml文檔(Web Services Description Language)呈現。 一旦xml web service被註冊, 那麼潛在的用戶能夠很容易的經過Universal Discovery Description and Integration 找到這些服務。
從時間前後上說,他們之間最先出現的是C,而後是c++,最後是c#。c++是爲了解決軟件危機而引入面向對象,c#爲了實現平臺統一和java爭奪市場下的產物。 從性能上說, c的效率最高,c++次之,c#最低。C是面向過程的結構化編程語言,他的特色是語言體積小,效率高, 語言靈活,給程序的限制小,並且能夠方便的對低層進行操做,因此它很是適合於開發操做系統,驅動程序,嵌入式等對速度要求較高的程序。 C++使向下徹底兼容C的, C++與C相比最顯著的變化就是增長了面向對象的成分,也就是增長了類的概念,由於它的增長使軟件開發能夠比較容易的描述人類的思惟,使得軟件的開發和維護變得相對簡單,直接下降了軟件的成本, 但由於C++是面向對象的語言,這自己就制約他的速度,因此C++適合開發那些大型項目,現代的大部分語言都或多或少的借鑑了C++和C的某些特性. C#被包括在.net平臺下,是一個面向對象面向網絡面向組件的語言, 有不少地方與java很是類似,擅長於開發網絡方面的程序. 所以,更確切的說,c#是一個需.net平臺支持的開發語言,單純看c#沒有意義,須要瞭解.net平臺的開發知識。 從編譯角度看,C/C++編譯生成目標文件都是可被CPU直接理解的機器碼, 而C#編譯後生成的是MSIL(Microsoft Intermediate Language)這種語言不能直接被CPU執行,而是依靠.net framework翻譯(Just-in-time compiling)成opcode後再送到CPU執行的。所以,這也是上面爲何說c#運行效率最低的緣故。(可是這種效率低,是說平均意義上的,不是絕對的)
答:C#是能夠對內存進行直接操做的,雖然不多用到指針,可是C#是能夠使用指針的, 在用的時候須要在前邊加unsafe, 在.net中使用了垃圾回收機制(GC)功能,它替代了程序員, 不過在C#中不能夠直接使用finalize方法,而是在析構函數中調用基類的finalize()方法。
ado.net不依賴於ole db提供程序,而是使用.net託管提供的程序,2:不使用com3:不在支持動態遊標和服務器端遊 4:,能夠斷開connection而保留當前數據集可用 5:強類型轉換 6:xml支持
asp解釋形,aspx編譯型,性能提升,有利於保護源碼。
答:不是。能夠用任意類型
1、抽象類和接口都不能直接實例化,若是要實例化,抽象類變量必須指向實現全部抽象方法的子類對象,接口變量必須指向實現全部接口方法的類對象。
2、抽象類要被子類繼承,接口要被類實現。
3、接口只能作方法申明,抽象類中能夠作方法申明,也能夠作方法實現
4、接口裏定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
5、抽象類裏的抽象方法必須所有被子類所實現,若是子類不能所有實現父類抽象方法,那麼該子類只能是抽象類。一樣,一個實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。
6、抽象方法只能申明,不能實現,接口是設計的結果 ,抽象類是重構的結果
7、抽象類裏能夠沒有抽象方法
8、若是一個類裏有抽象方法,那麼這個類只能是抽象類
9、抽象方法要被實現,因此不能是靜態的,也不能是私有的。
10、接口可繼承接口,並可多繼承接口,但類只能單根繼承。
(一).用戶控件和自定義控件概述 用戶控件(UserControl): 擴展名爲*.ascx,跟*.aspx在結構上類似,是指頁面中 加載的功能塊,只是用戶控件不能單獨做爲頁面運行,必須嵌入到*.aspx頁面或其它用 戶控件中使用. 自定義控件,跟HtmlControl或WebControl類似,編譯後能夠添加引用到工具欄裏 面,直接用鼠標拖動使用.
(1)初始化:在此階段中,主要完成兩項工做:1、初始化在傳入Web請求生命週期內所需的設置;2、跟蹤視圖狀態。首先,頁面框架經過默認方式引起Init事件,並調用OnInit()方法,控件開發人員能夠重寫該方法爲控件提供初始化邏輯。此後,頁面框架將調用TrackViewState方法來跟蹤視圖狀態。須要注意的是:多數狀況下,Control基類提供的TrackViewState方法實現已經足夠了。只有在控件定義了複雜屬性時,開發人員纔可能須要重寫TrackViewState方法。 (2)加載視圖狀態:此階段的主要任務是檢查ASP.NET服務器控件是否存在以及是否須要將其狀態恢復到它在處理以前的請求結束的狀態。所以該過程發生在頁面回傳過程當中,而不是初始化請求過程。在此階段,頁面框架將自動恢復ViewState字典。若是服務器控件不維持其狀態,或者它有能力經過默認方式保存其全部狀態而使用ViewState字典,那麼開發人員則沒必要實現任何邏輯。針對那些沒法在 ViewState字典中存儲的數據類型或者須要自定義狀態管理的狀況,開發人員能夠經過重寫LoadViewState方法來自定義狀態的恢復和管理。 (3)處理回發數據:若要使控件可以檢查客戶端發回的窗體數據,那麼必須實現System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。所以只有處理回發數據的控件參與此階段。 (4)加載:至此階段開始,控件樹中的ASP.NET服務器控件已建立並初始化、狀態已還原而且窗體控件反映了客戶端的數據。此時,開發人員能夠經過重寫OnLoad()方法來實現每一個請求共同的邏輯。 (5)發送回發更改通知:在此階段,ASP.NET服務器控件經過引起事件做爲一種信號,代表因爲回發而發生的控件狀態變化(所以該階段僅用於回發過程)。爲了創建這種信號,開發人員必須再次使用System.Web.UI.IPostBackDataHandler接口,並實現另外一方法- RaisePostBackChangedEvent()。其判斷過程爲:若是控件狀態因回發而更改,則LoadPostData()返回true;不然返回false。頁面框架跟蹤全部返回true的控件並在這些控件上調用RaisePostDataChangedEvent()。 (6)處理回發事件:該階段處理引發回發的客戶端事件。爲了便於將客戶端事件映射到服務器端事件上進行處理,開發人員在此階段能夠經過實現 System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法來實現該邏輯。由此途徑,服務器控件將成功捕獲回發的客戶端事件進行服務器端的相應處理。 (7)預呈現:該階段完成在生成控件以前所須要的任何工做。一般狀況下是經過重寫OnPreRender()方法完成該工做。須要注意的是:在該階段,能夠保存在預呈現階段對控件狀態所作的更改,而在呈現階段進行的更改則會丟失。 (8)保存狀態:若是ASP.NET服務器控件不維持狀態,或者它有能力經過默認方式保存其全部狀態而使用ViewState字典,那麼開發人員沒必要在該階段實現任何邏輯。由於這個保存狀態的過程是自動的。若是ASP.NET服務器控件須要自定義狀態保存,或者控件沒法在ViewState字典中存儲特殊的數據類型,則須要經過重寫SaveViewState()方法來實現狀態保存。 (9)呈現:表示向HTTP輸出流中寫入標記文本的過程。開發人員經過重寫Render()方法使其在輸出流上自定義標記文本。 (10)處置:在此階段中,經過重寫Dispose ()方法完成釋放對昂貴資源的引用,如數據庫連接等。 (11)卸載:完成的工做與"處置"階段相同,可是,開發人員一般在Dispose()方法中執行清除,而不處理Unload事件。
幾個重要概念:
1,對象。對象不只能表示具體的事物,還能表示抽象的規則,計劃或事件;
2,對象的狀態和行爲。對象使用數據值來描述狀態,使用改變對象狀態的方法來描述行爲,並將這兩種屬性有機結合,統一封裝在一塊兒;
3,類。對象的抽象是類,類的屬性石對象狀態的抽象,類的方法是對象行爲的抽象;
4,類的結構。is a 關係: 表示子類與父類的關係。has a 關係:表示組合關係。
5,消息和方法。消息是對象之間進行通訊的結構。發送一條消息至少要包括接收消息的對象名,發送給該對象的消息名(即對象名,方法名)。
三大特色:
1,封裝性。將相關的信息,操做與處理包含在一個對象中,也就是隱藏信息,是面向對象技術的核心,也是面向對象程序設計的基礎。
2,繼承。是指子類自動共享父類數據結構和方法的機制,這是類之間的一種特殊的關係。繼承性是面向對象技術的最重要的特色,在類層次中,子類只繼承一個父類的數據結構和方法,稱爲"單繼承",而子類繼承了多個父類的數據結構和方法,稱爲"多繼承"。Java語言中只容許單繼承,而且全部類都有且僅有一個最頂層類,及Object類。
3,多態性。是指相同的操做或方法做用於多種類型的對象上並得到不一樣的結果。多態性容許每一個對象以適合自身的方式去響應共同的消息,採用多態性能夠加強計算機程序的靈活性和可重用性。
1) 若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中不被改變。被聲明爲final的變量必須在new一個對象時初始化(即只能在聲明變量或構造器或代碼塊內初始化),而在之後的引用中只能讀取,不可修改。被聲明爲final的方法也一樣只能使用,不能覆蓋(重寫)。
2) 在異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹配的 catch 子句就會執行,而後控制就會進入 finally 塊(若是有的話)。
3) 方法名。Java 技術容許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的。注意:finalize不必定被jvm調用,只有當垃圾回收器要清除垃圾時才被調用。
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。
Nested Class (通常是C++的說法),Inner Class (通常是JAVA的說法)。Java內部類與C++嵌套類最大的不一樣就在因而否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 靜態內部類(Inner Class)意味着1建立一個static內部類的對象,不須要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
&是位運算符。&&是布爾邏輯運算符。
都屬於Map接口的類,實現了將唯一鍵映射到特定的值上。 HashMap 類沒有分類或者排序。它容許一個 null 鍵和多個 null 值。 Hashtable 相似於 HashMap,可是不容許 null 鍵和 null 值。它也比 HashMap 慢,由於它是同步的。 50,Collection 和 Collections的區別。 Collections是個java.util下的類,它包含有各類有關集合操做的靜態方法。 Collection是個java.util下的接口,它是各類集合結構的父接口。 51,何時用assert。 斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式爲 true。若是表達式計算爲 false,那麼系統會報告一個 Assertionerror。它用於調試目的: assert(a > 0); // throws an Assertionerror if a <= 0 斷言能夠有兩種形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 應該老是產生一個布爾值。 Expression2 能夠是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。 斷言在默認狀況下是禁用的。要在編譯時啓用斷言,須要使用 source 1.4 標記: javac -source 1.4 Test.java 要在運行時啓用斷言,可以使用 -enableassertions 或者 -ea 標記。 要在運行時選擇禁用斷言,可以使用 -da 或者 -disableassertions 標記。 要系統類中啓用斷言,可以使用 -esa 或者 -dsa 標記。還能夠在包的基礎上啓用或者禁用斷言。 能夠在預計正常狀況下不會到達的任何位置上放置斷言。斷言能夠用於驗證傳遞給私有方法的參數。不過,斷言不該該用於驗證傳遞給公有方法的參數,由於無論是否啓用了斷言,公有方法都必須檢查其參數。不過,既能夠在公有方法中,也能夠在非公有方法中利用斷言測試後置條件。另外,斷言不該該以任何方式改變程序的狀態。 52,GC是什麼? 爲何要有GC? (基礎)。 GC是垃圾收集器。Java 程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,能夠調用下面的方法之一: System.gc() Runtime.getRuntime().gc()
53,String s = new String("xyz");建立了幾個String Object? 兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。 54,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 55,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯? short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化爲short型。可修改成s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。 56,sleep() 和 wait() 有什麼區別? 搞線程的最愛 sleep()方法是使線程中止一段時間的方法。在sleep 時間間隔期滿後,線程不必定當即恢復執行。這是由於在那個時刻,其它線程可能正在運行並且沒有被調度爲放棄執行,除非(a)「醒來」的線程具備更高的優先級 (b)正在運行的線程由於其它緣由而阻塞。 wait()是線程交互時,若是線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。 57,Java有沒有goto? Goto—java中的保留字,如今沒有在java中使用。 58,數組有沒有length()這個方法? String有沒有length()這個方法? 數組沒有length()這個方法,有length的屬性。 String有有length()這個方法。 59,Overload和Override的區別。Overloaded的方法是否能夠改變返回值的類型? 方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)。Overloaded的方法是能夠改變返回值的類型。 60,Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別? Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。 equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
61,給我一個你最多見到的runtime exception。 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException 62,error和exception有什麼區別? error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。 exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。 63,List, Set, Map是否繼承自Collection接口? List,Set是 Map不是 64,abstract class和interface有什麼區別? 聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。 接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。 65,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized? 都不能
66,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)? 接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。 67,啓動一個線程是用run()仍是start()? 啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。 68,構造器Constructor是否可被override? 構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。 69,是否能夠繼承String類? String類是final類故不能夠繼承。 70,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法? 不能,一個對象的一個synchronized方法只能由一個線程訪問。 71,try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後? 會執行,在return前執行。 72,兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對? 不對,有相同的hash code。 73,當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞? 是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
74,swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上? switch(expr1)中,expr1是一個整數表達式。所以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能做用於swtich。
數據庫方面:
事務(Transaction)是訪問並可能更新數據庫中各類數據項的一個程序執行單元(unit)。事務一般由高級數據庫操縱語言或編程語言(如SQL,C++或Java)書寫的用戶程序的執行所引發,並用形如begin transaction和end transaction語句(或函數調用)來界定。事務由事務開始(begin transaction)和事務結束(end transaction)之間執行的全體操做組成。
遊標用於定位結果集的行,經過判斷全局變量@@FETCH_STATUS能夠判斷是否到了最後,一般此變量不等於0表示出錯或到了最後。
簡單而言,事前觸發主要是驗證一些條件或進行一些準備工做,在表保存以前就觸發,而過後觸發則是進行收尾工做,保證事務的完整性,在表通過修改之後才觸發。行級觸發器是對DML語句影響的每一個行執行一次,如UPDATE語句影響多行,就會對每行都激活一次觸發器。而語句級觸發器是對每一個DML語句執行一次,如INSERT語句在表中即便插入了100多行,表上的INSERT語句級觸發器也只會執行一次。
a 產生一個int數組,長度爲100,並向其中隨機插入1-100,而且不能重複。
int[] allNum=new int[100]; //存放這100個數
int len=0; //已經產生了多少個數
System.Random rd=new Random();
while(len<100)
{
int tempNum=rd.Next(100)+1;
while(true)
{
int j=0;
for(;j<len;j++)
{
if(allNum[j]==tempNum)
{
break;
}
}
if(j==len)
{
break;
}
else
{
tempNum=rd.Next(100)+1;
}
}
allNum[len++]=tempNum;
}
b 對上面生成的數組排序,須要支持升序、降序兩種順序
for(int i=0;i<99;i++)
for(int j=i+1;j<100;j++)
{
if(allNum[i]<allNum[j]) //升序是爲大於號,降序爲小於號
{
int t=allNum[i];
allNum[i]=allNum[j];
allNum[j]=t;
}
}
QueryString 傳遞一個或多個安全性要求不高或是結構簡單的數值。可是對於傳遞數組或對象的話,就不能用這個方法了
session(viewstate) 簡單,但易丟失 做用於用戶我的,過量的存儲會致使服務器內存資源的耗盡。
application 對象的做用範圍是整個全局,也就是說對全部用戶都有效。其經常使用的方法用Lock和UnLock
cookie 簡單,但可能不支持,可能被僞造 Cookie是存放在客戶端的,而session是存放在服務器端的。並且Cookie的使用要配合ASP.NET內置對象Request來使用
input ttype="hidden" 簡單,可能被僞造
url參數簡單,顯示於地址欄,長度有限
Server.Transfer 把流程從當前頁面引導到另外一個頁面中,新的頁面使用前一個頁面的應答流
數據庫穩定,安全,但性能相對弱
Page-Error事件
Server.GetLastError();
Server.ClearErroe();
設計時錯誤 運行時錯誤 異常
錯誤處理
良好的編程習慣
代碼測試
使用錯誤頁(<customErrors defaultRedirect="error.aspx">)
通常都是三層,表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL),這些東西不用深究,別爲了設計而設計就行。
分三層是爲了使項目架構體系更加清晰,並且項目參與人員的分工也能夠更加明確,也有利於項目後期維護,這些都是分層的優勢。
至於關係麼,表現層負責與用戶交互(數據交互),業務邏輯層就是表現層與數據訪問層的中間人了,指派數據訪問層進行表現層請求的邏輯性的業務處理,而數據訪問層就負責數據的直接操做了(通常只進行直接的數據操做,最好別在這層處理邏輯方面的處理,要否則與業務層交錯後後期的維護很頭疼的)。
三層其實說明白了挺簡單的,不過最早發起3層思想的人卻是挺牛的,這東西你不用考慮太多,考慮太多反而會陷進去誤區了,具體的設計仍是要結合相應的需求來,總之沒有最牛的設計,只有最合適的設計。
for的功能最強大;全部的while的能夠用他代替;
再說說do ....while吧;他就是一開始就執行一次;然而若是說一開始while和do...while都執行一次;也就是第一次條件都爲真的話;那他們沒啥區別:同樣;最後一個goto語句;這個不多用,由於他的可讀性太差了
(1)for (初值;條件;變化值)
而後是循環部分;
(2)if ()這裏的括號中只寫條件;
(3)while ()些條件,可用break;語句中斷循環,也可用continue中斷本次循環;
(4)do while ();是先循環第一次在開始判斷,符合條件再回到do語句.
不難看出for語句一次性把初值、條件、變化規律都寫在了一塊兒,簡單易懂,其餘的要在其餘地方定義和說明,if語句後面可跟else,中文裏是:若是……其餘的……這樣就能夠理解了,他能夠同時定義正面和反面;while是最基本的模式——選擇、循環模式.
積累的概念是相對的,A繼承自B,那麼B就是基類。若是照這個定義說,.NET裏的基類多到很難統計。若是說你的意思是全部類的最終基類,那麼答案是Object,這個也決定了.NET平臺的單根性質
這個自增量是數據庫對象的自增量,固然要從數據庫得,而後取到vb程序裏,而數據庫裏表示自增量當前值的@@identity這個全局變量:
子類從新定義父類的某一個方法時,必須把父類的方法定義爲virtual
在定義接口中不能有方法體,虛方法能夠。實現時,子類能夠不從新定義虛方法,但若是一個類繼承接口,那必須實現這個接口
override 與重載的區別。重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要
Override 是進行基類中函數的重寫。爲了適應須要。
.net錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch爲止。??
接口是負責功能的定義,項目中經過接口來規範類,操做類以及抽象類的概念!
而類是負責功能的具體實現!
在類中也有抽象類的定義,抽象類與接口的區別在於:
抽象類是一個不徹底的類,類裏面有抽象的方法,屬性,也能夠有具體的方法和屬性,須要進一步的專業化。
但接口是一個行爲的規範,裏面的全部東西都是抽象的!
一個類只能夠繼承一個基類也就是父類,但能夠實現多個接口
一個是隻能向前的只讀遊標,一個是內存中的表。
.DataReader
不能離線處理,且是隻讀的向前的,不過速度明顯會很快DataSet能夠存儲數據庫各類對象的,好比表觸發器等,而DataReader只能存儲遊標記錄DataSet能夠更新回原來的數據庫,
DataReader不行;DataSet能夠FORWORDPREVIUS
,而DataReader只能FW;DataReader相似一個只能向前的遊標記錄集DataSet叫數據集!是ADO.net相對與ADO實現斷開式數據庫鏈接性的主要體現!DateReader是一個客戶端的只向前遊標,二者的應用領域不一樣!讀取數據後!若是要進行比較頻繁的改動,能夠使用DataSet
,而且DataSet也支持串行化,可與xslt結合!進行web開發!DataReader則偏向於快速讀取數據!針對數據量比較大的數據可能應用的更加頻繁點!<[三]ADO.NET提供如下兩個對象,用於檢索關係數據並將其存儲在內存中:DataSet和DataReader。
DataSet提供一個內存中數據的關係表示形式,一整套包括一些表在內的數據(這些表包含數據、對數據進行排序並約束數據),以及表之間的關係。
DataReader提供一個來自數據庫的快速、僅向前、只讀數據流。
當使用DataSet時,常常會利用
DataAdapter(也多是CommandBuilder
)與數據源進行交互。當使用DataSet時,也能夠利用DataView對DataSet中的數據應用排序和篩選。也能夠從DataSet繼承,建立強類型DataSet
,用於將表、行和列做爲強類型對象屬性公開。
有三種方法
1.QueryString
例: default.aspx?id=1
2.FormsAuthentication
例:配置文件添加結點,利用FormsAuthentication 讀取
3.this.Server.Transfer
服務器重定向
//值類型和引用類型的區別,就在於當函數參數傳遞的時候.
//值類型是把本身的值複製一份傳遞給別的函數操做.不管複製的值怎麼被改變.其自身的值是不會改變的
//而引用類型是把本身的內存地址傳遞給別的函數操做.操做的就是引用類型值的自己.因此值被函數改變了.
//這就是傳值和傳址的區別
靜態變量(static)是相對自動變量(auto)等而言的,一旦聲明爲靜態變量,在編譯時刻開始永遠存在,不受做用域範圍約束,可是若是是局部靜態變量,則此靜態變量只能在局部做用域內使用,超出範圍不能使用,可是它確實還佔用內存,還存在.自動變量就是通常的變量,在C語言中auto關鍵字能夠省略.
get,post。get通常爲連接方式,post通常爲按鈕方式。
軟件開發通常分爲五個階段:
1.問題的定義及規劃
此階段是軟件開發與需求放共同討論,主要肯定軟件的開發目標及其可行性。
2.需求分析在肯定軟件開發可行性的狀況下,對軟件須要實現的各個功能進行詳細需求分析。需求分析階段是一個很重要的階段,這一階段作的好,將爲整個軟件項目的開發打下良好的基礎。「惟一不變的是變化自己」,一樣軟件需求也是在軟件愛你開發過程當中不斷變化和深刻的,所以,咱們必須定製需求變動計劃來應付這種變化,以保護整個項目的正常進行。
3.軟件設計此階段中偶要根據需求分析的結果,對整個軟件系統進行設計,如系統框架設計、數據庫設計等。軟件設計通常分爲整體設計和詳細設計。還的軟件設計將爲軟件程序編寫打下良好的基礎。
4.程序編碼此階段是將軟件設計的結果轉化爲計算機可運行的程序代碼。在程序編碼中一定要制定統1、符合標準的編寫規範。以保證程序的可讀性、易維護性。提升程序的運行效率。
5.軟件測試在軟件設計完成以後要進行嚴密的測試,一發現軟件在整個軟件設計過程當中存在的問題並加以糾正。整個測試階段分爲單元測試、組裝測試、系統測試三個階段進行。測試方法主要有白盒測試和黑盒測試。
以上就是軟件開發過程的五個階段,可是有的時候在軟件愛你開發過程當中並非必須按照這個過程進行的。
1.原型模式(Prototype Pattern):用原型實例指定建立對象的種類,而且經過拷貝這些原型建立新的對象。
使用場景:一個對象須要提供給其餘對象訪問,並且各個調用者可能都須要修改其值時,能夠考慮使用原型模式拷貝多個對象供調用者使用
2.組合模式(Composite Pattern)也叫合成模式:將對象組合成樹形結構以表示"部分-總體"的層次結構,使得用戶對單個對象和組合對象的使用具備一致性。
使用場景:組合模式在項目中處處都有,好比如今的頁面結構通常都是上下結構,上面放系統的Logo,下邊分爲兩部分:左邊是導航菜單,右邊是展現區,左邊的導航菜單通常都是樹形的結構,比較清晰,有很是多的JavaScript源碼實現了相似的樹形菜單,
WebService是一個SOA(面向服務的編程)的架構,它是不依賴於語言,不依賴於平臺,能夠實現不一樣的語言間的相互調用,經過Internet進行基於Http協議的網絡應用間的交互。 WebService實現不一樣語言間的調用,是依託於一個標準,webservice是須要遵照WSDL(web服務定義語言)/SOAP(簡單請求協議)規範的。 WebService=WSDL+SOAP+UDDI(webservice的註冊) Soap是由Soap的part和0個或多個附件組成,通常只有part,在part中有Envelope和Body。 Web Service是經過提供標準的協議和接口,可讓不一樣的程序集成的一種SOA架構。 Web Service的優勢 (1) 可讓異構的程序相互訪問(跨平臺)(2) 鬆耦合 (3) 基於標準協議(通用語言,容許其餘程序訪問) Web Service的基本原理 (1) Service Provider採用WSDL描述服務 (2) Service Provider 採用UDDI將服務的描述文件發佈到UDDI服務器(Register server) (3) Service Requestor在UDDI服務器上查詢並 獲取WSDL文件 (4) Service requestor將請求綁定到SOAP,並訪問相應的服務。
用URL編碼,經過QueryString傳遞,用EnCode編碼 用DeCode解碼。
下面代碼是在服務端構建的url,因此能夠使用Server對象:
string urlFmt="...?a={0}";
url = string.Format(urlFmt, Server.UrlEncoding("測試"))。
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 ;
}
}
int [] array = new int
;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
爲應用程序建立一個 SessionCache 服務實例。 使用 cf create-service SessionCache free <service instance name> 建立服務實例,其中 free 是服務計劃名稱,<service instance name> 是服務實例的唯一名稱。咱們使用scsSampleSessionServiceDWDemo001 做爲服務實例名稱,以與服務器 xml 文件中的配置相匹配。
部署應用程序且服務實例可用後,使用 cf bind-service <app name in Step c> <service instance name in Step d> 將它們綁定在一塊兒。
綁定完成後,它會要求您再次推送該應用程序。再次執行步驟 C 中的命令。有關更多信息,請參閱 安裝 cf 工具。
測試示例應用程序。登陸到 Bluemix。您應在儀表板上看到已部署的示例應用程序。單擊應用程序圖標中間的連接訪問該應用程序,並檢查日誌中的錯誤。嘗試使用 Retrieve Session Data 按鈕獲取會話數據。
檢查服務狀態和空間使用狀況。獲取會話數據後,返回到 Bluemix 儀表板。在導航面板中,單擊 Apps 並選擇部署的示例應用程序。在 Services 部分中,單擊服務中間位置的連接調出 Service Status 頁面。查看 Space Used、Throughput 等信息。
可選:刪除示例應用程序和服務。在 Bluemix 中,單擊屏幕頂部的 Dashboard。單擊應用程序框右上角的設置圖標,選擇 Stop App。單擊應用程序框右上角的設置圖標,選擇 Delete App。在窗口中,在 SERVICES 和 ROUTES 選項卡中勾選您的應用程序和服務的方框。單擊OK 刪除示例應用程序和服務。
答:1). using指令。using + 命名空間名字,這樣能夠在程序中直接用命令空間中的類型,而沒必要指定類型的詳細命名空間。
2).using別名。using + 別名 = 包括詳細命名空間信息的具體的類型。當一個cs引用多個命名空間時,而有相同的類型時能夠這樣作。好比namespace1 和namespace2下面都有myClass類時,能夠using class1 = namespace1.myClass;using class2 = namespace2.myClass。
3).using語句,定義一個範圍,在範圍結束時處理對象。
(1)new 運算符
用於建立對象和調用構造函數。
(2)new 修飾符
用於向基類成員隱藏繼承成員。
(3)new 約束
用於在泛型聲明中約束可能用做類型參數的參數的類型。
using System.Text;
StringBuilder sb = new StringBuilder(0, 10000);
string strABC = 「a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z」;
string[] ABC = strABC.Split(‘,’);
int len = ABC.Length;
Random rd = new Random();
for (int i = 0; i < 10000; i++)
{
sb.Append(ABC[rd.Next(len)]);
}
答:string[] ss=Enum.GetNames(typeof(Color));
byte[] bb=Enum.GetValues(typeof(Color));
答:設計模式是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可 靠性。設計模式令人們能夠更加簡單方便地複用成功的設計和體系結構。將已證明的技術表述成設計模式也會使新系統開發者更加容易理解其設計思路。
答:parent表(字段:pid,pname),child表(字段:cid,cname,pid)
答:利用sql關鍵字對網站進行攻擊。過濾關鍵字’等
1)數組在內存中是逐個存放的,也就是說假若數組的第一個元素在地址A,則數組第二個元素就在地址A+1。
而鏈表則不是,鏈表每一個節點沒有相對固定的位置關係。某個節點在地址A其後的節點不必定是A+1,而在內存的其餘空閒區域,呈現一種隨機的狀態。
2)數組一旦顯式的被申明後,其大小就固定了,不能動態進行擴充。而鏈表則能夠,能夠動態生成節點而且添加到已有的鏈表後面。
3)鏈表靈活,可是空間和時間額外耗費較大;數組大小固定,元素位置固定,可是操做不靈活,且容易浪費空間,可是時間耗費較小,尤爲是元素變化不大的時候效率很高。雙向鏈表比單向的更靈活,可是空間耗費也更大
。。。。。
鏈表的特性是在中間任意位置添加刪除元素的都很是的快,不須要移動其它的元素。
鏈表顧名思義,要把各個元素連接起來纔算撒。
一般鏈表每個元素都要保存一個指向下一個元素的指針(單鏈表)。
雙鏈表的化每一個元素即要保存到下一個元素的指針,還要保存一個上一個元素的指針。
循環鏈表則把最後一個元素中保存下一個元素指針指向第一個元素。
數組是一組具備相同類型和名稱的變量的集合。這些變量稱爲數組的元素,每一個數組元素都有一個編號,
這個編號叫作下標,咱們能夠經過下標來區別這些元素。數組元素的個數有時也稱之爲數組的長度。
服務器斷能夠部署到IIS上並配置好配置文件
C++中,實現多態有如下方法:虛函數,抽象類,重載,覆蓋,模版。 多態(Polymorphism)按字面的意思就是「多種狀態」。在面向 對象語言中,接口的多種不一樣的實現方式即爲多態。引用Charlie Calverts對多態的描述——多態性是容許你將父對象設置成爲和一個或更多的他的子對象相等的技術,賦值以後,父對象就能夠根據當前賦值給它的。
能夠被重寫
必須被重寫
數據庫知識題
存儲過程是一個預編譯的SQL語句,優勢是容許模塊化的設計,就是說只需建立一次,之後在該程序中就能夠調用屢次。若是某次操做須要執行屢次SQL,使用存儲過程比單純SQL語句執行要快。能夠用一個命令對象來調用存儲過程。
通常認爲有兩種 彙集,非彙集 彙集:至關與電話薄的查詢。數據的位置和和其物理位置相同 非:至關與目錄。可與物理位置不一樣。 索引是用來加快查詢的,在查詢數據的時候能夠不用找數據而先找索引,就像你翻書,明顯找目錄會快不少。
就至關因而一個事件的觸發裝置, 當知足了觸發事件的條件後進行相應的處理操做, 例如能夠設置當表中增長或刪除了記錄後,輸出來消息進行通知, 這樣就能夠在這個表上設置一個觸發器,觸發條件爲增長或刪除了記錄, 觸發的事件是 進行通知消息的輸出,
WebService是一個SOA(面向服務的編程)的架構,它是不依賴於語言,不依賴於平臺,能夠實現不一樣的語言間的相互調用,經過Internet進行基於Http協議的網絡應用間的交互。 WebService實現不一樣語言間的調用,是依託於一個標準,webservice是須要遵照WSDL(web服務定義語言)/SOAP(簡單請求協議)規範的。 WebService=WSDL+SOAP+UDDI(webservice的註冊) Soap是由Soap的part和0個或多個附件組成,通常只有part,在part中有Envelope和Body。 Web Service是經過提供標準的協議和接口,可讓不一樣的程序集成的一種SOA架構。 Web Service的優勢 (1) 可讓異構的程序相互訪問(跨平臺)(2) 鬆耦合 (3) 基於標準協議(通用語言,容許其餘程序訪問) Web Service的基本原理 (1) Service Provider採用WSDL描述服務 (2) Service Provider 採用UDDI將服務的描述文件發佈到UDDI服務器(Register server) (3) Service Requestor在UDDI服務器上查詢並 獲取WSDL文件 (4) Service requestor將請求綁定到SOAP,並訪問相應的服務。
xml是一種語言。這種語言編寫的文件通常也是以xml結尾。你能夠用記事本打開查看源碼,或者用瀏覽器打開查看。它的內容都是由標籤組成的,很是有規律。由於這種規律,才能快速的存取。通常用來存儲配置信息,也有當數據庫來用的。
java編程對於Socket之間的通訊過程以下:
服務端往Socket的輸出流裏面寫東西,客戶端就能夠經過Socket的輸入流 讀取對應的內容。Socket與Socket之間是雙向連通的,因此客戶端也能夠往對應的Socket輸出流裏面寫東西,而後服務端對應的Socket的 輸入流就能夠讀出對應的內容。下面來看一些服務端與客戶端通訊的例子:
public class Server { public static void main(String args[]) throws IOException { //爲了簡單起見,全部的異常信息都往外拋 int port = 8899; //定義一個ServerSocket監聽在端口8899上 ServerSocket server = new ServerSocket(port); //server嘗試接收其餘Socket的鏈接請求,server的accept方法是阻塞式的 Socket socket = server.accept(); //跟客戶端創建好鏈接以後,咱們就能夠獲取socket的InputStream,並從中讀取客戶端發過來的信息了。 Reader reader = new InputStreamReader(socket.getInputStream()); char chars[] = new char[64]; int len; StringBuilder sb = new StringBuilder(); while ((len=reader.read(chars)) != -1) { sb.append(new String(chars, 0, len)); } System.out.println("from client: " + sb); reader.close(); socket.close(); server.close(); } }
客戶端代碼 Java代碼 public class Client { public static void main(String args[]) throws Exception { //爲了簡單起見,全部的異常都直接往外拋 String host = "127.0.0.1"; //要鏈接的服務端IP地址 int port = 8899; //要鏈接的服務端對應的監聽端口 //與服務端創建鏈接 Socket client = new Socket(host, port); //創建鏈接後就能夠往服務端寫數據了 Writer writer = new OutputStreamWriter(client.getOutputStream()); writer.write("Hello Server."); writer.flush();//寫完後要記得flush writer.close(); client.close(); } }
請你們指出個人錯誤
127. C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏?
一個是屬性,用於存取類的字段,一個是特性,用來標識類,方法等的附加性質
128. 講一講你理解的web service,在dot net framework中,怎麼很好的結合xml?(講概念就好了)
相同點:都是C系的,都是面向對象
不一樣點:Java,C#都是創建在虛擬機機制上,而C++不是
能夠
觸發器,性能好,事務性
新增dataset等,不須要隨時保持鏈接,性能提升
asp解釋形,aspx編譯型,性能提升,有利於保護源碼
委託是一種安全的函數指針,事件是一種消息機制
不會
實現一個接口
JS代碼
xmlhttp能夠主動獲取遠端web代碼,相似HttpWebRequest
接口用於規範,抽象類用於共性。
統一建模語言
封裝,基層,多態
數據庫方面:
存儲過程是編譯好的存儲在數據庫的操做,函數不用說了。。。
具備原子性特色
指示當前記錄的位置,檢查NULL
一個是操做前,一個是操做後
a 產生一個int數組,長度爲100,並向其中隨機插入1-100,而且不能重複。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
b 對上面生成的數組排序,須要支持升序、降序兩種順序
ArrayList自己就能排序
2.請說明在.net中經常使用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
session(viewstate) 簡單,但易丟失
application 全局
cookie 簡單,但可能不支持,可能被僞造
input ttype="hidden" 簡單,可能被僞造
url參數 簡單,顯示於地址欄,長度有限
數據庫 穩定,安全,但性能相對弱
try catch final
具備本身的key,能夠在GAC爲公用
5.請列出c#中幾種循環的方法,並指出他們的不一樣
for wile foreach
全局程序集緩存
select @@id... 什麼的,忘了
您在什麼狀況下會用到虛方法?它與接口有什麼不一樣?
前面已說
11.怎樣理解靜態變量?
全部實例公用一個的變量
12.向服務器發送請求有幾種方式?
get post
13.DataReader與Dataset有什麼區別?
一個是隻能向前的只讀遊標,一個是內存中的表
14.若是在一個B/S結構的系統中須要傳遞變量值,可是又不能使用Session、Cookie、Application,您有幾種方法進行處理?
input type=""
url
數據庫
15.用.net作B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及爲何要這樣分層?
三層,表現,邏輯,數據, 安全性,維護性
16.軟件開發過程通常有幾個階段?每一個階段的做用?
需求分析,架構設計,代碼編寫,QA,部署
17.請列舉一些您用到過的設計模式以及在什麼狀況下使用該模式?
著名的singleton
18.您對編程的興趣如何?工做中遇到不懂的問題是怎樣去解決的?您通常怎樣去提升本身的編程水平?
19.您離職的緣由是什麼?
20.經過超連接怎樣傳遞中文參數?
URLEncode URLDecode
21.請編程遍歷頁面上全部TextBox控件並給它賦值爲string.Empty?
foreach
22.有哪幾種方法能夠實現一個類存取另一個類的成員函數及屬性,並請舉列來加以說明和分析.
同一個名稱控件直接,或者反射
23.若是需記錄類的實例個數,該如何實現,請寫一個簡單的類於以證實.
const static int classNum=0;
classNum++;
24.A類是B類的基類,而且都有本身的構造,析構函數,請舉例證實B類從實例化到消亡過程當中構造,析構函數的執行過程.
構造先父後子,析夠反之
25.須要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,若是字符串中間還有連續空格的話,僅保留一個空格,即容許字符串中間有多個空格,但連續的空格數不可超過一個.
string inputStr=" xx xx ";
inputStr=Regex.Replace(inputStr.Trim()," *"," " ;
26在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?
using 指令 和語句 new 建立實例 new 隱藏基類中方法
using 引入名稱空間或者使用非託管資源
new 新建實例或者隱藏父類方法
28.一個長度爲10000的字符串,經過隨機從a-z中抽取10000個字符組成。請用c#語言編寫主要程序來實現。
和前面那個差很少,同樣
29.對於這樣的一個枚舉類型:
enum Color:byte
{
Red,
Green,
Blue,
Orange
}
string[] ss=Enum.GetNames(typeof(Color));
byte[] bb=Enum.GetValues(typeof(Color));
試寫一段程序顯示出枚舉類型中定義的全部符號名稱以及它們對應的數值。
foreach
30.什麼叫作SQL注入,如何防止?請舉例說明。
利用sql關鍵字對網站進行攻擊。過濾關鍵字'等
31.下面這段代碼輸出什麼?爲何?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal" ;
else
Console.WriteLine("Not Equal" ;
//不相等,由於比較的是對象
32.寫一個實現對一段字符串翻轉的方法,附加一些條件,如其中包括「,」、「.」,對其設計測試用例 。
inputStr=inputStr.ToCharArray().Reverse().ToString();
34.對一支紙杯設計測試用例(能夠是廣義的杯,不必定是某一支特定功能的杯)
太寬了。。。
36.用Singleton如何寫設計模式
static屬性裏面new ,構造函數private
37.C#中的垃圾回收機制是怎樣的?
三個generation,當每一個generation內存滿了的時候檢查引用,無引用就回收內存
38.什麼是Application Pool?
Web應用,相似Thread Pool,提升併發性能
39.鏈表和數組的區別,各有什麼優缺點.
一個能夠動態增加,一個固定(VB中能夠Redim),性能數組教好
41.什麼是友元函數?
friendly聲明,能夠訪問protect級別方法
42.什麼是虛函數?
能夠被重寫
43.什麼是抽象函數?
必須被重寫
44.什麼是內存泄漏,怎樣最簡單的方法判斷被存泄漏 ?
C++,C中忘了釋放內存,內存不會再次分配
45.使用什麼工具來調用存儲過程
任何一種語言
46.SQL Server的兩種索引是何形式?索引的做用?索引的優缺點?
cluster和非cluster,加速查找,佔用額外控件,維護索引耗費時間
47.觸發器的做用
保證數據庫操做變動能接到通知
48.什麼是Web Service?
使應用程序在整個網上能夠被調用
50.什麼是XML?
可擴展標記語言,能夠作配置文件,能夠傳輸數據,能夠存儲數據
51.Socket怎麼實現?
這個不知道怎麼說了。。。
52. 什麼是C#?
C#(發音」C sharp」)是一種簡單、有別於傳統的、面向對象、類型安全的編程語言。C和C++程序員很快就會熟悉它。C#中結合了高生產率的快速應用開發(RAD)語言。
53. C#的有哪些註釋類型?
C#中有三種註釋類型。
單行(//)
多行(/* */)
Page/XML 註釋(///)。
54. C#.NET中使用的命名空間有哪些?
命名空間是類型的邏輯分組。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
55. C#有哪些特色?
C#有如下特色:
簡單
類型安全
靈活
面向對象
兼容
持久化
互操做性
有別於傳統
56. 繼承有哪些不一樣的類別?
在面向對象編程中繼承的四種類型:
單繼承:包括一個基類和一個派生類。
多層繼承(Hierarchical inheritance) :包括一個基類和繼承自同一個基類的派生類。
多級繼承(Multilevel inheritance):包括從一個派生類派生出來的類。
多重繼承(Multiple inheritance):包括多個基類和一個派生類。
57. 面向對象編程的基本概念是什麼?
有必要理解一些在面向對象編程中普遍使用的概念。它們包括:
對象
類
數據抽象和封裝
繼承
多態性
動態綁定
信息傳遞。
60. Define scope?定義做用域?
做用域指的是代碼中一個變量能夠被訪問的區域。
61. public、static和void之間的區別是什麼?
public:關鍵字public是訪問修飾符,用來告訴C#編譯器主(Main)方法能夠被任何人調用。
static:關鍵字static代表主(Main)方法是一個全局方法,不須要穿件類實例便可訪問。編譯器儲存該方法的地址做爲切入點,並利用這個信息在任何對象建立以前開始執行它。
void:關鍵字void是一個類型修飾符代表主(Main)方法不返回任何值。
62. C#中的修飾符有哪些?
Abstract
Sealed
Virtual
Const
Event
Extern
Override
Readonly
Static
New
63. C#中訪問修飾符的種類有哪些?
C#中的訪問修飾符是:
public
protect
private
internal
internal protect
65. 對象是什麼?
對象是類的實例。對象的建立使用new操做。一個類在內存中建立一個對象,將包含特定對象的值和行爲(或者方法)的信息。
66. C#中有哪些類型的數組?
一維數組(Single-Dimensional)
多維數組(Multidimensional)
交錯數組(Jagged arrays)。
67. 對象和實例之間的區別是什麼?
用戶定義的類型的實例稱爲一個對象。咱們能夠從一個類實例化不少對象。
對象是類的實例。
68. Define destructors?定義析構函數?
當類對象超出做用域或者被明確刪除的時候,析構函數被調用。析構函數,顧名思義是用來銷燬由構造函數建立的對象的。正如構造函數,析構函數是一個類成員方法,方法名和類名相同,只是由波浪號開頭。
69. 枚舉數據類型怎麼用?
枚舉類型是另外一種用戶定義類型,它提供了一種鏈接名字爲數字的方式,從而提升了代碼的可理解性。enum關鍵字自動地枚舉一組詞,賦予它們的值爲0,1,2並以此類推。
70. 定義構造函數?
構造函數是和它的類同名的成員方法。每當建立其關聯的類的對象時構造函數都會被調用。它之因此被稱爲構造函數是由於它構造了類的數據成員的值。
71. 什麼是封裝?
包裝數據和功能成爲一個單元(稱爲類)就被稱爲封裝。封裝包含而且隱藏對象信息,例如內部數據結構和代碼。
72. C#支持多重繼承嗎?
不支持,它不可能。支持多級繼承。
73. 什麼是ENUM?
Enum用於定義常量。
74. 數據集是什麼?
數據集(DataSet)是從任何數據源載入數據的內存表示。
75. private和public關鍵字的區別是什麼?
Private:關鍵字private是默認訪問級別,而且在全部其餘訪問級別中是最嚴格的。它給予一個類型或者類型成員最小的權限。私有成員僅僅在聲明其的類體中能夠被訪問。
Public:關鍵字public是全部訪問級別中最自由地,沒有任何訪問限制。公共成員的訪問不只能夠來自外部,也能夠來自內部,而且能夠自由訪問定義在類體內或者體外的任何成員。
76. 定義多態性?
多態性意味着一個名字,多種形式。它使咱們在一個程序中能夠定義一個以上相同名字的方法。它讓咱們重載操做以便這樣的操做能夠對不一樣的實例表現不一樣的行爲。
77. 什麼是交錯數組?
交錯數組是元素爲數組的數組。
交錯數組元素的維度和大小能夠不一樣。
交錯數組有時稱爲「數組的數組」。
78. 什麼是抽象基類?
抽象類是被設計爲專門用於做爲基類的類。抽象類至少還有一個純虛方法。
81. ref和out參數之間的區別是什麼?
傳遞給ref參數的參數必須先初始化。與此相比,對out參數來講,在參數傳遞給out參數以前不須要顯示初始化。
82. C#中using語句怎麼用?
using語句一般是獲取資源,執行語句,而後釋放該資源。
83. 什麼是序列化?
序列化(Serialization)是將對象轉換爲字節流的過程。
反序列化(De-serialization)是從字節流建立對象這樣相反的過程。
序列化/反序列化經常使用於傳遞對象。
84. 結構和類之間有什麼區別?
結構是值類型,類是引用類型。
結構不能有構造函數和析構函數。
類能夠同時有構造函數和析構函數。
結構不支持繼承,而類支持繼承。
85. 類和接口之間有什麼區別?
類(Class)是對象的邏輯表示。它是數據集合和相關子過程的定義。
接口(Interface)也是一個類,包含沒有任何方法體定義的方法。類不支持多重繼承,可是接口支持。
87. 什麼是認證與受權?
認證是識別用戶的過程。認證是以證書(用戶名和密碼)來識別/驗證用戶。
受權在認證以後執行。受權是一個基於這些用戶身份授予訪問權限的過程。
受權容許用戶對特定資源的訪問。
88. 什麼是基類?
類聲明能夠經過類名加一個冒號和基類名來指定基類。省略基類說明等同於從object類派生。
89. 「this」能夠在靜態方法中用嗎?
不,‘This’不能在靜態方法中使用。僅僅只有靜態變量/方法能夠在靜態方法中使用。
90. constants、readonly和static之間的區別是什麼?
Constants: 值不能變。
Read-only: 值在類的構造函數中僅僅初始化一次。
Static: 值能夠被初始化一次。
91. C#中支持哪些語句類型?
C#支持的幾種不一樣的語句類型是
塊語句
聲明語句
表達式語句
選擇語句
迭代語句
跳轉語句
異常處理語句
檢查和未檢查
Lock語句
92. 什麼是接口類?
它是一個抽象類,全部公共抽象方法必需要在其繼承類中實現。
94. 關鍵字string和System.String類之間有什麼區別?
關鍵字string是System.String類的別名。因此,System.String和關鍵字string是同樣的,你能夠使用任何你喜歡的命名約定。String類提供了許多方法用於安全建立,操做和比較字符串。
95. C#中提供的兩種數據類型是什麼?
值類型
引用類型
96. 有哪些緩存的種類?
有三種類型的緩存:
輸出緩存(Output Caching):存儲asp.net頁面的應答信息。
片斷緩存(Fragment Caching):僅緩存/存儲部分頁面內容(用戶控制)。
數據緩存(Data Caching):爲了性能經過編程的方式來緩存對象。
97. 自定義控件和用戶控件之間的區別是什麼?
自定義控件是編譯後的代碼(Dlls),容易使用,建立困難,能夠放在工具箱。拖拉使用的控件。
屬性能夠直觀地在設計時指定。能夠被多個應用程序使用(若是共享Dlls),即便是私有的也能拷貝到web應用程序的bin目錄,添加引用和使用。一般是用來爲獨立的消費應用程序提供公用功能。
用戶控件和ASP的include文件,輕鬆建立,不能放置在箱中來拖拉放置它。用戶控件在單個應用程序文件之間共享。
98. 什麼是方法?
方法是由對象或者類執行來實現計算或者操做的成員。靜態方法經過類訪問。實例方法經過類的實例來訪問。
99. 什麼是域?
域是類或者類的實例相關的變量。
100. 什麼是事件?
事件是使一個類或對象可以提供通知的成員。事件聲明像域聲明同樣,除了聲明包含event關鍵字而且類型必須爲委託類型。
101.什麼是文本和它們的類型?
文本是程序分配給變量的值常量。C#支持的幾種文本類型是
整數(Integer literals)
實數(Real literals)
布爾值(Boolean literals)
單字符(Single character literals)
字符串(String literals)
反斜線(Backslash character literals)
103. C#有什麼特性?
C#是一個簡單而強大的編程語言,用於編寫企業版的應用程序。
它是C++和VB的混合體。它保留了許多C++特性,如語句,表達式和運算符並結合了VB的生產力。
C#幫助開發者輕易地構建網絡服務,可以經過任何語言,任何平臺來訪問Internet。
C#幫助開發者用更少的代碼完成開發,從而在代碼中錯誤更少。
C#引入了至關大的改進和創新,如類型安全,版本控制,事件和垃圾收集這些領域。
104. 錯誤的類型是什麼?
語法錯誤(Syntax error)
邏輯錯誤(Logic error)
運行時錯誤(Runtime error)
105. break和continue語句之間有什麼區別?
break語句是用來終止當前封閉循環或者它所在的條件語句的。咱們已經使用break語句跳出switch語句。
continue語句是用來改變執行順序的。和break語句那樣跳出循環相反,continue語句中止當前迭代而且只將控制返回到循環頂部。
106. 定義命名空間?
命名空間被稱爲容器,用來組織分層的.NET類。
107. 什麼是代碼組?
代碼組是一組共享安全上下文的套件。
108. C#中什麼是密封類?
sealed修飾符用來阻止從一個類派生。若是一個密封類被指定爲另外一個類的基類時會發生編譯時錯誤。
109. 靜態方法和實例方法的區別是什麼?
以static修飾符聲明的方法是靜態方法。靜態方法不操做具體的實例,而且只能被靜態成員訪問。
沒有以static修飾符聲明的方法是實例方法。實例方法操做一個具體的實例而且能夠被靜態和實例成員訪問。在其上調用實例方法的實例能夠像這樣顯示訪問。在靜態方法中這麼調用是錯誤的。
110. C#中有哪些變量的類型?
C#中不一樣的變量類型是:
靜態變量(static variables)
實例變量(instance variable)
值參數(value parameters)
引用參數(reference parameters)
數組元素(array elements)
輸出參數(output parameters)
局部變量(local variables)
111. 方法重載是什麼意思?
方法重載容許在同一個類中的多個方法有相同的名字,只要它們具備獨特的簽名。當編譯一個重載方法的調用時,編譯器使用重載決策決定具體調用的方法。
112. 什麼是參數?
參數是用來傳遞值或者變量引用給方法的。方法的參數從被調用方法時指定的參數獲得它們實際的值。有四種參數:值參數,引用參數,輸出參數和參數數組。
113. C#是面向對象的語言嗎?
是的,C#和傳統的Java及C++同樣是面向對象的語言。
114. Array和Arraylist之間的區別是什麼?
數組是相同類型的集合。數組大小在它聲明的時候就固定了。鏈表和數組類似,但它沒有固定的大小。
115. C#中有什麼特殊的運算符?
C#支持一下特殊運算符。
is (關係運算符)
as (關係運算符)
typeof (類型運算符)
sizeof (大小運算符,用於獲取非託管類的大小)
new (對象運算符)
.dot (成員訪問運算符)
checked (溢出檢查)
unchecked?(防止溢出檢查)
116. C#中運算符的含義是什麼?
運算符是界定了對類實例應用特定的運算表達式內涵的成員。能夠定義三種類型的運算符:一元運算符,二元運算符和轉換運算符。全部的運算符必須聲明爲public和static的。
117. 什麼是類型參數化?
類型參數化是一個類型在另外一個值或者類型之上參數化。
119. abstract關鍵字怎麼用?
修飾符abstract是用於類的關鍵字,以代表這個類自己不能直接有實例或者對象,而且對於其餘類來講它只能是一個「基類」。
120. goto語句怎麼用?
goto語句仍然包含在C#語言中。這個goto能夠用來從一個循環內部跳轉到外部。可是從循環外部跳入循環內是不容許的。
121. 控制檯應用程序和窗口應用程序有什麼區別?
控制檯應用程序,設計用來在沒有用戶界面的命令行中運行。
窗口應用程序,設計用來經過用戶界面在用戶桌面執行。
122. return語句怎麼用?
return語句與程序 (方法或者函數)相關。在執行return語句的時候,系統將控制權從被調用程序交給調用程序。return語句用於兩種目的:
當即返回當前執行的代碼的調用者
返回給當前執行的代碼的調用者一些值。
123. Array和LinkedList之間的區別是什麼?
數組是不關心彼此元素位置的簡單數字序列。他們之間的位置彼此獨立。增長,刪除或者修改任何數組元素都是很是容易的。相對於數組,鏈表是一個複雜的數字序列。
124. C#有throws子句嗎?
不,不像Java,C#不須要開發者指定方法能夠拋出的異常。
125. C#支持可變數目的參數嗎?
是的,使用params關鍵字。該參數指定爲特定類型的參數列表。
126. 能夠重寫私有虛方法嗎?
不能夠,私有方法不能在類外訪問。
127. 什麼是多播委託?
每一個委託對象保持對一個單獨方法的引用。可是,一個委託對象保持對多個方法的引用並調用它們是可能的。這樣的委託對象成爲多播委託或者組合委託。
128. 什麼是C#獨有的特性?
XML文檔.
129. 在C#中使用異常是推薦的嗎?
是的,在.NET框架中異常是推薦的錯誤處理機制。
130. 在switch語句中break語句是作什麼的?
break語句終結它所在的循環。它也改變了程序執行的流程。
在switch語句中,break語句用在一個case語句的結尾處。在C#中break語句是強制性的,避免了一個case語句流向另外一個case語句。
131. Is C# object oriented?C#是面向對象的嗎?
是的,C#和傳統的Java及C++同樣是面向對象的語言。
132. 什麼是智能導航?
由於服務端驗證和頁面被刷新致使頁面刷新時,光標位置保持不變。
134. C#有throws子句嗎?
不,不像Java,C#不須要(甚至不容許)開發者指定方法能夠拋出的異常。
135. 方法能夠重載的不一樣方式是什麼?
不一樣的參數類型,不一樣的參數個數,不一樣的參數順序。
136. 事件有返回值嗎?
沒有,事件沒有返回類型。
137. 事件是什麼?
事件是一個基於另外一個程序方法執行的動做。
事件是被對象或者類使用來通知其餘對象發生的事件的委託類型類成員。
事件能夠經過event關鍵字來聲明。
138. 什麼是標識符?
標識符無他,它是用來在程序中惟一識別各類實體的名稱。
139. C#中有哪些不一樣的文本類型?
布爾值: True和False是Boolean類型,分別映射到真和假的狀態。
整數:用於編寫類型Int,uInt,long和ulong的值。
實數:用於編寫類型float, double和decimal的值。
字符:表明單字符,一般由有引號的字符組成,如‘a’。
字符串: C#支持兩種類型的字符串,規則字符串和原義字符串。規則字符串由0個或多個括在雙引號中的字符組成,如「116110″。原義字符串由@字符後跟帶雙引號的字符組成,如@」hello」。
Null: 表明null類型。
140. 什麼是數據封裝?
數據封裝,也被稱爲數據隱藏,它是類的實現細節對保持對用戶隱匿的機制。用戶只能經過執行稱爲方法的特殊函數來對隱藏了成員的類執行一組有限的操做。
142. 子程序和函數的主要區別是什麼?
子程序沒有返回值,而函數有。
143. C#和C++的區別是什麼?
C#不支持#include語句。它只用using語句。
C#中,類定義在最後不使用分號。
C#不支持多重繼承。
數據類型的顯示轉換在C#中比C++中安全不少。
C#中switch也可用於字符串值。
命令行參數數組的行爲在C#中和C++中不同。
144. 什麼是嵌套類?
嵌套類是類中的類。
嵌套類是聲明發生在另外一個類或者接口裏面的任何類。
145. 能夠給靜態構造函數參數嗎?
不能夠,靜態構造函數不能夠有參數。
146. C#中,字符串是值類型仍是引用類型?
字符串是對象(引用類型)。
147. C#提供拷貝構造函數嗎?
不,C#不提供拷貝構造函數。
148. 類或者結構能夠有多個構造函數嗎?
能夠,類或者結構能夠有多個構造函數。C#中構造函數能夠被重載。
149. 能夠建立接口的實例嗎?
不能夠,你不能夠建立接口的實例。
150. 接口能夠包含字段嗎?
不能夠,接口不能包含字段。
aspx and cs
web/business/dataaccess
答:系統的資源不足,進程的推動的順序不合適,資源分配不當,一個資源每次只能被一個進程使用,一個資源請求資源時,而此時這個資源已阻塞,對已得到資源不放,進程得到資源時,未使用完前,不能強行剝奪。
答:接口是能夠繼承接口的,抽象類是能夠實現接口的,抽象類能夠繼承實體類,可是有個條件,條件是,實體類必需要有明確的構造函數。
答:Constructor不能夠被繼承,所以不能被重寫(Overriding),但能夠被重載(Overloading).
答:由於String類是final類因此不能夠繼承string類。
答:不能夠,一個對象的方法只能由一個線程訪問。
答:2<<3.
答:這個問題比較難回答,也是個很大的問題。可是能夠這樣問答。C#是能夠對內存進行直接操做的,雖然不多用到指針,可是C#是能夠使用指針的,在用的時候須要在前邊加unsafe,,在.net中使用了垃圾回收機制(GC)功能,它替代了程序員,不過在C#中不能夠直接使用finalize方法,而是在析構函數中調用基類的finalize()方法。
答:數組中沒有這個方法,但有這個屬性,string中有這個方法。
靜態成員:靜態類中的成員加入static修飾符,便是靜態成員.能夠直接使用類名+靜態成員名訪問此靜態成員,由於靜態成員存在於內存,非靜態成員須要實例化纔會分配內存,因此靜態成員不能訪問非靜態的成員..由於靜態成員存在於內存,因此非靜態成員能夠直接訪問類中靜態的成員.
非成靜態員:全部沒有加Static的成員都是非靜態成員,當類被實例化以後,能夠經過實例化的類名進行訪問
非靜態成員的生存期決定於該類的生存期..而靜態成員則不存在生存期的概念,由於靜態成員始終駐留在內容中..
一個類中也能夠包含靜態成員和非靜態成員,類中也包括靜態構造函數和非靜態構造函數.
對於winApp來講,靜態成員對於程序員自己省了不少事,並且由於靜態成員駐留內存,在方法與方法之間傳遞共享數據的時候,因此靜態成員成了個人首選..可是不要由於方便,大量使用,尤爲是在內存緊張或者用靜態方法操做一些共享值的時候.或者要寫多用戶系統的時候,要慎之又慎.好比:
static int id = 0;
sql = "select * from table where id=" + id;l
當這個類中包含抽象方法時,或是該類並無徹底實現父類的抽象方法時。
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。
接口中的方法用來定義對象之間通訊的契約,指定接口中的方法爲私有或保護沒有意義。他們默認爲公有方法。
固然。
這種狀況中你能夠決定如何實現。固然須要特別得當心。可是在編譯環節是沒有問題的。
System.String是不可變的字符串。System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法
is運算符用於檢查對象是否與給定類型兼容,若是兼容返回true,反之返回false。
as運算符用於在兼容的引用類型之間轉換,若是沒法轉換,返回null而不是引起異常
靜態構造方法是最早被執行的構造方法,而且在一個類裏只容許有一個無參的靜態構造方法
Request.QueryString:用於獲取Get傳遞的
Request.Form:用於獲取Post傳遞的
Request.ServerVariables:獲取參數集合
通常項目中默認用Request["xx"],這樣會先找Request.QueryString,再找Request.Form,以防有時用$.get,有時用$.post。固然有時爲了嚴謹也能夠直接用Request.Form來強制要求Post
Response.Charset:字符集
Response.ContentType:HTTP內容類型
Response.Expires:頁面有效緩衝期
Response.Status:HTTP狀態值,如200成功或404未找到
Response.Write("str"):最經常使用到,直接輸出
Response.Redirect("url"):跳轉url
Response.Clear() / .End() / .Flush() : 分別爲清除、結束、發送緩衝
是HttpServerUtility的類型實例
Server.MapPath():最經常使用,將虛擬目錄轉成實際目錄
Server.Transfer():終止當前頁,執行新頁
Server.HtmlDecode() / .HtmlEncode() :解碼編碼
是個加密、壓縮的隱藏字段,不能跨頁,自動維護,存在於客戶端
Session不適應長時間保持數據,默認是20分鐘,適用於小量數據。
ViewState經常使用於保存單個用戶狀態信息,有效期爲頁面生存週期,不適應大數據
Cookie用於保存瀏覽器請求信息,明文保存。
Response.Redirect():地址爲變
Server.Transfer():只能同目錄或子目錄,地址不變
Server.Execute():相似針對新頁面進行函數調用,返回結果
a標籤的href:有帶樣式
ASP.NET的HyperLink控件:ASP.NET專用
JS腳本:比較靈活,還能夠加入其它邏輯
InProc存儲在IIS進程(默認):性能高、不能跨服務器、受IIS影響、
StateServer存儲在狀態服務器:要設置stateConnectionString="tcpip=192.168.0.xx:42424",並在該服務器上裝ASP.NET State Server服務
SqlServer存儲在數據庫:可跨服務器,穩定,但負載大。開啓數據庫服務和SQL Server代理服務,在C:\winnt\Microsoft.NET\Framework\[version]\找到InstallSqlState.sql(可能每一個系統不大同樣,要去找找看),會新建ASPState庫,有些存儲過程,具體表是在tempdb的ASPStateTempSession表。要配置sqlConnectionString="data source=localhost; Integrated Security=SSPI;"
n 對一個7行7列的int 二維數組初始化,要求從1-49這49個數字中隨機選擇一個給數組的每一個元素賦值,而且數組的各個元素的值都不相同
// m :行數 n :列數
int[,] Test(int m, int n) {
int[,] Arr = new int[m, n];
IList<int> tmp = new List<int>();
int t = m * n;
for (int i = 1; i <= t; i++)
tmp.Add(i);
Random r = new Random();
for (int tm = 0; tm < m; tm++) {
for (int tn = 0; tn < n; tn++) {
int index = r.Next(0, tmp.Count);
Arr[tm, tn] = tmp[index];
tmp.RemoveAt(index);
}
}
return Arr;
}