我的總結2019 ASP.NET面試題

一、什麼是面向對象?

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

二、C# 的三大特性?

封裝、繼承、多態。程序員

三、什麼是繼承?

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

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

private : 私有成員, 在類的內部才能夠訪問。面試

protected : 保護成員,該類內部和繼承類中能夠訪問。redis

public : 公共成員,徹底公開,沒有訪問限制。 算法

internal: 當前程序集內能夠訪問。sql

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

int a=a+b; int b=a-b;int a=a-b;數據庫

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

redis 或者 memcache。固然,微軟也提供瞭解決方案。iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式。編程

七、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?

會執行,在return前執行。c#

八、XML 與 HTML 的主要區別

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

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

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

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

5. 在HTML中,能夠擁有不帶值的屬性名。在XML中,全部的屬性都必須帶有相應的值。

九、什麼是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,就是控制反轉——使系統架構能夠更穩定,支持擴展。

十一、什麼是切面?切面能實現什麼?

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

2. 使用AOP技術,能夠將一些系統性相關的編程工做,獨立提取出來,獨立實現,而後經過切面切入進系統。從而避免了在業務邏輯的代碼中混入不少的系統相關的邏輯——好比權限管理,事物管理,日誌記錄等等。這些系統性的編程工做均可以獨立編碼實現,而後經過AOP技術切入進系統便可。從而達到了 將不一樣的關注點分離出來的效果。

十二、什麼是委託,事件是否是一種委託?

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)

3五、刪除表中多餘的重複記錄,重複記錄是根據單個字段(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)

3六、查找表中多餘的重複記錄(多個字段) 

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

3七、刪除表中多餘的重複記錄(多個字段),只留有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多家基本都有筆試,而後就是談項目,作了哪些功能,遇到什麼難題,怎麼解決的,有什麼收穫,怎麼優化,平時是否有關注技術熱點等等。

 

最大的收穫其實就是在面試的過程當中所做的準備和思考,有些問題日常可能不容易發現的,可是面試官問了就知道本身缺在哪裏了,而後下來查資料補補,多複習造成長期記憶,而後靜等結果,調整心態;應當是有愈挫愈勇的心態,繼續投簡歷,繼續反思,繼續學習。

 

 

注:

一、軟件代碼爲原創,如需轉載,請註明出處;

二、若是文中有什麼錯誤,歡迎指出,謝謝!

 做者:歐陽曉飛
 博客地址: http://www.cnblogs.com/ouyang6994/
 本文地址: http://www.javashuo.com/article/p-vijndyuh-cg.html  聲明:本博客原創文字容許轉載,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
相關文章
相關標籤/搜索