复习知识点
WCF服务
引用命名空间 system.servcemodel
后缀SVC
终结点endpoint
A address WCF服务地址
B binding 绑定 实现在Client和Service通信的所有底层细节,比如用什么通讯协议,传递什么数据格式
C Contract 合同 Contract的主要的作用是暴露某个WCF Service所提供的所有有效的方法。Contract实际上是把每个方法的转化成为相对应的消息。
Service配置节[必须有]:配置服务、接口和终结点。每个Service都会有以下两个属性。name:名称空间.类名[服务的具体实现类]。behaviorConfiguration:一个在behaviors节点中找到的名称。
Binding配置节[可有可无]:配置绑定,如http,tcp等。
Behavior配置节[可有可无]:配置行为,如认证等。
WCF在通信过程中有三种模式:请求与答复(默认)、单向、双工通信。
- 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答复后才能继续执行其他程序
2.客户端向服务端发送求,但是不管服务端是否执行完成就接着执行下面的程序
WEBAPI(restful)
webapi和mvc 的区别
Web API更倾向于基于HTTP协议的服务,直接返回用户的数据请求。MVC是建站的一种框架,倾向于返回用户的页面请求。WebApi更加轻量级。
寄宿方式不同:mvc只能寄宿在IIS上,而webapi可以寄宿在IIS、windows服务
SOA 面向服务的架构
SOAP webservce 通讯协议
Http请求方式使用特性
特性路由(2.0) Attribute Route [Route(“api/controller/action”)]
可以使用[FromUri]属性,使Web API来从查询字符串中获取复杂类型的值,
使用[FromBody]属性可以使Web API从请求主体获取原始类型的值
接口安全知识
Accesstoken:客户端使用给定的账号密码请求服务,服务端对账号密码按一定加密规则进行加密,然后缓存到服务端并设置过期时间,最后返回给客户端,客户端可将accesstoken进行缓存,需要是不必没都要去重新请求。
时间戳:每一次请求带上请求的时间戳,和服务端时间进行比较,超过一定时间可视为请求超时。
签名:客户端按照一定的加密规则将accesstoken、请求的参数进行加密生成签名,在服务端可验证签证是否正确来保证请求的参数没有被篡改。
网站安全知识
XSS(跨站点脚本攻击)
攻击方式:写入脚本到数据库
解决方法:对请求的参数做过滤
CSRF 跨站点请求伪造
攻击方式:用户登录网址A以后,然后在未登出的情况下打开网站B,网站B通过带有网站A的登录的登录信息伪造请求网站A
解决方法
使用POST请求,每一次请求都要一个TOKEN参数,TOKEN是一个随机加密的参数.
每次刷新页面TOKEN也会刷新
C#基础知识 (封装、继承、多态)
值类型:直接在栈中开辟空间存放数据
整数:小数,bool,char,stuct
引用类型 在堆中开辟空间存放数据,在栈中存放指向堆中数据的地址
字符串,类,数组
GC回收机制:当内存堆中数据没有被栈中任何地址引用,则堆中数据就会被回收掉
String/StringBuilder的区别
- 使用String不需要实例化一个对象而StringBuilder需要实例化一个对象后才能使用
- 每次给String赋值是都会在堆中开辟新的空间,栈中引用指向堆的新地址(每次给String赋值其实是生成了一个新的String)。而StringBuilder实例化后会在堆中开辟初始化大小的空间,每次像里面增加新的内容都是在该空间后面增加,而不需要开辟新的空间,如果内存不够了则在此基础上增加一倍的内存空间。
const 常量/Readonly 只读
区别const声明一个变量时必须初始化,而readonly声明一个变量可以在构造方法里面初始化
const只能在初期就使用常量初始化好。对于每一次编译后的结果,const的值是固定的,而readonly的值是可以在运行的时候才确定值的
抽象方法(abstract)/虚方法(virtual)
抽象方法必须在派生类中重写,虚方法在派生类中重写也可不进行重写(override)
接口(interface)/抽象类(abstract class)
相同点
- 接口和抽象类都不可被实例化
- 抽象类和接口中都包含有抽象方法
区别
- 一个类可继承多个接口,但是只能继承一个抽象类
- 接口中只能包含抽象方法(只有声明,没有方法体),而抽象类中不仅能包含抽象方法还可包含普通方法。
委托(delegate)、事件(event)
Action:无返回值的委托
Void NoParaMethod(string para){}
Action<string> a=new Action<string>(NoParaMethod);
Func:有返回值的委托
Bool HaveParaMethod(string para){return false;}
Func<string,bool> a=new Func<string,bool>(HaveParaMethod);
多播委托:同时指向几个方法的委托
Void MethodA(string para){}
Void MethodB(string para){}
Action<string> a=new Action<string>(MethodA);
a+=MethodB;
泛型约束(where T:Class)
T:结构
类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。有关更多信息,请参见使用可以为 null 的类型(C# 编程指南)。
T:类
类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new()
类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
T:<基类名>
类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称>
类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
T:U
为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束
Linq、Lambda 表达式
特性 Attribute Sealed Class MyAttribute:Attribute
多线程、Lock
四种创建多线程的方式
设计模式(单例模式,工厂模式,观察者模式)
SQL相关
优化
减少不必要的查询字段
关联查询和排序尽量使用主键,因为主键一般是索引
查询条件尽量使用到索引,避免使用模糊查询
复杂的业务和查询尽量使用视图和存储过程
使用存储过程的好处
维护方便(不用修改程序)、执行快(预编译)
数据库读写分离(高并发)
主(负责写、一台、负责同步数据到从数据库)从(负责读、可多台)数据库
对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟(同步有延时)。
ADO.NET五大对象
Connection 连接对象
Command 命令对象,指示要执行的命令和存储过程
DataReader 是一个向前的只读的数据流
DataAdapter 是功能强大的适配合器,支持增删改查的功能
DataSet 是一个数据级对象,相当于内存中的一张表或多张表
索引
聚集索引(唯一索引)
非聚集索引
存储过程
Create proc_page(@pagesize int,@pageindex)
As
Select num.* from (select row_number() over(order by id desc) num,* from tablename) info
Where between @pagesize*(@pageinde-1)+1 and @pagesize*@pageindex
事务
Begin transaction
Commit transaction
Rollback transaction
视图
Create View View_name
As
Select * from A
A表数据插到B表
B表存在 insert into B select * from A
B表不存在 select * into B from A
关键字
Convert(char(10),getdate())
Select @@Identity
Decalre @page int
Select distinct name from A
If exsits()
Row_number() over(order by id desc)
Case when 条件 then A else B end
Select a from A group by a having max(a)>0
Average 平均值
ASP.NET MVC 路由机制(Route)和过滤器(Filter)
Http请求
HttpMoudle
HttpHander
Httpapplication
Httpcontext
Resqust
Response
四种过滤器 (ASP NET)
IAuthorizationI
IActionFilter
IExceptionFilterI
IResultFilter
五种过滤器(ASP.NET CORE)
IAuthorizationI
IActionFilter
IExceptionFilterI
IResultFilter
IResourceFilter