net高级工程师面试题完整版
n e t高级工程师面试题集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]
.net软件工程师面试题
基础题:
1.简述string[]、ArrayList、List的区别。
数组:
优点:
o数组在内存中是连续存储的,索引速度非常快;
o赋值和修改元素也很简单;
不足:
o两个数据之间插入数据比较麻烦;
o声明数组的时候,必须指明数组的长度,数组长度过长会造成内存浪费,数组的长度过短,会造成数据溢出错误。
ArrayList:
优点:
https://www.360docs.net/doc/7214942419.html, framework 提供的用于数据存储和检索的专用类
o大小依据存储的数据来动态扩展和收缩
o继承IList,可以方便的进行数据的添加、插入和删除
缺点:
o允许插入不同类型的数据,都当做object类型处理
o数据处理时可能出现类型不匹配的错误
o存在装箱(值=》引用)拆箱的操作,会带来很大的性能损耗
List:
优点:
o声明List集合时,需要声明集合内数据的对象类型
o避免了类型安全问题和装箱拆箱的性能问题
2.简述装箱和拆箱操作中的性能损耗是如何产生的。
3.简述对https://www.360docs.net/doc/7214942419.html,中的事件机制的理解。
4.在一个https://www.360docs.net/doc/7214942419.html,的三层结构系统中,以登录操作为例,简述在各层中如何组织代码。
5.简述相比DATASET,实体类在WEB项目中的优点与缺点。
6.简述GC是如何工作的。
Java采用VM(Virtual Machine)机制,由VM来管理程序的运行当然也包括对GC管理。90年代末期.NET出现了,.NET采用了和Java类似的方法由CLR(Common Language Runtime)来管理。
Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root 为基础,遍历应用程序在Heap上动态分配的所有对象[2],通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用。已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。这就是GC工作的原理。为了实现这个原理,GC有多种算法。比较常见的算法有Reference Counting,Mark Sweep,Copy Collection等等。目前主流的虚拟系统.NET CLR,Java VM和Rotor都是采用的Mark Sweep算法。
Java的内存管理实际就是对象的管理,其中包括对像的分配和释放。对于程序员来说,分配对象使用new关键字,释放对象时只是将对象赋值为null,让程序员不能够再访问到这个对象,该对象被称为“不可达”。GC将负责回收所有“不可达”对象的内存空间。
根据GC的工作原理,可以通过一些技巧和方式让GC运行更快,高效而又合理。编程建议如下:
o尽早释放无用对象的引用,特别注意一些复杂对象,如数组,队列等。对于此类对象,GC回收它们的效率一般较低,如果程序允许,应尽早将不用的
引用对象赋为null,这样可以加速GC的工作。
o尽量少用finalize函数。finalize是java提供给程序员用来释放对象或资源的函数,但是它会加大GC的工作量,因此尽量少采用finalize函数回
收资源。当程序有一定的等待时间,程序员可以手动执行System.gc(),
通知GC运行,但是java语言规范并不保证GC一定会执行。
.NET的GC机制有这样两个问题:
o首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。
o第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。
o GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来
供程序员显式调用以释放非托管资源。使用using语句可以简化资源管理7.简述3个熟悉的设计模式。
简单工厂模式(只适用于业务简单的情况):有三种角色组成:
工厂类角色(只有一个工厂类)
抽象产品角色
具体产品角色
工厂方法模式(当产品种类非常多时会出现大量与之对应的工厂类):有四种角色
抽象工厂角色
具体工厂角色
抽象产品角色
具体产品角色
简单工厂和工厂方法结合能够减少工厂类。使用这两种模式能够提高扩展性和维护性
抽象工厂模式(需要创建的对象比较复杂):
满足条件:
系统中有多个产品族,而系统一次只可能消费其中一族产品
同属于同一个产品族的产品一起使用时。
组成角色:
抽象工厂角色
具体工厂角色
抽象产品角色
具体产品角色
8.简述UDP协议特点,以及如何提高UDP传输可靠性。9.简
述.NET2.0,.NET3.0,.NET3.5各版本中推出的新特性。10.const和readonly的区别
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本质区别,我们就不难看出下面的语句中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 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等其他类成员。
6.错误:如果在astr前加上const或者const改为readonly即可;
总结:1.const、readonly和static readonly定义的常量,指定初始值后(包括在构造函数内指定的初始值) 将不可更改,可读不可写;
2.const定义时必须指定初始值,而readonly定义时可以不进行初始化(MS建议在定义时初始值),同时也可以在构造函数内指定初始值,
并以构造函数内指定的值为准;
3.const和static readonly定义的常量是静态的,只能由类直接访问;而readonly 定义的常量是非静态的,只能由实例对象访问;
4.static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;
5.const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活性上的不足,同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题;
算法题:(以下三题不用作答,想好思路面试谈即可)
1. 一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。注意:- 5个数值允许是乱序的。比如: 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]
?
1. size:12px;color:#333333;">#include 2.#include https://www.360docs.net/doc/7214942419.html,ingnamespacestd; 4. 5.int check(int arry[5]) 6.{ 7.int max=0,min=65535; 8.int zerocount=0; 9.for(int i=0;i<5;i++) 10.{ 11. 12.if(arry[i]==0) 13.zerocount++; 14.else 15.{ 16. 17.if(arry[i]>max) 18.max=arry[i]; 19.if(arry[i] 20.min=arry[i]; 21.} 22. 23.} 24. 25.if(zerocount>=4) 26.return1; 27.else 28.{ 29. 30.if(max-min<=4) 31.return1; 32.else 33.return0; 34.} 35. 36.} 37. 38.int main() 39.{ 40.int arry[5]; 41.cout<<"一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现;0是例外,可以反 复出现"< 42.for(int i=0;i<5;i++) 43.cin>>arry[i]; 44.int p=check(arry); 45.if(p) 46.cout<<"连续"< 47.else 48.cout<<"不连续"< 49.system("pause"); 50.}
输入: 1 2 3 0 5输出:连续
2. 设计一个在一百万个数字中求十个最大的数算法
[java]
?
1. size:12px;color:#333333;">int data[M]; 2.int top[N+1]; 3. 4. 5.void top_N() 6.{ 7.top[0]=std::numeric_limits 8.//Seta"guard"ontheboundarytoreducecomparisiontimes. 9.for(int i=1;i<=N;++i)top[i]=std::numeric_limits 10.for(int j=0;j 11.{ 12. 13.for(int k=N;top[k] 14.top[k+1]=data[j]; 15.} 16. 17.}
3. 有如下输入:若干个由大写英文字母构成的单词,以’,’号隔开。如
“ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB”。写一段程序,从输入中寻找由相同字符构成(重复字符出现次数也是一样)的单词组输出。如以上输入,则输出:第1组:
ABCCD,CDCAB第2组:CDA,DCA,ADC
[java]
?
1. size:12px;color:#333333;"> size:12px;">strings="ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"; 2. 3.varquery=s.Split(',').GroupBy(x=>x.OrderBy(y=>y)); 4.foreach(variteminquery) 5.Console.WriteLine(string.Join(",",item.ToArray()));
项目&管理:(以下两题不用作答,想好思路面试谈即可)
1.假设你做为一个开发团队的领导者,经过长时间的磨合,有了一只10人左右的不错的团队。其中每个成员都在其职位上有不可或缺的作用。现由于一些原因,需要你辞退其中一人。你会如何处理这件事情
2.有一套公司自己开发供本公司使用的CRM系统,其中的权限控制过于简单。现需要你重新设计其权限系统,你会如何开展这个工作
1、文件路径文本转换编写一个函数,输入参数:
·页面文件的虚拟路径(string pageVirPath,例如:~/abc/def/page.aspx)
·图片文件的虚拟路径(string imgVirPath,例如:~/ghi/image/pic .gif)
处理:计算出图片文件相对页面文件的相对路径,例如:../../ghi/image/ pic .gif 返回:相对路径
要求:
a、不要求严格的C#语言表述,可适当使用伪码,着重要表达清楚处理逻辑;
b、尽量使用正则表达式
2、DataTable内数据转换编写一个函数,输入参数:
·源数据表(DataTable srcTable),该表中已包含int型数据列”isSys”,数据为 0或-1,
处理:直接处理源数据表,将”isSys”数据列替换为string型的”系统”数据列,当”isSys”列中值为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模式时,再选择温度为20度,空调将输送热风;选择 Cool Air模式,温度设置为20度时,将输送冷风;在选择DoNothing模式时,空调什么都不做。你将考虑如何为
空调设计应用程序如果将来空调需要增加支持新的模式呢一、第一题的解:适配器模式+抽象工厂模式我采用了抽象工厂模式+适配器模式,先上图:
设计的重点是:1,首先看适配器模式。MediaPlayerClassA和RealPlayerClassA都实现了IMediaA接口。MediaPlayerClassA调用MediaPlayer的APIs来实现IMediaA接口定义的功能;RealPlayerClassA则调用RealPlayer APIs。2,再来看抽象工厂模式。MediaPlayerFactory和RealPlayerFactory继承自抽象类MediaFactory类,MediaPlayerFactory用来创建MediaPlayer产品族;RealPlayerFactory用来创建RealPlayer产品族。虽然上图中只画出了IMediaA接口,但事实上我们可能需要实现多个接口如IMediaB,IMediaC等,这就是这里为什么使用抽象工厂模式。3,抽象类MediaFactory实现了一个静态方法CreateFactory,用来创建具体工厂,该方法返回MediaFactory类型的对象给Client,这样,Client不就需要知道它操作的是那个具体工厂。CreateFactory方法采用反射技术,这样,不需要修改CreateFactory方法的代码,就可以支持以后添加新的具体工厂。4,工厂类返回IMediaA接口给Client,Client操作IMediaA接口而不需要知道它具体使用的是MediaPlayerClassA还是RealPlayerClassA 的实例。序列图如下:
二、第二题的解:Flyweight模式我采用了Flyweight(桥梁)模式,先上图:
设计的重点是:1,把AirConditioner和它支持的Model分离开来,在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. 教师号星期号是否有课?
12有?
13有?
21有?
32有`?
12有?
写一条sql语句让你变为这样的表?
教师号星期一星期二星期三?
121?
21?
31?
各星期下的数字表示:对应的教师在星期几已经排的课数
T-SQL实现:
[sql]
?
1. size:12px;color:#333333;">CREATETABLE COURSE_test( 2."教师号"INT, 3."星期号"INT, 4."是否有课"nvarchar(20) 5.) 6. 7.insertinto COURSE_test 8.VALUES(1,2,'有'); 9. 10. 11.select教师号, 12.count(case when(星期号=1) 13.AND(是否有课='有')then教师号else null end) 14.as星期一, 15.count(case when(星期号=2) 16.AND(是否有课='有')then教师号else null end) 17.as星期二, 18.count(case when(星期号=3) 19.AND(是否有课='有')then教师号else null end) 20.as星期三 21.from COURSE_test 22.groupby教师号
运行select语句结果如下:
非技术(面谈):
1.在上份工作中,自己体现最大的优点和缺点是什么。
运维面试题 含答案
运维工程师面试题 姓名: 答题时间: 1.新安装MYSQL后怎样提升MYSQL的安全级别? A.修改mysql默认端口 下可以通过iptables来限制访问mysql端口的IP地址 C.对所有用户设置较复杂密码并严格指定对应账号的访问IP(可在mysql库中user表中指定用户的访问可访问IP地址) 特权账号的处理(建议给root账号设置强密码,并指定只允许本地登录) E.开启二进制查询日志和慢查询日志 安装目录及数据存储目录权限控制:给mysql安装目录读取权限,给mysql日志和数据所在目录读取和写入权限 G.删除无用mysql账号和删除无用的数据库(安装好的mysql默认会有个test库,可将其删除) 2.MYSQL的主从原理,怎么配置文件? 整体上来说,复制有3个步骤: 将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events); 将master的binary log events拷贝到它的中继日志(relay log); 重做中继日志中的事件,将改变反映它自己的数据。 3.mysql主从复制的优点 <1> 如果主服务器出现问题,可以快速切换到从服务器提供的服务; <2> 可以在从服务器上执行查询操作,降低主服务器的访问压力;
<3> 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。 4.Mysql复制的基本原理过程 (1)Slave上面的IO线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; (2)Master接收到来自Slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave端的IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master端binary log文件的名称以及在Binary log中的位置; (3)Slave的IO线程收到信息后,将接收到的日志内容依次写入到Slave端的RelayLog 文件()的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我” (4)Slave的SQL线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在Master端真实执行时候的那些可执行的查询或操作语句,并在自身执行那些查询或操作语句,这样,实际上就是在master端和Slave端执行了同样的查询或操作语句,所以两端的数据是完全一样的。 5.为MYSQL添加一个用户? mysql> grant select,insert,update,delete on book.* to test2@localhost identified by “abc”;? ? #增加test2用户,密码为abc。并只能在localhost这台主机上登录,并且只能访问book这个库中的表,具有查询,插入,更新,删除权限; 语法:mysql> GRANT <权限> ON <库>.<表> TO ‘用户’@’主机名’ identified by “密码”; 6.写一个脚本将数据库备份并打包至远程服务器/backup目录下。 mount /mnt cd /mnt /usr/local/mysql/bin/mysqldump -hlocalhost -uroot test > tar czf rm -f
JAVA、net 后端技术岗笔试题
net开发工程师笔试题目 1.一列数的规则如下:1、1、2、3、5、8、13、21、34……求第30位数是多少,用递归算法实现。 2.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 3.在C#中,string str = null 与string str = "" 请使用文字说明其中的区别。 4.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。 public void test(int i) { lock(this) { if (i>10) { i--; test(i); } } }
5.简要谈一下您对微软。NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 6.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行(排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路 7.给定以下XML文件,完成算法流程图。
ASP NET考试试题及答案详析
一、填空题 (1)ASPX网页的代码储存模式有两种,它们是_代码分离模式__和__单一模式_。 答案:代码分离模式,单一模式 (2)当一个Web控件上发生的事件需要立即得到响时,应该将他的AutoPostBack属性设置为true。 答案:AutoPostBack (3)请将下列数据(nn)在TextBox控件中显示出来。 Double nn=4512.6; TextBox1.Text=nn.Tostring(); 答案:nn.ToString() (4)当需要将TextBox控件作为密码输入框时(要求隐藏密码的代码),应该将控件的TextMode属性设置为Password. 答案:Password (5)下面是一个转移到新网页的指令:Response.Redirect(“新网页的Url”) 答案:新网页的Ur1 (6)在设计阶段必须将各个验证控件的属性指向被验证的控件。 答案:ControlToValidate (7)下面是设置和取出Session对象的代码。 设置Session的代码是: Session[“greeting”]=“hello wang!”; 取出该Session对象的语句如下: string Myvar=; 答案:Session[“greeting”].ToString() (8)下面是使用Application对象时防止竞争的代码。 Application.;//锁定Application对象 Application[“counter”]=(int)Application[“counter”]+1; Application.;//解除对Application对象的锁定 答案:lock(),unlock() (9)废除Session的语句是:。 答案:Session.Abandon() (10)打开文件系统网站时将自动打开一个开发服务器,这是一个轻量级服务器,可以用来对程序进行检查和调试工作。 答案:开发 (11)所谓分布式类就是在多个文件中使用相同的_命名空间_,相同的_类名_,而且每个类的定义前面都加上partial修饰符,编译时编译器就会自动的将这些文件编辑成一个完整的类。答案:命名空间,类名,partial (12)改变Session的有效时间的语句是:Session.Timeout=60;。 答案:Session.Timeout=60; (13)NET与XML紧密结合的最大好处是跨平台传送数据。 答案:跨平台传送数据 (14)网上招聘模板如果使用FormView控件,通常分为上、下两部分.上面部分通常使用FormView控件的模板,用来介绍公司情况并提出招聘要求;下面部分通常用模板,用来输入和存储数据.当应聘者提交数据后应事件中向应聘者发出感谢或收到的信息.答案:Header Insert ItemInserted
.net高级工程师面试题
.net软件工程师面试题 基础题: 1.简述string[]、ArrayList、List的区别。 数组: 优点: o数组在内存中是连续存储的,索引速度非常快; o赋值和修改元素也很简单; 不足: o两个数据之间插入数据比较麻烦; o声明数组的时候,必须指明数组的长度,数组长度过长会造成内存浪费,数组的长度过短,会造成数据溢出错误。 ArrayList: 优点: https://www.360docs.net/doc/7214942419.html, framework 提供的用于数据存储和检索的专用类 o大小依据存储的数据来动态扩展和收缩 o继承IList,可以方便的进行数据的添加、插入和删除 缺点: o允许插入不同类型的数据,都当做object类型处理 o数据处理时可能出现类型不匹配的错误
o存在装箱(值=》引用)拆箱的操作,会带来很大的性能损耗 List: 优点: o声明List集合时,需要声明集合内数据的对象类型 o避免了类型安全问题和装箱拆箱的性能问题 2.简述装箱和拆箱操作中的性能损耗是如何产生的。 3.简述对https://www.360docs.net/doc/7214942419.html,中的事件机制的理解。 4.在一个https://www.360docs.net/doc/7214942419.html,的三层结构系统中,以登录操作为例,简述在各层中如何组织代码。 5.简述相比DATASET,实体类在WEB项目中的优点与缺点。 6.简述GC是如何工作的。 Java采用VM(Virtual Machine)机制,由VM来管理程序的运行当然也包括对GC管理。90年代末期.NET出现了,.NET采用了和Java类似的方法由CLR(Common Language Runtime)来管理。 Garbage Collector(垃圾收集器,在不至于混淆的情况下也成为GC)以应用程序的root 为基础,遍历应用程序在Heap上动态分配的所有对象[2],通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用。已经不再被应用程序的root或者别的对象所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。这就是GC工作的原理。为了实现这个原理,GC有多种算法。比较常见的算法有Reference Counting,Mark Sweep,Copy Collection等等。目前主流的虚拟系统.NET CLR,Java VM和Rotor都是采用的Mark Sweep算法。
DoNet面试题(选择题)原题
1.下面有关用户控件与aspx页面区别说法错误的是(B) A.用户控件不能再包含