面试(2)
又面臨找工作了,記下些之前沒有記住的問題,希望能找到一個自己滿意的工作,加油。
?
一些基礎(chǔ)問題的了解:
?
應(yīng)用程序域?:
應(yīng)用程序域 (application domain) (AppDomain) 一種邊界,它由公共語言運行庫圍繞同一應(yīng)用程序范圍內(nèi)創(chuàng)建的對象建立(即,從應(yīng)用程序入口點開始,沿著對象激活的序列的任何位置)。應(yīng)用程序域有助于將在一個應(yīng)用程序中創(chuàng)建的對象與在其他應(yīng)用程序中創(chuàng)建的對象隔離,以使運行時行為可以預知。在一個單獨的進程中可以存在多個應(yīng)用程序域。
?
?
?
?
以前的類似應(yīng)用程序域是通過進程來實現(xiàn),即要達到這種效果,需要多個線程來實現(xiàn)。
?
CLR?
CLR常用簡寫詞語,CLR是公共語言運行時,Common Language Runtime)和Java虛擬機一樣也是一個運行時環(huán)境,它負責資源管理(內(nèi)存分配和垃圾收集),并保證應(yīng)用和底層操作系統(tǒng)之間必要的分離。
?
?
?
CTS:
公共類型系統(tǒng)(又叫通用系統(tǒng)類型) Common Type System
?
CLS
?????公用語言規(guī)范,可以保證C#組件與其他語言組件間的互操作性. Common Language Specification
?
受管制的代碼
?
最簡單的說呢,受托管的代碼不能直接寫內(nèi)存,是安全的,而非托管代碼是非安全代碼,可以使用指針操作內(nèi)存。
?
?
?
?
什么叫應(yīng)用程序域?什么是受管制的代碼?什么是強類型系統(tǒng)?什么是裝箱和拆箱?
?
?
答案:應(yīng)用程序域:一種邊界,它有公共語言運行庫圍繞同一應(yīng)用程序范圍內(nèi)創(chuàng)建的對象建立(即,從應(yīng)用程序入口點開始,沿著對象激活的序列的任何位置)。應(yīng)用程序域有助于將在一個應(yīng)用程序中建立的對象在其他應(yīng)用程序中創(chuàng)建的對象隔離,以使運行時行為可以預知。在一個單獨的進程中可以存在多個應(yīng)用程序域。以前使用進程邊界來隔離在同一臺計算機上運行的應(yīng)用程序。每一個應(yīng)程序被加載到單獨的進程中,這樣就將該應(yīng)用程序與同一臺計算機上運行的其他應(yīng)用程序相隔離。隔離這些應(yīng)用程序的原因在于內(nèi)存地址是與進程相關(guān)的;在目標進程中,不能通過任何有意義的方式使用一個進程傳遞到另一個進程的內(nèi)存指針。此外,您不能在兩個進程間進行直接調(diào)用。您必須代之以使用代理,它提供一頂程度的餓間接性。托管代碼必須先通過一個驗證過程,然后才能運行(除非管理員已授權(quán)跳過該驗證)。次驗證過程以下內(nèi)容:這些代碼是否會嘗試訪問無效的內(nèi)存地址?是否會嘗試執(zhí)行某些導致進程(該代碼運行時所在的進程)無法正常進行的其他操作?通過次驗證測試的代碼將被人是類型安全的。由于公共語言運行庫嫩能夠夠驗證代碼是否為類型安全的代碼,所以它可以提供與進程邊界一樣大的隔離級別,而其性能開銷在則要低得多。應(yīng)用程序域提供安全而通用的處理單元,公共語言運行庫可使用它來提供應(yīng)用程序之間的隔離。您可以在具有同等隔離級別(存在于單獨的進程中)的但個進程中運行幾個應(yīng)用程序域,而不會造成進程間切換等方面的額外開銷。在一個進程內(nèi)運行多個應(yīng)用程序的能力顯著增強了服務(wù)器的可伸縮性。隔離應(yīng)用程序?qū)τ趹?yīng)用程序安全也是十分重要。例如,您可以在單個瀏覽器進程中運行幾個Web應(yīng)用程序的控件,同時使這些控件不能訪問彼此的餓數(shù)據(jù)和資源。
應(yīng)用程序域所提供的隔離具有以下優(yōu)點:在一個應(yīng)用程序中出現(xiàn)的錯誤不會影響其他以內(nèi)功用程序。因為類型安全的代碼不會導致內(nèi)存錯誤,所以使用應(yīng)用程序宇可以確保在一個域中運行的代碼不會影響進程中的其他應(yīng)用程序。能夠在不停止整個進程的情況下停止單個應(yīng)用程序。使用應(yīng)用程序域使您可以卸載在單個應(yīng)用程序中運行的代碼。注意 不能卸載單個程序集或類型。只能卸載整個域。在一個應(yīng)用程序中運行的代碼不能直接訪問其他應(yīng)用程序中代碼或資源。為了強制實施此隔離,公共語言運行庫禁止在不同應(yīng)用程序域中的對象之間進行直接調(diào)用。要在個域之間傳遞對象,可以復制這些對象,或通過代理訪問這些對象。如果復制對象,那么對該對象的調(diào)用為本地調(diào)用。也就是說,調(diào)用方和被引用的對象位于同一應(yīng)用程序域中。如果通過代理訪問對象,那么對該對象的調(diào)用為遠程調(diào)用。在此情況下,調(diào)用方和被引用的對象位于不同的應(yīng)用程序域中。域間調(diào)用所采用遠程調(diào)用結(jié)構(gòu)與兩個進程間的調(diào)用或兩臺計算機間的調(diào)用結(jié)構(gòu)相同。代碼行為的作用范圍由它行為所在的應(yīng)用程序決定。換言之,應(yīng)用程序域?qū)⑻峁?yīng)用程序版本策略等配置設(shè)置、它所訪問的任意遠程程序集的位置,以及加載到該域中的程序集的位置信息。受管制的代碼:在CLR虛擬機中運行的代碼。強類型語言:如c/c++就是各種變量在各自的餓作用域使用之前都要由開發(fā)者定義類型,并交由編譯器分配內(nèi)存空間。裝箱,就是把值轉(zhuǎn)為引用類型。反之應(yīng)用轉(zhuǎn)為值
?
?
什么是重載?CTS、CLS和CLR分別做何解釋
?
?
答案:重載,是指允許存在多個同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個數(shù)不同,或許參數(shù)類型不同,或許兩者都不同)。
CTS:類似于COM定義的標準二進制格式,.net定義了一個稱為通用類型系統(tǒng) Common Type System (CTS)的類型標準。這個類型不但實現(xiàn)COM的變量兼容,而且還定義了通過用戶自定義類型的方式進行類型擴展。任何類型的方式進行類型擴展。任何以.net平臺作為目標的語言必須建立它的數(shù)據(jù)類型與CTS的類型間的影射。所有,net語言共享這一類型系統(tǒng),實現(xiàn)他們之間無縫的互操作。該方案還提供了語言之間的繼承性。
CLS:.net通過定義公共語言規(guī)范(CLS:Common Language Specification),限制了由這些不同引發(fā)的互操作性問題。CLS指定了一種以.net平臺為目標的語言所必須支持的最小特征,以及該語言與其他.net語言之間實現(xiàn)互操作性所需要的完備特征。CLS是CTS的餓一個餓子集。之間和就意味著一種語言特征可能符合CTS標準,但又超出CLS的范疇。
CLR: 公共語言運行庫Common Language Runtime(CLR).CLR是CTS的實現(xiàn),也就是說,CLR是應(yīng)用程序的執(zhí)行引擎和功能齊全的類庫,該類庫嚴格按照CTS規(guī)范實現(xiàn)。作為程序執(zhí)行引擎,CLR負責安全地載入和運行用戶程序代碼,包括對不同對象的垃圾揮手和安全檢查。CLR監(jiān)控之下運行的代碼,稱為托管代碼(managed code)。
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/30763402/archive/2011/06/21/2086445.html
總結(jié)
- 上一篇: C#操作word文档(二)
- 下一篇: 【转】#ifndef作用