.net架构师高级编程技术汇总
汇总.net相关学习使用知识:
好记性不如烂笔头
5.asp.net 反射reflection(原理读元数据,3种加载方法,反射的几种调用方法,反射在MVC,ORM中的应用)
6.asp.net 高级应用 泛型generic(定义,原理,约束,缓存,协变,逆变)
.net架构师的技能:
1..net跨平台技术:
1.1 asp.net core 源码解读:IOC 容器,kestrel监听管道,http管道中间件,鉴权授权(jwt,identityServer4),router&endport,mvc,filter,action,result,view,设计模式
1.2 前后的分离:vue,core webapi,o/rm,8打扩展,
Filter:(middleware,router,filter[middleFilter,AuthorFilter,resourceFilter,exceptionFilter,actionFilter,resultFilter],
ioc,日志组件log4,view引擎,缓存
1.3 abp.vnext:架构分析,内置组件,微服务实践(consul,ocelot,docker,k8s,elk分布式日志)
2. 微服务技术:
1. 微服务用到的组件:nginx,consul,ocelt,skywalking全链路追踪,分布式日志(excetpionless,elk),分布式配置中心(apollo),jenkins(CI/CD,搭建,git+kenkins+harbor),docker,kubernetes,grpx
3.分布式计技术:
1. nosql:redis,mongodb,rabbitmq,elasticsearch,nfs,ELK,分布式锁,分布式事务CAP
4.数据库性能调优:
1.压测工具:jmeter,banchark,
2.clr,多线程(await/async),数据结构(线性表,链表,hash,集合,二叉树,图),排序算法(冒泡排序,插入排序),查找算法(线性查找,二分查找)
arrary,list,set,zset,dictionary
public static SecurityInfo GetSecurityInfoEx(string security)
{
if (SecurityInfos == null)
{
return null;
}
if (_dicSecurityInfo == null)
{
_dicSecurityInfo = SecurityInfos.ToLookup(k => k.Security, v => v).ToDictionary(k => k.Key, v => v.FirstOrDefault());
}
if (security.EndsWith(".SH"))
{
security = security.Replace(".SH", ".SSE");
}
if (security.EndsWith(".SZ"))
{
security = security.Replace(".SZ", ".SZSE");
}
if (_dicSecurityInfo.ContainsKey(security))
{
return _dicSecurityInfo[security];
}
return null;
}
5.定时作业:hangfire,querz
6.架构师涵养:
1.会系统架构(高性能,高可用,高扩展,高伸缩,高安全)
2.DDD(将复杂的系统通过领域边界,分为不同的子领域,便于理解分析页面,通过单一职责原则同一元素之干一件事(分类,方法),实现高质量代码--高内聚底耦合),
工具应用,微服务拆分实际,
3. 项目架构(需求分析-客户用户开发业务分析,架构设计(流程梳理,逻辑梳理,数据视图,物理视图),框架搭建(技术选型,项目分层,框架整合)
4.devops:配置管理持续集成,自动化测试,构建部署,敏捷项目3355,
- DevOps,持续集成,持续交付,就是让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件整体过程更加快捷和可靠,提高开发和运维的效率。
- 瀑布模型:设计--开发--测试--发布
- 敏捷模型:设计--【开发-测试】-【开发-测试】-【开发-测试】--发布
- Devops: 设计--【开发-测试-发布】-【开发-测试-发布】-【开发-测试-发布】
- 蓝绿发布--灰度发布---20% 发布--做到无感发布,有问题及时返回
-------------------------------
高级编程技术:
1..net5
1.c#5-9最新语法
2.泛型generic,反射reflection,特性attribute,委托delegate-event,lambda-linq,
3.多线程thread,await/async,
1.Thread是C#对线程操作封装好的工具类。
2.线程池(ThreadPool),创建了多个线程对象,需要用的时候直接从线程池中取,避免了对象的创建和销毁等代价(享元设计模式)。节约资源 提升性能,控制线程数量,防止滥用。+
3.Task是基于任务的异步编程模型。使用的还是线程池里面的线程。
4.async/await是C#保留关键字,需要结合Task使用,async/await是语法糖,本质上其实是ContinueWith()。
使用await Task可以充分的利用有限的CPU资源。在进行IO操作的时候应该尽量使用await Task。
async用于标识异步方法,方法内部有两种情况:
4.1、没有await:调用方将等待异步方法执行完毕才能接着往下执行;
4.2、包含await:调用方执行异步方法,遇到await后,调用方可以立马往下执行,不需要等待异步方法执行完毕;
5. 表达式目录树expression,io/Serialize,加解密
- Serialize:
- 1、在进程下次启动时读取上次保存的对象的信息
- 2、在不同的AppDomain或进程之间传递数据
- 3、在分布式应用系统中传递数据
- 常见的序列化的方法:
- 1、BinaryFormatter
- 2、SoapFormatter
- 3、XML序列化
2.设计技术:
4.pop,oop,aop,ioc,
5.设计原则:迪米特法则,依赖倒置,接口隔离,里氏替换,开闭原则
6.GOF23设计模式:结构型,行为型,创建型(单例模式,三大工厂,原型模式)
设计模式分为三大类:
设计模式的六大原则:
原则 | 解释 |
单一原则 (SRP) | 一个方法,一个类,一个类库,一个项目,只做一件事 |
开放-封闭原则(OCP) | 软件实体(类、模块、函数)可以拓展,但是不可修改 |
依赖倒转原则(DIP) |
A.高层模块不应该依赖底层,两个都应该依赖抽。B.抽象不应该依赖细节,细节依赖抽象 |
里氏代换原则(LSP) | 子类型必须能够替换掉它们的父类型 |
迪米特法则(LoD) |
如果两个类不必直接通信,那么这两个类不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可通过第三者发起这个调用 最少知道原则:学校只管理班级(不管理学生),班级只管理学生 |
合成/聚合复用原则(CARP) | 尽量使用合成/聚合,尽量不要使用类继承 |
7.数据库设计:3大范式,PD,
- 第一范式(确保每列保持原子性):所有字段值都是不可分解的原子值
- 第二范式(确保表中的每列都和主键相关):一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表
- 第三范式(确保每列都和主键列直接相关,而不是间接相关)
8.主从复制:发布订阅,读写分离,分库分表,垂直拆分,水平拆分
9.MVC5:IOC-DI,4大filter,路由,日志log4,mvc5源码解读
3.框架技术:
10.O/RM:dapper,sqlsugar,ef(映射,linq,延时加载,上下文声明周期,事务,数据访问层,读写分离支持)
11.分布式服务:core webapi(swagger,路由,权限认证,扩展ioc,filter,grpc(prote buffer,双向流,多路复用,http2
12.webservice(iis+xml+http),wcf(tcp/ip+json),webapi(http+json),grpc(http2+proto bufer)
13.IOC:IOC/DI,手写ioc,内置ioc,autofac,
14.hangfire,quart-z
15.微服务技术:nginx,consul,ocelot,jwt,docker,k8s
16.全文检索:elsearch
4.高并发:
17.集群负载均衡:nginx
18.redis:
19.mongodb
20.rabbitmq: 消息生产者确认,消息消费者确认,消息持久化
1.直接交换器,工作方式类似于单播,Exchange会将消息发送完全匹配ROUTING_KEY的Queue,写日志,需要分支处理就可用用这个交换机
2.fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。发布、订阅,广播,一对多
一个fanout1路由绑定多个queue1 bind to fanout1,queue2 bind to fanout1
Topic路由:
Exchange绑定队列需要制定Key; Key 可以有自己的规则;Key可以有占位符;*或者# ,*匹配一个单词、#匹配多个单词,在Direct基础上加上模糊匹配;
usa.news usa.# usa.*
Header Exchange
headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对以及x-match参数,x-match参数是字符串类型,可以设置为any或者all。如果设置为any,意思就是只要匹配到了headers表中的任何一对键值即可,all则代表需要全部匹配。
不需要依赖Key
更多的时候,像这种Key Value 的键值,可能会存储在数据库中,那么我们就可以定义一个动态规则来拼装这个Key value ,从而达到消息灵活转发到不同的队列中去。。。
Class-Student China-Wuhan 存储在数据库中
5.直播技术:
21:流服务云平台:流媒体采集:本地,视频流,直播,点播
22.k8s: 自动化容器关联工具,关联容器,有ui和命令行工具;master(分配工作)--node(承接工作任务)--pod(启动,停止,关闭)
容器实例太多:扩容,缩容--自动化;失效转移--宿主机挂了,自动迁移;滚动发布;监控;
k8s作用:1.自动调用:可以将容器部署到集群的任意一个节点;
2.自动扩容:
3.滚动发布:
4.自动修复:
1.nodes:worker1
2.Pods: 里面是容器,容器里是发布的服务
3.replica sets:副本集:
4.jobs:
MASTER:APIServer,controller,schedule
23.ELK:
ElasticSearch:他是一种分布式日志系统:logstash,kibana elasticsearch
E:ElashticSearch:它是一个数据库,nosql的一种,实现高亮分词;
L:logstash:它是一个收集工具,收集各种各样的数据;
K:kibana:它是一个界面化的管理工具,自带好多功能,如查询,筛选,索引的周期管理;
60%做日志系统,40%做订单管理
redis:内存数据库,8种数据结构;
mongodb:redis额mysql之间的一种数据库,有些存在内存,有些存在硬盘;10亿数据;json存储
es:可以存储各种数据,包含json,20亿数据==500G
elasticsearch: index--type--document--field,支持http请求,restfull风格
database--table--row--column
www.elastic.co
24.JWT:
1. 登录写入凭证
2. 鉴权就是找出用户
3. 授权就是判断权限
4. 退出就是清理凭证
https://jwt.io/
25.webService,WCF,Webapi,CoreWebapi,Proto Buffer的区别:
- PB 是一种语言无关的高性能序列化框架,基于 HTTP/2 + PB, 保障了 RPC 调用
- 的高性能。
- 一个高性能,开源的,跨语言的RPC框架
- 基于 Http/2 传输协议(支持流)
- Protocol buffers高效序列化(JSON / XML)
- Http/2
1 HTTP Header的压缩,采用的是HPack算法
2 HTTP/2的Server Push,非常重要的一个特性
3 请求的pipeline
4 修复在HTTP 1.x的队头阻塞问题
5 在单个TCP连接里多工复用请求
多方式对比
1. WebService:最早-门槛最低,soap+xml累赘,只Http,依赖IIS
2. .NetRemoting:RPC--.NET RPC(限制多)---性能高
3. WCF—集大成者,各种服务各种协议—XML 重---.NET5移除WCF(未来可能又有了)
4. WebApi&Core WebAp
5. gRPC 高效基于http2(header压缩)+PBuffer
Http/2:高性能—专属序列化格式---多路复用双向流---
gRPC对js不是很友好,性能也不总是比webapi好
(gRPC数据量越大,相对性能越好)
内部交互,用gRPC
外部数据,用core webapi
------------------IOC-DI----------
DIP:依赖倒置原则:高层依赖抽象,不应依赖具体细节,封装转移,好处是:
面向对象:1,一个方法满足多资类型,支持下层扩展
只有抽象,没有细节,好扩展
IOC控制反转:把上端对下端的依赖,转移到第三方容器(工厂+配置文件+反射)
DI依赖注入:在构造对象时,将对下端依赖的对象自动初始化并注入(构造函数注入,属性注入,方法注入
IOC控制反转是目标效果
DI依赖注入是手段;
如何使用Unity
nuget:unity
容器三部曲:添加容器并实例化容器,注册类型,获取实例
项目技术,高级知识,架构知识,不用业务的项目采取不同的架构
开发管控:CI/CD,DevOps,k8s+larb
.netframework,.netcoer,移动开发
desktop,web,mobile,game,iot,ai
00.快速走完这段路:
初级--中级--高级工程师(35岁):
==》
架构师(整体思维,宏观把控),
CTO
产品经理
技术总监
项目经理
培训:
架构师(整体思维,宏观把控,项目架构负责人,高级开发),设计好,技术好,口才沟通好;35岁后,让年龄成为你的优势,而不是成为你的劣势!
----------------------------------------------------3.管理职责--------------------------------------------------
1.知识很重要,她虽然不能直接给你财富,但是可以给你很多机会,活到老学到老
2.作为负责人,你需要dui项目的整体规划,你需要有技术人员的视野,有产品经理的思维,要能够和用户打好交道,想用户所想,做用户所需.
3.创业这件事情对我来说就像和一群志同道合的人去征服一座野山,可能过程需要披荆斩棘,可能结果不一定能登顶,但是这个事情的不确定性和它能带来成就感都非常令人着迷
------------------------------------------------------第3方框架-----------------------------------------------------------
https://dotnetchina.gitee.io/furion/ 一个特别好用的.netcore框架
*** 👉 xiaonuo:https://gitee.com/xiaonuobase/snowy 业务架构 架构原理图 数据架构 应用架构 技术架构 部署架构 效果图
DEMO:https://vue.xiaonuo.vip/mgr_user https://vue.xiaonuo.vip
- 👉 Vben-Admin:https://vvbin.cn/doc-next/
DEMO :https://vvbin.cn/next/#/login
*** admin.net: https://gitee.com/zuohuaijun/Admin.NET
demo:http://www.dilon.vip:8866/file
https://gitee.com/zhengguojing/admin-net-sqlsugar
👉 Furion: https://dotnetchina.gitee.io/furion
👉 Admin.NET: https://gitee.com/zuohuaijun/Admin.NET
👉 xiaonuo:https://gitee.com/xiaonuobase/snowy
👉 k-form-design:https://gitee.com/kcz66/k-form-design
👉 MiniExcel:https://gitee.com/dotnetchina/MiniExcel
👉 SqlSugar:https://gitee.com/dotnetchina/SqlSugar
- 👉 IdGenerator:https://github.com/yitter/idgenerator
- 👉 ua-parser:https://github.com/ua-parser/uap-csharp/
- 👉 Zack.EFCore.Batch:https://github.com/yangzhongke/Zack.EFCore.Batch
- 👉 OnceMi.AspNetCore.OSS:https://github.com/oncemi/OnceMi.AspNetCore.OSS
http://ruoyi.vip/
ui,设计:ado.XD,蓝狐,windows环境下运行