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

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

 private static byte get(int n)
{
byte number = 1;
while (n/2!=1)
{
n = n / 2;
number += 1;
}
return number;
}
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的值是多少?
        string strTmp = "a1某某某";
int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
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.下面这段代码求值
class Class1
{
internal static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
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. 掌握简单的Makefile文件编程

    Makefile描述整个程序的编译.链接规则 其中还包括了工程中用到的那些源文件及需要产生的目标文件 1)Makefile编程规则 目标(唯一):依赖(可多个) 命令... 伪目标 .PHONY:cl ...

  2. 获取文件版本(IE)

    GetFileInfoCUIAction::GetFileVersion2GetSystemDirectory     WCHAR szConfigFile[MAX_PATH + 1];    ::G ...

  3. 随机点名可视化界面,记录迟到人员,转exe文件

    随机点名可视化界面,记录迟到人员,转exe文件 一.介绍 对于人员采取随机点名 二.代码 import datetime import random from tkinter import * fro ...

  4. C# 怎样将DateTime类型进行日期的加减

    C#中 DateTime类型有封装好的函数 例如: //将当前时间转换为指定格式的DateTime类型 DateTime dt=DateTime.Parse(DateTime.Now.ToString ...

  5. mpvue的使用,包含axios、router的集成等完美结合小程序

    mpvue开发微信小程序框架的使用注意事项: 1.路由跳转,引用mpvue-router-patch 在main.js文件中引入控件:import MpvueRouterPatch from 'mpv ...

  6. 【iOS】设置 rootViewController

    iOS 开发中,rootViewController 经常用到,示例代码如下: self.window = [[UIWindow alloc] initWithFrame:[UIScreen main ...

  7. DesignPattern系列__03依赖倒置原则

    依赖倒置原则(Dependence Inversion Priiciple,DIP) 介绍 High level modules should not depend upon low level mo ...

  8. 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误

    非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...

  9. 一次简单的SQL手工注入

    1. 首先要了解SQL注入的原理:   SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 具体来说,它是利 ...

  10. 面向对象---prototype、__proto__、实例化对象三者之间的关系

    1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...