上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉。

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的区别

问题和相关答案

1. 字符串中string str=null和string str=""和string str=string.Empty的区别

string.Empty相当于“”,Empty是一个静态只读的字段。

string str="" ,初始化对象,并分配一个空字符串的内存空间

string str=null,初始化对象,不会分配内存空间

2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些错误是错再哪里?

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~255

3.string和StringBuilder的区别,两者性能的比较

a 都是引用类型,分配再堆上

b StringBuilder默认容量是16,可以允许扩充它所封装的字符串中字符的数量.每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。

c 对于简单的字符串连接操作,在性能上stringbuilder不一定总是优于string。因为stringbulider对象的创建也消耗大量的性能,在字符串连接比较少的情况下,过度滥用stringbuilder会导致性能的浪费而非节约,只有大量无法预知次数的字符串操作才考虑stringbuilder的使用。从最后分析可以看出如果是相对较少的字符串拼接根本看不出太大差别。

d Stringbulider的使用,最好制定合适的容量值,否则优于默认值容量不足而频繁的进行内存分配操作,是不妥的实现方法。

参考链接:https://www.cnblogs.com/haofuqi/p/4826262.html

4.什么是扩展方法?

a 一句话解释,扩展方法使你能够向现有类型“添加”方法,无需修改类型

b 条件:按扩展方法必须满足的条件,1.必须要静态类中的静态方法2.第一个参数的类型是要扩展的类型,并且需要添加this关键字以标识其为扩展方法

c建议:通常,只在不得已的情况下才实现扩展方法,并谨慎的实现

d使用:不能通过类名调用,直接使用类型来调用

5.byte a =255;a+=5;a的值是多少?

byte的取值范围是-2的8次方至2的8次方-1,-256至258,a+=1时,a的值时0,a+=5时,a的值是0,所以a+=5时,值是4

6.什么是装箱和拆箱?

装箱就是隐式地将一个值类型转换成引用类型,如:

int i=0;

Syste.Object obj=i;

拆箱就是将引用类型转换成值类型,如:

int i=0;

System.Object obj=i;

int j=(int)obj;(将obj拆箱)

7.值类型和引用类型的区别
  • 值类型变量是直接包含值。将一个值类型变量赋给另一个值类型变量,是复制包含的值,默认值是0。引用类型变量的赋值只复制对对象的引用,而不复制对象本身,默认值是null
  • 值类型有整形、浮点型、bool、枚举。引用类型有class、delegate、Object、string
  • 值类型存储在栈中,引用了类型存储在堆中
8.new关键字的作用
  • 运算符:创建对象实例

  • 修饰符:在派生类定义一个重名的方法,隐藏掉基类方法

  • 约束:泛型约束定义,约束可使用的泛型类型

    public class ItemFactory where T : IComparable, new()

    {

    }

9. int?和int有什么区别

int?为可空类型,默认值可以是null,int默认值是0,int?是通过int装箱为引用类型实现

10. C#中的委托是什么?

一句话解释就是:将方法当作参数传入另一个方法的参数。

.net中有很多常见的委托如:Func 、Action

作用:提高方法的扩展性

11.用最有效的方法算出2乘以8等于几?

位运算是最快,使用的是位运算 逻辑左位移<<。

方法是2<<3相当于0000 0000 0000 0010 (2的16位int二进制)左移三位就是 0000 0000 0001 0000(16的二进制)

相关参考链接:https://www.cnblogs.com/zhangmumu/p/10781201.html

12.const和readonly有什么区别?

都可以标识一个常量。主要有以下区别:

1、初始化位置不同。const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在静态构造方法(必须是静态构造方法,普通构造方法不行)里赋值。

2、修饰对象不同。const即可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段

3、const是编译时常量,在编译时确定该值;readonly是运行时常量,在运行时确定该值。

4、const默认是静态的;而readonly如果设置成静态需要显示声明

5、修饰引用类型时不同,const只能修饰string或值为null的其他引用类型;readonly可以是任何类型。

13.现有一个整数number,请写一个方法判断这个整数是否是2的N次方

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是多少?这该怎么算?

  1. private static byte get(int n)
  2. {
  3. byte number = 1;
  4. while (n/2!=1)
  5. {
  6. n = n / 2;
  7. number += 1;
  8. }
  9. return number;
  10. }
14.CTS、CLS、CLR分别作何解释

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。

15.在.net中,配件的意思是?

程序集。(中间语言,源数据,资源,装配清单)

16.分析下面代码,a、b的值是多少?
  1. string strTmp = "a1某某某";
  2. int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
  3. int b = strTmp.Length;

分析:一个字母、数字占一个byte,一个中文占占两个byte,所以a=8,b=5

17.Strings = new String(“xyz”);创建了几个String Object?

两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s。

18.能用foreach遍历访问的对象需要实现 ______接口或声明______方法的类型。

IEnumerable 、 GetEnumerator

19.静态成员和非静态成员的区别

1.静态成员用statis修饰符声明,在类被实例化时创建,通过类进行访问

2.不带statis的变量时非静态变量,在对象被实例化时创建,通过对象进行访问,

3.静态方法里不能使用非静态成员,非静态方法可以使用静态成员

4.静态成员属于类,而不属于对象

20.c#可否对内存直接操作

C#在unsafe 模式下可以使用指针对内存进行操作, 但在托管模式下不可以使用指针,C#NET默认不运行带指针的,需要设置下,选择项目右键->属性->选择生成->“允许不安全代码”打勾->保存

21.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

s1+1不能显式转换成short类型,可以修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确

22.什么是强类型,什么是弱类型?哪种更好些?为什么?

强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb,php等

23.using关键字的作用

1.引用命名空间

2.释放资源,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源。

24.ref和out有什么区别

1.都是按引用类型进行传递

2.属性不是变量不能作为out、ref参数传递

3.ref参数必须初始化。out不需要初始化

4.作用,当方法有多个返回值时,out非常有用

25.a.Equals(b)和a==b一样吗?

不一样,a==b仅仅表示a和b值相等,a.Equals(b)表示a与b一致

26.下面这段代码求值
  1. class Class1
  2. {
  3. internal static int count = 0;
  4. static Class1()
  5. {
  6. count++;
  7. }
  8. public Class1()
  9. {
  10. count++;
  11. }
  12. }
  13. Class1 o1 = new Class1();
  14. Class1 o2 = new Class1();

o1.count的值是多少?

答案:3,静态 构造方法计算一次,两个实例化对象计算两次。

27.关于构造函数说法正确的是哪个?

a)构造函数可以声明返回类型。

b)构造函数不可以用private修饰

c)构造函数必须与类名相同

d)构造函数不能带参数

答案:c ,构造函数必须与类名相同,可以传递多个传递,作用就是便于初始化对象成员,不能有任何返回类型

28.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

c#里面都是12

29.&和&&的区别

&是位运算逻辑与运算符,如true&true 结果是true,0&0结果是0,2&3的结果是(10&11=10)2

&&是与运算符,两个都为true才是true

参考链接https://www.cnblogs.com/zhangmumu/p/10781201.html

30. i++和++i有什么区别?

1.i++是先赋值,然后再自增;++i是先自增,后赋值。

2.i=0,i++=0,++i=1; Console.WriteLine(++i==i++); 结果位true

31.float f = 3.4; 是否正确?

不正确,。3.4是double类型双精度的,double向下转型float会造成精度缺失(类似于long转int),因此需要强制转换,float f =3.4F 或者float f =(float)3.4

32.什么是自动转换,什么是强制转换,什么时候需要自动转换,什么时候需要强制转换

1.自动类型转换:编译器自动完成类型转换,不需要在程序中编写代码。

2.强制类型转换:强制编译器进行类型转换,必须在程序中编写代码

3.转换规则:从存储范围小的类型到存储范围大的类型,是自动转换,如byte=>short=>int=>long

32.as和is的区别

as在转换的同时判断兼容性,如果无法进行转换,返回位null(没有产生新的对象),as转换是否成功判断的依据是是否位null

is只是做类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false。

as比is效率更高,as只需要做一次类型兼容检查

有兴趣的可以关注一下我的微信公众号[dotNet全栈开发],分享一些编程相关的经典文章

net必问的面试题系列之基本概念和语法的更多相关文章

  1. .net必问的面试题系列之面向对象

    上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉. 1.net必问的面试题系列之基本概念和语法 2.net必问的面试题系 ...

  2. .NET面试题系列[16] - 多线程概念(1)

    .NET面试题系列目录 这篇文章主要是各个百科中的一些摘抄,简述了进程和线程的来源,为什么出现了进程和线程. 操作系统层面中进程和线程的实现 操作系统发展史 直到20世纪50年代中期,还没出现操作系统 ...

  3. .NET技术面试题系列(1) 基础概念

    这是.NET技术面试题系列第一篇,今天主要分享基础概念. 1.简述 private. protected. public.internal 修饰符的访问权限 private : 私有成员, 在类的内部 ...

  4. .NET面试题系列[17] - 多线程概念(2)

    线程概念 线程和进程的区别 进程是应用程序的一个实例要使用的资源的一个集合.进程通过虚拟内存地址空间进行隔离,确保各个进程之间不会相互影响.同一个进程中的各个线程之间共享进程拥有的所有资源. 线程是系 ...

  5. .NET面试题系列[0] - 写在前面

    .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] - .NET框架基础知识(2) .NET面试题系列[3] - C# 基础知识(1) .NET ...

  6. 【转载】.NET面试题系列[0] - 写在前面

    原文:.NET面试题系列[0] - 写在前面 索引: .NET框架基础知识[1] - .NET框架基础知识(1) http://www.cnblogs.com/haoyifei/p/5643689.h ...

  7. .NET面试题系列

    索引: .NET框架基础知识[1] - http://www.cnblogs.com/haoyifei/p/5643689.html .NET框架基础知识[2] - http://www.cnblog ...

  8. 互联网公司面试必问的mysql题目(下)

    这是mysql系列的下篇,上篇文章地址我附在文末. 什么是数据库索引?索引有哪几种类型?什么是最左前缀原则?索引算法有哪些?有什么区别? 索引是对数据库表中一列或多列的值进行排序的一种结构.一个非常恰 ...

  9. (转)面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题

    背景:redis问题在面试过程中经常被问到,对于常见问题一定不能放过. 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题 一.缓存雪崩 1.1什么是缓存雪崩? 如果缓存数据设置的过 ...

随机推荐

  1. 马蜂窝 IM 系统架构的演化和升级

    今天,越来越多的用户被马蜂窝持续积累的笔记.攻略.嗡嗡等优质的分享内容所吸引,在这里激发了去旅行的热情,同时也拉动了马蜂窝交易的增长.在帮助用户做出旅行决策.完成交易的过程中,IM 系统起到了重要的作 ...

  2. Android学习总结之开发工具AndroidStudio的安装与配置

    安装AndroidStudio 首先下载AndroidStudio的安装包,直接在百度AndroidStudio下载即可,安装过程简单,只需要修改安装路径(不要有空格和中文即可).然后下一步下一步就可 ...

  3. 架构师小跟班:SSL证书免费申请及部署,解决页面样式错乱问题完整攻略

    申请证书 1.登录阿里云控制台,产品与服务,选择SSL证书 2.进入SSL证书页面,点击“购买证书”,选择免费1年的证书类型,点击“立即购买” 3.返回SSL证书页面,可以看到证书列表里多了一条记录 ...

  4. 物联网时代-跟着Thingsboard学IOT架构-MQTT设备协议

    Thingsboard的MQTT设备协议 thingsboard官网: https://thingsboard.io/ thingsboard GitHub: https://github.com/t ...

  5. Android系列教程之前言

    内容转载自我自己的博客 目前安卓的主流开发语言是Java,在正式开始Android系列的教程之前,需要知道一些基本内容 Android介绍 Android['ændrɔid] 是一个基于Linux 内 ...

  6. Golang高效实践之interface、reflection、json实践

    前言 反射是程序校验自己数据结构和类型的一种机制.文章尝试解释Golang的反射机制工作原理,每种编程语言的反射模型都是不同的,有很多语言甚至都不支持反射. Interface 在将反射之前需要先介绍 ...

  7. asn1学习笔记 约束

    继续看asn1语法详解,今天主要看了约束部分,包含 1.单值约束,包含枚举类型 enumerated . 如: Two ::= INTEGER(2) Day ::= ENUMERATED { mond ...

  8. kubernetes CRD 开发指南

    扩展kubernetes两个最常用最需要掌握的东西:自定义资源CRD 和 adminsion webhook, 本文教你如何十分钟掌握CRD开发. kubernetes允许用户自定义自己的资源对象,就 ...

  9. PHP编码风格规范

    由于PHP的灵活性,很多人写起代码来也不讲求一个好的代码规范,使得本就灵活的PHP代码看起来很乱,其实PSR规范中的PSR-1和PSR-2已经定义了在PHP编码中的一些规范,只要我们好好遵守这些规范, ...

  10. 动态开内存(malloc与calloc)

    malloc与calloc 1.函数原型 #include<stdlib.h> void *malloc(unsigned int size);     //申请size字节的内存 voi ...