1. 程式人生 > >【收集】C#一些基礎的面試題

【收集】C#一些基礎的面試題

640?wx_fmt=png

C# 中 Struct 與 Class 的區別,以及兩者的適用場合

class 是引用型別,structs是值型別,class分配在堆上,struct分配在棧裡 
既然class是引用型別,class可以設為null。但是我們不能將struct設為null,因為它是值型別。

你使用的是一個對class例項的引用。而你使用的不是對一個struct的引用。(而是直接使用它們)

當我們將class作為引數傳給一個方法,我們傳遞的是一個引用。struct傳遞的是值而非引用。

struct 不能被繼承,class 可以被繼承

class支援繼承和多型,Struct不支援. 注意:但是Struct 可以和類一樣實現介面

既然Struct不支援繼承,其成員不能以protected 或Protected Internal 修飾
struct 預設的訪問許可權是public,而class 預設的訪問許可權是private.

struct總是有預設的構造函式,即使是過載預設構造函式仍然會保留。這是因為Struct的構造函式是由編譯器自動生成的,但是如果過載構造函式,必需對struct中的變數全部初始化。並且Struct的用途是那些描述輕量級的物件,例如Line,Point等,並且效率比較高。class在沒有過載構造函式時有預設的無引數構造函式,但是一被過載些預設構造函式將被覆蓋。

struct的new和class的new是不同的。struct的new就是執行一下構造

函式建立一個新例項再對所有的欄位進行Copy。而class則是在堆上分配一塊記憶體然後再執行構造函式,struct的記憶體並不是在new的時候分配的,而是在定義的時候分配

Class比較適合大的和複雜的資料,Struct適用於作為經常使用的一些資料組合成的新型別。

適用場合:Struct有效能優勢,Class有面向物件的擴充套件優勢。
用於底層資料儲存的型別設計為Struct型別,將用於定義應用程式行為的型別設計為Class。如果對型別將來的應用情況不能確定,應該使用Class。

C#中抽象類和介面的區別

一、抽象類:
      抽象類是特殊的類,只是不能被例項化;除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明於抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。
二、介面:
      介面是引用型別的,類似於類,和抽象類的相似之處有三點:
       1、不能例項化;
       2、包含未實現的方法宣告;
       3、派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員(不僅是方法包括其他成員);

       另外,介面有如下特性:
介面除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、建構函式、解構函式、靜態成員。一個類可以直接繼承多個介面,但只能直接繼承一個類(包括抽象類)。

三、抽象類和介面的區別:
      1.類是對物件的抽象,可以把抽象類理解為把類當作物件,抽象成的類叫做抽象類.而介面只是一個行為的規範或規定,微軟的自定義介面總是後帶able欄位,證明其是表述一類類“我能做。。。”.抽象類更多的是定義在一系列緊密相關的類間,而介面大多數是關係疏鬆但都實現某一功能的類中. 
      2.介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠呼叫的方法;     
      3.一個類一次可以實現若干個介面,但是隻能擴充套件一個父類     
      4.介面可以用於支援回撥,而繼承並不具備這個特點.     
      5.抽象類不能被密封。   
      6.抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非虛的,當然您也可以宣告為虛的. 
      7.(介面)與非抽象類類似,抽象類也必須為在該類的基類列表中列出的介面的所有成員提供它自己的實現。但是,允許抽象類將介面方法對映到抽象方法上。   
  8.如果抽象類實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面中方法.
四、抽象類和介面的使用:
      1. 如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單的方法來控制組件版本。
      2.如果建立的功能將在大範圍的全異物件間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。
      3.如果要設計大的功能單元,則使用抽象類.如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。   
      4.抽象類主要用於關係密切的物件;而介面適合為不相關的類提供通用功能。

sql優化-索引

http://database.ctocio.com.cn/tips/272/7588272.shtml 微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)

其實,我們的漢語字典的正文字身就是一個聚集索引。比如,我們要查“安”字,就會很自然地翻開字典的前幾頁,因為“安”的拼音是“an”,而按照拼音排序漢字的字典是以英文字母“a”開頭並以“z”結尾的,那麼“安”字就自然地排在字典的前部。如果您翻完了所有以“a”開頭的部分仍然找不到這個字,那麼就說明您的字典中沒有這個字;同樣的,如果查“張”字,那您也會將您的字典翻到最後部分,因為“張”的拼音是“zhang”。也就是說,字典的正文部分本身就是一個目錄,您不需要再去查其他目錄來找到您需要找的內容。

我們把這種正文內容本身就是一種按照一定規則排列的目錄稱為“聚集索引”。

如果您認識某個字,您可以快速地從自典中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據“偏旁部首”查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合“部首目錄”和“檢字表”而查到的字的排序並不是真正的正文的排序方法,比如您查“張”字,我們可以看到在查部首之後的檢字表中“張”的頁碼是672頁,檢字表中“張”的上面是“馳”字,但頁碼卻是63頁,“張”的下面是“弩”字,頁面是390頁。很顯然,這些字並不是真正的分別位於“張”字的上下方,現在您看到的連續的“馳、張、弩”三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的對映。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。

  我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為“非聚集索引”。

每個表只能有一個聚集索引,因為目錄只能按照一種方法進行排序。

  下面的表總結了何時使用聚集索引或非聚集索引(很重要)。

 動作描述使用聚集索引  使用非聚集索引
 外來鍵列 應  應
 主鍵列 應 應
 列經常被分組排序(order by) 應 應
 返回某範圍內的資料 應 不應
 小數目的不同值 應 不應
 大數目的不同值 不應 應
 頻繁更新的列不應  應
 頻繁修改索引列 不應 應
 一個或極少不同值 不應 不應

   事實上,我們可以通過前面聚集索引和非聚集索引的定義的例子來理解上表。

例如返回某範圍內的資料一項。比如您的某個表有一個時間列,恰好您把聚合索引建立在了該列,這時您查詢2004年1月1日至2004年10月1日之間的全部資料時,這個速度就將是很快的,因為您的這本字典正文是按日期進行排序的,聚類索引只需要找到要檢索的所有資料中的開頭和結尾資料即可

相關推薦

收集C#一些基礎試題

C# 中 Struct 與 Class 的區別,以及兩者的適用場合class 是引用型別,str

典型的JavaScript試題

() cee not spa tro cnblogs and enc 分配 問題1: 作用域(Scope) 1 (function() { 2 "use strict"; 3 var a = b = 5; 4 })(); 5 console.log(b); 控

java:多線程試題

編寫 cond func condition pri ide syn ack rri 經常面試的時候,讓寫各種亂七八糟的多線程面試題,收集了很多,有些還是挺好玩的。 1、編寫程序實現,子線程循環10次,接著主線程循環20次,接著再子線程循環10次,主線程循環20

leetcode 70. 爬樓梯遞迴Easy&& 劍指Offer試題10 題目2:青蛙跳臺階問題

題目: 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個正整數。 示例 1: 輸入: 2 輸出: 2 解釋: 有兩種方法可以爬到樓頂。 1. 1 階 + 1 階 2.

C#程式設計基礎試題(.NET開發人員必備)

1. C/S結構模式與B/S結構模式的主要區別是什麼?    【解答】    首先,在系統的效能方面。只要擁有可上網的瀏覽器,就可以使用B/S系統。不過,B/S結構的客戶端只能完成瀏覽、查詢、資料輸入等簡單功能,絕大部分工作要由伺服器承擔,這就對伺服器提出了很高的要求,無形

整理SpringMvc+Spring+Hibernate試題

SpringMVC部分 1、什麼是Spring MVC ?簡單介紹下你對springMVC的理解? Spring MVC是一個基於MVC架構的用來簡化web應用程式開發的應用開發框架,它是Spring的一個模組,無需中間整合層來整合 ,它和Struts2一樣都屬於表現層

C語言基礎試題(一)

1.寫出判斷ABCD四個表示式的是否正確, 若正確, 寫出經過表示式中 a的值 int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++); a = ?答:C錯誤,左側不是一個有效變

重點劍指offer——試題53:正則表示式匹配

劍指offer——面試題53:正則表示式匹配 Solution1: 程式碼中的註釋寫的不是太清楚,加一點: 一、當模式中的第二個字元不是“*”時: 1、如果字串第一個字元和模式中的第一個字元相匹配,那麼字串和模式都後移一個字元,然

MySQL20個經典試題,全部答對月薪10k+

原文連結:http://bbs.51cto.com/thread-1470880-1.html Part2:經典題目 1、MySQL的複製原理以及流程 基本原理流程,3個執行緒以及之間的關聯; 2、MySQL中myisam與innodb的區別,至少5點 (

一個fork的試題

前兩天有人問了個關於Unix的fork()系統呼叫的面試題,這個題正好是我大約十年前找工作時某公司問我的一個題,我覺得比較有趣,寫篇文章與大家分享一下。這個題是這樣的: 題目:請問下面的程式一共輸出多少個“-”? #include <stdio.h>#include <sys/types.h

MySQL20個經典試題

Part1:經典題目 1、MySQL的複製原理以及流程 基本原理流程,3個執行緒以及之間的關聯; 2、MySQL中myisam與innodb的區別,至少5點 (1)、問5點不同; (2)、innodb引擎的4大特性 (3)、2者selectcount(*

搞定Java基礎之集合類試題整理

因為集合類在Java基礎知識中是非常重要的,也是面試中最常問到的,設計的問題也比較多,因此單獨拿出來做面試題的整理,方便自己複習,也希望給看到此篇文章的你帶來一定的幫助。文章內容均來自於網路,平時看到總結不錯的題目,就收集在此。持續更新....... 先推薦幾篇不錯的文章: 1、Java集合

每日一題Java 基本資料型別基礎試題

原文作者資訊 作者:工匠若水 公眾號: 碼農每日一題 (1)問:如下程式語句有什麼問題嗎? short s1 = 1;s1 = s1 + 1;    //1short s2 = 1;s2 +

收藏一套基礎C語言筆試題

每個5分共100分。錯選、多選、少選或不選均不得分。 1.[單選題]一個C程式的執行是從( A )A:本程式的main函式開始,到main函式結束B:本程式檔案的第一個函式開始,到本程式檔案的最後一個函式結束C:本程式的main函式開始,到本程式檔案的最後一個函式結束D:

Java試題系列:Java基礎知識面試題,看這一篇就夠了(持續更新)

文中面試題從茫茫網海中精心篩選,如有錯誤,歡迎指正! 1.前言 ​ 參加過社招的同學都瞭解,進入一家公司面試開發崗位時,填寫完個人資訊後,一般都會讓先做一份筆試題,然後公司會根據筆試題的回答結果,確定要不要繼續此次面試,如果答的不好,有些公司可能會直接說“技術經理或者總監在忙,你先回去等通知吧”,有些公司

Java試題系列:Java基礎知識面試題,看這一篇就夠了

路徑 拼接 i++ misc min 中新 dem 總結 內容 文中面試題從茫茫網海中精心篩選,如有錯誤,歡迎指正! 1.前言 參加過社招的同學都了解,進入一家公司面試開發崗位時,填寫完個人信息後,一般都會讓先做一份筆試題,然後公司會根據筆試題的回答結果,確定要不要繼續此

前端小小白的學習之路整理幾道試題之(HTTP協議)

ase 賬號 檢測 提交數據 大型數據集 tor 添加 描述 分享 轉自:http://www.cnblogs.com/ranyonsue/p/5984001.html HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸

分類整理I 微軟等100題系列V0 1版 c/c++基礎試題集錦

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java基礎試題收集整理

1、一個".java"原始檔中是否可以包括多個類(不是內部類)?有什麼限制?    可以有多個類,但只能有一個public的類,並且public的類名必須與檔名相一致。 2、Java有沒有goto?    java中的保留字,現在沒有在java中使用。 3、說說&

領卓教育C語言基礎教學之氣泡排序

在C語言中,經常會用到for迴圈語句,通過for迴圈語句,可以使很多程式變得簡便,同時也能實現很多普通語句不能實現的功能。在for迴圈中,不僅只是單純的一個for迴圈,例如: main { ...; for(i=0;i<10;i++)