Net 面试题
.Net Fx方面
1、 什么叫AppDomain(应用程序域)?AppDomain有什么好处?
一个应用程序在其中执行的独立环境。应用程序域形成了托管代码的隔离、卸载和安全边界。而这些特性带给一个插件式框架的将是异常隔离、动态加载卸载插件和更安全的插件运行环境
2、 abstract与virtual方法的区别?
抽象方法只能在抽象类中声明,虚方法则不是
抽象方法必须在派生类中重写,虚方法则不必s
抽象方法不能声明方法体,虚方法则可以
包含抽象方法的类不能被实例化,包含虚方法的类能够被实例化
3、 C#中访问修饰符有哪些(public,internal,private,protected)?它们的区别?
类的访问修饰符(非内部类)
private:不可用
protected:不可用
protected internal:不可用
internal:限定与本Assembly内
public:无限制
默认:=internal
类成员的访问修饰符
private:限定于本类
protected:限定于派生类
protected internal:限定与派生类及本集合内。如果派生类在另一集合内,也可以访问;
internal:限定于本Assembly。即使在某段程序内,实类被拓展外public,在集合外,类实体内的该变量也是不可访问的。
public:无限制
默认:=private
接口的访问修饰符
private:不可用
protected:不可用
protected internal:不可用
internal:限定与本Assemly内
public:无限制
默认:=internal
接口成员的访问修饰符
private:不可用
protected:不可用
protected internal:不可用
internal:不可用
public:无限制
默认:=public
命名空间内或编译单元顶部的委托
internal:
public:
默认:=internal
4、 delegate(委托)是什么?在.net中,delegate有哪些用途?
委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法
传递方法,回调函数,事件机制
5、 值类型和引用类型的区别?分别说出一些.Net Fx类库中的值类型/引用类型。String是值类型还是引用类型,为什么?
引用类型存放对象的引用值,而不是对象本身
值类型存放是具体的数据本身
很多时候值类型比引用类型高效,但也有例外情况
引用类型的对象存储在堆中,而值类型数据可以存放在栈或堆中,要根据具体的定义
值类型值可以通过boxing转换为引用类型,通过unboxing转换为值类型
6、 装箱和拆箱?何时发生装箱和拆箱?为什么发生装箱和拆箱不好?如何避免?
装箱是将值类型转换为引用类型 ;拆箱是在已装箱的前提下将引用类型转换为值类型.
耗费耗费cpu和内存资源、
使用泛型
7、 要使用foreach语句,对象须满足什么条件?(IEnumerable接口/GetEnumerator方法)
需要继承 IEnumerable 接口
8、 垃圾回收(GC)的基本原理,如何定义一个类型,能在类型的实例上使用using语句?
垃圾回收器跟踪并回收托管内存中分配的对象。 垃圾回收器定期执行垃圾回收以回收分配给没有有效引用的对象的内存。 当使用可用内存不能满足内存请求时,垃圾回收会自动进行。 或者,应用程序可以使用 Collect 方法强制进行垃圾回收。
垃圾回收由以下步骤组成:
垃圾回收器搜索托管代码中引用的托管对象。
垃圾回收器尝试完成没有被引用的对象。
垃圾回收器释放没有被引用的对象并回收它们的内存。
using 语句提供的对象必须实现 IDisposable 接口
9、 对Linq的操作也需要熟悉。
语言集成查询
10、 如何给一个类型定义扩展方法,以及扩展方法的原理?
扩展方法是给现有类型添加一个方法;
扩展方法是通过 指定关键字this修饰方法的第一个参数;
扩展方法必须声明在静态类中;
扩展方法要通用对象来调用;
扩展方法可以带参数
Web方面
- 因为目前的web项目主要是asp.net mvc的,所以这方面可能会涉及到,因此需要了解一些Razor语法。MVC中的M、V、C分别表示什么意思以及它们之间的关系是嘛可能会考。
- asp.net的执行流程
请求一个页面时首先被WWW服务截获(inetinfo.exe进程),这个进程首先判断页面的后缀,然后根 据IIS中的配置来决定调用哪个扩展程序,比如aspx的页面就会调用c:\windows\microsoft.net\framework \v2.0.50727\aspnet_isapi.dll,aspnet_isapi.dll将请求发送给w3wp.exe进程(我们在调试IIS中网 站时就是把VS2005附加到这个进程上的)。
接下来w3wp.exe进程就会调用.net类库进行具体处理
3. httpmodule,httphandler的应用场景,主要是让面试者说出在哪些情况使用httpmodule/httphandler。
HttpModule:
可以在页面处理前后、应用程序初始化、出错等时候加入自己的事件处理程序
HttpHandler:
Http处理程序,处理页面请求
4. ASP.NET页面之间传递值的几种方式
QueryString,session,cookies,application,server.Transfers
5. Server.Transfer、Response.Redirect、Server.Execute的区别?
在网络状态较好的情况下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服务器上的aspx或非aspx(html)资源
Server.Transfer方法和Server.Execute方法最灵活!! 但只能转到同一Application目录下,也有可能导致不期望的结果发生
Server.Execute方法占用资源最多
6. Asp.net Form身份验证的原理
假设用户要浏览需要权限的页面,此时,安全机制先启动,检查当前用户请求是否持有用户票据的Cookie
如此Cookie存在:解析Cookie中的票据信息,获得用户角色,创建用户标识
否则:认为用户无权浏览该页面,跳转至登入页面,登入成功后重定向到所请求页面^
7. Session与Cookie,Application与Session的区别?
8. 谈谈ViewState,使用ViewState的优劣。
ASP.NET中的ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制.
9. Asp.net webform的doPostBack原理
ASP.NET WebForm中的一般WEB控件(为什么是一般呢?因为如Button等少数控件不是调用doPostBack方法的)在向服务器回发请求时,调用的就 是doPostBack方法,通过表单提交的方式来向服务器提交请求。而WebForm所提供的WEB事件模型也是以doPostBack这个方法为基础的,往服务器传送的两个隐含变量(EVENTTARGET,EVENTARGUMENT)就是PostBack事件分发的根据。EVENTTARGET保存着向服务器发出PostBack请求的控件ID,ASP.NET根据这个ID就可以找到它所对象的服务器端控件的实例。EVENTARGUMENT保存 的是当前PostBack的一些参数。
ADO.NET
1、ADO.NET中有哪些与sql server相关的常用对象:SqlConnection,SqlCommand,SqlDataReader,SqlDataAdapter等等。
2、DataSet与DataReader的区别及各自用法
3、了解一些关于Sql连接池方面的知识
连接到数据库服务器通常由几个需要很长时间的步骤组成。必须建立物理通道(例如套接字或命名管道),必须与服务器进行初次握手,必须分析连接字符串信息,必须由服务器对连接进行身份验证,必须运行检查以便在当前事务中登记,等等。
实际上,大多数应用程序仅使用一个或几个不同的连接配置。这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭。为了使打开连接花费的系统开销最小,ADO.NET 使用称为连接池的优化方法。
连接池使新连接必须打开的次数得以减少。池进程保持物理连接的所有权。通过为每个给定的连接配置保留一组活动连接来管理连接。每当用户在连接上调用 Open 时,池进程就会查找池中可用的连接。如果某个池连接可用,会将该连接返回给调用者,而不是打开新连接。应用程序在该连接上调用 Close 时,池进程会将连接返回到活动连接池集中,而不是关闭连接。连接返回到池中之后,即可在下一个 Open 调用中重复使用。
前端页面(主要是调式能力):
1、 会使用Firefox的插件FireBug 或 IE8/IE9的开发人员工具来调式页面布局
脚本语言(javascript):
会编写最基础的javascript代码,如使用javascript编写function、操作DOM元素等
jquery最好曾经使用过,考查点:使用jquery向服务器发送异步请求,包括get/post方式。知道get/post的区别
数据库(sql server):
存储过程是核心,MaryKay所有应用程序与数据库的交互都是通过存储过程进行的.
考查点包括:
存储过程的创建(create),修改(alter),授权(grant)
存储过程的参数传递(默认值),返回值
表连接操作:join/left join/right join
数据库分页:在数据库端执行分页
如何避免锁:with(nolock)
了解一些数据库性能优化方面的东西,譬如索引。
版本控制(源代码管理):
了解一下TFS是如何使用的。会进行简单的check in/check out/branch/merge/roll back操作。