一、列舉ASP.NET頁面之間傳值的幾種方式。
答:使用QueryString,如.../id=1;response.Redirect()
使用Session
使用Server.Transfer
使用Cookie
二、簡述private、protected、public、internal修飾符的訪問權限。
答:privata:私有成員,在類的內部才能夠訪問
protected:保護成員,該類內部和繼承類能夠訪問
public:公開成員,沒有訪問限制
internal: 當前程序集能夠訪問
三、簡述ADO.NET中的五個主要對象。
答: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、DataTableTable包含若干DataRow。
DataReader:當咱們只須要循序的讀取數據而不須要其它操做時,可使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,這些數據是存在數據庫服務器中的,而不是一次性加載到程序的內存中的,只能(經過遊標)讀取當前行的數據,並且這些數據是隻讀的,並不容許做其它的操做。由於DataReader 在讀取數據的時候限制了每次只讀取一筆,並且只能只讀,因此使用起來不但節省資源並且效率很好。使用DataReader 對象除了效率較好以外,由於不用把數據所有傳回,故能夠下降網絡的負載。
ADO.NET 使用Connection 對象來鏈接數據庫,使用Command 或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,而後再使用取得的DataReader 或DataAdapter 對象操做數據結果。
四、請簡述.NET中類與結構的異同。
答:class能夠被實例化,屬於引用類型,是分配在內存的堆上的。類是引用傳遞。
struct屬於值類型,是分配在內存的棧上的。結構是值傳遞。
int3二、boolean都屬於結構。
五、override與重載(overload)的區別。
答:重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要。
重載是面向過程的概念。override是進行基類中函數的重寫,是面向對象的概念。
6,什麼是面向對象
面向對象OO = 面向對象的分析OOA + 面向對象的設計OOD + 面向對象的編程OOP; 通俗的解釋就是萬物皆對象,把全部的事物都看做一個個能夠獨立的對象(單元),它們能夠本身完成本身的功能,而不是像C那樣分紅一個個函數; 如今純正的OO語言主要是java和C#,C++也支持OO,C是面向過程的。java
7,靜態成員和實例成員的區別
(1)語法區別:靜態成員有關鍵字static,非靜態成員無static修飾;程序員
(2)存儲區別: 靜態成員變量存儲位於程序的全局變量存儲區,其做用域限制爲類內部,而且在整個程序運行期間只在內存中擁有一個存儲位置,不會拷貝不會複製,只是一個;web
非靜態成員變量存儲位於對象的變量存儲區,多個對象擁有多個變量的存儲,只隸屬於本身的的對象算法
(3)歸屬區別:靜態成員隸屬於類,是類的財產,不管對一個類建立多少個實例,它的靜態成員都只有一個副本,在各個地方的改變都會改變其值;sql
非靜態成員隸屬於它的對象,各自對象同一個非靜態成員值的改變都不互相影響,有多少實例就有多少副本;數據庫
(4)生存週期區別: 知道了存儲位置的區別也就不難理解生存週期的差別了,靜態成員只要分配了空間則在整個程序運行期間,它都是存在的,只有程序關閉以後,它的內存纔會被GC回收器收回,不過做用域仍然只限制於類的內部,在類外部調用時須要使用類 名加點的方式訪問;編程
類的非靜態成員的生存週期跟隨於隸屬於對象的生存週期,對象消亡則非靜態成員就會被回收;設計模式
(5)初始化順序的區別:初始化都是最早初始化類的靜態成員,而後纔是非靜態數據成員。
8,什麼是存儲過程,有什麼優勢
存儲過程是一組予編譯的SQL語句跨域
它的優勢:數組
1.容許模塊化程序設計,就是說只須要建立一次過程,之後在程序中就能夠調用該過程任意次。
2.容許更快執行,若是某操做須要執行大量SQL語句或重複執行,存儲過程比SQL語句執行的要快。
3.減小網絡流量,例如一個須要數百行的SQL代碼的操做有一條執行語句完成,不須要在網絡中發送數百行代碼。
4.更好的安全機制,對於沒有權限執行存儲過程的用戶,也可受權他們執行存儲過程。
附加:cache:在計算機存儲系統的層次結構中,介於中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一塊兒構成一級的存儲器。
消息隊列(MQ)是一種應用程序對應用程序的通訊方法。
CLR common language runtime 就是運行時至關於一個運行環境(至關於JVM)
IL intermidiate language中間語言,C#先編譯成中間語言再在CLR上面執行
九、new有幾種用法?
答:一、new Class();
二、覆蓋方法,public new XXXX();
三、new() 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數
十、用sealed修飾的類有什麼特色?
答:sealed修飾符用於防止從所修飾的類派生出其餘類。若是一個密封類指定爲其餘類的基類,則會發生編譯錯誤。
密封類不能同時爲抽象類。
sealed修飾符主要用於防止非有意的派生,他還能促使某些運行時優化。
String就是用sealed修飾的密封類,因此不能被繼承。
十一、在.NET中,配件的意思是?
答:程序集。(中間IL語言、元數據、資源、裝配清單)
十二、一個數組:1,1,2,3,5,8,13,21...,求第30位數是多少?
答:int[] arr = new int[30];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arr.Length; i++)
{
arr[i] = arr[i-1] + arr[i-2];
}
Console.WriteLine(arr[29]);
Console.ReadLine();
1三、請簡述面向對象的多態的特性及意義
答:簡單來講,多態是具備表現多種形態的能力特徵,在OO中是指,語言根據對象的類型的不一樣,以不一樣的方式處理。
特別是重載方法和繼承類這種形式的能力。
多態被認爲是面嚮對象語言的必備特性。
面向對象的語言使用虛方法表達多態。
這意味着派生類能夠有和父類具備一樣簽名的方法,而且父類能夠調用派生類的方法。
在C#中,必須使用virtual關鍵字才能使方法被父類調用。
或者:面向對象的編程使用了派生繼承以及虛函數機制.一個原本指向基類的對象指針能夠指向其派生類的.並訪問從基類繼承而來的成員變量和函數.而虛函數是專門爲這個特性設計的,這個函數在每一個基類的派生類中都是同一個名字,但函數體卻並不必定相同,派生類每每爲實現本身的功能而修改這個虛函數.這樣用一個指針就可以實現對多種不一樣的派生類的訪問, 並實現其派生類的特定功能(代碼 )
1四、請編程遍歷winform窗口上全部TextBox控件,並給它的Text屬性賦值爲string.Empty。
答:using System.Windows.Forms;
foreach (Control control in this.Controls)
{
if(control is TextBox)
{
TextBox tb = (TextBox)control;
tb.Text = String.Empty;
}
}
1五、什麼是裝箱(inboxing)和拆箱(unboxing)。
答:裝箱:將一個值類型隱式地轉換成一個object類型,或把這個值類型轉換成一個被該值類型應用的接口類型,把一個值類型的值裝箱,就是建立一個object實例並將值複製給這個object
拆箱:和裝箱相反,拆箱轉換是指將一個對象類型顯式地轉換成一個值類型,或將一個接口類型顯式地轉換成一個執行該接口的值類型。
object obj = null;
obj = 1;//裝箱,把值類型包裝成引用類型。
int num = (int)obj;// 拆箱,顯示類型轉換。
1六、如何理解三層架構。
答:三層架構就是將整個業務應用劃爲:表現層、業務邏輯層、數據訪問層。
區分層次的目的即爲了「高內聚,低耦合」的思想。
表現層:通俗講就是展示給用戶的界面,即用戶在使用一個系統的時候的所見所得。
業務邏輯層:針對具體問題的操做,也能夠說是對數據層的操做,對數據業務邏輯處理。
數據訪問層:該層所作事務直接操做數據庫,針對數據的增刪改查等。
每層之間是一種垂直關係。
三層架構是N層架構的一種,通常來講,層次之間是向下依賴的,下層代碼未肯定其接口前,上層代碼是沒法開發的,下層代碼接口的變化將使上層的代碼一塊兒變化。
優勢:分工明確,條理清晰,易於調試,並且具備擴展性。
缺點:增長系統複雜度,增長成本。
1七、寫一個冒泡排序(從小到大)。
答:int[] myInts = { 11, 22, 33, 44, 55 ,66};
int temp = 0;
int count = 0;
for (int i = 1; i <= myInts.Length - 1; i++)
{
//bool 是否須要排序 = false;
for (int j = myInts.Length - 1; j >= i; j--)
{
if (myInts[j] < myInts[j - 1])
{
temp = myInts[j];
myInts[j] = myInts[j - 1];
myInts[j - 1] = temp;
}
count++;
}
}
1八、數據庫三範式是什麼?
答:1NF,確保每列保持原子性
2NF,確保表中的每列都和主鍵相關
3NF,確保每列都和主鍵列直接相關,而不是間接相關
1九、能用foreach遍歷訪問的對象有什麼要求?
答:須要實現IEnumerable接口或聲明GetEnumerator方法的類型。
20、GC是什麼?爲何要有GC?
答:GC是垃圾收集器。
程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。
GC只能處理託管內存資源的釋放,對於非託管資源則不能使用GC回收內存,必須由程序員手工回收。
2一、說出五個集合類。
答:List、Dictionary、Stack、Queue、Tree等
2二、不用JQuery等庫,原生JS使用AJAX實現登錄。
答:window.onload = function () {
document.getElementById('btn').onclick = function () {
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
var xhr = new XMLHttpRequest();
xhr.open('POST','/url?username=' + username + '&password=' + password, true);
xhr.onreadystatechange = function () {
if(xhr.readyState === 4) {
if (xhr.status === 200) {
alert('登錄成功')
} else {
alert('登錄失敗')
}
}
}
}
}
2三、你以爲如何才能提升代碼的效率和性能(能夠列舉多種思路,越多越好)?
答:能夠根據業務流程、業務數據的特色進行優化,好比能夠採用緩存、索引等來提升代碼的效率和性能。
同時不要進行無心義的代碼優化,重點優化系統的性能瓶頸。
按照設計模式去編寫代碼,完全的面向對象編程,多用委託事件。
儘可能作到方法的每個實現代碼只寫一遍。
2四、什麼是Code-Behind技術?
答:Code-Behind是代碼隱藏。
在ASP.NET中經過ASPX頁面指向CS文件的方法顯示邏輯和處理邏輯的分離,這樣有助於web應用程序的建立。
Code-Behind是基於部分類技術實現的。
2五、using關鍵字有什麼用?什麼是IDisposable?
答:using能夠聲明namespace的引入,還能夠實現非託管資源的釋放,實現了IDisposable的類在using中建立對象,using結束後會自動調用Dispose方法,釋放資源。
using其實等價于于try...finally,用起來更方便。
2六、String是值類型仍是引用類型?它是如何工做的。
答:String是引用類型。
String的值是不可變的,當對String類型的對象從新賦值時,這個對象的引用指向就會變成一個新的引用,而原來的那個值並無改變,只是引用改變了。
2七、簡述堆與棧的區別。
答:棧是編譯期間就分配好的內存空間,所以你的代碼中必須就棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧中。
堆是程序運行期間動態分配的內存空間,你能夠根據程序的運行狀況肯定要分配的堆內存的大小。
2八、有一個8個數的數組{1,2,3,3,4,5,6,6},計算其中不重複數字的個數。
答:int values = {1,2,3,3,4,5,6,6};
HashSet<int> set = new HashSet<int>();
foreach(int i in values)
{
set.Add(i);
}
Console.WriteLine(set.Count)
2九、是否能夠從一個static方法內部發出對非static方法的調用?
答:不能夠。由於非static方法與對象相關聯,必須建立一個對象後,才能夠在該對象上進行方法調用,而static方法調用時不須要建立對象,能夠直接調用。
也就是說,當一個static方法被調用時,可能尚未建立任何實例對象,若是從一個static方法中調用一個非static方法,那麼非static方法沒有關聯的對象,因此不能夠。
30、說出一些經常使用類、接口,請各列舉5個。
答:類:StreamReader、StringBuilder、SqlConnection、FileStream、File、Regex
接口:IDisposable、IEnumerable、IComparable、ICollection、IList
3一、C#支持多重繼承麼?
答:類之間不支持,接口之間支持。
類對接口叫作實現,不叫繼承。
類是爹、接口是能力,能力能夠有多個,但不能有多個爹。
3二、簡單說明數據庫創建索引的優缺點。
答:優勢,使用索引能夠加快數據的查詢速度。
缺點,插入數據過程當中會創建索引,因此會下降數據的插入、更新速度,還會佔用磁盤。
3三、經過超連接<a>如何傳遞中文參數。
答:用URL編碼,經過QueryString傳遞,用System.Web.HttpUtility.UrlEncode編碼 用System.Web.HttpUtility.UrlDecode解碼。
3四、Ajax解決什麼問題?如何使用Ajax?Ajax有什麼問題須要注意?
答:AJAX解決的問題就是「無刷新更新頁面」,用傳統的HTML表單方式進行頁面的更新時,每次都要將請求提交到服務器,服務器返回後再重繪界面。
這樣界面就會經歷:提交→變白→從新顯示這樣一個過程,用戶體驗很是差,使用AJAX則不會致使頁面從新提交、刷新。
AJAX最本質的實現是在Javascript中使用XMLHttpRequest進行Http的請求,開發中一般使用UpdatePanel、JQuery等方式簡化AJAX的開發。
使用XmlHttpRequest實現Ajax請求。
Ajax最重要的問題是沒法跨域請求,也就是沒法在再頁面中向和當前域名不一樣的頁面發送請求。
3五、你常常訪問的技術類網站是什麼?
答:博客園、CSDN、GitHub、MSDN、MDN、CnBate、CodePlex
3六、Session有什麼缺陷?微軟提出了什麼方法加以解決。
答:iis中因爲有進程回收機制,系統繁忙的話Session會丟失,IIS重啓也會丟失。
能夠用SateServer或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。
SateServer還能夠解決集羣Session共享的問題。
3七、ASP.NET中的錯誤機制。
答:ASP.NET四種錯誤處理機制,分別是:Page_Error(不經常使用),Application_Error(應用程序中的未捕獲異常),<customErrors>四種。
若是一個表查詢比寫入頻繁能夠創建索引,若是寫入比查詢頻繁,就不建議創建索引。
3八、SQL注入漏洞產生的緣由?如何防止。
答:程序開發過程當中不注意書寫sql語句和對特殊字符進行過濾,致使客戶端能夠提交一些sql語句正常執行。
一、sql語句儘可能不要省略引號和單引號。
二、過濾掉SQL語句中的一些關鍵字。
三、控制錯誤信息,不要再瀏覽器上輸出錯誤信息。
四、使用SqlParameter類,儘可能不要拼接字符串SQL語句。
3九、如何提升頁面的顯示速度?假如一個頁面的加載時間是10.89S,你會用什麼樣的方式優化。
答:首先要找出問題所在,是服務器端運行的速度慢仍是服務器端到客戶端的下載慢仍是頁面在瀏覽器的加載速度慢。
若是是服務器端運行速度慢,則找是數據庫的緣由仍是算法的問題,若是是數據庫的問題則嘗試添加索引、優化SQL語句,若是是算法的問題,則優化算法。
若是對於一些不常常改動的頁面可使用靜態頁技術!
對於一些數據不須要及時更新的並且取數據的過程很是耗時可使用緩存。
頁面中的內容能夠按需加載(好比說能夠像網站的評論那樣當用戶須要看的時候再加載其內容)
能夠在圖片須要顯示的時候再進行加載。
若是是服務器端到客戶端的下載慢則看是頁面體積過於臃腫仍是網絡問題,
若是是頁面體積過於臃腫,則優化HTML代碼,去掉無用的標籤,壓縮JS、CSS,能夠用CSS Spirit技術將多個圖片放到一個圖片中,減小向服務器的請求。
若是是網絡問題,則嘗試在不一樣的網絡、地區部署服務器,而後使用CDN技術加速訪問。
若是是頁面中的JavaScript運行復雜致使運行速度慢,則優化JavaScript。
40、你會採用什麼樣的策略和方法來實現系統緩存。
答:在ASP.NET中 緩存有 頁面緩存,數據源緩存,和一些本身定義的緩存!
對於那些整個頁面不常常變化的咱們可使用頁面緩存,而對於那些執行很是耗時的SQL語句而且數據的及時性要求不高的咱們可使用數據源緩存。
4一、網站想要實現文件防盜鏈的功能,說說你的解決方案。
答:讀取HTTP報文頭中的UrlReferrer在Application_BeginRequest中咱們能夠判斷用戶的請求是否來源於本網站。若是不是咱們能夠終止用戶的請求。
4二、StringBuilder和String的區別。
答:String 在進行運算時(如賦值、拼接等)會產生一個新的實例,而 StringBuilder 則不會。
因此在大量字符串拼接或頻繁對某一字符串進行操做時最好使用 StringBuilder,不要使用 String
若是要操做一個不斷增加的字符串,儘可能不用String類,改用StringBuilder類。
兩個類的工做原理不一樣:String類是一種傳統的修改字符串的方式,它確實能夠完成把一個字符串添加到另外一個字符串上的工做沒錯,可是在.NET框架下,這個操做實在是划不來。
由於系統先是把兩個字符串寫入內存,接着刪除原來的String對象,而後建立一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了很多時間。
而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,可以在已有對象的原地進行字符串的修改,簡單並且直接。
固然,通常狀況下覺察不到這兩者效率的差別,但若是你要對某個字符串進行大量的添加操做,那麼StringBuilder類所耗費的時間和String類簡直不是一個數量級的。
4三、對於大流量的網站,應採用什麼樣的方法來解決訪問量問題。
答:首先,確認服務器硬件是否足夠支持當前的流量。
普通的P4服務器通常最多能支持天天10萬獨立IP,若是訪問量比這個還要大,那麼必須首先配置一臺更高性能的專用服務器才能解決問題,不然怎麼優化都不可能完全解決性能問題。
其次,優化數據庫訪問。
服務器的負載過大,一個重要的緣由是CPU負荷過大,下降服務器CPU的負荷,纔可以有效打破瓶頸。而使用靜態頁面可使得CPU的負荷最小化。
前臺實現徹底的靜態化固然最好,能夠徹底不用訪問數據庫,不過對於頻繁更新的網站,靜態化每每不能知足某些功能。
緩存技術就是另外一個解決方案,就是將動態數據存儲到緩存文件中,動態網頁直接調用這些文件,而沒必要再訪問數據庫,WordPress和Z-Blog都大量使用這種緩存技術。
若是確實沒法避免對數據庫的訪問,那麼能夠嘗試優化數據庫的查詢SQL.避免使用Select * from這樣的語句,每次查詢只返回本身須要的結果,避免短期內的大量SQL查詢。
第三,禁止外部的盜鏈。
外部網站的圖片或者文件盜鏈每每會帶來大量的負載壓力,所以應該嚴格限制外部對於自身的圖片或者文件盜鏈。
第四,控制大文件的下載。
大文件的下載會佔用很大的流量,而且對於非SCSI硬盤來講,大量文件下載會消耗CPU,使得網站響應能力降低。所以,儘可能不要提供超過2M的大文件下載, 若是須要提供,建議將大文件放在另一臺服務器上。
第五,使用不一樣主機分流主要流量
將文件放在不一樣的主機上,提供不一樣的鏡像供用戶下載。
第六,使用流量分析統計軟件
在 網站上安裝一個流量分析統計軟件,能夠即時知道哪些地方耗費了大量流量,哪些頁面須要再進行優化,所以,解決流量問題還須要進行精確的統計分析才能夠。
4四、打印出由*號組成的倒三角形的圖案
******* 4*2-1 要求: 一、輸入倒三角的行數,行數範圍3-18,對於不在範圍的行數,拋出提示.
***** 3*2-1 二、在控制檯打印出指定行數的倒三角形。
***2
*1
答:while (true)
{
Console.Write("請輸入一個數(3-50)之間:");
int num = Convert.ToInt32(Console.ReadLine());
if (num < 3 || num > 50)
{
Console.WriteLine("非法數值");
continue;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num; i++)
{
sb.Clear();
//生成空格,規則:行首空格數=行數-1
string space = "".PadLeft(i, ' ');
sb.Append(space);
//生成星號, 規則:行號*2-1,行號=num-i
string star = "".PadLeft((num - i) * 2 - 1, '*');
sb.Append(star);
Console.WriteLine(sb);
}
}
4五、什麼是單例?編寫一個單例類。
答:單例是一種設計模式。
這一模式的目的是使得類的一個對象成爲系統中的惟一實例。
單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行建立這個實例;三是它必須自行向整個系統提供這個實例。
/// <summary>
/// 單例模式的實現
/// </summary>
public class Singleton
{
// 定義一個靜態變量來保存類的實例
private static Singleton uniqueInstance;
// 定義私有構造函數,使外界不能建立該類實例
private Singleton()
{
}
/// <summary>
/// 定義公有方法提供一個全局訪問點,同時你也能夠定義公有屬性來提供全局訪問點
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
// 若是類的實例不存在則建立,不然直接返回
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
46、try{}裏有一個return語句,那麼緊跟在try後的finally{}裏的代碼會不會被執行,何時被執行。
答:會執行,若是return後面有一個返回值或者表達式,則會先進行計算,把值暫存起來,而後再執行finally裏的代碼,不管如何,return老是最後執行。
47、不用中間變量,交換兩個整型變量。
答:i = 10, j = 20;
i = i + j;//i = 30;
j = i - j;//j = 10;
i = i - j;//i = 20;
48、對數據的併發採用什麼方法比較好?
答:能夠控制鏈接池的鏈接數量,越多越好,還可使用負載均衡。
49、short s=1;s=s+1;有錯麼?short s=1;s+=1;有錯麼?
答:short s=1;s=s+1;
這句不會經過編譯(類型轉換錯誤),由於s+1,其中1爲int型,而s會隱式轉換爲int再和1進行運算,運算結果天然是int,而int則沒法隱式轉換回short,因此這裏是錯的。
short s=1;s+=1;
這句是則不會報錯,由於s+=1,至關於s=(short)(s+1),在運算後賦值前進行了顯式類型轉換。
50、產生一個int數組,長度爲100,並向其隨機插入1-100,而且不能重複(要求使用兩種方法)。
答://方法一
List<int> list = new List<int>();
Random rand = new Random();
while (list.Count < 100)
{
int num = rand.Next(1, 101);
if (!list.Contains(num))
{
list.Add(num);
}
}
//方法二
int[] arr = new int[100];
for (int i = 0; i < 100; i++)
{
arr[i] = i + 1;
}
Random rand1 = new Random();
for (int i = 0; i < 100; i++)
{
int m = rand1.Next(0, 100);
int n = rand1.Next(0, 100);
int temp = arr[m];
arr[m] = arr[n];
arr[n] = temp;
}
5一、C#中的委託是什麼?事件是否是一種委託?事件和委託的關係。
答:委託能夠把一個方法做爲參數代入另外一個方法。
委託能夠理解爲指向一個函數的指針。
委託是類型,事件是對象。
事件的內部是用委託實現的,對於事件來說,外部只能註冊本身(+=)和註銷本身(-=)。
事件內部就是一個private的委託和add(+=)、remove(-=)兩個方法。
52、屬性和字段的區別是什麼?
答:屬性能夠對值的獲取和設置進行控制,而字段不能。
通常狀況下get讀取的值就是set設置的值。
若是隻有get,則說明值是隻讀。
若是隻有set,則說明值是隻寫。
get和set的本質是就是內部方法。
5三、C#的接口和類有什麼異同?
答:不一樣點:
不能直接實例化接口。
接口不包含方法的實現。
接口能夠繼承,類只能單繼承。
類定義可在不一樣的源文件之間進行拆分。
相同點:
接口、類和結構均可以從多個接口繼承實現。
繼承接口的任何非抽象類型都必須實現接口的全部成員。
接口和類均可以包含事件、索引、方法和屬性。
5四、什麼狀況下會用到虛方法?它與接口有什麼不一樣?
答:子類從新定義父類的某一個方法時,必須把父方法定義爲virtual。
在定義接口中不能有方法體,虛方法能夠。
實現時,子類能夠能夠不從新定義虛方法,但若是一個類繼承接口,那必須實現這個接口。
5五、常見的HTTP狀態碼有哪些?各是什麼意思?
答:200:(成功) 服務器已成功處理了請求 。一般,這表示服務器提供了請求的網頁
400 :(錯誤請求) 服務器不理解請求的語法
404:(未找到) 服務器找不到請求的網頁。
302 :(臨時移動) 服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
500 :(服務器內部錯誤) 服務器遇到錯誤,沒法完成請求。
5六、abstract class和interface有什麼區別?
答:相同點:
都不能被直接實例化,均可以繼承實現其(抽象)方法。
不一樣點:
接口支持多繼承,抽象類不能實現多繼承。
接口只能定義行爲,抽象類既能夠定位行爲,還能提供實現。
接口只包括:方法、屬性、索引器、事件的簽名,不能定義字段和包含實現的方法。
抽象類能夠定義字段、屬性、包含實現的方法。
接口可用做於結構和類,抽象只能用做於類。
結構能夠繼承接口,而不能繼承類。
5七、簡述屬性與索引器的區別?
答:屬性用於以可驗證的方式訪問私有成員變量。索引器用於以更便捷的方式訪問對象中包含的成員數組或集合。
區別:
一、屬性名可自定義,索引器必須以this命名。
二、屬性能夠爲實例或靜態,索引器必須是實例的。
三、索引器有索引參數列表,而屬性沒有。
58、DataReader和DataSet的異同?
答:DataReader爲在線操做數據, DataReader會一直佔用SqlConnection鏈接,在其得到數據過程當中其它操做不能夠再使用SqlConnection鏈接對象。
DataSet爲離線操做數據,DataSet會將數據一次性讀入內存,而後斷開鏈接,這時其它操做就可使用SqlConnection鏈接對象。
因爲DataReader一次只讀取一行數據,因此佔用內存較小。但DataReader爲只進且只讀的,也就是隻能單方向向前讀取,若是你想回頭去讀取上一條數據是不容許的,而且 不容許其修改數據。
因爲DataSet一次性讀取全部數據,因此比較消耗資源,但也提升了靈活性,在斷開數據庫鏈接狀況下你能夠對數據進行任何增刪改查,按照任意的順序讀取數據,並能夠將 其寫回到數據庫。
59. 值傳遞和引用傳遞的區別
答:數據類型在內存中的保存時,值類型保存在堆棧中,引用類型將它的值保存在託管堆中,在堆棧中保存的是對堆上地址的引用,
在方法中傳遞參數時,全部類型都是傳遞堆棧中的位置,具體過程爲先在堆棧上覆制一個傳遞的對象,而後將該對象傳給參數,因此顯而易見,數值類型保存在堆棧中,做爲參 數傳遞時直接複製了數值的一個副本給方法,方法對該副本所作的任何操做都不會影響到該數值的原值,可是引用類型複製的是堆棧上對堆的引用,該引用指向的仍然是堆上的引 用類型,因此對應用類型所作的操做都會引發其自己的改變。
60. C#中索引器是否只能根據數字進行索引?是否容許多個索引器參數?
答:索引器就是對一個集合的快速訪問方法,如一個類中有一個List類型的變量,可使用this[int index]來訪問該List變量,間接的就是this.List[index],
索引器中的參數不必定是整數,也能夠是其餘類型,如字典使用的就是字符串,參數的個數和類型能夠是任意類型
回答方式二:參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯能夠看出,索引器的內部本質上就是set_item、get_item方法。
加分的補充回答:回答傳智播客.net培訓中講解設計模式中開發的SettingsProvider就是用的string類型的參數名作索引器參數。
61. 屬性和public字段的區別是什麼?調用set方法爲一個屬性設置,而後用get方法讀取出來的值必定是set進去的值嗎?
答: 屬性能夠對設值、取值的過程進行非法值控制,好比年齡禁止設值負數,而字段則不能進行這樣的設置。 雖然通常狀況下get讀取的值就是set設置的值,可是可讓get讀取的值不是 set設置的值的,極端的例子。Public Age{get{return 100;}set{}}。 加分的補充回答:用reflector反編譯能夠看出,屬性內部本質上就是set_***、get_***方法