马上要到2020年了,这里整理一个.NET 工程师面试题系列,希望年底或者明年金三银四跳槽的程序猿们带来一些帮助,建议收藏,如果文中答案有不准确的地方,请在评论中指出。
1. 字符串中string str=null和string str=""和string str=string.Empty的区别
2. byte b = ‘a‘; byte c = 1; byte d = ‘ab‘; byte e = ‘啊‘; byte g = 256; 这些变量有些错误是错再哪里?
3. string和StringBuilder的区别,两者性能的比较
4.什么是扩展方法?
5. byte a =255;a+=5;a的值是多少?
6. 什么是装箱和拆箱?
7. 值类型和引用类型的区别?
string.Empty相当于“”,Empty是一个静态只读的字段。string str="" ,初始化对象,并分配一个空字符串的内存空间 string str=null,初始化对象,不会分配内存空间
byte的取值范围是-2的8次方至2的8次方-1,-256至258,a+=1时,a的值时0,a+=5时,a的值是0,所以a+=5时,值是4
int i=0;
Syste.Object obj=i;
int i=0;
System.Object obj=i;
int j=(int)obj;(将obj拆箱)
public class ItemFactory<T> where T : IComparable, new()
{
}
一句话解释就是:将方法当作参数传入另一个方法的参数。.net中有很多常见的委托如:Func 、Action 作用:提高方法的扩展性
位运算是最快,使用的是位运算 逻辑左位移<<。方法是2<<3相当于0000 0000 0000 0010 (2的16位int二进制)左移三位就是 0000 0000 0001 0000(16的二进制)
都可以标识一个常量。主要有以下区别:
4(100)、5(101)、8(1000)、16(10000)
取模运算:用number%2==0可以判断,但是这个有点低级
位运算:(使用位运算逻辑并,两个位上的都为1才是1,其余都是0,判断是否等于0)
4&3相当于100&011 ,结果是000等于0,所以4是2的n次方
5&4相当于101&100,结果是100不等于0,所以5不是2的n次方
如果要问如果是2的N次方,这个N是多少?这该怎么算?
private static byte get(int n)
{
byte number = 1;
while (n/2!=1)
{
n = n / 2;
number += 1;
}
return number;
}
CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
CTS:Common Type System 通用类型系统。Int32、Int16→int、String→string、Boolean→bool。每种语言都定义了自己的类型,.Net通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。
CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net通过CLS提供了公共的语法,然后不同语言翻译生成对应的.Net语法。
CLR:Common Language Runtime 公共语言运行时,就是GC、JIT等这些。有不同的CLR,比如服务器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相当于一个发动机,负责执行IL。
程序集。(中间语言,源数据,资源,装配清单)
string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
int b = strTmp.Length;
分析:一个字母、数字占一个byte,一个中文占占两个byte,所以a=8,b=5
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s。
C#在unsafe 模式下可以使用指针对内存进行操作, 但在托管模式下不可以使用指针,C#NET默认不运行带指针的,需要设置下,选择项目右键->属性->选择生成->“允许不安全代码”打勾->保存
s1+1不能显式转换成short类型,可以修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb,php等
不一样,a==b仅仅表示a和b值相等,a.Equals(b)表示a与b一致
class Class1
{
internal static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
o1.count的值是多少?
答案:3,静态 构造方法计算一次,两个实例化对象计算两次。
a)构造函数可以声明返回类型。
b)构造函数不可以用private修饰
c)构造函数必须与类名相同
d)构造函数不能带参数
答案:c ,构造函数必须与类名相同,可以传递多个传递,作用就是便于初始化对象成员,不能有任何返回类型
&和&&都可作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,其结果才为true,否则,只要有一方为false,则结果为false。(ps:当要用到逻辑与的时候&是毫无意义,&本身就不是干这个的)
if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))
&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,对于上面的表达式,当loginUser为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。(ps:所以说当要用到逻辑与的时候&是毫无意义的)
& 是用作位运算的。
&是位运算,返回结果是int类型 &&是逻辑运算,返回结果是bool类型
原文:https://www.cnblogs.com/SoarGavin/p/12053416.html