C# 9.0 新特性
简化 模式匹配模式匹配(Pattern Matching)是在 C# 7.0 引入的,是对 switch 语句的增强,可以支持实现复杂的条件匹配。下面我先用一个示例来展示一下模式匹配的一般的用法。
假如现在我们要计算各种车辆在某高速的通行费,比如有下面四种车辆,分别定义为以下四个类,各个类中定义了和通行费计算相关的属性:
1234567891011121314151617181920public class Car{ public int Passengers { get; set; }}public class DeliveryTruck{ public int GrossWeightClass { get; set; }}public class Taxi{ public int Fares { get; set; }}public class Bus{ public int Capacity { get; set; & ...
Vue项目中使用Typescript
基础api官方文档
简单来说,ts属于强类型语言,它的优势在于静态类型检查,概括来说主要包括以下几点:
静态类型检查
IDE 智能提示
代码重构
可读性
typescript在vue项目中的基础用法
vue-property-decorator
vue-property-decorator在vue-class-component的基础上增加了更多与Vue相关的装饰器,使Vue组件更好的跟TS结合使用。这两者都是离不开装饰器的,(decorator)装饰器已在ES提案中。Decorator是装饰器模式的实践。装饰器模式呢,它是继承关系的一个替代方案。动态地给对象添加额外的职责。在不改变接口的前提下,增强类的性能。
vue-property-decorator是这个Vue项目文件中完全依赖的库,它是Vue官方推荐的并且依赖于vue-class-component,先介绍下它在项目中的常见用法。
@Component
@Emit
@Provice @Inject
@Prop
@Watch
@Model
@Minxins
@Component 类装饰器首先,Vu ...
C#.NET问答 高级进阶篇
1.说说什么是架构模式。1,分层。2,分割。分层是对网站进行横向的切分,那么分割就是对网站进行纵向的切分。将网站按照不同业务分割成小应用,可以有效控制网站的复杂程度。3,分布式。在大型网站中,分层和分割后主要是为了让网站能够便于分布式部署,也就是将不同的模块部署到不同的服务器上。常用的分布式方案有如下几种。3.1 分布式应用和服务。3.2 分布式静态资源。3.3 分布式数据和存储3.4 分布式计算。3.5 此外还有分布式配置,分布式锁,分布式文件系统等。4,集群。分布式方案只是将不同的模块或服务独立部署到服务器上,但通常还是单台服务器。集群则是将同一个模块或服务同时部署到多台服务器上,通过负载均衡设备对外提供服务。5,缓存。常用的缓存有如下几种,CDN,反向代理,本地缓存,分布式缓存。6,异步。异步一般通过队列的方式来实现。在单一服务器中,可以通过多线程共享内存队列实现异步。在分布式系统中,可以通过分布式消息队列实现。异步有一些作用,描述如下。6.1,提高系统可用性。6.2,加快网站响应速度。6.3,消除并发访问高峰。7,冗余冗余的目的是实现高可用性。是通过使用集群来实现的。即使是再小 ...
C#.NET问答 基础篇
1.C#中堆和栈的区别?栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。 堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。存放在栈中时要管存储顺序,保持着先进后出的原则,他是一片连续的内存域,有系统自动分配和维护;堆:是无序的,他是一片不连续的内存域,有用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。栈内存无需我们管理,也不受GC管理。当栈顶元素使用完毕,立马释放。而堆则需要GC清理。使用引用类型的时候,一般是对指针进行的操作而非引用类型对象本身。但是值类型则操作其本身
2.C#中的委托是什么?事件是不是一种委托?委托的本质是一个类,委托是将一种方法作为参数代入到另一种方法。 事件是委托的实例,事件是一种特殊的委托。 //比如:onclick事件中的参数就是一种方法。
3.C#静态构造函数特点是什么?最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数执行顺序:静态变量>静态构造函数>实例变量>实例构造函数
4.CTS、CLS、CLR分 ...
常用Git命令动画演示
前言虽然 Git 是一个强大的工具,但是我觉得大部分人用起来都会认为很复杂,还容易犯错!当我执行某个命令的时候,分支之间是如何交互的?又是如何影响提交历史的?当我在master分支执行hard reset、force push到 origin、在.git文件夹执行rimraf的时候,为什么我的同事都哭了?
我认为创建一些最常见、最实用的命令的可视化示例是最佳使用指南!接下来介绍的这些命令,很多都有可选参数,用于改变命令的行为。文中的示例只讨论命令的默认行为,不会涉及太多的配置选项。这些命令包括 merge,rebase,reset, revert,cherry-pick,fetch,pull,reflog 等。
merge(合并)多分支可以非常方便地将新的改动互相隔离,并确保你不会意外地将未经批准或破坏性的变更推到生产环境。一旦变更被批准,我们就能在生产分支中得到这些变更。
从一个分支获取变更到另一个分支的方式之一是执行git merge命令。Git 有两类合并操作:fast-forward 和no-fast-forward。
这么说你可能没什么概念,我们来看看区别吧。
fast-fo ...
docker-compose常用命令
Docker-compose命令格式1docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
命令选项如下
12345-f --file FILE指定Compose模板文件,默认为docker-compose.yml-p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名--verbose 输出更多调试信息-v,-version 打印版本并退出--log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
docker-compose up123456789101112docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]选项包括:-d 在后台运行服务容器-no-color 不是有颜色来区分不同的服务的控制输出-no-deps 不启动服务所链接的容器--force-recreate 强制重新创建容器,不能与-no-recreate同时使 ...
NetCore最具代表性的几个项目
近几年.NET Core的关注度持续上升,微服务及云原生应用开发上采用.NET Core也越来越多,基于 .NET Core 平台的项目也犹如雨后春笋般拔地而起,这里介绍其中最具代表性的几个项目.
OcelotOcelot是一个基于.NET Core的开源WebAPI服务网关项目,它的功能非常强大,包括了路由、请求聚合、服务发现、认证鉴权、限流、负载均衡等功能。而这些功能都可以直接通过修改json配置文件即可使用,非常方便。Ocelot是系统中对外暴露的一个请求入口,所有外部接口都必须通过这个网关才能向下游API发出请求,就如地铁中的安检系统,所有人都必须经过安检才能乘坐地铁。
https://github.com/ThreeMammals/Ocelot
CAPCAP 是基于 .Net 标准的库,它是处理分布式事务的解决方案,具有 EventBusS 的功能,重量轻、使用方便、高效。
在构建SOA或微服务系统的过程中,我们通常需要使用事件来集成每个服务。在此过程中,简单使用消息队列并不能保证可靠性。CAP 采用与当前数据库集成的本地消息表程序,以解决分布式系统相互调用过程中可能发生的异 ...
微服务架构技术栈
微服务的前世今生与微服务架构相对的,叫单体架构。这是我们最熟悉的开发方式,就是一个项目搞定业务全过程,在同一个进程里面完成。随着业务发展,数据量和并发上去了,一般会选择右边的垂直拆分,拆分后的每个系统,依旧是单体架构的。
垂直拆分后,子系统都能独立做集群,承载能力大大提升。但随着业务进一步发展,子系统会越来臃肿,而且根据二八原则,80%的请求其实都集中在20%的业务上,不同的子系统也都有很多重复的功能模块。于是乎分布式就诞生了,将高频重复的功能拆成独立的服务部署,各系统都通过调用服务来完成功能。
分布式拆出服务独立部署和维护, 既完成了功能的复用,又能保证高频服务的伸缩性和高可用,代表着更高的生产力。然而欲戴王冠必承其重,分布式带来的问题跟提供的价值一样多,比如分布式锁、一致性、可用性、复杂度等要命问题。
随着时间推移,业务倒逼技术进步,在大数据高并发的要求下,分布式技术慢慢开始成熟,针对各种问题都形成了行之有效的办法,然后分布式也成了架构设计系统的常规手段。基于服务的形式来完成对业务的解耦,提供高可用和伸缩性的特性,满足了日益增长的业务需求。随着业务的不断拆分,粒度越来越细,一个新的 ...
敏捷管理-每日站会实践
📖每日站会📗会议规定:每个工作日早上9点25准时开始时长不超过15分钟所有团队成员需要自觉按时到场,按时召开同一时间只能有一个人发言,只说相关的问题,任何跑题或扩展讨论,请在会议结束后进行团队成员最好提前准备发言内容,别的成员发言时,注意倾听
📘会议内容:我昨天完成了什么?(你昨天做了什么来改变世界)我今天要做什么?(你今天准备怎么做)什么障碍拖延了我的进度?(你准备怎么突破任何不幸挡了你路的困难)
📙会议目的项目进度定期同步对目标有同样的理解协调工作分享问题和改进识别为一个团队
💥注意事项:会议是团队成员互相交流,而不是工作报告更多的是沟通互相的进度,而不是解决具体的问题,具体的问题,会后讨论商量决定接下来还有什么需要做,谁来做,并为当天排一个计划
Elasticsearch高频问答
1、Elasticsearch是如何实现master选举的?1、对所有可以成为master的节点根据nodeId排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。2、如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举。3、对于brain split问题,需要把候选master节点最小值设置为可以成为master节点数n/2+1(quorum)
2、详细描述一下 Elasticsearch 索引文档的过程。1、当分片所在的节点接收到来自协调节点的请求后,会将请求写入到 MemoryBuffer,然后定时(默认是每隔 1 秒)写入到 Filesystem Cache,这个从 MomeryBuffer 到 Filesystem Cache 的过程就叫做refresh;2、当然在某些情况下,存在 Momery Buffer 和 Filesystem Cache 的数据可能会丢失,ES 是通过translog 的机制来保证数据的 ...