高级工程师面试题_第1页
高级工程师面试题_第2页
高级工程师面试题_第3页
高级工程师面试题_第4页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

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

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

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

9、;.6.private 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 ,readon

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

11、;而 readonly定义的常量是非静态的,只能由实例对象访问;4.staticreadonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;5.const是编译时常量,readonly是运行时常量;cosnt 较高效, readonly较灵活。在应用上以staticreadonly代替 const ,以平衡 const 在灵活性上的不足,同时克服编译器优化 cosnt 性能,所带来的程序集引用不一致问题;算法题: ( 以下三题不用作答,想好思路面试谈即可).1.一个整数数列,元素取值可能是065535 中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。请设计一个算法

12、,当你从该数列中随意选取5 个数值,判断这5 个数值是否连续相邻。注意:- 5个数值允许是乱序的。比如:87506- 0可以通配任意数值。比如:87506中的 0可以通配成9或者 4- 0 可以多次出现。- 复杂度如果是 O(n2) 则不得分。解题思路:1.取 5 个数中非0 的最大数和最小数,之差不大于4 则连续,否则不连续。2.要增加两个特例:1 )全 0 算连续, 2)只有一个非 0 算连续代码实例javaview plaincopyprint?1.<span style= "font-size:14px;"><span style= "f

13、ont-family:MicrosoftYaHei;font-size:12px;color:#333333;"><span style= "font-size:12px;">#include<iostream>2. #include<stdlib.h>3. using namespace std;4.5.intcheck( intarry5)6. 7.intmax=0,min= 65535;8. int zerocount= 0;9.for ( inti= 0;i< 5;i+)10. 11.if (arryi=0)

14、12.zerocount+;13.else14.15.if(arryi>max)16.max=arryi;17.if(arryi<min).18.min=arryi;19.20. 21. if (zerocount>= 4)22.return1;23. else24. 25.if (max-min<= 4)26.return1;27.else28.return0;29. 30. 31.32. int main()33. 34. int arry 5;35. cout<< " 一个整数数列,元素取值可能是 065535 中的任意一个数,相同数值不会重

15、复出现;0 是例外,可以反复出现"<<endl;36.for ( inti= 0;i< 5;i+)37.cin>>arryi;38. int p=check(arry);39. if (p)40.cout<< " 连续 " <<endl;41. else42.cout<< " 不连续 "<<endl;43. system( "pause" );44. </span></span></span>输入: 12305输

16、出:连续2. 设计一个在一百万个数字中求十个最大的数算法javaview plaincopyprint?1.<span style= "font-size:14px;"><span style= "font-family:MicrosoftYaHei;font-size:12px;color:#333333;"><spanstyle= "font-size:12px;">int dataM;2.inttopN + 1;3.4.5.voidtop_N().6. 7.top 0= std:numeric

17、_limits<int >:max();/ Set a "guard"onthe boundary toreducecomparisiontimes.8.for( inti=1;i<= N;+i)topi= std:numeric_limits<int>:min();9.for( intj=0;j< M;+j)10. 11.for( intk=N; topk < dataj;-k) topk= topk - 1;12.topk+1=dataj;13. 14. </span></span></span&g

18、t;3.有如下输入:若干个由大写英文字母构成的单词,以, 号隔开。如“ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB”。 写一段程序, 从输入中寻找由相同字符构成( 重复字符出现次数也是一样) 的单词组输出。如以上输入,则输出:第 1 组: ABCCD,CDCAB第 2 组: CDA,DCA,ADCjavaview plaincopyprint?1.<span style= "font-size:14px;"><span style= "font-family:MicrosoftYaHei;font-size:12px;colo

19、r:#333333;"><span style= "font-size:12px;">strings = "ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"2.varquery= s.Split(',').GroupBy(x=> x.OrderBy(y=> y);3.foreach(variteminquery)4.Console.WriteLine(string.Join("," ,item.ToArray();</span></span&g

20、t;</span>项目 &管理: ( 以下两题不用作答,想好思路面试谈即可)1. 假设你做为一个开发团队的领导者,经过长时间的磨合,有了一只10 人左右的不错的团队。其中每个成员都在其职位上有不可或缺的作用。现由于一些原因, 需要你辞退其中一人。你会如何处理这件事情?.2. 有一套公司自己开发供本公司使用的CRM系统,其中的权限控制过于简单。 现需要你重新设计其权限系统,你会如何开展这个工作?1、文件路径文本转换编写一个函数,输入参数:·页面文件的虚拟路径(string pageVirPath,例如: /abc/def/page.aspx)·图片文件的虚

21、拟路径(string imgVirPath,例如: /ghi/image/pic .gif)处理:计算出图片文件相对页面文件的相对路径,例如:././ghi/image/ pic .gif返回:相对路径要求:a、不要求严格的C#语言表述,可适当使用伪码,着重要表达清楚处理逻辑;b、尽量使用正则表达式2、 DataTable 内数据转换编写一个函数,输入参数:·源数据表( DataTablesrcTable ),该表中已包含int型数据列” isSys ”,数据为0 或-1 ,处理:直接处理源数据表,将”isSys ” 数据列替换为string型的”系统”数据列,当” isSys ”

22、列中值为0,则”系统”列值为空字符串,当” isSys ” 列中值为 -1 ,则”系统”列值为”系统”。返回:操作是否成功(bool);要求:a、不要求严格的C#语言表述,可适当使用伪码,着重要表达清楚处理逻辑;b、不抛出任何异常(包括.net异常)设计模式面试题:1, Windows Media Player和 RealPlayer是常用的媒体播放器,它们的API 结构和调用方法非常不同,现在你的应用需要同时支持调用这2 种播放器的API。你要怎么设计?.2,现在有一种空调,它支持3 种模式: Hot Air, Cool Air和 DoNothing 。例如,当选择Hot Air 模式时,再

23、选择温度为20 度,空调将输送热风;选择CoolAir模式,温度设置为20 度时,将输送冷风;在选择DoNothing 模式时,空调什么都不做。你将考虑如何为空调设计应用程序?如果将来空调需要增加支持新的模式呢?一、第一题的解:适配器模式+抽象工厂模式我采用了抽象工厂模式+适配器模式,先上图:设计的重点是:1, 首先看适配器模式。MediaPlayerClassA和 RealPlayerClassA都实现了IMediaA 接口。.MediaPlayerClassA调用 MediaPlayer的 APIs 来实现 IMediaA 接口定义的功能;RealPlayerClassA则调用 RealP

24、layer APIs。2, 再来看抽象工厂模式。MediaPlayerFactory和 RealPlayerFactory继承自抽象类MediaFactory类,MediaPlayerFactory用来创建MediaPlayer产品族; RealPlayerFactory用来创建RealPlayer产品族。虽然上图中只画出了IMediaA 接口,但事实上我们可能需要实现多个接口如IMediaB , IMediaC 等,这就是这里为什么使用抽象工厂模式。3, 抽象类 MediaFactory实现了一个静态方法CreateFactory,用来创建具体工厂,该方法返回 MediaFactory类型的

25、对象给Client,这样, Client不就需要知道它操作的是那个具体工厂。 CreateFactory方法采用反射技术,这样,不需要修改CreateFactory方法的代码,就可以支持以后添加新的具体工厂。4, 工厂类返回IMediaA 接口给 Client, Client操作 IMediaA 接口而不需要知道它具体使用的是 MediaPlayerClassA还是 RealPlayerClassA的实例。序列图如下:.二、第二题的解:Flyweight模式我采用了Flyweight(桥梁)模式,先上图:.设计的重点是:1, 把 AirConditioner和它支持的Model 分离开来,在

26、AirConditioner类的实例中保存它支持的所有Model 类的实例,这样做的好处是1) 如果只是支持的Model 有变化,不需要去实现新的 AirConditioner类,只要添加或删除支持的Model 即可。 2) 多个不同的AirConditioner类可以方便地共享共同的Model 类,否则,可能需要复杂的继承关系才能在不同 AirConditioner类之间共享Model。事实上, AirConditioner类和 Model 类的关系非常类似于桥梁模式中抽象类和实现类的关系。2, 采用 Flyweight模式。在多个AirCondition实例中,共享Model 的实例,这样可以大大地节省存储空间。ModelFactory用于创建Model 实例并返回给AirCondition,它保存了一个 Model 池,每种类型的Model 只有一个实例。在Model 类中只保存内蕴状态,AirConditioner类保存外蕴状态, 调用 Model 类的 Execute 方法时,需要把 IAirConditioner作为外蕴状态传递给方法(或者也可以使用专门的状态类作为外蕴状态)。.序列图如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论