一些ASP.NET研发工程师的面试题

本文记录了一次ASP.NET研发工程师的面试经历,涵盖了项目经验分享、ASP.NET服务器控件事件处理、页面生命周期、Session、Cookie与Application的使用、与JSP的对比、C#的重写与反射、装箱拆箱以及SQL左连接等知识点,揭示了面试中的关键问题和解答思路。
摘要由CSDN通过智能技术生成

从中联实习完到现在,很久没有正式工作过了,最近感觉有点闲得慌的感觉,突然感觉到工作条件下的自己才算比较正常的。今天上午13:00接到一个公司的技术面试电话,总共聊了半个多小时,基本问题还是答出来,但是其实对于一些细节问题还是有待商榷。下面利用空闲时间整理一下,也算补充一下自己。

 

一、首先是谈论一下对于之前项目开发的介绍,以及之前项目开发中遇到的一些问题,甚至还问到了是如何解决这些问题的?

这是一个面试过程中比较常见的问题,也许面试官是考证一下投递简历的人是否跟简历介绍的一样,我见过许多把简历写得相当NB的人,结果一面试,天啦,傻眼了!

我按照实际情况描述了一下项目,然后概括性介绍了项目的模块,以及项目开发中遇到了一些问题以及数据表的介绍。

二、ASP.NET中的服务器控件,比如TextBox,如果添加了一个TextChanged事件,在客户端进行事件触发的时候,服务器如何接收到该事件的,以及服务器如何处理该事件的?

说实话,我挺佩服这个面试官的,从他对于问题的描述可以得知应该是个大牛之内的人,其水平不在谭老大之下。

这个问题可以理解为对于ASP.NET的运行以及生命周期的问题,触发事件是指触发服务器事件。首先你在客户端发生了一个选节点的操作,这时通过客户端页面的JAVASCRIPT方法(通常是_DO_POSTBACK方法,这个是ASP.NET自动生成的),来向服务器回发一些信息,这些信息其中就包括当前客户端页面的所有状态、触发回发的控件ID等等。
服务器在接收到_DO_POSTBACK发回的信息后,进行处理,找到对应的处理方法,然后执行。生成页面之后,发送给客户端。

三、ASP.NET页面的生命周期是多少?以及当用户在请求某个aspx页面的过程中,从请求到页面显示过程中,细节是怎么样的?

我从这个问题扯到了Session、Application、Cookie以及ViewData方面,显然是不正确的。应该是这样回答的:

1. Page_Init();
2. Load ViewState and Postback data;
3. Page_Load();
4. Handle control events;
5. Page_PreRender();
6. Page_Render();
7. Unload event;
8. Dispose method called;

四、接着我上面扯到的答案,面试官很正常的问到了我对于Session、Cookie以及Application的应用范围,以及这些全局变量的优缺点。

1、Application用于保存所有用户共用的数据信息,如果被保存的数据在应用程序生存期内根本不会改变或很少改变,用它。但是在asp.net中有个web.config,可能更好点。如果要使用application,一个需要考虑的问题是任何写操作都有要在application_onstart事件中(Global.asax)中完成。尽管使用application.lock和application.unlock方法来避免操作的同步,但是它串行化了对application的请求,当网站访问量大时会造成性能瓶颈。因此最好不要用它存取大的数据集。

2、Session 用于保存每个用户的专用信息,它的生存期是用户持续请求时间再加上一段时间(可以在web.config中设置,默认是20分钟)。Session中的信息保存在服务器的内存中,当然你也可以设置它的保存方法(如存在SQL数据库中)。由于用户停止使用程序后它仍然在内存中保持一段时间,因此使用Session对象保存用户数据的方法效率很低。对于小量的数据。使用Session还是一个不错的选择。
3、Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它保存非敏感性的内容。保存时间可以根据需要设置。如果没有设置Cookie失效时间,它仅保存至浏览器关闭。如果将Cookie设置为Min Value,则表示它永不过期。Cookie存储量受到很大限制,一般浏览器支持最大容量为4096字节。因此不能用来存储大量数据。由于并非所有浏览器都支持Cookie,并且它是以明文方式保存的,所以最好不要保存敏感性的内容。否则会影响网络安全。

五、由于我之前在中山大学做过JSP页面,所以面试官问了一个关于ASP.NET与JSP的问题,就是服务器端对于客户端控件事件处理的机制有什么区别?

这个问题跟问题2是基本一致的。

六、对于ASP.NET的问题问得差不多后,面试官开始对C#下手了,问到的第一个是子类如何重写父类的方法?

1、如果父类包含某个需要重写的函数,利用override即可

2、如果父类不包含这个函数,利用public new override也可。

七、在C#中,你是如何理解反射的?

说实话,这些概念在平时开发中还真没有特别的留意。反射(Reflection)是.NET中的重要机制,通过反射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。

八、对于之前你提到的装箱和拆箱是怎么理解的?

拆箱是把“引用”类型转换成“值”类型;装箱是把“值”类型转换成“引用类型”;原因是有时某些方法的参数要求使用“引用”类型,而你想把“值”类型的变量通过这个参数传入,就需要使用这个操作。举例说明就是,

object obj="HelloWorld";就是装箱

String str=(String) obj;就是拆箱 

九、在SQL中,左连接的具体细节是怎么样的?

面试官给出了例子,即表A和表B,表A中的BID与表B中的BID对应,当进行左连接操作时,问我的表结构是怎么样的。

left join的操作基本是:首先取出A表中所有数据,然后再加上与A,B匹配的的数据

right join的操作就是:首先取出B表中的所有数据,然后再加上与A,B匹配的的数据

至于inner join操作就是:取出A,B表匹配的数据 

十、C#中using关键字的用法?

这个问题的回答还算顺利,在C#中,关键字using主要有两种用途:

1、作为语句,用于定义一个范围,在此范围的末尾将释放对象:当提到这一点的时候,面试官又追问了,如果是定义一个数组也会释放吗?于是我继续回答到,为using语句提供的对象必须实现IDisposable 接口。此接口提供了Dispose 方法,该方法将释放此对象的资源。

2、作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型

小结:

虽然并不是所有问题都答出了,但是总算明白了自己在项目开发过程中需要重视一些基本概念的理解,毕竟万事皆源于概念,只有概念结合动手能力,才是无敌的王道。最后谢谢这位面试官。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值