.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 API

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上。

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

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

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,从而可以确定访问的合法性,和访问的渠道。

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

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

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

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来进行跨域

猜你喜欢

转载自blog.csdn.net/suxuelian/article/details/79956663