有很多朋友有的因為興趣,有的因為生計而走向了.Net中,有很多朋友想學,但是又不知道怎麼學,學什麼,怎麼系統的學,為此我以我微薄之力總結歸納寫了一篇.Net web開發技術棧,以此幫助那些想學,卻不知從何起的朋友。
本文整理了目前企業web開發中的管理系統,商城等系統的常用開發技術棧。
一進制運算符(+、-、!、~、++、--)
算術運算符(*、/、%、+ 、 – )
移位運算符(<< 、>> )
關系和類型測試運算符(==、!=、<、>、<=、>=、is 和 as)
邏輯運算符(&、^ 和 | )
條件邏輯運算符(&& 和 || )
空合并運算符(??)條件運算符(它也稱為三元運算符,?: )
指派運算符(=、+=、-=、!=、/=、&=、|=)
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)
基于任務的異步模式(TAP)
算法
線性表
二叉樹
棧與隊列
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(結果過濾器-前-後)
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
鎖機制
種類、粒度、加鎖方式
悲觀鎖:開銷大,避免長事務
表鎖、行鎖/讀鎖、寫鎖
樂觀鎖:開銷小,讀大于寫
Version版本号機制
資料庫輔助工具: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)
最少知識原則LKP(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
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模闆引擎
路由、子產品化、控制器、指令、作用域、模闆、鍊式函數、過濾器、服務、依賴注入...
虛拟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
Json Web Token
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反編譯工具
總結歸納不易,如果有疑問或異解請留言給我。
後面我會寫一些文章來讓大家系統的學習web開發,而這篇技術棧我也會不斷更新。
我喜歡和我一樣的人交朋友,不被環境影響,自己是自己的老師,歡迎加群 .Net web交流群, QQ群:166843154 欲望與掙紮