.net面試題

一、簡述 private、 protected、 public、 internal 修飾符的訪問權限。

訪問修飾符javascript

說明java

public程序員

公有訪問。不受任何限制。web

private數據庫

私有訪問。只限於本類成員訪問,子類,實例都不能訪問。編程

protected數組

保護訪問。只限於本類和子類訪問,實例不能訪問。瀏覽器

internal安全

內部訪問。只限於本項目內訪問,其餘不能訪問。服務器

protected internal

內部保護訪問。只限於本項目或是子類訪問,其餘不能訪問

 

二、ADO.NET中的五個主要對象

1Connection:與數據源創建鏈接。

2Command:對數據源執行SQL命令並返回結果。

3DataReader:讀取數據源的數據,只容許對將數據源以只讀、順向的方式查看其中所存儲的數據。其經常使用於檢索大量數據,DataReader對象仍是一種很是節省資源的數據對象。

4DataAdapter:對數據源執行操做並返回結果,在DataSet與數據源之間創建通訊,將數據源中的數據寫入DataSet中,或根據DataSet中的數據綁定數據源。

5DataSet:內存中的數據庫,是數據表的集合,它能夠包含任意多個數據表。

三、列舉ASP.NET 頁面之間傳遞值的幾種方式。 

1.querystring

2.cookies

3.Application

4.session

四、new有幾種用法

1)new 運算符:用於建立對象和調用構造函數。這種你們都比較熟悉,沒什麼好說的了。

2)new 修飾符:在用做修飾符時,new 關鍵字能夠顯式隱藏從基類繼承的成員。

3)new 約束檢查泛型實列是否具備默認構造函數,如沒有則編譯錯誤。

 

五、sealed修飾的類有什麼特色

密封類,不能被其餘類繼承

 六、請編程遍歷頁面上全部TextBox控件並給它賦值爲string.Empty?

 

foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } }

 

 

後臺(String.Empty是空字符串,是個特殊符號,在內存中有儲存空間,null只是string類型的應用,沒有在內存中儲存,若是不實冽將報錯。)

 

 

七、.net中,配件的意思是?

程序集。(中間語言,源數據,資源,裝配清單)

8、裝箱和拆箱

裝箱就是值類型轉換爲object類型,拆箱相反:object轉化爲值類型

裝箱使任何事物看起來都像是一個對象,即裝箱是一種讓值類型看起來好像引用類型的處理過程。這樣才符合面向對象把一切事物都當作對象的思想。固然有裝箱就有拆箱。

9如何理解三層架構

表現層----即頁面呈現。

業務邏輯層----業務處理及數據傳遞。

數據訪問層----即數據庫交互等操做。  

 

代碼清晰、鬆散耦合、易管理、易維護、適合團隊開發、

 

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

必須是集合或者數組。

實現了IEnumerator接口

 

11. GC是什麼? 爲何要有GC?  

GCGarbage Collector,垃圾回收器)是一種自動回收內存的機制,釋放已經再也不使用的對象的內存空間。

 

1.建立新對象開闢內存空間,在使用完後須要釋放內存,提升性能

 

  2.避免開發人員直接操做內存,提升安全性

 

 

 

12. 介紹幾個開源的項目

Json.NET

 

Log4net

 

Nuget

 

Linux

火狐等

 

 

  1. 說出五個集合類

 

Array

ArrayList

List<T>

Dictionary<TKey,TValue>

Stack  先進先出集合

 

  1. 什麼是code-Behind技術。

 

 

Code Behind就是所謂的代碼分離,一個前臺aspx頁,一個代碼頁ascx

 

  1. using關鍵字有什麼用?什麼是IDisposable

 

1.引用命名空間

2.起別名 using sd=system.data    

3.using語句,定義一個範圍,在範圍結束時處理對象。

 

 IDisposable接口定義:定義一種釋放分配的資源的方法。

 

   .NET 平臺在內存管理方面提供了GCGarbage Collection),負責自動釋放託管資源和內存回收的工做,但它沒法對非託管資源進行釋放,這時咱們必須本身提供方法來釋放對象內分配的非託管資源

 

1六、不是說字符串是不可變的嗎?string s="abc";s="123"不就是變了嗎?

這個不是改變是在內存中從新開闢空間放了個123進去以前的abc還在內存中只不過s沒有指向它了。

 

1七、是否能夠從一個static方法內部發出對非static方法的調用?

不能夠,靜態方法能夠直接調用,非靜態要實例化 New 對象調用,

在靜態方法中調用非靜態若是靜態方法沒實例就會出現空指針異常

 

1八、說出一些經常使用的類、接口,請各舉5

 

經常使用類 String  System  Responese  Random Request     

     

經常使用接口: Remote  List  Map  Document  NodeList

 

 

           

          

 

1九、傳入某個屬性的set方法的隱含參數的名稱是什麼?

value,它的類型和屬性所聲名的類型相同。

20、C#支持多重繼承麼?

不支持。能夠用接口來實現

 

21C#中全部對象共同的基類是什麼?

System.Object.

 

2二、經過超連接怎樣傳遞中文參數?

 

QueryString能夠傳遞,涉及編碼解碼

 

 

2三、AJAX解決什麼問題?如何使用AJAXAJAX有什麼問題須要注意?項目中哪裏用到了AJAX

 

 

1.不提交頁面就能實現局部數據刷新

2.Javascript中使用XMLHttpRequest進行Http的請求

3.沒法在頁面中向和當前域名不一樣的頁面發送請求

4.留言回覆、註冊信息驗證、局部數據刷新等。

 

 

2四、開放式問題:你常常訪問的技術類的網站是什麼?

博客園

51CTO

CSDN

2五、你對.netGC的理解

一種自動回收非託管資源的方法

 

2六、請你簡單的說明數據庫創建索引的優缺點

 

 

使用索引能夠加快數據的查詢速度,不過因爲數據插入過程當中會建索引,因此會下降數據的插入、更新速度,索引還會佔磁盤空間。

 

2七、Session有什麼重大BUG,微軟提出了什麼方法加以解決?(常考)

iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate serverSQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲SessionEND事件。

 

2八、說說在軟件設計中你遇到的以空間換時間的例子?

 

用耗費掉的應用時間,所達到的結果

 

 

2九、asp.net中的錯誤機制。(常考)

 

錯誤處理方法:

一是將錯誤信息記錄日誌,發郵件通知網站維護人員,方便技術人員對錯誤進行跟蹤處理;二是以友好的方式提示最終用戶頁面發生了錯誤,而不能將未處理的錯誤信息顯示給用戶

 

Page_Error事件 > ErrorPage屬性 > Application_Error事件 >  <customErrors>配置項

 

 

30、有一個10個數的數組,計算其中不重複數字的個數。{3,5,9,8,10,5,3}

 

while (true)

            {

                Console.WriteLine("請輸入一個數字");

                int cr = Convert.ToInt32(Console.ReadLine());

                if (cr == 0)

                {

                    break;

                }

                if (!(cr > 2 && cr < 22))

                {

                    Console.WriteLine("非法行數!");

                    continue;

                }

                for (int i = 0; i < cr; i++)

                {

                    int k =0;

                    for (; k < i; k++)

                    {

                        Console.Write(" ");

                    }

                    for (int j = k; j < cr; j++)

                    {

                        Console.Write("* ");

                    }

                    Console.WriteLine();

                }  

            }          

        }

    }

 

 

3一、下面是一個由*號組成的4行倒三角形圖案。要求:1、輸入倒三角形的行數,行數的取值3-21之間,對於非法的行數,要求拋出提示非法行數!2、在屏幕上打印這個指定了行數的倒三角形。

*******

*****

***

*

 while (true)

 

            {

 

                Console.Write("請輸入行數:範圍3-21,輸入0退出程序。");

 

                int line = 0;

 

                if (!Int32.TryParse(Console.ReadLine(), out line))

 

                {

 

                    Console.WriteLine("請輸入正確的行數!");

 

                    continue;

 

                }

 

                if (line == 0)

 

                {

 

                    Console.WriteLine("退出!");

 

                    break;

 

                }

 

                else if (!(line > 2 && line < 22))

 

                {

 

                    Console.WriteLine("非法行數!請輸入正確的行數!");

 

                    continue;

 

                }

 

                for (int i = 0; i < line; i++)

 

                {

 

                    int j = 0;

 

                    for (; j < i; j++)

 

                    {

 

                        Console.Write(" ");

 

                    }

 

                    for (int k = j; k < line; k++)

 

                    {

 

                        Console.Write("* ");

 

                    }

 

                    Console.WriteLine();

 

                }

 

            }

 

 

3二、下面的程序執行結果是什麼?

class Person

    {

        public int Age { get; set; }

}

 

            int i1 = 20;

            int i2 = i1;

            i1++;

            Console.WriteLine(i2);//i2=20;

 

            Person p1 = new Person();

            p1.Age = 20;

            Person p2 = p1;

            p1.Age++;

            Console.WriteLine(p2.Age); p2.age=21;

 

 

 

3三、下面程序的執行結果是什麼?

public struct Point

    {

        public int x;

        public int y;

        public Point(int x, int y)

        {

            this.x = x;

            this.y = y;

        }

    }

            Point p1 = new Point(100, 100);

            Point p2 = p1;

            p1.x = 200;

            Console.WriteLine("{0},{1}", p1.x, p2.x);

 

200100

3四、不用JQuery等框架實現AJAX無刷新登陸。(常考)

 

用純XMLHttpRequest實現。

 

<body> <form id="form1" runat="server"> <div style="width: 100%; float: left; text-indent: 24px; font-size:12px"> <div style="float:left"> 您的用戶名:<asp:TextBox ID="txtUserName" runat="server" style="border:1px solid #D4D8D9" onblur="return ValidateUser();"></asp:TextBox> </div> <div id="default" ></div> </div> </form> </body>

 

.Error{ border:1px solid #A2553B;width:140px;float:left;height:18px;line-height:18px;margin-left:24px;color:#4F4F4F;text-indent:12px;} .Right{ border:1px solid #419041;background-color:#EDFCE7;width:140px;float:left;height:18px;line-height:18px;margin-left:24px;color:#4F4F4F;text-indent:12px;}

 

<script language="javascript" type="text/javascript"> function ValidateUser() { //得到用於顯示驗證是否經過的詳細信息 var obj=document.getElementById("default"); //獲取用戶輸入的用戶名的值 var str=document.getElementById("txtUserName").value; //定義一個bool型變量 var chk=true; if (chk){ //由於輸入的用戶名可能含有中文,因此將其解碼 var username=escape(str); //用於驗證用戶名的後臺頁面 var usrurl="/Validate.aspx?UserName="+username; //獲取從驗證頁面中異步傳輸過來的值 var sta=GetResponseText(usrurl); //若是異步傳輸失敗 if(sta==false){ chk=true; obj.className="d_ok"; obj.innerHTML='該會員未能檢測,能夠嘗試註冊。'; } //異步傳輸成功 else{ //假如傳過來的值的開始位置是"regok",這個值是在驗證頁面Response.Write出來的值,若是是regok則表示驗證經過,不然的話就是驗證失敗. if(sta.indexOf("regok")!=-1){ //驗證經過 chk=true; //用於顯示驗證是否經過的詳細信息加上剛剛所定義正確時的樣式 obj.className="Right"; obj.innerHTML='該會員名能夠註冊。'; }else{ //驗證未經過 chk=false; //用於顯示驗證是否經過的詳細信息加上剛剛所定義錯誤時的樣式 obj.className="Error"; obj.innerHTML='該會員名已經被註冊。'; } } }else{ obj.className="Error"; } return chk; } function GetResponseText(url) { //定義一個http_request變量 var http_request; if (window.XMLHttpRequest) { //對於MozillaNetscapeSafari等瀏覽器,建立XMLHttpRequest對象 http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { //若是服務器響應的header不是text/xml,能夠調用其它方法修改該header http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // 對於Internet Explorer瀏覽器,建立XMLHttpRequest try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } //打開驗證頁面的地址 http_request.open('GET', url, false); http_request.send(null); if (http_request.readyState == 4)    {    // 收到完整的服務器響應    if (http_request.status == 200) {    //HTTP服務器響應的值OK      var requestdoc = http_request.ResponseText; }     else {      requestdoc = "error";     }    } return requestdoc; } </script>

 

 

public partial class Validate : System.Web.UI.Page 2 { 3 //獲取url傳過來的值 4 private string UserName 5 { 6 get { return Request.QueryString["UserName"].ToString(); } 7 } 8 protected void Page_Load(object sender, EventArgs e) 9 { 10 //這裏你能夠連至用戶表檢查是否存在這個用戶名,固然若是你用membership中的驗證方法會更簡潔. 11 if (Server.HtmlEncode(UserName) =="123456") 12 //還記得腳本中的if(sta.indexOf("regok")!=-1)這句嗎,regok就是這裏的啦.. 13 Response.Write("regok"); 14 else 15 Response.Write("error"); 16 } 17 }

 

3五、Http狀態碼各是什麼意思。

成功2××          成功處理了請求的狀態碼。

200                   服務器已成功處理了請求並提供了請求的網頁。

204                   服務器成功處理了請求,但沒有返回任何內容。                         

重定向3××       每次請求中使用重定向不要超過 5 次。

301                   請求的網頁已永久移動到新位置。當URLs發生變化時,使用301代碼。搜索引擎索引中保存新的URL

302                   請求的網頁臨時移動到新位置。搜索引擎索引中保存原來的URL

304                   若是網頁自請求者上次請求後沒有更新,則用304代碼告訴搜索引擎機器人,可節省帶寬和開銷。

客戶端錯誤4××  表示請求可能出錯,妨礙了服務器的處理。

400                    服務器不理解請求的語法。

403                    服務器拒絕請求。

404                    服務器找不到請求的網頁。服務器上不存在的網頁常常會返回此代碼。

410                    請求的資源永久刪除後,服務器返回此響應。該代碼與 404(未找到)代碼類似,但在資源之前存在而如今不存在的狀況下,有時用來替代404 代碼。若是資源已永久刪除,應當使用 301 指定資源的新位置。

服務器錯誤5××   表示服務器在處理請求時發生內部錯誤。這些錯誤多是服務器自己的錯誤,而不是請求出錯。

500                     服務器遇到錯誤,沒法完成請求。

503                     服務器目前沒法使用(因爲超載或停機維護)。一般,這只是暫時狀態。                                                                                  

 

3六、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的代碼會不會被執行,何時被執行?

會,在執行完return語句後執行。

 

 

3七、一個數組:1,1,2,3,5,8,13,21...+m,求第30位數是多少?用遞歸實現;(常考!!!提示:搜索斐波那契數列)

  int i = 0,a=0,b=1,c;

 

        while (i<30)

        {

          

            c =a+b;

            Response.Write(c+"-");

            a = b;

            b = c;

          

            i++;

        }

3八、產生一個int數組,長度爲100,並向其中隨機插入1-100,而且不能重複。(要求使用兩種方法)

List<int> li = new List<int>(100);

        Random rd=new Random();

        while (li.Count<100)

        {

            int myran = rd.Next(1, 101);

         

                    if (!li.Contains(myran))

                    {

                        li.Add(myran);

                    }

        }

 

 

        int d;

       List<int> li = new List<int>(100);

 

        for (int i = 0; i < li.Count; i++)

        {

            for (int j = 0; j < li.Count; j++)

            {

                if (li[i]<li[j])

                {

                    d = li[j];

                    li[j] = li[i];

                    li[i] = d;                   

                }

                

            }

            

        }

 

 

 

     

        foreach (var item in li)

        {

 

            Response.Write(item + "..");

        }

 

 

 

 

 

 

 

3九、冒泡排序數組(背也要背下來,50%必考!)

 

 var arr = [1, 2, 1, 5, 3, 2, 6];

        var d, i = 0, len = arr.length;

 

        for (; i < len; i++) {

 

            for (var j = 0; j < len; j++) {

 

                if (arr[i]<arr[j]) {

                    d = arr[j];

                    arr[j] = arr[i];

                    arr[i] = d;

 

                }

            }

 

        }

 

40、C#中的委託是什麼?事件是否是一種委託?事件和委託的關係。

a) 委託能夠把一個方法做爲參數代入另外一個方法

b) 是,事件就是個委託調用jnh

c) 委託是類型,事件是對象

4一、override與重載(overload)的區別

a) 重寫---方法名、參數、返回值相同

b) 重載---參數類型、個數、順序至少有一個不相同

4二、屬性和public字段的區別是什麼?

a) 屬性能夠設置、判斷值,字段不行

4三、CTSCLSCLR分別做何解釋(重要)把英文全稱背過來。

a) CTSCommon Type System:通用語言系統。

b) CLSCommon Language Specification:通用語言規範。

c) CLRCommon Language Runtime:公共語言運行庫。

IL/MSIL (Microsoft Intermediate Language) 微軟中間語言 IL是MSIL的縮寫,譯爲中間語言

CTS (Common Type System) 通用類型系統

CLS (Common Language Specification) 公共語言規範

CLR (Common Language Runtime) 公共語言運行時(也有的叫公共語言運行庫

JIT (Just in time) 即時編譯器

 

4四、C#.Net的關係

a) C#運行須要.net環境

4五、dotnet中類(class)與結構(struct)的異同?

a) Class能夠被實例化,屬於引用類型,是分配在內存的堆上的,

b) Struct屬於值類型,是分配在內存的棧上的

4六、堆和棧的區別?

a)   由編譯器自動分配釋放   ,存放函數的參數值,局部變量的值

b) 通常由程序員分配釋放,   若程序員不釋放,程序結束時可能由OS回收

4七、值類型和引用類型的區別?

a) 引用類型--a=b=1表示在內存中有一個值  a是它,b也是它

b) 值類型--a=b=1 表示在內存中有兩個值 a=1  b=1

4八、C#中的接口和類有什麼異同。

a) 都是引用類型

b) 接口---寫的是抽象方法功能、屬性。

c) --實現功能

4九、abstract classinterface有什麼區別?

a) abstract class--抽象類,只聲明方法不實現的類

b) interface--接口中的全部方法都是抽象的,沒有一個有程序體

50、XML HTML 的主要區別

a) XML-是可擴展標記語言,用於數據格式化

b) HTML--超文本標記語言,用於網頁頁面顯示

5一、string str = null string str =」」說明其中的區別。

a) Null在內存中是沒有值的,而「」在內存有值

5二、StringBuilder String 的區別?

a) String 對象是不可改變的,

b) 若是要在類裏面定義成員變量,而且這個類的實例對象會在多線程環境下使用或者變量的內容不斷變化,那麼最好用StringBufferStringBuilder是線程不安全的,運行效率高

5三、請敘述屬性與索引器的區別。 重要

a) 屬性--經過名稱標識,經過簡單名稱或成員訪問來訪問,能夠爲靜態成員或實例成員,屬性的 get 訪問器沒有參數,屬性的 set 訪問器包含隱式value 參數。

b) 索引器--經過簽名標識,經過元素訪問來訪問,必須爲實例成員,索引器的get 訪問器具備與索引,除了value 參數外,索引器的 set 訪問器還具備與索引器相同的形參表。

5四、請解釋ASPNET中的web頁面與其隱藏類之間的關係?

a) Web頁面會繼承隱藏類

5五、DataReaderDataSet的異同?

a) DataReader使用時始終佔用SqlConnection

b) DataSet則是將數據一次性加載在內存中

5六、stringStringintInt32Booleanbool的區別

a) StringInt32Boolean是。Net定義的類

b) stringintbool是在C#中定義的別名

5七、Server.TransferResponse.Redirect的區別是什麼?(常考)

a) Server.Transfer只可以轉跳到本地虛擬目錄指定的頁面,瀏覽器顯示的地址不會改變

b) Response.Redirect是重定向一個新頁面

5八、您在什麼狀況下會用到虛方法?它與接口有什麼不一樣?

a) 子類從新定義父類的某一個方法時,必須把父類的方法定義爲virtual

b) 在定義接口中不能有方法體,虛方法能夠。

5九、postget的區別?

a) post--表單提交,較安全

b) Get--地址欄提交

60、.NetASP.NetC#VisualStudio之間的關係是什麼?

a) .Net通常指的是.Net Framework,提供了基礎的.Net類,這些類能夠被任何一種.Net編程語言調用,.NetFramework還提供了CLR(公共語言運行庫)JIT(即時編輯器)GC(垃圾回收器)等基礎功能。

b) ASP.NET.Net中用來進行Web開發的一種技術,ASP.Net的頁面部分寫在aspx 文件中,邏輯代碼一般經過Code-behind的方式用C#VB.Net等支持.Net的語言編寫。

c) C#是使用最普遍的支持.Net的編程語言。除了C#還有VB.NetIronPython等。

d) VisualStudio是微軟提供的用來進行.Net開發的集成開發環境(IDE),使用VisualStudio能夠簡化不少工做,不用程序員直接調用csc.exe等命令行進行程序的編譯,並且VisualStudio提供了代碼自動完成、代碼高亮等功能方便開發。除了VisualStudio,還有SharpDevelopMonoDevelop等免費、開源的IDEVisualStudioExpress版這個免費版本。

6一、Application Cookie Session 兩種會話有什麼不一樣

a) Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。Cookie是保存在客戶端的,機密信息不能保存在Cookie中,只能放小數據;Session是保存在服務器端的,比較安全,能夠放大數據。

6二、refout的區別?

a) ref傳進去的參數必須在調用前初始化,out沒必要

b) ref傳進去的參數在函數內部能夠直接使用,而out不可

c) ref傳進去的參數在函數內部能夠不被修改,但out必須在離開函數體前進行賦值

6三、C#中索引器是否只能根據數字進行索引?是否容許多個索引器參數?

a) 參數的個數和類型都是任意的

6四、是否能夠繼承String?

a) 不能夠,是密封類不能被繼承

6五、intDateTimestring是否能夠爲null?

a) intDateTime值類型不能爲空,string引用類型能夠爲null

6六、public static const int  A = 1;這段代碼有錯誤麼?

a) const不能有static修飾。

6二、面向對象的語言具備__封裝____性、____繼承_____性、__多態______

6三、.Net中全部可序列化的類都被標記爲__[serializable]___?

6四、接口是一種引用類型,在接口中能夠聲明(a),但不能夠聲明公有的域或私有的成員變量。 

a) 方法、屬性、索引器和事件;  

  b) 索引器和字段;       c) 事件和字段;  

6五、ADO.NET中,對於Command對象的ExecuteNonQuery()方法和ExecuteReader()方法,下面敘述錯誤的是( c)。      a) insertupdatedelete等操做的Sql語句主要用ExecuteNonQuery()方法來執行;     b) ExecuteNonQuery()方法返回執行Sql語句所影響的行數。     c) Select操做的Sql語句只能由ExecuteReader()方法來執行;     d) ExecuteReader()方法返回一個DataReader對象;

6六、下列關於C#中索引器理解正確的是d 

a) 索引器的參數必須是兩個或兩個以上    b) 索引器的參數類型必須是整數型  

c) 索引器沒有名字       d) 以上皆非

相關文章
相關標籤/搜索