.net高级工程师面试题

上传人:小** 文档编号:93139771 上传时间:2019-07-17 格式:DOC 页数:17 大小:300.54KB
返回 下载 相关 举报
.net高级工程师面试题_第1页
第1页 / 共17页
.net高级工程师面试题_第2页
第2页 / 共17页
.net高级工程师面试题_第3页
第3页 / 共17页
.net高级工程师面试题_第4页
第4页 / 共17页
.net高级工程师面试题_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《.net高级工程师面试题》由会员分享,可在线阅读,更多相关《.net高级工程师面试题(17页珍藏版)》请在金锄头文库上搜索。

1、.net软件工程师面试题 基础题: 1.简述string、ArrayList、List的区别。 数组: 优点 : o 数组在内存中是连续存储的,索引速度非常快; o 赋值和修改元素也很简单; 不足: o 两个数据之间插入数据比较麻烦; o 声明数组的时候,必须指明数组的长度,数组长度过长会造成内存浪费,数组的长度过短,会造成数据溢出错误。 ArrayList: 优点: o .net framework 提供的用于数据存储和检索的专用类 o 大小依据存储 的数据来动态扩展和收缩 o 继承IList,可以方便的进行数据的添加、插入和删除 缺点: o 允许插入不同类型的数据,都当做object类型处

2、理 o 数据处理时可能出现类型不匹配的错误 o 存在装箱(值=引用)拆箱的操作,会带来很大的性能损耗 List: 优点: o 声明List集合时,需要声明集合内数据的对象类型 o 避免了类型安全问题和装箱拆箱的性能问题 2.简述装箱和拆箱操作中的性能损耗是如何产生的。 3.简述对ASP.NET中的事件机制的理解。 4.在一个ASP.NET的三层结构系统中,以登录操作为例,简述在各层中如何组织代码。 5.简述相比DATASET,实体类在WEB项目中的优点与缺点。 6.简述GC是如何工作的。 Java采用VM(Virtual Machine)机制,由VM来管理程序的运行当然也包括对GC管理。90年

3、代末期.NET出现了,.NET采用了和Java类似的方法由CLR(Common Language Runtime)来管理。 Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root为基础,遍历应用程序在Heap上动态分配的所有对象2,通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用。已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。这就是GC工作的原理。为了实现这个原理,GC有多种算法。比较常见的算法有Reference Counting,Mark Sweep,Copy Collect

4、ion等等。目前主流的虚拟系统.NET CLR,Java VM和Rotor都是采用的Mark Sweep算法。 Java的内存管理实际就是对象的管理,其中包括对像的分配和释放。对于程序员来说,分配对象使用new关键字,释放对象时只是将对象赋值为null,让程序员不能够再访问到这个对象,该对象被称为“不可达”。GC将负责回收所有“不可达”对象的内存空间。 根据GC的工作原理,可以通过一些技巧和方式让GC运行更快,高效而又合理。编程建议如下: o 尽早释放无用对象的引用,特别注意一些复杂对象,如数组,队列等。对于此类对象,GC回收它们的效率一般较低,如果程序允许,应尽早将不用的引用对象赋为null

5、,这样可以加速GC的工作。 o 尽量少用finalize函数。finalize是java提供给程序员用来释放对象或资源的函数,但是它会加大GC的工作量,因此尽量少采用finalize函数回收资源。 当程序有一定的等待时间,程序员可以手动执行System.gc(),通知GC运行,但是java语言规范并不保证GC一定会执行。 .NET的GC机制有这样两个问题: o 首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。 o 第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。 o GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDis

6、posable接口定义了Dispose方法,这个方法用来供程序员显式调用以释放非托管资源。使用using语句可以简化资源管理 7.简述3个熟悉的设计模式。 简单工厂模式(只适用于业务简单的情况):有三种角色组成: 工厂类角色(只有一个工厂类) 抽象产品角色 具体产品角色 工厂方法模式(当产品种类非常多时会出现大量与之对应的工厂类):有四种角色 抽象工厂角色 具体工厂角色 抽象产品角色 具体产品角色 简单工厂和工厂方法结合能够减少工厂类。使用这两种模式能够提高扩展性和维护性 抽象工厂模式(需要创建的对象比较复杂): 满足条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品 同属于同一个产

7、品族的产品一起使用时。 组成角色: 抽象工厂角色 具体工厂角色 抽象产品角色 具体产品角色 8.简述UDP协议特点,以及如何提高UDP传输可靠性。 9.简述.NET2.0,.NET3.0,.NET3.5各版本中推出的新特性。 10. const和readonly的区别 我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本

8、质区别,我们就不难看出下面的语句中static readonly和const能否互换了: 1. static readonly MyClass myins = new MyClass(); 2. static readonly MyClass myins = null; 3. static readonly B = 10; static readonly A = B * 20; 4. static readonly int constIntArray = new int 1, 2, 3; 5. void SomeFunction() const int a = 10; . 6.private

9、static string astr=“abcd“; private const string str = astr+“efg“; 1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定 2:可以换成const。我们也看到,Reference类型的常量(除了String)只能是Null。 3:可以换成const。我们可以在编译期间很明确的说,A等于200。 4:不可以换成const。道理和1是一样的,虽然看起来1,2,3的数组的确就是一个常量。 5:不可以换成readonly,readonly只能用来修饰类的field,不能修饰局部变量,也不能修饰property等

10、其他类成员。 6.错误:如果在astr前加上const或者const改为readonly即可; 总结:1.const、readonly和static readonly定义的常量,指定初始值后(包括在构造函数内指定的初始值) 将不可更改,可读不可写; 2.const定义时必须指定初始值,而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值, 并以构造函数内指定的值为准; 3.const和static readonly定义的常量是静态的,只能由类直接访问;而readonly定义的常量是非静态 的,只能由实例对象访问; 4.static readonl

11、y常量,如果在构造函数内指定初始值,则必须是静态无参构造函数; 5.const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足, 同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题; 算法题:(以下三题不用作答,想好思路面试谈即可) 1. 一个整数数列,元素取值可能是065535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。 注意: - 5个数值允许是乱序的。比如:

12、 8 7 5 0 6 - 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4 - 0可以多次出现。 - 复杂度如果是O(n2)则不得分。 解题思路: 1.取5个数中非0的最大数和最小数,之差不大于4则连续,否则不连续。 2.要增加两个特例: 1)全0 算连续,2)只有一个非0算连续 代码实例 java view plain copy print? 1. #include 2. #include 3. using namespace std; 4. 5. int check(int arry5) 6. 7. int max=0,min=65535; 8. int zeroco

13、unt=0; 9. for(int i=0;imax) 16. max=arryi; 17. if(arryi=4) 22. return 1; 23. else 24. 25. if(max-minarryi; 38. int p=check(arry); 39. if(p) 40. cout 输入: 1 2 3 0 5 输出:连续 2. 设计一个在一百万个数字中求十个最大的数算法 java view plain copy print? 1. int dataM; 2. int topN + 1; 3. 4. 5. void top_N() 6. 7. top0 = std:numeric_

14、limits:max(); / Set a “guard“ on the boundary to reduce comparision times. 8. for (int i = 1; i :min(); 9. for (int j = 0; j 3. 有如下输入:若干个由大写英文字母构成的单词,以,号隔开。如“ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB”。 写一段程序,从输入中寻找由相同字符构成(重复字符出现次数也是一样)的单词组输出。 如以上输入,则输出: 第1组:ABCCD,CDCAB 第2组:CDA,DCA,ADC java view plain copy pr

15、int? 1. string s = “ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB“; 2. var query = s.Split(,).GroupBy(x = x.OrderBy(y = y); 3. foreach (var item in query) 4. Console.WriteLine(string.Join(“,“, item.ToArray(); 项目 要求: a、不要求严格的C#语言表述,可适当使用伪码,着重要表达清楚处理逻辑; b、不抛出任何异常(包括.net异常) 设计模式面试题: 1, Windows Media Player和RealPlay

16、er是常用的媒体播放器,它们的API结构和调用方法非常不同,现在你的应用需要同时支持调用这2种播放器的API。你要怎么设计? 2, 现在有一种空调,它支持3种模式:Hot Air,Cool Air 和DoNothing。例如,当选择Hot Air模式时,再选择温度为20度,空调将输送热风;选择 Cool Air模式,温度设置为20度时,将输送冷风;在选择DoNothing模式时,空调什么都不做。 你将考虑如何为空调设计应用程序?如果将来空调需要增加支持新的模式呢? 一、 第一题的解:适配器模式+抽象工厂模式 我采用了抽象工厂模式+适配器模式,先上图: 设计的重点是: 1,首先看适配器模式。MediaPlayerClassA和RealPla

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号