.net面試-常見問題歸納整理


第一部分:C#語言

1.類和結構的區別

1)類是引用類型,結構是值類型
2)類可以繼承,結構不能繼承,兩者都能實現接口
3)類可以有顯示的無參構造函數,結構則不能
4)類可以有析構函數,結構則不能
5)結構中不能有實例字段初始值設定,類無限制
6)類的構造函數里可以不用對所有字段進行初始化,結構必須要對所有字段進行初始化

2.C#中類成員訪問修飾符有哪些

public:公有的,任何位置都可以訪問
private:私有的,只有類的內部才能訪問
protected:受保護的,只有類的內部或派生類中可以訪問
internal:內部的,同一個程序集(命名空間)里面可以訪問
protected internal:內部受保護的,同一個程序集里面或不同程序集派生類中可以訪問

3.面向對象三大特征是什么

封裝、繼承、多態

4.抽象類和接口的區別

相同點:
1)不能被實例化
2)可以包含任意個抽象成員
不同點:
1)抽象類是類,具有類的特點:單基類繼承,多接口實現;接口不是類,只能繼承多個接口
2)抽象類中可以包含已經實現的非抽象成員;接口中所有成員都是抽象的,沒有實現的

5.接口可以包含哪些成員

方法、屬性、事件、索引器

6.什么是裝箱和拆箱

裝箱:將值類型轉換為object類型,或由此值類型實現的任何接口類型
拆箱:將object類型或接口類型轉換為實際的值類型

7.C#中,哪些類型是值類型,哪些類型是引用類型

值類型:結構、枚舉
引用類型:類、接口、委托、數組、字符串

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

1)值類型一般存儲在線程棧上,引用類型存儲在托管堆上
2)值類型的變量本身實際存儲的是實際數據,引用類型的變量本身實際存儲的是引用地址,實際的數據存儲在托管堆上
3)在作為方法參數傳遞時,值類型傳遞的是值的副本在方法中對其修改不會影響原始值。引用類型參數傳遞的是引用地址,在方法中對該參數進行修改會對托管堆上該地址實際數據進行修改,從而會影響原始值

9.C#中的基本數據類型有哪些

值類型:
1)有符號整數(由小到大):sbyte、short、int、long
2)無符號整數(由小到大):byte、ushort、uint、ulong
3)浮點型:float、double、decimal
4)布爾型:bool
5)字符型:char

引用類型:
1)string、object

10.重寫和重載的區別

重寫:子類對基類中的虛成員(虛方法、虛屬性等)或抽象成員(抽象方法、抽象屬性等)進行覆蓋重新實現
重載:同一個類中,同名方法具有不同的參數簽名(參數個數、參數的數據類型、參數是否具有ref、out、params修飾)的實現

11.構造函數是否可以被繼承?是否可以被重寫?

不能被繼承也不能被重寫,但是在創建類的實例時會首先調用其基類的無慘構造函數

12.C#中,運算符"?"和"??"的區別是什么

1)?:稱為三目運算符,運算格式如下:
condition?first_expression:second_expression;
如果條件condition為true,則計算第一表達式first_expression返回計算結果;如果是false,則計算第二表達式second_expression返回計算結果
2)??稱為null合並運算符,用於定義可以為null值的類型和引用類型的默認值。如果運算符左邊不為null,則返回運算符左邊的值;如果此運算符左邊為null,則返回右邊的值

13.C#中,用const和readonly修飾符的字段有什么區別

1)const:表示常量,其修飾是在編譯期間確定的,因此在聲明的時候只能通過常量表達式指定其值
2)readonly:表示只讀字段,其修飾是在運行時計算的,在對象的實例構造函數或類的靜態構造函數首次被調用時計算,之后字段的值不能被更改

14.string s=""和string s = null的區別

1)string s=""變量s指向了空字符串,給變量分配了空間,只不過s指向了一個長度為0的空字符串對象
2)string s = null 變量s指向了空引用null,表示s沒有引用任何對象,即沒有給變量s分配內存空間

15.C#中,new有幾種用法

1)用於創建對象和調用構造函數
2)創建匿名類實例
3)在用作修飾符時,new關鍵字可以顯示隱藏從父類繼承的成員

16.C#中,ref和out的區別

1)ref修飾參數時傳入方法前必須初始化;out可以不用
2)ref參數在方法內部可以直接使用;out不可以
3)ref參數在方法內部可以使用也可以不適用;out在方法返回前必須對其賦值

17.C#中,using有幾種用法

1)導入和引用命名空間
2)給類型起別名
3)使用using聲明的對象,可以確保在using代碼塊結束時,該對象所使用的資源被自動釋放

18.C#中,&和&&,|和||有什么區別

1)&表示按位與運算,&&表示邏輯與,表示對兩個布爾類型進行邏輯與操作,兩邊都為true才返回true
2)|表示按位或運算,||表示邏輯或,表示對兩個布爾類型進行邏輯或操作,兩邊條件一個位true就返回true

19.C#中,is和as的區別

is用於檢查對線是否與給定的類型兼容;as用於對引用類型的變量進行類型轉換

20.什么是GC,為什么要用到GC

GC是垃圾收集器,計算機程序運行過程中需要使用到內存,需要向操作系統申請內存空間,由於內存空間是有限的所以使用完程序需要釋放內存。
垃圾收集器就是一種自動進行內存管理的機制,使得程序員不用手動去分配內存和釋放內存,由垃圾收集器全權負責內存管理工作,提高了程序的安全性、穩定性、開發效率

21.什么是委托?事件跟委托是什么關系?

委托是一個類,它定義了方法的類型,使得方法可以當做另一個方法的參數來傳遞
事件也是一種委托

22.ADO.NET中訪問數據庫的基本步驟是什么

創建數據庫連接對象
打開連接
創建命令對象,執行SQL語句
關閉連接

23.ADO.NET中,DataSet和DataReader的區別是什么

1)DataSet數據集,表示內存中的數據庫,DataSet在讀取數據時會與數據庫連接,一次性的讀取所有的表數據到內存中,然后便斷開連接
2)DataReader數據讀取器,在讀取數據時是一行行讀取,每次只會讀取一行,直到讀到最后一行,才斷開數據庫連接。在整個讀取過程中,數據庫要保持連接狀態

24.ADO.NET中常用的對象有哪些

SqlConnection:連接對象,用於執行數據庫連接
SqlCommand:命令對象,用於執行SQL語句
SqlDataAdapter:適配器對象,用於填充數據集和更新數據庫
SqlParameter:參數對象,用於執行參數化SQL語句
SqlDataReader:讀取器對象,用於從數據庫中快速逐行讀取數據
SqlTransaction:事務對象,用於執行數據庫事務

第二部分:ASP.NET

1.ASP.NET中的身份驗證有哪些

1)windows身份驗證:ASP.NET會結合internet信息服務(IIS),為每個用戶開啟windows賬戶,通過windows賬戶驗證用戶安全
2)Forms驗證:ASP.NET通過web表單,為每一個用戶創建用cookie保存的身份驗證
3)Passport驗證:由Microsoft提供集中身份驗證服務,通過將每個用戶信息提供交給Passport登錄服務網站進行用戶身份驗證

2.Server.Transfer與Response.Redirect有什么區別

1)ServerTransfer:服務器端重定向,不能跨站點
2)Response.Redirect:客戶端重定向,可以跨站點

3.ASP.NET中頁面之間傳遞值幾種方式

1)QueryString:通過URL中的查詢字符串(Default.aspx?id=5&name=abc)
優點:簡單便捷
缺點:安全性差,長度大小有限制

2)Session:通過會話狀態傳值
優點:當前會話中所有頁面均可使用,能傳遞任何對象
缺點:增加服務器負擔容易超時丟失

3)Cookie:通過客戶端傳值
優點:讀取該cookie的所有頁面都可以使用
缺點:只能夠存儲文本信息字符串,大小不能超過4KB

4)Application:通過全局應用程序對象傳值
優點:整個應用程序都可以使用,且能夠傳遞任何對象
缺點:可能產生並發問題

5)Server.Transfer:通過服務器端重定向傳值
優點:可以將與最初請求相關的所有數據傳遞給重定向頁面
缺點:資源消耗較大

4.什么是code-behind技術

代碼隱藏技術,顯示頁面和邏輯頁面分離,提高頁面可維護性,提高開發效率

5.ASP.NET中調用webservice的方法有哪些

1)通過HTTP-GET請求調用
2)通過HTTP-POST請求調用
3)通過SOAP請求調用

6.怎樣理解web應用程序的“無狀態編程”?

web應用程序是基於http協議(具有無狀態性),即客戶端發送http請求服務器端,服務器收到請求將內容返回給客戶端,在這一過程服務器端不會記錄任何客戶端的信息,請求結束后服務器也不會保留此次請求的任何信息,所有相關請求都會被釋放,所有請求響應都是即時的

7.session有什么缺點,可以用什么方法解決

存儲在IIS內存中,當IIS發生重啟或進程回收時,session則會丟失
解決辦法是將session配置為“stateserver”或“SQLserver”,存儲在狀態服務進程或數據庫中,可以避免丟失,但此時無法捕獲Session_End事件

8.ASP.NET中所有自定義用戶控件都必須繼承自哪個類?頁面必須繼承至哪個類

1)用戶控件基類:System.Web.UI.UserControl
2)頁面基類:System.Web.UI.Page

9.向服務器發送請求有幾種方式

Get:向服務器請求數據
Post:向服務器提交數據

10.Web Service有哪些優點

1)Web Service是基於XML,與具體的語言平台無關,故可以實現跨平台,跨語言通信
2)Web Service是采用SOAP協議(簡單對象訪問協議)進行通信,該協議基於HTTP協議,故可以實現跨防火牆通信
3)Web Service可以很容易實現分布式應用程序

11.ASP.NET緩存有幾種實現方式

1)頁面輸出緩存:將頁面全部進行緩存
2)頁面局部緩存:將頁面中的一部分放在用戶控件,對該部分進行緩存
3)數據緩存:使用cache類進行數據緩存
4)客戶端緩存:使用HttpCachePolicy類進行客戶端緩存

12.什么是ViewState,有什么作用

視圖狀態:Web應用程序是無狀態,每次從服務器請求網頁時都會創建一個新實例,每次往返過程會丟失該頁面和控件關聯信息,為了客服這一局限性,ASP.NET頁框架包含了狀態管理功能,可以在往返之間保存頁面和控件關聯信息,這便是視圖狀態

13.ASP.NET常見的后綴名有哪些

aspx:頁面
ascx:用戶控件
asmx:web service
ashx:一般處理程序
asax:Global.asax全局應用程序配置

14.ASP.NET六大對象有哪些

Request、Response、Server、Session、Cookie、Application

15.jquery實現ajax請求的常用方法有哪些?有什么區別?

$.get方法:通過get方式發送請求
$.post:通過post方式發送請求
$.ajax:可以使用指定方式發送請求

16.手動實現ajax請求的步驟是什么

1)創建XMLHttpRequest對象
2)調用open方法初始化請求
3)設置回調函數
4)發送請求

17.MVC的各個字母代表什么含義,在MVC框架中起什么作用

M:Model用戶數據訪問層
V:View視圖用於呈現頁面
C:Controller控制器用戶處理請求邏輯

18.MVC請求的處理過程

請求到達服務器后首先進入路由系統進行驗證,如果請求的url地址格式符合路由定義,則將請求丟給控制器的方法進行處理。在方法中,可能會訪問模型中的數據、處理相應的業務邏輯,然后方法將根據請求的內容返回一個適當的視圖呈現給客戶端

19.請使用jquery實現一個復選框全選、反選功能

function selectAll()
{
var checked = $("#chkall").get(0).checked;
$(":checkbox:not(#chkall)").each(function(){

    this.cheked = checked;

})

}

20.請使用jquery實現表格中隔行變色效果

$(document).ready(function(){
$("#table tr:even").css("background-color","orange");
$("#table tr:odd").css("background-color","pink");

})

21.請使用jquery實現表格中鼠標移動的光棒效果

$(document).ready(function(){
$("#table tr").hover(function(){

 $(this).css("background-color","顏色")

},function(){

 $(this).css("background-color","顏色")

})

})

第三部分:SQLServer

1.寫出一條SQL語句,取出表A中第31條到第40條數據(SQLServer,以自動增長的ID作為主鍵,注意ID可能不是連續的)

select * from(
select *,row_number() over(order by id) row_no from A
) t where row_no between 31 and 40

2.請說出SQLServer中三種表連接的方式inner join 、left join、right join區別及對最終查詢結果的影響

1)inner join:內聯查詢,查詢出滿足on條件兩個表公告集合
2)left join:左外聯查詢,查詢出以左表為基礎與右表進行關聯,滿足on條件結果左表數據完全保留,右表沒有滿足數據用null補齊
3)right join:右外聯查詢,查詢出以右表為基礎與左表進行關聯,滿足on條件結果右表數據完全保留,左表沒有滿足數據用null補齊

3.存儲過程和函數的區別

1)函數是嵌套在sql語句使用,存儲過程大多數作為一個獨立部分使用,exec調用
2)函數限制比較多,不能用臨時表只能用表變量,存儲過程幾乎所有的sql代碼都可以使用
3)函數針對完成單一功能,存儲過程實現業務比較復雜的邏輯功能
4)函數只能返回一個值或表對象,存儲過程可以返回一個或多個輸出參數

4.數據庫索引是什么,有什么作用

數據庫索引是一列或多列的排序結構,作用類似一本書目錄可以加快查詢表中數據的速度

5.數據庫索引的分類和區別

1)聚集索引:表示索引中的結構與數據庫表中相應行數據在物理磁盤存儲的順序相同的索引
2)非聚集索引:表示索引中的結構與數據庫表中相應行數據在物理磁盤存儲的順序不相同的索引

6.什么是事務,它有什么特性

事務:執行單個邏輯功能的一組操作稱為事務,事務是最小的工作單元,無論執行成功或失敗都作為一個整體進行工作
事務的ACID特性:
1)原子性(Atomicity)即不可再分,要么都執行要么都不執行
2)一致性(Consistency)在事務開始之前結束之后,所有的數據都保持一致性
3)隔離性(Isolution)事務執行互不干擾,一個事務不可能看到其它事務運行的數據
4)持久性(Durability)事務完成后,對數據庫的更改保持長久不會被回滾

7.使用事務的最大好處是什么

可以保證數據完整性和一致性,要么全部執行成功,要么全部執行失敗

8.SQLServer中,觸發器分哪幾種?分別代表什么含義

分兩大類:
1)DML觸發器
當數據庫發生數據操作語言(DML)事件時將調用DML觸發器,DML事件包括INSERT語句、UPDATE語句、DELETE語句
DML觸發器又分為:after觸發器(在執行了INSERT、UPDATE、DELETE語句操作之后觸發)after觸發器只能定義在表上
instead of觸發器(表示並不執行INSERT、UPDATE、DELETE而是執行觸發器本身)instead of觸發器可以在表上定義也可以在視圖上定義
2)DDL觸發器
當數據庫發生數據定義語言(DDL)事件時將調用DDL觸發器。DDL事件主要與以關鍵字CREATE、ALTER、DROP開頭的sql語句

9.delete和truncate有什么區別

1)delete可以帶where條件,用於刪除指定條件的數據;truncate不能帶where條件
2)delete刪除所有數據后,下一次插入數據緊接着自增ID數值;truncate刪除所有數據后,下一次插入數據是重置的數值

10.union和union all的區別

1)union:合並時去掉重復數據
2)union all:合並時對重復數據不作處理

11.SQLServer,有一張學生成績表,有三個字段:學生ID,學生姓名,考試成績。如何查詢出成績排在前三名的學生(注意:可能有並列名次)

select * from (
select *,dense_rank() over(order by 學生成績 desc) no from 學生成績表
) t where no<=3

12.SQLServer中,向一個表中插入新數據,如何得到自增長字段的當前值

select @@identity

13.SQLServer中,游標有什么作用?如何知道游標已經到了最后?

作用:從包含多條記錄結果中每次提取一條記錄,類似程序代碼中的遍歷循環,每次只讀取一行的數據
當全局變量@@fetch_status值不等於0,表示游標已經到了最后

第四部分:算法

1.請用遞歸算法實現計算1+2+3+...+100的結果

static void Main(string[] args){

int total = sum(100);
Console.WriteLine(total);

}

static int sum(int x)
{
   if(x<=1)
          return x;
   else
          return x+sum(x-1);
}

2.請實現一個冒泡排序算法

int temp;
for(int i = 0;i<nums.length-1;i++)
{
       for(int j=i+1;j<num.length;j++)
       {
               if(num[j]<num[i])
               {
                     temp = num[i];
                     num[i] = num[j];
                     num[j] = temp;
               }
       }

}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM