dotNET面试题汇总系列连载(1):基础语法

点击上方“dotNET全栈开发”,“设为星标”

加“星标”,每天11.50,好文必达

全文约4000字,预计阅读时间8分钟

马上要到2020年了,这里整理一个.NET 工程师面试题系列,希望年底或者明年金三银四跳槽的程序猿们带来一些帮助,建议收藏,如果文中答案有不准确的地方,请在评论中指出。

前文传送门

  • dotNET面试题汇总系列之基础语法

  • dotNET面试题汇总系列之面向对象

  • dotNET面试题汇总系列之设计模式

  • dotNET面试题汇总系列之集合、异常、泛型、日志

  • dotNET面试题汇总系列之算法

  • dotNET面试题汇总系列之数据库

  • dotNET面试题汇总系列系列之前端

  • dotNET面试题汇总系列系列之MVC

问题目录

  • 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. 静态成员和非静态成员的区别

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

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

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

  • 22. using关键字的作用

  • 23. ref和out有什么区别

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

  • 25. 下面这段代码求值

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

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

  • 28. &和&&的区别?

  • 29. i++和++i有什么区别?

  • 30. 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; 这些变量有些错误是错再哪里?

  • 本题考查的是数据类型能承载数据的大小。

  • 1byte =8bit,1个汉字=2个byte,1个英文=1个byte=8bit

  • 所以bc是对的,deg是错的。'a'是char类型,a错误

  • java byte取值范围是-128~127, 而C#里一个byte是0~255

3.string和StringBuilder的区别,两者性能的比较
  • 都是引用类型,分配再堆上

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

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

  • Stringbulider的使用,最好制定合适的容量值,否则优于默认值容量不足而频繁的进行内存分配操作,是不妥的实现方法。参考链接:https://www.cnblogs.com/haofuqi/p/4826262.html

4.什么是扩展方法?
  • 一句话解释,扩展方法使你能够向现有类型“添加”方法,无需修改类型

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

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

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

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<T> 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的二进制)

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.静态成员和非静态成员的区别
  • 1.静态成员用statis修饰符声明,在类被实例化时创建,通过类进行访问

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

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

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

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

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

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

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

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

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

22.using关键字的作用
  • 1.引用命名空间,也可using 别名

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

23.ref和out有什么区别
  • 1.都是按引用类型进行传递

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

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

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

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

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

25.下面这段代码求值
    class Class1{internal static int count = 0;static Class1(){count++;}public Class1(){count++;}}Class1 o1 = new Class1();Class1 o2 = new Class1();

o1.count的值是多少?

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

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

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

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

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

d)构造函数不能带参数

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

27.Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少?
  • Math.Round(11.5)=12

  • Math.Round(-11.5)=-12

28.&和&&的区别
  • 相同点

&和&&都可作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,其结果才为true,否则,只要有一方为false,则结果为false。(ps:当要用到逻辑与的时候&是毫无意义,&本身就不是干这个的)

  • 不同点

if(loginUser!=null&&string.IsnullOrEmpty(loginUser.UserName))

&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,对于上面的表达式,当loginUser为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。(ps:所以说当要用到逻辑与的时候&是毫无意义的)

& 是用作位运算的。

  • 总结

&是位运算,返回结果是int类型 &&是逻辑运算,返回结果是bool类型

29. i++和++i有什么区别?
  • 1.i++是先赋值,然后再自增;++i是先自增,后赋值。

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

30.as和is的区别
  • as在转换的同时判断兼容性,如果无法进行转换,返回位null(没有产生新的对象),as转换是否成功判断的依据是是否位null is只是做类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode动态规划 环形子数组的最大和

给定一个由整数数组 A 表示的环形数组 C&#xff0c;求 C 的非空子数组的最大可能和。 此外&#xff0c;子数组最多只能包含固定缓冲区 A 中的每个元素一次。 思路 本道题需要分类成两种情况&#xff0c;题目答案为以下两种情况的较大值。 1.最大子区间在序列的中间 这种情况是…

Blazor 版 Bootstrap Admin 通用后台权限管理框架

前言上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能。本篇文章带来的是微软最新出的 Blazor 版本的 NET Core 通用权限管理系统Blazor 简介至于 Blazor 是什么&#xff0c;Blazor 的优缺点小伙伴们可以…

xms跨平台基础框架 - 基于.netcore

背景鄙人经过多年开发&#xff0c;数百个项目“打磨(折磨)”&#xff0c;各种国内外框架平台都有涉及&#xff0c;没有一款称心顺手的&#xff0c;原因有三&#xff0c;一是设计反人类&#xff0c;二是不开源根本无法突破框架限制&#xff0c;三是即使开源也是阉割版&#xff0…

如何让 Azure AD 里的应用只允许特定用户登录

点击上方蓝字关注“汪宇杰博客”导语我的博客系统支持 Azure Active Directory 身份认证&#xff0c;然而用VS点点鼠标配出来的 Azure 应用&#xff0c;默认情况下会允许所有 AAD 内的用户访问&#xff0c;如何限制为只让特定用户访问呢&#xff1f;背景情况其实最近&#xff0…

程序员:这10种糟糕的程序命名,你遇到过几个?

点击上方“dotNET全栈开发”&#xff0c;“设为星标”加“星标★”&#xff0c;每天11.50&#xff0c;好文必达全文约2300字&#xff0c;预计阅读时间4分钟有人问&#xff1a;规范的命名风格真的能让你程序员少出bug&#xff1f;当遇到这方面的教训时&#xff0c;就会想到这句话…

评测OJ时间复杂度

平日里做OJ题时&#xff0c;先看数据范围能帮助自己选择算法 &#xff08;可能更多时候是看暴力能骗到几分qwq) 一般而言&#xff0c;评测OJ在1s内能接受的算法时间复杂度是10e8-10e9之间&#xff0c;这里取折中值5*10e8。 对于不同的算法&#xff0c;能够接受的最大数据如下&…

.Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换

1.什么是API网关API网关是微服务架构中的唯一入口&#xff0c;它提供一个单独且统一的API入口用于访问内部一个或多个API。它可以具有身份验证&#xff0c;监控&#xff0c;负载均衡&#xff0c;缓存&#xff0c;请求分片与管理&#xff0c;静态响应处理等。API网关方式的核心要…

[Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发

通过一个小组件&#xff0c;熟悉 Blazor 服务端组件开发。github:https://github.com/git-net/NBlazors一、环境搭建vs2019 16.4, asp.net core 3.1 新建 Blazor 应用&#xff0c;选择 asp.net core 3.1。根文件夹下新增目录 Components&#xff0c;放置代码。二、组件需求定义…

【STM32】STM32学习笔记-TIM定时中断(13)

00. 目录 文章目录 00. 目录01. TIM简介02. 定时器类型03. 基本定时器04. 通用定时器05. 高级定时器06. 定时中断基本结构07. 预分频器时序08. 计数器时序09. 计数器无预装时序10. 计数器有预装时序11. RCC时钟树12. 附录 01. TIM简介 TIM&#xff08;Timer&#xff09;定时器…

开源.Net Standard版华为物联网北向接口SDK

说明最近用到了华为的物联网平台API&#xff0c;但是官方没有.Net版的SDK&#xff0c;所以就自己封装了一个&#xff0c;开源出来给有需要的朋友&#xff0c;同时也算是为.Net Core的发展做点小贡献~源码地址&#xff1a;https://github.com/iamoldli/HuaWei.IoT.NorthApi.Sdk同…

你知道怎么使用DebugView查看调试信息吗?

简介 DebugView是sysinternals工具集中的一款用来查看调试信息的工具。不管你是内核开发人员还是应用程序开发人员&#xff0c;都会用到这款神器。先简单看看DebugView可以干什么吧。可以查看应用程序输出的调试信息。可以查看驱动程序输出的调试信息。可以查看本地机器的调试信…

使用ASP.NET Core 3.x 构建 RESTful API - 3.3.3 ProblemDetails

当ASP.NET Core 大约在 2.1 版本的时候&#xff0c;它引入了 ProblemDetails。ProblemDetails是基于 RFC7807 这个规范&#xff0c;目的是让 HTTP 响应可以携带错误的详细信息&#xff0c;而不是只返回一个错误的状态码。 在 ASP.NET Core 2.2的时候&#xff0c;如果Controller…

(译)An introduction to Kubernetes

原文&#xff1a;https://www.jeremyjordan.me/kubernetes/&#xff08;博客园团队推荐的&#xff09;这篇博客文章将对Kubernetes进行介绍&#xff0c;以便您了解该工具背后的动机&#xff0c;含义以及使用方式。在后续文章中&#xff0c;我将讨论如何使用更具体的&#xff08…

WeihanLi.Npoi 支持 ShadowProperty 了

WeihanLi.Npoi 支持 ShadowProperty 了Intro在 EF 里有个 ShadowProperty (阴影属性/影子属性)的概念&#xff0c;你可以通过 FluentAPI 的方式来定义一个不在 .NET model 里定义的属性&#xff0c;只能通过 EF 里的 ChangeTracker 来操作这种属性。在导出 Excel 的时候&#x…

RNN循环神经网络概述

RNN与普通神经网络的区别&#xff1a;能够更好的处理序列的信息 RNN结构图 如图所示&#xff0c;St的值不仅取决于输入X的值&#xff0c;还取决于St-1的值。同时&#xff0c;St-1的值还取决于St-2的值&#xff0c;因此S1,S2,…,St-1的值都与St的值直接或间接相关&#xff0c;…

使用ASP.NET Core 3.x 构建 RESTful API - 3.3.1 HTTP状态码

HTTP状态码会告诉API的消费者以下事情&#xff1a; 请求是否执行成功了 如果请求失败了&#xff0c;那么谁为它负责 HTTP的状态码有很多&#xff0c;但是Web API不一定需要支持所有的状态码。HTTP状态码一共分为5个级别&#xff1a; 1xx&#xff0c;属于信息性的状态码。Web AP…

解决import tensorflow时的报错 Passing (type, 1) or ‘1type‘ as a synonym of type is deprecate

问题 在Pycharm中运行import tensorflow as tf时报错。 解决方案 此时点开报错中的dtypes.py文件&#xff0c;对其进行修改。 从# hard-coding of names.这里开始&#xff0c;修改所有以_np_q开头的代码行&#xff0c;同时也要修改最后一行的np_resource。 # hard-coding of …

解决module ‘tensorflow‘ has no attribute ‘optimizers‘报错

一般出现此类问题的原因是包的更新导致有些用法发生了变化&#xff0c;因此在tensorflow中调用optimizer需要通过tf.keras调用。 将self.opt tf.optimizers.Adam(learning_rateself.lr)中的tf后面加个keras&#xff0c; 变成self.opt tf.keras.optimizers.Adam(learning_rat…

Dapr 运用

前置条件DockerWin10Dapr 部署本文将采用本地部署的方式。安装 Dapr CLI打开 Windows PowerShell 或 cmd &#xff0c;运行以下命令以安装 Dapr CLI&#xff0c;并添加安装路径到系统环境变量中。powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/…

微软将中止支持 .NET Core 2.2,建议开发者升级至 .NET Core 3.1

Current 版本 .NET Core 2.2 将在 12 月 23 日结束生命周期&#xff0c;开发者应更新到长期支持版本 .NET Core 3.1。.NET Core 2.2 于 2018 年 12 月 4 日发布&#xff0c;作为一个非 LTS 版本(“Current”)&#xff0c;它只在下一个版本发布后的三个月内受支持。.NET Core 3.…