從事多年的開發,對於.net能夠說有必定的總結,有關於教科書般的文檔,獻於交流.css
本文整理了當前企業web開發中的管理系統,商城等系統的經常使用開發技術棧。html
一元運算符(+、-、!、~、++、--)前端
算術運算符(*、/、%、+ 、 – )java
移位運算符(<< 、>> )mysql
關係和類型測試運算符(==、!=、<、>、<=、>=、is 和 as)ios
邏輯運算符(&、^ 和 | )web
條件邏輯運算符(&& 和 || )算法
空合併運算符(??)條件運算符(它也稱爲三元運算符,?: )sql
賦值運算符(=、+=、-=、!=、/=、&=、|=)數據庫
Try(用於捕捉在塊的執行期間發生的各類異常)
Checked 語句和 Unchecked(用於控制整型算術運算和轉換的溢出檢查上下文)
Lock(獲取某個給定對象的互斥鎖,執行一個語句,而後釋放該鎖)
Using(獲取一個或多個資源,執行一個語句,而後釋放該資源)
abstract抽象類
sealed密封類
static靜態類
partial分部修飾
訪問修飾符(public、protected、internal 和 private )
#region:指定一個可展開或摺疊的代碼塊
#endregion:它標識着 #region 塊的結束
#define: 它用於定義一系列成爲符號的字符
#undef:它用於取消定義符號
#if、#else、#elif、#endif:用於建立複合條件指令
Delegate、Lambda、Action、Func、Predicate、事件EventArgs
泛型類、泛型方法、泛型約束、泛型接口、逆變與協變
Linq to sql / Linq to DataSet / Linq to Object / Linq to Xml
迭代器yield與懶加載Lazy
反射拼接SQL語句、反射轉換Json/Datatable...、序列化反序列化(ISerializable)、反射動態調用dll、反射動態配置擴展
IO類、Json.NET、Http輔助類(HttpClient、Restsharp、WebClient、WebRequest)、爬蟲類、文件壓縮類、條形碼 、金額、時間、Assembly等類的實現
IEnumerable
IEnumerator
實現Foreach
.
ICollection
IList
集合
.
IComparable
IComparer
實現比較方法
.
IDictionary
鍵值對
.
IDisposable
釋放非託管資源
原生的ADO.NET
Connections. 用於鏈接和管理針對數據庫的事務。
Commands. 用於發出針對數據庫的SQL指令。
DataReaders. 用於從SQL Server數據源讀取只進流的數據記錄。
DataSets. 用於針對結構型數據,XML數據和關係型數據的存儲,遠程處理和編程。
DataAdapters. 用於推送數據到DataSet,並針對數據庫協調數據。
...
ORM框架
EF
Dapper:最多見的輕量級ORM框架(開源)
Nhibernate:最多見的重量級ORM框架
...
Thread/ThreadPool/Task/Await/Async/Parallel...
多線程
多線程中的同步、併發、異常等處理
...
TPL異步
異步編程模型(APM)
基於事件的異步模式(EAP)
...
算法
線性表
二叉樹
棧與隊列
...
Routing路由
Binding模型綁定
new ChildActionValueProviderFactory(),
new FormValueProviderFactory(),
new JsonValueProviderFactory(),
new RouteDataValueProviderFactory(),
new QueryStringValueProviderFactory(),
new HttpFileCollectionValueProviderFactory()
...
AOP面向切面(經常使用特性(Attribute)及自定義特性)
元數據
驗證基類System.ComponentModel.DataAnnotations.ValidationAttribute
System.ComponentModel.DataAnnotations.CompareAttribute
System.ComponentModel.DataAnnotations.CustomValidationAttribute
System.ComponentModel.DataAnnotations.DataTypeAttribute
System.ComponentModel.DataAnnotations.MaxLengthAttribute
System.ComponentModel.DataAnnotations.MinLengthAttribute
System.ComponentModel.DataAnnotations.RangeAttribute
System.ComponentModel.DataAnnotations.RegularExpressionAttribute
System.ComponentModel.DataAnnotations.RequiredAttribute
System.ComponentModel.DataAnnotations.StringLengthAttribute
System.Web.Security.MembershipPasswordAttribute
.
Filter
IAuthenticationFilter(驗證過濾器 MVC5)驗證是否合理請求,是否合理用戶
IAuthorizationFilter(受權過濾器)
AuthorizeAttribute
RequireHttpsAttribute
ValidateAntiForgeryTokenAttribute
ChildActionOnlyAttribute
...
IActionFilter(動做過濾器-前-後)
ActionFilterAttribute
...
IResultFilter(結果過濾器-前-後)
ActionFilterAttribute
...
IExceptionFilter(例外過濾器)
HandleErrorAttribute(在FilterConfig就已被註冊)
...
RazorViewEngine視圖引擎
WebApi
數據庫服務端、客戶端、圖形界面管理工具、數據庫語言(PL-sql,T-sql,sql)、數據庫安全等概念
視圖、存儲過程、遊標、中間表、觸發器、計劃任務等經常使用技術
數據庫分庫、拆表、分佈式、集羣、備份、故障調控等方案
數據庫三大範式與反範式
RBAC(Role-Based Access Control,基於角色的訪問控制)權限模型
數據庫機制
索引
存儲引擎
事務
四大特性(ACID)
原子性 Atomicity
一致性 Consistency
隔離性 Isolation
持續性 Durability
併發產生的問題
髒讀
幻讀
不可重複讀
...
解決方案—隔離級別
讀未提交Read uncommitted
讀已提交Read committed (mssql、oracle)
可重複讀Repeatable read(mysql)
串行化Serializable
鎖機制
種類
粒度
加鎖方式
...
數據庫輔助工具:Power Designer、EZDML、ER Studio、Rose、Microsoft Visio...
Oracle
最貴,功能最多,不開源,最安全...
Mysql
免費,功能通常,開源,相對不安全...
MsSql(SqlServer)
中等貴,支持平臺最少,不開源,使用最方便...
PostgreSQL
與其餘關係型數據庫相比,PostgreSQL獨特的地方是它支持高度須要的、完整的面向對象以及關係型數據庫的功能
Sqlite
一個自包含的、基於文件的數據庫,可移植性很是好
...
MongoDb:是一個基於分佈式文件存儲的數據庫
Hbase:屬於hadoop(分佈式系統)生態圈的組件,能存儲海量數據
Cassandra:優異的列式存儲NoSQL
Redis:基於內存的數據存儲系統,支持多種類型存儲,適用於高併發場合
Memcache:基於內存的數據存儲系統,高性能分佈式內存緩存服務,適用於高併發場合
...
經過服務整合來解決系統集成的一種思想
.
WSDL
Web Services Description Language是一個用來描述Web服務和說明如何與Web服務通訊的XML語言。爲用戶提供詳細的接口說明書
UDDI
Universal Description,Discovery and Integration統一描述、發現和集成, 提供一種發佈和查找服務描述的方法。UDDI 數據實體提供對定義業務和服務信息的支持。
SOAP
Simple Object AccessProtocol,簡單對象訪問協議,基於XML 和 HTTP 用於在應用程序之間進行通訊的一種通訊協議
Web Services:基於SOAP協議,數據格式是XML
Wcf/Wcf Rest:能夠不依賴於IIS,基於SOAP,支持多種通訊協議,但配置繁瑣
測試工具:SoapUI...
REST
REpresentational State Transfer ,表現層狀態轉移,是一種架構風格,提供了設計概念原則和約束。
RESTful
知足這些原則和條件的就稱RESTful架構
Web API:RESTful的實現,一個用於構建HTTP服務的框架
測試工具:Fiddler、Postman、Jmeter...
微服務
是SOA的一種實現,更側重於組件化和服務化
JSON-RPC
Remote Procedure Call Protocol,遠程過程調用協議,高性能二進制協議,比RESTful要高效(相似於Web Services的使用風格)
三大基本特性
繼承,封裝,多態
抽象類abstract和接口interface的各類用法及實現
Virtual、abstract、override、New、extern等關鍵字的含義及用法
設計模式的應用
...
六大基本原則(高內聚,低耦合)
單一職責原則SRP(Single Responsibility Principle)
開放封閉原則OCP(Open-Close Principle)
裏式替換原則LSP(the Liskov Substitution Principle)
依賴倒置原則DIP(the Dependency Inversion Principle)
接口分離原則ISP(the Interface Segregation Principle)
最少知識原則(Least Knowledge Principle)(也稱:迪米特原則)
23種設計模式
建立型
結構型
行爲型
瀏覽器自身緩存技術(cache control,與服務器約定,js /css等緩存)
Session(SessionId)(會話,爲了彌補http協議的無狀態特性)
Cookie(瀏覽器存儲,爲了彌補http協議的無狀態特性)
Localstorage(Html5新特性 瀏覽器本地存儲,爲了彌補Cookie存儲不足)
Application(服務器全局變量)
Static(依賴於IIS,進程回收會丟失)
Cache(服務器緩存)
MVC
ASP.NET MVC
MVP
事件模型
ASP.NET Web form
System.UI.Page
ViewState
...
Winform
MVVM
在.Net中(主要應用於WPF、Silverlight、WP7)
Prism - Brian Lagunas微軟產品經理,微軟MVP,一個跨平臺的桌面和移動MVVM開發框架,開源。
Catel - Catel是一個專一於MVVM(WPF,Silverlight,Windows Phone和WinRT)和MVC(ASP.NET MVC)的應用程序開發平臺。 Catel的核心包含一個IoC容器,模型,驗證,記念,消息中介,參數檢查等。
...
在前端中
Angular
Vue
Knockout
React
...
MONO
.Net Core
CoreCLR
CoreRT for .NET Core
.NET Core Base Class Library
...
.Net Framework
.NET Framework Base Class Library(BCL基類庫)
System.Web(ASP.NET的核心)
ASP.NET與IIS管道模型:
經典模式IIS5/IIS6:
IIS管道模型
ASP.NET管道模型
...
集成模式IIS7:
HttpContext
...
IIs的經常使用功能及使用及配置:
請求篩選、失敗請求跟蹤等
.Net MVC生命週期
Httphandler、HttpModule、Globar的編寫及應用...
...
OWIN解耦
Open Web Server Interface for .NET,定義了一種中間件在管道中用於處理請求和相關響應的標準方式,是種規範,用於解耦Web 服務器和Web 應用程序。
OWIN的實現:Katana(由微軟早期開發的開源OWIN組件集合)
OWIN Layer(定義的一系列層)
Application(應用程序)
Middleware(中間件)
Nanacy.Owin
WebApi
Signalr
FubuMVC
Simple.Web
DuoVia.Http
...
Server(服務)
Microsoft.Owin.Host.SystemWeb
Microsoft.Owin.Host.HttpListener
Helios
(Asp.Net5之後就是Microsoft.AspNet命名空間)
...
Host(宿主)
IIS
Custom Host
OwinHost.exe
Node.Js(connect-owin)
...
.NET CLR(Commen Language Runtime)公用語言運行時
核心:公共語言基礎(Common Language Infrastructure,CLI),提供了定義的規範接口、與工具
1.項目源代碼被 .Net Framework編譯器( csc , C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe )編譯成EXE或者是DLL文件。
2.被CSC編譯後的EXE/DLL文件叫作 IL文件。Intermediate Language (IL)中間語言,在.Net中,稱之爲 Microsoft IL(MSIL)微軟中間語言(右鍵對項目進行生成的時候實際上就是這一步)
3.CLR會將MSIL經過JIT(Just In Time)編譯器進行第二次編譯,將其編譯成本地平臺的CPU指令。(若是擁有能在Linux運行的CLR,代碼就能跨平臺運行)
.
C#源碼——(CSC編譯器)——MSIL文件(dll/exe)——(CLR中的JIT編譯器)——CPU執行
OSI網絡通訊
物理層
以二進制數據形式在物理媒體上傳輸數據
數據鏈路層
傳輸有地址的幀,錯誤檢測功能
網絡層
爲數據包選擇路由
IP,ICMP,RIP...
傳輸層
提供端對端的接口
TCP、UDP...
會話層
創建或解除與其它接點的聯繫
表示層
數據格式化,代碼轉換,數據加密
應用層
HTTP,FTP,SMTP...
Http狀態碼
1xx:信息提示,表示請求已被成功接受,繼續處理,請求範圍100~101
2xx:成功,服務器成功響應請求,請求範圍200~206
3xx:重定向,請求範圍300~305
4xx:發送一些服務器沒法受理的東西
5xx:一條有效請求,但服務器掛了
經常使用HTTP消息頭(Http Header)
Request請求頭
Authorization:Basic base64646464646464=== (驗證)
Accept-Encoding:gzip (指定瀏覽器能夠支持的web服務器返回內容壓縮編碼類型)
Cache-Control:max-age=60(指定請求和響應遵循的緩存機制,max-age爲 當前60秒內再次訪問不會去服務器請求)
Cookie:ZJF(該請求域名下的全部cookie值一塊兒發送給web服務器)
Content-Type:application/x-www-form-urlencoded(是以什麼格式來傳輸,請求的與實體對應的MIME信息)
Accept:text/plain(指定客戶端可以接收的內容類型)
Range:bytes=0-999(經常使用做斷點續傳,設置請求的指定範圍,服務器則返回Content-Range: bytes 0-999)
Referer: (當前請求來源的網頁地址)
Origin: (和Referer差很少,只存在於POST請求)
Host:: (指定請求的服務器的域名和端口號)
User-Agent::Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36(當前客戶端的信息)
Expect:100-continue(握手失敗,請求頭域類型不匹配,由此致使的API接口調用失敗)
Response返回頭
Connection: keep-alive(鏈接方式,很重要)
Access-Control-Allow-Origin: *(跨域,很重要)
Set-Cookie: UserID=admin; Max-Age=3600; Version=1
Content-Encoding:gzip
實時通訊方案
.Net Signalr+
Ajax輪詢
Comet
WebSocket(SuperWebSocket,WebSocket服務器)
SSE(Server-sent Events服務器發送事件)
...
DNS解析流程
常見 域名解析記錄
A記錄:用來指定域名或子域名對應的IP地址記錄,保證域名指向對應的主機
CNAME記錄:別名記錄,該記錄容許你爲本身的主機設置別名
MX記錄:郵件路由記錄,當發送郵件時,Mail 服務器先對域名進行解析,查找mx記錄
TXT記錄:是域名系統(DNS)中由域名託管服務商存儲的一種資源記錄,其做用是防止垃圾郵件濫用行爲
AAAA記錄:指定網站域名對應的IPv6地址記錄
NS記錄:Name Server,用於指定域名是由那個DNS服務器來進行域名解析
...
JavaScript和Css模塊化
CSS Sprites:將一個頁面涉及到的全部零星圖片都包含到一張大圖中去,這樣一來,將N次請求變成一次請求
劃分資源域
合理運用緩存技術
靜態文件(圖片、css、js、html )緩存: cdn技術、squid緩存服務器、瀏覽器(客戶端)緩存
HTML5 application cahce API離線緩存
應用層緩存:Cache、Redis緩存數據庫、memcache緩存數據庫
數據庫緩存:數據庫自己的緩存機制
...
瞭解瀏覽器工做機制:Css放頂部,Js放底部,壓縮Html,能配置Expires/Cathe-Control,ETag,使用 gzip 壓縮
用ISP(互聯網服務提供商)提供的文件存儲等技術
提升DNS域名解析速度
掌握SEO
確保網站是能夠被索引的: robots.txt,Robtots 標籤
確保網頁是能夠被索引的:確保爬蟲能夠看到全部的內容、使用描述性的錨文本的網頁
擅長標籤編寫:帶有 H1 標籤、關鍵詞放 URL 中、加粗文字、Descripiton 標籤、圖片文件名、ALT 屬性帶有關鍵詞
...
刪除沒必要要的HTTP響應頭
移除X-AspNet-Version HTTP頭
移除X-AspNetMvc-Version HTTP頭
移除X-Powered-By HTTP頭
移除Server HTTP頭
...
用戶數據分析
PV IP UV
訪問流量來源
瀏覽器
移動設備
...
...
App_Browsers:包含瀏覽器定義(.browser文件),ASP.NET會使用這些文件來識別個別瀏覽器並判斷它們的功能
App_Code:包含用於公用程序和商務對象(Business Object) , (例如, .cs ; .vb和.jsl文件)的程序源代碼,要將它編譯爲應用程序的一部分
App_Data:包含應用程序數據文件.包括MDF文件,XML文件與其餘數據庫文件
App_GlobalResources:包含資源(.resx和.resources文件),這些資源會編譯成具備全局範圍的組件
App_LocalResources:包含資源(.resx和.resources文件),這些資源會與特定的頁面,擁護控件或應用程序的主頁面(MasterPage)相關聯
App_WebReferences:包含參考合約文件(.wsdl文件),結構描述(.xsd文件)和探索文件(.disco和.discomap文件),可定義Web應用以用語應用程序
Bin:包含空間,組件或你要在應用程序中應用其餘程序代碼的已編譯組件(.dll文件).在[Bin]文件夾中以程序代碼表示的任何類, 都會自動在應用程序中應用到
Web.config:用來儲存Asp.net Web應用程序的配置信息,經過繼承關係,每一個Web.config將配置設置應用到它所在的目錄及虛擬子目錄下
...
Bin:是二進制binary的英文縮寫,用來存放編譯的結果
Debug 調試版本 開發環境 有調試信息
Release 發行版本 代碼更小,執行更快,編譯更嚴格,更慢 沒有調試信息
Obj:是object的縮寫,用於存放編譯過程當中生成的中間臨時文件,用來加快編譯速度
Debug
Release
Html5+Css3
JQuery插件語法
Js實現封裝-繼承-多態
實現一個簡單的MVVM框架
實現一個簡單的js模板引擎
Angular
路由、模塊化、控制器、指令、做用域、模板、鏈式函數、過濾器、服務、依賴注入...
React
虛擬DOM,組件化...
...
單向散列加密(雜湊函數、Hash函數)
把任意長的輸入消息串變化成固定長的輸出串且由輸出串難以獲得輸入串的一種函數,用於產生消息摘要,密鑰加密
MD5,SHA,MAC,CRC...
對稱加密
使用的密鑰(yue)只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密
DES,3DES,AES,TDEA,Blowfish,RC5,IDEA...
非對稱加密(公私鑰加密)
指加密和解密使用不一樣密鑰的加密算法,分公鑰和私鑰
RSA,Elgamal,揹包算法,Rabin,D-H,ECC...
Secure Socket Layer,安全套接字層,保護Web通信,以實現客戶端和服務器之間的安全通信
HTTPS:是在HTTP上創建SSL加密層,並對傳輸數據進行加密,是HTTP協議的安全版
Let's Encrypt,國外一個公共的免費SSL
StartSSL,被各大瀏覽器所支持,但只免費一年
...
Transport Layer Security,安全傳輸層協議,用於在兩個通訊應用程序之間提供保密性和數據完整性,創建在SSL 3.0協議規範之上,是SSL 3.0的後續版本
滲透注入
Sql注入、命令表達式注入、SSRF注入、XSS注入、CSRF注入、XXE注入...
滲透注入檢測工具
DirBuster目錄滲透工具,專門用於探測Web服務器的目錄和隱藏文件
Nmap網絡鏈接端軟件,網絡鏈接端掃描軟件,用來掃描網上電腦開放的網絡鏈接端
Pangolin Sql注入工具
AppScan業界領先的web應用安全監測工具(軟件界面能夠選擇中文,不過是收費的)
...
欺騙
ClickJacking(點擊劫持)
透明iframe
HTTP頭——X-Frame-Options
圖片掩蓋接口
暴力破解
DDOS
文件安全
配置文件、備份文件暴露讀取、未受權修改、未受權上傳
邏輯安全
未受權訪問、上下流程順序可亂序、無限遞歸
二進制安全
(VS中有性能分析工具)
堆棧溢出(不少人都碰過)、緩存區溢出、內存泄漏
第三方認證
Oauth2.0
SSO單點登陸
同源策略
CAS解決方案
IIs/.Net認證
Basic
Digest Authentication
Windows
Forms
代碼管理
Git:免費、開源的分佈式版本控制系統,用的人最多
Svn:集中式的版本控制系統,一個強大的備份服務器
TFS:微軟源代碼管理工具
自動化測試
UI測試
VS自帶的UI測試工具
...
單元測試(Unit Testing)
Tdd測試驅動開發(Test-Driven Development)
VS自帶的單元測試工具,Xunit,Nunit,Moq,Faker.Net
性能分析
VS自帶的性能分析工具,MiniProfiler
壓力測試
概念
吞吐率(Throughput)
QPS每秒查詢率(Query Per Second)
TPS每秒事務數(Transaction Per Second),併發用戶數
...
VS自帶的壓力測試工具,HttpTest4Net,Jmeter...
安全檢測
自動化部署
VS的Web Deploy,Jenkins...
監控平臺
自動化故障調控
負載均衡
何時纔會負載均衡(什麼是負載均衡)
負載均衡的幾種實現
OSI層面,在網絡7層協議基礎上實現的負載均衡
軟件層面
負載均衡算法
權重輪循均衡
權重隨機均衡
響應速度均衡
最少鏈接數均衡
處理能力均衡
DNS響應均衡
集羣
負載均衡服務器
應用服務服務器
文件系統服務器
數據庫服務器
緩存服務器
...
分離模式
先後端分離
動靜分離
數據庫讀寫分離
服務分離
業務分離
...
故障可彈性
服務一致性
中心化配置
CS-Script:可作源碼式插件開發,規則引擎,流程引擎...
...
Mvc Area插件開發
OSGi.NET
...
消息隊列 - Message Queue(MQ),是一種應用程序之間的通訊機制,將部分無需當即回調獲取結果,而且耗時的操做,使用異步處理的方式提升服務器的吞吐量及性能.如秒殺活動,上傳任務,日誌記錄等
.
MSMQ
微軟官方推出的消息隊列框架
RibbitMq
基於 AMQP 系統協議,由 Erlang 語言開發,開源的消息隊列,支持AMQP,XMPP, SMTP, STOMP等協議,使用簡單
ZeroMQ
一個輕量級的消息通訊組件,側重於點對點的消息傳輸上
Redis
雖是一個Key-Value的NoSQL數據庫,但自己也有Queue隊列功能
...
基於面向對象6大原則之 - 依賴倒置原則DIP - 工廠模式實現
IOC - inversion of control 控制反轉,調用者再也不建立被調用者的實例,由框架(容器)建立
DL - Dependency Lookup 依賴查找,容器提供回調接口和上下文環境給組件
DI - Dependency Injection 依賴注入,容器建立好實例後再注入調用者
.
Autofac
最爲流行的IOC框架之一,輕量且高性能
Unity
最爲流行的IOC框架之一,微軟出品
Spring.NET
以Java版的Spring框架爲基礎,提供了多種功能
Ninject
一個輕量級的注入框架
...
Quartz
開源的做業調度框架,是Quartz的C#移植版本
...
Log4net
從java平臺下移植過來的很是優秀的日誌記錄框架
Nlog
相對於Log4net,配置更爲簡單
Microsoft.Framework.Logging
ASP.NET5中的日誌框架集
...
Lucene.net
是Lucene的.net移植版本,它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構
ElasticSearch
是基於Lucene架構面向企業搜索應用的擴展,提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口
盤古分詞
中文分詞組件,做者肖波
HubbleDotNet
開源數據庫全文搜索引擎,做者肖波
...
Business Process Management - BPM 業務流程管理
.
Windows Workflow Foundation - WWF
微軟的工做流產品,提供一套工做流引擎和VS解決方案自帶的流程設計器
NetBPM
從JBpm1移植到.NET平臺下的開源工做流項目
CCFlow
國產開源工做流
Colorful-IDE:能夠更換VS的壁紙
ReAttach:能夠快速附加到進程(開源)
C# Outline:VS代碼塊摺疊插件
Reshaper:即時分析代碼質量,消除錯誤,安全地更改代碼庫等
OzCode:VS調試時候的輔助插件
LINQ Pad:用來測試Linq查詢的插件
Rextester:在線測試C#代碼
SmartAssembly:.Net加密混淆工具
ConfuserEx:.Net加密混淆工具
ILSpy:.Net反編譯工具
Reflector :.Net反編譯工具