個人總結2019 ASP.NET面試題


1、什么是面向對象?

面向對象就是把一個人或事務的屬性,比如名字,年齡這些定義在一個實體類里面。存和取的時候直接使用存取實體類就把這個人的名字,年齡這些全部存了,這個實體類就叫對象,這種思想就叫面向對象。

2、C# 的三大特性?

封裝、繼承、多態。

3、什么是繼承?

就是子類實現父類的屬性和方法,並在此基礎上進行相關的擴展。

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

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

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

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

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

5、a=10,b=15,請在不使用第三方變量的情況下,把a、b的值互換

int a=a+b; int b=a-b;int a=a-b;

6、session喜歡丟值且占內存,Cookis不安全,請問用什么辦法代替這兩種原始的方法

redis 或者 memcache。當然,微軟也提供了解決方案。iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式。

7、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?

會執行,在return前執行。

8、XML 與 HTML 的主要區別

1. XML是區分大小寫字母的,HTML不區分。 

2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那么你可以省略</p>或者</li>之類的結束 標記。在XML中,絕對不能省略掉結束標記。 

3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符作為結尾。這樣分析器就知道不用 查找結束標記了。 

4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。 

5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。

9、什么是DDD?什么是ATDD?什么是TDD?什么是BDD?

DDD:領域驅動開發(Domain Drive Design)

ATDD:驗收測試驅動開發(Acceptance Test Driven Development)

TDD:測試驅動開發(Test-Driven Development)

BDD:行為驅動開發(Behavior Driven Development)

10.IOC容器?

1. IOC即控制反轉,是一種設計思想,在之前的項目中,當我們需要一個對象時,需要new一個對象,而IOC的設計思想是我們將需要的對象注入到一個容器中,就會獲得我們所需要的資源 。

2. IOC和DI IOC是控制反轉,DI是依賴注入,控制反轉的解釋有些模棱兩可,而依賴注入就很明確,我們將需要的對象注入到容器中,獲取所需要的資源。

3. IOC控制反轉:正常情況下程序開發是上端調用下端,依賴下端,依賴倒置原則告訴我們,上端不要依賴下端,要依賴抽象,上端只依賴抽象,細節交給第三方工廠(容器)來決定,這就是IOC,就是控制反轉——使系統架構可以更穩定,支持擴展。

11、什么是切面?切面能實現什么?

1. AOP即面向切面編程,是OOP編程的有效補充。

2. 使用AOP技術,可以將一些系統性相關的編程工作,獨立提取出來,獨立實現,然后通過切面切入進系統。從而避免了在業務邏輯的代碼中混入很多的系統相關的邏輯——比如權限管理,事物管理,日志記錄等等。這些系統性的編程工作都可以獨立編碼實現,然后通過AOP技術切入進系統即可。從而達到了 將不同的關注點分離出來的效果。

12、什么是委托,事件是不是一種委托?

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

2. 委托可以理解為指向一個函數的引用。

3. 事件是一種特殊的委托。

delegate <函數返回類型> <委托名> (<函數參數>)

13.c#多線程是什么?

多線程的優點:可以同時完成多個任務;可以使程序的響應速度更快;可以節省大量時間進行處理任務;可以隨時停止任務;可以設置每個任務的優先級,以優化程序性能。

14.WebApi概述

Web API是在.NET Framework之上構建的Web的API的框架,Web API是一個編程接口,用於操作可通過標准HTTP方法和標頭訪問的系統,Web API需要基於.NET 3.5或更高版本才可以進行開發

15.什么是WebService

webservice是一種跨平台,跨語言的規范,用於不同平台,不同語言開發的應用之間的交互,是基於網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范。

16.存儲過程是什么?有什么用?有什么優點?用什么來調用?

存儲過程是預編譯,安全性高,也是大大提高了效率,存儲過程可以重復使用以減少數據庫開發人員的工作量,復雜的邏輯我們可以使用存儲過程完成,在存儲過程中我們可以使用臨時表,還可以定義變量,拼接sql語句,調用時,只需執行這個存儲過程名,傳入我們所需要的參數即可。

17.何為觸發器?

觸發器是一種特殊的存儲過程,主要是通過事件觸發而被執行。它可以強化約束來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以級聯運算。

常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。

18.什么叫做泛型?

只是為了去掉重復代碼,應對不同類型的共同需求。

19. C#中值類型和引用類型分別有哪些? 

值類型:結構體(數值類型,bool型,用戶定義的結構體),枚舉,可空類型。

引用類型:數組,用戶定義的類、接口、委托,object,字符串。

 20.列舉ASP.NET頁面之間傳遞值的幾種方式。

1. session(viewstate)簡單,但易丟失

2. application 全局

3. cookie 簡單,但可能不支持,可能被偽造

4. input type="hidden" 簡單,可能被偽造

5. url參數簡單,顯示於地址欄,長度有限

6. 數據庫穩定,安全,但性能相對弱

21 .NET的錯誤處理機制是什么?

.net錯誤處理機制采用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch為止。

22.C#可否對內存進行直接的操作?

在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法。

23. ADO.NET相對於ADO等主要有什么改進?

1:ado.net不依賴於ole db提供程序,而是使用.net托管提供的程序,

2:不使用com

3:不在支持動態游標和服務器端游

4:,可以斷開connection而保留當前數據集可用

5:強類型轉換

6:xml支持

24.如果在一個B/S結構的系統中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進行處理?

this.Server.Transfer、Response.Redirect()、QueryString

25. .NET中讀寫數據庫需要用到那些類?他們的作用?

Connection連接對象,Command執行命令和存儲過程,DataReader向前只讀的數據流,DataAdapter適配器,支持增刪查詢,DataSet數據級對象,相當與內存里的一張或多張表。

26.簡要談一下您對微軟.NET架構下remoting和webservice兩項技術的理解以及實際中的應用。

WS主要是可利用HTTP,穿透防火牆。而Remoting可以利用TCP/IP,二進制傳送提高效率。

remoting是.net中用來跨越machine,process, appdomain進行方法調用的技術,對於三成結構的程序,就可以使用remoting技術來構建.它是分布應用的基礎技術.相當於以前的DCOM。

Web Service是一種構建應用程序的普通模型,並能在所有支持internet網通訊的操作系統上實施。Web Service令基於組件的開發和web的結合達到最佳,基於組件的對象模型。

27.什么是反射?

動態獲取程序集信息。

28.override與重載的區別?

重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要。

Override是子類對基類中函數的重寫。為了適應需要。

29.裝箱和拆箱的概念和原理

裝箱是將值類型轉化為引用類型的過程;

拆箱是將引用類型轉化為值類型的過程

30.Session有什么重大BUG,微軟提出了什么方法加以解決?

是iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件。

 31.請編程實現一個冒泡排序算法?

int[] array = { 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 };
int temp = 0;
for (int i = 0; i < array.Length-1; i++)
{
  for (int j = i+1; j < array.Length; j++)
  {
    if (array[j] < array[i])
    {
      temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
  }
}
Console.WriteLine($"冒泡排序");
for (int i = 0; i < array.Length; i++)
{
  Console.WriteLine($"{array[i]}");
}

 

32.產生一個int數組,長度為100,並向其中隨機插入1-100,並且不能重復?

List<int> list = new List<int>();
Random r = new Random();
while (true)
{
  int temp2 = r.Next(1, 101);
  if (list.Count == 100)
  {
    break;
  }
  //不存在則添加
  if (!list.Contains(temp2))
  {
    list.Add(temp2);
  }
}
for (int i = 0; i < list.Count; i++)
{
  Console.Write(list[i] + ",");
}


33.查出學生總的分數

SELECT TOP (200) stu_name, SUM(fenshu) AS zong FROM student GROUP BY stu_name

34.SQL查詢重復值

select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1)

35、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄

delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

36、查找表中多余的重復記錄(多個字段) 

select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

37、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

 

總結:

面試了10多家基本都有筆試,然后就是談項目,做了哪些功能,遇到什么難題,怎么解決的,有什么收獲,怎么優化,平時是否有關注技術熱點等等。

 

最大的收獲其實就是在面試的過程中所作的准備和思考,有些問題平常可能不容易發現的,但是面試官問了就知道自己缺在哪里了,然后下來查資料補補,多復習形成長期記憶,然后靜等結果,調整心態;應當是有愈挫愈勇的心態,繼續投簡歷,繼續反思,繼續學習。

 

 

注:

1、軟件代碼為原創,如需轉載,請注明出處;

2、如果文中有什么錯誤,歡迎指出,謝謝!

 作者:歐陽曉飛
 博客地址: http://www.cnblogs.com/ouyang6994/
 本文地址: https://www.cnblogs.com/ouyang6994/p/10952606.html
 聲明:本博客原創文字允許轉載,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

 


免責聲明!

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



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