DevOps案例研究|中华有为-解构华为软开云DevOps实践

内容来源:DevOps案例深度研究-华为软开云DevOps研究战队(本文只展示部分PPT研究成果,更多细节请关注案例分享会,及本公众号。)

本案例内容贡献者:王英伟(Topic Leader)、蔡志超、陈安毅、陈一梦、冯素娟、高金梅、黄亚楠、李娟、杨雪颖

2019年8月25日,我们完成了第二期案例研究的交付,本文整理了小伙伴们一个月努力的成果,以下请尽情享用~

640?wx_fmt=png


一、日新月异-华为及软开云的研发历程

640?wx_fmt=png


一直以来,华为的研发效率都让软件研发从业者敬畏,自研芯片、系统、研发5G,作为中国科技的领头企业,华为公司在研发能力上已有30多年的积累,经历了从个人英雄主义、IPD、敏捷到现在的DevOps等多种研发模式的变迁。

1.1 华为公司介绍

华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商,致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。目前华为有18.8万员工,业务遍及170多个国家和地区,服务30多亿人口。
华为聚焦全联接网络、智能计算、创新终端三大领域,在产品、技术、基础研究、工程能力等方面持续投入,使能客户数字化转型,构建智能社会的基石。坚持多路径、多梯次、多场景化,构建解决方案竞争力持续领先。

640?wx_fmt=png

1.2 商业模式

他强由他强,清风拂山岗;他横任他横,明月照大江。——《倚天屠龙记》中九阳神功的口诀
华为的产品形态和业务的商业模式是最复杂、最多的,华为是从通信起家,业务包括和运营商有关的交换机业务、通讯业务、消费者业务等,其中有TO B业务,传统业务,如银行、政府;也有TO C业务,手机业务、APP业务;有硬件,如交换机;也有软件;有交付类业务;也有TO E卖服务的,服务器业务、企业云业务等等,如华为云。

640?wx_fmt=png

图片来自:2019华为全链接大会分享ppt
华为的业务版图:
  • 运营商业务,目前世界第一;
  • 企业解决方案,思科第一,华为第二;
  • 消费者终端业务,世界第三;

640?wx_fmt=png

业务形态决定采用的研发模式,在华为,消费者业务采用IPD的模式;运营商和企业业务采用敏捷方式;华为云服务DevCloud采用DevOps,多种研发模式并存。

1.3 财务数据

2019年,《财富》(Fortune)杂志发布了最新的世界500强企业排行榜。华为排名提升11位至61名,阿里巴巴与腾讯分列第182位与第237位。

640?wx_fmt=png

2018年,华为收入7212亿元,阿里收入3768亿元,腾讯收入3126亿元。从营业收入的角度,华为>阿里+腾讯。
财富中文网指出,硬件制造企业的利润率往往远不如平台型互联网公司,华为利润率不及腾讯一半。就利润率而言,华为利润率为8%,阿里巴巴利润率为23%,腾讯利润率则为25%。
公开信息显示,2018年全球研发投入超过千亿元的四家企业分别为:三星(1060亿元)、华为(1015亿元)、谷歌(1055亿元)和大众(1035亿元)。
华为发布的2019年半年报显示,营收为4013亿元,同比增长23.2%。

1.4 组织文化

  • 愿景:丰富人们的沟通和生活。
  • 核心价值观:成就客户,开放进取,自我批判,团队合作,志诚守信、艰苦奋斗。
  • 文化标签:狼性文化,奋斗者精神,床垫文化,商业管理上“反熵增”“耗散结构”。

二、精益求精-软开云前沿研发理念

640?wx_fmt=png


作为中国科技的领头企业,华为公司在研发能力上已有30多年的积累,经历了从个人英雄主义、IPD、敏捷到现在的DevOps等多种研发模式的变迁,积累了丰富的研发能力。
当前处于人工智能、大数据、云计算、互联网、社交化和移动互联网蓬勃发展的时代,在此背景下,传统研发方式面临着巨大的挑战。

640?wx_fmt=png

在业界,大家都知道软件工程经历了三代,本质上,技术的更新换代决定了软件工程方法的演进,(大型主机-PC-互联网-移动互联网)。
  • 第一代(20世纪60年代)是软件作坊时代,那时候没有规范的流程,瀑布软件;
  • 第二代(20世纪80、90年代)进入了过程控制时代(全面质量管理、精益制造、CMMI等);
  • 到2001年进入了敏捷、精益和DevOps持续交付,持续部署的时代。
这三个时代每个时代历时20年。

640?wx_fmt=png

华为的研发历程同样也可以分为三代:
  • 1998年之前,华为实际上是小作坊模式,华为自己称为“游击队”,好像创业公司一样,单兵作战,没有什么规范流程来研制软件,就是靠人肉来铺;
  • 1999年,华为认识到和业界相比,华为的人均产出低,任正非意识到必须要从国外引入先进的流程,因此花了上亿元从IBM引入了IPD流程,于是从1999年开始华为进入了重型控制时期(IPD+CMMI),研发进入“正规军时代”。
  • 2007年华为开始引入敏捷,成为中国实施敏捷的最大企业,华为的产品线基本都有了成熟的敏捷和DevOps实践,第三个时代称为“特种兵时代”。

2.1 精益敏捷

640?wx_fmt=png

华为在敏捷方面的应用有:Scrum、看板,在其内部产品线还有产品级敏捷,也就是规模化敏捷。
华为敏捷是真正的端到端敏捷:即从用户提出需求到功能上线、用户直接应用其功能为止,包括了需求、开发、测试、运维、运营、市场整个流程。
这其中包括
  • 1个铁三角:最小可工作产品MVP、全功能团队、迭代开发。
  • 2个端到端交付环:DevOps持续交付流水线、价值流可视化和双向追溯。 
  • 17个实践:运营分析、持续反馈、精益画布&SWOT、用户画像、KANO模型、重构、架构解耦、站立会议、用户故事、看板、持续集成、持续部署、 自动测试、灰度发布、DogFooding、A/B测试、监控运维。

640?wx_fmt=png

华为软开云以SCRUM框架为基础,但不是标准的SCRUM,每个迭代都是端到端的流程。
每周的迭代中,由于工作人员处在不同的工作地区,站会在相同的时间召开,进行迭代的检视、调整。回顾会是在两个冲刺或者有必要时举行。
华为云的Scrum框架中没有SM这个角色,由SL或PD去承担此部分职责。

2.2 精益DevOps

接下来展开介绍华为的DevOps实践都有哪些?

640?wx_fmt=png

  • 从管理流程上来看,使用的是精益看板管理流程;
  • 从组织结构上来看,使用的是2-pizza全功能团队;
  • 从架构和技术上来看,开展的是微服务和持续交付DevOps技术实践;
  • 在工具支撑上,应用的是华为软开云DevOps工具平台,为全球软件开发工程师提供DevOps工具支撑。

2.2.1 精益看板

管理流程上华为应用的是精益看板。

640?wx_fmt=png

华为的每个服务团队都是全功能团队,都建立了自己的看板,包括设计、开发、测试、上线,所有流程,服务之间偶尔会有依赖时,只需要点对点沟通就可以了。
这个Kanban上显示的是全流程的价值流。价值流是给客户提供价值的,需求从提出到发布给客户的整个过程。可视化之后就可以看出价值流中出现的问题,比如等待、阻塞、浪费。从而能让团队及时发现问题、及时调整、加速价值流动。
价值流是Kanban的一个重要实践。

2.2.2 全功能团队

在组织结构上实行的是2-Pizza的全功能团队。
对于全功能团队的定义是能够对特性、部件或者架构完整的实施规划、需求、设计、开发、测试并独立交付、运维的项目型团队。

640?wx_fmt=png


三、匠心独具-软开云精益研发实践

640?wx_fmt=png


3.1 如何践行DevOps
著名的管理学大师彼得·德鲁克曾经说过:没有文化的组织将无法持续前行。
自动化作为DevOps的基因;大大增强了研发的效率,而精益思想解决和避免了很多流程及开发过程中的低效和浪费;测量帮助我们实现了快速反馈,正确决策;最后分享作为DevOps的核心,让用户了解组织,也让组织了解用户。以上五大内容是构成了践行DevOps的基础。

640?wx_fmt=png

3.2 DevOps三步法

整个DevOps实施可以分解为三步:第一步是从左到右快速流动;第二步是从右到左快速反馈;第三步是在整个过程中持续学习。
其中让价值快速流动有六个实践,分别是:可视化、限制在制品、减少规模、减少交接数量、持续识别和拓展约束,以及在价值流中消除浪费。
反馈原则包括四个实践:第一、出现问题时及时发现;第二、密集解决问题、构建新的知识;第三、将质量向源头推进;第四、为下游工作进行优化。
最后是持续学习和实验原则,主要围绕的是开启组织学习和安全文化,让日常工作的改进做到制度化,将局部发现转为组织全局改进,在日常工作中注入恢复模式。

640?wx_fmt=png

3.3 华为云DevOps实施框架

DevCloud框架分别从管理流程、组织机构、工程实践、环境&工具四个维度为用户提供了对应的解决方案。基本涵盖了前期商业分析、需求规划、计划跟踪、持续交付等多个环节。
DevCloud项目管理是基于项目的管理,提供精简流程和scrum流程两种管理服务,其中Scrum流程是为敏捷开发量身定制的,包括项目规划、敏捷迭代、需求管理、缺陷跟踪、文档管理、看板、报表统计分析等功能。组织结构中重点强调全功能团队协作发展。

640?wx_fmt=png

3.3.1 分层需求管理

分层的需求管理,重点体现了需求分层原则、需求分层责任划分、以及story拆分INVEST原则。

640?wx_fmt=png

漏斗形需求通道主要是消除了浪费和潜在风险,通过逐层把关和分解确认最终需求交付迭代计划。

640?wx_fmt=png

3.3.2 分支管理策略

  • Master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。
  • Develop分支是保存当前最新开发成果的分支。
  • Release分支是为发布新的产品版本而设计的。
  • Feature分支(有时也可以被叫做“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回Develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。
  • Hotfix分支与Release分支十分相似:都可以产生一个新的可供在生产环境部署的软件版本。

640?wx_fmt=png

3.3.3 编译构建

DevOps采用一站式持续集成,本身支持github及其他的git仓库,没有限制必须是devcloud代码托管服务,同时在编译构建服务下支撑不同技术栈的编译打包,比如说maven、npm、安卓之类的编译,无缝对接。同时集成了华为云的其他服务,比如弹性主机、容器化服务、容器镜像仓库swr。

640?wx_fmt=png

3.3.4 静态检查

开发人员写代码比较随性,没有统一标准,需要制定一些基本的标准,并对代码进行持续的静态代码扫描,一旦发现问题立即在迭代内修复,这样才能保证上线的应用相对可靠,及时发现代码缺陷、持续看护代码质量、防止代码腐化。
华为的DevOps Cloud代码检查工具覆盖了Top10的主流编程语言,分别从7个维度全面评价代码质量:编码安全、编码缺陷、编码风格、架构、依赖包安全、圈复杂度、代码重复率,通过专业的预置规则达到缺陷精准定位到行,从而保证和完善代码质量。

640?wx_fmt=png

3.3.5 代码检查

有人说有Code Review比没有Code Review好,又有人说没有Code Review比有Code Review好。很绕的一句话。仔细分析,代码评审本身会造成延迟,以及工作切换,但有一定的效果,通过协作的方式来保障质量,比如结对编程,Code Review的作用就不会那么明显。
总之代码评审不是目的,真正的价值还是代码质量的保证。在推动Code Review方案中,必须明白自下而上的推广时要打好基础,自上而下的推广时需要高层支持,数据的分析是为了知道目前进展的情况。

640?wx_fmt=png

3.3.6 测试实践

这页主要是测试的一个实践,比如说测试管理、自动化测试,需求串讲其实开发和测试就需要达成一致理解。开发在代码开发时,测试就会输出相关测试用例,测试在测试的角度提出一些相关问题。
整个微服务团队差不多5到10人,自身会做开发自测,测试会做专项测试,各自的分工如右下角所列,针对不同需求构建不同环境,例如alpha测试接口测试、beta环境接口测试、web自动化测试、安全测试、gamma环境接口测试、生产环境在线测试、性能测试、可靠性测试等。

640?wx_fmt=png

3.3.7 自动化测试能力建设

按需循序渐进建立高效测试管理和自动化测试能力。
首先是按需投入:
  • 一般开发少于5人情况下,无需专职测试;
  • 5到10人需要预备1人专职测试,需要重点关注开发和测试的沟通接口,建议测试人员尽早接入,研发过程中,总结重复测试重复工作,鼓励测试人员主动建立自动化测试;
  • 在10到15人以上开发团队中,最好建立对应的测试团队,选出测试组长,科学管理测试需求和测试覆盖率及进度,以测试报告形式反馈,引入工具代替手工报告,量化工作量,引入流水线,使用门禁控制发布出口。
总之,不同的团队,在自动化能力建设上要求不一样,对用的沟通协作手段,集体质量意识至关重要。

640?wx_fmt=png

3.3.8 持续交付

把DevOps端到端完整交付的生命周期打开来看,从需求分析到原型设计到架构到开发,一直到部署上线运维,最后到运营。
不是说产品上线就结束,而是需要运营的活动去做一个闭环,一般情况下在每个环节都需要搜集一些反馈,然后通过运营的手段去产生一个产品或者价值的闭环,比如怎么样去拉新,怎么样去促活,所以整个过程,每个阶段都需要很多的实践,从而达到持续交付的理念。

640?wx_fmt=png

右边这张图,基于一套自动化脚本构建端到端验证交付。从开发到构建再到虚拟环境的验证,然后到用户环境的验证,最后发布,分为四步,每一步都可以循环执行,每一步都是基于上一步的成功自动触发下一步的开展。整个循环的原则就是越快出错的地方越需要提前执行。

3.3.9 每日持续交付流水线

最后通过DevCloud实践介绍每日持续交付流水线。
首先每天晚上由流水线触发。流水线里主要需要配置质量的门禁,或者质量的考核点,比如分支策略、静态扫描,静态扫描也分不同的语言,不同的规则集,然后是代码覆盖率,当前也没有要求所有代码百分之百覆盖,一般会根据业务层面去划分优先级,最高优先级必须百分之百,但次优先级还是可以适当方宽。
还包括一些开源的扫描,用到大量的开源的组件,就需要保证没有漏洞,没有安全后门,没有违反开源协议的代码。
另外,在集成测试、性能测试,通过功能开关、一级灰度、二级灰度做相关测试。

640?wx_fmt=png

  

四、尽享丝滑-软开云端到端工具支撑

640?wx_fmt=png


640?wx_fmt=png

DevOps落地并不仅仅只是一个工具链,它首先展现的是一个文化,要求多角色无缝配合,在研发流程的基础上,衍生出持续集成、支持交付、自动监控、度量分析、分享等内容。 
  • 自动化其实是要提高效率,能自动化的全部自动化起来,不能自动化的也要想办法自动化起来。怎样想办法呢?其实就是要使用大量的技术手段,包括云计算、大数据、移动、社交、人工智能等,通过这些计划来解决我们之前解决不了的问题。
  • 精益体现在两个方面,在产品方面采用精益画布来准确把握产品方向,在研发环节通过精益研发来消除浪费、持续交付。 
  • 度量及反馈环节会设定一些业务指标,然后去监控这些业务指标,并对获取到的监控数据进行分析,最终得出具体的改进措施,并将这些改进措施落实到下一步的开发计划里去,形成一个优化的闭环。
  • 分享就是在开发、测试、部署、运维、运营等团队之间经常去做一些分享,把各方面好的经验及实践分享出来,让大家一起成长。

4.1 DevOps平台全貌

640?wx_fmt=png

团队从需求、设计、开发、构建、测试、部署、运维、反馈再回到需求,形成完整闭环,其中构建、测试、部署、运维四个环节构成持续交付流水线,持续交付的流水线由各类自动化工具实现。
  • 构建环节包括代码检查、单元测试、构建打包、安全扫描等工具集;
  • 测试环节有接口测试、安全测试、浏览器兼容性测试等自动检测工具;
  • 部署环节实现自动部署、冒烟测试等工作;
  • 运维环节实现全面监控在线测试等。

4.2 持续交付流水线

640?wx_fmt=png

1) DevCloud支持精益项目管理、及时准确掌控项目质量与进度,包含:敏捷迭代开发、社交化协作、规范化模板、多维度看板、项目统计报表、项目文档管理、项目wiki;
2) 支持代码托管; 
3) 配置管理基于Git的高可用代码托管,实现跨地域协同开发,面向软件开发者的轻量、快速、智能的CloudIDE云端开发环境;
4) 可定制可视化交付流水线,混合语言并行构建;
5) 测试用例为核心,提供端到端测试管理能力,移动测试支撑多级型、兼容性测试能力。可设置质量门禁自动检查流水线产出物的DoD达标情况。
6) 自动化部署,一键式的应用包部署,支持典型应用快速部署,支持Tomcat、Java、NodeJS、PHP、Pathon、Ruby、Go等,支持自动化并行部署;与流水线集成,实现从代码提交、代码检查、编译构建、部署、测试到发布的流水线。

  

五、物竞天择-软开云残酷的竞品分析

640?wx_fmt=png


640?wx_fmt=png

图片来源:JFrog总结出来的企业级DevOps知识体系图谱
一个企业如果想要做转型(无论是敏捷转型还是数字化转型),适应现在快速发展的社会节奏,都要涉及到两个层面,覆盖整个软件开发生命周期。其中涉及到研发过程改进优化,人员角色、工作职能重新定义调整,流程规范积累沉淀,工具串联自动化集成等方面。

640?wx_fmt=png

依据:《研发运营一体化能力成熟度模型》整理
这是全球首个DevOps标准,即《研发运营一体化能力成熟度模型》,由信通院牵头,云计算开源产业联盟、高效运维社区和DevOps时代社区联合国内外其他各大公司共同编制。目前这个标准已经在联合国直属标准化组织ITU、中国信通院标准化协会正式成立。
模型包括总体架构、敏捷开发管理、持续交付、技术运营、应用设计、安全风险管理、组织结构等7个部分,将应用的需求、开发、测试、部署和运营统一起来,基于整个组织的协作和应用架构的优化,首先敏捷开发、持续交付和技术运营无缝集成。
作为DevOps工具厂商的落地实现,应该包括那些模块呢?让我们快速浏览一下各大公有云厂商的产品功能架构。

5.1 云效

云效的软件研发模式是“一站式”,项目需求是一个项目的起点,在代码管理、代码编写、单测集成、构建部署、系统测试、集成测试直至最后的提交发布,对于每一个环节平台都有相应的能力提升各个角色的质量和效率。
  • 代码管理环节按应用的管理代码及平台化构建管理;
  • 代码编写环节应用平台化拉取应用代码;
  • 单测集成阶段可以准确识别代码高危漏洞;
  • 构建阶段可以一键构建开发测试包以及一键申请/部署测试环境;
  • 系统测试阶段可以测试管理系统以及低成本编写/维护自动化脚本;
  • 集成测试阶段可以自动构建集成包、自动部署测试环境以及集成自动化测试自动回归;
  • 在最后的提交发布阶段是合并主干代码。

640?wx_fmt=png

5.2 腾讯TAPD

TAPD(Tencent Agile Product Development)是源自于腾讯的敏捷研发协作平台,提供贯穿敏捷研发生命周期的一站式服务。覆盖从产品概念形成、产品规划、需求分析、项目规划和跟踪、质量测试到构建发布、用户反馈跟踪的产品研发全生命周期。
它是由腾讯官方推出的一站式敏捷协作平台,沉淀了腾讯内部十余年的敏捷研发理念与实践。针对敏捷研发实践中的团队沟通、跨地域协作、流程管理等方面的诸多痛点,TAPD提供了专业化、一体化、灵活化的解决方案,能够帮助团队透明研发过程,高效率研发协作,高质量交付产品,以及度量研发效能、实现持续改进。

640?wx_fmt=png

640?wx_fmt=png

5.3 腾讯Coding

Coding是腾讯云旗下的面向软件研发团队的研发协作管理平台,提供了从需求、开发、测试、发布、总结的端到端的协同服务和研发工具支撑,涵盖了软件开发从构想到交付的以一切所需,提供完整的研发协作工具,无需对接第三方服务。研发团队在云端高效协同,时间敏捷开发与DevOps,提升软件交付质量与速度,降低企业研发成本,实现研发效能提升。
CODING 在前两天的 Kubecon 2019 大会上发布了 CODING 2.0,CODING 2.0 进行了产品、产品理念、功能、首页的升级,开始覆盖从代码托管到 DevOps 的流程。
CODING 2.0 上线了持续集成及制品库的功能,标志着 CODING 正式进入持续集成阶段。用户推送代码或合并请求,即可出发持续集成进行构建、单元测试、安全扫描等工作,并生成制品存储在制品库。
除工具外,CODING 还为企业提供研发流程实施的指导培训、敏捷训练等额外服务。CODING 开始将自己的能力从代码管理延伸到DevOps,虽然起步没多久,后面功能有什么惊喜,值得期待。

640?wx_fmt=png

640?wx_fmt=png


5.4 腾讯蓝鲸

腾讯云为游戏行业提供一系列解决方案,涵盖开发、运维、运营等领域和场景。针对不同类型的游戏提供灵活而稳定的部署方案,轻松应对玩家激增、高并发、海量访问等带来的问题;为游戏的各种应用场景提供游戏生态服务解决方案,如游戏场景的开发组件、游戏安全、游戏加速、全球互联互通等,让客户的游戏更稳定、更安全、更好玩。
蓝鲸为运维人员提供一站式运维(技术运营)技术解决方案,它基于 PaaS 的理念,将服务以 API 的原子能力进行集成,并提供了自主研发工具/系统的便捷开发者服务,通过私有化部署的软件交付模式,快速帮助用户落地一整套自动化运维/运营体系产品,提升企业基础运维能力,创造运维增值服务。

640?wx_fmt=png

640?wx_fmt=png

5.5 百度效率云

百度效率云是领先的云上研发工具链。包含产品规划、项目管理、Git代码托管、代码检测、制品管理、持续集成与持续交付等工具,让复杂的研发协作更简单。
它包含四个子模块,分别是:代码管理工具 iCode,持续交付工具 iPipe,项目管理工具 iCafe,制品管理irepo。

640?wx_fmt=png

640?wx_fmt=png

5.6 总结

640?wx_fmt=png

企业需要的其实就是一个轻量化、服务化、云化社交化、智能化的DevOps服务或者平台.轻量化就是简单易用,服务化就是做成一个服务,然后按需获取,随时随地就可以使用。而且不管是pc也好,web端也好,智能设备也好都可以访问。
  • 云化其实就是让服务运行在云端,利用云的弹性伸缩和大规模并发能力来加速我们的研发活动,提高效率。
  • 社交化就是工具服务要和我们的社交工具进行对接来解决研发协同的问题。
  • 然后及时智能化,提供一些智能化的辅助决策、分享的预测,还有一些预警等。
那么基本上满足这个需求的产品是什么呢?答案见下方。

640?wx_fmt=png

640?wx_fmt=gif

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel催化剂插件安装过程升级,离线版全网公开下载!

Exce催化剂推出近2年,之前一直在推崇在线版的安装方式,但因安装步骤较多,可能吓退了一部分初级用户,此轮重新梳理,让安装方式更简单,也公开了离线版的安装文件,若部分用户不想使用在线版&#x…

包邮送88本畅销技术书

来给大家送一波福利,这次联系了 11个好友一起给各位送书,每个号送 8 本,一共 88本,还包邮哦。感谢清华大学出版社对本次活动的赞助。01 书怎么送很简单,关注下面的公众号,并在后台回复「抽奖」,…

字典树(Trie树)的原理与实现

一、概述 1.1 基本概念 字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。 1.2 基本性质 根节点不包含字符,除根节点外的每一个子节点都包含一个字符从根节点到某一节点。路径上经过的字符连接…

C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

点击蓝字“dotNET匠人”关注我哟加个“星标★”,每日 7:15,好文必达!什么要刷LeetCode大家都知道,很多对算法要求高一点的软件公司,比如美国的FLAGM (Facebook、LinkedIn、Amazon/Apple、Google、Microsoft)&#xff0…

.NET Core迁移前的准备工作

前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家。大致有以下几个部分:1. .NET Core的由来2. 为什么要迁移.NET Core3. .NET Core3.X主要特性4. .NET Standard和.NET Core5. .NET Core Roadmap&版本选择接下来,我们详…

二叉排序树或二叉搜索树

一、二叉树基础 1.1 二叉排序树定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。它是一颗空树,或者具有下列性质: 若它的左子树不为空,则左子树上所有结点的值…

沈向洋对于工程技术人员的十点经验分享

沈向洋目前是微软的执行副总裁,人工智能与研究部门的最高负责人。他是计算机视觉和图形学研究的世界级专家,是美国电气电子工程协会院士(IEEE Fellow)及是国际计算机协会院士(ACM Fellow),曾任国…

.Net Core中间件和过滤器实现错误日志记录

1.中间件的概念ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件。每个中间件可以:选择是否将请求传递给管道中的下一个组件。可以在调用管道中的下一个组件之前和之后执行业务逻辑。中间件是一个请求委托&#…

最大堆、最小堆Java实现,解决TOP K问题

一、基础知识 1.1 什么是最大(小)堆 最大堆,最小堆类似,以下以最小堆为例进行讲解。 最小堆是满足以下条件的数据结构: 它是一棵完全二叉树所有父节点的值小于或等于两个子节点的值 1.2 什么是完全二叉树 除了最后…

使用Helm将ASP.NET Core应用程序部署到Kubernetes容器集群

在《容器化单页面应用中RESTful API的访问》以及《容器化单页面应用中Nginx反向代理与Kubernetes部署》两篇文章中,我介绍了一套容器化ASP.NET Core应用程序的方案,并对于Nginx反向代理的使用进行了介绍。在《使用Rancher在Microsoft Azure上搭建Kuberne…

微软如何利用机器学习改进Win 10更新体验

微软在 2018 年 4 月 Windows 更新时第一次大规模使用机器学习(ML),ML 通过监测 PC 运行状况的六个核心领域(例如总体可靠性),以确定功能更新过程是否顺利进行。而在 2019 年 5 月发布的更新推送中&#xf…

使用.NET Core创建Windows服务(一) - 使用官方推荐方式

原文:Creating Windows Services In .NET Core – Part 1 – The “Microsoft” Way创建Windows服务来运行批处理任务或者运行后台任务,是一种非常常见的模式,但是由于云服务(Amazon Lambda, Azure WebJobs以及Azure Functions&am…

关于.NET HttpClient方式获取微信小程序码(二维码

随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来。近来分析了一项生成有关生成微信小程序码的需求——要求扫码跳转到小程序指定页面(带参数);看了下小程序官方文档,以及网上的例子,未看到…

从零开始使用Skywalking分布式链路追踪系统

当我们用很多服务时,各个服务间的调用关系是怎么样的?各个服务单调用的顺序\时间性能怎么样?服务出错了,到底是哪个服务引起的?这些问题我们用什么方案解决呢,以前的方式是各个系统自己单独做日志,出了问题…

快速排序 (Quick Sort)(Java实现)

快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出。 1、基本思想 快速排序的基本思想:挖坑填数分治法。 首先选一个轴值(pivot,也有叫基准的),通过…

使用.net core3.0 正式版创建Winform程序

前阵子一直期待.net core3.0正式版本的出来,以为这个版本出来,Winform程序又迎来一次新生了,不过9.23日出来的马上下载更新VS,创建新的.net core Winform项目,发现并没有Winform窗体设计器。而微软目前则是通过插件的方…

深入理解 ValueTask

.NET Framework 4 里面的命名空间为 System.Threading.Tasks的 Task 类。这个类以及它派生的 Task<TResult> 早已成为编程的主要部分&#xff0c;在 C#5 中的异步编程模式当作介绍了 async/await。在这篇文章里&#xff0c;我会覆盖新的类 ValueTask / ValueTask<TRes…

NET Core 3.0 AutoFac替换内置DI的新姿势

.NET Core 3.0 和 以往版本不同&#xff0c;替换AutoFac服务的方式有了一定的变化&#xff0c;在尝试着升级项目的时候出现了一些问题。原来在NET Core 2.1时候&#xff0c;AutoFac返回一个 IServiceProvider 参数注入到ConfigureServices .NET Core 服务中&#xff0c;基本大痣…

asp.net core 使用Mysql和Dapper

序曲&#xff1a;学习编程最好的方式就是敲代码&#xff0c;没有比这个更好的方法&#xff0c;哪怕你看了上百G的视频&#xff0c;都不如你自己敲几行代码更为有效。还有要记得敲完代码然后写一篇随笔来记录一下你所学所想。大家都知道&#xff0c;.netcore是微软一个具有历史意…

CSFR(跨站请求伪造)攻击与防御

一、CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;也被称为&#xff1a;one click attack/session riding&#xff0c;缩写为&#xff1a;CSRF/XSRF。 二、CSRF可以做什么&#…