.NET牛人應該知道些什麼

任何一個使用.NET的人javascript

一、描述線程與進程的區別?java

線程(Thread)與進程(Process)兩者都定義了某種邊界,不一樣的是進程定義的是應用程序與應用程序之間的邊界,不一樣的進程之間不能共享代node

碼和數據空間,而線程定義的是代碼執行堆棧和執行上下文的邊界。一個進程能夠包括若干個線程,同時建立多個線程來完成某項任務,即是c++

多線程。而同一進程中的不一樣線程共享代碼和數據空間。編程

二、什麼是Windows服務,它的生命週期與標準的EXE程序有什麼不一樣?c#

Windows服務是運行在windows後臺指定用戶下(默認System)的應用程序,它沒有標準的UI界面,想比標準的EXE程序,Windows服務是在服務windows

開始的時候建立,而在服務結束的時候銷燬,並且能夠設置服務是否與操做系統一塊兒啓動,一塊兒關閉。它支持三種方式:1)自動方式 2)手動方瀏覽器

式 3)禁用 。自動方式的時候,windows服務將在OS啓動後自動啓動運行,而手動方式則必須手工啓動服務,禁用的狀況下服務將不能被啓動緩存

。另外標準的EXE默認使用的當前登陸的用戶,而windows服務則默認使用System用戶,這在對系統資源訪問的時候特別須要注意。安全

三、Windows上的單個進程所能訪問的最大內存量是多少?它與系統的最大虛擬內存同樣嗎?這對於系統設計有什麼影響?

這個須要針對硬件平臺,公式爲單個進程能訪問的最大內存量=2的處理器位數次方/2,好比一般狀況下,32位處理器下,單個進程所能訪問的

最大內存量爲:2^32 /2 = 2G 。單個進程能訪問的最大內存量是最大虛擬內存的1/2,由於要分配給操做系統一半虛擬內存。

三、EXE和DLL之間的區別是什麼?

四、什麼是強類型,什麼是弱類型?哪一種更好些?爲何?

強類型是在編譯的時候就肯定類型的數據,在執行時類型不能更改,而弱類型在執行的時候纔會肯定類型。沒有好很差,兩者各有好處,強類

型安全,由於它事先已經肯定好了,並且效率高。通常用於編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候

容易出現錯誤,但它靈活,多用於解釋型編程語言,如javascript,vb等。

五、PID是什麼?在作系統的故障排除時如何使用它?

PID是進程編號,在系統發現故障的時候,能夠根據它尋找故障所發生的具體進程,而且可經過Visual Studio.net等ide將故障進程附加到進程

中進行調試(debug)。

六、單個TCP/IP端口上可以偵聽多少個進程?

能夠爲多個,多個爲端口複用
看下面代碼

端口複用
Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"),8235));
            socket1.Listen(10);
            socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            socket2.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8235));
            socket2.Listen(10);
            Console.Read();

七、什麼是GAC?它解決了什麼問題?

Gloal Assembly Cache,全局應用程序集緩存。它解決了幾個程序共享某一個程序集的問題。沒必要再將那個被共享的程序集拷貝到應用程序目

錄了,其實這道理很簡單,.net應用程序在加載的時候,會首先查看全局應用程序集緩存,若是有就能夠直接使用,沒有再到應用程序目錄進

行查找。

中級.NET開發人員

一、闡述面向接口、面向對象、面向方面編程的區別?

面向接口更關注的是概念,它的原則是先定義好行爲規範,再根據行爲規範建立實現,嚴格的來講,面向接口應該是面向對象中的一部分吧,

由於面向對象也強調的是依賴倒置原則,也就是實現依賴於抽象,而抽象不依賴於具體實現,更具比較的應該是面向接口與面向抽象對象,我

的體會是面向接口更加靈活,但實現時候,稍微有些代碼冗餘,而面向抽象能夠結合面向接口,先定義接口,再定義抽象類,在抽象類中處理

一些公共邏輯,再實現具體實現類。面向對象是對複雜問題的分解。
面向方面的編程是一種新概念,它解決了不少面向對象沒法解決的問題,好比面向對象技術只能對業務相關的代碼模塊化,而沒法對和業務無

關的代碼模塊化。而面向方面正是解決這一問題的方案,它的關鍵思想是"將應用程序中的商業邏輯與對其提供支持的通用服務進行分離"。

二、什麼是Interface?它與Class有什麼區別?

接口(Interface)是用來定義行爲規範的,不會有具體實現,而抽象類除定義行爲規範外,能夠有部分實現,一個類能實現多個接口,但只能繼

承一個父類。

三、什麼是反射?

程序集包含模塊,而模塊又包括類型,類型下有成員,反射就是管理程序集,模塊,類型的對象,它可以動態的建立類型的實例,設置現有對

象的類型或者獲取現有對象的類型,能調用類型的方法和訪問類型的字段屬性。它是在運行時建立和使用類型實例。

四、使用ASMX的XML Web服務與使用SOAP的.NET Remoting的區別?

Web服務使用的消息機制,而Remoting採用的RPC. Web Service能用於不一樣平臺,不一樣語言,Remoting只適用於.Net。效率上Remoting高於Xml

Web Service

五、類型系統是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎?

六、從概念上闡述前期綁定(early-binding)和後期綁定(late-binding)的區別?

這個就像是強弱類型的比較類似,前期綁定是在編譯的時候就肯定了要綁定的數據,然後期綁定是在運行的時候才填充數據。因此前期綁定如

果失敗,會在編譯時報編譯錯誤,然後期綁定失敗只有在運行時的時候才發生。

七、調用Assembly.Load算靜態引用仍是動態引用?

動態

八、什麼時候使用Assembly.LoadFrom?什麼時候使用Assembly.LoadFile?

用LoadFrom加載的是程序集,這就要求同時將此程序集所依賴的程序集加載進來。而LoadFile是加載程序集文件的內容,只將傳入參數的文件

加載,不考慮程序集依賴,但若是有相同實現,但位置不一樣的文件用LoadFrom是不能同時加載進來的,而LoadFile卻能夠。因爲LoadFile加載

的是文件,因此調用它以後,可能由於缺乏必要的依賴形成沒法被執行。

九、什麼叫Assembly Qualified Name?它是一個文件名嗎?它有什麼不一樣?

它不是一個文件名,相比文件名,Assembly Qualified Name(程序集限定名稱),更能肯定一個程序集,它包含文件名,但同時包含版本,公

鑰,和區域。由於一樣一個名稱的文件可能有不一樣的版本和區域,此時單獨靠文件名稱,可能會形成不能肯定程序集的正確性。

十、Assembly.Load("foo.dll"); 這句話是否正確?

錯誤,正確的應該是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");

十一、作強簽名的assembly與不作強簽名的assembly有什麼不一樣?

強簽名的程序集能夠作成com,而不作強簽名的就不行,一樣強簽名程序集能夠安裝到GAC中,而不作強簽名的確不能。

十二、DateTime是否能夠爲null?

不能,由於其爲Struct類型,而結構屬於值類型,值類型不能爲null,只有引用類型才能被賦值null。

1三、什麼叫JIT?什麼是NGEN?它們分別有什麼限制和好處?

Just In Time 及時編譯,它是在程序第一次運行的時候才進行編譯,而NGEN是所謂的pre-jit,就是說在運行前事先就將生成程序集的本機鏡

像,並保存到全局緩存中,適用NGEN能夠提升程序集的加載和執行速度,由於它能夠從本機映像中還原數代碼和數據結構,而沒必要像jit那樣動

態生成它們。感受和緩存的道理大同小異。

1四、.NET CLR中一代的垃圾收集器是如何管理對象的生命週期的?什麼叫非肯定性終結?

 經過對象的引用計數控制。也就是記錄了還有多少個變量在使用這個對象。當計數爲0時,就表明對象沒有用了,就進入回收條件。
 垃圾回收器在系統空閒或內存緊缺以及代碼中顯示調用回收時自動決定什麼時候啓動回收,因此無法肯定終結一個對象的具體時間。

1五、Finalize()和Dispose()之間的區別?

Finalize()用於隱式釋放資源,Dispose()用於顯示釋放資源 (Finalize()的確至關於C++中的析構函數)。

1六、using() 語法有用嗎?什麼是IDisposable?它是如何實現肯定性終結的。

有用,實現了IDisposiable的類在using中建立,using結束後會自定調用該對象的Dispose方法,釋放資源。不明白什麼是肯定性終結。

1七、tasklist /m "mscor*" 這句命令是幹嗎的?

列出全部使用了以" mscor"做爲開頭的dll或者exe的進程和模塊信息。

1八、in-proc和out-of-proc的區別。

in-proc是進程內,進程內能共享代碼和數據塊,out-of-proc是進程外,進程外的互操做須要用進程間通信來實現。

1九、.NET裏的哪一項技術可以實現out-of-proc通信?

.Net Remoting技術或者WCF技術

20、當你在ASP.NET中運行一個組件時,它在Windows XP, Windows 2000, Windows 2003上分別跑在哪一個進程裏面?

XP : aspnet_Wp.exe 
Windows 2000 : aspnet_Wp.exe
Windows 2003 : w3wp.exe

高級開發人員/架構師

一、DateTime.Parse(myString); 這行代碼有什麼問題?

有問題,當myString不能知足時間格式要求的時候,會引起異常,建議使用DateTime.TryParse();

二、PDB是什麼東西? 在調試中它應該放在哪裏?

PDB是用於保存調試和項目狀態信息的文件,在debug的時候將產生pdb文件,調試的時候應該放在和對應應用程序集相同目錄。

三、什麼叫圈複雜度(cyclomatic complexity)?爲何它很重要?

 

四、寫一個標準的lock(),在訪問變量的先後建立臨界區,要有"雙重檢查",

lock的使用
  public void LockTest()
        {
            Object lockObj = new Object();
            lock (lockObj)
            {
                //
            }
        }

五、什麼叫FullTrust?放入GAC的assembly是不是FullTrust的?

FullTrust徹底信任。放入GAC中的Assembly是否FullTrust個人理解不是。我理解FullTrust是能夠經過代碼設定的。

六、代碼加上須要安全權限的特性有什麼好處?

能夠更加靈活的設置對代碼的訪問權限,實現代碼級保護。

七、gacutil /l | find /i "Corillian" 這句命令的做用是什麼?

全局程序集緩存中若是有Corillian就更新該程序集,沒有就安裝。

八、sn -t foo.dll 這句命令是幹嗎的?

顯示程序集foo.dll的公鑰標記。

九、DCOM須要防火牆打開哪些端口?端口135是幹嗎用的?

135端口,135是遠程過程調用(RPC)的默認端口。

十、對比OOP和SOA,它們的目的分別是什麼?

我想OOP和SOA應該沒有對比性吧。OOP是一種編程模型,強調將複雜的邏輯分解出小的模塊,特性是繼承,封裝和多態 。而SOA是一個技術框架

,技術框架和編程模型應該說不是一碼事吧?SOA的思想是將業務邏輯封裝成服務或者中間件提供給應用程序來調用,固然其組件化思想是繼承

和發揚了OOP的優勢。

十一、XmlSerializer是如何工做的?使用這個類的進程須要什麼ACL權限?

 

十二、爲何不提倡catch(Exception)?

緣由可能有兩點:1)try..catch在出現異常的時候影響性能 2)應該捕獲更具體得異常,好比IOExeception,OutOfMemoryException等。

1三、Debug.Write和Trace.Write有什麼不一樣?什麼時候應該使用哪個?

Debug.Write是調試的時候向跟蹤窗口輸出信息。當編譯模式爲debug的時候纔有效,爲release的時候Debug.Write在編譯的時候會忽略,而

Trace則是在debug和release兩種模式下都可以向跟蹤窗口輸出信息。

1四、Debug Build和Release Build的區別,是否會有明顯的速度變化?請說明理由。

Debug會產生pdb文件,release不會。Debug用於開發時的調試,不能要於部署,而release用於部署。
debug編譯一些特殊代碼,好比#IFDEBUG Debug.Write等,而Release則會將那些特殊標記省略。

1五、JIT是以assembly爲單位發生仍是以方法爲單位發生?這對於工做區有何影響?

方法,由於對於一次運行,極可能只用到一個程序集中極少數類型和對象,而大部分可能並不會被使用。

1六、對比抽象基類和接口的使用

抽象類能有具體實現,而接口只定義行爲規範,不能有具體實現。一個類只能繼承一個父類,但能實現多個接口。

1七、a.Equals(b)和a == b同樣嗎?

不同。a.Equals(b)表示a與b一致, a==b表示a與b的值相等。

1八、在對象比較中,對象一致和對象相等分別是指什麼?

實現IClonable接口

1九、在.NET中如何實現深拷貝(deep copy)?

實現IClonable接口

20、請解釋一下IClonable?

IClonable方法是實現深度複製的接口,實現它應該能深度複製一個對象出來。深度複製的特徵的調用對象的構造方法,建立新的對象,包括創

建對象中嵌套的引用對象的新實例。而Shadow複製則不一樣,是淺表複製,不從新建立新實例。淺表複製的實現是Object.MemberWiseClone().

深度複製(Deep Copy)與淺表複製(Shadow Copy)的比較
  public class Name
    {
        public string FirstName;
        public string LastName;
    }
    public class Person:ICloneable
    {
        public Name PersonName;
        public string Email;
        /**//// 
        /// Deep Copy的例子
        /// 
        /// 
        public Object Clone()
        {
            Person p = new Person();
            p.Email = this.Email;
            p.PersonName = new Name();
            p.PersonName.FirstName = this.PersonName.FirstName;
            p.PersonName.LastName = this.PersonName.LastName;
            return p;
        }

        public void ChangLastName(string lastName)
        {
            this.PersonName.LastName = lastName;
        }
        
        public static void Main()
        {
            Person p = new Person();
            p.PersonName = new Name();
            p.PersonName.LastName = "jill";
            p.PersonName.FirstName = "zhang";
            p.Email = "jillzhang@126.com";
            Person sameNamePerson = p.Clone() as Person;
            sameNamePerson.ChangLastName("clr_");
            Console.WriteLine(p.PersonName.LastName);
            Console.WriteLine(sameNamePerson.PersonName.LastName);           

            Person samePerson = p.MemberwiseClone() as Person;
            samePerson.ChangLastName("Shadow");

            Console.WriteLine(p.PersonName.LastName);
            Console.WriteLine(sameNamePerson.PersonName.LastName);
        
            Console.Read();
        }
    }

2一、什麼叫裝箱?

裝箱(boxing)是將值類型的數據轉化成引用類型,int i=3; object o = i ;即是裝箱過程;
拆箱(unboxing)是將引用類型數據轉換值類型,好比int j = (int)o;屬於拆箱。

2二、string是值類型仍是引用類型?

引用類型。

2三、XmlSerializer使用的針對屬性的模式有什麼好處?解決了什麼問題?

只序列化有用的數據,而不是序列化整個對象。實現不必的數據冗餘,和提高序列化時的性能。

2四、爲何不該該在.NET中使用out參數?它究竟好很差?

 

2五、特性可以放到某個方法的參數上?若是能夠,這有什麼用?   

能夠,做用能夠對參數有進一步限定,好比輸入參數爲int類型,能夠經過容許AttributeTargets=ParameterInfo的Attribute自定義實現來限

定輸入參數的大小,好比當輸入參數小於100的時候便抱錯。


對方法的參數設置Attribute的例子
  [AttributeUsage(AttributeTargets.Parameter)]
    public class ParameterAtt : Attribute
    {
        public int Min = 100;
    }

    public class AttributeTest
    {       
        public void TestMethod([ParameterAtt(Min = 100)] int par1)
        {
            ParameterInfo para = MethodInfo.GetCurrentMethod().GetParameters()[0];
            ParameterAtt att = ParameterAtt.GetCustomAttribute(para, typeof(ParameterAtt)) as ParameterAtt;
            if (att.Min > par1)
            {
                throw new Exception("要求para1最小爲" + att.Min);
            }
        }
    }

C# 組件開發人員

何時使用override?何時使用new? 什麼叫shadowing?

解釋virtual、sealed、override和abstract的區別

Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d 解釋這個字符串每一個部分的重要性和做用

解釋public、protected、private和internal的區別

使用Primary Interop Assembly (PIA)有什麼好處?

NUnit是經過什麼機制獲知須要測試哪些方法的?

catch(Exception e){throw e;}和catch(Exception e)的區別

typeof(foo)和myFoo.GetType()的區別?

public class c{ public c(string a) : this() ; public c() } 解釋第一個構造函數中發生了什麼? 這個構造函數有什麼用?

this是幹嗎用的?可以用在static方法中?

ASP.NET (UI)開發人員

闡述一個基於瀏覽器的Form POST如何變成一個服務器端的事件,如Button1_OnClick。

什麼是PostBack?

什麼是ViewState? 它是否被編碼過? 是否被加密過?誰會使用ViewState?

元素是幹嗎用的?它用於哪兩項ASP.NET技術?

說出ASP.NET 1.1中的3種Session State提供程序以及它們的優缺點?

什麼叫Web Gardening? 在設計中如何使用它?

假設有一個ASP.NET應用程序,那麼單獨一個進程中容許多少應用程序對象?那兩個進程呢?啓用了Web Gardening的2個進程呢?這對設計有何

影響?

ASP.NET會重用多個請求之間的線程嗎?是否每一個HttpRequest都有本身的線程?你是否應該用ASP.NET的Thread Local存儲?

[ThreadStatic]屬性在ASP.NET中有用嗎?它有沒有反作用?是好是壞?

如何使用HttpHandler簡化現有的爲.aspx頁面提供驗證圖片的設計

HttpModule訂閱的是什麼類型的事件? 這對於實現有何影響?若是不打算從新編譯ASP.NE應用程序,應該怎麼作?

說出表示任意一個終端(URL)的方式,以及ASP.NET中把請求路由到那個終點的方式

解釋cookie的工做原理。給出一個濫用Cookie的例子。

解釋HttpRequest.ValidateInput()的重要性?

哪些數據是經過HTTP Header傳遞的?

對比HTTP動詞GET和POST? 什麼是HEAD?

說出至少6個HTTP狀態碼以及它們的含義

if-not-modified-since的工做原理是什麼? 用ASP.NET如何實現它?

解釋 <@OutputCache%>和如何使用VaryByParam、VaryByHeader.

VaryByCustom是如何工做的?

如何經過q=? (除了q=5)來實現ASP.NET HTML輸出緩衝和緩衝過時(好比http://localhost/page.aspx?q=5)?

XML開發人員

XML命名空間的做用?

什麼時候適合使用DOM?什麼時候不適合?有沒有尺度限制?

什麼是WS-I基本配置?它重要在哪裏?

寫一個小XML文檔,其中使用的是默認的命名空間,以及一個合法的(前綴)命名空間,其中要有分別屬性這兩個命名空間的元素

元素和特性的基本區別在哪裏?

格式無缺的XML和有效的XML有什麼區別?

.NET中如何驗證XML?

myXmlDocument.SelectNodes("//mynode"); 爲何這句代碼很差?何時它是好的?

拉式解析(XmlReader)與事件讀取器(Sax)的區別

XPathDocument和XmlDocument的區別? 在何種狀況下應該用哪個?

「XML片段」與「XML文檔」有什麼區別

什麼叫格式規範的XML?

XML InfoSet規範與Xml DOM有什麼不一樣? InfoSet是要解決什麼問題?

比較DTD和XSD,它們的類似點與區別分別是什麼?哪一個更好些?爲何?

System.Xml支持DTD嗎?若是支持,如何使用?

XML Schema可以表示爲對象圖?對象圖可以表示爲XML Schema?

相關文章
相關標籤/搜索