.net高級工程師面試題_第1頁
.net高級工程師面試題_第2頁
.net高級工程師面試題_第3頁
.net高級工程師面試題_第4頁
.net高級工程師面試題_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、.net軟件工程師面試題基礎題:1.簡述string、ArrayList、List的區(qū)別。數(shù)組:        優(yōu)點 :o 數(shù)組在內(nèi)存中是連續(xù)存儲的,索引速度非??欤籵 賦值和修改元素也很簡單;        不足:o 兩個數(shù)據(jù)之間插入數(shù)據(jù)比較麻煩;o 聲明數(shù)組的時候,必須指明數(shù)組的長度,數(shù)組長度過長會造成內(nèi)存浪費,數(shù)組的長度過短,會造成數(shù)據(jù)溢出錯誤。ArrayList:        優(yōu)點:o .net framework 提供的用于數(shù)據(jù)存儲和檢索的專用類o 大小依據(jù)存儲

2、的數(shù)據(jù)來動態(tài)擴展和收縮o 繼承IList,可以方便的進行數(shù)據(jù)的添加、插入和刪除        缺點:o 允許插入不同類型的數(shù)據(jù),都當做object類型處理o 數(shù)據(jù)處理時可能出現(xiàn)類型不匹配的錯誤o 存在裝箱(值=引用)拆箱的操作,會帶來很大的性能損耗List:       優(yōu)點:o 聲明List集合時,需要聲明集合內(nèi)數(shù)據(jù)的對象類型o 避免了類型安全問題和裝箱拆箱的性能問題2.簡述裝箱和拆箱操作中的性能損耗是如何產(chǎn)生的。3.簡述對ASP.NET中的事件機制的理解。4.在一個ASP.NET的三層結(jié)構(gòu)系統(tǒng)中,以登錄操作為例

3、,簡述在各層中如何組織代碼。5.簡述相比DATASET,實體類在WEB項目中的優(yōu)點與缺點。6.簡述GC是如何工作的。Java采用VM(Virtual Machine)機制,由VM來管理程序的運行當然也包括對GC管理。90年代末期.NET出現(xiàn)了,.NET采用了和Java類似的方法由CLR(Common Language Runtime)來管理。Garbage Collector(垃圾收集器,在不至于混淆的情況下也成為GC)以應用程序的root為基礎,遍歷應用程序在Heap上動態(tài)分配的所有對象2,通過識別它們是否被引用來確定哪些對象是已經(jīng)死亡的、哪些仍需要被使用。已經(jīng)不再被應用程序的root或者別

4、的對象所引用的對象就是已經(jīng)死亡的對象,即所謂的垃圾,需要被回收。這就是GC工作的原理。為了實現(xiàn)這個原理,GC有多種算法。比較常見的算法有Reference Counting,Mark Sweep,Copy Collection等等。目前主流的虛擬系統(tǒng).NET CLR,Java VM和Rotor都是采用的Mark Sweep算法。 Java的內(nèi)存管理實際就是對象的管理,其中包括對像的分配和釋放。對于程序員來說,分配對象使用new關鍵字,釋放對象時只是將對象賦值為null,讓程序員不能夠再訪問到這個對象,該對象被稱為“不可達”。GC將負責回收所有“不可達”對象的內(nèi)存空間。根據(jù)GC的工作原

5、理,可以通過一些技巧和方式讓GC運行更快,高效而又合理。編程建議如下:o 盡早釋放無用對象的引用,特別注意一些復雜對象,如數(shù)組,隊列等。對于此類對象,GC回收它們的效率一般較低,如果程序允許,應盡早將不用的引用對象賦為null,這樣可以加速GC的工作。o 盡量少用finalize函數(shù)。finalize是java提供給程序員用來釋放對象或資源的函數(shù),但是它會加大GC的工作量,因此盡量少采用finalize函數(shù)回收資源。   當程序有一定的等待時間,程序員可以手動執(zhí)行System.gc(),通知GC運行,但是java語言規(guī)范并不保證GC一定會執(zhí)行。.NET的GC機制有這樣兩個問題:o 首

6、先,GC并不是能釋放所有的資源。它不能自動釋放非托管資源。o 第二,GC并不是實時性的,這將會造成系統(tǒng)性能上的瓶頸和不確定性。o GC并不是實時性的,這會造成系統(tǒng)性能上的瓶頸和不確定性。所以有了IDisposable接口,IDisposable接口定義了Dispose方法,這個方法用來供程序員顯式調(diào)用以釋放非托管資源。使用using語句可以簡化資源管理7.簡述3個熟悉的設計模式。              簡單工廠模式(只適用于業(yè)務簡單的情況):有三種角色組成:· 工廠類角色(只有一個工廠類)· 抽象產(chǎn)品

7、角色· 具體產(chǎn)品角色 工廠方法模式(當產(chǎn)品種類非常多時會出現(xiàn)大量與之對應的工廠類):有四種角色· 抽象工廠角色· 具體工廠角色· 抽象產(chǎn)品角色· 具體產(chǎn)品角色簡單工廠和工廠方法結(jié)合能夠減少工廠類。使用這兩種模式能夠提高擴展性和維護性抽象工廠模式(需要創(chuàng)建的對象比較復雜):滿足條件:· 系統(tǒng)中有多個產(chǎn)品族,而系統(tǒng)一次只可能消費其中一族產(chǎn)品· 同屬于同一個產(chǎn)品族的產(chǎn)品一起使用時。組成角色:· 抽象工廠角色· 具體工廠角色· 抽象產(chǎn)品角色· 具體產(chǎn)品角色8.簡述UDP協(xié)議特點,以及

8、如何提高UDP傳輸可靠性。9.簡述.NET2.0,.NET3.0,.NET3.5各版本中推出的新特性。10. const和readonly的區(qū)別我們都知道,const和static readonly的確很像:通過類名而不是對象名進行訪問,在程序中只讀等等。在多數(shù)情況下可以混用。二者本質(zhì)的區(qū)別在于,const的值是在編譯期間確定的,因此只能在聲明時通過常量表達式指定其值。而static readonly是在運行時計算出其值的,所以還可以通過靜態(tài)構(gòu)造函數(shù)來賦值。明白了這個本質(zhì)區(qū)別,我們就不難看出下面的語句中static readonly和const能否互換了:1. static read

9、only MyClass myins = new MyClass();2. static readonly MyClass myins = null;3. static readonly B = 10;   static readonly A = B * 20;4. static readonly int constIntArray = new int 1, 2, 3;5. void SomeFunction()         const int a = 10;      .   6

10、.private static string astr="abcd"  private const string str = astr+"efg"1:不可以換成const。new操作符是需要執(zhí)行構(gòu)造函數(shù)的,所以無法在編譯期間確定2:可以換成const。我們也看到,Reference類型的常量(除了String)只能是Null。3:可以換成const。我們可以在編譯期間很明確的說,A等于200。4:不可以換成const。道理和1是一樣的,雖然看起來1,2,3的數(shù)組的確就是一個常量。5:不可以換成readonly,readonly只能用來修飾類的f

11、ield,不能修飾局部變量,也不能修飾property等其他類成員。6.錯誤:如果在astr前加上const或者const改為readonly即可;總結(jié):1.const、readonly和static readonly定義的常量,指定初始值后(包括在構(gòu)造函數(shù)內(nèi)指定的初始值) 將不可更改,可讀不可寫;          2.const定義時必須指定初始值,而readonly定義時可以不進行初始化(MS建議在定義時初始值),同時也可以在構(gòu)造函數(shù)內(nèi)指定初始值,          并以構(gòu)造函數(shù)內(nèi)指定的值

12、為準;         3.const和static readonly定義的常量是靜態(tài)的,只能由類直接訪問;而readonly定義的常量是非靜態(tài) 的,只能由實例對象訪問;           4.static readonly常量,如果在構(gòu)造函數(shù)內(nèi)指定初始值,則必須是靜態(tài)無參構(gòu)造函數(shù);         5.const是編譯時常量,readonly是運行時常量;cosnt較高效,readonly較靈活。在應用上以static readon

13、ly代替const,以平衡const在靈活性上的不足, 同時克服編譯器優(yōu)化cosnt性能,所帶來的程序集引用不一致問題; 算法題:(以下三題不用作答,想好思路面試談即可)1. 一個整數(shù)數(shù)列,元素取值可能是065535中的任意一個數(shù),相同數(shù)值不會重復出現(xiàn)。0是例外,可以反復出現(xiàn)。請設計一個算法,當你從該數(shù)列中隨意選取5個數(shù)值,判斷這5個數(shù)值是否連續(xù)相鄰。注意:- 5個數(shù)值允許是亂序的。比如: 8 7 5 0 6- 0可以通配任意數(shù)值。比如:8 7 5 0 6 中的0可以通配成9或者4- 0可以多次出現(xiàn)。- 復雜度如果是O(n2)則不得分。解題思路:1.取5個數(shù)中非0的最大數(shù)和

14、最小數(shù),之差不大于4則連續(xù),否則不連續(xù)。 2.要增加兩個特例: 1)全0 算連續(xù),2)只有一個非0算連續(xù)代碼實例 java view plain copy print?1. <span style="font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:12px;color:#333333;"><span style="font-size:12p

15、x;">#include<iostream>    2. #include<stdlib.h>    3. using namespace std;    4.     5. int check(int arry5)    6.     7.    

16、 int max=0,min=65535;    8.     int zerocount=0;    9.     for(int i=0;i<5;i+)    10.         11.       

17、60; if(arryi=0)    12.             zerocount+;    13.         else    14.           &

18、#160; 15.             if(arryi>max)    16.                 max=arryi;    17.       

19、;      if(arryi<min)    18.                 min=arryi;    19.             20.  

20、60;      21.     if(zerocount>=4)    22.         return 1;    23.     else    24.       

21、0; 25.         if(max-min<=4)    26.             return 1;    27.         else     

22、;28.             return 0;    29.         30.     31.     32. int main()    33.     34. &#

23、160;   int arry5;    35.     cout<<"一個整數(shù)數(shù)列,元素取值可能是065535中的任意一個數(shù),相同數(shù)值不會重復出現(xiàn);0是例外,可以反復出現(xiàn)"<<endl;    36.     for(int i=0;i<5;i+)    37.    

24、;     cin>>arryi;    38.     int p=check(arry);    39.     if(p)    40.         cout<<"連續(xù)"<<endl; 

25、;   41.     else    42.         cout<<"不連續(xù)"<<endl;    43.     system("pause");    44.  </span></spa

26、n></span>  輸入: 1 2 3 0 5輸出:連續(xù)2. 設計一個在一百萬個數(shù)字中求十個最大的數(shù)算法java view plain copy print?1. <span style="font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:12px;color:#333333;"><span style="font-siz

27、e:12px;">int dataM;  2. int topN + 1;  3.   4.   5. void top_N()  6.   7.     top0 = std:numeric_limits<int>:max(); / Set a "guard" on&#

28、160;the boundary to reduce comparision times.  8.     for (int i = 1; i <= N; +i) topi = std:numeric_limits<int>:min();  9.     for (int j

29、60;= 0; j < M; +j)  10.       11.         for (int k = N; topk < dataj; -k) topk = topk - 1;  12.   

30、0;     topk + 1 = dataj;  13.       14. </span></span></span>  3. 有如下輸入:若干個由大寫英文字母構(gòu)成的單詞,以,號隔開。如“ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB”。 寫一段程序,從輸入中尋找由相同字符構(gòu)成(重復字符出現(xiàn)次數(shù)也是一樣)的單詞組輸出。如以上輸入,則輸出:第1組:AB

31、CCD,CDCAB第2組:CDA,DCA,ADCjava view plain copy print?1. <span style="font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:12px;color:#333333;"><span style="font-size:12px;">string s = "

32、;ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"  2. var query = s.Split(',').GroupBy(x => x.OrderBy(y => y);  3. foreach (var item in query)  4. Console.WriteLine(string.Join(",", item.ToArray()

33、;</span></span></span>  項目&管理:(以下兩題不用作答,想好思路面試談即可)1.假設你做為一個開發(fā)團隊的領導者,經(jīng)過長時間的磨合,有了一只10人左右的不錯的團隊。其中每個成員都在其職位上有不可或缺的作用?,F(xiàn)由于一些原因,需要你辭退其中一人。你會如何處理這件事情?2.有一套公司自己開發(fā)供本公司使用的CRM系統(tǒng),其中的權(quán)限控制過于簡單?,F(xiàn)需要你重新設計其權(quán)限系統(tǒng),你會如何開展這個工作?1、文件路徑文本轉(zhuǎn)換 編寫一個函數(shù),輸入?yún)?shù):·頁面文件的虛擬路徑(string pageVirPath,例如:/ab

34、c/def/page.aspx)·圖片文件的虛擬路徑(string imgVirPath,例如:/ghi/image/pic .gif)處理:計算出圖片文件相對頁面文件的相對路徑,例如:././ghi/image/ pic .gif返回:相對路徑要求:a、不要求嚴格的C#語言表述,可適當使用偽碼,著重要表達清楚處理邏輯;b、盡量使用正則表達式2、DataTable內(nèi)數(shù)據(jù)轉(zhuǎn)換 編寫一個函數(shù),輸入?yún)?shù):·源數(shù)據(jù)表(DataTable srcTable),該表中已包含int型數(shù)據(jù)列”isSys”,數(shù)據(jù)為 0或-1,處理:直接處理源數(shù)據(jù)表,將”isSys” 數(shù)據(jù)列替換為string

35、型的”系統(tǒng)” 數(shù)據(jù)列,當”isSys” 列中值為0,則”系統(tǒng)” 列值為空字符串,當”isSys” 列中值為-1,則”系統(tǒng)” 列值為”系統(tǒng)”。返回:操作是否成功(bool);要求:a、不要求嚴格的C#語言表述,可適當使用偽碼,著重要表達清楚處理邏輯;b、不拋出任何異常(包括.net異常)設計模式面試題:1, Windows Media Player和RealPlayer是常用的媒體播放器,它們的API結(jié)構(gòu)和調(diào)用方法非常不同,現(xiàn)在你的應用需要同時支持調(diào)用這2種播放器的API。你要怎么設計?2, 現(xiàn)在有一種空調(diào),它支持3種模式:Hot Air,Cool Air 和DoNothing。例如,當選擇Ho

36、t Air模式時,再選擇溫度為20度,空調(diào)將輸送熱風;選擇 Cool Air模式,溫度設置為20度時,將輸送冷風;在選擇DoNothing模式時,空調(diào)什么都不做。 你將考慮如何為空調(diào)設計應用程序?如果將來空調(diào)需要增加支持新的模式呢?一、 第一題的解:適配器模式+抽象工廠模式我采用了抽象工廠模式+適配器模式,先上圖:設計的重點是:1,首先看適配器模式。MediaPlayerClassA和RealPlayerClassA都實現(xiàn)了IMediaA接口。MediaPlayerClassA調(diào)用MediaPlayer的APIs來實現(xiàn)IMediaA接口定義的功能;RealPlayerClassA則調(diào)用Real

37、Player APIs。2,再來看抽象工廠模式。MediaPlayerFactory和RealPlayerFactory繼承自抽象類MediaFactory類,MediaPlayerFactory用來創(chuàng)建MediaPlayer產(chǎn)品族;RealPlayerFactory用來創(chuàng)建RealPlayer產(chǎn)品族。雖然上圖中只畫出了IMediaA接口,但事實上我們可能需要實現(xiàn)多個接口如IMediaB,IMediaC等,這就是這里為什么使用抽象工廠模式。3,抽象類MediaFactory實現(xiàn)了一個靜態(tài)方法CreateFactory,用來創(chuàng)建具體工廠,該方法返回MediaFactory類型的對象給Client

38、,這樣,Client不就需要知道它操作的是那個具體工廠。CreateFactory方法采用反射技術,這樣,不需要修改CreateFactory方法的代碼,就可以支持以后添加新的具體工廠。4,工廠類返回IMediaA接口給Client,Client操作IMediaA接口而不需要知道它具體使用的是MediaPlayerClassA還是RealPlayerClassA的實例。序列圖如下:二、 第二題的解:Flyweight模式我采用了Flyweight(橋梁)模式,先上圖:設計的重點是:1,把AirConditioner和它支持的Model分離開來,在AirConditioner類的實例中保存它支持

39、的所有Model類的實例,這樣做的好處是1)如果只是支持的Model有變化,不需要去實現(xiàn)新的AirConditioner類,只要添加或刪除支持的Model即可。2)多個不同的AirConditioner類可以方便地共享共同的Model類,否則,可能需要復雜的繼承關系才能在不同AirConditioner類之間共享Model。事實上,AirConditioner類和Model類的關系非常類似于橋梁模式中抽象類和實現(xiàn)類的關系。2,采用Flyweight模式。在多個AirCondition實例中,共享Model的實例,這樣可以大大地節(jié)省存儲空間。ModelFactory用于創(chuàng)建Model實例并返回給AirCondition,它保存了一個Model池,每種類型的Model只有一個實例。在Model類中只保存內(nèi)蘊狀態(tài),AirConditioner類保存外蘊狀態(tài),調(diào)用Model類的Execute方法時,需要把IAirCo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論