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