主頁 > .NET開發 > 基本的C#面試問題(15例)

基本的C#面試問題(15例)

2020-09-13 19:44:30 .NET開發

1、給定一個int陣列,撰寫方法以統計所有偶數的值,

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

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

還有就是

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

當然,你還需要注意以下關鍵:

你是否利用 C#語言特性 一行就解決問題,(即,不是使用包含回圈,條件陳述句和累加器的更長篇幅的解決方案)

你是否考慮過溢位的可能性,例如,諸如

return intArray.Where(i => i % 2 == 0).Sum()(與函式的回傳型別無關)

這可能一個很”明顯”的單行,但這樣溢位的可能性很高,雖然上面的答案中使用的轉換為long的方法并沒有消除這種可能性,但是它使得發生溢位例外的可能性非常小,但請注意,如果你寫答案的時候詢問陣列的預期大小及其成員的大小,則顯然你在做這道題目的時候在考慮此溢位問題,這很棒,

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

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());
}
}


輸出將是:

location is null
1/1/0001 12:00:00 AM
下面的簡短程式的輸出是什么?解釋你的答案,簡短程式的輸出是什么?解釋你的答案,
盡管兩個變數都未初始化,但是String是參考型別 、DateTime 是值型別,作為值型別,單位化DateTime變數設定為默認值 公元1年晚上12點,而不是 null

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

static DateTime time;
/* ... */
if (time == null)
{
/* do something */
}
有人可能會認為,由于變數永遠不可能為null (它被自動初始化為1月1日的值),所以編譯器在比較某個變數時就會報錯,具體來說,運算子將其運算元強制轉換為不同的允許型別,以便在兩邊都得到一個通用型別,然后可以對其進行比較,這就是為什么像這樣的東西會給你期望的結果(而不是失敗或意外的行為,因為運算元是不同的型別):
double x = 5.0;
int y = 5;
Console.WriteLine(x == y); // outputs true
然而,這有時會導致意外的行為,例如DateTime變數和null的比較,在這種情況下,DateTime變數和null文字都可以轉換為可空的,因此,比較這兩個值是合法的,即使結果總是假的,

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

public sealed class Circle {
private double radius;

public double Calculate(Func<double, double> op) {
return op(radius);
}
}


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

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

由于我們不能訪問物件的私有半徑欄位,所以我們通過行內傳遞計算函式,讓物件本身計算周長,

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

另外,一個有效的(雖然不那么優雅的)解決方案是從物件中檢索半徑值本身,然后執行計算結果:

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

無論哪種方式,我們在這里主要尋找的是面試者是否熟悉并理解如何呼叫Calculate方法,

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

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);)的答案是該程式將僅輸出一個空行(而不是 “ Hello world!”),這是因為呼叫result時仍將未初始化Console.WriteLine,

大多數程式和面向物件的程式員都希望函式return在回傳呼叫函式之前從頭到尾執行,或者從陳述句執行,C#async函式不是這種情況,它們只執行到第一個await陳述句,然后回傳到呼叫方,由await(在此例中為Task.Delay)呼叫的函式是異步執行的,并且該await陳述句之后的行直到Task.Delay完成(在5毫秒內)之前都不會發出信號,但是,在這段時間內,控制權已經回傳給呼叫者,該呼叫者Console.WriteLine對尚未初始化的字串執行該陳述句,

呼叫await Task.Delay(5) 可讓當前執行緒繼續其正在執行的操作,如果已完成(等待任何等待),則將其回傳到執行緒池,這是異步/等待機制的主要好處,它允許CLR使用執行緒池中的更少執行緒來服務更多請求,

異步編程已經變得越來越普遍,因為執行許多活動的網路服務請求或資料庫請求的設備越來越普遍,C#具有一些出色的編程結構,可以極大地簡化異步方法的編程任務,并且意識到它們的程式員將產生更好的程式,

關于問題的第二部分,如果將await Task.Delay(5);其替換為Thread.Sleep(5),則程式將輸出Hello world!,一種沒有至少一個陳述句的async方法,其操作就像同步方法一樣,也就是說,它將從頭到尾執行,或者直到遇到一條陳述句為止,呼叫只是阻塞了當前正在運行的執行緒,因此呼叫僅將方法的執行時間增加了5毫秒,awaitreturnThread.Sleep()Thread.Sleep(5)SaySomething()

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

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();
}
}


這個程式將把數字10輸出十次,

原因如下: 委托被添加到 for回圈中l了,而 “參考” (或者“指標”)被存盤到i中,而不是值本身,因此,在我們退出回圈之后,變數i被設定為10,所以到呼叫每個委托時,傳遞給它們的值都是10,

7、是否可以將混合資料型別(例如int,string,float,char)全部存盤在一個陣列中?

是! 之所以可以這樣做,是因為陣列的型別object不僅可以存盤任何資料型別,還可以存盤類的物件,如下所示:
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#中的結構和類,他們有什么共同點?它們有何不同?

C#中的類和結構確實有一些共同點,即:

他們都是

是復合數據型別

可以包含方法和事件

可以支持介面

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

類:

支持繼承

是參考(指標)型別

參考可以為空

每個新實體都有記憶體開銷

結構:

不支持繼承

是值型別

按值傳遞(如整數)

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

每個新實體沒有記憶體開銷(除非“裝箱”)

9、這里有一個包含一個或多個$符號的字串,例如: "foo bar foo $ bar $ foo bar $ " 問題:如何$從給定的字串中洗掉第二和第三次出現的?

答案:

使用如下正則運算式:

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組,捕獲一個文字$,一個或多個空格字符,然后捕獲除換行符以外的任意數量的字符,并盡可能少地捕獲到下一個最接近的匹配項

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

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

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

public class TestStatic
{
public static int TestValue;

public TestStatic()
{
if (TestValue =https://www.cnblogs.com/star8521/p/= 0)
{
TestValue = https://www.cnblogs.com/star8521/p/5;
}
}
static TestStatic()
{
if (TestValue =https://www.cnblogs.com/star8521/p/= 0)
{
TestValue = https://www.cnblogs.com/star8521/p/10;
}
}

public void Print()
{
if (TestValue =https://www.cnblogs.com/star8521/p/= 5)
{
TestValue = https://www.cnblogs.com/star8521/p/6;
}
Console.WriteLine("TestValue : " + TestValue);

}
}

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


在創建該類的任何實體之前,將呼叫該類的靜態建構式,此處呼叫的靜態建構式TestValue首先將變數初始化,

11、有沒有一種方法可以修改ClassA、以便您可以在呼叫Main方法時使用引數呼叫建構式,而無需創建任何其他新實體ClassA?

class ClassA
{
public ClassA() { }

public ClassA(int pValue) { }
}


啟動類

class Program
{
static void Main(string[] args)
{
ClassA refA = new ClassA();
}
}

回答:

所述this關鍵字被用于呼叫其他構造,初始化該類物件,下面是實作:

class ClassA
{
public ClassA() : this(10)
{ }

public ClassA(int pValue)
{ }
}

12、以下代碼輸出什么?

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();
}
}
}


答案:

Hello
C

13、描述依賴注入,

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

建構式依賴

屬性依賴

方法依賴

14、撰寫一個C#程式,該程式接受以千米為單位的距離,將其轉換為米,然后顯示結果,

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、描述裝箱和拆箱,并寫一個例子,

裝箱是將值型別隱式轉換為該型別object或該值型別實作的任何介面型別,將值型別裝箱會創建一個包含該值的物件實體,并將其存盤在堆中,

例:

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

最后:
面試不僅要基礎扎實,更重要的是能解決棘手的技術問題,所以以上這些內容僅供參考,并非每個值得招聘的優秀候選人都能夠回答所有問題,也不能確定能夠全部回答,就能保證他是一個優秀候選人,歸根結底,招聘仍然是一門藝術,一門科學以及許多作業,

來源:https://www.iwmyx.cn/15gjbdcmswt.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/26988.html

標籤:C#

上一篇:【asp.net core 系列】2 控制器與路由的恩怨情仇

下一篇:C# async await 異步執行方法封裝 替代 BackgroundWorker

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more