面试题收集

1.C#的值类型有哪些?引用类型有哪些?解释装箱和拆箱的概念.
答:1.1 C#的所有值类型均隐式派生自System.ValueType
C#中中的值类型有:
简单类型(int,long,float,double,decimal,bool,char...),
结构类型(struct),
枚举类型(enum)
1.2
C#中中的引用类型有:
接口类型(interface),类类型(class),字符串类型(stirng),
数组类型(array),委托类型(delegate)
1.3
装箱:装箱在值类型向引用类型转换时发生
拆箱:拆箱在引用类型向值类型转换时发生

//为了帮助某个个人能够深刻理解值类型,尽到码友的责任,以下对DateTime进行些展开
注1:有人说你是不是傻啊?上面你都没提到DateTime类型啊?那么DateTime到底是值类型还是引用类型?
答:可以肯定的是它是值类型无疑,因为DateTime是struct类型,而struct是什么类型呢?很显然struct值类型,
既然struct是值类型,你说DateTime是什么类型?!!。
注2:有人问,既然是DateTime是值类型为什么又可以new呢?
答:int都可以new,那你说int是什么类型呢?很明显DateTime是什么类型和它能不能new半毛钱的关系都没有!
有二货又问:那么既然DataTime、int是值类型为什么可以使用new关键字呢?要解释为什么能够new就要知道C#中new关键字用法。
注3:C#中new关键字有什么作用?可查看:https://www.cnblogs.com/xiebaochun/p/3411895.html
答:在 C# 中,new关键字可用作运算符、修饰符或约束。
1)new 运算符:用于创建对象和调用构造函数。这种大家都比较熟悉,没什么好说的了。
2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型(问题2的完美解释)。
看清楚了没?1)new 运算符用于创建对象和调用构造函数,是的,你没看错,重点是构造函数。
new是拿来调用构造函数,构造函数不是引用类型的专利。请记住
int,long,float,double,decimal,bool,char...他们都是struct。struct是值类型,那么他们都是值类型。

2.什么是泛型?new关键字在类型约束中有什么作用?
泛型(msdn):(简单地讲声明类型而不直接指定实际的类型)泛型是 C# 2.0 的最强大的功能。通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型。
new用于(简单地讲就是约束泛型参数的类型)在泛型声明中约束可能用作类型参数的参数的类型

3.Action<int> action;请使用lambda表达式、匿名委托为action进行赋值.
Action<int> aciton = (n) => { Console.WriteLine("{0}这是lambda表达式的声明方式", n); };
aciton(1);
aciton = delegate(int n) { Console.WriteLine("{0}这是使用匿名方法的申明方式", n); };
aciton(2);

4.什么是Linq的延迟执行?是否可以强制立即执行,如何操作?
延迟执行简单地说就是只有到用的时候才会去执行查询,当然它也是可以立即执行的(ToList()、ToList())。比如:
int[] nums = new int[5] { 6, 6, 6, 6, 8 };
int i = 0;
//延迟执行
var q=from n in nums select ++i;
foreach (var n in q)
Console.WriteLine("n = {0}, i = {1}", n, i);
//立即执行
var q2 = (from n in nums select ++i).ToList();
foreach (var n in q2)
Console.WriteLine("n = {0}, i = {1}", n, i);

5.多线程你的实现方式是什么?当工作线程任务完成后,如何通知其他(UI)
static void Main(string[] args)
{
Task<int> result = Calc(12, 3);
Console.WriteLine(result.Result);

result = Calc2(13, 3);
Console.WriteLine(result.Result);
}
static Task<int> Calc2(int m, int n)
{
return Task.Factory.StartNew(() =>
{
return m + n;
}).ContinueWith<int>((i) =>
{
return i.Result;
});
}
async static Task<int> Calc(int m, int n)
{
return await Task.Run(() =>
{
return m + n;
});
}
6.最新的C#语言、Net Framework版本号分别是?简要说明C#语言各个版本新增的主要语法特性。
推测:这个主要考察你是否关注开发技能的沿革。基础是否扎实。
答:C#最新是6.0;Net
Framework最新版本是.NET Framework 4.7.1
C# 2.0
匿名方法
迭代器
可空类型
C# 3.0
自动实现属性
匿名类型
扩展方法
查询表达式
Lambda表达式
表达式树
分部类和方法
Linq
C# 4.0
命名和可选参数
泛型的协变和逆变
互操作性
C#5.0
异步方法
Caller info attributes
C#6.0
Compiler-as-a-service(Roslyn)
将静态类型成员导入命名空间
异常过滤器
在Catch和Finally中使用Await
自动属性初始化器
只读属性的默认值
Expression-bodied members
Null-conditional operators(空条件运算符,简洁检查)
字符串插值
nameof operator
字典初始化器
C#7.0
out变量
模式匹配
元组
解构
局部函数
数字分隔符
二进制文字
局部引用和引用返回
扩展异步返回类型
表达式的构造函数和finalizers
Expression bodied getters and setters
throw表达式
C#7.1
Async main
默认表达式

7.删除重复数据,保留一行的sql语句。
delete temp from (
select row_number() over(partition by col1,col2 order by col1) as rid,* from table1
) as temp where rid>1

posted @ 2018-04-13 18:13  自由的鱼  阅读(139)  评论(0编辑  收藏  举报