MarcusV(南墙大佬的搬运工)

南墙大佬的CSDN博客地址

导航

这才是你需要的最基础的.Net基础面试题(通俗易懂,最基础的.Net)2

51. 委托回调静态方法和实例方法有何区别?
当一个实例方法被调用时,需要通过实例对象来访问,绑定一个实例方法到委托必须同时让委托得到实例方法的代码段和实例对象的信息,这样在委托被回调时候.NET才能成功地执行该实例方法。委托内部的对象成员变量_target是一个指向目标实例的引用。当委托绑定静态方法时,内部的对象成员变量_target将会被设置成null,而当委托绑定实例方法时,_target将会设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法。

52. 什么是链式委托?
链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所有链表上该委托的后续委托将会被顺序执行。在委托中存在内部的对象成员变量_prev,该指针指向委托链中的下一个委托。

53. GetHashCode方法有何作用什么时候会用该方法?
简述:
值类型的判断相等直接用==就可以,但是引用类型的必须要用到equals方法,
但是Equals会比较慢,我们可以先用HashCode来判断想不想等,HashCode相等的话,
我们可以用Equals方法进一步确定是不是相等,如果HashCode不相等,那么Equals肯定不相等

GetHashCode方法就是一个判断对象是否相等的快速检查器,当把一个对象添加到一个散列表中时,会先判断这个对象是不是在其中,因为散列表是不允许出现碰撞的。在判断时,并不是直接上来就调用Equals方法,而是会先调用GetHashCode方法,计算出待添加对象的一个散列值:
如果这个散列值不命中,那就说明这个对象一定不在散列中,可以添加;
如果这个散列值命中了,那也不能说明这个对象一定在散列中,因为可能散列值冲突了,所以,要继续调用Equals方法,来看看这个散列值命中的对象,到底在不在散列表里。

54. 委托是否可以有返回值?
委托可以是带有返回值的方法,但多于一个带返回值的方法被添加到委托链中时,程序员需要手动的调用委托链上的每一个方法,否则委托使用者将只能得到委托链上最后一个被执行方法的返回值。

  1. 如何把一个Array复制到ArrayList里
foreach( object o in array ){
arrayList.Add(o);
}

56. 什么叫应用程序域?什么是受管制的代码?什么是强类型系统?
应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小
受管制的代码:unsafe:非托管代码。不经过CLR运行。
强类型系统 RTTI:类型识别系统。

57. C#中,string str = null与string str =““,请尽量用文字说明区别。(要点:说明详细的内存空间分配)
string str = null 是不分配内存空间,而string str = ““ 给它分配长度为空字符串的内存空间。

58. 概述反射和序列化
反射就是为了在程序的运行过程中动态的获取类的方法和属性, 优点就是可以实现动态创建对象和编译,体现出很大的灵活性,缺点是对性能有影响。
序列化是将对象状态转换为容易传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

59. 如何理解委托
委托是一种特殊的引用类型,允许将方法作为参数进行传递。
委托在使用过程中的一般步骤:类型定义、对象创建和方法绑定,方法调用。
委托是一种引用方法类型,一旦委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。委托可以看作是对函数的抽象,是函数的‘类’,委托的实例将代表一个具体的函数。

60. C#中能使用指针吗,怎样使用指针?
能,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式直接操作内存,这样就可以使用指针了。

61. 概述三层结构体系?
表示层(UI),业务逻辑层(BLL),数据访问层(DAL)。

62. 列举一下你所了解的XML技术及其应用?
xml一般是用来做数据传输格式、软件配置的。可以用来做网页(xslt)、可以当作数据库、可以用于配置,用于保存静态数据类型,使用最多的是web Services和config。

63. 值类型和引用类型的区别?
C#数据类型分为两大类:值类型(数据存放在栈stack中)和引用类型(数据存放在堆heap中,地址存放在栈stack中)。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。声明一个引用类时,只在栈中分配内存,用于存放地址,而并没有为其分配堆上的内存空间。

64. 构造器Constructor是否可以被继承?是否可以被Override?
Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

65. 是否可以继承String类?
因为String类是密封类所以不可以继承string类。

66. 当一个线程进入一个对象的方法后,其它线程是否可以进入该对象的方法?
取决于是否进行线程同步。如果进行了线程同步,只能一个线程进入。

67. 用最有效的方法算出2乘以8等于几?
2<<3(位运算速度极快,这里是把2扩大三次方,实则求2的四次方 )

68. C#是否可以对内存直接进行操作?
C#是可以对内存进行直接操作的,虽然很少用到指针,但是C#是可以使用指针的,在用的时候需要在前边加unsafe。

69. 什么是受管制的代码?
unsafe:非托管代码。不经过CLR运行。

70. sleep() 和 wait() 有什么区别?
sleep()方法是将当前线程挂起指定的时间。
wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。

71. short s1 = 1; s1 = s1 + 1;有什么错?
short s1 =1; s1 = s1 + 1;有错,
s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1=(short)(s1 + 1) 。short s1 = 1;s1 += 1正确。

72. 什么是虚函数?什么是抽象函数?
虚函数:可由子类继承并重写的函数。
抽象函数:规定其非虚子类必须实现的函数,必须被重写。

73. 什么是XML?
XML即可扩展标记语言,主要用来做数据传输格式、软件配置。

74. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质

75. .net的错误处理机制是什么?
.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。

76. &和&&的区别
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).

77. 用Singleton如何写设计模式

//单例模式: static属性里面new ,构造函数private
public class Singleton{
//静态私有变量
private static Singleton singleton = new Singleton();
//私有构造方法
private Singleton(){
System.out.println("生成了一个实例!!!");
}
//外部类通过Singleton.getInstance()获取这个类的对象。
public static Singleton getInstance(){
return singleton;
}
}

78. 在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
using 引入名称空间或者使用非托管资源
new 新建实例或者隐藏父类方法

79. String s = new String(“xyz”);创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

PS:
我这里在多加一句,String s = “abc” 这句是创建了一个引用对象,堆并没有分配内存,而abc还是在字符串池里面

80. C#中,i++与++i,有什么区别?
i++是使用完 i 之后再使 i 加一
++i是在使用 i 之前便使 i 加一

81. 一列数的规则如下: 1、1、2、3、5、8、13、21、34… 求第30位数是多少,用递归算法实现。

public class MainClass { 
    public static void Main(){  
Console.WriteLine(Foo(30));  
}
    public static int Foo(int i) {
      if (i <= 0) return 0;
      else if(i > 0 && i <= 2) return 1;
      else return Foo(i -1) + Foo(i - 2);
    }
    } 

82. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引
C#通过提供索引器,可以像处理数组一样处理对象。特别是属性,每一个元素都以一个get或set方法暴露。索引器不单能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了索引器和返回值无关, 索引器最大的好处是使代码看上去更自然,更符合实际的思考模式。

83. 什么是Code-Behind技术?
code-Behind技术就是代码后置,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。

84. int、DateTime、string是否可以为null?
int、DateTime不能,因为其为值类型,值类型不能为null,只有引用类型才能被赋值null。string可以为null。

85. 传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。

86. string、String;int、Int32;Boolean、bool的区别
String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool相当于C#中对这些类定义的别名。

87. 不是说字符串是不可变的吗?string s=“abc”;s="123"不就是变了吗?
String是不可变的在这段代码中,s原先指向一个String对象,内容是 “abc”,然后我们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

88. 是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。

89. 说出一些常用的类、接口,请各举5个。
常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List
常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

90. 如果不用VisualStudio,用哪个命令行编译C#程序?
csc.exe。

91. 你对泛型了解吗?简单说明一下泛型的有什么好处?
泛型:“泛型”的字面意思就是广泛的类型。通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用 好处是——可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。

92. DateTime.Parse(myString); 这行代码有什么问题?
有问题,当myString不能满足时间格式要求的时候,会引发异常,建议使用DateTime.TryParse()

93. XML 与 HTML的主要区别?
XML是区分大小写字母的,HTML不区分。
在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略结束标记。在XML中,绝对不能省略掉结束标记。
在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。
在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
94. 请简述结构和类的区别
1、类型不同:结构是一种值类型,而类是引用类型。
2、存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是访问效率相对较高.堆的空间相对较大.但是访问效率相对较低。
3、作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
4、初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。

95. 请解释一下IClonable
IClonable方法是实现深度复制的接口,实现它应该能深度复制一个对象出来。深度复制的特征的调用对象的构造方法,创建新的对象,包括创建对象中嵌套的引用对象的新实例。而Shadow复制则不同,是浅表复制,不重新创建新实例。浅表复制的实现是Object.MemberWiseClone().
深度复制(Deep Copy)与浅表复制(Shadow Copy)

96. 用接口或父类作为输入的参数有什么好处?返回值如果是接口是为了什么?
接口或父类作为参数,所有继承了此接口或父类的类都可以使用,即你给此方法传参数的时候,可以把继承了这个接口或父类的类的实例传给这个方法。可以一次性传入多种字段、方法等而不用定义多个形参,接口作为返回值,返回的是实现接口的对象。

= 和 == 的区别?
是赋值运算符, ==是关系运算符,用于等值判断

98. 数组有没有length()这个方法?String 有没有length()这个方法?
数组是没有length()这个方法的,有length这个属性,可以计算数组的长度。
String是有length()这个方法的,用来计算字符串的长度。

99. 数组和泛型集合的区别
泛型集合只能放定义类型的元素,会自动增大,取出时不用做类型转换。
数组只能放定义类型的元素,不会自动增大,取出时不用做类型转换。

100.System.Object中有什么方法?有什么用?
1.ToString():是获取对象的字符串表示的一种快捷方式
2.Finalize():允许对象在垃圾回收该对象之前尝试并执行释放资源并执行其他清理操作
3.GetType():获取当前实例的确切运行时类型
4.GetHashCode():用作特定类型的哈希函数
5.构造函数方法:主要用来在创建对象时初始化对象

101.Linq中concat union intersect的区别
Concat :连接两个序列。
Union : 通过使用默认的相等比较器生成两个序列的并集。
Intersect : 通过使用默认的相等比较器对值进行比较生成两个序列的交集。

102.请问哈希表(hashtable)是如何存储数据的?
以哈希表的形式存储数据,数据的形式是键值对。

103…NET中的CTS、CLS和CLR
CLR公共语言运行库
CLS通用语言规范
CTS通用类型系统

104.NET和C#的区别
.NET一般指.Net Framework框架,是Microsoft为开发应用程序而创建的一个具有革命意义的平台,C#运行在.NET(CLR)上的,用于创建应用程序的一种高级编程语言。

105.设计模式有哪些?
1.单例设计模式
2.工厂设计模式
3.代理设计模式
4.观察者设计模式
5.适配器模式
6.原型模式

106.StringBuilder 和 String的区别?
String是不可变化的字符,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象。
StringBuilder是可以变化的字符,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充。

107.Linq与SQL语句的执行速度哪个更快?
SQL语句的执行速度更快

108.C#代码编译成中间语言有什么作用?
优点:一是可以实现平台无关性,既与特定CPU无关;二是只要把.NET矿建某种语言编译成IL代码,就实现.NET矿建中语言之间的交互操作。
IL是.NET矿建中的中间语言(Intermediate Language)的缩写。

posted on 2020-05-20 15:04  MarcusV  阅读(180)  评论(0编辑  收藏  举报