.net必问的面试题系列之基本概念和语法

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

.net必问的面试题系列之基本概念和语法
上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉。
1.net必问的面试题系列之基本概念和语法
2.net必问的面试题系列之面向对象
3.net必问的面试题系列之设计模式
4.net必问的面试题系列之集合、异常、泛型
5.net必问的面试题系列之简单算法
6.net必问的面试题系列之数据库
7.net必问的面试题系列之web前端

  1. 字符串中string str=null和string str=""的区别
  2. str="" ,初始化对象,并分配一个空字符串的内存空间

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

  1. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些错误是错再哪里?
  2. 本题考查的是数据类型能承载数据的大小。

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()
{
}

  1. int?和int有什么区别
    int?为可空类型,默认值可以是null,int默认值是0,int?是通过int装箱为引用类型实现
  2. 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

  1. 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
原文地址https://www.cnblogs.com/zhangmumu/p/11406751.html

相关文章
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
62 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
1月前
|
并行计算 安全 Java
C# .NET面试系列四:多线程
<h2>多线程 #### 1. 根据线程安全的相关知识,分析以下代码,当调用 test 方法时 i > 10 时是否会引起死锁? 并简要说明理由。 ```c# public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } ``` 在给定的代码中,不会发生死锁。死锁通常是由于两个或多个线程互相等待对方释放锁而无法继续执行的情况。在这个代码中,只有一个线程持有锁,且没有其他线程参与,因此不
102 3
|
11天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
34 0
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
174 2
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
60 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
1月前
|
XML 数据可视化 C#
C# .NET面试系列五:WPF
<h2>WPF #### 1. WPF 由哪两部分组成? Windows Presentation Foundation (WPF) 由两个主要部分组成: 1、XAML (eXtensible Application Markup Language) ```c# 这是一种基于 XML 的标记语言,用于定义用户界面的结构和外观。XAML允许开发人员使用声明性语法来描述应用程序的用户界面元素,而不是使用传统的编程方式。XAML 被广泛用于定义 WPF 窗体、控件、布局和动画。 ``` 2、Code-behind 文件 ```c# 这是包含与用户界面相关逻辑的代码文件。通常,开发人员可
73 4
|
1月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
149 2