.NET面试资料整理

1.WCF和Web Api的区别
答:1WCF是.NET平台开发的一站式框架,Web Api的设计和构建只考虑一件事情,那就是Http,而WCF的设计主要考虑是SOAP和WS-*;Web Api很是轻量,在功能和灵活性上都不能和WCF相比。若是你的服务是基于TCP的,或者支持更多的传输机制,那么WCF是更好地选择。然而并非全部的平台都支持SOAP和WS-*,当客户端不支持这些协议的时候,Web Api将是更好地选择;WCF是基于SOAP协议的,数据格式是XML,而Web Api是基于RESTful标准的,数据格式多样化,能够是XML,JSON等。WCF配置繁琐,而Web Api它是简单的,代码可读性强,上手快,接口更标准,更清晰,没有混乱的方法名称,有的只是集中比较标准的请求,如get,post,put,delete等,而且Web api是一个URL链接,能够在不一样的平台运转,同时支持MVC的特征,像路由、控制器、action、filter、模型绑定、控制反转(IOC)或依赖注入(DI),单元测试。
SOAP(SOAP:Simple Object Access Protocol) 简单对象访问协议,通常是基于XML的。
google,facebook,baidu,新浪仍是腾讯。他们对外开放的接口都是基于Http的Web APIjavascript

2.MVC和Web Api的区别
答:MVC主要用于建站,WEB Api主要用于构建http服务。两种架构都是在ASP.NET的基础上进行改造的,主要是对httpModule和httpHandler作了扩展,MVC引伸出了强大的路由机制,实现了诸如MvcHandler和ControllerFactory这种消息处理和后台控制器方法选择机制,而Web api在MVC基础上另外写了一套独立于ASP.NET的消息处理管道。
MVC只能运行在IIS上,Web api能够运行在WebHost,ConsoleHost甚至windows Services上。css

3.MVC的路由配置
答:基本的路由规则是从特殊到通常的排列,小范围写在前,大范围写在后,路由规则能够注册多条,路由的名称(name)不能重复,路由规则能够设置约束,即正则表达式。
URl构造: 
routes.MapRoute(name:"Default",url:"{controller}/{action}/{id}",defaults:new {controller="home",action="Index",id=UrlParamter.Optional})
在RouterConfig.cs中配置这些的java

4.MVC 的生命周期(运行机制)
答:http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到获得响应结束。
Request → UrlRoutingModule(IHttpModule init) → Route Table → RouteHandler(MvcRouteHandler) → MvcHandler(IHttpHandler)→ ProcessRequest → Controller(IController Factory)→ Controller.Execute
→ ActionInvoker → ActionMethod → ActionResult → ActionResult.ExecuteResult → reponseweb

5.Web Api2 http请求生命周期
答:IIS Hosting → Http Request → HttpServer → HttpRequestMessage → HttpRouteDispatcher → HttpControllerDispatcher → Authorization Filters → Action Filters → View正则表达式

6.Web Api2应用架构详解
答:常见的应用包括如下四类,PC客户端程序,APP程序,网站程序,H5程序。
如何确认一个app可以访问webapi?
使用AppID验证app访问webapi的合法性,AppID为服务端给出的一个ID标志。
咱们能够为web/app/winform分别分配一个ID,从而能够肯定访问的合法性,和访问的渠道。sql

如何保证app参数的正确性,没有被篡改?
客户端使用AppID对应的AppSecert,对参数进行签名(MD5/SHA等)
服务端使用一样的方式签名,和客户端签名校验。数据库

如何防止webapi url被截获,从新访问?
客户端访问webapi时带上时间戳参数,服务端对时间戳进行校验,如10分钟内的访问才是有效的。windows

涉及具体用户的操做时,如何验证用户?
可使用username,psw参数的方式访问webapi。可是这种方式很不安全。
使用受权token是很好的解决办法。在用户登陆成功时,服务端生成一个受权码,对应用户信息。
访问时带上token参数,服务端查询token有效性,和token对应的用户信息。api

7.MVC、MVP、MVVM架构模式的区别和联系
MVC是比较直观的架构模式,用户操做->View(负责接收用户的输入操做)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了彻底切断View跟Model之间的联系,由Presenter充当桥梁,作到View-Model之间通讯的彻底隔离。若是说MVP是对MVC的进一步改进,那么MVVM则是思想的彻底变革。它是将“数据模型数据双向绑定”的思想做为核心,所以在View和Model之间没有联系,经过ViewModel进行交互,并且Model和ViewModel之间的交互是双向的,所以视图的数据的变化会同时修改数据源,而数据源数据的变化也会当即反应到View上。这方面典型的应用有.NET的WPF,js框架Knockout、AngularJS等。跨域

8.反射的简单介绍
C#中反射的概念:在运行的时候发现对象的相关信息。根据这些信息能够动态的执行对象的方法以及获取对象的属性所储存的值。
那么EF实体框架,就是反射的应用之一。

9.EF介绍
EntityFramework是ADO.NET中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。
有Dapper.NET、NHeberneit、EF、IBatis.Net和SubSonic等
优势:
1.简洁的Linq to Sql语句大大提升了开发人员的效率,不要再写复杂的sql语句;
2.再也不须要再管应用程序如何去链接数据库;
3.传统的表驱动方式建立EDM,而后经过EDM生成模型和数据层代
DataBase First、Model First、CodeFirst

10.MVC2,MVC3,MVC4和MVC5的不一样
答:MVC3须要.net framework4.0,能够指定视图引擎,WebForm,Razor等。
MVC4 多了Web api,asp.net4.5,MVC5 多了Web Api2.0 asp.net4.5.1

11.javascript中闭包
若是一个函数访问了它的外部变量,那么它就是一个闭包。经过访问外部变量,一个闭包能够维持(keep alive)这些变量
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
或者
var add = function () {
var counter = 0;
return function () {return counter += 1;}
};
var add1=add()

12.SQL的执行顺序
答:from → on → join → where → group by → with → having → select → distinct → order by → top

13.SQL性能优化
答:1)尽可能避免模糊查询(like),解决办法,把检索条件修改成下拉框,根据下拉框直接查询数据;根据条件查询出一个临时表数据,再和临时表数据进行复杂关联。2)索引问题,避免对索引字段进行运算,像<>,!=,not,is null,is not null,避免索引字段使用函数,索引字段不要用空值表示。3)update,select复杂语句,多级嵌套的时候,尽可能修改成拆成几步,生成一些临时数据,再进行操做。4)update同一张表的时候屡次执行,修改成一次执行(update ATable set name = (select name from BTable where id =ATable .id))。5)用union all代替union,union会将各查询的记录做对比。6)在where语句中,尽可能避免对索引字段济宁计算。7)where中应该避免使用having,in,not in,or。可使用exist代替(select * from ATable where exists(select * from BTable where BTable.id=ATable.id))。8)索引的时候,数字类型就是数字类型,时间类型就是时间类型,不要用字符串表示数字类型或者时间类型,不然索引回无效。9)不用动不动就select * ,很傻的好很差。10)排序的时候,避免使用耗费资源的操做,如:distinct、union、minus、itersect,order by的SQL语句或启动SQL引擎,耗费资源的排序(SORT)功能,distinct须要执行一次排序,其余的都须要执行两次排序。11)慎重用临时表能够极大地提升效率。(drop table #temp;create table #temp(id int,name nvarchar(50)))

14.事务的特性
1)原子性(要么全成功,要么全失败);2)一致性(加加减减保持一致);3)隔离性(多个事务之间的并发操做,事务之间相互隔离,互不影响);4)持久性(事务一旦提交将是永久性的)

15.事务的隔离级别
1)read uncommitted(未提交读,脏读),至关于nolock;2)read committed(已提交读,默认级别);3)repeatable read(能够重复读),至关于(hold lock);4)seriable(可序列化);5)snapshot(快照);6)read comminted snapshot(已提交读隔离)
read uncommitted → read committed → repeatable read → seriable 隔离级别愈来愈高,读操做的请求锁定就越严格,锁的市价越长久,因此隔离级别越高,一致性就越高,同时性能也影响很大。

16.sql server中存储过程和函数
1)CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int) 
RETURNS TABLE 
AS 
RETURN 

SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'Total' 
FROM Production.Product AS P 
JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID 
JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID 
JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID 
WHERE C.StoreID = @storeid 
GROUP BY P.ProductID, P.Name 
); 
GO

SELECT * FROM Sales.ufn_SalesByStore (602); 
2)存储过程
CREATE PROCEDURE HumanResources.uspGetEmployees 
@LastName nvarchar(50), 
@FirstName nvarchar(50) 
AS 
SET NOCOUNT ON; 
SELECT FirstName, LastName, JobTitle, Department 
FROM HumanResources.vEmployeeDepartment 
WHERE FirstName = @FirstName AND LastName = @LastName; 
GO

EXEC HumanResources.uspGetEmployees @LastName = N'Ackerman', @FirstName = N'Pilar';

17.Sqlserver中经常使用函数
1)concat链接函数;2)length返回字符串的长度;3)lower转换成小写;4)upper;5)ltrim删除左边的自负互传
6)substr截取字符串;7)replace替换字符串;8)
聚合函数、配置函数、转换函数、加密函数、游标函数、日期和时间函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统函数、文本和图像函数等。9)sum、coun、max、min、avg

18.经常使用的SQL
1)经常使用的单词,create(建立)、drop(删除),适用于(database、table、view、index)
2)修改列,alter table tablename add column col type
3)基本sql语句
3.1)选择:select * from talename where 范围
3.2)插入:insert into tablename(col1,col2) values("col1","col2")
3.3) 删除:delete from tablename where 范围
3.4)更新:update tablename set col1="col1",col2="col2"

19.Web常见的安全漏洞
1)安全攻击
1.1)SQL,HTML,JS,OS命令注入
1.2)XSS(CSS)跨站脚本攻击,利用站内信任用户,在WEB页面插入恶意script代码
1.3)CSRF跨站请求伪造
1.4)目录便利漏洞
1.5)参数篡改
1.6)会话劫持
2)防止攻击的措施总结
2.1)对用户输入的数据进行全面安全检查或过滤,尤为注意检查是否包含SQL或XSS特殊符号。(服务器和客户端都须要验证)
2.2)不要使用管理员权限的数据库链接,不要动态拼接sql
2.3)机密信息加密,不能使用明文
2.4)每一个页面加载时,对用户进行合法性验证
2.5)登录后session中的敏感信息进行加密,避免在永久cookie中存储敏感信息,重要的cookie信息标记为http only
2.6)发送敏感信息时使用SSL,POST方式。尽可能使用新型web http安全协议
2.7)不要直接抛出异常的详细信息给用户,异常返回友好的页面,防止用户看到敏感信息
2.8)在服务器与网络的接口处设置防火墙,用于阻断外界用户对服务器的扫描和探测
2.9)限制网站后台访问权限,如:禁止公网IP访问后台,禁止服务员使用弱口令
2.10)限制敏感页面或目录的访问权限
2.11)项目发布前使用漏洞扫描软件,如IBM appScan,UnisWebScanner

20.Cookie和session
因为HTTP是无状态的协议,因此服务器端用记住用户登陆的状态,就须要某种机制来识别具体的用户,这个机制就是session
服务器如何识别特定的用户,这个时候cookie就产生了,每次http请求的时候,客户端都会发送相应的cookie信息到服务器,
第一次建立session的时候,服务器会在http协议中告诉客户,须要在cookie里面记录一个sessionid,之后每次请求把这个
会话id发送服务器,服务器就知道是谁了。
session是服务器端保存的一个数据结果,用来跟踪用户状态,这个数据能够保存在集群、数据库、文件中
cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现session的一种方式

21.http经常使用协议状态
200:请求被正常处理 204:请求被受理但没有资源能够返回
206:请求一部分 301:永久性重定向
400:请求报文语法有误,服务器没法识别 401:请求须要认证
403:请求的对应资源禁止被访问 404:服务器没法找到对应资源
500:服务内内部错误 503:服务器正忙

22.web跨域解决办法在JavaScript中,有一种很重要的安全性限制,被称为“Same-Origin Policy”(同源策略), 即JavaScript只能访问与包含他的文档在统一域名下的内容。跨域处理方法:1)JSONP原理:js脚本,css样式文件,图片,这三种是与页面自己不一样源的,JSONP就是利用script中src属性没有限制达到跨域请求的:动态添加一个<script>标签来实现。固然这些都是get请求2)CORS策略须要服务器对CORS的支持,设置Access-Control-Allow-Origin来进行。3)document.domain+iframe的设置主域名相同的条件下才鞥进行4)HTML5的postMessage在IE中使用5)使用window.name来进行跨域