1. 谈谈你对MVC和三层架构的理解。
MVC即模型、视图、控制器,模型表示业务数据及业务处理,用来封装数据及行为;视图是用户看到并与之交互的界面;控制器接受用户输入并调用模型和视图去完成用户的请求。使用MVC有利于关注点分离,自动化UI测试成为了可能。
三层架构即表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。表现层通俗讲就是展现给用户的界面,业务逻辑层即针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。数据访问层:该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
2. 在MVC中如何保持Sessions?
可使用tempdata、viewdata、viewbag三种方式。其中tempdata:在不同的控制器或动作间转换时保持数据。另外,进行页面转向时,tempdata可以保持数据,它是一个内部的Session变量。Viewdata:可以在控制器和视图间保持数据。Viewbag:它是视图数据的动态包装,使用viewbag不需要类型转换,它使用的是内部动态关键词。
3. MVC中如何做输入验证?
在M层使用数据模型的属性标签形如[Required],在C层使用ModelState.IsValid属性检查数据是否正确,也可在C层使用javascript进行数据验证。
4. 已经有了ASPX,为什么还要Razor?哪个更好?
Razor是一个轻量级的视图引擎,MVC3引入,相比ASPX,Razor更干净、轻量级、语法更简单,只需要使用@关键字,如@DataTime.Now
5. MVC有多少种不同类型的结果类型,请详细描述。
有12种,最主要的是ActionResult类,它是一个基础类,它有11个子类型。
ViewResult - 给响应流渲染指定的视图
PartialViewResult - 给响应流渲染指定的局部视图
EmptyResult - 返回空的响应结果。
RedirectResult - 执行一个HTTP转向到指定的URL。
RedirectToRouteResult -执行一个HTTP转向到一个URL,这个URL由基于路由数据的路由引擎来决定
JsonResult - 序列化一个ViewData对像到JSON格式。
JavaScriptResult - 返回一段Javascript代码,它可以在客户端执行。
ContentResult - 写内容到响应流,不需要视图支持。
FileContentResult - 返回一个文件到客户端。
FileStreamResult - 返回一个文件到客户端,它提供的是流。
FilePathResult - 返回一个文件到客户端。
6. 以下两种异常处理方式有什么区别?try {} catch(){throw;} try{}catch(Exception ex){Throw ex;}
前者catch无参数,可以捕获所有异常,只有throw关键字,表示抛出当前catch语句捕获的异常。
后者catch有参数,可以捕获所有以Exception类派生的异常,throw 变量名;抛出的是Exception异常或Exception派生的类型
7. C#中的委托是什么?事件是不是一种委托?
委托是将一种方法作为参数传入到另一种方法。事件是一种特殊的委托。委托声明的关键字是Delegate。
8. 用接口或父类作为输入的参数有什么好处?返回值如果是接口是为了什么?
接口或父类作为参数,所有继承了此接口或父类的类都可以使用,即你给此方法传参数的时候,可以把继承了这个接口或父类的类的实例传给这个方法。可以一次性传入多种字段、方法等而不用定义多个形参。
接口作为返回值,返回的是实现接口的对象。
9. C#和JS的闭包。
闭包的概念是内层的函数可以引用包含在它外层的函数的变量,即使外层函数的执行已经终止。但该变量提供的值并非变量创建时的值,而是在父函数范围内的最终值。
C#闭包可理解为跨作用域访问函数内变量,那么如何避免闭包陷阱呢?C#中普遍的做法是,将匿名函数引用的变量用一个临时变量保存下来,然后在匿名函数中使用临时变量。参考:http://www.cnblogs.com/jiejie_peng/p/3701070.html
JS闭包,在js中的我的理解就是函数嵌套函数,当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被释放,因为闭包需要它们。参考:http://www.myexception.cn/javascript/2042903.html
10. Ajax操作怎么处理session过期?
当session过期时,我们获取请求头信息值判断是否为ajax请求,如果是,我们可以返回特定格式的JSON数据,客户端可以对此数据处理,发现session失效,可以跳转到其他页面如登陆等。
11. 简要谈一下你对微软.Net架构下remoting和webservice两项技术的理解及实际中的应用。
Remoting可以利用TCP/IP,二进制传送提高效率,webservice可利用http,穿透防火墙。
远程逻辑调用,remoing接口只能用在.net remoting是.net 中用来跨越machine,process, appdomain 进行方法调用的技术,对于三成结构的程序,就可以使用remoting技术来构建.它是分布应用的基础技术.相当于以前的DCOM
WebService是一种构建应用程序的普通模型,并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳,基于组件的对象模型。
12. Sleep()和wait()有什么区别?
1. sleep是线程类Thread 的方法,它是使当前线程暂时睡眠,可以放在任何位置。
而wait,它是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。
2.Sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。
而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。
3.线程执行wait方法时,需要其他线程调用Monitor.Pulse()或者Monitor.PulseAll()进行唤醒或者说是通知等待的队列。
而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒.