1. 程式人生 > >基礎知識 -- 問答

基礎知識 -- 問答

01.Main函式是什麼?在程式中使用Main函式有什麼需要注意的地方?
Q:程式的入口函式!函式名字不能改變;一個程式中有且只有一個Main函式。

02.CLR是什麼?程式集是什麼?當執行一個程式集的時候,CLR做了什麼事情?
Q:Common Language RunTime 公共語言執行時。 
編譯後代碼的集合。(包括exe和dll)。 載入專案裡所有的類到記憶體,並找到其中的主函式,並作為預設的啟動函式呼叫執行。

03.值型別的預設值是什麼?(情況一:欄位或全域性靜態變數;情況二:區域性變數)
Q:如果是全域性變數,並且沒賦值,就會有預設值,如:int 是0;bool 是false;列舉enum;結構體struct;

  如果是區域性變數,就必須手動賦值。

04.宣告一個變數時在記憶體中做了什麼事情?初始化一個變數的時候又在記憶體中做了什麼事情?
Q:在棧中開闢空間,並將變數放入空間裡,預設值都是null。
 初始化時:
如果是值型別,則直接放入棧中;
如果是引用型別,則在堆中開闢一塊空間,將堆中物件的地址指標放入棧中,


05.new關鍵字做的事情?
Q:開闢空間,建立物件,呼叫建構函式。

06.陣列
    061.陣列一旦建立後,能不能修改陣列的長度?

Q:不能。為什麼呢?陣列是引用型別。它在建立時,已經根據建立的長度在記憶體中開闢一塊連續的空間。

07.多維陣列
    071.如何宣告一個多維陣列?
Q:多維陣列string[,] strArr=new string[3,3];  

    072.如何獲取多維陣列的總長度?
Q:各個緯度元素的個數的乘積 

08.交錯陣列
    081.如何宣告一個交錯陣列?
Q:交錯陣列:int[][] arr=new int[3][3];


    082.交錯陣列的本質是什麼?
Q:本質是一個數組的陣列。簡單的說這個陣列的元素是一個數組。




2012 - 0213
-------------
01.為什麼要有方法?
Q:為了複用。(封裝)(重複呼叫,封裝具體實現)

02.如何實現方法的過載?
Q:方法名相同,但簽名不同。(和返回值無關)

03.引用引數(ref)和輸出引數(out)的相同點與不同點?
Q:相同點:傳遞的都是引用。
  不同點:
out側重於輸出引數;ref側重於修改;
out必須方法返回之前賦值;ref必須在傳入之前賦值。


04.在什麼情況下使用引用引數(ref)和輸出引數(out)?
Q:如果方法有多個返回值,則可以用out或者ref。只不過ref側重於修改(即將值傳進去修改後再拿出來);而out是為了從方法中獲得一個值後拿到方法外使用。
05.可變引數與普通陣列引數的區別?
Q:params關鍵字。
特點:
一個方法中只能有一個可變引數;
而且必須放在引數列表最後;
如果沒有給可變引數賦值,就初始化長度為0;


2012 - 0215
-------------
01.面向物件的三大特徵是什麼?
Q:封裝;繼承;多型;

02.類和物件的關係?
Q:抽象和具體的關係。類是抽象(模板,設計圖紙),物件是具體(按照圖紙設計的房子)。類是對物件的抽象描述,而物件是類的具體化。

03.建立某一個類的物件的時候,在記憶體中做了什麼事情?例如 Person p = new Person();
Q:開闢空間,建立物件,呼叫建構函式。(在記憶體的堆中開闢空間,建立Person物件,然後在記憶體的棧中開闢一個放一個p,然後將Person物件在堆中的引用地址賦值給物件p)
04.屬性存在的目的是什麼?
Q:封裝欄位。為了對欄位的操作設定規則。(本質是兩個方法,一個get方法和一個set方法)
05.訪問修飾符有哪些並分別每一個訪問修飾符?
Q:public(公有的),
  private(只有本類可以訪問),
  internal(程式集內共享,如果不寫修飾符,預設就是internal),
  protected(本類和子類可以訪問),
  extern(供外部訪問,eg:C#提供介面給C++訪問)
06.為什麼要有建構函式呢?
Q:主要方便程式猿在例項化物件的時候就為物件裡的一些屬性和欄位初始化賦值。
07.什麼是封裝?封裝的目的是什麼?
Q:封裝就是將物件的欄位、行為和功能等“弄”到一起。
  封裝的目的:隱蔽程式碼實現/複用/修改方便
08.類的命名規則是什麼?
Q:類命名:首字母大寫(帕斯卡命名)。變數命名:首字母小寫(駱駝命名)




2012 - 0216
-------------
01.什麼是型別?
Q:用來定義某一種資料在記憶體裡開闢空間的大小,還可以預置操作此種類型資料的相關方法

02.this關鍵字在方法中使用時,它代表什麼?
Q:this指當前類的物件,或者他的父類的類物件。
 base只能指向父類的物件。

03.值型別變數的初始化(記憶體分配)?(兩種情況:一是類的成員變數,二是:方法的區域性變數)
Q:1、當變數是一個類的成員變數的時候,那麼該變數是跟隨累的物件存在於堆記憶體。當物件引用斷開時,等著垃圾回收器進行清理時便被銷燬
  2、當變數是一個方法的局域變數時,那麼該變數是在方法被呼叫時,存在於棧記憶體,方法執行完畢後被銷燬


04.繼承
    041.繼承的好處?
Q:1.提高程式碼的複用;
 2.實現多型;
 
    042.繼承的單根性
Q:一個類只能繼承一個父類。

043.繼承的傳遞性
Q:指子類只能繼承父類的非私有的成員。

    044.當存在繼承關係的時候,在子類中如何訪問父類的非私有成員?
Q:通過base關鍵字--(只能獲取父類的)(base就是存在於子類物件裡,用來指向父類物件的指標)
  或者通過this關鍵字--(可以獲取父類的非私有的成員和本類的成員)

05.什麼是里氏替換原則?
Q:子類替換父類所在的位置

06.子類與父類物件之間的轉換?
Q:子類可以強制轉換為父類,但是父類不能轉換為子類。

07.is 和 as 操作符的用處和區別?
Q:is是對型別的判斷,返回bool。(判斷A是否是B類,或者A是不是B的子類)。(如果一個物件是某個型別或是其父型別的話就返回true,否則就會返回為false。另外is操作符永遠不會丟擲異常。
  as是用來做型別轉換的。as只能針對引用型別的轉換。as 是先判斷再轉換(as 操作符首先測試轉換是否合法,如果合法就轉換,否則返回NULL。不會報錯)
  這兩者都不會丟擲異常。
  
  08.override可以重寫哪些 "型別" 的方法?
Q:可以重寫虛方法(virtual)--必須有方法體
  還可以重寫抽象方法 (abstract)--沒有方法體
  
09.什麼是多型?
Q:就是用某個子類來例項化父類,呼叫的是父類的抽象方法(虛方法),但實際執行的是子類例項重寫的方法


10.抽象方法只能定義在抽象類中嗎?
Q:是的。
(virtual or abstract members cannot be private)



2012 - 0217
-------------
01.CLR什麼時候載入類?
Q:是在第一次在程式碼中遇到這個類的時候才載入類的靜態成員和資訊。(為了節約資源,只在用的時候才開始載入進去)

02.當存在繼承關係的時候,建立子類物件的時候會不會建立父類物件呢?
Q:這個很易錯!!!!當 我們 建立一個子類時不會建立父類物件,只會有一個物件。Person c=new Student(),(當 我們 new一個子類的時候,在記憶體中,只有一個子類物件)
!!--!!----那下面括號裡面的就是錯誤的!!!
(new子類時,先建立子類物件,呼叫子類的建構函式時,建立父類物件,呼叫父類建構函式最後返回來執行子類建構函式方法體程式碼

子類預設呼叫父類的無參建構函式
如果父類裡沒有無參建構函式,則必須顯示的呼叫)

03.如果子類和父類存在同名但沒有重寫關係的方法的時候,那麼會呼叫哪個方法?(兩種情況:一是使用子類物件,而是使用父類物件)
Q:如果子類和父類存在同名但沒有重寫關係的方法,那麼呼叫時,如果是父類變數呼叫,則呼叫父類方法,如果是子類變數呼叫,則呼叫子類方法


04.如果子類和父類存在同名且有重寫關係的方法,那麼會呼叫那個方法?(兩種情況:一是使用子類物件,而是使用父類物件)
Q:如果子類和父類存在同名且有重寫關係的方法,那麼不管變數是什麼型別,呼叫的都是子類的方法。


05.虛方法和抽象方法的相同點與不同點?
Q :相同點:都能被子類重寫;都不能為私有的
  不同點:
1.abstract 和virtual的關鍵字不同
2.抽象方法一定沒有方法體,而虛方法必須有方法體。
   3.virtual方法的子類可以重寫父類方法也可不重寫,而抽象方法的所在的類的子類必須重寫該父類方法
4.抽象方法必須在抽象類中宣告,而虛方法可以存在於任何一個類裡面
5.virtual方法必須有現實(哪怕是空實現),而abstract方法必須沒有實現


06.子類中的base關鍵字指向的是子類物件還是父類物件?它本身的型別是子類型別還是父類型別呢?
Q:當然是指向的父類物件。 但是本身是子類的型別。
(base就是子類物件本身,只不過型別是父類)

07.為什麼要有抽象類?
Q:抽象類存在的目的就是指定規則,而不是具體實現,是為了約束子類的行為,具體實現交給子類完成。

08.使用多型的好處是什麼?
Q:1.低耦合,高內聚。(低耦合---程式碼的內部各個層之間的關聯小,相互之間約束少。 高內聚---方法的功能和職責單一,即一個方法只做一件事情。)
  2.實現程式碼的可維護性 和 可擴充套件性。
  3.把不同的子類物件都當作父類來看,可以遮蔽不同子類物件之間的差異,寫出通用的程式碼,做出通用的程式設計,以適應需求的不斷變化。
  
09.什麼情況下的類不能被例項化?
Q:1.抽象類
  2.靜態類
  3.類的建構函式被私有化
  
10.什麼情況下抽象類的子類不需要實現父類的抽象成員?
Q:子類也是抽象類的時候。

11.虛方法(虛擬成員)和抽象方法(抽象成員)能不能被私有化?
Q:當然不能。(首先編譯就會報錯)。---深層原因:他們兩者存在的目的就是為了讓子類去重寫,如果私有化了,就沒意義了。

12.靜態成員能不能被標記為virtual、override 或 abstract?
Q:不能:

13.介面的命名規則?
Q:以大寫I為開頭,以...able結尾。表示有某種能力。

14.什麼是介面?
Q:特殊的抽象類。他的存在完全是為了約束和統一類的行為。

15.介面能包含的成員有哪些?
Q:介面只有方法、屬性、索引器和事件的宣告

16.介面的訪問許可權修飾符只能是哪兩種?
Q:public和internal 


17.介面能不能繼承介面?
Q:能。而且可以實現多個介面。

18.如果一個抽象類繼承了一個介面,那麼將繼承的方法設定為抽象方法,還是去實現該方法?
Q:都可以。 既可以在抽象類的子類中去實現,也可在抽象類中直接實現。




--------------------------------------------------------------------
付炯 2月19日
1、使用介面的注意事項
Q:1,介面中的成員不能加訪問修飾符;
 2,介面中的成員不能有任何實現;
          3,實現介面的子類的必須實現介面的全部 成員;
 4,介面中只能有方法,屬性,索引器,事件,不能有欄位。
          5,一個類可以同時繼承一個類並實現多個介面,如果一個子類同時繼承了父類A,並實現了介面IA,那麼在語法上A必須寫在IA的前面,因為類是單繼承的,而介面可以實現多個。
 6,顯示實現介面和隱式實現介面時需要注意的問題,(通常 我們 是隱式實現的),
 類實現介面,可以顯式的實現接口裡的方法,但是注意:一旦使用顯式實現接口裡的方法後,那麼該方法只能被介面變數呼叫
 IFlyable fly = new Bird();
 fly.Fly();  //正確
 Bird fly = new Bird();
 fly.Fly();  //錯誤

         7,向上轉型
 
         8,單一職責原則 (避免定義體積龐大的介面,因為這樣會造成“介面汙染”,只把相關聯的一組成員定義到一個介面中)
 
2、介面與抽象類的區別
Q:相同點:
介面和抽象類都不能被例項化;
  不同點:
             1,介面中不能存在有具體實現的方法;而抽象類中可以有具體的方法實現。(介面只能定義行為,而抽象類既可以定義行為也可以提供實現)
             2,介面支援多繼承,而抽象類不能實現多繼承;
     3,介面可以定義方法Method,屬性property,索引器Index,事件Event的簽名,但不能定義欄位和這些東西的具體實現,而抽象類什麼都能定義和實現,除了       不能被例項化
 
 老鄒的2011年答案:
   1) 抽象基類可以定義欄位、屬性、方法實現。介面只能定義屬性、索引器、事件、和方法
宣告,不能包含欄位。 
2) 抽象類是一個不完整的類,需要進一步細化,而介面是一個行為規範。微軟的自定義接
口總是後帶able欄位,證明其是表述一類“我能做。。。”。 
3) 介面可以被多重實現,抽象類只能被單一繼承。 
4) 抽象類更多的是定義在一系列緊密相關的類間, 而介面大多數是關係疏鬆但都實現某一
功能的類中。 

相關推薦

LoadRunner性能測試基礎知識問答

協議 錄制完成 配置 lar resources 自定義函數 文件 計數 持續時間 點擊鏈接加入QQ群 522720170:https://jq.qq.com/?_wv=1027&k=5C08ATe Q1:什麽是負載測試?什麽是性能測試? A1:負載測試是通過逐步增

python3基礎知識問答

表示 代碼實現 NPU http mce ddr eight 拼接 int 1、請用代碼實現:a.利用下劃線將列表的每一個元素拼接成字符串,li="alexericrain"b.利用下劃線將列表的每一個元素拼接成字符串,li=[‘alex‘,‘eric‘,‘rain‘](可

Struts2基本流程及基礎知識問答

這是我在struts2學習過程中的一些思考和查閱所得答案: 我能看懂的是什麼? 1、為什麼要用介面和實現類。 增加專案的可擴充套件性,方便後期升級和維護。 2、專案的整體流程。 HTML頁面(JQuery Ajax 提交action請求)——》控制類action類——》呼

基礎知識 -- 問答

01.Main函式是什麼?在程式中使用Main函式有什麼需要注意的地方? Q:程式的入口函式!函式名字不能改變;一個程式中有且只有一個Main函式。 02.CLR是什麼?程式集是什麼?當執行一個程式集的時候,CLR做了什麼事情? Q:Common Langu

LoadRunner效能測試基礎知識問答

Notfound:指當找不到要找的動態資料時,怎麼處理。Notfound=error,當找不到動態資料時,發出一個錯誤資訊,為LoadRunner的預設值。Notfound=warning,當找不到動態資料時,不發出錯誤資訊,只發出警告,指令碼會繼續執行下去不會中斷。LB:動態資料的左邊界字串,該引數為必選引

Object-C基礎知識問答

一個區分度很大的面試題 考察一個面試者基礎咋樣,基本上問一個 @property 就夠了: @property 後面可以有哪些修飾符? 執行緒安全的: atomic,nonatomic訪問許可權的 readonly,readwrite記憶體管理(ARC) assign

噪音放大器原理及基礎知識問答

圖7 同相運算放大器的噪聲模型更多詳細內容,敬請瀏覽:http://seminar.eccn.com/100325/jchf_adi.asp問答選編問: 放大器的內部噪音如何進行精確測量?它和哪些因素有關?在測試時需要注意那些問題?答:對於放大器的噪聲的測量,一般來講就是把放大器的輸入接0,輸出經過一個低通

Spring 基礎知識 - 依賴註入

ans factory control 自己 int pac java str actor 所謂的依賴註入是指容器負責創建對象和維護對象間的依賴關系,而不是通過對象本身負責自己的創建和解決自己的依賴。 依賴註入主要目的是為了解耦,體現了一種“組合”的理念。 無論是xml配置

Java基礎知識二次學習--第八章 流

cti 註意 spa 基礎 2個 cnblogs images 方向 視頻 第八章 流 時間:2017年4月28日11:03:07~2017年4月28日11:41:54 章節:08章_01節 視頻長度:21:15 內容:IO初步 心得: 所有的流在java.io包裏面

Android View繪制知識問答

oid 不同 無法獲得 code pos ren ecs post 基本   1.View的繪制流程分幾步,從哪開始?哪個過程結束以後能看到view?   答:從ViewRoot的performTraversals開始,經過measure,layout,draw 三個流程

UVM系統驗證基礎知識0(Questasim搭建第一個UVM環境)

art otto quest 運行 microsoft href lin html clas 版權聲明:本文為Times_poem原創文章,轉載請告知原博主。特別聲明:本文在原文基礎上做了簡單修改以適應文中舉例在questasim下的運行,敬請原博主諒解。 需求說明:

javascript基礎知識整理(不定時更新)

nsh firefox 可用 splice mage true size -1 對數 1.js中真與假的定義:   真:true,非零數字,非空字符串,非空對象   假:false,數字零,空字符串,空對象(null),undefined 2.使用for循環對json進

C#基礎知識-函數的定義和調用(五)

返回 {0} string 訪問修飾符 容器 列表 rdquo 所有 func 函數也可以稱為方法,可以很方便的把一些行為封裝到函數裏面,當調用這一函數時會把函數塊裏面的代碼按照順序執行,方法可以有多種形式,有無參數,有無返回值等。 1. 函數的定義 函數定

C#基礎知識-流程控制的應用(四)

相關 ats 循環 nbsp 使用 logs 嘗試 exc 設置斷點 流程控制我們在編程中運用到的地方非常的多,在上篇中僅僅只是簡單的介紹每一種的使用,並沒有運用到實例中,很難去理解它真正的作用。下面我們將實際的運用流程控制的代碼寫一些實例相關的程序,加深對流程控制的理解,

java基礎知識應用--雙色球開獎號碼

雙色球開獎 java基礎 開獎號碼 public   雙色球是中國福利彩票的玩法,雙色球分為紅色球號碼區和藍色球號碼區,紅色球號碼區由1-33共33個號碼組成,藍色球號碼區由1-16共16個號碼組成,開獎號碼由6個不重復的紅色球號碼和1個藍色球號碼共7個數組成。  首先要設置三個數組來分別保存

redis的一些分散的基礎知識

redis基礎知識 ant風格 redis簡單命令 中午的時候學了redis一些基礎操作,簡單記錄一下,方便記憶1、redis是一種基於內存也可以持久化的 key - value分布式數據具,默認設置數據庫的數量為 16 個。如圖示,redis.conf配置文件中寫到,默認的數據庫的 db

網絡相關基礎知識

html tro 綜合布線 裝修公司 轉化 blog scn www 不同 1. Q:強電跟弱電怎麽區分? A1:強電和弱電是俗稱了,工程上強電一般指的是建築電力安裝,照明、插座、配電房,根據各國的標準不同,基本上施工的都是110V或220的電力設備、管線安裝。 弱電是指消

c語言-樹的基礎知識(一)

相交 ges 最大 .cn nbsp 分享 blog com lin 第一、樹的定義: 1.有且只有一個稱為根的節點 2.有若幹個互不相交的子樹,這些子樹本身也是一顆樹 第二、專業術語: 樹的深度:從根節點到最低層,節點的層數 ,稱之為樹的深度。

前端基礎知識總結

pla 部分 一個 知識 法則 總結 情況 元素 保存 一、html中alt和title的區別 1.alt是圖片的屬性值,當圖片無法加載的時候,會用alt屬性的值來替換圖片。 2.而title是圖片的標題,當鼠標移動到圖片上時,會顯示圖片的名稱。 [email 

Redux學習筆記-基礎知識

事件處理 學習筆記 情況 分發 .org 新的 分數 class 特點 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "Helvetica Neue"; color: #404040 } p.p2 { margin