.net軟件工程師面試題及答案
.net工程師的面試準(zhǔn)備是很必要的,想在面試中給面試官留下印象嗎?以下是小編幫你們整理的.net軟件工程師面試題及答案,一起來學(xué)習(xí)啦。
.net軟件工程師面試題及答案(一)
1.面向?qū)ο蟮乃枷胫饕ㄊ裁?
答:任何事物都可以理解為對象,其主要特征: 繼承。封裝。多態(tài)。特點(diǎn):代碼好維護(hù),安全,隱藏信息
2.什么是ASP.net中的用戶控件
答:擴(kuò)展名為*.ascx,跟*.aspx在結(jié)構(gòu)上相似,是指頁面中加載的功能塊,只是用戶控件不能單獨(dú)作為頁面運(yùn)行,必須嵌入到*.aspx頁面或其它用戶控件中使用。
3.什么叫應(yīng)用程序域?什么是受管制的代碼?什么是強(qiáng)類型系統(tǒng)?什么是裝箱和拆箱?什么是重載?CTS、CLS和CLR分別作何解釋?
答:應(yīng)用程序域?yàn)榘踩?、可靠性、版本控制以及卸載程序集提供了隔離邊界。應(yīng)用程序域通常由運(yùn)行庫宿主創(chuàng)建,運(yùn)行庫宿主負(fù)責(zé)在運(yùn)行應(yīng)用程序之前引導(dǎo)公共語言運(yùn)行庫。應(yīng)用程序域提供了一個更安全、用途更廣的處理單元,公共語言運(yùn)行庫可使用該單元提供應(yīng)用程序之間的隔離。
托管代碼為使用基于公共語言運(yùn)行庫的語言編譯器開發(fā)的代碼稱為托管代碼;托管代碼具有許多優(yōu)點(diǎn),例如:跨語言集成、跨語言異常處理、增強(qiáng)的安全性、版本控制和部署支持、簡化的組件交互模型、調(diào)試和分析服務(wù)等。
裝箱和拆箱使值類型能夠被視為對象。對值類型裝箱將把該值類型打包到 Object 引用類型的一個實(shí)例中。這使得值類型可以存儲于垃圾回收堆中。拆箱將從對象中提取值類型。 重載:每個類型成員都有一個唯一的簽名。方法簽名由方法名稱和一個參數(shù)列表(方法的參數(shù)的順序和類型)組成。只要簽名不同,就可以在一種類型內(nèi)定義具有相同名稱的多種方法。當(dāng)定義兩種或多種具有相同名稱的方法時,就稱作重載。
CTS通用類型系統(tǒng) (common type system):一種確定公共語言運(yùn)行庫如何定義、使用和管理類型的規(guī)范。
CLR公共語言運(yùn)行庫:.NET Framework 提供了一個稱為公共語言運(yùn)行庫的運(yùn)行時環(huán)境,它運(yùn)行代碼并提供使開發(fā)過程更輕松的服務(wù)。
CLS公共語言規(guī)范:要和其他對象完全交互,而不管這些對象是以何種語言實(shí)現(xiàn)的,對象必須只向調(diào)用方公開那些它們必須與之互用的所有語言的通用功能。為此定義了公共語言規(guī)范 (CLS),它是許多應(yīng)用程序所需的一套基本語言功能。
強(qiáng)類型:C# 是強(qiáng)類型語言;因此每個變量和對象都必須具有聲明類型。
4.列舉一下你所了解的XML技術(shù)及其應(yīng)用
答:保存配臵,站與站之間的交流,WEB SERVICE。以及與數(shù)據(jù)庫的數(shù)據(jù)交互等地方都要用它.
5.值類型和引用類型的區(qū)別?
答:基于值類型的變量直接包含值。將一個值類型變量賦給另一個值類型變量時,將復(fù)制包含的值。這與引用類型變量的賦值不同,引用類型變量的賦值只復(fù)制對對象的引用,而不復(fù)制對象本身。
所有的值類型均隱式派生自 System.ValueType。
與引用類型不同,從值類型不可能派生出新的類型。但與引用類型相同的是,結(jié)構(gòu)也可以實(shí)現(xiàn)接口。
與引用類型不同,值類型不可能包含 null 值。然而,可空類型功能允許將 null 賦給值類型。
每種值類型均有一個隱式的默認(rèn)構(gòu)造函數(shù)來初始化該類型的默認(rèn)值。
值類型主要由兩類組成:結(jié)構(gòu)、枚舉
結(jié)構(gòu)分為以下幾類:Numeric(數(shù)值)類型、整型、浮點(diǎn)型、decimal、bool、用戶定義的結(jié)構(gòu)。
引用類型的變量又稱為對象,可存儲對實(shí)際數(shù)據(jù)的引用。聲明引用類型的關(guān)鍵字:class、interface、delegate、內(nèi)臵引用類型: object、string
.net軟件工程師面試題及答案(二)
1.ADO.net中常用的對象有哪些?分別描述一下。
答:
Connection 打開數(shù)據(jù)庫連接
Command 執(zhí)行數(shù)據(jù)庫命令
Dat.net軟件工程師面試題及答案dapter 連接數(shù)據(jù),執(zhí)行數(shù)據(jù)庫命令,填充DataSet
DataSet 數(shù)據(jù)在內(nèi)存中的緩存,數(shù)據(jù)結(jié)構(gòu)
DataReader 只讀向前的讀取數(shù)據(jù)庫
2.如何理解委托?
答:
相當(dāng)于函數(shù)指針,定義了委托就可以在不調(diào)用原方法名稱的情況下調(diào)用那個方法.
委托具有以下特點(diǎn):
委托類似于 C++ 函數(shù)指針,但它是類型安全的。
委托允許將方法作為參數(shù)進(jìn)行傳遞。
委托可用于定義回調(diào)方法。
委托可以鏈接在一起;例如,可以對一個事件調(diào)用多個方法。
方法不需要與委托簽名精確匹配。有關(guān)更多信息,請參見協(xié)變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義的方法。
3.C#中的接口和類有什么異同。
答:異:不能直接實(shí)例化接口。接口不包含方法的實(shí)現(xiàn)。接口、類和結(jié)構(gòu)可從多個接口繼承。但是C# 只支持單繼承:類只能從一個基類繼承實(shí)現(xiàn)。類定義可在不同的源文件之間進(jìn)行拆分。
同:接口、類和結(jié)構(gòu)可從多個接口繼承。接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。接口可以包含事件、索引器、方法和屬性。一個類可以實(shí)現(xiàn)多個接口。
4.UDP連接和TCP連接的異同。
答:前者只管傳,不管數(shù)據(jù)到不到,無須建立連接.后者保證傳輸?shù)臄?shù)據(jù)準(zhǔn)確,須要連結(jié).
補(bǔ)充:tcp是面向連接的協(xié)議,通信前必須建立連接,用于傳輸大量數(shù)據(jù)是流模式,速度慢 UDP:是面向無連接的協(xié)議,傳輸不可靠,用于傳輸少量數(shù)據(jù),數(shù)據(jù)報模式速度快。
5.ASP.net的身份驗(yàn)證方式有哪些?分別是什么原理?
答:Windows 身份驗(yàn)證提供程序:提供有關(guān)如何將 Windows 身份驗(yàn)證與 Microsoft Internet 信息服務(wù) (IIS) 身份驗(yàn)證結(jié)合使用來確保 ASP.NET 應(yīng)用程序安全的信息。
Forms 身份驗(yàn)證提供程序:提供有關(guān)如何使用您自己的代碼創(chuàng)建應(yīng)用程序特定的登錄窗體并執(zhí)行身份驗(yàn)證的信息。使用 Forms 身份驗(yàn)證的一種簡便方法是使用 ASP.NET 成員資格和 ASP.NET 登錄控件,它們一起提供了一種只需少量或無需代碼就可以收集、驗(yàn)證和管理用戶憑據(jù)的方法。
Passport 身份驗(yàn)證提供程序:提供有關(guān)由 Microsoft 提供的集中身份驗(yàn)證服務(wù)的信息,該服務(wù)為成員站點(diǎn)提供單一登錄和核心配臵
.net軟件工程師面試題及答案(三)
1.進(jìn)程和線程分別怎么理解?
答:進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于:
簡而言之,一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程.
線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。
另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。
線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。每個獨(dú)立的線程有一個程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。
進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運(yùn)行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位.
線程是進(jìn)程的一個實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源. 一個線程可以創(chuàng)建和撤銷另一個線程;同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行.
2.什么是code-Behind技術(shù)。
答:代碼分離,這是個明智的東西,像ASP這樣混成一堆很不爽.或者可以理解成HTML代碼寫在前臺,C#代碼寫在后臺.當(dāng)然前臺也有腳本,類的調(diào)用等,其實(shí)寫在一起也是可以的.
3.解釋一下UDDI、WSDL的意義及其作用。
答:
UDDI:統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議(UDDI, Universal Description, Discovery and Integration)是一套基于Web的、分布式的、為Web服務(wù)提供的信息注冊中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時也包含一組使企業(yè)能將自身提供的Web服務(wù)注冊以使得別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。UDDI 提供了一組基于標(biāo)準(zhǔn)的規(guī)范用于描述和發(fā)現(xiàn)服務(wù),還提供了一組基于因特網(wǎng)的實(shí)現(xiàn)。
WSDL:WSDL描述Web服務(wù)的公共接口。這是一個基于XML的關(guān)于如何與Web服務(wù)通訊和使用的服務(wù)描述;
4.什么是SOAP,有哪些應(yīng)用。
答:SOAP(Simple Object Access Protocol )簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過程調(diào)用的協(xié)議,是一個基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通信。
SOAP 是一種輕量級協(xié)議,用于在分散型、分布式環(huán)境中交換結(jié)構(gòu)化信息。 SOAP 利用 XML 技術(shù)定義一種可擴(kuò)展的消息處理框架,它提供了一種可通過多種底層協(xié)議進(jìn)行交換的消息結(jié)構(gòu)。這種框架的設(shè)計(jì)思想是要獨(dú)立于任何一種特定的編程模型和其他特定實(shí)現(xiàn)的語義。
SOAP 定義了一種方法以便將 XML 消息從 A 點(diǎn)傳送到 B 點(diǎn)。為此,它提供了一種基于 XML 且具有以下特性的消息處理框架:1) 可擴(kuò)展,2) 可通過多種底層網(wǎng)絡(luò)協(xié)議使用,3) 獨(dú)立于編程模型。
5.如何理解.net中的垃圾回收機(jī)制。
答:.NET Framework 的垃圾回收器管理應(yīng)用程序的內(nèi)存分配和釋放。每次您使用 new 運(yùn)算符創(chuàng)建對象時,運(yùn)行庫都從托管堆為該對象分配內(nèi)存。只要托管堆中有地址空間可用,運(yùn)行庫就會繼續(xù)為新對象分配空間。但是,內(nèi)存不是無限大的。最終,垃圾回收器必須執(zhí)行回收以釋放一些內(nèi)存。垃圾回收器優(yōu)化引擎根據(jù)正在進(jìn)行的分配情況確定執(zhí)行回收的最佳時間。當(dāng)垃圾回收器執(zhí)行回收時,它檢查托管堆中不再被應(yīng)用程序使用的對象并執(zhí)行必要的操作來回收它們占用的內(nèi)存。
6.常用的調(diào)用webservice方法有哪些?
答:SOAP和WSDL
7. 寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作為主鍵, 注意:ID可能不是連續(xù)的。)
解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)