公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

15個基本的C#面試問題

admin
2024年10月6日 21:28 本文熱度 1015

1、給定一個int數(shù)組,編寫方法以統(tǒng)計所有偶數(shù)的值。

有很多方法可以做到這一點,但是最直接的兩種方法是:

1
2
3
static long TotalAllEvenNumbers(int[] intArray) {
 return intArray.Where(i => i % 2 == 0).Sum(i => (long)i);
}

還有就是

1
2
3
static long TotalAllEvenNumbers(int[] intArray) {
 return (from i in intArray where i % 2 == 0 select (long)i).Sum();
}

當然,你還需要注意以下關(guān)鍵:

  1. 你是否利用 C#語言特性 一行就解決問題。(即,不是使用包含循環(huán),條件語句和累加器的更長篇幅的解決方案)

  2. 你是否考慮過溢出的可能性。例如,諸如

    return intArray.Where(i => i % 2 == 0).Sum()(與函數(shù)的返回類型無關(guān))

這可能一個很”明顯”的單行,但這樣溢出的可能性很高。雖然上面的答案中使用的轉(zhuǎn)換為long的方法并沒有消除這種可能性,但是它使得發(fā)生溢出異常的可能性非常小。但請注意,如果你寫答案的時候詢問數(shù)組的預(yù)期大小及其成員的大小,則顯然你在做這道題目的時候在考慮此溢出問題,這很棒。

2、下面的代碼的輸出是什么?解釋你的答案。

1
2
3
4
5
6
7
8
9
class Program {
 static String location;
 static DateTime time;

 static void Main() {
   Console.WriteLine(location == null ? "location is null" : location);
   Console.WriteLine(time == null ? "time is null" : time.ToString());
 }
}

輸出將是:

1
2
location is null
1/1/0001 12:00:00 AM

下面的簡短程序的輸出是什么?解釋你的答案。簡短程序的輸出是什么?解釋你的答案。
盡管兩個變量都未初始化,但是String是引用類型 、DateTime 是值類型。作為值類型,單位化DateTime變量設(shè)置為默認值 公元1年晚上12點,而不是 null

3、下面語句中 time 和null 的比較是有效還是無效的?

1
2
3
4
5
6
static DateTime time;
/* ... */
if (time == null)
{
/* do something */
}

有人可能會認為,由于變量永遠不可能為null (它被自動初始化為1月1日的值),所以編譯器在比較某個變量時就會報錯。具體來說,操作符將其操作數(shù)強制轉(zhuǎn)換為不同的允許類型,以便在兩邊都得到一個通用類型,然后可以對其進行比較。這就是為什么像這樣的東西會給你期望的結(jié)果(而不是失敗或意外的行為,因為操作數(shù)是不同的類型):

1
2
3
double x = 5.0;
int y = 5;
Console.WriteLine(x == y);  // outputs true

然而,這有時會導(dǎo)致意外的行為,例如DateTime變量和null的比較。在這種情況下,DateTime變量和null文字都可以轉(zhuǎn)換為可空的。因此,比較這兩個值是合法的,即使結(jié)果總是假的。

4、給定circle以下類的實例:

1
2
3
4
5
6
7
public sealed class Circle {
 private double radius;
 
 public double Calculate(Func<double, double> op) {
   return op(radius);
 }
}

簡編寫代碼以計算圓的周長,而無需修改Circle類本身。
首選的答案如下:

1
circle.Calculate(r => 2 * Math.PI * r);

由于我們不能訪問對象的私有半徑字段,所以我們通過內(nèi)聯(lián)傳遞計算函數(shù),讓對象本身計算周長。

許多c#程序員回避(或不理解)函數(shù)值參數(shù)。雖然在這種情況下,這個例子有點做作,但其目的是看看申請人是否了解如何制定一個調(diào)用來計算哪個與方法的定義相匹配。

另外,一個有效的(雖然不那么優(yōu)雅的)解決方案是從對象中檢索半徑值本身,然后執(zhí)行計算結(jié)果:

1
2
var radius = circle.Calculate(r => r);
var circumference = 2 * Math.PI * radius;

無論哪種方式。我們在這里主要尋找的是面試者是否熟悉并理解如何調(diào)用Calculate方法。

5、下面程序的輸出是什么?解釋你的答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Program {
 private static string result;

 static void Main() {
   SaySomething();
   Console.WriteLine(result);
 }

 static async Task<string> SaySomething() {
   await Task.Delay(5);
   result = "Hello world!";
   return “Something”;
 }

下面
此外,如果我們替換wait task,答案會改變嗎? 比如 thread . sleep (5) ? 為什么?的簡短

程序的輸出是什么?解釋你的答案。序的輸出是什么?解釋你的答案。

回答:

問題第一部分(即帶有的代碼版本await Task.Delay(5);)的答案是該程序?qū)H輸出一個空行(而不是 “ Hello world!”)。這是因為調(diào)用result時仍將未初始化Console.WriteLine。

大多數(shù)程序和面向?qū)ο蟮某绦騿T都希望函數(shù)return在返回調(diào)用函數(shù)之前從頭到尾執(zhí)行,或者從語句執(zhí)行。C#async函數(shù)不是這種情況。它們只執(zhí)行到第一個await語句,然后返回到調(diào)用方。由await(在此例中為Task.Delay)調(diào)用的函數(shù)是異步執(zhí)行的,并且該await語句之后的行直到Task.Delay完成(在5毫秒內(nèi))之前都不會發(fā)出信號。但是,在這段時間內(nèi),控制權(quán)已經(jīng)返回給調(diào)用者,該調(diào)用者Console.WriteLine對尚未初始化的字符串執(zhí)行該語句。

調(diào)用await Task.Delay(5) 可讓當前線程繼續(xù)其正在執(zhí)行的操作,如果已完成(等待任何等待),則將其返回到線程池。這是異步/等待機制的主要好處。它允許CLR使用線程池中的更少線程來服務(wù)更多請求。

異步編程已經(jīng)變得越來越普遍,因為執(zhí)行許多活動的網(wǎng)絡(luò)服務(wù)請求或數(shù)據(jù)庫請求的設(shè)備越來越普遍。C#具有一些出色的編程結(jié)構(gòu),可以極大地簡化異步方法的編程任務(wù),并且意識到它們的程序員將產(chǎn)生更好的程序。

關(guān)于問題的第二部分,如果將await Task.Delay(5);其替換為Thread.Sleep(5),則程序?qū)⑤敵鯤ello world!。一種沒有至少一個語句的async方法,其操作就像同步方法一樣。也就是說,它將從頭到尾執(zhí)行,或者直到遇到一條語句為止。調(diào)用只是阻塞了當前正在運行的線程,因此調(diào)用僅將方法的執(zhí)行時間增加了5毫秒。awaitreturnThread.Sleep()Thread.Sleep(5)SaySomething()

6、下面的程序輸出是什么?解釋你的答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
delegate void Printer();

static void Main()
{
       List<Printer> printers = new List<Printer>();
       int i=0;
       for(; i < 10; i++)
       {
           printers.Add(delegate { Console.WriteLine(i); });
       }

       foreach (var printer in printers)
       {
           printer();
       }
}

這個程序?qū)褦?shù)字10輸出十次。

原因如下: 委托被添加到 for循環(huán)中l(wèi)了,而 “引用” (或者“指針”)被存儲到i中,而不是值本身。因此,在我們退出循環(huán)之后,變量i被設(shè)置為10,所以到調(diào)用每個委托時,傳遞給它們的值都是10。

7、是否可以將混合數(shù)據(jù)類型(例如int,string,float,char)全部存儲在一個數(shù)組中?

是! 之所以可以這樣做,是因為數(shù)組的類型object不僅可以存儲任何數(shù)據(jù)類型,還可以存儲類的對象,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication8
{
   class Program
   {
       class Customer
       {
           public int ID { get; set; }
           public string Name { get; set; }
           public override string ToString()
           {
               return this.Name;
           }
       }
       static void Main(string[] args)
       {
           object[] array = new object[3];
           array[0] = 101;
           array[1] = "C#";
           Customer c = new Customer();
           c.ID = 55;
           c.Name = "Manish";
           array[2] = c;
           foreach (object obj in array)
           {
               Console.WriteLine(obj);
           }
           Console.ReadLine();
       }
   }
}

8、比較C#中的結(jié)構(gòu)和類。他們有什么共同點?它們有何不同?

C#中的類和結(jié)構(gòu)確實有一些共同點,即:

他們都是

是復(fù)合數(shù)據(jù)類型

可以包含方法和事件

可以支持接口

但是有許多差異。比較一下:

類:

支持繼承

是引用(指針)類型

引用可以為空

每個新實例都有內(nèi)存開銷

結(jié)構(gòu):

不支持繼承

是值類型

按值傳遞(如整數(shù))

不能有空引用(除非使用了Nullable)

每個新實例沒有內(nèi)存開銷(除非“裝箱”)

9、這里有一個包含一個或多個$符號的字串,例如:

1
"foo bar foo $ bar $ foo bar $ "

問題:如何$從給定的字符串中刪除第二和第三次出現(xiàn)的?
答案:

使用如下正則表達式:

1
2
3
4
string s = "like for example $  you don't have $  network $  access";
Regex rgx = new Regex("\\$\\s+");
s = Regex.Replace(s, @"(\$\s+.*?)\$\s+", "$1$$");
Console.WriteLine("string is: {0}",s);

說明:

  • ($\s+.*?)-第1組,捕獲一個文字$,一個或多個空格字符,然后捕獲除換行符以外的任意數(shù)量的字符,并盡可能少地捕獲到下一個最接近的匹配項

  • $\s+—單個$符號和一個或多個空格字符

  • $1引用組1的值,它只是將其插入被替換的字符串中,$$代表替換模式中的$符號。

    10、下面的程序輸出是什么?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class TestStatic
       {
           public static int TestValue;

           public TestStatic()
           {
               if (TestValue == 0)
               {
                   TestValue = 5;
               }
           }
           static TestStatic()
           {
               if (TestValue == 0)
               {
                   TestValue = 10;
               }
           }

           public void Print()
           {
               if (TestValue == 5)
               {
                   TestValue = 6;
               }
               Console.WriteLine("TestValue : " + TestValue);

           }
       }

    public void Main(string[] args)
           {
               TestStatic t = new TestStatic();
               t.Print();
           }

TestValue : 10

在創(chuàng)建該類的任何實例之前,將調(diào)用該類的靜態(tài)構(gòu)造函數(shù)。此處調(diào)用的靜態(tài)構(gòu)造函數(shù)TestValue首先將變量初始化。

11、有沒有一種方法可以修改ClassA、以便您可以在調(diào)用Main方法時使用參數(shù)調(diào)用構(gòu)造函數(shù),而無需創(chuàng)建任何其他新實例ClassA?

1
2
3
4
5
6
class ClassA
{
 public ClassA() { }

 public ClassA(int pValue) {  }
}

啟動類

1
2
3
4
5
6
7
class Program
{
 static void Main(string[] args)
 {
   ClassA refA = new ClassA();
 }
}

回答:

所述this關(guān)鍵字被用于調(diào)用其他構(gòu)造,初始化該類對象。下面是實現(xiàn):

1
2
3
4
5
6
7
8
class ClassA
{
 public ClassA() : this(10)
 { }

 public ClassA(int pValue)
 {  }
}

12、以下代碼輸出什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace main1
{
   class Program
   {
       static void Main(string[] args)
       {
           try
           {
               Console.WriteLine("Hello");
           }
           catch (ArgumentNullException)
           {
               Console.WriteLine("A");
           }
           catch (Exception)
           {
               Console.WriteLine("B");
           }
           finally
           {
               Console.WriteLine("C");
           }
           Console.ReadKey();
       }
   }
}

答案:

1
2
Hello
C

13、描述依賴注入。

依賴注入是一種使緊密鏈接的類分離的方式,從而減少了類之間的直接依賴。有多種方法可以實現(xiàn)依賴項注入:

  1. 構(gòu)造函數(shù)依賴

  2. 屬性依賴

  3. 方法依賴

    14、編寫一個C#程序,該程序接受以千米為單位的距離,將其轉(zhuǎn)換為米,然后顯示結(jié)果。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    using system;

    class abc

    {
       public static Void Main()
       
       {
         
               int ndistance, nresult;
               
           Console.WriteLine("Enter the distance in kilometers");
           
           ndistance = convert.ToInt32(Console.ReadLine());
           
           nresult = ndistance * 1000;
             
           Console.WriteLine("Distance in meters: " + nresult);
           
           Console.ReadLine();
           
       }
       
    }

15、描述裝箱和拆箱。并寫一個例子。

裝箱是將值類型隱式轉(zhuǎn)換為該類型object或該值類型實現(xiàn)的任何接口類型。將值類型裝箱會創(chuàng)建一個包含該值的對象實例,并將其存儲在堆中。

例:

1
2
3
4
5
int x = 101;
object o = x;  // boxing value of x into object o

o = 999;
x = (int)o;    // unboxing value of o into integer x

最后:

面試不僅要基礎(chǔ)扎實,更重要的是能解決棘手的技術(shù)問題,所以以上這些內(nèi)容僅供參考。并非每個值得招聘的優(yōu)秀候選人都能夠回答所有問題,也不能確定能夠全部回答,就能保證他是一個優(yōu)秀候選人。歸根結(jié)底,招聘仍然是一門藝術(shù),一門科學以及許多工作。

原文來自:https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make


該文章在 2024/10/9 17:52:41 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产日韩精品99久久 | 99久久久久国产精品免费 | 国产美女口爆吞精系列 | 国产精品日韩亚洲一区二区 | 国产+日韩+另类+视频一区爱 | 国产在线视频不卡一视频大全 | 2025色婷婷综合久久久 | av无码精品久久久久精品免费 | 黑人巨大精品欧美一区二区蜜桃 | av无码国产在线观看免费软件 | 99精品无码一区二区毛片免费 | 国产精品国产主播在线观看 | 国产成人精品日本亚洲专区不卡 | 韩国一区二区三区 | 99久久久无码国产精精品 | 变态另类欧美大码日韩 | 国产精品国产主播在线观看 | 丰满人妻一区二区三区四季av | 国产高清精品亚洲一区二区三 | 国产精彩视频一区二区三区 | 国产一级a级毛片久久久久精品卡 | 加勒比精品性爱视频在线观看 | 加勒比无码一区人妻 | 9191在线播放国产 | 国产高清精品亚洲一区二区三区 | 国产激情无码毛片久久 | 国产精品免费精品自在线观看 | 国产一区二区三精品久久久无 | 国产精品高清视频免费 | 国产精品亚洲av无人区一区 | 国产高清在线观看av | 国产97人人乐人人爱 | 国产精品无码综合区 | 91精品手机国产在线破解版 | 国产在线不卡一区二区完整版 | 91免费无码国产在线观看 | av入口在线免费 | 国产内射合集颜射 | 成人亚洲国产精品久久 | 国产在线精品无码不不卡 | 国产一区二区三区亚洲精品 |