.Net知識點
.Net知識點
分享如何系統(tǒng)學習.Net/DotNet知識點。從編程語言C#開始,到面向過程,面向對象、 C#高級編程知識、數(shù)據(jù)庫及Ado.Net,網(wǎng)頁請求響應原理,學習開發(fā)Asp.Net。
需要整理的知識點有:.NET、SQL、JS、CSS、AJAX
----------------------------------------------------.NET框架基礎-----------------------------------------------
什么是CLR? 它包括哪2個部分?
通用語言運行庫。包含.NET程序的引擎和符合CLI的類庫。
什么是.NET框架? 就是CLR。
什么是CLI?
通用語言基礎結構,是一份語言和數(shù)據(jù)格式的規(guī)范。
什么是CTS?
通用類型系統(tǒng),定義了能夠在CLR上運行的語言規(guī)范。
什么是CLS?
通用語言規(guī)范,定義了所有.NET程序需要符合的最小規(guī)范集。
.NET程序開發(fā)所需的最基本環(huán)境?
一個文字編輯器和針對編碼語言的編譯器。
運行.NET程序需要什么? .NET Framework組件。
什么是程序集、應用程序域? 程序集:模塊與資源文件的集合。 應用程序域:類似于OS的進程,提供代碼運行范圍、錯誤隔離和安全設置隔離的邏輯單元,其創(chuàng)建和開銷較進程小。
.NET的運行機制是什么? (1)編譯C#代碼
(2)把代碼編譯成中間語言,并包裝成裝配件 (3)通過JIT將裝配件編譯成機器碼
什么是程序集強簽名?它有哪四個元素來唯一區(qū)別。 是一個帶有公鑰和數(shù)字簽名的程序集。
四個元素是:文件名、版本號、語言文化和公鑰。
-------------------------------------------------C# .NET語法基礎--------------------------------------------- 什么是虛方法?
子類可以用override關鍵字來覆蓋父類方法,實現(xiàn)該方法的另一種功能實現(xiàn)。
new關鍵字的作用?
顯示隱藏從父類繼承的成員,目的是將一個方法替換成另一個方法。
如何使得一個類不被繼承? 用sealed關鍵字修飾此類
什么是裝箱和拆箱?裝箱的作用?
裝箱就是將值類型轉換為引用類型Object,使得值類型可以存儲在垃圾回收堆中 拆箱就是將引用類型轉換為值類型
常用的值類型有哪些?
結構 枚舉 整型 浮點型 布爾型
關鍵字ref的作用? 無
泛型ArrayList的好處是什么?(不全)
·定義了針對某個類型的容器類ArrayList的泛型集合,就能避免數(shù)據(jù)進出容器引發(fā)的大規(guī)模的裝箱和拆箱操作,從而提高系統(tǒng)運行性能。
.net中所有內建類型的基類是什么?此基類中有哪些方法?其中哪些是虛方法?
System.Object 其主要方法有Equals() ToString() GetHashCode(),前兩個是虛方法,需要被重寫。
所有值類型的基類是什么?
System.ValueType,但也是繼承自System.Object
值類型和引用類型的區(qū)別?有3點 1、內存分配上
值類型在堆棧上分配內存空間,引用類型在堆上分配內存空間。 2、賦值時的區(qū)別 對于值類型,變量直接獲得值類型的數(shù)據(jù)副本,對于引用類型,變量獲得的是其對象的引用。 3、類型比較
對于值類型,直接內容比較,對于引用類型,是引用比較。
C#中是否有全局變量
沒有傳統(tǒng)意義的全局變量,c#程序中任何對象數(shù)據(jù)必須屬于某個類型,但是通過公共靜態(tài)變量可以實現(xiàn)全局變量的功能。
結構和類的區(qū)別是什么,結構適用于那些場合?
結構是值類型,不具備繼承特性,不能定義虛方法和抽象方法,不能有無參構造函數(shù),不能為成員變量設初值。
當一個類型僅僅是原始數(shù)據(jù)集合且不需要復雜操作時,定義為結構,因為結構作為值類型,對象內存分配和回收效率相對較高。
什么是類型的初始化器?Q
類型的初始化器是指具有和類型相同名字、無參數(shù)無返回的一個static方法。
C#中方法的參數(shù)可以有哪幾種傳遞方式?Q
有三個關鍵字可以修飾方法的參數(shù):ref、out、params。
ref和out是引用傳遞,區(qū)別是ref要求參數(shù)傳遞前必須初始化,而out則不需要; params實現(xiàn)了參數(shù)數(shù)目可變的方法,可以直接傳入變量集合而無需聲明數(shù)組。
C#中string和String以及object和Object有什么區(qū)別?
是同一個類型的兩個名字,沒有太多區(qū)別,string是String的別名,object是Object的別名。 但就編碼規(guī)范來說,系統(tǒng)中最好使用一種,要么全用string,要么全用String。
.NET支持哪幾種訪問性級別,C#實現(xiàn)了其中的哪幾種?
.NET支持的訪問性級別有6種,分別是Public, Private, Family,Assembly,Family&Assembly, Family or Assembly,C#除了Family&Assembly沒有實現(xiàn),其他都實現(xiàn),相對應的關鍵字是public,private,protected,internal,protect internal
什么是屬性?它有什么優(yōu)點?它和方法有什么區(qū)別? 屬性是指有返回值無參數(shù)的特殊方法; 優(yōu)點就是屬性具有很好的擴展性。(嘗試舉例p64)
和方法區(qū)別就是代替了早期的GetXXX/SetXXX方法,方便使用以及使代碼可讀性提高。
簡述C#中的淺復制和深復制。
foreach循環(huán)語句和其他循環(huán)語句相比有何優(yōu)點?有何局限?
foreach循環(huán)語句適合遍歷實現(xiàn)了IEnumberable接口的容器類,但不允許直接修改遍歷項目的值,但可調用其方法來修改,其執(zhí)行效率較高,在開發(fā)中應優(yōu)先考慮使用。
C#中的using語句有什么作用?
using語句為實現(xiàn)IDisposable的類對象在using塊結束后,自動調用Dispose()方法釋放資源,相當于一個try/catch塊,相當于一個異常處理塊,所有對象應該在using語句開始后創(chuàng)建對象。
System.String是值類型還是引用類型?
是引用類型,其對象初始化后不能再做修改,一旦修改表示一個新字符串的生成。
StringBuilder類型有何作用?
當一個字符串被修改、連接等操作,最終生成需經(jīng)過組裝過程,期間會產(chǎn)生很多不需要的臨時字符串對象,大大影響了程序性能,所以用StringBuilder類解決這個問題,一旦此類的ToString()方法被調用時,生成最終字符串對象。
String和Byte[]之間的互相轉換?(用到哪個類和哪2個方法) Encoding.UTF8.GetBytes(字符串對象);
Encoding.UTF8.GetString(字節(jié)數(shù)組對象);
什么是字符串池機制?
CLR會保留程序中出現(xiàn)過的字符串對象集合,在需要新字符串時在其中查找,找到則返回已有對象引用,致力于改善程序性能。(當然也可以使用StringBuilder類代替String類)
Int[]是值類型還是引用類型?
數(shù)組類型是一個類型族,都繼承自System.Array,而System.Array又繼承自System.Object,所以是引用類型。
C#中類可以有多個父類嗎?可以實現(xiàn)多個接口嗎?
不能實現(xiàn)多繼承,但可以實現(xiàn)多接口。.NET接口指一系列方法、屬性、索引和事件的簽名。
簡述C#中重寫、重載和隱藏的概念。 重寫(override):是指子類用Override關鍵字重新實現(xiàn)定義在父類中的虛方法,并在實際運行時根據(jù)對象類型來調用相應的方法。
隱藏:是指子類用new關鍵字重新實現(xiàn)定義在父類中的方法,但在實際運行時只能根據(jù)引用來調用相應的方法。 重載(overload):擁有相同名字和返回值的方法擁有不同的參數(shù)列表。
為什么不能在構造函數(shù)中調用虛方法?
一個類的構造順序是:先初始化成員變量,然后執(zhí)行父類構造函數(shù),然后執(zhí)行自己的構造函數(shù)。也就是說當子類被創(chuàng)建時,現(xiàn)調用父類構造函數(shù),其中含有虛方法,即子類構造函數(shù)中將重寫此虛方法,然而此時子類構造還未完成,則對于為構造的子類成員訪問是錯誤的。
如何聲明一個類不能被繼承? 用sealed關鍵字
進行類型判斷時或者類型轉換時如何更高效和避免異常? 用is和as關鍵字。
什么是泛型?泛型有什么好處?
泛型允許程序員定義更通用的類型和算法,并且在具體使用時再生成具體類型。 能夠避免容器類的裝箱和拆箱問題。
什么是泛型的主要和次要約束?
主要約束指泛型的參數(shù)必須是引用類型,次要約束是指泛型的參數(shù)必須實現(xiàn)的接口。
什么是STL模板庫?
是一種通用的、高效的算法、容器和迭代器的集合,有助于程序員更加高效的開發(fā)和節(jié)省時間。
--------------------------------------------------委托和事件-----------------------------------------------------
什么是委托?委托有什么優(yōu)點?你什么時候會用到委托。
委托是一個繼承自System.Delegate的類,每個委托變量都至少綁定了一個方法,當調用委托方法時,就會調用綁定到委托對象上的方法。
委托使程序更具有擴展性和靈活性,減少類與類之間的耦合度。
一個叫做stop()的方法要關閉多種電器,當需要添加新電器時不得不修改stop()方法;而用委托只需聲明一個委托變量,將控制某種電器關閉方法綁定到此委托就可以了。
委托綁定實例方法和靜態(tài)方法有什么區(qū)別?
委托內部有兩個成員變量,_target和_methodPtr,當綁定實例方法時,_target的值為該方法所在類的實例對象,_methodPtr為該方法;當綁定靜態(tài)方法時,_target則為null。
什么時鏈式委托?請舉個簡單例子。 就是多點委托。
public delegate void stopDelegate(); public static void stopTV() {
Console.WriteLine("關閉電視機"); }
public static void stopLight() {
Console.WriteLine("關燈"); }
public static void stopFan() {
Console.WriteLine("關電扇"); }
static void Main(string[] args) {
stopDelegate stop = stopTV; stopDelegate stop2 = stopLight; stopDelegate stop3 = stopFan;
stopDelegate stopHead = stop + stop2 + stop3; //鏈表頭 stopHead(); }
鏈式委托執(zhí)行順序是怎樣的?
委托結構里有個_prev變量指定鏈表中最后一個委托對象。 用Combine()方法來規(guī)定調用順序。
鏈式委托的返回值是怎么樣的?
委托多個有返回值的方法,只返回最后一個方法的返回值。
什么是事件?舉一個簡單例子。 事件是一種特殊的委托。
線程:進程中的可以被調度的單元。
每個進程之間是相互隔離的,而線程之間可以相互訪問。
什么是纖程?
是一種輕量級線程。
在.NET中如何控制線程?
提供了System.Threading.Thread類型封裝了線程操作。
什么是線程池?
相當于一個緩存,以前創(chuàng)建的縣城,當需要一個新線程時,先在里面找是否有相同的,找不到再重新創(chuàng)建,這樣使為了降低系統(tǒng)開銷。
lock關鍵字作用?
鎖定某個對象來實現(xiàn)線程同步。
---------------------------------------------------文件操作------------------------------------------------- 如何創(chuàng)建一個文件夾?
System.IO.Directory.CreateDirectory("c:\新建文件夾"); 或
DirectoryInfo f = new DirectoryInfo("c:"); f.Create();
如何創(chuàng)建文件,并寫入內容? File.Create("C: class="main">
.Net知識點
.Net知識點
.Net知識點
----------------------------------------------------asp.net-------------------------------------------------------- get和post請求有什么區(qū)別?
get是向服務器申請資源的請求,post是向服務器發(fā)送數(shù)據(jù)的請求。 get將數(shù)據(jù)放在url地址后面
get請求對長度和編碼有限制,post沒有長度限制
session有哪幾種存儲方式?有何區(qū)別? IIS進程(默認)、狀態(tài)服務器、SqlServer數(shù)據(jù)庫、自定義保存程序 除了默認,其他都需要能夠可序列化的類型數(shù)據(jù)且不易丟失。
列舉頁面跳轉方式?
Response.Redirect()、Server.Transfer()、JS腳本
筆記整理
AJAX的核心對象是什么?根據(jù)不同瀏覽器寫出創(chuàng)建其對象的代碼? XMLHttpRequest 創(chuàng)建代碼:
如何強制使程序線程阻塞5秒鐘? System.Threading.Thread.Sleep(5000);
請描述ADO.NET組成結構? 由數(shù)據(jù)提供程序和數(shù)據(jù)集組成。
數(shù)據(jù)提供程序包括Connection,Command,DataAdapter,DataReader 數(shù)據(jù)集包括DataSet等。
如何將查詢結果放入DataSet虛擬表中?
DataAdapter da=new DataAdapter(“sql語句”,con); DataSet ds=new DataSet(); da.Fill(ds,”虛擬表名”);
請寫一個分頁存儲過程?
create proc usp_tablePaged @pageSize int, @pageIndex int as
with t as ( select row_number() over(order by forumId desc) as RowNo,* from forums
)
select * from t
where RowNo between @pageSize*(@pageIndex-1)+1 and @pageSize*@pageIndex go
如何將一個數(shù)組參數(shù)添加到SqlCommand參數(shù)集合中? AddRange()方法
Sql語言中有哪三種分類?(?) TCL:事務控制語言 DDL: DML:
如何創(chuàng)建表索引?
Create index index_name on 表(字段)
set nocount on/off的作用是什么?
on不返回數(shù)據(jù)操作語句影響的行數(shù),off相反
如何使實體類能夠被序列化? 使用[Serializable]標記
請簡述Sql Server中鎖的作用?有哪些類型的鎖? 為了解決多事務并發(fā)所帶來的問題;
解決丟失更新(一個人更新數(shù)據(jù)后另一個人又更新)、臟讀、不可復讀 鎖的分類有:共享鎖、排他鎖、更新鎖、意向鎖 鎖的管理:樂觀鎖(不用管理)、悲觀鎖(程序員管理、設置事務的隔離級別)
什么是OOD/OOA?
如何用sql語句判斷數(shù)據(jù)庫中某個存儲過程是否存在?
If exsits (select type,name from sys.all_objects where type=’p’ and name=’存儲過程名’) 其中sys.all_objects為數(shù)據(jù)字典
查詢上一個插入語句的自動增長列號? Select @@identity
什么是DNS?
域名解析服務器,用于將域名轉換成其ip地址。
TCP/IP包括哪些層?每個層的作用有哪些? 應用層:HTTP,FTP,SMTP (端口號) 傳輸層:TCP UDP(指定傳輸協(xié)議) 網(wǎng)絡層:IP(找到IP地址)
物理層:電氣規(guī)范(定位到物理元件)
ASP.NET中虛路徑轉實際路徑的方法? Server.MapPath(“images/xx.jpg”)
如何在頁面上打印html源代碼?(2種) Literal控件,mode屬性值改為Encode。(此控件本身不再頁面產(chǎn)生任何代碼) Server.HtmlEncode(str);
泛型的原理是什么?泛型有什么作用?寫一個簡單的泛型例子。
允許程序員定義更通用的類型和算法,并且在具體使用時再生成具體的類型。 泛型可以避免容器類操作中裝箱和拆箱的問題。
頁面跳轉的2種方式
Server.Transfer("b.aspx"); --服務器端轉發(fā)(1次請求)
Response.Redirect("b.aspx"); --客戶端重定向(2次請求)
全局應用程序中有哪些方法? Session_Start() 和 Session_End()
什么是HttpHandler?和aspx頁面有什么區(qū)別?
http處理程序是負責處理請求的aps,net組件,aspx頁面是處理程序的一個實例。
什么是ORM?簡述其原理。ORM:對象關系映射,是一種為了解決面向對象和關系型數(shù)據(jù)庫存在互不匹配現(xiàn)象的技術,將程序中的對象自動持久化到數(shù)據(jù)庫中。簡單說,就是通過對對象的操作,就可以實現(xiàn)對數(shù)據(jù)訪問的功能。 框架有N
ORM有哪些框架(持久化框架)?
NHibernate、Active Record和Linq(MS推出的OR技術)。
什么是持久化?持久層?
把數(shù)據(jù)保存在可掉電的存儲設備上。 持久層類似于DAL。
什么是解耦合?
降低關聯(lián)的緊密程度,分離業(yè)務邏輯和數(shù)據(jù)邏輯,分離邏輯結構和物理結構,避免因底層結構變動對上層產(chǎn)生較大影響。
Question
string[] str = new string[3]; str[0] = "0"; str[1] = "1"; str[2] = "2";
ArrayList list = new ArrayList(); list.AddRange(str); foreach (string s in list) {
Console.WriteLine(s); }
string[] str1 = (string[])(list.ToArray());
//解決方法:string[] str1 = list.ToArray() as String[] Console.WriteLine(); foreach (string s in str) {
Console.WriteLine(s.ToString()); }