中文一二三区_九九在线中文字幕无码_国产一二区av_38激情网_欧美一区=区三区_亚洲高清免费观看在线视频

首頁 > 個人簡歷 > 求職簡歷 > 筆試題目 > C#筆試常見題

C#筆試常見題

發布時間:2021-05-03

C#筆試常見題

  C#旨在設計成為一種"簡單、現代、通用",以及面向對象的程序設計語言,此種語言的實現,應提供對于以下軟件工程要素的支持:強類型檢查、數組維度檢查、未初始化的變量引用檢測、自動垃圾收集(Garbage Collection,指一種自動內存釋放技術)。下面就由第一范文網小編為大家介紹一下C#筆試常見題的文章,歡迎閱讀。

  C#筆試常見題篇1

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

  private : 私有成員, 在類的內部才可以訪問。

  protected : 保護成員,該類內部和繼承類中可以訪問。

  public : 公共成員,完全公開,沒有訪問限制。

  internal: 當前程序集內可以訪問。

  2、中的五個主要對象

  Connection:主要是開啟程序和數據庫之間的連接。沒有利用連接對象將數據庫打開,是無法從數據庫中取得數據的。Close和Dispose的區別,Close以后還可以Open,Dispose以后則不能再用。

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

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

  DataSet:這個對象可以視為一個暫存區(Cache),可以把從數據庫中所查詢到的數據保留起來,甚至可以將整個數據庫顯示出來,DataSet是放在內存中的。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter對象取得一些例如主鍵等的數據表結構,并可以記錄數據表間的關聯。DataSet 對象可以說是 中重量級的對象,這個對象架構在DataAdapter對象上,本身不具備和數據源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet 對象以及數據源間傳輸數據的橋梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

  DataReader:當我們只需要循序的讀取數據而不需要其它操作時,可以使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,這些數據是存在數據庫服務器中的,而不是一次性加載到程序的內存中的,只能(通過游標)讀取當前行的數據,而且這些數據是只讀的,并不允許作其它的操作。因為DataReader 在讀取數據的時候限制了每次只讀取一筆,而且只能只讀,所以使用起來不但節省資源而且效率很好。使用DataReader 對象除了效率較好之外,因為不用把數據全部傳回,故可以降低網絡的負載。

   使用Connection 對象來連接數據庫,使用Command 或DataAdapter對象來執行SQL語句,并將執行的結果返回給DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 對象操作數據結果。

  3、列舉Asp.net 頁面之間傳遞值的幾種方式。

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

  2.使用Session變量

  3.使用Server.Transfer

  4.Cookie傳值

  4、C#中的委托是什么?事件是不是一種委托?事件和委托的關系。

  委托可以把一個方法作為參數代入另一個方法。

  委托可以理解為指向一個函數的指針。

  委托和事件沒有可比性,因為委托是類型,事件是對象,下面說的是委托的對象(用委托方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委托實現的。因為對于事件來講,外部只能“注冊自己+=、注銷自己-=”,外界不可以注銷其他的注冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委托實例的,類比用一個自定義類閹割List。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委托和add、remove兩個方法

  C#筆試常見題篇2

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

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

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

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

  參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯可以看出,索引器的內部本質上就是set_item、get_item方法。

  基礎知識:

  索引的語法:

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

  索引可以有多個參數、參數類型任意

  索引可以重載。

  如果只有get沒有set就是只讀的索引。

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

  3、屬性和public字段的區別是什么?調用set方法為一個屬性設值,然后用get方法讀取出來的值一定是set進去的值嗎?

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

  class Person

  {

  public int Age

  {

  get

  {

  return 3;

  }

  set

  {

  }

  }

  }

  Person p1 = new Person;

  p1.Age = 30;

  p1.Age++;

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

  必須手寫掌握的代碼(既包含拿電腦寫,拿筆寫):

  1、 手寫三層架構

  2、 手寫冒泡排序

  3、 手寫AJAX:XMLHttpRequest

  4、 手寫增刪改查、SQLHelper

  C#筆試常見題篇3

  1、三層架構

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

  區分層次的目的即為了“高內聚,低耦合”的思想。

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

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

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

  三層結構是N層結構的一種,一般來說,層次之間是向下依賴的,下層代碼未確定其接口(契約)前,上層代碼是無法開發的,下層代碼接口(契約)的變化將使上層的代碼一起變化。

  優點: 分工明確,條理清晰,易于調試,而且具有可擴展性。

  缺點: 增加成本。

  2、關于拆箱裝箱:

  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 ==的關系

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

  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。

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

  Class可以被實例化,屬于引用類型,是分配在內存的堆上的。類是引用傳遞的。

  Struct屬于值類型,是分配在內存的棧上的。結構體是復制傳遞的。加分的回答:Int32、Boolean等都屬于結構體。

  5、堆和棧的區別?

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

  堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。

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

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

  7、GC是什么? 為什么要有GC?

  C/C++中由程序員進行對象的回收像學校食堂中由學生收盤子,.Net中由GC進行垃圾回收像餐館中店員去回收。

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

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

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

  object obj = new object;//只有new才會有新對象

  Console.WriteLine(obj);

  object obj2 = obj;

  obj = null;

  obj2 = null;

  Console.WriteLine;

  8、值類型和引用類型的區別?

  1.將一個值類型變量賦給另一個值類型變量時,將復制包含的值。引用類型變量的賦值只復制對對象的引用,而不復制對象本身。

  2.值類型不可能派生出新的類型:所有的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也可以實現接口。

  3.值類型不可能包含 null 值:然而,可空類型功能允許將 null 賦給值類型。

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

  9、C#中的接口和類有什么異同。

  不同點:

  不能直接實例化接口。

  接口不包含方法的實現。

  接口可以多繼承,類只能單繼承。

  類定義可在不同的源文件之間進行拆分。

  相同點:

  接口、類和結構都可以從多個接口繼承。

  接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。

  接口和類都可以包含事件、索引器、方法和屬性。

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

  10、abstract class和interface有什么區別?

  相同點:

  都不能被直接實例化,都可以通過繼承實現其抽象方法。

  不同點:

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

  接口只能定義行為;抽象類既可以定義行為,還可能提供實現。

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

  抽象類可以定義字段、屬性、包含有實現的方法。

  接口可以作用于值類型(Struct)和引用類型(Class);抽象類只能作用于引用類型。例如,Struct就可以繼承接口,而不能繼承類。

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

主站蜘蛛池模板: 国产无限免费av在线播放 | 少妇爆乳无码av无码专区 | 免费高清毛片在线播放视频 | 亚洲精品成人a8198a | 人人妻人人澡人人爽精品日本 | 97久久人人爽人人爽人人片 | 日本天堂在线播放 | 国产一区欧美二区 | 最近在线更新中文字幕3 | 办公室少妇激情呻吟a片在线观看 | 丰满少妇人妻久久久久久 | 国产一区精品二区 | 亚洲草逼 | 亚洲一区二区三区免费 | 91看片视频 | 日韩精品高清在线观看 | 成人毛片av在线 | 欧美日韩性生活片 | 亚洲精品美女视频在线观看 | 精品久久久久久无码中文野结衣 | 数码宝贝第一部日语版 | 精品一区二区久久久久 | 在线成人看片黄A免费看 | 91精品播放| 在线观看国产h小视频 | 亚洲日韩成人无码不卡 | 可以免费观看av | 国产精品一区二区欧美视频 | 国产精品毛片av | 爆乳熟妇一区二区三区 | 国产成人无码免费网站 | 一本之道无人区 | 成人在线免费观看网站 | 国产精一品亚洲二区在线播放 | 嫩草成人在线 | 欧美亚洲精品中文字幕 | 夜色福利院在线观看免费 | 国产高清在线视频观看 | 爱爱综合帝国社区 | 18禁强伦姧人妻又大又 | 国产成人精选在线不卡 |