Unity3dC#基础之高频率面试题
结构体与类的区别:
http://www.cnblogs.com/dooroo/archive/2012/11/20/2779310.html
1.什么是装箱和拆箱?
答:装箱就是把值类型转成引用类型:装箱就是把值类型(包括int与结构这样的内置类型)转换为object类型,
拆箱就是把引用类型转换为值类型,装箱与拆箱实现了两种类型的互换;
2.对象和类的区别是什么?
答:“类”(Class)具有相同属性和方法的一组对象的集合 . 类是抽象的概念,仅仅是模板
对象是一个你能够看得到、摸得着的具体实体
3.什么是类的方法?
答:类是由一组具有相同属性和共同行为的实体抽象而来,对象执行的操作通过编写类的方法来实现。可见,类的方法是一个功能模块,作用是“做一件事”。
4.什么是局部变量,什么是成员变量?
答:局部变量是指一个方法中定义的变量;成员变量是指在类范围里定义的变量,也就是之前讲过的属性。
5.静态成员和实例成员的区别?
答:使用static修饰的成员称为静态成员,使用实例对象调用的成员称为实例成员
静态成员与实例成员区别
6.概述序列化
答: 序列化是将对象的状态存储到特定存储介质中的过程。
反序列化则是从特定存储介质中的数据重新构建对象的过程
7.类成员有几种可访问形式?简述可访问形式修饰符的访问权限。
答:可访问形式有 private、 protected、 public、 internal;
public(公共的) 完全公开,访问不受限制。
protected(保护的) 访问仅限于包含类或从包含类派生的类型。该类内部和继承类中可以访问。
internal(内部的) 访问仅限于当前程序集。在同一命名空间内可以访问。
protected internal(内部保护的) 访问仅限于从包含类派生的当前程序集或类型。
private(私有的) 访问仅限于包含类型。在类的内部才可以访问。
8.继承的特点有哪些?
答:C# 继承通过 : 关键字来实现,实现继承的类被称为子类,被继承的类被称为父类,有的也称为基类、超类。父类和子类的关系是is-a的关系,即子类is-a父类。
9.传入某个属性的set方法的隐含参数的名称是什么?
答: 隐含参数的名称是value,它的类型和属性所声名的类型相同。
10.如何在C#中实现继承?
答: 在类名后加上一个冒号,再加上基类的名称。
11.对象能否调用静态方法 ?
答:不能。对于类内部定义的静态变量及静态方法,该类的对象均不能调用。
12.C#支持多重继承么?
答:类之间不支持多重继承,接口之间支持。类对接口叫做实现,不叫继承。
13.被protected修饰的属性/方法在何处可以访问?
答:在继承或间接继承与这个类的子类中可以访问。
14.私有成员会被继承么?
答:会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
15.C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
答:两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。
16.C#中所有对象共同的基类是什么?
答:System.Object.
17.在方法定义中,virtual有什么含意?
答:被virtual修饰的方法可以被子类覆写。
18.能够将非静态的方法覆写成静态方法么?
答:不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。
答案并没有大错,只是静态方法根本无override概念,属于引起困惑的问题 。
19.可以覆写私有的虚方法么?
答:不可以,甚至子类中无法访问父类中的私有方法。
20.能够阻止某一个类被其他类继承么?
答:可以,使用关键字sealed。 还可以将所有构造函数的访问级别都设为Private或子类无法访问到的其他级别(Assembly外的iternal),也有同样的效果。
21.能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?
答:可以,标记这个类为public,并标记这个方法为sealed。
22.何时必须声明一个类为抽象类?
答:当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。
23.接口(interface)是什么?
答:只含有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。
24.为什么不能指定接口中方法的修饰符?
答:接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。
25.那么如果这些接口中有重复的方法名称呢?
答:这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。
26.如何区别重载方法?
答:不同的参数类型,不同的参数个数,不同的参数顺序。
27.const和readonly有什么区别?
答:const关键字用来声明编译时常量,readonly用来声明运行时常量。
还有一些区别,当应试者提到时你不能说是错的:作字段时const隐含静态,const可以是局部的,readonly可以在构造函数中初始化等。
28.System.String 和System.StringBuilder有什么区别?
答:System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。
29.请详述在.net中类(class)与结构(struct)的异同:
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
30.接口和抽象类具有什么区别?
答:含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型
下面比较一下两者的语法区别:
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中抽象方法可以指定为public,接口中抽象方法不能指定任何修饰符,默认就是public
- 一个类可以实现多个接口,但只能继承一个抽象类。
31.base关键字的作用是什么?
答:子类继承父类的过程中,可能需要在子类中调用父类中的成员,如属性、方法或者构造方法。这个时候,可以使用base关键字来完成。base的作用是用于引用父类的成员,如属性、方法或者是构造方法。
32.什么是抽象类?
答:抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。
33.接口和抽象类两者在应用上的区别:
答:接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用
34.面向对象的特征有哪些方面?
答:
面向对象的编程语言有封装、继承 、抽象、多态等4个主要的特征。
封装:
封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。
抽象:
抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类
继承:
子类继承父类成员,实现代码复用,提高了软件的可重用性和可扩展性。
多态:
不同子类对同一个消息作出不同的反映,提高软件灵活性
35.在C#中,string str=null string str= string.Empty与string str=“”请尽量使用文字或图象说明其中的区别。
答: string.Empty:不分配存储空间。"":分配一个长度为空的存储空间,""和String.Empty,这两个都是表示空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的。
string.Empty就相当于"",一般用于字符串的初始化。比如: string a = string.Empty; 在进行为空的比较时,string.Empty和""是一样的。即如果string test1 = ""; 则可以使用if(test1=="") 或者if(test1==string.Empty) 进行判断。上面两句是一样的效果。
Null:null 关键字是表示不引用任何对象的空引用。null 是引用类型变量的默认值。那么也只有引用型的变量可以为NULL,如果 int i=null; 的话,是不可以的,因为Int是值类型的。
36.用sealed修饰的类有什么特点
答: sealed(密封的)修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。
sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。
37.Params是什么含义?
答:Params是C#中的关键字,采用此关键字可以指定参数数目为可变;在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字。
38.CLR与IL分别是什么含义?
答:CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;
在.Net环境下,各种编程语言使用一种共同的基础资源环境,这就是CLR,CLR将直接与操作系统进行通信,而编程语言如C#.NET将尽量避免直接与操作系统直接通信,加强了程序代码的执行安全性;
可以这样看:CLR就是具体的编程语言如:C#.NET与操作系统之间的翻译,同时它为具体的编程语言提供了许多资源:
IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行
39..堆和栈的区别?
答:栈:由编译器自动分配、释放。值类型通常在栈上。
堆:一般由程序员分配释放。引用类型分配在堆上。
40..如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取
41.成员变量和成员方法前加static的作用?
答:它们被称为静态变量和静态方法,又称为类成员变量和类成员方法。分别用来反映类的状态。
42.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
答:using指令和语句new创建实例 new 隐藏基类中方法。
using 引入名称空间或者使用非托管资源
Using 引入一个名子空间,或在使用了一个对像后自动调用其IDespose
New 实例化一个对像,或修饰一个方法,表此方法完全重写此方法.
43.什么是反射?答:动态获取程序集信息
44.c#中的三元运算符是?答:?:。
45.什么是虚方法?什么是抽像方法?
答:虚方法:要有方法体,哪怕是一个分号,可由子类继承并重写的方法。
抽像方法:不允许有方法体,规定其非抽象子类必须实现的方法,必须被重写。
46.public static const int A=1;这段代码有错误么?是什么?答:const不能用static修饰
47.float f=-123.567F; int i=(int)f;i的值现在是_____? 答:-123
48.用Singleton如何写设计模式.答:static属性里面new ,构造函数private
49.C#中 property(属性) 与 attribute(特性)的区别,他们各有什么用处,这种机制的好处在哪里?
答:属性:用于存取类的字段。特性:用来标识类,方法等的附加性质。
attribute:自定义属性的基类;property :类中的属性
50.谈谈类和结构的区别?
答:最大区别一个是引用类型,一个是值类型
51.谈谈你对MVC模式的理解?
答:MVC模式一般为3层:数据访问层,业务逻辑层,表示层。
数据访问层:对数据库进行增删查改。
业务逻辑层:一般分两大职责:业务处理,数据传递
表示层:与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
52.什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小
53.CTS、CLS、CLR分别作何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库
54.DataReader和DataSet的异同
答:DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库
任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的
因为DataReader的特殊性和高性能.所以DataReader是只进的。
DataSet则是将数据一次性加载在内存中. 读取完毕即放弃数据库连接
因为DataSet将数据全部加载在内存中.所以比较消耗内存
但是确比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作
55.Internal修饰符有什么含义?
答:internal(内部的)数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访,其可访问性级别低于public,高于protected