ASP.NET(C#) 面試總結(jié)面試題大全

一、對(duì)于 Web 性能優(yōu)化,您有哪些了解和經(jīng)驗(yàn)嗎?
出現(xiàn)指數(shù):五顆星
主要考點(diǎn):這道題是博主在博客園的新聞里面看到的,回想之前幾年的面試經(jīng)歷,發(fā)現(xiàn)此題出現(xiàn)概率還是比較高的。因?yàn)樗目济婊页V,可以讓面試官很快了解你的技術(shù)涉及面以及這些技術(shù)面的深度。
參考答案:這個(gè)問(wèn)題可以分前端和后端來(lái)說(shuō)。
1、前端優(yōu)化
(1)減少 HTTP 請(qǐng)求的次數(shù)。我們知道每次發(fā)送http請(qǐng)求,建立連接和等待相應(yīng)會(huì)花去相當(dāng)一部分時(shí)間,所以在發(fā)送http請(qǐng)求的時(shí)候,盡量減少請(qǐng)求的次數(shù),一次請(qǐng)求能取出的數(shù)據(jù)就不要分多次發(fā)送。
(2)啟用瀏覽器緩存,當(dāng)確定請(qǐng)求的數(shù)據(jù)不會(huì)發(fā)生變化時(shí),能夠直接讀瀏覽器緩存的就不要向服務(wù)端發(fā)送請(qǐng)求。比如我們ajax里面有一個(gè)參數(shù)能夠設(shè)置請(qǐng)求的時(shí)候是否啟用緩存,這種情況下就需要我們?cè)诎l(fā)送請(qǐng)求的時(shí)候做好相應(yīng)的緩存處理。
(3)css文件放 在<head>里面,js文件盡量放在頁(yè)面的底部。因?yàn)檎?qǐng)求js文件是很花費(fèi)時(shí)間,如果放在<head>里面,就會(huì)導(dǎo)致頁(yè)面的 DOM樹(shù)呈現(xiàn)需要等待js文件加載完成。這也就是為什么很多網(wǎng)站的源碼里面看到引用的文件放在最后的原因。
(4)使用壓縮的css和js文件。這個(gè)不用多說(shuō),網(wǎng)絡(luò)流量小。
(5)如果條件允許,盡量使用CDN的方式引用文件,這樣就能減少網(wǎng)絡(luò)流量。比如我們常用的網(wǎng)站http://www.bootcdn.cn/。
(6)在寫(xiě)js和css的語(yǔ)法時(shí),盡量避免重復(fù)的css,盡量減少js里面循環(huán)的次數(shù),諸如此類(lèi)。
2、后端優(yōu)化:
(1)程序的優(yōu)化:這是一個(gè)很大的話(huà)題,我這里就選幾個(gè)常見(jiàn)的。比如減少代碼的層級(jí)結(jié)構(gòu)、避免循環(huán)嵌套、避免循環(huán)CURD數(shù)據(jù)庫(kù)、優(yōu)化算法等等。
(2)數(shù)據(jù)庫(kù)的優(yōu)化:(由于數(shù)據(jù)庫(kù)優(yōu)化不是本題重點(diǎn),所以可選幾個(gè)主要的來(lái)說(shuō))比如啟用數(shù)據(jù)庫(kù)緩存、常用的字段建索引、盡量避免大事務(wù)操作、避免select * 的寫(xiě)法、盡量不用in和not in 這種耗性能的用法等等。
(3)服務(wù)器優(yōu)化:(這個(gè)可作為可選項(xiàng))負(fù)載均衡、Web服務(wù)器和數(shù)據(jù)庫(kù)分離、UI和Service分離等等。
二、MVC路由理解?(屢見(jiàn)不鮮)
出現(xiàn)指數(shù):五顆星
主要考點(diǎn):此題主要考點(diǎn)是MVC路由的理解。
參考答案:
1、首先我們要理解MVC中路由的作用:url Routing的作用是將瀏覽器的URL請(qǐng)求映射到特定的MVC控制器動(dòng)作。
2、當(dāng)我們?cè)L問(wèn)http://localhost:8080/Home/Index 這個(gè)地址的時(shí)候,請(qǐng)求首先被UrlRoutingModule截獲,截獲請(qǐng)求后,從Routes中得到與當(dāng)前請(qǐng)求URL相符合的RouteData對(duì)象, 將RouteData對(duì)象和當(dāng)前URL封裝成一個(gè)RequestContext對(duì)象,然后從Requestcontext封裝的RouteData中得到 Controller名字,根據(jù)Controller的名字,通過(guò)反射創(chuàng)建控制器對(duì)象,這個(gè)時(shí)候控制器才真正被激活,最后去執(zhí)行控制器里面對(duì)應(yīng)的 action。
三、談?wù)勀阌X(jué)得做的不錯(cuò)系統(tǒng),大概介紹下用到了哪些技術(shù)?
出現(xiàn)指數(shù):五顆星
主要考點(diǎn):這是一道非常開(kāi)放的面試題。博主遇到過(guò)好幾家公司的面試官都問(wèn)道了這個(gè),博主覺(jué)得他們是想通過(guò)這個(gè)問(wèn)題快速了解面試者的技術(shù)水平。此題只要結(jié)合你最近項(xiàng)目用到的技術(shù)談?wù)劸秃昧恕?br />
參考答案:
就拿我之前做過(guò)的一個(gè)項(xiàng)目為例來(lái)簡(jiǎn)單說(shuō)明一下吧。項(xiàng)目分為客戶(hù)端和服務(wù)端,客戶(hù)端分 為BS客戶(hù)端和CS客戶(hù)端,BS客戶(hù)端采用MVC 5.0的框架,CS客戶(hù)端是Winform項(xiàng)目,服務(wù)端使用WebApi統(tǒng)一提供服務(wù)接口,考慮以后可能還要擴(kuò)展手機(jī)端,所以服務(wù)接口的參數(shù)和返回值使用 通用的Json格式來(lái)傳遞數(shù)據(jù)。
1、服務(wù)端采用的面向接口編程,我們?cè)谲浖軜?gòu)的過(guò)程中,層和層之間通過(guò)接口依賴(lài), 下層不是直接給上層提供實(shí)現(xiàn),而是提供接口,具體的實(shí)現(xiàn)以依賴(lài)注入的方式在運(yùn)行的時(shí)候動(dòng)態(tài)注入進(jìn)去。MEF就是實(shí)現(xiàn)依賴(lài)注入的一種組件。它的使用使得UI 層不直接依賴(lài)于BLL層,而是依賴(lài)于中間的一個(gè)IBLL層,在程序運(yùn)行的時(shí)候,通過(guò)MEF動(dòng)態(tài)將BLL里面的實(shí)現(xiàn)注入到UI層里面去,這樣做的好處是減少 了層與層之間的耦合。服務(wù)端的異常里面、權(quán)限驗(yàn)證、日志記錄等通用功能使用了AOP攔截的機(jī)制統(tǒng)一管理,項(xiàng)目中使用的是Postsharp這個(gè)組件,很好 地將通用需求功能從不相關(guān)的類(lèi)當(dāng)中分離出來(lái),提高了代碼的可維護(hù)性。
2、BS的客戶(hù)端采用的jquery+bootstrap 的方式,所有頁(yè)面采用流式布局,能更好適應(yīng)各種不同的終端設(shè)備(PC、手機(jī))。項(xiàng)目中使用了各種功能強(qiáng)大的bootstrap組件,能適應(yīng)各種復(fù)雜的業(yè)務(wù)需求。
四、Js繼承實(shí)現(xiàn)。
出現(xiàn)指數(shù):五顆星
主要考點(diǎn):這道題考驗(yàn)面試者對(duì)js理解的深度。根據(jù)博主的經(jīng)歷,這種題一般在筆試出現(xiàn)的幾率較大,為什么把它放在這里,因?yàn)樗_實(shí)太常見(jiàn)了。其實(shí)js實(shí)現(xiàn)繼承的方式很多,我們只要寫(xiě)好其中一種就好了。
參考答案:原型鏈繼承
//1.定義Persiong函數(shù) function Person(name, age) { this.name = name; this.age = age; } //2.通過(guò)原型鏈給Person添加一個(gè)方法 Person.prototype.getInfo = function () { console.log(this.name + " is " + this.age + " years old!"); } function Teacher(staffId) { this.staffId = staffId; } //3.通過(guò)prototype生命 Teacher繼承Person Teacher.prototype = new Person(); //4.實(shí)例Teacher函數(shù) var will = new Teacher(1000); will.name= "Will"; will.age = 28; //5.調(diào)用父類(lèi)函數(shù) will.getInfo();
五、談?wù)勀銓?duì)設(shè)計(jì)模式的認(rèn)識(shí)?結(jié)合你用得最多的一種設(shè)計(jì)模式說(shuō)說(shuō)它的使用。
出現(xiàn)指數(shù):五顆星
主要考點(diǎn):不用多說(shuō),這題考的就是對(duì)設(shè)計(jì)模式的理解。一般為了簡(jiǎn)單可能會(huì)要求你寫(xiě)一個(gè)單例模式,注意最好是寫(xiě)一個(gè)完整點(diǎn)的,考慮線(xiàn)程安全的那種。然后會(huì)讓你說(shuō)說(shuō)你在項(xiàng)目中什么情況下會(huì)用到這種模式
參考答案:
通用寫(xiě)法
public class Singleton { // 定義一個(gè)靜態(tài)變量來(lái)保存類(lèi)的實(shí)例 private static Singleton uniqueInstance; // 定義一個(gè)標(biāo)識(shí)確保線(xiàn)程同步 private static readonly object locker = new object(); // 定義私有構(gòu)造函數(shù),使外界不能創(chuàng)建該類(lèi)實(shí)例 private Singleton() { } /// <summary> /// 定義公有方法提供一個(gè)全局訪(fǎng)問(wèn)點(diǎn),同時(shí)你也可以定義公有屬性來(lái)提供全局訪(fǎng)問(wèn)點(diǎn) /// </summary> /// <returns></returns> public static Singleton GetInstance() {// 雙重鎖定只需要一句判斷就可以了 if (uniqueInstance == null) { lock (locker) { // 如果類(lèi)的實(shí)例不存在則創(chuàng)建,否則直接返回 if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } } return uniqueInstance; } }
單例模式確保一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)全局訪(fǎng)問(wèn)點(diǎn),它的使用場(chǎng)景比如任務(wù)管理 器整個(gè)系統(tǒng)中應(yīng)該只有一個(gè)把,再比如操作文件的對(duì)象,同一時(shí)間我們只能有一個(gè)對(duì)象**作文件吧。最重要的,比如我們項(xiàng)目中用得非常多的功能→日志記錄,在 一個(gè)線(xiàn)程中,記錄日志的對(duì)象應(yīng)該也只能有一個(gè)吧。單例模式的目的是為了保證程序的安全性和數(shù)據(jù)的唯一性。或者你也可以結(jié)合你使用的其他設(shè)計(jì)模式來(lái)說(shuō)明。
六、IIS的工作原理?
出現(xiàn)指數(shù):四顆星
主要考點(diǎn):此題主要考的是.net framework和IIS是如何結(jié)合呈現(xiàn)頁(yè)面的。這是一個(gè)有點(diǎn)復(fù)雜的過(guò)程,面試的時(shí)候不可能說(shuō)得完整,那么我們就抓住幾個(gè)關(guān)鍵點(diǎn)說(shuō)說(shuō)就可以。其實(shí)博主也不能完全理解這個(gè)過(guò)程,今天正好借這個(gè)機(jī)會(huì)溫**下。
參考答案:
1、當(dāng)客戶(hù)端發(fā)送HTTP Request時(shí),服務(wù)端的HTTP.sys(可以理解為IIS的一個(gè)監(jiān)聽(tīng)組件) 攔截到這個(gè)請(qǐng)求;
2、HTTP.sys 聯(lián)系 WAS 向配置存儲(chǔ)中心請(qǐng)求配置信息。
3、然后將請(qǐng)求傳入IIS的應(yīng)用程序池。
4、檢查請(qǐng)求的后綴,啟動(dòng)aspnet_isapi.dll這個(gè)dll,這個(gè)dll是.net framework里面的,也就是說(shuō)到這一步,請(qǐng)求進(jìn)入了.net framework的管轄范圍。
5、這個(gè)時(shí)候如果是WebForm,開(kāi)始執(zhí)行復(fù)雜的頁(yè)面生命周期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);如果是MVC,則啟動(dòng)mvc的路由機(jī)制,根據(jù)路由規(guī)則為URL來(lái)指定HttpHandler。
6、httpHandler處理請(qǐng)求后,請(qǐng)求結(jié)束,給出Response,客戶(hù)端處理響應(yīng),整個(gè)過(guò)程結(jié)束。
七、Http協(xié)議
出現(xiàn)指數(shù):四顆星
主要考點(diǎn):此題主要考對(duì)于web里面http協(xié)議的理解。
參考答案:
1、http協(xié)議是瀏覽器和服務(wù)器雙方共同遵循的規(guī)范,是一種基于TCP/IP應(yīng)用層協(xié)議。
2、http是一種典型的請(qǐng)求/響應(yīng)協(xié)議??蛻?hù)端發(fā)送請(qǐng)求,請(qǐng)求的內(nèi)容以及參數(shù)存放到請(qǐng)求報(bào)文里面,服務(wù)端收到請(qǐng)求后,做出響應(yīng),返回響應(yīng)的結(jié)果放到響應(yīng)報(bào)文里面。通過(guò)F12可以查看請(qǐng)求報(bào)文和響應(yīng)報(bào)文。
3、http協(xié)議是”無(wú)狀態(tài)”的,當(dāng)客戶(hù)端向服務(wù)端發(fā)送一次http請(qǐng)求后,服務(wù)端收到請(qǐng)求然后返回給客戶(hù)端相應(yīng)的結(jié)果,服務(wù)器會(huì)立即斷開(kāi)連接并釋放資源。在實(shí)際開(kāi)發(fā)過(guò)程中,我們有時(shí)需要“保持”這種狀態(tài),所以衍生出了Session/Cookie這些技術(shù)。
4、http請(qǐng)求的方式主要有g(shù)et/post。
5、http狀態(tài)碼最好記幾個(gè),博主有一次面試就被問(wèn)到了。200(請(qǐng)求成功)、404(請(qǐng)求的資源不存在)、403(禁止訪(fǎng)問(wèn))、5xx(服務(wù)端錯(cuò)誤)
八、數(shù)據(jù)庫(kù)優(yōu)化經(jīng)驗(yàn)(后端工程師非常常見(jiàn))
出現(xiàn)指數(shù):四顆星
主要考點(diǎn):此題考察后端工程師操作數(shù)據(jù)庫(kù)的經(jīng)驗(yàn)。說(shuō)實(shí)話(huà),數(shù)據(jù)庫(kù)是博主的弱項(xiàng),博主覺(jué)得對(duì)于這種考題,需要抓住幾個(gè)常用并且關(guān)鍵的優(yōu)化經(jīng)驗(yàn),如果說(shuō)得不對(duì),歡迎大家斧正。
參考答案:
1、數(shù)據(jù)庫(kù)運(yùn)維方面的優(yōu)化:?jiǎn)⒂脭?shù)據(jù)庫(kù)緩存。對(duì)于一些比較常用的查詢(xún)可以采用數(shù)據(jù)庫(kù)緩存的機(jī)制,部署的時(shí)候需要注意設(shè)置好緩存依賴(lài)項(xiàng),防止“過(guò)期”數(shù)據(jù)的產(chǎn)生。
2、數(shù)據(jù)庫(kù)索引方面的優(yōu)化:比如常用的字段建索引,聯(lián)合查詢(xún)考慮聯(lián)合索引。(PS:如果你有基礎(chǔ),可以敞開(kāi)談?wù)劸奂饕头蔷奂饕氖褂脠?chǎng)景和區(qū)別)
3、數(shù)據(jù)庫(kù)查詢(xún)方面的優(yōu)化:避免select * 的寫(xiě)法、盡量不用in和not in 這種耗性能的用法等等。
4、數(shù)據(jù)庫(kù)算法方面的優(yōu)化:盡量避免大事務(wù)操作、減少循環(huán)算法,對(duì)于大數(shù)據(jù)量的操作,避免使用游標(biāo)的用法等等。
九、關(guān)于代碼優(yōu)化你怎么理解?你會(huì)考慮去代碼重構(gòu)嗎?
出現(xiàn)指數(shù):四顆星
主要考點(diǎn):此題考的是面試者對(duì)代碼優(yōu)化的理解,以及代碼如何重構(gòu)的相關(guān)知識(shí)。
參考答案:
1、對(duì)于代碼優(yōu)化,之前的公司每周會(huì)做代碼審核,審核的主要作用就是保證代碼的正確性和執(zhí)行效率,比如減少代碼的層級(jí)結(jié)構(gòu)、避免循環(huán)嵌套、避免循環(huán)CURD數(shù)據(jù)庫(kù)、盡量避免一次取出大量數(shù)據(jù)放在內(nèi)存中(容易內(nèi)存溢出)、優(yōu)化算法等。
2、對(duì)于陳舊代碼,可能很多地方有調(diào)用,并且開(kāi)發(fā)和維護(hù)人員很有可能不是同一個(gè)人,所以重構(gòu)時(shí)要格外小心,如果沒(méi)有十足的把握,不要輕易重構(gòu)。如果必須要重構(gòu),必須做好充分的單元測(cè)試和全局測(cè)試。
十、談?wù)勀愕膬?yōu)點(diǎn)和缺點(diǎn)?
出現(xiàn)指數(shù):四顆星
主要考點(diǎn):這道題讓人有一種罵人的沖動(dòng),但是沒(méi)辦法,偏偏很多所謂的大公司會(huì)問(wèn)這個(gè)。比如華為。這個(gè)問(wèn)題見(jiàn)仁見(jiàn)智,答案可以自己組織。
參考答案:
優(yōu)點(diǎn):對(duì)于新的技術(shù)學(xué)**能力強(qiáng),能很快適應(yīng)新環(huán)境等等
缺點(diǎn):對(duì)技術(shù)太過(guò)于執(zhí)著等等
十一、關(guān)于服務(wù)器端 MVC 架構(gòu)的技術(shù)實(shí)現(xiàn),您是怎樣理解的?這種架構(gòu)方式有什么好處?您在項(xiàng)目中是如何應(yīng)用這一架構(gòu)的?
出現(xiàn)指數(shù):三顆星
主要考點(diǎn):此題主要考的對(duì)于MVC這種框架的理解。
參考答案:MVC,顧名思義,Model、View、Controller。所有的 界面代碼放在View里面,所有涉及和界面交互以及URL路由相關(guān)的邏輯都在Controller里面,Model提供數(shù)據(jù)模型。MVC的架構(gòu)方式會(huì)讓系 統(tǒng)的可維護(hù)性更高,使得每一部分更加專(zhuān)注自己的職責(zé),并且MVC提供了強(qiáng)大的路由機(jī)制,方便了頁(yè)面切換和界面交互。然后可以結(jié)合和WebForm的比較, 談?wù)凪VC如何解決復(fù)雜的控件樹(shù)生成、如何避免了復(fù)雜的頁(yè)面生命周期。
十二、網(wǎng)站優(yōu)化:網(wǎng)站運(yùn)行慢,如何定位問(wèn)題?發(fā)現(xiàn)問(wèn)題如何解決?
出現(xiàn)指數(shù):三顆星
主要考點(diǎn):此題和問(wèn)題一類(lèi)似,考察Web的問(wèn)題定位能力和優(yōu)化方案。
參考答案:
瀏覽器F12→網(wǎng)絡(luò)→查看http請(qǐng)求數(shù)以及每個(gè)請(qǐng)求的耗時(shí),找到問(wèn)題的根源,然后依次解決,解決方案可以參考問(wèn)題一里面的Web優(yōu)化方案。
十三、說(shuō)說(shuō)你最擅長(zhǎng)的技術(shù)?并說(shuō)說(shuō)你是如何使用的?
出現(xiàn)指數(shù):三顆星
主要考點(diǎn):這是一道非常開(kāi)放的面試題。最初遇到這種問(wèn)題,博主很想來(lái)一句:你妹,這叫什么問(wèn)題!但確實(shí)有面試官問(wèn)到?;仡^想想,其實(shí)此題考查你擅長(zhǎng)的技術(shù)的涉及深度。其實(shí)博主覺(jué)得對(duì)于這個(gè)問(wèn)題,可以結(jié)合你項(xiàng)目中用到的某一個(gè)技術(shù)來(lái)說(shuō)就好了。
參考答案:
簡(jiǎn)單談?wù)凪EF在我們項(xiàng)目里面的使用吧。
在談MEF之前,我們必須要先談?wù)凞IP、IOC、DI
依賴(lài)倒置原則(DIP):一種軟件架構(gòu)設(shè)計(jì)的原則(抽象概念)
控制反轉(zhuǎn)(IoC):一種反轉(zhuǎn)流、依賴(lài)和接口的方式(DIP的具體實(shí)現(xiàn)方式)。
依賴(lài)注入(DI):IoC的一種實(shí)現(xiàn)方式,用來(lái)反轉(zhuǎn)依賴(lài)(IoC的具體實(shí)現(xiàn)方式)。
什么意思呢?也就是說(shuō),我們?cè)谲浖軜?gòu)的過(guò)程中,層和層之間通過(guò)接口依賴(lài),下層不是 直接給上層提供實(shí)現(xiàn),而是提供接口,具體的實(shí)現(xiàn)以依賴(lài)注入的方式在運(yùn)行的時(shí)候動(dòng)態(tài)注入進(jìn)去。MEF就是實(shí)現(xiàn)依賴(lài)注入的一種組件。它的使用使得UI層不直接 依賴(lài)于BLL層,而是依賴(lài)于中間的一個(gè)IBLL層,在程序運(yùn)行的時(shí)候,通過(guò)MEF動(dòng)態(tài)將BLL里面的實(shí)現(xiàn)注入到UI層里面去,這樣做的好處是減少了層與層 之間的耦合。這也正是面向接口編程方式的體現(xiàn)。
十四、自己寫(xiě)過(guò)JS組件嗎?舉例說(shuō)明。
出現(xiàn)指數(shù):三顆星
主要考點(diǎn):此題考的js組件封裝和js閉包的一些用法。一般來(lái)說(shuō),還是筆試出現(xiàn)的幾率較大。
參考答案:自定義html的select組件
//combobox (function ($) { $.fn.combobox = function (options, param) { if (typeof options == 'string') { return $.fn.combobox.methods[options](this, param); } options = .fn.combobox.defaults, options || {}); var target = $(this); target.attr('valuefield', options.valueField); target.attr('textfield', options.textField); target.empty(); var option = $('<option></option>'); option.attr('value', ''); option.text(options.placeholder); target.append(option); if (options.data) { init(target, options.data); } else { //var param = {}; options.onBeforeLoad.call(target, option.param); if (!options.url) return; $.getJSON(options.url, option.param, function (data) { init(target, data); }); } function init(target, data) { $.each(data, function (i, item) { var option = $('<option></option>'); option.attr('value', item[options.valueField]); option.text(item[options.textField]); target.append(option); }); options.onLoadSuccess.call(target); } target.unbind("change"); target.on("change", function (e) { if (options.onChange) return options.onChange(target.val()); }); } $.fn.combobox.methods = { getValue: function (jq) { return jq.val(); }, setValue: function (jq, param) { jq.val(param); }, load: function (jq, url) { ('<option></option>'); option.attr('value', ''); option.text('請(qǐng)選擇'); jq.append(option); ('<option></option>'); option.attr('value', item[jq.attr('valuefield')]); option.text(item[jq.attr('textfield')]); jq.append(option); }); }); } }; $.fn.combobox.defaults = { url: null, param: null, data: null, valueField: 'value', textField: 'text', placeholder: '請(qǐng)選擇', onBeforeLoad: function (param) { }, onLoadSuccess: function () { }, onChange: function (value) { } }; })(jQuery); 調(diào)用的時(shí)候 $("#sel_search_orderstatus").combobox({ url: '/apiaction/Order/OrderApi/GetOrderStatu', valueField: 'VALUE', textField: 'NAME' });
就能自動(dòng)從后臺(tái)取數(shù)據(jù),注意valueField和textField對(duì)應(yīng)要顯示和實(shí)際值。
十五、自己寫(xiě)過(guò)多線(xiàn)程組件嗎?簡(jiǎn)要說(shuō)明!
出現(xiàn)指數(shù):三顆星
主要考點(diǎn):此題是兩年前博主在攜程的一次電話(huà)面試中遇到的,其他地方基本上沒(méi)遇到過(guò),其實(shí)到現(xiàn)在也不能理解當(dāng)時(shí)面試官問(wèn)這個(gè)問(wèn)題的目的。但我想,此問(wèn)題必有出處,估計(jì)面試官是想了解你對(duì)多線(xiàn)程以及線(xiàn)程池等的理解深度。
知識(shí)點(diǎn):
1、什么是面向?qū)ο螅?br />
面向?qū)ο笳f(shuō)到底就是一種思想,任何事物都可以看作是一個(gè)對(duì)象。在有些面試題目中也稱(chēng)之為OOP(Object Oriented Programming)。分開(kāi)來(lái)解讀就是:
Object:對(duì)象
Oriented: 面向的
Programming:程序設(shè)計(jì)
面向?qū)ο缶褪前岩粋€(gè)人或事務(wù)的屬性,比如名字,年齡這些定義在一個(gè)實(shí)體類(lèi)里面。存和取的時(shí)候直接使用存取實(shí)體類(lèi)就把這個(gè)人的名字,年齡這些全部存了,這個(gè)實(shí)體類(lèi)就叫對(duì)象,這種思想就叫面向?qū)ο蟆?br />
面向?qū)ο箝_(kāi)發(fā)具有以下優(yōu)點(diǎn): 代碼開(kāi)發(fā)模塊化,便于維護(hù)。 代碼復(fù)用性強(qiáng) 代碼的可靠性和靈活性。 代碼的可讀性和可擴(kuò)展性。
2. 簡(jiǎn)述 private、 protected、 public、 internal 修飾符的訪(fǎng)問(wèn)權(quán)限。
答 . private : 私有成員, 在類(lèi)的內(nèi)部才可以訪(fǎng)問(wèn)。 protected : 保護(hù)成員,該類(lèi)內(nèi)部和繼承類(lèi)中可以訪(fǎng)問(wèn)。 public : 公共成員,完全公開(kāi),沒(méi)有訪(fǎng)問(wèn)限制。 internal: 在同一命名空間內(nèi)可以訪(fǎng)問(wèn),當(dāng)前程序集內(nèi)可以訪(fǎng)問(wèn)
3 .列舉ASP.NET 頁(yè)面之間傳遞值的幾種方式。
答. 1.Request.QueryString 2.Request.Form 3.Session 4.Application 5.Cache 6.Cookie 7.Server.Transfer 8.Database 9.HttpContext的Item屬性等
4.a=10,b=15,請(qǐng)?jiān)诓皇褂玫谌阶兞康那闆r下,把a(bǔ)、b的值互換
答: int a=a+b; int b=a-b;int a=a-b;
5.用.net做B/S結(jié)構(gòu)的系統(tǒng),您是用幾層結(jié)構(gòu)來(lái)開(kāi)發(fā),每一層之間的關(guān)系以及為什么要這樣分層?
答:一般為3層:數(shù)據(jù)訪(fǎng)問(wèn)層,業(yè)務(wù)層,表示層。
數(shù)據(jù)訪(fǎng)問(wèn)層對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改。
業(yè)務(wù)層一般分為二層,業(yè)務(wù)表觀(guān)層實(shí)現(xiàn)與表示層的溝通,業(yè)務(wù)規(guī)則層實(shí)現(xiàn)用戶(hù)密碼的安全等。
表示層為了與用戶(hù)交互例如用戶(hù)添加表單。
優(yōu)點(diǎn): 分工明確,條理清晰,易于調(diào)試,而且具有可擴(kuò)展性。
缺點(diǎn): 增加成本。
6.能用foreach遍歷訪(fǎng)問(wèn)的對(duì)象需要實(shí)現(xiàn) ________________接口或聲明________________方法的類(lèi)型。
答:IEnumerable 、 GetEnumerator。
7.GC是什么? 為什么要有GC?
答:GC是垃圾收集器。程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。要請(qǐng)求垃圾收集,可以調(diào)用下面的方法之一: System.gc() Runtime.getRuntime().gc()
8.啟動(dòng)一個(gè)線(xiàn)程是用run()還是start()?
答:?jiǎn)?dòng)一個(gè)線(xiàn)程是調(diào)用start()方法,使線(xiàn)程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線(xiàn)程就會(huì)立即運(yùn)行。run() 方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線(xiàn)程。
9.是否可以繼承String類(lèi)?
答:String類(lèi)是final類(lèi)故不可以繼承。
10.session喜歡丟值且占內(nèi)存,Cookis不安全,請(qǐng)問(wèn)用什么辦法代替這兩種原始的方法
答:redis 或者 memcache。當(dāng)然,微軟也提供了解決方案。iis中由于有進(jìn)程回收機(jī)制,系統(tǒng)繁忙的話(huà)Session會(huì)丟失,可以用Sate server或SQL Server數(shù)據(jù)庫(kù)的方式。
11.IOC容器?
1. IOC即控制反轉(zhuǎn),是一種設(shè)計(jì)思想,在之前的項(xiàng)目中,當(dāng)我們需要一個(gè)對(duì)象時(shí),需要new一個(gè)對(duì)象,而IOC的設(shè)計(jì)思想是我們將需要的對(duì)象注入到一個(gè)容器中,就會(huì)獲得我們所需要的資源 。
2. IOC和DI IOC是控制反轉(zhuǎn),DI是依賴(lài)注入,控制反轉(zhuǎn)的解釋有些模棱兩可,而依賴(lài)注入就很明確,我們將需要的對(duì)象注入到容器中,獲取所需要的資源。
3. IOC控制反轉(zhuǎn):正常情況下程序開(kāi)發(fā)是上端調(diào)用下端,依賴(lài)下端,依賴(lài)倒置原則告訴我們,上端不要依賴(lài)下端,要依賴(lài)抽象,上端只依賴(lài)抽象,細(xì)節(jié)交給第三方工廠(chǎng)(容器)來(lái)決定,這就是IOC,就是控制反轉(zhuǎn)——使系統(tǒng)架構(gòu)可以更穩(wěn)定,支持?jǐn)U展。
12、什么是委托,事件是不是一種委托?
1. 委托可以把一個(gè)方法作為參數(shù)代入另一個(gè)方法。
2. 委托可以理解為指向一個(gè)函數(shù)的引用。
3. 事件是一種特殊的委托。
delegate <函數(shù)返回類(lèi)型> <委托名> (<函數(shù)參數(shù)>)
13.c#多線(xiàn)程是什么?
多線(xiàn)程的優(yōu)點(diǎn):可以同時(shí)完成多個(gè)任務(wù);可以使程序的響應(yīng)速度更快;可以節(jié)省大量時(shí)間進(jìn)行處理任務(wù);可以隨時(shí)停止任務(wù);可以設(shè)置每個(gè)任務(wù)的優(yōu)先級(jí),以?xún)?yōu)化程序性能。
14.WebApi概述
Web API是在.NET Framework之上構(gòu)建的Web的API的框架,Web API是一個(gè)編程接口,用于操作可通過(guò)標(biāo)準(zhǔn)HTTP方法和標(biāo)頭訪(fǎng)問(wèn)的系統(tǒng),Web API需要基于.NET 3.5或更高版本才可以進(jìn)行開(kāi)發(fā)
15.什么是WebService
webservice是一種跨平臺(tái),跨語(yǔ)言的規(guī)范,用于不同平臺(tái),不同語(yǔ)言開(kāi)發(fā)的應(yīng)用之間的交互,是基于網(wǎng)絡(luò)的、分布式的模塊化組件,它執(zhí)行特定的任務(wù),遵守具體的技術(shù)規(guī)范。
16.存儲(chǔ)過(guò)程是什么?有什么用?有什么優(yōu)點(diǎn)?用什么來(lái)調(diào)用?
存儲(chǔ)過(guò)程是預(yù)編譯,安全性高,也是大大提高了效率,存儲(chǔ)過(guò)程可以重復(fù)使用以減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量,復(fù)雜的邏輯我們可以使用存儲(chǔ)過(guò)程完成,在存儲(chǔ)過(guò)程中我們可以使用臨時(shí)表,還可以定義變量,拼接sql語(yǔ)句,調(diào)用時(shí),只需執(zhí)行這個(gè)存儲(chǔ)過(guò)程名,傳入我們所需要的參數(shù)即可。
17.何為觸發(fā)器?
觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,主要是通過(guò)事件觸發(fā)而被執(zhí)行。它可以強(qiáng)化約束來(lái)維護(hù)數(shù)據(jù)的完整性和一致性,可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的操作從而不允許未經(jīng)許可的更新和變化??梢约?jí)聯(lián)運(yùn)算。
常見(jiàn)的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。
18.什么叫做泛型?
只是為了去掉重復(fù)代碼,應(yīng)對(duì)不同類(lèi)型的共同需求。
19. C#中值類(lèi)型和引用類(lèi)型分別有哪些?
值類(lèi)型:結(jié)構(gòu)體(數(shù)值類(lèi)型,bool型,用戶(hù)定義的結(jié)構(gòu)體),枚舉,可空類(lèi)型。
引用類(lèi)型:數(shù)組,用戶(hù)定義的類(lèi)、接口、委托,object,字符串。
21 .NET的錯(cuò)誤處理機(jī)制是什么?
.net錯(cuò)誤處理機(jī)制采用try->catch->finally結(jié)構(gòu),發(fā)生錯(cuò)誤時(shí),層層上拋,直到找到匹配的Catch為止。
22.C#可否對(duì)內(nèi)存進(jìn)行直接的操作?
在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員不過(guò)在C#中,不能直接實(shí)現(xiàn)Finalize方法,而是在析構(gòu)函數(shù)中調(diào)用基類(lèi)的Finalize()方法。
23. ADO.NET相對(duì)于ADO等主要有什么改進(jìn)?
1:ado.net不依賴(lài)于ole db提供程序,而是使用.net托管提供的程序,
2:不使用com
3:不在支持動(dòng)態(tài)游標(biāo)和服務(wù)器端游
4:,可以斷開(kāi)connection而保留當(dāng)前數(shù)據(jù)集可用
5:強(qiáng)類(lèi)型轉(zhuǎn)換
6:xml支持
24.如果在一個(gè)B/S結(jié)構(gòu)的系統(tǒng)中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進(jìn)行處理?
this.Server.Transfer、Response.Redirect()、QueryString
25. .NET中讀寫(xiě)數(shù)據(jù)庫(kù)需要用到那些類(lèi)?他們的作用?
Connection連接對(duì)象,Command執(zhí)行命令和存儲(chǔ)過(guò)程,DataReader向前只讀的數(shù)據(jù)流,DataAdapter適配器,支持增刪查詢(xún),DataSet數(shù)據(jù)級(jí)對(duì)象,相當(dāng)與內(nèi)存里的一張或多張表。
26.簡(jiǎn)要談一下您對(duì)微軟.NET架構(gòu)下remoting和webservice兩項(xiàng)技術(shù)的理解以及實(shí)際中的應(yīng)用。
WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進(jìn)制傳送提高效率。
remoting是.net中用來(lái)跨越machine,process, appdomain進(jìn)行方法調(diào)用的技術(shù),對(duì)于三成結(jié)構(gòu)的程序,就可以使用remoting技術(shù)來(lái)構(gòu)建.它是分布應(yīng)用的基礎(chǔ)技術(shù).相當(dāng)于以前的DCOM。
Web Service是一種構(gòu)建應(yīng)用程序的普通模型,并能在所有支持internet網(wǎng)通訊的操作系統(tǒng)上實(shí)施。Web Service令基于組件的開(kāi)發(fā)和web的結(jié)合達(dá)到最佳,基于組件的對(duì)象模型。
27.什么是反射?
動(dòng)態(tài)獲取程序集信息。
28.override與重載的區(qū)別?
重載是方法的名稱(chēng)相同。參數(shù)或參數(shù)類(lèi)型不同,進(jìn)行多次重載以適應(yīng)不同的需要。
Override是子類(lèi)對(duì)基類(lèi)中函數(shù)的重寫(xiě)。為了適應(yīng)需要。
29.裝箱和拆箱的概念和原理
裝箱是將值類(lèi)型轉(zhuǎn)化為引用類(lèi)型的過(guò)程;
拆箱是將引用類(lèi)型轉(zhuǎn)化為值類(lèi)型的過(guò)程
30.Session有什么重大BUG,微軟提出了什么方法加以解決?
是iis中由于有進(jìn)程回收機(jī)制,系統(tǒng)繁忙的話(huà)Session會(huì)丟失,可以用Sate server或SQL Server數(shù)據(jù)庫(kù)的方式存儲(chǔ)Session不過(guò)這種方式比較慢,而且無(wú)法捕獲Session的END事件。
到此這篇關(guān)于ASP.NET(C#) 面試總結(jié)面試題大全的文章就介紹到這了,更多相關(guān)ASP.NET 面試題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 這篇文章主要介紹了C#面試題整理(帶答案),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-12-25