復習知識點
WCF服務
引用命名空間 system.servcemodel
後綴SVC
終結點endpoint
A address WCF服務地址
B binding 綁定 實現在Client和Service通信的所有底層細節,比如用什麽通訊協議,傳遞什麽數據格式
C Contract 合同 Contract的主要的作用是暴露某個WCF Service所提供的所有有效的方法。Contract實際上是把每個方法的轉化成為相對應的消息。
Service配置節[必須有]:配置服務、接口和終結點。每個Service都會有以下兩個屬性。name:名稱空間.類名[服務的具體實現類]。behaviorConfiguration
Binding配置節[可有可無]:配置綁定,如http,tcp等。
Behavior配置節[可有可無]:配置行為,如認證等。
WCF在通信過程中有三種模式:請求與答復(默認)、單向、雙工通信。
- 客戶端發送請求,然後一直等待服務端的響應(異步調用除外),期間處於假死狀態,直到服務端有了答復後才能繼續執行其他程序
2.客戶端向服務端發送求,但是不管服務端是否執行完成就接著執行下面的程序
WEBAPI(restful)
webapi和mvc 的區別
Web API更傾向於基於HTTP協議的服務,直接返回用戶的數據請求。MVC是建站的一種框架,傾向於返回用戶的頁面請求。
寄宿方式不同: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、請求的參數進行加密生成簽名,在服務端可驗證簽證是否正確來保證請求的參數沒有被篡改。
網站安全知識
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
四種過濾器
IAuthorizationI進入contrller和action之前
IActionFilter
IExceptionFilterI
ResultFilter
緩存相關(redis)
復習知識點