上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给你们分享一下,机会是给有准备的人,面试造火箭,工做拧螺丝,不慌,共勉。 1.net必问的面试题系列之基本概念和语法 2.net必问的面试题系列之面向对象 3.net必问的面试题系列之设计模式 4.net必问的面试题系列之集合、异常、泛型 5.net必问的面试题系列之简单算法 6.net必问的面试题系列之数据库 7.net必问的面试题系列之web前端 .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 值类型和引用类型的区别 8 new关键字的做用 9 int?和int有什么区别 10 C#中的委托是什么? 11 用最有效的方法算出2乘以8等于几? 12 const和readonly有什么区别? 13.现有一个整数number,请写一个方法判断这个整数是不是2的N次方 14.CTS、CLS、CLR分别做何解释 15.在.net中,配件的意思是? 16.分析下面代码,a、b的值是多少? 17.String s = new String(“xyz”);建立了几个String Object? 18.能用foreach遍历访问的对象须要实现 ______接口或声明______方法的类型。 19.静态成员和非静态成员的区别 20.c#能否对内存直接操做 21.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 22.什么是强类型,什么是弱类型?哪一种更好些?为何? 23.using关键字的做用 24.ref和out有什么区别 25.a.Equals(b)和a==b同样吗? 26下面这段代码求值 27关于构造函数说法正确的是哪一个? 28 Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 29 &和&&的区别 30 i++和++i有什么区别? 31 float f = 3.4; 是否正确? 32 什么是自动转换,什么是强制转换,何时须要自动转换,何时须要强制转换 32 as和is的区别javascript
string.Empty至关于“”,Empty是一个静态只读的字段。 string str="" ,初始化对象,并分配一个空字符串的内存空间 string str=null,初始化对象,不会分配内存空间php
a 本题考查的是数据类型能承载数据的大小。 b 1byte =8bit,1个汉字=2个byte,1个英文=1个byte=8bit c 因此bc是对的,deg是错的。'a'是char类型,a错误 d java byte取值范围是-128~127, 而C#里一个byte是0~255html
a 都是引用类型,分配再堆上 b StringBuilder默认容量是16,能够容许扩充它所封装的字符串中字符的数量.每一个StringBuffer对象都有必定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增长容量。 c 对于简单的字符串链接操做,在性能上stringbuilder不必定老是优于string。由于stringbulider对象的建立也消耗大量的性能,在字符串链接比较少的状况下,过分滥用stringbuilder会致使性能的浪费而非节约,只有大量没法预知次数的字符串操做才考虑stringbuilder的使用。从最后分析能够看出若是是相对较少的字符串拼接根本看不出太大差异。 d Stringbulider的使用,最好制定合适的容量值,不然优于默认值容量不足而频繁的进行内存分配操做,是不妥的实现方法。 参考连接:http://www.javashuo.com/article/p-havqpruy-dc.html前端
a 一句话解释,扩展方法使你可以向现有类型“添加”方法,无需修改类型 b 条件:按扩展方法必须知足的条件,1.必需要静态类中的静态方法2.第一个参数的类型是要扩展的类型,而且须要添加this关键字以标识其为扩展方法 c建议:一般,只在不得已的状况下才实现扩展方法,并谨慎的实现 d使用:不能经过类名调用,直接使用类型来调用java
byte的取值范围是-2的8次方至2的8次方-1,-256至258,a+=1时,a的值时0,a+=5时,a的值是0,因此a+=5时,值是4c++
装箱就是隐式地将一个值类型转换成引用类型,如: int i=0; Syste.Object obj=i; 拆箱就是将引用类型转换成值类型,如: int i=0; System.Object obj=i; int j=(int)obj;(将obj拆箱)web
运算符:建立对象实例面试
修饰符:在派生类定义一个重名的方法,隐藏掉基类方法算法
约束:泛型约束定义,约束可以使用的泛型类型数据库
public class ItemFactory<T> where T : IComparable, new() { }
int?为可空类型,默认值能够是null,int默认值是0,int?是经过int装箱为引用类型实现
一句话解释就是:将方法看成参数传入另外一个方法的参数。 .net中有不少常见的委托如:Func 、Action 做用:提升方法的扩展性
位运算是最快,使用的是位运算 逻辑左位移<<。 方法是2<<3至关于0000 0000 0000 0010 (2的16位int二进制)左移三位就是 0000 0000 0001 0000(16的二进制) 相关参考连接:http://www.javashuo.com/article/p-rwnlhlnl-ks.html
均可以标识一个常量。主要有如下区别:
一、初始化位置不一样。const必须在声明的同时赋值;readonly便可以在声明处赋值,也能够在静态构造方法(必须是静态构造方法,普通构造方法不行)里赋值。 二、修饰对象不一样。const便可以修饰类的字段,也能够修饰局部变量;readonly只能修饰类的字段 三、const是编译时常量,在编译时肯定该值;readonly是运行时常量,在运行时肯定该值。 四、const默认是静态的;而readonly若是设置成静态须要显示声明 五、修饰引用类型时不一样,const只能修饰string或值为null的其余引用类型;readonly能够是任何类型。
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 通用类型系统。Int3二、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。
IEnumerable 、 GetEnumerator
1.静态成员用statis修饰符声明,在类被实例化时建立,经过类进行访问 2.不带statis的变量时非静态变量,在对象被实例化时建立,经过对象进行访问, 3.静态方法里不能使用非静态成员,非静态方法可使用静态成员 4.静态成员属于类,而不属于对象
C#在unsafe 模式下可使用指针对内存进行操做, 但在托管模式下不可使用指针,C#NET默认不运行带指针的,须要设置下,选择项目右键->属性->选择生成->“容许不安全代码”打勾->保存
s1+1不能显式转换成short类型,能够修改成s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确
强类型是在编译的时候就肯定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会肯定类型。没有好很差,两者各有好处,强类型安全,由于它事先已经肯定好了,并且效率高。通常用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb,php等
1.引用命名空间 2.释放资源,实现了IDisposiable的类在using中建立,using结束后会自定调用该对象的Dispose方法,释放资源。
1.都是按引用类型进行传递 2.属性不是变量不能做为out、ref参数传递 3.ref参数必须初始化。out不须要初始化 4.做用,当方法有多个返回值时,out很是有用
不同,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 ,构造函数必须与类名相同,能够传递多个传递,做用就是便于初始化对象成员,不能有任何返回类型
c#里面都是12
&是位运算逻辑与运算符,如true&true 结果是true,0&0结果是0,2&3的结果是(10&11=10)2 &&是与运算符,两个都为true才是true 参考连接http://www.javashuo.com/article/p-rwnlhlnl-ks.html
1.i++是先赋值,而后再自增;++i是先自增,后赋值。 2.i=0,i++=0,++i=1; Console.WriteLine(++i==i++); 结果位true
不正确,。3.4是double类型双精度的,double向下转型float会形成精度缺失(相似于long转int),所以须要强制转换,float f =3.4F 或者float f =(float)3.4
1.自动类型转换:编译器自动完成类型转换,不须要在程序中编写代码。 2.强制类型转换:强制编译器进行类型转换,必须在程序中编写代码 3.转换规则:从存储范围小的类型到存储范围大的类型,是自动转换,如byte=>short=>int=>long
as在转换的同时判断兼容性,若是没法进行转换,返回位null(没有产生新的对象),as转换是否成功判断的依据是是否位null is只是作类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false。 as比is效率更高,as只须要作一次类型兼容检查
有兴趣的能够关注一下个人微信公众号[dotNet全栈开发],分享一些编程相关的经典文章
原文出处:https://www.cnblogs.com/zhangmumu/p/11406751.html