趁著在放假時候,給大家總結一點筆試面試上的東西,也剛好為年後跳槽做一點小積累。
下面的參考解答只是幫助大家理解,不用背,面試題、筆試題千變萬化,不要夢想著把題覆蓋了,下面的題是供大家查漏補缺用的,真正的把這些題搞懂了,才能“以不變應萬變”。回答問題的時候能聯絡做過專案的例子是最好的,有的問題後面我已經補充聯絡到專案中的對應的案例了。
- 簡述private 、protected、 public、 internal 修飾符 訪問許可權。
private: 私有成員,在類的內部才可以訪問。
protected :保護成員,該類內部和繼承類中可以訪問。
public :公共成員,完全公開,沒有訪問限制。
internal:當前程式集內可以訪問。
- 介面及抽象
1、介面是一組規則的集合,它主要定義的是事物的規則,體現了是這種型別,你就必須有這些規則的概念。它的目的主要是依賴倒置和鬆耦合,從這點來說,介面不能省掉或者用抽象類代替。總而言之,介面和抽象類不可同日而語。
2、抽象類主要用於公共實現和約束子類必須重寫。
3、用一句話概括介面和抽象類的區別:使用抽象類是為了程式碼的複用,而使用介面的動機是為了實現多型性(依賴倒置)。至於使用的時候到底是用介面還是抽象類,看具體 的情況。
- ADO.net中的五個物件
- Connection:主要開啟程式和資料庫之間的連線。沒有利用連線物件將資料庫開啟,是無法從資料庫取得資料的。Close 和Dispose的區別。Cose以後還可以用Open ,Dispose 以後就不能再用Open。
- 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 物件運算元據結果。
- ASP.net 頁面之間傳遞值的幾種方式
- 使用QueryString 如…?id=1;response. Redirect()….
- 使用Session 變數
- 使用Server.Transfer
- Cookie傳值
- C# 的委託是什麼?事件是不是一種委託?事件和委託的關係。
委託可以把一個方法作為引數代入另一個方法。
委託可以理解為指向一個函式的指標。
委託和事件沒有可比性,因為委託是型別,事件是物件。下面說的是委託的物件(用委託方法實現的事件)和(標準的event方式實現)的事件區別。事件的內部是用委託實現。因為對於事件來講,外部只能”註冊自己+= 、登出自己-=”,外界不可以登出其他的註冊者,外界不可以主動觸發事件,因此如果用delegate就沒法進行上面控制,因此誕生事件這種語法。事件是用來閹割委託例項的,類比用一個自定義類閹割List 。事件只能add、remove自己,不能賦值。事件只能+=,-=,不能=.加分的補充回答:事件內部就是一個private 的委託和add ,remove兩個方法。
- override 與過載(overload) 的區別
過載是的名稱相同。引數或引數型別不同,進行多次過載以適應不同的需要。過載(overload)是程式導向的概念。
Override 是進行基類中函式的重寫。Override是物件導向的概念
- 關於拆箱裝箱
什麼是裝箱(boxing) 和拆箱(unboxing)
object 是引用型別,但時它的子類Int32 竟然不能去object 能去的”要求必須是引用型別”的地方,違反了繼承的原則,所以需要間Int32裝在object 才能傳遞。
裝箱:從值型別介面轉換到引用型別。
拆箱:從引用型別轉換到值型別。
1 object obj = null;//引用型別 2 obj = 1;//裝箱,boxing。把值型別包裝為引用型別。 3 int i1 = (int)obj;//拆箱。unboxing
分析: 在inboxing (裝箱)時是不需要顯式的型別轉換的,不過unboxing(拆箱)需要顯式的型別轉換。要掌握裝拆箱,就必須瞭解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 ==的關係