1. 程式人生 > >日常問題總結 一

日常問題總結 一

tom 關鍵字 discover sans 編譯期 語文 reac efi 重新定義

#堆和棧的區別

棧是編譯期間就分配好的空間,因此在代碼中必須就棧的大小有明確的定義。局部值類型變量、值類型參數等都在棧內存中。堆是程序運行期間動態分配的內存空間,可以根據程序的運行情況調整分配的堆內存大小。

#下面程序的執行結果?

inti = 10;

Console.WriteLine(i++);=>10

Console.WriteLine(++i);=>12

i++表達式的值為i自增之前的值,所以打印10,執行完成後i變成11,執行++i的時候表達式的值為自增以後的值12。

#在dotnet中類(class)與結構(struct)的異同?

Class可以被實例化,屬於引用類型,是分配在內存的堆上的,引用傳遞。Struct屬於值類型,是分配在內存的棧上的,復制傳遞。Int32、Boolean等都屬於結構體。

#請敘述屬性與索引器的區別

屬性通過名稱標識。索引器通過簽名標識。屬性通過簡單名稱或成員訪問來訪問。索引器通過元素訪問來訪問。屬性可以為靜態成員或實例成員。索引器必須為實例成員。屬性的get訪問器沒有參數。 索引器的get訪問器具有與索引器相同的形參表。屬性的set訪問器包含隱式value參數。除了value參數外,索引器的set訪問器還具有與索引器相同的形參表。

# C#中的接口和類有什麽異同

實例化、繼承、成員方面

# 抽象類和接口的異同

相同點: 都不能被直接實例化,都可以通過繼承實現其抽象方法。

不同點: 接口支持多繼承;抽象類不能實現多繼承。接口只能定義行為;抽象類既可以定義行為,還可能提供實現。 接口只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義字段和包含實現的方法;抽象類可以定義字段、屬性、包含有實現的方法。

#虛方法的使用場合、與接口的區別

子類重新定義父類的某一個方法時,必須把父類的方法定義為virtual。在定義接口中不能有方法體,虛方法可以。實現時,子類可以不重新定義虛方法,但如果一個類繼承接口,那必須實現這個接口。

#C#中的委托是什麽,事件和委托的關系。

委托可以理解為函數指針。委托和事件沒有可比性,因為委托是類型,事件是對象,下面說的是委托的對象(用委托方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委托實現的。因為對於事件來講,外部只能“註冊自己+=、註銷自己-=”,外界不可以註銷其他的註冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委托實例的,類比用一個自定義類閹割List。事件只能add、remove自己,不能賦值,事件內部就是一個private的委托和add、remove兩個方法

#能用foreach遍歷訪問的對象的要求

需要實現IEnumerable接口或聲明GetEnumerator方法的類型。

#using關鍵字有什麽用?什麽是IDisposable?

using可以聲明namespace的引入,還可以實現非托管資源的釋放。實現了IDisposiable的類在using中創建,using結束後會自動調用該對象的Dispose方法,釋放資源。using用於資源釋放時,等價於try……finally。

#WebService基本概念

WebService解決的三個問題:接口的自我描述;采用Http協議等常規協議,不用寫原始的Socket;基於Web服務器,不占用80端口之外的端口。

UDDI(Universal Description Discovery and Integration)用來自動發現WebService的協議。

WSDL(WebService Defination Language)是對WebService上的方法名、參數進行描述的協議。對接口的自描述。

SOAP(Simple Object Access Protocol)是對參數、返回值以什麽樣的格式進行傳遞進行描述的協議,是對報文的格式規範。

SOAP和HTTP的關系:SOAP基於Http協議的,和普通網頁不同的是網頁返回HTML,SOAP則是符合SOAP協議的XML數據。

#橫縱表轉換

縱表結構 TableA

Name

Course

Grade

張三

語文

75

張三

數學

80

張三

英語

90

李四

語文

95

李四

數學

55

橫表結構 TableB

Name

語文

數學

英語

張三

75

80

90

李四

95

55

0

縱表轉橫表:

selectName,

sum(caseCourse when ‘語文‘ then Grade else 0 end) as Chinese,

sum(caseCourse when ‘數學‘ then Grade else 0 end) as Math,

sum(caseCourse when ‘英語‘ then Grade else 0 end) as English

fromTableA

groupby Name

橫表轉縱表:

select* from

(

select Name,Course=‘語文‘,Grade=Chinese fromTableB

union

select Name,Course=‘數學‘,Grade=Math fromTableB

union

select Name,Course=‘英語‘,Grade=English fromTableB

) awhere grade!=0

orderby Name,Grade desc

#刪除姓名、年齡重復的記錄,只保留ID最大的一條

1 tom 18 3000

2 tom 18 3300

3 gal 28 2000

4 tim 28 2200

5 gal 28 2020

select* from T_Duplicate where ID in

(

select MAX(id) from T_Duplicate

group by name,age

)

日常問題總結 一