近期面試的問題整理

這一、兩個月陸陸續續也面試了幾家公司,卻也因此發現很多自己過往並不了解的東西,順便整理起來當作學習,也可以幫助到其他人

1. Boxing, Unboxing

這個其實概念非常簡單,就是把物件轉變成object,再casting回來,以前也用過,只是沒想到名詞是這個

範例請見

https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/types/boxing-and-unboxing

 

2. public, private, protected, internal

public, private, protected來說大家應該不陌生,反倒是internal沒有用過,當下還真不知道這是什麼

public: 任何人都可以存取使用

private: 只有自身類別才能存取使用

protected: 只有自身類別與子類別才能存取使用

internal: 只有同一個namespace的才能存取

另一個名詞protected internal也因此而誕生

protected internal: 本來以為是protected && internal的概念,沒想到是protected || internal的概念

參考資料有畫圖,會更容易理解

https://dotnetrecorder.wordpress.com/2013/06/27/c-%E5%AD%98%E5%8F%96%E4%BF%AE%E9%A3%BE%E8%A9%9E%E3%80%90public-protected-private-internal-protected-internal%E3%80%91%E7%9A%84%E5%8D%80%E5%88%A5/

 

3. const 與  readonly的差別

用了C#這麼久,一直以來都是用 const,較少會去用到readonly

但沒想到差異性還蠻大的,讓我蠻驚訝的,只是以前的寫法都在同一個project用const或是readonly都不會出問題

const: 性能較好, 缺點只能用於 int, string

readonly: 較有彈性, 能用於所有type

最最最大的差異在於引用的方式,但這通常發生於A project去reference B project時的const, readonly變數會發生的

const的引用是以,而readonly的引用是以變數

詳細例子可以看這篇網誌,應當會被結果給嚇了一跳

https://dotblogs.com.tw/yc421206/archive/2011/06/06/27232.aspx

 

4. 資料庫效能 Cluster index 與 Non-cluster index

以前僅限接觸過一次,記憶馬上飛走

詳細差異可以參閱

http://www.qa-knowhow.com/?p=377

 

5. Regular super class 與 abstract class的差異

這是沿生至abstract class 與 interface的差異的問題

abstract class與 interface 在design pattern都是重量級的角色

一般來說interface只是行為面的介面,不能包含變數與實作內容

而abstract則可以針對未知的部份去定義即可,若有共用的function則可定義在abstract class裡進去重複使用

而問題就來了: regular super class 可以做abstract class 所有的事,那什麼時候該用哪一個

在多型方面,regular super class的確也可以做到abstract class的事

以收納共用變數與function來講,的確兩者都也都可以做到

在使用上最大的差異應該就是在於實體化,abstract class無法被實體化

總體來說,會宣告成abstract function的通常也意味著目前你還不清楚實作會是長成什麼樣

或是在子類別上的實作是完全不一樣的事情,才會定義為abstract class

而使用上,你必須定義一個regular class繼承這個abstract class,才能在程式上的實作有辦法使用

更多的參考資料與差異

https://stackoverflow.com/a/13079402
https://kejyuntw.gitbooks.io/php-learning-notes/class/class-abstract-interface-compare.html

 

 

參考資料

boxing unboxing
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/types/boxing-and-unboxing

pbulic, private, protected, internal, protected internal
https://dotnetrecorder.wordpress.com/2013/06/27/c-%E5%AD%98%E5%8F%96%E4%BF%AE%E9%A3%BE%E8%A9%9E%E3%80%90public-protected-private-internal-protected-internal%E3%80%91%E7%9A%84%E5%8D%80%E5%88%A5/

const, readonly
https://dotblogs.com.tw/yc421206/archive/2011/06/06/27232.aspx

cluster index, non-cluster index
http://www.qa-knowhow.com/?p=377

regular super class, abstract class 
https://stackoverflow.com/a/13079402
https://kejyuntw.gitbooks.io/php-learning-notes/class/class-abstract-interface-compare.html