轉 經典面試題2016——50題

1.面嚮對象語言具備——繼承性——,——封裝性——,——多態性——程序員

   繼承性:就是讓一個類型的對象擁有另外一個類型的對象的屬性的方法。繼承後,子類擁有父類的屬性和方法。web

   封裝性:就是將數據和代碼捆綁在一塊兒,防止外界干擾。面試

   多態性:就是一個事物擁有不一樣形式的能力。算法

 

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

答 . private :   私有成員, 在類的內部才能夠訪問。數據庫

     protected : 保護成員,該類內部和繼承類中能夠訪問。編程

     public :    公共成員,徹底公開,沒有訪問限制。c#

     internal:  是同一程序集中文件纔可訪問的。數組

 

3.列舉asp.net頁面傳值的幾種方法?瀏覽器

1. 使用QueryString變量
QueryString是一種很是簡單的傳值方式,他能夠將傳送的值顯示在瀏覽器的地址欄中。若是是傳遞一個或多個安全性要求不高或是結構簡單的數值時,可使用這個方法。可是對於傳遞數組或對象的話,就不能用這個方法了。下面是一個例子:
a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}

2. 使用Application 對象變量
Application對象的做用範圍是整個全局,也就是說對全部用戶都有效。其經常使用的方法用Lock和UnLock。
a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}

3. 使用Session變量
想必這個確定是你們使用中最多見的用法了,其操做與Application相似,做用於用戶我的,因此,過量的存儲會致使服務器內存資源的耗盡。
a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}

4. 使用Cookie對象變量
這個也是你們常使用的方法,與Session同樣,其是什對每個用戶而言的,可是有個本質的區別,即Cookie是存放在客戶端的,而session是存放在服務器端的。並且Cookie的使用要配合ASP.NET內置對象Request來使用。

a.aspx的C#代碼
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}

5. 使用Server.Transfer方法
這個才能夠說是面象對象開發所使用的方法,其使用Server.Transfer方法把流程從當前頁面引導到另外一個頁面中,新的頁面使用前一個頁面的應答流,因此這個方法是徹底面象對象的,簡潔有效。
a.aspx的C#代碼
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}

b.aspx中C#代碼
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //實例a窗體
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}

 

4.經典遞歸算法:兔子繁殖問題。。。

class Program
    {
        public static int tuzi(int n)
            //靜態函數才能夠調用
        {
           
            if (n ==1|n==2)
            {
                return  1;
            }
            
            return (n - 2) + (n - 1);
        }
        static void Main(string[] args)
        {
            int b;
            Console.WriteLine("請輸入幾個月後的兔子:");
            int a = int.Parse(Console.ReadLine());
            b = tuzi(a);
            Console.WriteLine("兔子爲{0}", b);
        }
    }

 

5.經典排序—冒泡排序法

  public static void bubble_sort(int[] x)
        {
            for (int i = 0; i < x.Length; i++)
            {
                for (int j = i; j < x.Length; j++)
                {
                    if (x[i] < x[j])    //從大到小排序
                    {
                        int temp;
                        temp = x[i];
                        x[i] = x[j];
                        x[j] = temp;
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            int[] huage = { 1, 5, 2, 9, 3, 7, 6,4,8,0};
            bubble_sort(huage);
            foreach (var a in huage)
            {
                Console.WriteLine(a );
            }
        }

 

6.C#中的委託是什麼?事件是委託嗎?

委託是將一種方法做爲參數代入到另外一種方法。

是,事件是一種特殊的委託。  //好比:onclick事件中的參數就是一種方法。

 

7.委託聲明的關鍵字是__delegate__.

 

8.根據委託(delegate)的知識,請完成如下用戶控件中代碼片斷的填寫:

namespace test

{

public delegate void OnDBOperate();

public class UserControlBase : System.Windows.Forms.UserControl

{

 public event OnDBOperate   OnNew

 

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

{

if(e.Button.Equals(BtnNew))

{

//請在如下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。

}

}

}

答:if( OnNew != null )

    OnNew( this, e );

 

9.c#中的三元運算符是__?:_(條件運算符)_

 

10.在C#中,string str = null 與 string str = 「」 請儘可能使用文字或圖象說明其中的區別。

答:string str = null 是不給他分配內存空間,而string str = "" 給它分配長度爲空字符串的內存空間。

 

11.overload與override的區別。

 overload是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要, overloaded的方法是能夠改變返回值的類型

 override 是進行基類中函數的重寫。實現多態。

 

12.構造器(構造函數)Constructor是否可被override?

答:構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。

 

13.下面的代碼中有什麼錯誤嗎?____abstract override是不能夠一塊兒修飾______

using System;

class A

{

public virtual void F(){

Console.WriteLine(「A.F「);

}

}

abstract class B:A

{

public abstract override void F();

}

 

14.請編程遍歷頁面上全部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 ;

 }

      }

 

15.用.net作B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及爲何要這樣分層?

使用三層架構模式分層

通常爲3層

        數據訪問層,業務層,表示層。

 數據訪問層對數據庫進行增刪查改。

 業務層通常分爲二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。

 表示層爲了與用戶交互例如用戶添加表單。

優勢:  分工明確,條理清晰,易於調試,並且具備可擴展性。

缺點:  增長成本。

 

16.net中讀寫數據庫須要用到那些類?他們的做用?

DataSet:數據集。

DataCommand:執行語句命令。

DataAdapter:數據的集合,用語填充。

DataReader:數據只讀器

 

17.ADO.net中經常使用的對象有哪些?分別描述一下。

Connection 數據庫鏈接對象

Command 數據庫命令 

DataReader 數據讀取器

DataSet 數據集

DataAdaprer數據適配器

 

18.DataReader與Dataset有什麼區別?

一個是隻能向前的只讀遊標,一個是內存中的表。

 

19.在.net中,配件的意思是?

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

 

20.請詳述在.net中類(class)與結構(struct)的異同?

class屬於引用類型,是分配在內存的堆上的,class能夠被實例化,能夠實現接口和單繼承其餘類,還能夠做爲基類型

struct屬於值類型,是分配在內存的棧上的,不能做爲基類型,可是能夠實現接口.

 

21.ASP.net的身份驗證方式有哪些?分別是什麼原理?

Windwos(默認)用IIS控制

From(窗體)用賬戶

Passport(密鑰)

 

22.net Remoting 的工做原理是什麼?

服務器端向客戶端發送一個進程編號,一個程序域編號,以肯定對象的位置。

 

23.簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。

webservice主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。

 

24.什麼是ASP.net中的用戶控件?

用戶控件通常用在內容多爲靜態,或者少量會改變的狀況下..用的比較大..相似ASP中的include..可是功能要強大的多

 

25.在Asp.net中全部的自定義用戶控件都必須繼承自__Control___?

 

26.在.Net中,類System.Web.UI.Page 能夠被繼承麼?_能夠___(能夠or不能夠)

 

27.大概描述一下ASP.NET服務器控件的生命週期

答:初始化  加載視圖狀態  處理回發數據  加載  發送回發更改通知  處理回發事件  預呈現  保存狀態  呈現  處置  卸載

 

28.net的錯誤處理機制是什麼?

答:.net錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch爲止。

 

29.在.Net託管代碼中咱們不用擔憂內存漏洞,這是由於有了__GC__(內存回收機制)___?

 

30.C#能否對內存進行直接的操做?

在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員  不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法

 

31.在.Net中全部可序列化的類都被標記爲__[Serializable]_______?

 

32.大概描述一下ASP。NET服務器控件的生命週期

答:初始化  加載視圖狀態  處理回發數據  加載  發送回發更改通知  處理回發事件  預呈現  保存狀態  呈現  處置  卸載
 

33.什麼是裝箱與拆箱?

裝箱是將值類型轉換爲引用類型 ;拆箱是將引用類型轉換爲值類型
      利用裝箱和拆箱功能,可經過容許值類型的任何值與Object 類型的值相互轉換,將值類型與引用類型連接起來
例如:
int val = 100;
object obj = val;
Console.WriteLine (「對象的值 = {0}", obj);
這是一個裝箱的過程,是將值類型轉換爲引用類型的過程

int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}", num);
這是一個拆箱的過程,是將值類型轉換爲引用類型,再由引用類型轉換爲值類型的過程

 

34.堆和棧的區別?

    棧:由編譯器自動分配、釋放。在函數體中定義的變量一般在棧上。

    堆:通常由程序員分配釋放。用new、malloc等分配內存函數分配獲得的就是在堆上。

 

35.寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增加的ID做爲主鍵,  注意:ID可能不是連續的。)

select top 10 * from A where id not in (select top 30 id from A)

select top 10 * from A where id (select max(id) from (select top 30 id from A )as A)

 

36.SQLSERVER服務器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務號, LastUpdateDate表示更新時的服務器時間,請使用一句SQL語句得到最後更新的事務號

Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

37.什麼叫作SQL注入,如何防止?請舉例說明

答:利用sql關鍵字對網站進行攻擊。過濾關鍵字'等

 

38.如何處理幾十萬條併發數據?

答:用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法併發的時候是不會有重複主鍵的..取得最大標識要有一個存儲過程來獲取.

 

39.請將字符串"I am a student"按單詞逆序輸出 如"student a am I"

string S = "I am a student";

            char[] C = new char[] { ' '};

            string[] n =S.Split(C);

            int length = S.Length;

            for (int i =length-1 ; i >=0; i--)

            {

                Console.Write(n[i]);

                if (i != 0)

                {

                    Console.Write(" ");

                }

            }

40.兩個數組  [n] [m]  n>m  第一個數組的數字無序排列 第二個數組爲空 取出第一個數組的最小值 放到第二個數組中第一個位置, 依次類推. 不能改變A數組,不能對之進行排序,也不能夠倒到別的數組中。

  int[] a = { -20, 9, 7, 37, 38, 69, 89, -1, 59, 29, 0, -25, 39, 900, 22, 13, 55 };

            int[] b = new int[10];

            int intTmp = a[0], intMaxNum;

            for (int i = 0; i < a.Length; i++)

            {

                intTmp = a[i] > intTmp ? a[i] : intTmp;

            }

            intMaxNum = intTmp;

            for (int j = 0; j < b.Length; j++)

            {

 

                for (int i = 0; i < a.Length; i++)

                {

                    if (j == 0)

                        intTmp = a[i] < intTmp ? a[i] : intTmp;

                    else

                    {

                        if (a[i] > b[j - 1])

                            intTmp = a[i] < intTmp ? a[i] : intTmp;

                    }

                }

                b[j] = intTmp;

                intTmp = intMaxNum;

            }

            foreach (int bb in b)

            {

                Console.WriteLine(bb);

 

            }

            Console.ReadLine();

 

41.在下面的例子裏

using System;

class A

{

public A(){

PrintFields();

}

public virtual void PrintFields(){}

}

class B:A

{

int x=1;

int y;

public B(){

y=-1;

}

public override void PrintFields(){

Console.WriteLine(「x={0},y={1}「,x,y);

}

當使用new B()建立B的實例時,產生什麼輸出?X=1,Y=0

答:X=1,Y=0

42.下面的例子中

using System;

class A

{

public static int X;

static A(){

X=B.Y+1;

}

}

class B

{

public static int Y=A.X+1;

static B(){}

static void Main(){

Console.WriteLine(「X={0},Y={1}「,A.X,B.Y);

}

}

產生的輸出結果是什麼?x=1,y=2

答:x=1,y=2

 

43.下面這段代碼有錯誤麼?

    switch (i){

    case():        答://case()條件不能爲空

        CaseZero();

        break;

    case 1:

        CaseOne();

        break;

    case 2:

        dufault;   答://wrong,格式不正確

        CaseTwo();

        break;

   }

 

44.abstract class和interface有什麼區別?

聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。

接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成 員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠 在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。引用能夠轉換到接口類型或從 接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口。

 

45.接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?

接口能夠繼承接口。

抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。

 

46.能用foreach遍歷訪問的對象須要實現 ___IEnumerable___接口或聲明_GetEnumerator___方法的類型。

 

47.請問: String類與StringBuilder類有什麼區別?爲何在.Net類庫中要同時存在這2個類?(簡答)

     若是要操做一個不斷增加的字符串,儘可能不用String類,改用StringBuilder類。兩個類的工做原理不一樣:String類是一種傳統的修改字符串的方式,它確實能夠完成把一個字符串添加到另外一個字符串上的工做沒錯,可是在.NET框架下,這個操做實在是划不來。由於系統先是把兩個字符串寫入內存,接着刪除原來的String對象,而後建立一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了很多時間。而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,可以在已有對象的原地進行字符串的修改,簡單並且直接。固然,通常狀況下覺察不到這兩者效率的差別,但若是你要對某個字符串進行大量的添加操做,那麼StringBuilder類所耗費的時間和String類簡直不是一個數量級的。
 

48.是否能夠繼承String類?

String類是密封類故不能夠繼承。

 

49.C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏?

  attribute:自定義屬性的基類;property :類中的屬性

 

50.軟件開發過程通常有幾個階段?每一個階段的做用?

1.問題的定義及規劃
此階段是軟件開發與需求放共同討論,主要肯定軟件的開發目標及其可行性。
2.需求分析在肯定軟件開發可行性的狀況下,對軟件須要實現的各個功能進行詳細需求分析。需求分析階段是一個很重要的階段,這一階段作的好,將爲整個軟件項目的開發打下良好的基礎。「惟一不變的是變化自己」,一樣軟件需求也是在軟件愛你開發過程當中不斷變化和深刻的,所以,咱們必須定製需求變動計劃來應付這種變化,以保護整個項目的正常進行。
3.軟件設計此階段中偶要根據需求分析的結果,對整個軟件系統進行設計,如系統框架設計、數據庫設計等。軟件設計通常分爲整體設計和詳細設計。還的軟件設計將爲軟件程序編寫打下良好的基礎。
4.程序編碼此階段是將軟件設計的結果轉化爲計算機可運行的程序代碼。在程序編碼中一定要制定統1、符合標準的編寫規範。以保證程序的可讀性、易維護性。提升程序的運行效率。
5.軟件測試在軟件設計完成以後要進行嚴密的測試,一發現軟件在整個軟件設計過程當中存在的問題並加以糾正。整個測試階段分爲單元測試、組裝測試、系統測試三個階段進行。測試方法主要有白盒測試和黑盒測試。

 

這些是C#,ASP.NET,數據庫面試題,所有從網上收集而來,經整理而發表,但願給你們帶來幫助,有錯誤的地方還請各位高手指出,在下傾聽指教。

相關文章
相關標籤/搜索