C#软件工程师面试笔试题(.net)(含答案).docxVIP

C#软件工程师面试笔试题(.net)(含答案).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

软件工程师笔试题(.net)

笔试时间:40分钟 答题人:__________ 开始时间:__________

注:请将答案答于答题纸上,题目做擅长的即可,不必全部答完

值类型和引用类型分别有什么区别?System.ValueType是一个什么类型?

答:值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等。

赋值方式:将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对象的引用(即内存地址,类似C++中的指针),而不复制对象本身。

继承:值类型不可能派生出新的类型,所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。

null:与引用类型不同,值类型不可能包含null值。然而,可空类型功能允许将null赋给值类型。

每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,值类型初始会默认为0,引用类型默认为null。

值类型存储在栈中,引用类型存储在托管堆中。

System.ValueType是所有值类型的基类,ValueType是类类型,但是他的子类却是值类型,这是因为CLR对他的子类经过了特殊的处理.CLR若判断某类继承自ValueType,那么会在内存分配方面使它具有值类型的特征(例如直接分配在栈上)

System.String类型是引用还是值类型?其最大特点是?在字符串连加处理中,最好采用什么方式,理由是什么?

答:string是一个引用类型,因为string太常用,为了提高性能及开发方便,对string做了特殊处理,给予了一些专用特性。

有两个重要的特性:恒定性与驻留性。

恒定性:字符串是不可变的,字符串一经创建,就不会改变,任何改变都会产生新的字符串。

驻留性:相同的字符串在内存(堆)中只分配一次,第二次申请字符串时,发现已经有该字符串时,直接返回已有字符串的地址;

少量字符串连接,使用String.Concat,大量字符串使用StringBuilder,因为StringBuilder减少了内存的分配,性能更好,如果string的话会创建大量字符串对象

请描述一下委托?

答:委托类似于C或C++中的函数指针,允许将方法作为参数进行传递。

(1)C#中的委托都继承自System.Delegate类型,本质上就是一个类;

(2)委托类型的声明与方法签名类似,有返回值和参数;

(3)委托是一种可以封装命名(或匿名)方法的引用类型,把方法当做指针传递,但委托是面向对象、类型安全的;

(4)事件可以理解为一种特殊的委托,事件内部是基于委托来实现的。

通常异常处理分为那几部分?每一部分的分别有什么作用?

答:异常处理分为三块try、catch、finally。

(1)Try块是监视区,其内放置一些正常实现编程功能的代码、资源清除的代码、状态维护(状态改变和状态恢复)的代码等。

(2)Catch块捕获区,当try块出现异常时,如果异常类型与该区域期望的类型一致,则执行此区域的代码,可以进行状态恢复,也可以重新抛出异常。一个try块可以个catch块,也可以无catch块。

(3)Finally块作最后清理工作,在一个try/catch结构中,无论try是否抛出异常,无论catch是否破获到异常,如果有finally块,在最后都会执行,通常在这里放置资源清理的代码。一个try结构可有finally块,也可以没有。

请列举出在接口中可以定义的成员?

答:可以定义方法、属性、事件和索引符,不能定义构造函数、运算符重载,成员不能有修饰符(virtual、static)

GC进行垃圾回收时的主要流程是?

答:(1)标记:先假设所有对象都是垃圾,根据应用程序根Root遍历堆上的每一个引用对象,生成可达对象图,对于还在使用的对象(可达对象)进行标记(其实就是在对象同步索引块中开启一个标示位)。

(2)清除:针对所有不可达对象进行清除操作,针对普通对象直接回收内存,而对于实现了终结器的对象(实现了析构函数的对象)需要单独回收处理。清除之后,内存就会变得不连续了,就是步骤3的工作了。

(3)压缩:把剩下的对象转移到一个连续的内存,因为这些对象地址变了,还需要把那些Root跟指针的地址修改为移动后的新地址。

在继承的方法中使用override和new有什么区别?

答:override:

(1).override是派生类用来重写基类中方法的;

(2).override不能重写非虚方法和静态方法;

(3).override只能重写用virtual、abstract、override修饰的方法;

(4).不能使用修饰符new、static、virtual或abstract来修改

文档评论(0)

liwenfang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档