C常見面試題

2021-04-24 07:15:17 字數 4490 閱讀 3048

下面的題是供大家查漏補缺用的,真正的把這些題搞懂了,才能「以不變應萬變」。

回答問題的時候能聯絡做過專案的例子是最好的,有的問題後面我已經補充聯絡到專案中的對應的案例了。

1、簡述private、protected、public、internal修飾符的訪問許可權。

private:私有成員,在類的內部才可以訪問。

protected:保護成員,該類內部和繼承類中可以訪問。

public:公共成員,完全公開,沒有訪問限制。

internal:當前程式集內可以訪問。

2、中的五個主要物件

connection:主要是開啟程式和資料庫之間的連線。沒有利用連線物件將資料庫開啟,

是無法從資料庫中取得資料的。close和dispose的區別,close以後還可以open,dispose以後則不能再用。

command:主要可以用來對資料庫發出一些指令,例如可以對資料庫下達查詢、新增、修改、刪除資料等指令,

以及呼叫存在資料庫中的儲存過程等。這個物件是架構在connection物件上,

也就是command物件是透過連線到資料來源。

dataadapter:主要是在資料來源以及dataset之間執行資料傳輸的工作,它可以透過command物件下達命令後,

並將取得的資料放入dataset物件中。這個物件是架構在command物件上,並提供了許多配合dataset使用的功能。

dataset:這個物件可以視為乙個暫存區(cache),可以把從資料庫中所查詢到的資料保留起來,

甚至可以將整個資料庫顯示出來,dataset是放在記憶體中的。dataset的能力不只是可以儲存多個table而已,

還可以透過dataadapter物件取得一些例如主鍵等的資料表結構,並可以記錄資料表間的關聯。

dataset物件可以說是中重量級的物件,這個物件架構在dataadapter物件上,

本身不具備和資料來源溝通的能力;也就是說我們是將dataadapter物件當做dataset物件以及資料來源間傳輸資料的橋梁。

dataset包含若干datatable、datatabletable包含若干datarow。

datareader:當我們只需要循序的讀取資料而不需要其它操作時,可以使用datareader物件。

datareader物件只是一次一筆向下循序的讀取資料源中的資料,這些資料是存在資料庫伺服器中的,

而不是一次性載入到程式的記憶體中的,只能(通過游標)讀取當前行的資料,而且這些資料是唯讀的,

並不允許作其它的操作。因為datareader在讀取資料的時候限制了每次只讀取一筆,而且只能唯讀,

所以使用起來不但節省資源而且效率很好。使用datareader物件除了效率較好之外,

因為不用把資料全部傳回,故可以降低網路的負載。

使用connection物件來連線資料庫,使用command或dataadapter物件來執行sql語句,

並將執行的結果返回給datareader或dataadapter,

然後再使用取得的datareader或dataadapter物件運算元據結果。

3、列舉頁面之間傳遞值的幾種方式。

1.使用querystring,如....?id=1;response.redirect()....

2.使用session變數

3.使用server.transfer

傳值5.application傳值

6.previospage

server.transfer和response.redirect的區別:server.transfer是伺服器內部的轉接,

瀏覽器不知曉;response.redirect是有瀏覽器參與的,所以在位址列中可以看到位址的變化。

4、c#中的委託是什麼?事件是不是一種委託?事件和委託的關係。

委託可以把乙個方法作為引數代入另乙個方法。

委託可以理解為指向乙個函式的指標。

委託和事件沒有可比性,因為委託是型別,事件是物件,下面說的是委託的物件(用委託方式實現的事件)

和(標準的event方式實現)事件的區別。事件的內部是用委託實現的。因為對於事件來講,

外部只能「註冊自己+=、登出自己-=」,外界不可以登出其他的註冊者,外界不可以主動觸發事件,

因此如果用delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委託例項的,

模擬用乙個自定義類閹割list。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能=。

加分的補充回答:事件內部就是乙個private的委託和add、remove兩個方法。

面試聊:用reflector檢視.net的類的內部實現,解決問題。

5、override與過載(overload)的區別

過載是方法的名稱相同。引數或引數型別不同,進行多次過載以適應不同的需要。

過載(overload)是面向過程的概念。

override是進行基類中函式的重寫。override是物件導向的概念

6、c#中索引器是否只能根據數字進行索引?是否允許多個索引器引數?

引數的個數和型別都是任意的。加分的補充回答:用reflector反編譯可以看出,

索引器的內部本質上就是set_item、get_item方法。加分的補充回答:

。7、屬性和public欄位的區別是什麼?呼叫set方法為乙個屬性設值,

然後用get方法讀取出來的值一定是set進去的值嗎?

屬性可以對設值、取值的過程進行非法值控制,比如年齡禁止設值負數,而字段則不能進行這樣的設定

。雖然一般情況下get讀取的值就是set設定的值,但是可以讓get讀取的值不是set設定的值的,極端的例子。

publicageset{}}。加分的補充回答:用reflector反編譯可以看出,

屬性內部本質上就是set_***、get_***方法,

classperson

set}

}personp1=newperson();

p1.age=30;

p1.age++;

console.write(p1.age);//輸出3

8、三層架構

通常意義上的三層架構就是將整個業務應用劃分為:表現層(ui)、業務邏輯層(bll)、資料訪問層(dal)。

區分層次的目的即為了「高內聚,低耦合」的思想。

表現層(ui):通俗講就是展現給使用者的介面,即使用者在使用乙個系統的時候的所見所得。

業務邏輯層(bll):針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。

資料訪問層(dal):該層所做事務直接運算元據庫,針對資料的增添、刪除、修改、更新、

查詢等每層之間是一種垂直的關係。

三層結構是n層結構的一種,一般來說,層次之間是向下依賴的,下層**未確定其介面(契約)前,

上層**是無法開發的,下層**介面(契約)的變化將使上層的**一起變化。

優點:分工明確,條理清晰,易於除錯,而且具有可擴充套件性。

缺點:增加成本。

9、mvc模式(*)

mvc(modelviewcontroller)模型-檢視-控制器

aspx就是view,檢視;model:dataset、reader、物件;controller:cs**。

mvc是典型的平行關係,沒有說誰在上誰在下的關係,模型負責業務領域的事情,

檢視負責顯示的事情,控制器把資料讀取出來填充模型後把模型交給檢視去處理。

而各種驗證什麼的應該是在模型裡處理了。它強制性的使應用程式的輸入、處理和輸出分開。

mvc最大的好處是將邏輯和頁面分離。

10、什麼是裝箱(boxing)和拆箱(unboxing)?(*)

裝箱:從值型別介面轉換到引用型別。

拆箱:從引用型別轉換到值型別。

objectobj=null;//引用型別

obj=1;//裝箱,boxing。把值型別包裝為引用型別。

inti1=(int)obj;//拆箱。unboxing

11、什麼叫應用程式域(appdomain)(*)

一種邊界,它由公共語言執行庫圍繞同一應用程式範圍內建立的物件建立

(即,從應用程式入口點開始,沿著物件啟用的序列的任何位置)。

應用程式域有助於將在乙個應用程式中建立的物件與在其他應用程式中建立的物件隔離,

以使執行時行為可以預知。

在乙個單獨的程序中可以存在多個應用程式域。應用程式域可以理解為一種輕量級程序。

起到安全的作用。占用資源小。

12、cts、cls、clr分別作何解釋(*)

cts:commontypesystem通用系統型別。int32、int16→int、string→string、boolean→bool

cls:commonlanguagespecification通用語言規範。不同語言語法的不同。

clr:commonlanguageruntime公共語言執行時,就是.net提供的那些類。

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

class可以被例項化,屬於引用型別,是分配在記憶體的堆上的。類是引用傳遞的。

struct屬於值型別,是分配在記憶體的棧上的。結構體是複製傳遞的。加分的回答:int32、boolean等都屬於結構體。

C 常見面試題

1 sizeofconst預處理題目 sizeof相關系列問題 1 對於struct s sizeof s 8 因為當結構體內的元素長度都小於處理器位數 32位 4位元組 的時候,便以結構體中最長的資料元素為對齊條件。在本題中,a 按 1 位元組對齊,b 按 4 位元組對齊,所以s預設對其引數為8。...

c 常見面試題

許多面試題看似簡單,卻需要深厚的基本功才能給出完美的解答。企業要求面試者寫乙個最簡單的strcpy函式都可看出面試者在技術上究竟達到了怎樣的程度,我們能真正寫好乙個strcpy函式嗎?我們都覺得自己能,可是我們寫出的strcpy很可能只能拿到10分中的2分。讀者可從本文看到strcpy函式從2分到1...

C 常見面試題

鍊錶反轉單向鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的 1 2 3 4 5 通過反轉後成為5 4 3 2 1.struct linka void reverse linka head head next null head pre 還有一種利用遞迴的方法。這...