首页 > temp > 简明python教程 >
-
基本的C#面试问题(15例)
有很多方法可以做到这一点,但是最直接的两种方法是:
还有就是
当然,你还需要注意以下关键:
你是否利用 C#语言特性 一行就解决问题。(即,不是使用包含循环,条件语句和累加器的更长篇幅的解决方案)
你是否考虑过溢出的可能性。例如,诸如
这可能一个很”明显”的单行,但这样溢出的可能性很高。虽然上面的答案中使用的转换为long的方法并没有消除这种可能性,但是它使得发生溢出异常的可能性非常小。但请注意,如果你写答案的时候询问数组的预期大小及其成员的大小,则显然你在做这道题目的时候在考虑此溢出问题,这很棒。
|
location is null 1/1/0001 12:00:00 AM 下面的简短程序的输出是什么?解释你的答案。简短程序的输出是什么?解释你的答案。 尽管两个变量都未初始化,但是String是引用类型 、DateTime 是值类型。作为值类型,单位化DateTime变量设置为默认值 公元1年晚上12点,而不是 null
|
|
由于我们不能访问对象的私有半径字段,所以我们通过内联传递计算函数,让对象本身计算周长。
许多c#程序员回避(或不理解)函数值参数。虽然在这种情况下,这个例子有点做作,但其目的是看看申请人是否了解如何制定一个调用来计算哪个与方法的定义相匹配。
另外,一个有效的(虽然不那么优雅的)解决方案是从对象中检索半径值本身,然后执行计算结果:
无论哪种方式。我们在这里主要寻找的是面试者是否熟悉并理解如何调用Calculate方法。
|
程序的输出是什么?解释你的答案。序的输出是什么?解释你的答案。
回答:
问题第一部分(即带有的代码版本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()
|
原因如下: 委托被添加到 for循环中l了,而 “引用” (或者“指针”)被存储到i中,而不是值本身。因此,在我们退出循环之后,变量i被设置为10,所以到调用每个委托时,传递给它们的值都是10。
|
是! 之所以可以这样做,是因为数组的类型object不仅可以存储任何数据类型,还可以存储类的对象,如下所示:
|
C#中的类和结构确实有一些共同点,即:他们都是
是复合数据类型
可以包含方法和事件
可以支持接口
但是有许多差异。比较一下:
类:
支持继承
是引用(指针)类型
引用可以为空
每个新实例都有内存开销
结构:
不支持继承
是值类型
按值传递(如整数)
不能有空引用(除非使用了Nullable)
每个新实例没有内存开销(除非“装箱”)
|
答案:使用如下正则表达式:
说明:
($\s+.*?)-第1组,捕获一个文字$,一个或多个空格字符,然后捕获除换行符以外的任意数量的字符,并尽可能少地捕获到下一个最接近的匹配项
$\s+—单个$符号和一个或多个空格字符
$1引用组1的值,它只是将其插入被替换的字符串中,$$代表替换模式中的$符号。
|
在创建该类的任何实例之前,将调用该类的静态构造函数。此处调用的静态构造函数TestValue首先将变量初始化。