从事多年的开发,对于.net可以说有一定的总结,有关于教科书般的文档,献于交流.
本文整理了当前企业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)
...
算法
线性表
二叉树
栈与队列
...
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反编译工具