C# 面試題及答案

来源:https://www.cnblogs.com/zhouxiaojie/archive/2019/04/16/10708193.html
-Advertisement-
Play Games

答案:i=14;i=10; 2.請輸出B.test()的輸出結果 答案: i am B; i am B; 1; 2; 3.有序集合seqList{1,1,2,3,5,8,13,21,34.........}請查找集合中第一個大於2147483647的數。 答案:此函數是有名的斐波那契數。實現此函數的 ...


  1. 分析以下代碼

          

1  string str = "abc123中文漢字";
2 
3             int i = System.Text.Encoding.Default.GetBytes(str).Length;
4 
5             int j = str.Length;
6 
7             Console.WriteLine(i);
8 
9         Console.WriteLine(j);

 

答案:i=14;i=10;

2.請輸出B.test()的輸出結果

 1 class A
 2 {
 3 int i = 1;
 4 public virtual void M1()
 5 {
 6 Console.WriteLine(" i am A ");
 7 }
 8 public void M2()
 9 {
10 Console.WriteLine(" i ={0} ",i);
11 }
12 }
13 
14 class B:A
15 {
16 int i = 2;
17 public override void M1()
18 {
19 Console.WriteLine(" i am B ");
20 }
21 public new void M2()
22 {
23 Console.WriteLine(" i ={0} ", i);
24 }
25 }
26 
27 static void Main(string[] args)
28 
29 {
30 
31 B b = new B();
32 A a = b;
33 a.M1();
34 b.M1();
35 a.M2();
36 b.M2();
37 
38 }

 

答案: i am B;

i am B;

1;

2;

3.有序集合seqList{1,1,2,3,5,8,13,21,34.........}請查找集合中第一個大於2147483647的數。

答案:此函數是有名的斐波那契數。實現此函數的方法為

 1 //遞歸寫法
 2 public int foo(int n)
 3 {
 4 if(n<2) return 1;
 5 else return foo(n-2)+foo(n-1)
 6 }
 7 
 8 //迴圈寫法
 9 public int[] foo2(int n)
10 {
11 if(n==1) return new int{1};
12 else if(n==2) return new int{1,1};
13 else
14 {
15 int rel[]=new rel[n];
16 rel[0]=1;
17 rel[1]=1;
18 for(int i=2;i<n;i++)
19 {
20     rel[i]=rel[i-2]+rel[i-1];
21 }
22 }
23 }

 

查找大於2147483647的數用二分法查找。

    private static int FibonacciSearch(int[] array, int key) {
        int length = array.Length;
        int low = 0, high = length - 1, mid, k = 0;
        mid=(low+high )/2
        while(mid<high)
{
   if(array[mid]==key){return mid;break;}
else if(array[mid]>key){high=mid;mid=(low+high )/2;}
else if(array[mid]<key){low=mid;mid=(low+high )/2;}
}
}

4.簡述以下詞在C#語言中的作用

volatile:(創建單例模式時會使用,懶漢模式)就像大家更熟悉的const一樣,volatile是一個類型修飾符(type specifier)。它是被設計用來修飾被不同線程訪問和修改的變數。如果不加入volatile,基本上會導致這樣的結果:要麼無法編寫多線程程式,要麼編譯器失去大量優化的機會。作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.,簡單地說就是防止編譯器對代碼進行優化.比如如下程式:

1 2 3 4 XBYTE[2]=0x55; XBYTE[2]=0x56; XBYTE[2]=0x57; XBYTE[2]=0x58;
對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器卻會對上述四條語句進行優化,認為只有XBYTE[2]=0x58(即忽略前三條語句,只產生一條機器代碼)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器代碼(產生四條代碼).原文引用https://www.cnblogs.com/lvdongjie/p/5469246.html interlocked:為多個線程共用的變數提供原子操作(僅限int類型)。微軟原文https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.interlocked?view=netframework-4.7.2    個人微博原文:https://www.cnblogs.com/Zachary-Fan/p/interlocked.html monitor:lock:(lock是一種混合鎖,相當於Monitor.Enter(object)方法是獲取鎖,Monitor.Exit(object)方法是釋放鎖的組合)詳見原文https://www.cnblogs.com/chengxingliang/p/3150731.html   ReaderWriterLock:字面意思,讀寫鎖,分為讀鎖和寫鎖,多個線程讀一個對象, 而只有一個線程要寫這個對象. 那麼對於讀線程來說, 它不改變對象的內容, 我們就應該允許多個線程同時讀, 只有在寫的時候才要給鎖住對象. 這樣可以提高讀線程的吞吐量。詳見原文 https://blog.csdn.net/changtianshuiyue/article/details/16943499   AutoResetEvent|   ManualResetEvent  字面意思為自動重置事件和手動重置事件,這兩個類可以理解為設置信號,來進行阻塞線程或者讓線程重新啟動。上原文https://www.cnblogs.com/fangyz/p/5040206.html   Semaphore 信號量,通過計數器設置可以訪問的線程數目例如設置為10,則可以同時有10個線程訪問此資源,每當有一個線程訪問此資源,則信號量減1,訪問完成之後釋放則加1,當信號量=0時禁止訪問,阻塞線程,當信號量>0時,可以訪問。原文https://www.cnblogs.com/tianzhiliang/archive/2010/08/31/1813635.html   Mutex   互斥量,嗯。。。說起來挺麻煩,還是看原文吧。https://www.cnblogs.com/suntp/p/8258488.html   5.MVC平臺,網頁設計textbox控制項時,編輯代碼有四種形式,以下已經寫出了第一種,請寫出後三種。 @using MvcViewModelTest.Models
1 //第一種 
2 <input id="tea_Name" name="tea.Name" type="text" value="馬老師"/>
3 //第二種
4 @Html.TextBox("tea.Name",Model.tea.Name)
5 //第三種
6 @Html.TextBoxFor(m=>m.tea.Name)
7 //第四種
8 @Html.TextEditorFor(m=>m.tea.Name)

6.用一條SQL語句 查詢出每門功課都大於80分的學生姓名,表結構如下

姓名   課程   分數  
張三 語文 81
張三 數學 75
張三 英語 82
李四 語文 76
李四 數學 90
李四 英語 82
王五 語文 81
王五 數學 100
王五 英語 92

 

 

 

 

 

 

 

 

答案一:select 姓名 from 表 where 姓名 not in (select 姓名 from 表 where 分數<=80)

答案二(推薦):select 姓名 from 表  group by 姓名 having min(分數)>80

7.簡述Vue中methods、computed以及watch的用法及區別。

1#computed:計算屬性將被混入到 Vue 實例中。所有 getter 和 setter 的 this 上下文自動地綁定為 Vue 實例。

2#methods:methods 將被混入到 Vue 實例中。可以直接通過 VM 實例訪問這些方法,或者在指令表達式中使用。方法中的 this 自動綁定為 Vue 實例。

3#watch:是一種更通用的方式來觀察和響應 Vue 實例上的數據變動。一個對象,鍵是需要觀察的表達式,值是對應回調函數。值也可以是方法名,或者包含選項的對象。Vue 實例將會在實例化時調用 $watch(),遍歷 watch 對象的每一個屬性。
 官方API地址https://cn.vuejs.org/v2/api/#computed

個人博客:https://blog.csdn.net/smartdt/article/details/75557369

8.現有一個業務系統有4萬用戶,所有用戶每天產生6千萬數據,系統要求快速查詢60天數據,請給出你的實現方案。

9.描述你曾經或者正在使用的大型項目解決方案。

10.何時必須聲明一個類為抽象類?

答案:當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。

11.MVC框架中,ActionResult,JsonResult,ContentResult哪個可以return view()?

答案:ActionResult。

12.Aspx頁面中,updatepanel的作用是什麼?

答案:UpdatePanel控制頁面的局部更新。(局部更新控制項)、

13.MVC框架中,當使用Get方法訪問JsonResult時,能否直接採用以下寫法:return json(obj).為什麼?

答案:不能,要使用 res.JsonRequestBehavior = JsonRequestBehavior.AllowGet;//允許使用GET方式獲取,否則用GET獲取是會報錯。 

14.可以採用foreach迭代的類的對象必須滿足什麼條件?

答案:需要實現IEnumerable介面或聲明GetEnumerator方法的類型。註:不一定要實現IEnumerable介面,但一定要實現GetEnumrator方法。

15.在dotnet環境下,如何把資料庫數據轉換為XML格式輸出?

將資料庫的內容讀取到dataTable或dataSet中,dataTable或dataSet轉為xml。

private string ConvertDataTableToXML(DataTable xmlDS) //DataTable可改用dataset
    {
        MemoryStream stream = null;
        XmlTextWriter writer = null;
        try
        {
            stream = new MemoryStream();
            writer = new XmlTextWriter(stream, Encoding.Default);
            xmlDS.WriteXml(writer);
            int count = (int)stream.Length;
            byte[] arr = new byte[count];
            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(arr, 0, count);
            UTF8Encoding utf = new UTF8Encoding();
            return utf.GetString(arr).Trim();
        }
        catch
        {
            return String.Empty;
        }
        finally
        {
            if (writer != null) writer.Close();
        }
    }

 

16.Html頁面上,有如下代碼<input type="button"  name ="btndel" onclick="Del()"/>.現在要求用戶點擊刪除後,彈出刪除確認的對話框,併在點擊確定後彈出對話框“”“刪除完畢”,用JS如何實現。

答案:

1 function Del()
2 {
3 if(confirm("確定刪除"))
4       alert("刪除成功")
5 }

17.請寫出一個json的例子。

答案:[{"id":"123","name":"huawei"}]

18.List<Domain1> Alist 中有100個Domain1元素,且每個Domain1元素都有屬性string  typStr,現在需要取出AList中所有typeStr="Atype"的元素,並組成新的List,該如何實現。

答案:

1 List<string> BList=new List<string>();
2 foreach(var a in AList)
3 {
4 if(a.typeStr=="Atype")
5     Blist.add(a.typeStr);
6 }

19.EF框架中,使用DBFirst時資料庫中的表A沒有主鍵,能否通過“從資料庫更新模型“操作,將表A導入到EF框架中。

答案:不能,表必須要有主鍵,否則會報錯。

savechange()方法返回0,而不是正常的大於0的書。切記設置主鍵。

返回錯誤InnerException = {"無法更新 EntitySet“t_Customer”,因為它有一個 DefiningQuery,而 <ModificationFunctionMapping> 元素中沒有支持當前操作的 <InsertFunction> 元素。"}。

在發現錯誤後要吧原有的資料庫的表刪除,重新更新。如果不刪除的話,無法更新,並且要重新生成解決方案。
20.foreach和for迴圈誰的效率高?switch和if呢?

答案:foreach高,for 迴圈每次都要進行判斷i的大小,foreach 依賴 IEnumerable.第一次 var a in GetList() 時 調用 GetEnumerator 返回第一個對象 並 賦給a,以後每次再執              行 var a in GetList() 的時候 調用 MoveNext.直到迴圈結束。期間GetList()方法只執行一次.

        同樣的道理:當有多個判斷時,switch更快。

21.WebService基於什麼協議?

 答案:soap協議,而Soap建立在http上的。

22.WebService和WebAPI 有什麼不同。   

1、webservice是基於SOAP協議的,數據格式是XML,webapi遵循的http協議,它的Response可以被而Web API的MediaTypeFormatter轉換成Json、XML 或者任何你想轉換的格式。
2、webservice它只能部署在IIS上,而webapi可以寄宿在不同的宿主上(寄宿的本質就是利用一個具體的應用程式為Web Api提供一個運行的環境,並解決請求的接收和響應的回覆),如Web Host,Self Host方式
3、webservice 也可以通過ajax訪問。

4、webapi無狀態,相對webservice更輕量級。webapi支持如get,post等http操作,並且對限制帶寬的設備,比如智能手機等支持的很好。

這樣對比的話webservice貌似並不好用。但是我們為什麼要用它呢,理由如下:

1、很好的跨編程語言和跨操作系統
2、可移植性:傳統的WebService只是利用了HTTP通道,進行獨立的交互,但是這個交互協議可以移植到其他協議下運作

 

23.C#是否支持多重繼承?

答案:不支持。多重繼承指的是一個類可以同時繼承多個類,比如A類繼承自B類和C類,這就是多重繼承。C#只能繼承一個類,但是可以繼承多個介面。

24.修飾符protected internal 的意思?

internal修飾的b在同一個項目中哪裡都可以訪問,而在另外一個項目中就不能訪問,說明“同一程式集”指的是同一個項目;對於protected internal修飾的a在同一項目中哪裡都可以訪問,而在其它項目中只有在派生類可以訪問,所以protected internal 修飾的成員變數是同一程式集或者派生類可以訪問,也就是protected跟internal的並集,而不是交集。(被protected internal修飾的屬性/方法只能在它的在同一個程式集(Assembly)中的子類被訪問)查資料找到了兩種說法,不知道哪種是對的,個人以為是第一種是對的。

25.bs架構下,可否聲明一個靜態的資料庫連接對象,所有的業務類都引用該靜態連接對象去訪問資料庫?

答案:一個靜態的Sqlconnection來管理項目內所有的資料庫連接在絕大部分場景是不合理的
(沒說絕對不可行,在winform單線程項目中,這樣做是沒有問題的,因為操作者是一個用戶,每個用戶都有一份程式副本)
如果是多個用戶提交的請求是
同一個AppDomain中的函數,方法(這種說話不嚴謹,不過我暫時找不到更好的表達方式)
來處理時.都是用同一個靜態的Sqlconnection對象是不行的.
會引起併發問題,會引起相互干擾.還需要加鎖lock才能操作.

26.C#提供了一個預設的無參數構造函數,當我實現了另外一個有一個參數的構造函數的時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?

答案:兩個。

27.能夠阻止某一個類被其他類繼承麽?能夠實現允許某個類被繼承,但不允許其中某個方法被覆寫嗎?

答案:(1)當對一個類應用 sealed 修飾符時,此修飾符會阻止其他類從該類繼承,(2)可以,標記這個類為public,並標記這個方法為sealed.

28.什麼是強類型?C#是強類型嗎,JS呢?

答案:強類型指的是程式中表達的任何對象所從屬的類型都必須能在編譯時刻確定。常見的強類型語言有C++JavaApexPython等,C#是強類型,JS不是。

29.金額等精確的數值聲明為什麼類型?

答案:float,double,decimal

30.讀寫資料庫都需要哪些對象,簡要說明其作用。

答案1、 Connection:與數據源建立連接。
2、 Command:對數據源執行SQL命令並返回結果。
3、 DataReader:讀取數據源的數據,只允許對將數據源以只讀、順向的方式查看其中所存儲的數據。其常用於檢索大量數據,DataReader對象還是一種非常節省資源的數據對象
4、 DataAdapter:對數據源執行操作並返回結果,在DataSet與數據源之間建立通信,將數據源中的數據寫入DataSet中,或根據DataSet中的數據綁定數據源。
5、 DataSet:記憶體中的資料庫,是數據表的集合,它可以包含任意多個數據表

31.通過程式控制GC的強制回收是否可以提高效率?

答案:個人以為是可以的(在網上沒找到答案),GC是迴圈遍歷所有資源的,如果你已經強制回收了,那麼遍歷的就會少,從而提高效率。

32.int?和int的區別。

答案:int?為可空類型,可以是null,他是通過把int裝箱為引用類型實現的。

33.求數列(1,1,2,3,5,8,13。。。。)的和。

答案:見第三題的迴圈寫法,定義一個變數為sum,sum+=arr[I]

34.BS架構下,在session中存儲了一個datatable的對象y,y在什麼時候會被GC回收?這種存儲數據的方式是否合理?如果Application增加了對y的引用,什麼時候會被GC回收?

答案:在session的生命周期結束之後回收,不合理,每個session儲存在伺服器端的記憶體里,每個用戶都會有一個獨立的session,如果session的內容過於複雜,當大量的用戶訪問的時候會導致記憶體溢出。Application是所有用戶共有的,所以應該不會被回收(個人理解)

35.string和stringbuilder的區別。

答案:System.String是不可變的字元串。System.StringBuilder存放了一個可變的字元串,並提供一些對這個字元串修改的方法

36.舉例寫一個單例模式

 1 public class Singleton
 2     {
 3         private static Singleton _Singleton = null;
 4         private static object Singleton_Lock = new object();
 5         public static Singleton CreateInstance()
 6         {
 7             if (_Singleton == null) //雙if +lock
 8             {
 9                 lock (Singleton_Lock)
10                 {
11                     Console.WriteLine("路過。");
12                     if (_Singleton == null)
13                     {
14                         Console.WriteLine("被創建。");
15                         _Singleton = new Singleton();
16                     }
17                 }
18             }
19             return _Singleton;
20         }
21     }

37.描述一下virtual、sealed、override和abstract的區別。

答案:

virtual申明虛方法的關鍵字,說明該方法可以被重寫

sealed說明該類不可被繼承

override重寫基類的方法

abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可實例化。

38.List<int> listNumber,其中存儲了從1到100的數字,現需要將ListNumber按照形如“1,2,3,4.。。”輸出,請寫出相應的代碼。

1 foreach(var a in listNumber.sort())
2 {
3   Console.WriteLine(a);
4 }

39.int,string,hashtable,datetime,datatable中哪些是引用類型?

答案:string,hashtable,datatable

40.一棵二叉查找樹(Binary Seach Tree)具有以下特點,樹中的任一節點,如果左子樹不為空,則左子樹的所有節點的值都小於該節點的值,如果右子樹不為空,那麼右子樹所有節點的值都大於該節點的值;任一個節點的左右子樹都是二叉查找樹,示意圖如下

假設二叉查找樹的節點定義如下:

1 Class BSTreeNode{
2 int value;
3 BSTreeNode leftChild;
4 BSTreeNode rightChild;
5 }

要實現一個方法printRang:按從小到大的順序輸出範圍在【min,max】之間的所有值。請寫出你認為最高效的代碼。

 1 void printRang(BSTreeNode btsnode,int min,int max)
 2 {
 3 //中序遍歷,大於min的輸出,小於max的不輸出
 5 //迴圈這裡使用棧輔助進行遍歷
 6 System.Collections.Generic.Stack<Tree> stack = new System.Collections.Generic.Stack<Tree>();
 7 while(btsnode != null || stack.Any())
 8 {
 9 if(btsnode.value>max)break;
10 else if (btsnode != null)
11                 {
12                      stack.Push(btsnode);
13                     btsnode = btsnode.Left;
14                 }
15                 else
16                 {
17                     var item = stack.Pop();
18                     if(item.Value>=min&&item.Value<=max)
19                           Console.WriteLine(item.Value);
20                     btsnode = item.Right;
21                 } 
23 }
24 }

41.請寫出一段在多線程運行時有可能產生死鎖(不需要一定產生)的代碼。

 1 int string a="aaaa",b="bbbb";
 2 public void Seta(){
 3 lock(b)
 4 {
 5 a="bbbb";
 6 }
 7 }
 8 public void Setb(){
 9 lock(a)
10 {
11 b="aaaa";
12 }
13 }
14 
15   Thread t = new Thread(Seta);  
16   Thread.Sleep(5000);
17   t.Start();  
18   Thread t2 = new Thread(Setb);  
19   Thread.Sleep(5000);
20   t2.Start();  

42.假設你的編程語言提供這樣的非同步機制,把一個任務放在一個線程池中執行,當前線程繼續執行,直到調用這個任務取返回值的方法時才阻塞並等待任務完成拿到返回值。

現在有這樣一個場景,收到一個客戶端的訂單請求要檢查商品的庫存能否滿足,查詢該客戶按照當前的價格策略能否享受訂單的折扣才能接受訂單,而這兩個檢查都是非常耗時的操作。原來的代碼是這樣的:

1 public booleanprocessOrder(Order order)
2 {
3 if(!checkCustomerprice(order))
4 return false;
5 if(!checkInventory(order))
6 return false;
7 //訂單邏輯代碼不需要關註
8 return true;
9 }

請用上述的非同步機制改寫這段代碼,減小這個方法的響應延遲。

 1 //這裡使用task
 2 Task<bool> task = new Task<bool>(() => checkCustomerprice());
 3 task.Start();
 4 bool result = task.Result;
 5 
 6 Task<bool> task2 = new Task<bool>(() => checkInventory());
 7 task2.Start();
 8 bool result2 = task2.Result;
 9 
10 if(result&&result2)
11    return true;
12 else 
13    return  false;
14 
15 //自己研究寫的,不知道對不對,僅供參考

43.簡述private,protected,public,internal修飾符的訪問許可權。

   public(公共的) 完全公開,訪問不受限制。

   protected(保護的) 訪問僅限於包含類或從包含類派生的類型。該類內部和繼承類中可以訪問。

   internal(內部的) 訪問僅限於當前程式集。在同一命名空間內可以訪問。

   protected internal(內部保護的) 訪問僅限於從包含類派生的當前程式集或類型(待確定)。

   private(私有的) 訪問僅限於包含類型。在類的內部才可以訪問

44.ado.net的五個主要對象。答案見第30題。

45.列舉asp.net頁面之間傳值的幾種方式。

答案:

Request.Form["SourceData2"].ToString();
Request.QueryString["parameter1"].ToString();
 Context.Items["value"].ToString();還有cookie,session,application
46.C#中委托是什麼?事件是不是一種委托?事件和委托的關係。
答案:委托是指向事件的一種函數指針,把事件轉換為了一種引用類型的變數,可以讓其他函數調用。(純純的個人理解,網上有不同答案,我也不知道哪個是對的,建議找出版的資料。)
47.override(重寫)與重載overload的區別。
答案:override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法,
重載,一般是用於在一個類內實現若幹重載的方法,這些方法的名稱相同而參數形式不同。
48.MVC模式。(我並沒有完全GET到這個考點)
答案:MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用於應用程式的分層開發。
49.什麼是裝箱和拆箱?
答案:值類型轉換為引用類型是裝箱,引用類型裝換為值類型是拆箱。
50.什麼叫應用程式域AppDomain。
答案: "域",就是範圍,環境,邊界的意思,那麼什麼是應用程式域,官方給出的是這樣的解釋:操作系統和運行庫環境通常會

在應用程式間提供某種形式的隔離.

     應用程式域為安全性、可靠性、版本控制以及卸載程式集提供了隔離邊界。應用程式域通常由運行庫宿主創建,

運行庫宿主負責在運行應用程式之前引導公共語言運行庫。

  應用程式域本質上就就是一種隔離,目的也就是使應用程式中運行的代碼不能直接訪問其他應用程式中的代碼或資

源如果你需要訪問其他應用程式中的對象時你就可以複製這些對象,或通過代理訪問這些對象.

51.堆和棧的區別。

答案:heap:是由malloc之類函數分配的空間所在地。地址是由低向高增長的,引用類型儲存在這。
stack:是自動分配變數,以及函數調用的時候所使用的一些空間。地址是由高向低減少的,值類型存儲在這。
52.GC是什麼,為什麼要有GC?

答案;垃圾回收器,如果沒有GC,那麼一個系統隨著運行時間的增長,占用記憶體會越來越大,如果我們沒有主動釋放的話。

53。值類型和引用類型的區別。

答案:

1.    值類型的數據存儲在記憶體的棧中;引用類型的數據存儲在記憶體的堆中,而記憶體單元中只存放堆中對象的
地址。

2.     值類型存取速度快,引用類型存取速度慢。

3.     值類型表示實際數據,引用類型表示指向存儲在記憶體堆中的數據的指針或引用

4.     值類型繼承自System.ValueType,引用類型繼承自System.Object

5.     棧的記憶體分配是自動釋放;而堆在.NET中會有GC來釋放      

6.      值類型的變數直接存放實際的數據,而引用類型的變數存放的則是數據的地址,即對象的引用。
7. 值類型變數直接把變數的值保存在堆棧中,引用類型的變數把實際數據的地址保存在堆棧中,而實際數據則保存在堆中。

54.C#中的介面和類有什麼異同。

不同點:

不能直接實例化介面。

介面不包含方法的實現。

介面可以多繼承,類只能單繼承。

類定義可以在不同的源文件之間進行拆分。

相同點:

介面、類和結構都可以從多個介面繼承。

介面類似於抽象基類:繼承介面的任何非抽象類型都必須實現介面的所有成員。

介面和類都可以包含事件、索引器、屬性。

54.try{}里有一個return語句,那麼緊跟在這個try後面的finally{}里的code會不會被執行。什麼時候執行?

答案;會,在return 之前執行。

55.描述線程與進程的區別。

1.進程有自己獨立的地址空間;而線程共用進程的地址空間;
2.一個程式至少有一個進程,一個進程至少有一個線程;

3.線程是處理器調度的基本單位,但進程不是;

4.二者均可併發執行

56.什麼是反射?

答案:動態獲取程式集信息,動態獲取類的屬性和方法。

57.什麼是匿名方法?請寫一段代碼。

delegate(int i) { return i > 0; }

58.寫出幾種工作流產品或框架,並簡要的對比他們的差異。

59.寫出你所瞭解的設計模式,說一說使用設計模式帶來的好處,並嘗試用代碼寫出一個例子。

60.接受一個數組,找出兩個數的索引,這兩個數組相加之和等於指定的數字。找出一組即可,同一元素不可使用兩次。

比如:nums=[2,7,11,15],目標數字是9,因為nums【0】+nums【1】=9,所以返回【0,1】

答案:最簡單的方法是使用兩個for迴圈,此種方法不給出代碼了,下麵是第二種演算法,需要先進行排序,排序演算法略。

 1 int[] getindex(int n)
 2 {
 3 int i=0,j=nums.length-1
 4 while(i>j)
 5 {
 6     if(nums[i]+nums[j]==n)break;
 7     else if(nums[i]+nums[j]>n)j--;
 8     else i++;
 9 }
10 int[] a=new int[]{i,j}
11 return a;
12 }

61.

SELECT * FROM 表 /*數據源*/
AS P
PIVOT 
(
    SUM(Amount/*行轉列後 列的值*/) FOR 
    p.Month/*需要行轉列的列*/ IN (1,2,3,4/*列的值*/)
) AS T

附註:列轉行語句。測試語句

 1 CREATE TABLE ProgrectDetail
 2 (
 3     ProgrectName         NVARCHAR(20), --工程名稱
 4     OverseaSupply        INT,          --海外供應商供給數量
 5     NativeSupply         INT,          --國內供應商供給數量
 6     SouthSupply          INT,          --南方供應商供給數量
 7     NorthSupply          INT           --北方供應商供給數量
 8 )
 9 
10 INSERT INTO ProgrectDetail
11 SELECT 'A', 100, 200, 50, 50
12 UNION ALL
13 SELECT 'B', 200, 300, 150, 150
14 UNION ALL
15 SELECT 'C', 159, 400, 20, 320
16 UNION ALL

 1 SELECT P.ProgrectName,P.Supplier,P.SupplyNum
 2 FROM 
 3 (
 4     SELECT ProgrectName, OverseaSupply, NativeSupply,
 5            SouthSupply, NorthSupply
 6      FROM ProgrectDetail
 7 )T
 8 UNPIVOT 
 9 (
10     SupplyNum FOR Supplier IN
11     (OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
12 ) P

執行結果:

 

 62.描述new有兩種用法

第一種:new Class():創建對象

第二種:覆蓋方法

public new XXXX(){}

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

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

64.下麵的代碼中有什麼錯誤嗎?_______

 1 using System;
 2 class A
 3 {
 4 public virtual void F(){
 5 Console.WriteLine("A.F");
 6 }
 7 }
 8 abstract class B:A
 9 {
10 public abstract override void F();
11 
12 //答:abstract override 是不可以一起修飾. 
13 } // new public abstract void F();

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

66.如何在C#中實現繼承?也就是繼承的格式

在類名後加上一個冒號,再加上基類的名稱。

67.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答:不是。可以用

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 隊列:先入先出(FIFO)表。 常用操作: Enqueue:入隊,即將數據寫入隊列末尾 Dequeue:出隊,即將隊列開頭的元素從隊列中刪除並返回 應用場景: 隊列通常用來實現消息(任務)的快速讀寫,即消息隊列。消息隊列的常用來解決如下問題: 提升系統的吞吐量:通過引入消息隊列,將不是必須的業務邏輯 ...
  • 當伺服器是Linux的時候不懂指令覺得很懊惱,這個時候直接就可以使用PHPstorm連接伺服器操作了; 1丶準備工作 首先你先要準備伺服器丶phpstorm這兩個吧! 2丶開始配置phpstorm 按照紅線的部分一步一步的走 點擊configuration 點擊+號 我直接選擇的sftp 就這樣連接 ...
  • 1. 三種控制結構是什麼? 答:順序結構,選擇結構,迴圈結構 2. 如果if語句後不加{},if的控制範圍是否只限於第一句? 答:if語句的控制範圍只能是緊接著的一句,使用{}可以將多個語句合併成為一個複合語句,進而控制多個語句。 3. Math.random()是什麼意思?如果想要獲取15到20之 ...
  • 閱讀本文只需花費你兩分鐘, 兩分鐘你買不了吃虧,你也買不了上當. 那麼, 為何不靜下心來看看呢? Python 海龜創意繪畫, Turtle庫創作精美圖畫 Author:Amd794 E-mail:[email protected] 全部完整代碼下載地址 前言: 最初來自於 Wally Feurzi ...
  • 本文首發於公眾號:javaadu 003:位元組碼是什麼? 在Java中,位元組碼存放於以.class結尾的二進位文件。 位元組碼之於Java,類似於彙編語言之於C/C++。對於C/C++語言來說,不同的平臺需要不同的編譯器,以應對不同的操作系統和機器指令集;對於Java來說,只需要一個編譯器(javac ...
  • 面向對象: 程式由對象構成,每個對象包含對用戶公開的特定功能部分(public)和隱藏實現部分(private)。 類: 構造對象的模板 對象: 對象的行為 可以對對象施加的操作(方法) 對象的狀態 對象的域的值 對象的表示 行為相同,但狀態不同的對象(equals()方法) 類之間的關係: 依賴 ...
  • 一,複習 二,今日內容: 三,如何定義函數: 四,函數的參數: 兩種實參: 1,位置實參: a,傳參兩種方式:實參名|實參具體值 b,必須按位置對形參進行傳值 2,關鍵字實參: a,傳參兩種方式:形參名=實參名 | 形參名=實參值 b,可以指名道姓對形參進行傳值,所以可以不用按位置進行傳參 ''' ...
  • 索引 1.定義模型類 2.模型類 3.欄位查詢 4.查詢集 5.模型類關係 6.模型類擴展 ORM簡介 ORM,全拼Object-Relation Mapping,中文意為對象-關係映射,是隨著面向對象的軟體開發方法發展而產生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關係資料庫 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...