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 来进行跨域
来源: https://www.cnblogs.com/zhao123/p/8832148.html