C# 高级面试题
很少会有人可以答对,如果你遇到一个来面试的人实在嚣张,就可以用本文的题去打击
本文内容就看着玩,请不要在严肃的面试中问题这样的题目
如果面试到一个人可以回答出下面的题目也不能证明他的技术很强,只能说明他了解很多C#相关,或者他看过我的博客
循环下面的代码
请在下面的代码的注释处填写代码,让函数 Foo 里面的代码输出
static void Main(string[] args)
{
// 请在此处写代码,调用 Foo 函数内的输出代码
}
private static void Foo()
{
try
{
while (true)
{
}
}
finally
{
Console.WriteLine("尝试调用 Foo 函数执行这一句代码");
}
}
参考答案
使用一个线程调用的方式,调用之后结束线程,此时就会输出
static void Main(string[] args)
{
// 请在此处写代码,调用 Foo 函数内的输出代码
var thread = new Thread(Foo);
thread.Start();
Task.Delay(100).Wait();
thread.Abort();// 这时就会结束循环
Console.Read();
}
从空转换
请写出 IFoo 和 Foo 的实现,让下面的代码不会抛出空异常
static void Main(string[] args)
{
Foo foo = (IFoo) null;
foo.Name = "lindexi";
Console.Read();
}
参考答案
class IFoo
{
}
class Foo
{
public string Name { get; set; }
public static implicit operator Foo(IFoo foo)
{
return new Foo();
}
}
等待不存在的类
请添加新的类的代码让下面的代码编译通过
class Program
{
static async Task Main(string[] args)
{
Foo foo = await (object) null;
foo.Name = "lindexi";
Console.Read();
}
}
public class Foo
{
public string Name { get; set; }
}
参考答案
public class HeabdsdnbKevx : INotifyCompletion
{
public bool IsCompleted { get; }
public Foo GetResult()
{
return new Foo();
}
/// <inheritdoc />
public void OnCompleted(Action continuation)
{
}
}
public static class RelelnisSou
{
public static HeabdsdnbKevx GetAwaiter(this object obj)
{
return new HeabdsdnbKevx();
}
}
再高级一点,写出下面的代码
static async Task Main(string[] args)
{
await await await await await await await await await await await await
await await await await await await await "林德熙是逗比";
}
其实很简单,也就是将 GetResult 修改一下,在上面的代码修改
public string GetResult()
{
return "林德熙是逗比";
}
因为返回值是 string 所以又可以继续等待
如何不执行 finally 里面的代码
这里有一个代码,需要让 finally 里面的代码不执行,现在你只能写 Foo 方法,同时这个方法不能运行无限长时间
try
{
Foo();
}
finally
{
Console.WriteLine("不要让这个代码运行");
}
参考答案
因为不能让 Foo 运行无限长,就不能使用无限循环的方法,可以使用的方法有 Environment.FailFast 或 Environment.Exit 退出
private static void Foo()
{
Environment.Exit(0);
}
请问下面代码输出多少
请问下面的代码的 n 的值是多少?
class Foo
{
public int N { get; } = 1;
}
Foo foo = null;
var n = 2 + foo?.N ?? 1;
Console.WriteLine(n);
参考答案
1
可能有小伙伴认为在 2 + foo?.N
这时如果 foo 为空就应该返回 ??
后面的值,但是这是不对的上面的代码是和下面的代码等同的
if (foo == null)
{
n = 1;
}
else
{
n = 2 + foo.N;
}
而不是和下面的代码等价的
if (foo == null)
{
n = 2 + 1;
}
else
{
n = 2 + foo.N;
}
在表达里面只有 ?
的值为空,那么就不会执行
模式匹配
请问下面代码输出什么?
class B
{
public static int operator &(B left, B right) => 1;
public static int operator >(B left, B right) => 2;
public static int operator <(B left, B right) => 3;
public static int operator &(bool left, B right) => 5;
public static int operator >(bool left, B right) => 6;
public static int operator <(bool left, B right) => 7;
}
private static B B { get; }
static void Main(string[] args)
{
object a = null;
B c = null;
Console.WriteLine(a is B b & c);
Console.WriteLine(a is B b1 > c);
Console.WriteLine(a is B b2 < c);
a = new B();
Console.WriteLine(a is B b5 & c);
Console.WriteLine(a is B b6 > c);
Console.WriteLine(a is B b7 < c);
}
也许这是全部题目里面最简单的一道题
请看 C# 匹配可空变量
其实这里的 a is B
用的 B
是 class
不是定义的属性,对 a is B b5
返回的是 bool
所以将会是 bool
与 B
之间的运算
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
C# 高级面试题的更多相关文章
- php高级面试题知识点(转载)
php高级面试题知识点大全 时间:2016-01-26 06:36:22来源:网络 导读:php高级面试题知识点大全,本套面试题内容包括php魔术方法.php单点登录.linux基本命令.前端开发技术 ...
- Java高级面试题解析(一)
最近,在看一些java高级面试题,我发现我在认真研究一个面试题的时候,我自己的收获是很大的,我们在看看面试题的时候,不仅仅要看这个问题本身,还要看这个问题的衍生问题,一个问题有些时候可能是一个问题群( ...
- 2019-11-19-C#-高级面试题
title author date CreateTime categories C# 高级面试题 lindexi 2019-11-19 08:40:50 +0800 2018-11-12 11:18: ...
- Java 高级面试题收集
Java概念题 拆箱装箱的原理 自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类 ...
- Java高级面试题积累(二)
简述23种设计 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口.而无需指定它们详细的类. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外 ...
- python高级—— 从趟过的坑中聊聊爬虫、反爬以及、反反爬,附送一套高级爬虫试题
前言: 时隔数月,我终于又更新博客了,然而,在这期间的粉丝数也就跟着我停更博客而涨停了,唉 是的,我改了博客名,不知道为什么要改,就感觉现在这个名字看起来要洋气一点. 那么最近到底咋不更新博客了呢?说 ...
- Java高级面试题整理(附答案)
这是我收集的10道高级Java面试问题列表.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java ...
- PHP高级面试题
在网上看到一些高级php 的面试题目.. 最近接连面试了几家公司,有些重要问题记录一下,督促自己学习提高,同时希望给朋友们一些帮助.内容很多,一点点完善,一步步学习..有些是面试被问,有些是招聘要求, ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
随机推荐
- Python中的进程池与线程池
引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 ...
- jenkins执行selenium自动化测试浏览器不显示解决方法
因为jenkins是用windows installer 安装成 windows的服务了,那么jenkins是一个后台服务,所以跑selium cases 的时候不显示浏览器 解决办法:Step 1. ...
- 通过IP地址訪问Jbossserver上的应用
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/liu765023051/article/details/28882533 环境介绍 Web项目中.在 ...
- linux 查看并关闭窗口
查看端口 ps -ef | grep tomcat 关闭端口 kill -9 端口号
- Windows 配置 Aria2 及 Web 管理面板教程
今天闲来没事,想找点东西折腾下,然后看到个在 Debian 7 x64 系统环境下配置 Aria2 和 Web 管理面板的教程,针对 Linux 服务器用的.但很多人没服务器,也不知道什么是 Aria ...
- 使用 UIWebView 来播放视频
MPMoviePlayerController 并不是继承自 UIViewController SDK 中的例子使用的是 addSubviews 的方式来添加 MPMoviePlayerControl ...
- React全家桶打造共享单车后台管理系统项目_第1篇_项目环境搭建_首页编写
1.项目介绍 项目github地址:https://github.com/replaceroot/React-manageSystem 项目整体架构: 课程大纲: 第一章:React基础知识 ...
- LeetCode109 Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- & 和 | 和 ~
O(∩_∩)O~~浅理解,不足之处请多指正,谢谢. 1) & & :二目运算符,把运算符两侧的数换成 二进制 再依次求与. 例如:a = 2,b = 3; c = a & b; ...
- JSTL的时间格式化
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 开头第一句必须上 ...