高級(jí)工程師面試題_第1頁(yè)
高級(jí)工程師面試題_第2頁(yè)
高級(jí)工程師面試題_第3頁(yè)
高級(jí)工程師面試題_第4頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.net軟件工程師面試題基礎(chǔ)題:1. 簡(jiǎn)述 string 、 ArrayList 、 List 的區(qū)別。數(shù)組:優(yōu)點(diǎn) :o 數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,索引速度非???;o 賦值和修改元素也很簡(jiǎn)單;不足:o 兩個(gè)數(shù)據(jù)之間插入數(shù)據(jù)比較麻煩;o 聲明數(shù)組的時(shí)候,必須指明數(shù)組的長(zhǎng)度,數(shù)組長(zhǎng)度過(guò)長(zhǎng)會(huì)造成內(nèi)存浪費(fèi),數(shù)組的長(zhǎng)度過(guò)短,會(huì)造成數(shù)據(jù)溢出錯(cuò)誤。ArrayList:優(yōu)點(diǎn):o .net framework提供的用于數(shù)據(jù)存儲(chǔ)和檢索的專用類o大小依據(jù)存儲(chǔ)的數(shù)據(jù)來(lái)動(dòng)態(tài)擴(kuò)展和收縮o 繼承 IList ,可以方便的進(jìn)行數(shù)據(jù)的添加、插入和刪除缺點(diǎn):o允許插入不同類型的數(shù)據(jù),都當(dāng)做object類型處理o 數(shù)據(jù)處理時(shí)可能出

2、現(xiàn)類型不匹配的錯(cuò)誤o 存在裝箱(值 =引用)拆箱的操作,會(huì)帶來(lái)很大的性能損耗List :優(yōu)點(diǎn):.o 聲明 List 集合時(shí),需要聲明集合內(nèi)數(shù)據(jù)的對(duì)象類型o 避免了類型安全問(wèn)題和裝箱拆箱的性能問(wèn)題2. 簡(jiǎn)述裝箱和拆箱操作中的性能損耗是如何產(chǎn)生的。3. 簡(jiǎn)述對(duì) ASP.NET中的事件機(jī)制的理解。4. 在一個(gè) ASP.NET的三層結(jié)構(gòu)系統(tǒng)中,以登錄操作為例,簡(jiǎn)述在各層中如何組織代碼。5. 簡(jiǎn)述相比 DATASET,實(shí)體類在 WEB項(xiàng)目中的優(yōu)點(diǎn)與缺點(diǎn)。6. 簡(jiǎn)述 GC是如何工作的。Java 采用 VM( VirtualMachine )機(jī)制,由VM來(lái)管理程序的運(yùn)行當(dāng)然也包括對(duì)GC管理。 90年代末期

3、.NET 出現(xiàn)了, .NET 采用了和 Java 類似的方法由CLR(Common Language Runtime)來(lái)管理。Garbage Collector(垃圾收集器,在不至于混淆的情況下也成為GC)以應(yīng)用程序的root為基礎(chǔ), 遍歷應(yīng)用程序在Heap 上動(dòng)態(tài)分配的所有對(duì)象2 ,通過(guò)識(shí)別它們是否被引用來(lái)確定哪些對(duì)象是已經(jīng)死亡的、哪些仍需要被使用。已經(jīng)不再被應(yīng)用程序的root或者別的對(duì)象所引用的對(duì)象就是已經(jīng)死亡的對(duì)象,即所謂的垃圾,需要被回收。這就是GC工作的原理。為了實(shí)現(xiàn)這個(gè)原理,GC有多種算法。比較常見(jiàn)的算法有Reference Counting,Mark Sweep,Copy Col

4、lection等等。目前主流的虛擬系統(tǒng).NET CLR, Java VM 和 Rotor 都是采用的MarkSweep算法。Java 的內(nèi)存管理實(shí)際就是對(duì)象的管理,其中包括對(duì)像的分配和釋放。對(duì)于程序員來(lái)說(shuō),分配對(duì)象使用new 關(guān)鍵字,釋放對(duì)象時(shí)只是將對(duì)象賦值為null ,讓程序員不能夠再訪問(wèn)到這個(gè)對(duì)象,該對(duì)象被稱為“不可達(dá)”。GC將負(fù)責(zé)回收所有“不可達(dá)”對(duì)象的內(nèi)存空間。根據(jù) GC的工作原理, 可以通過(guò)一些技巧和方式讓GC運(yùn)行更快, 高效而又合理。 編程建議如下:.o 盡早釋放無(wú)用對(duì)象的引用,特別注意一些復(fù)雜對(duì)象,如數(shù)組,隊(duì)列等。對(duì)于此類對(duì)象, GC回收它們的效率一般較低,如果程序允許,應(yīng)盡早將

5、不用的引用對(duì)象賦為null,這樣可以加速GC的工作。o盡量少用finalize函數(shù)。 finalize是 java 提供給程序員用來(lái)釋放對(duì)象或資源的函數(shù), 但是它會(huì)加大GC的工作量, 因此盡量少采用finalize函數(shù)回收資源。當(dāng)程序有一定的等待時(shí)間,程序員可以手動(dòng)執(zhí)行System.gc(),通知 GC運(yùn)行,但是java語(yǔ)言規(guī)范并不保證GC一定會(huì)執(zhí)行。.NET 的 GC機(jī)制有這樣兩個(gè)問(wèn)題:o 首先, GC并不是能釋放所有的資源。它不能自動(dòng)釋放非托管資源。o 第二, GC并不是實(shí)時(shí)性的,這將會(huì)造成系統(tǒng)性能上的瓶頸和不確定性。o GC并不是實(shí)時(shí)性的,這會(huì)造成系統(tǒng)性能上的瓶頸和不確定性。所以有了ID

6、isposable接口, IDisposable接口定義了Dispose 方法,這個(gè)方法用來(lái)供程序員顯式調(diào)用以釋放非托管資源。使用using 語(yǔ)句可以簡(jiǎn)化資源管理7. 簡(jiǎn)述 3 個(gè)熟悉的設(shè)計(jì)模式。簡(jiǎn)單工廠模式(只適用于業(yè)務(wù)簡(jiǎn)單的情況):有三種角色組成:工廠類角色(只有一個(gè)工廠類)抽象產(chǎn)品角色具體產(chǎn)品角色工廠方法模式(當(dāng)產(chǎn)品種類非常多時(shí)會(huì)出現(xiàn)大量與之對(duì)應(yīng)的工廠類):有四種角色抽象工廠角色具體工廠角色抽象產(chǎn)品角色具體產(chǎn)品角色.簡(jiǎn)單工廠和工廠方法結(jié)合能夠減少工廠類。使用這兩種模式能夠提高擴(kuò)展性和維護(hù)性抽象工廠模式(需要?jiǎng)?chuàng)建的對(duì)象比較復(fù)雜):滿足條件:系統(tǒng)中有多個(gè)產(chǎn)品族,而系統(tǒng)一次只可能消費(fèi)其中一族產(chǎn)

7、品同屬于同一個(gè)產(chǎn)品族的產(chǎn)品一起使用時(shí)。組成角色:抽象工廠角色具體工廠角色抽象產(chǎn)品角色具體產(chǎn)品角色8. 簡(jiǎn)述 UDP協(xié)議特點(diǎn),以及如何提高 UDP傳輸可靠性。9. 簡(jiǎn)述 .NET2.0 , .NET3.0 , .NET3.5 各版本中推出的新特性。10. const 和 readonly 的區(qū)別我們都知道, const 和 staticreadonly的確很像:通過(guò)類名而不是對(duì)象名進(jìn)行訪問(wèn),在程序中只讀等等。在多數(shù)情況下可以混用。二者本質(zhì)的區(qū)別在于,const 的值是在編譯期間確定的,因此只能在聲明時(shí)通過(guò)常量表達(dá)式指定其值。而staticreadonly 是在運(yùn)行時(shí)計(jì)算出其值的, 所以還可以通過(guò)

8、靜態(tài)構(gòu)造函數(shù)來(lái)賦值。明白了這個(gè)本質(zhì)區(qū)別, 我們就不難看出下面的語(yǔ)句中 static readonly和 const 能否互換了:1. static readonly 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

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

10、ly只能用來(lái)修飾類的field,不能修飾局部變量,也不能修飾 property等其他類成員。6. 錯(cuò)誤:如果在astr 前加上 const或者 const 改為 readonly即可;總結(jié): 1.const、 readonly 和 static readonly定義的常量,指定初始值后( 包括在構(gòu)造函數(shù)內(nèi)指定的初始值) 將不可更改,可讀不可寫(xiě);2.const定義時(shí)必須指定初始值,而 readonly定義時(shí)可以不進(jìn)行初始化(MS建議在定義時(shí)初始值 ), 同時(shí)也可以在構(gòu)造函數(shù)內(nèi)指定初始值,并以構(gòu)造函數(shù)內(nèi)指定的值為準(zhǔn);3.const和 staticreadonly定義的常量是靜態(tài)的,只能由類直接訪問(wèn)

11、;而 readonly定義的常量是非靜態(tài)的,只能由實(shí)例對(duì)象訪問(wèn);4.staticreadonly常量,如果在構(gòu)造函數(shù)內(nèi)指定初始值,則必須是靜態(tài)無(wú)參構(gòu)造函數(shù);5.const是編譯時(shí)常量,readonly是運(yùn)行時(shí)常量;cosnt 較高效, readonly較靈活。在應(yīng)用上以staticreadonly代替 const ,以平衡 const 在靈活性上的不足,同時(shí)克服編譯器優(yōu)化 cosnt 性能,所帶來(lái)的程序集引用不一致問(wèn)題;算法題: ( 以下三題不用作答,想好思路面試談即可).1.一個(gè)整數(shù)數(shù)列,元素取值可能是065535 中的任意一個(gè)數(shù),相同數(shù)值不會(huì)重復(fù)出現(xiàn)。0是例外,可以反復(fù)出現(xiàn)。請(qǐng)?jiān)O(shè)計(jì)一個(gè)算法

12、,當(dāng)你從該數(shù)列中隨意選取5 個(gè)數(shù)值,判斷這5 個(gè)數(shù)值是否連續(xù)相鄰。注意:- 5個(gè)數(shù)值允許是亂序的。比如:87506- 0可以通配任意數(shù)值。比如:87506中的 0可以通配成9或者 4- 0 可以多次出現(xiàn)。- 復(fù)雜度如果是 O(n2) 則不得分。解題思路:1.取 5 個(gè)數(shù)中非0 的最大數(shù)和最小數(shù),之差不大于4 則連續(xù),否則不連續(xù)。2.要增加兩個(gè)特例:1 )全 0 算連續(xù), 2)只有一個(gè)非 0 算連續(xù)代碼實(shí)例javaview plaincopyprint?1.<span style= "font-size:14px;"><span style= "f

13、ont-family:MicrosoftYaHei;font-size:12px;color:#333333;"><span style= "font-size:12px;">#include<iostream>2. #include<stdlib.h>3. using namespace std;4.5.intcheck( intarry5)6. 7.intmax=0,min= 65535;8. int zerocount= 0;9.for ( inti= 0;i< 5;i+)10. 11.if (arryi=0)

14、12.zerocount+;13.else14.15.if(arryi>max)16.max=arryi;17.if(arryi<min).18.min=arryi;19.20. 21. if (zerocount>= 4)22.return1;23. else24. 25.if (max-min<= 4)26.return1;27.else28.return0;29. 30. 31.32. int main()33. 34. int arry 5;35. cout<< " 一個(gè)整數(shù)數(shù)列,元素取值可能是 065535 中的任意一個(gè)數(shù),相同數(shù)值不會(huì)重

15、復(fù)出現(xiàn);0 是例外,可以反復(fù)出現(xiàn)"<<endl;36.for ( inti= 0;i< 5;i+)37.cin>>arryi;38. int p=check(arry);39. if (p)40.cout<< " 連續(xù) " <<endl;41. else42.cout<< " 不連續(xù) "<<endl;43. system( "pause" );44. </span></span></span>輸入: 12305輸

16、出:連續(xù)2. 設(shè)計(jì)一個(gè)在一百萬(wàn)個(gè)數(shù)字中求十個(gè)最大的數(shù)算法javaview plaincopyprint?1.<span style= "font-size:14px;"><span style= "font-family:MicrosoftYaHei;font-size:12px;color:#333333;"><spanstyle= "font-size:12px;">int dataM;2.inttopN + 1;3.4.5.voidtop_N().6. 7.top 0= std:numeric

17、_limits<int >:max();/ Set a "guard"onthe boundary toreducecomparisiontimes.8.for( inti=1;i<= N;+i)topi= std:numeric_limits<int>:min();9.for( intj=0;j< M;+j)10. 11.for( intk=N; topk < dataj;-k) topk= topk - 1;12.topk+1=dataj;13. 14. </span></span></span&g

18、t;3.有如下輸入:若干個(gè)由大寫(xiě)英文字母構(gòu)成的單詞,以, 號(hào)隔開(kāi)。如“ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB”。 寫(xiě)一段程序, 從輸入中尋找由相同字符構(gòu)成( 重復(fù)字符出現(xiàn)次數(shù)也是一樣) 的單詞組輸出。如以上輸入,則輸出:第 1 組: ABCCD,CDCAB第 2 組: CDA,DCA,ADCjavaview plaincopyprint?1.<span style= "font-size:14px;"><span style= "font-family:MicrosoftYaHei;font-size:12px;colo

19、r:#333333;"><span style= "font-size:12px;">strings = "ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"2.varquery= s.Split(',').GroupBy(x=> x.OrderBy(y=> y);3.foreach(variteminquery)4.Console.WriteLine(string.Join("," ,item.ToArray();</span></span&g

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

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

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

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

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

25、對(duì)象給Client,這樣, Client不就需要知道它操作的是那個(gè)具體工廠。 CreateFactory方法采用反射技術(shù),這樣,不需要修改CreateFactory方法的代碼,就可以支持以后添加新的具體工廠。4, 工廠類返回IMediaA 接口給 Client, Client操作 IMediaA 接口而不需要知道它具體使用的是 MediaPlayerClassA還是 RealPlayerClassA的實(shí)例。序列圖如下:.二、第二題的解:Flyweight模式我采用了Flyweight(橋梁)模式,先上圖:.設(shè)計(jì)的重點(diǎn)是:1, 把 AirConditioner和它支持的Model 分離開(kāi)來(lái),在

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論