2023年NET面試題整理之基礎篇_第1頁
2023年NET面試題整理之基礎篇_第2頁
2023年NET面試題整理之基礎篇_第3頁
2023年NET面試題整理之基礎篇_第4頁
2023年NET面試題整理之基礎篇_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2023.NET面試題整理之基礎篇1、什么是面向對象面向對象OO=面向對象的分析OOA+面向對象的設計OOD+面向對象的編程OOP;通俗的解釋就是萬物皆對象,把所有的事物都看作一個個可以獨立的對象(單元),它們可以自己完畢自己的功能,而不是像C那樣提成一個個函數(shù);現(xiàn)在純正的OO語言重要是java和C#,C++也支持OO,C是面向過程的。2、簡述privat(yī)e、protected、public、internal修飾符的訪問權限。privat(yī)e:私有成員,在類的內部才可以訪問。protected:保護成員,該類內部和繼承類中可以訪問。public:公共成員,完全公開,沒有訪問限制。internal:當前程序集內可以訪問。3、ADO.NET中的五個重要對象Connection:重要是啟動程序和數(shù)據(jù)庫之間的連結。沒有運用連結對象將數(shù)據(jù)庫打開,是無法從數(shù)據(jù)庫中取得數(shù)據(jù)的。這個物件在ADO.NET的最底層,我們可以自己產生這個對象,或是由其它的對象自動產生。Command:重要可以用來對數(shù)據(jù)庫發(fā)出一些指令,例如可以對數(shù)據(jù)庫下達查詢、新增、修改、刪除數(shù)據(jù)等指令,以及呼喊存在數(shù)據(jù)庫中的預存程序等。這個對象是架構在Connection對象上,也就是Command對象是透過連結到數(shù)據(jù)源。DataAdapter:重要是在數(shù)據(jù)源以及Dat(yī)aSet之間執(zhí)行數(shù)據(jù)傳輸?shù)墓ぷ?它可以透過Command對象下達命令后,并將取得的數(shù)據(jù)放入Dat(yī)aSet對象中。這個對象是架構在Command對象上,并提供了許多配合Dat(yī)aSet使用的功能。DataSet:這個對象可以視為一個暫存區(qū)(Cache),可以把從數(shù)據(jù)庫中所查詢到的數(shù)據(jù)保存起來,甚至可以將整個數(shù)據(jù)庫顯示出來。Dat(yī)aSet的能力不只是可以儲存多個Table而已,還可以透過Dat(yī)aAdapter對象取得一些例如主鍵等的數(shù)據(jù)表結構,并可以記錄數(shù)據(jù)表間的關聯(lián)。DataSet對象可以說是ADO.NET中重量級的對象,這個對象架構在DataAdapter對象上,自身不具有和數(shù)據(jù)源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet對象以及數(shù)據(jù)源間傳輸數(shù)據(jù)的橋梁。

Dat(yī)aReader:當我們只需要循序的讀取數(shù)據(jù)而不需要其它操作時,可以使用DataReader對象。DataReader對象只是一次一筆向下循序的讀取數(shù)據(jù)源中的數(shù)據(jù),并且這些數(shù)據(jù)是只讀的,并不允許作其它的操作。由于DataReader在讀取數(shù)據(jù)的時候限制了每次只讀取一筆,并且只能只讀,所以使用起來不僅節(jié)省資源并且效率很好。使用DataReader對象除了效率較好之外,由于不用把數(shù)據(jù)所有傳回,故可以減少網絡的負載。ADO.NET使用Connection對象來連接數(shù)據(jù)庫,使用Command或DataAdapter對象來執(zhí)行SQL語句,并將執(zhí)行的結果返回給DataReader或DataAdapter,然后再使用取得的DataReader或Dat(yī)aAdapter對象操作數(shù)據(jù)結果。4、列舉ASP.NET頁面之間傳遞值的幾種方式。1.使用QueryString,如....?id=1;response.Redirect()....2.使用Session變量3.使用Server.Transfer4.Cookie傳值5.Application傳值5、C#中的委托是什么?事件是不是一種委托?委托可以把一個方法作為參數(shù)代入另一個方法。委托可以理解為指向一個函數(shù)的引用。是,是一種特殊的委托。6、override與重載的區(qū)別重載是方法的名稱相同。參數(shù)或參數(shù)類型不同,進行多次重載以適應不同的需要Override是進行基類中函數(shù)的重寫。為了適應需要。7、描述一下C#中索引器的實現(xiàn)過程,是否只能根據(jù)數(shù)字進行索引?不是??梢杂萌我忸愋?。8、三層架構通常意義上的三層架構就是將整個業(yè)務應用劃分為:表現(xiàn)層(UI)、業(yè)務邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。區(qū)分層次的目的即為了“高內聚,低耦合”的思想。表現(xiàn)層(UI):通俗講就是展現(xiàn)給用戶的界面,即用戶在使用一個系統(tǒng)的時候的所見所得。業(yè)務邏輯層(BLL):針對具體問題的操作,也可以說是對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務邏輯解決。數(shù)據(jù)訪問層(DAL):該層所做事務直接操作數(shù)據(jù)庫,針對數(shù)據(jù)的增添、刪除、修改、更新、查找等每層之間是一種垂直的關系。三層結構是N層結構的一種,一般來說,層次之間是向下依賴的,下層代碼未擬定其接口(契約)前,上層代碼是無法開發(fā)的,下層代碼接口(契約)的變化將使上層的代碼一起變化。優(yōu)點:分工明確,條理清楚,易于調試,并且具有可擴展性。缺陷:增長成本。9、MVC模式MVC(ModelViewController)模型-視圖-控制器MVC是典型的平行關系,沒有說誰在上誰在下的關系,模型負責業(yè)務領域的事情,視圖負責顯示的事情,控制器把數(shù)據(jù)讀取出來填充模型后把模型交給視圖去解決。而各種驗證什么的應當是在模型里解決了。它強制性的使應用程序的輸入、解決和輸出分開。MVC最大的好處是將邏輯和頁面分離。10、什么是裝箱和拆箱?裝箱:從值類型接口轉換到引用類型。拆箱:從引用類型轉換到值類型。11、什么叫應用程序域一種邊界,它由公共語言運營庫圍繞同一應用程序范圍內創(chuàng)建的對象建立(即,從應用程序入口點開始,沿著對象激活的序列的任何位置)。應用程序域有助于將在一個應用程序中創(chuàng)建的對象與在其他應用程序中創(chuàng)建的對象隔離,以使運營時行為可以預知。在一個單獨的進程中可以存在多個應用程序域。應用程序域可以理解為一種輕量級進程。起到安全的作用。占用資源小。12、CTS、CLS、CLR分別作何解釋CTS:CommonTypeSystem通用系統(tǒng)類型。CLS:CommonLanguageSpecification通用語言規(guī)范。CLR:CommonLanguageRuntime公共語言運營庫。13、在dotnet中類(class)與結構(struct)的異同?相同點:語法類似不同點:1.class是引用類型,繼承自System.Object類;struct是值類型,繼承自System.ValueType類,因此不具多態(tài)性。但是注意,System.ValueType是個引用類型。2.從職能觀點來看,class表現(xiàn)為行為;而struct常用于存儲數(shù)據(jù)。3.class支持繼承,可以繼承自類和接口;而struct沒有繼承性,struct不能從class繼承,也不能作為class的基類,但struct支持接口繼承。4.class可以聲明無參構造函數(shù),可以聲明析構函數(shù);而struct只能聲明帶參數(shù)構造函數(shù),且不能聲明析構函數(shù)。因此,struct沒有自定義的默認無參構造函數(shù),默認無參構造器只是簡樸地把所有值初始化為它們的0等價值。5.實例化時,class要使用new關鍵字;而struct可以不使用new關鍵字,假如不以new來實例化struct,則其所有的字段將處在未分派狀態(tài),直到所有字段完畢初始化,否則引用未賦值的字段會導致編譯錯誤。6.class可以是抽象類(abstract),可以聲明抽象函數(shù);而struct為抽象,也不能聲明抽象函數(shù)。7.class可以聲明protected成員、virtual成員、sealed成員和override成員;而struct不可以,但是值得注意的是,struct可以重載System.Object的3個虛方法,Equals()、ToString()和GetHashTable()。8.class的對象復制分為淺拷貝和深拷貝,必須通過特別的方法來完畢復制;而struct創(chuàng)建的對象復制簡樸,可以直接以等號連接即可。9.class實例由垃圾回收機制來保證內存的回收解決;而struct變量使用完后立即自動解除內存分派。10.作為參數(shù)傳遞時,class變量是以按址方式傳遞;而struct變量是以按值方式傳遞的。該答案轉自:Anytao的[你必須知道的.NET]第四回:后來居上:class和struct關于類分派在堆上,結構分派在棧上存在爭議,這種說法應當指通常情況下另見xiaotie的Struct與Class辨析,謝謝指正14、堆和棧的區(qū)別?棧是編譯期間就分派好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;堆是程序運營期間動態(tài)分派的內存空間,你可以根據(jù)程序的運營情況擬定要分派的堆內存的大小。15、能用foreach遍歷訪問的對象的規(guī)定需要實現(xiàn)IEnumerable接口或聲明GetEnumerator方法的類型。16、GC是什么?為什么要有GC?GC是垃圾收集器。程序員不用緊張內存管理,由于垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:System.gc()Runtime.getRuntime().gc()17、Strings=newString("xyz");創(chuàng)建了幾個StringObject?對于.NET來說該題是錯誤的,主線就沒這樣的構造函數(shù)。謝謝37樓,趙偉43樓,DiggingDeeply指正Stringa="xyz";一方面會到常量池中去查找,假如存在就不再分派,假如不存在就分派,常量池中的數(shù)據(jù)是在編譯期賦值的,也就是生成class文獻時就把它放到常量池里了。18、值類型和引用類型的區(qū)別?1.賦值方式不同:基于值類型的變量直接包含值。將一個值類型變量賦給另一個值類型變量時,將復制包含的值。引用類型變量的賦值只復制對對象的引用,而不復制對象自身。2.值類型不也許派生出新的類型:所有的值類型均隱式派生自System.ValueType。但與引用類型相同的是,結構也可以實現(xiàn)接口。3.值類型不也許包含null值:然而,可空類型功能允許將null賦給值類型。4.每種值類型均有一個隱式的默認構造函數(shù)來初始化該類型的默認值。19、C#中的接口和類有什么異同。不同點:不能直接實例化接口。接口不包含方法的實現(xiàn)。接口可以多繼承,類只能單繼承。類定義可在不同的源文獻之間進行拆分。相同點:接口、類和結構都可以從多個接口繼承。接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現(xiàn)接口的所有成員。接口和類都可以包含事件、索引器、方法和屬性。20、abstractclass和interface有什么區(qū)別?相同點:都不能被直接實例化,都可以通過繼承實現(xiàn)其抽象方法。都是面向抽象編程的技術基礎,實現(xiàn)了諸多的設計模式。不同點:接口支持多繼承;抽象類不能實現(xiàn)多繼承。接口只能定義抽象規(guī)則;抽象類既可以定義規(guī)則,還也許提供已實現(xiàn)的成員。接口是一組行為規(guī)范;抽象類是一個不完全的類,著重族的概念。接口可以用于支持回調(CallBack);抽象類不能實現(xiàn)回調,由于繼承不支持。接口只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的署名,但不能定義字段和包含實現(xiàn)的方法;抽象類可以定義字段、屬性、包具有實現(xiàn)的方法。接口可以作用于值類型(Struct)和引用類型(Class);抽象類只能作用于引用類型。例如,Struct就可以繼承接口,而不能繼承類。21、sleep()和wait()有什么區(qū)別?sleep()方法是將當前線程掛起指定的時間。wait()釋放對象上的鎖并阻塞當前線程,直到它重新獲取該鎖。22、是否可以繼承String類?String類是sealed類故不可以繼承。(.NET中沒有final關鍵字,謝謝14樓New.min和15樓Duron800指正)23、try{}里有一個return語句,那么緊跟在這個try后的finally{}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?會執(zhí)行,在return前執(zhí)行。24、new關鍵字用法new運算符用于創(chuàng)建對象和調用構造函數(shù)。new修飾符用于向基類成員隱藏繼承成員。new約束用于在泛型聲明中約束也許用作類型參數(shù)的參數(shù)的類型。new實現(xiàn)多態(tài)25、如何把一個Array復制到ArrayList里實現(xiàn)1string[]s={"111","22222"};ArrayListlist=newArrayList();list.AddRange(s);實現(xiàn)2string[]s={"111","22222"};ArrayListlist=newArrayList(s);26、Dat(yī)aGrid(GridView,DataGridView)的Dat(yī)asouse可以連接什么數(shù)據(jù)源DataTableDataViewDataSetDataViewManager任何實現(xiàn)IListSource接口的組件任何實現(xiàn)IList接口的組件注:vs2023以后已經沒有提供Dat(yī)aGrid這個控件了,但是DataGrid還是可以使用的,該問題同樣合用于GridView,Dat(yī)aGridView控件,謝謝20樓風海迷沙指出27、描述線程與進程的區(qū)別?1.線程(Thread)與進程(Process)兩者都定義了某種邊界,不同的是進程定義的是應用程序與應用程序之間的邊界,不同的進程之間不能共享代碼和數(shù)據(jù)空間,而線程定義的是代碼執(zhí)行堆棧和執(zhí)行上下文的邊界。2.一個進程可以涉及若干個線程,同時創(chuàng)建多個線程來完畢某項任務,便是多線程。而同一進程中的不同線程共享代碼和數(shù)據(jù)空間。用一個比方來說,假如一個家庭代表一個進程,在家庭內部,各個成員就是線程,家庭中的每個成員都有義務對家庭的財富進行積累,同時也有權利對家庭財富進行消費,當面對一個任務的時候,家庭也可以派出幾個成員來協(xié)同完畢,而家庭之外的人則沒有辦法直接消費不屬于自己家庭的財產。28、什么是強類型,什么是弱類型?哪種更好些?為什么?強類型是在編譯的時候就擬定類型的數(shù)據(jù),在執(zhí)行時類型不能更改,而弱類型在執(zhí)行的時候才會擬定類型。沒有好不好,兩者各有好處,強類型安全,由于它事先已經擬定好了,并且效率高。一般用于編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運營的時候容易出現(xiàn)錯誤,但它靈活,多用于解釋型編程語言,如javascript,vb等29、什么是反射?程序集包含模塊,而模塊又涉及類型,類型下有成員,反射就是管理程序集,模塊,類型的對象,它可以動態(tài)的創(chuàng)建類型的實例,設立現(xiàn)有對象的類型或者獲取現(xiàn)有對象的類型,能調用類型的方法和訪問類型的字段屬性。它是在運營時創(chuàng)建和使用類型實例30、DateTime是否可認為null?不能,由于其為Struct類型,而結構屬于值類型,值類型不能為null,只有引用類型才干被賦值null31、using()語法有用嗎?什么是IDisposable?它是如何實現(xiàn)擬定性終結的有用,實現(xiàn)了IDisposiable的類在using中創(chuàng)建,using結束后會自定調用該對象的Dispose方法,釋放資源。不明白什么是擬定性終結32、Assembly.Load("foo.dll");這句話是否對的?錯誤,對的的應當是Assembly.Load("foo");或者Assembly.LoadFrom("foo.dll");33、Session有什么重大BUG,微軟提出了什么方法加以解決?是iis中由于有進程回收機制,系統(tǒng)繁忙的話Session會丟失,可以用Sateserver或SQLServer數(shù)據(jù)庫的方式存儲Session,但是這種方式比較慢,并且無法捕獲Session的END事件。34、XML與HTML的重要區(qū)別1.XML是區(qū)分大小寫字母的,HTML不區(qū)分。2.在HTML中,假如上下文清楚地顯示出段落或者列表鍵在何處結尾,那么你可以省略</p>或者</li>之類的結束標記。在XML中,絕對不能省略掉結束標記。3.在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個/字符作為結尾。這樣分析器就知道不用查找結束標記了。4.在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。5.在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。35、重載與覆蓋的區(qū)別?1.方法的覆蓋是子類和父類之間的關系,是垂直關系;方法的重載是同一個類中方法之間的關系,是水平關系2.覆蓋只能由一個方法,或只能由一對方法產生關系;方法的重載是多個方法之間的關系。3.覆蓋規(guī)定參數(shù)列表相同;重載規(guī)定參數(shù)列表不同。4.覆蓋關系中,調用那個方法體,是根據(jù)對象的類型(對像相應存儲空間類型)來決定;重載關系,是根據(jù)調用時的實參表與形參表來選擇方法體的。36、請編程遍歷頁面上所有TextBox控件并給它賦值為string.Empty?foreach(System.Windows.Forms.Controlcontrolinthis.Controls){if(controlisSystem.Windows.Forms.TextBox){System.Windows.Forms.TextBoxtb=(System.Windows.Forms.TextBox)control;tb.Text=String.Empty;}}37、根據(jù)線程安全的相關知識,分析以下代碼,當調用test方法時i>10時是否會引起死鎖?并說明理由。publicvoidtest(inti){lock(this){if(i>10){i--;test(i);}}}不會發(fā)生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現(xiàn)死鎖。但假如把int換做一個object,那么死鎖會發(fā)生)38、寫出程序的輸出結果classClass1{privatestringstr="Class1.str";privateinti=0;staticvoidStringConvert(stringstr){str="stringbeingconverted.";}staticvoidStringConvert(Class1c){c.str="stringbeingconverted.";}staticvoidAdd(inti){i++;}staticvoidAddWithRef(refinti){i++;}stat(yī)icvoidMain(){inti1=10;inti2=20;stringstr="str";Class1c=newClass1();Add(i1);AddWithRef(refi2);Add(c.i);StringConvert(str);StringConvert(c);Console.WriteLine(i1);Console.WriteLine(i2);Console.WriteLine(c.i);Console.WriteLine(str);Console.WriteLine(c.str);}}39、寫出程序的輸出結果publicabstractclassA{publicA(){Console.WriteLine('A');}pu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論