C# 相關面試試題總結

来源:http://www.cnblogs.com/OhMonkey/archive/2017/06/15/7004971.html
-Advertisement-
Play Games

最近一個搞NET開發的朋友離職了,想讓我給他找點關於NET的相關面試題,準備抱一下佛腳,迎接新的挑戰。 我趕緊找到以前檢索的各種寶典,試題,今天梳理一下關於NET的基礎知識點。 1、面向對象語言的三大特性:封裝、繼承、多態; 2、介面和類有什麼異同: 不同點: ①介面不能直接實例化。 ②介面只包含方 ...


最近一個搞NET開發的朋友離職了,想讓我給他找點關於NET的相關面試題,準備抱一下佛腳,迎接新的挑戰。

我趕緊找到以前檢索的各種寶典,試題,今天梳理一下關於NET的基礎知識點。

1、面向對象語言的三大特性:封裝、繼承、多態;

2、介面和類有什麼異同:

  不同點:

   ①介面不能直接實例化。

   ②介面只包含方法或屬性的聲明,不包含方法的實現。

   ③介面可以多繼承,類只能單繼承。

   ④表達的含義不同,介面主要定義一種規範,統一調用方法,也就是規範類,約束類,類是方法功能的實現和集合

 相同點:

   ①介面、類和結構都可以從多個介面繼承。

   ②介面類似於抽象基類:繼承介面的任何非抽象類型都必須實現介面的所有成員。

   ③介面和類都可以包含事件、索引器、方法和屬性。

3、抽象類和介面有什麼異同

  ①繼承:介面支持多繼承;抽象類不能實現多繼承。

  ②表達的概念:介面用於規範,更強調契約,抽象類用於共性,強調父子。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於"Is A"的關係;而介面是定義行為規            範,強調“Can Do”的關係,因此對於實現介面的子類來說,相對於介面來說,是"行為需要按照介面來完成"。

  ③方法實現:對抽象類中的方法,即可以給出實現部分,也可以不給出;而介面的方法(抽象規則)都不能給出實現部分,介面中方法不能加修飾符。

  ④子類重寫:繼承類對於兩者所涉及方法的實現是不同的。繼承類對於抽象類所定義的抽象方法,可以不用重寫,也就是說,可以延用抽象類的方法;而對於介面類所定義的方法或者屬性來說,在繼承類          中必須重寫,給出相應的方法和屬性實現。

  ⑤新增方法的影響:在抽象類中,新增一個方法的話,繼承類中可以不用作任何處理;而對於介面來說,則需要修改繼承類,提供新定義的方法。

  ⑥介面可以作用於值類型(枚舉可以實現介面)和引用類型;抽象類只能作用於引用類型。

  ⑦介面不能包含欄位和已實現的方法,介面只包含方法、屬性、索引器、事件的簽名;抽象類可以定義欄位、屬性、包含有實現的方法。

4、virtual、sealed、override和abstract的區別

  ①virtual申明虛方法的關鍵字,說明該方法可以被重寫

  ②sealed說明該類不可被繼承

  ③override重寫基類的方法

  ④abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可實例化。

5、重載(override)和重寫(overload)有什麼區別

  重載:當類包含兩個名稱相同但簽名不同(方法名相同,參數列表不相同)的方法時發生方法重載。用方法重載來提供在語義上完成相同而功能不同的方法。(一個類中、多個方法)

  重寫:在類的繼承中使用,通過覆寫子類方法可以改變父類虛方法的實現。(二個類以上)

 6、結構體和類的區別

  ①結構體是值類型,類是引用類型
  ②結構體不支持無慘構造函數,不支持析構函數,並且不能有protected修飾;
  ③結構體常用於數據存儲,類class多用於行為;
  ④類class需要用new關鍵字實例化對象,struct可以不適用new關鍵字;
  ⑤類class可以為抽象類,struct不支持抽象;

 7、out和ref的異同點

  ①ref要求參數在使用之前要顯式初始化,out要在方法內部初始化;

  ②out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。

  ③ref是有進有出,out是只出不進;(ref可以把參數的數值傳遞進函數,但是out是要把參數清空,就是說你無法把一個數值從out傳遞進去的,out進去後,參數的數值為空)

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

  ①值類型:就是一個包含實際數據的量。即當定義一個值類型的變數時,C#會根據它所聲明的類型,以棧方式分配一塊大小相適應的存儲區域給這個變數,隨後對這個變數的讀或寫操作就直接在這塊記憶體          區域進行;

  ②引用類型:一個引用類型的變數不存儲它們所代表的實際數據,而是存儲實際數據的引用。
  引用類型分兩步創建:首先在棧上創建一個引用變數,然後在堆上創建對象本身,再把這個記憶體的句柄(也是記憶體的首地址)賦給引用變數;

 

 9、什麼是拆箱和裝箱

   裝箱→值類型轉換為引用類型,拆箱→引用類型轉換為值類型。

10、裝箱和拆箱有什麼性能影響?怎麼解決呢?

  ①影響:都涉及到記憶體的分配和對象的創建,有較大的性能影響;

  ②解決:使用泛型

11、委托是什麼?事件是不是委托?

  ①委托:類似於 C或 C++中的函數指針,允許將方法作為參數進行傳遞;(可以把一個方法作為參數代入另一個方法)

  ②事件是特殊的委托,事件內部是基於委托來實現的;

 12、構造器Constructor是否可以被繼承?是否可以被Override?

  Constructor不可以被繼承,因此不能被重寫(Overriding),但可以被重載(Overloading).

13、是否可以集成String類?

  String類是final類所以不可以繼承string類。

14、當一個線程進入一個對象的方法後,其他線程是否可以進入該方法?

  不可以,一個對象的方法只能由一個線程訪問。

15、用最有效的方法算出2乘以8等於幾?

  2<<3(左乘,右除)

16、Error和Exception有是區別?

   Error表示恢復不是不可能,但是很困難,Exception表示一種實際或實現問題,它表示程式運行正常不可以發生的。

 17、UDP和TCP連接有和異同?

  ①TCP是傳輸控制協議,提供的是面向連接的,是可靠的,位元組流服務,TCP提供超時重撥,檢驗數據功能。

  ②UDP是用戶數據報協議,是一個簡單的面向數據報的傳輸協議,是不可靠的連接。

18、new關鍵字的用法

 ①new 運算符 用於創建對象和調用構造函數。

   ②new 修飾符 用於向基類成員隱藏繼承成員。

   ③new 約束   用於在泛型聲明中約束可能用作類型參數的參數的類型。

 19、Using關鍵字的用法

  ①引用命名空間;

  ②為命名空間或類型創建別名;(using + 別名 = 包括詳細命名空間信息的具體的類型)

  ③釋放資源(關閉文件流);

 20、可訪問性級別有哪幾種

  ①pubic 訪問不受限制。

  ②protected 訪問僅限於包含類或從包含類派生的類型。

  ③internal 訪問僅限於當前程式集。

  ④protected internal 訪問僅限於從包含類派生的當前程式集或類型。

  ⑤private 訪問僅限於包含類型。

21、 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸演算法實現。

22、冒泡排序

 

所有的參考如下:

http://www.cnblogs.com/lgxlsm/p/5256482.html http://www.cnblogs.com/jx270/p/3367431.html http://www.cnblogs.com/lhws/archive/2010/09/21/1827115.html http://www.cnblogs.com/Shadowing/archive/2013/11/13/3422185.html http://www.cnblogs.com/yangzhiyu/p/3950550.html http://blog.csdn.net/wust__wangfan/article/details/17841055
 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • nginx四層負載均衡配置代理Mysql集群 環境如下: ip 192.168.6.203 Nginx ip 192.168.6.*(多台) Mysql 步驟一 查看Nginx是否安裝stream模塊 沒安裝則進行安裝 操作步驟如下 至此 已保證在沒中斷服務的情況下成功添加stream模塊 步驟二 ...
  • chown [chang owner]:更改用戶和群組。 命令格式: chown [選項]... [用戶][:[組]] 文件... 例子: sudo chown book:book /work -R -R[recursion]:遞歸地更改該目錄下的所有文件 一般在沒使用上命令時,該子目錄work都是 ...
  • LNMP簡介 LAMP(Linux apache mysql php) 比較早的web服務。 LNMP(Linux nginx mysql php) 比較潮流,新的webn服務,使用率上升趨勢(國內非常流行)。 Nginx(Engine X),是俄羅斯人開發的,開源的www服務軟體,軟體一共780K ...
  • linux每一個打開文件都會關聯一個文件描述符,需要的時候我們可以使用exec命令指定一個大於3的數字作為文件 linux預設文件描述符 每打開一個shell就會打開預設的三個文件描述符描0,1,2,分別代表標準輸入,標準輸出和標準錯誤輸出。 exec命令關聯文件描述符 exec 5 /tmp/a. ...
  • 工具: VMware:VMware-workstation-full_12.5.5.17738.exe Ubuntu鏡像:ubuntu-16.04-server-amd64.iso 遠程連接工具--SecureCTR:securecrt8.0中文破解版@304_242483.exe 安裝步驟: 【1 ...
  • 上下文交換(context switch),又稱環境切換,電腦術語,是一個儲存和重建CPU的狀態 (內文),因此令多個進程(process)可以分享單一CPU資源的計算過程。要交換CPU上的進程時,必需先行儲存目前進程的狀態,再將欲執行的進程之狀態讀回CPU中。 何時交換? 有三種可能的情況會發生上 ...
  • DBLayer,我最近開源的資料庫輕量級orm框架,目前支持sqlserver、mysql、oracle, 特別做了分頁的封裝。 這個框架從七八年前開始逐漸升級而來,也經歷了不少項目,希望可以將大家從sql字元串中解放出來。 開源地址 https://github.com/wutao0315/DBL ...
  • 今天有位同事,提出了這樣一個問題,他想限制所有MVC接收到的HTTP請求必須是POST方式。 接下來在下麵的內容中,將我想到的方式分享給大家,如果大家有其它的方式,請留言。 一、HttpPostAttribute特性 大家首先想到時的,MVC提供了HttpPostAttribute特性,是用於限制H ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...