百度工程能力提升之道--方法,DevOps工具,人员能力,研发数据

1 篇文章 1 订阅
订阅专栏

我是百度工程效能部资深敏捷教练–金锐,也是百度 DevOps 解决方案的运营负责人。从今天开始,我将在 GitChat 通过一系列的文章,为大家分享百度在软件工程领域的思考和实践。今天我先从百度工程效能部对提升百度软件工程能力的实践和思考介绍开始:

什么是工程能力

工程是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,是以最短的时间和最少的人力、物力做出高效、可靠且对人类有用的东西。 --百度百科

上述定义摘自百度百科,从这里我们可以看到,广义的工程能力定义很宽泛,涵盖了软件,建筑,机械生产等多个行业。当我在讲百度的工程能力的时候,我更多提到的时百度的软件工程能力,下面是几年前公司内部一次会议上,公司领导层对软件工程能力与公司业务竞争力的阐述:

百度如何看待软件工程能力
百度是一家技术公司,研发工程能力的高低直接影响公司的持久创新力和公司在市场上的作为。只有不懈追求卓越的工程能力,才能够带来长期的核心竞争力,才能为每个用户、每个企业客户以及整个社会创造价值。

百度软件研发体量

百度内部有多个业务形态各异,团队规模不同的产品线,下面一系列数据出自 2018 年工程效能部的数据统计:

百度软件研发体量

从数据上可以看到,平均每个工程师每天要进行 3 次构建;执行 7 次以上的流水线;平均每个披萨团队,每天要进行一次服务的发布。而且在这些数据的背后,是 10000 多名有着强烈的自驱意识,勇于不断尝新的软件工程师。因此对于百度工程效能部来说,提升百度工程能力,是一件挑战巨大的系统性工程。

百度工程能力的发展历程

百度工程能力的发展历程,大致经历了三个阶段, 分别是:

  • 以瀑布式和 CMMI 标准为研发模型的阶段
  • 以敏捷开发为主要研发模型的阶段
  • 全面拥抱 DevOps,云计算和 AI 的阶段
    在每个阶段,百度在软件工程领域要解决的问题和面临的挑战各异,下面我来简单介绍一下:
瀑布式和 CMMI 阶段

在这个阶段,百度在软件工程领域要解决的首要问题是: 百度的软件研发管理对象是什么?对象之间的关系是什么?一个标准的,符合规范的研发流程是什么样的?

现在回顾起来,我们非常感谢那个时代工程效能部门的同事,为我们后续的管理奠定了坚实的基础,具体规范如下图:

软件研发管理对象之间的关系

从这张图上可以看到,我们当时定义了几个最基础的元素:

  • 最小的可发布代码集合–模块,以及代码和业务的对应关系–产品线
  • 服务发布的版本关系: 线上版本和测试版本
  • 围绕发布进行的一系列研发过程管理: 项目

当时的一切软件研发工作,是围绕着模块级别发布进行的: 每一个项目在启动的时候,RD(开发工程师)会从当前模块基于线上的 3 位版本拉一条分支,建立一个新的 4 位版本;当开发完成后,RD 通过一个叫做"提测"的动作将构建产物传递给 QA(测试工程师), QA 在测试过程中发现的 BUG 会记录在当前的 4 位版本上,RD 修正后重新生成一个 4 位版本号再次交付 QA 直至最终测试完成,模块发布上线后,更新三位版本号,做为下一次拉取分支的基线。这样的流程也很好的支持了当时百度的主营业务–核心搜索。

敏捷开发阶段

时间前进到 2012 年,随时互联网思维的普及,更重要的是,移动互联网时代的到来,我们发现: 当时百度的软件研发效率跟不上市场竞争的需求了。2012 年 8 月,我们做过一个统计,当时百度单个模块的发布周期平均值是 21 天,而当时小米号称每周迭代。因此,当时我们要解决的首要问题是如何缩短模块的发布周期。

基于这个目标,我们引入的敏捷开发的概念,弱化项目的概念,强调产品的迭代。同时将原有的工具按照研发的不同阶段,拆分成三个独立的产品: 负责项目和产品管理的 icafe,负责代码和协同开发的 icode,负责持续交付的 ipipe,形成了目前研发工具链的雏形。我们也建立了百度的敏捷教练团队,引入了一批又一批业界优秀的软件工程人才,将敏捷开发的理念带入到产品线中。现在 DevOps 和敏捷圈中的各路英才,有相当一部分都曾经在百度工程效能部任职

经过 4 年的努力,截止 2016 年,我们将百度的模块发布周期从 21 天,缩短到不到 6 天的样子。敏捷开发已经成为百度的主流研发模式,95%的模块从 SVN 迁移到了更加适应互联网研发模式的 GIT 上,我们发布了百度内部的研发方法论专辑: 百度方法+。

反思这个阶段,我们发现:

  • 虽然整体的交付周期缩短了,但是团队的交付能力并没有特别明显的提升
  • 一部分团队在专家实施改进并撤出之后,出现了不同程度上的倒退
  • 公司内部平台林立,技术上重复造轮子的现象严重

同时,DevOps,云计算,AI 成为主流的技术,我们面临着更大的挑战:

百度工程能力的提升策略

前面铺垫了这么多的内容,终于进入到我们今天要讲述的内容主体: 当云成为主流 IT 架构,以模型训练为代表的 AI 开发兴起,DevOps 成为软件研发的主流思想时,百度工程效能部如何继续带动百度工程能力的提升。

关于整体提升的策略,我们可以用下面一张图来表示:

工程能力提升整体策略

能力策略–人

首先,我们来看一下人的方面,工程能力提升的根本还是人(工程师)本身的工程素养提升。即使我们有好的流程、方法和开发工具,如果开发者本身的能力和工程素养不够的话,工程效率也会非常低。

为了提升工程师的工程素养和工程能力,我们做了一些实践。例如招聘时,我们一定招优秀的工程师。新人入职之后,我们会为新同学提供工程师能力培养和文化建设的工作坊,这也我们一直在做的事情。工程师入职后,会有“码神训练营”,这个训练营除了介绍编码的规范及开发流程、工程实践之外,还会让大家在工具平台上实际操作,自主开发一个示例产品,促进大家在短时间内了解百度工程开发的流程和规范,建立工程规范意识。除此之外,公司内还有很多培养工程师文化的项目,比如 Hackathon ,还有 Good coder、Excellent Coder 认证等。

提升策略–数据篇

和 16 年以前最大的变化是,我们将数据也纳入了整体的提升策略中。
在 DevOps 的理念中,有一个非常重要的核心理念: 建立反馈闭环。我们认为在软件研发过程中,从 RD 每天的拉取分支–coding–提交代码,到模块测试–系统测试,最终到服务发布,产品更新。都应该建立不同的闭环,而在每个闭环中产生的数据,应该以最高的时效性反馈给研发/测试/运维人员。并且不断的引导用户去使用数据,信任数据,最终通过数据的驱动实现团队工程能力的不断提升。

而在以往,这些数据在生产出来之后便被束之高阁,只有在定期汇报的时候才被拿出来使用,为了改变这个现状,我们首先明确了百度软件研发的一系列闭环:

百度软件研发的闭环实意

从上面的图中可以看到,在我们的治理思路中,整个软件研发的过程被划分成 4 个闭环:

  • 开发闭环: 起始于 RD 建立 Feature Branch,终结于分支合入当前的 release branch,开发闭环持续时间以天为单位,通常是 1-3 天
  • 迭代闭环: 起始于每周的开发计划更新,终结于当前的 release branch 通过验收测试,迭代闭环持续时间以天为单位,通常是 5-10 天(1-2 周)
  • 项目闭环: 起始于一个 release plan 的启动,终结于当前的服务/产品上线后业务数据的 review,其中对于一部分产品来讲,项目闭环=迭代闭环;而对于移动端开发来讲,一个项目闭环包括了多个迭代闭环。项目闭环以周为单位,通常是 1-3 周。
  • 产品闭环: 结合 OKR 或业务阶段性目标,起始于目标的拆解和制订,终结于阶段性业务目标的 review。产品闭环的周期比较长,往往以月为单位。

在以上闭环中,我们认为下列数据是需要被相关人员关注并使用的:

  • 开发闭环: 代码冲突;CodeStyle;代码漏洞;CodeReivew 的反馈;单元测试的结果,覆盖率;模块测试的结果,覆盖率;流水线执行结果;流水线执行时长;需求的开发进展;PM(产品经理)功能验收的结论,没错,在百度我们提倡产品经理对每一个用户故事进行验收,而不是对迭代进行验收。
  • 迭代闭环: 分支的集成进展;系统测试结论;非功能性测试结论;测试中发现的 BUG 以及修复进展;团队的迭代速率;
  • 项目闭环: 线下 BUG 的修复进展;系统测试结论;非功能性测试结论;研发进度的累积图;线上服务的稳定性;上线后的业务效果;上线后用户的反馈;回顾会议的结论;
  • 产品闭环: 阶段性业务效果;产品下阶段的规划;技术下阶段的规划;团队交付的散点图;团队工程能力地图;

这么多的数据,我们是如何将其一一呈现在整个研发团队的视野中的呢?这就离不开工具的贡献了: 我们在 17 年,自建了研发数据仓库,前面提到几大研发工具平台: icafe, icode, ipipe,之前是每个产品保存自己的数据,建了数据仓库之后,我们将数据以下面示意图的形式组织在一起,形成了从需求到发布的完整研发数据链:

研发数据链

另外,除了这些基础数据之外,有大量的测试结果,覆盖率数据是如何被记录下来的呢?这就得益于持续交付平台 ipipe 的插件式架构设计:

ipipe 插件设计

百度内部有几十个不同类型的测试,发布,环境管理工具。为了让百度内部的用户更好的使用这些插件,iPipe 平台改善了底层的架构设计,使这些工具可以通过简单的改造接入 iPipe。做为改造的一部分,这些工具需要通过统一的数据格式将自己生产的研发数据导入到研发数据仓库。这样,研发和测试人员只需要关心自己的日常工作,而数据很自然的就保留了下来。

接下来,数据是怎样应用的呢?首先最频繁的应用在流水线的执行结果中:

流水线执行结果

这是我在内部代码库提交的一次提交记录, 在图中看到我们配置了一条简单的流水线,只分为编译和测试两个阶段,现在展示的是编译阶段的所有 job。如图所示,用户可以非常直观的在流水线上看到每个 JOB 的执行结果。一旦有错误发生,iPipe 会通过邮件,即时通讯工具向用户推送消息。同时,在展示结果的同时,QA,RD 也能非常方便的观察每个阶段的执行时长,方便流水线的优化。

除了在流水线中应用,我们根据产品,团队,工程师的不同维度,将数据归纳整理:

产品维度:工程能力地图

工程能力地图

这便是工程能力地图的主页面,如图所示: 工程能力地图以产品线(多个代码库)为维度,按照不同技术类型(Server, App, SDK)的代码库分类, 将产品线在整个研发过程中对管理,技术实践的采纳情况进行记录和评分,而所有的记录都来源于插件的数据录入。也可以说,页面上每一个色块中的实践,背后都对应着一个标准的实践工具。数据每天进行更新,而产品线的研发经理,测试经理,研发总监根据工程能力地图上数据的变化趋势即可了解自己团队工程能力的改进进展。在百度内部,大多数产品线在建立自己 DevOps 实施目标时,已经将地图上得分的提升做为重要参考。

团队维度:交付周期散点图

交付周期散点图

交付周期散点图显示的是一个团度随着时间的推移,交付周期的变化趋势。怎样解读这张图表呢?横轴是时间轴,纵轴是交付周期(天为单位),图表上的每一个点都代表了一张需求卡片(统计粒度可自选)从建立到上线的确切时间流逝。从这张图上,我们可以解读到以下信息:

  • 交付周期的标准差: 在图上用浅蓝色阴影显示,阴影面积越小,代表该团队的交付周期越稳定,可预测性越高
  • 交付周期中位数的移动趋势: 在图上用绿色的曲线代替,该曲线代表了交付中位数的变化趋势,曲线越走低,代表交付周期的不断缩短
  • 团队的交付模式: 这个解读很有意思,从上面的图我们可以看到,在 5 月 19 日之前,该团队进行了多次不断的发布,可以认为是在持续的交付价值;但是到了 7 月 19 号之后,我们会发现交付周期较长的项目/需求开始出现,发布的时间点相对集中,可以认为团队在 5 月到 7 月集中做了几个大型的功能,并在 7 月下旬进行了集中的发布
工程师维度:工程师个人画像

工程师个人画像

如图,这是展示在代码托管平台 iCode 上的某位内部工程师的研发活动数据,上半部分表示了该工程师的提交频次,每次的代码提交量;下半部分的数据说明了具体的量化信息。这个图表是和我们内部所提倡的工程师文化是密切相关的。什么是百度工程师在工程方面应该做的事情,那就是持续的提交代码,并且积极参与代码的评审工作。每次工程师在申请晋级的时候,技术委员会会直接查看该工程师的这个页面,并做为晋级的重要参考。我们经常说,是牛 X 的工程师就把个人页面亮出来。

能力策略–技术篇

平台化治理

为了解决前文提到的技术重复造轮子问题,提升技术的复用,我们也进行了百度内部的平台的建设和治理

平台建设包括平台复用和源码复用这两方面。在平台复用方面,我们梳理出公司内部的几百个平台,将这些平台划分成若干个类别,每个类别都成立一个 TOC 组织来负责规划这类平台未来的发展。发展的目标就是让这类平台可用性加强、复用度提高,让平台本身的能力增强,以便让每个业务方能够更快速地使用平台去搭建自己的业务,提高工程效能。

内部开源

上面介绍平台复用会带来一个问题:如果多数平台逐渐收敛成少数平台后,许多需求都会涌向这些平台,会导致平台研发团队不能按时、高质量完成所有的需求,从而使研发效率下降。那么我们怎么在平台化的基础上去做更好的工程复用呢?

那就是源码复用。在代码管理平台(iCode)上,我们做了内部开源功能。在平台化治理的过程中,平台是否能够达标,有一个考察点是它能不能实现内部开源。如果一个平台的 API 已经对外开放,并且又做到了内部开源能够让其他团队贡献代码协作开发,我们才认为它是一个优秀的内部平台。

C++的依赖治理

百度 C/C++模块开发采用跨模块依赖的形式,其中 97%为固定版本依赖(表现为 Depend on TAG 和 Depend on BRANCH:VERSION 两种形式,本文统一使用 Depend on TAG 表示)。固定版本依赖会导致严重的版本碎片化问题,两年前我们做过一个统计: 百度 top 200 的基础库,在用的大约 5000 多个版本。

版本碎片化问题背后,是严重的技术债务: 维护基础库的同学很难保证不同版本间代码的兼容性,业务方为规避版本不兼容的问题不愿意升级依赖模块版本,导致基础模块发布新版本后,三个月内只有十分之一不到的团队主动升级。如此一来,一方面在基础库维护上浪费了大量不必要的人力,另一方面,大量的业务线也没有办法享受基础库升级带来的好处。

参考 Google 的 Head 依赖模式,即所有的类库引用方,都直接引用类库的 head 标签。考虑到我们内部改造的成本和业务方的稳定性,我们决定推出 stable 模式–即每个类库维护一个 stable 标签,所有的引用方都来引用 stable 标签,基础库的维护团队将基础库的更新发布到 stable 标签上,这样保证了基础库的稳定性,也极大的收敛了基础库的版本数量,减轻了团队负担。

百度工程能力的标准产出

百度 DevOps 产品解决方案–百度效率云

2019 年 5 月, 我们正式将百度内部的研发工具链对外输出,成为百度智能云的子产品,并命名为百度效率云。效率云包括内部的三大平台(iCafe, iCode, iPipe),并与智能云上的容器引擎,微服务平台一起,支持云原生 DevOps 的场景。目前产品处于免费试用阶段,欢迎大家试用

产品入口

在这里插入图片描述

百度工程师手册

在这里插入图片描述

以上就是关于百度工程能力提升的介绍,欢迎大家提出建议和意见。对于云原生 DevOps,AI 服务开发感兴趣的同学,可以关注效率云官方公众号,我们会定期发布产品的最新动态:

再次感谢大家对百度技术的关注。

什么是工程能力?系统设计能力?架构设计?算法设计?
禅与计算机程序设计艺术
03-21 1万+
不要说系统设计问题,其实,就算是算法问题,相信很多同学也都有体会。对于一个问题,描述它的解决思路是容易的,但真要落实到代码,完成正确的逻辑,就不那么容易了。 ...
百度工程能力白皮书--对工程能力永无止境的追求
francisk84的博客
08-26 1946
工程能力百度的意义: 公司研发工程能力的高低直接影响公司的持久创新力和公司在市场上的作为。只有不懈追求卓越的工程能力,才能够带来长期的核心竞争力,才能为每个用户、每个企业客户以及整个社会创造价值。长期以来,百度在大量的软件开发经验中总结了许多优秀的工程实践,这些实践来自于公司工程标准和开发工具链的结合。经过长期团队观察和大量研发数据分析,我们证明这些实践可以有效帮助提高软件开发效率和产品质量。...
工程效能十日谈》:一定要幸福哦
weixin_40768973的博客
07-18 100
效能人因无论人们如何精确或精细地度量生产力,实现生产力提高的最终瓶颈是行为的改变。如果理想中的生产力依赖于开发人员对自身生产力的洞察来识别个人改变的机会,那么为什么不首先关注开发人员,然后与其合作,识别提高生产力的机会(无论团队和组织的目标是什么?这将比试图准确、全面、大规模地度量生产力要经济得多。同时还可以进一步甄别最终负责实现生产力的人和专业技能。专注于开发人员对生产力的感受,也为生产力所有难...
回顾过往:谈工程效能
mujingluo的博客
04-06 190
工程效能一词最早来源于上个世纪的工业领域,核心要旨是在增加生产效率,不曾想在百年后的今天在互联网领域又被频繁使用,并且成为了SRE工作中极其重要的一项。从软件架构的角度上,回顾过去工作经历,大体经历了三个阶段:单机结构、分布式结构、微服务结构。
facebook、Netflix 10倍速工程效能提升实践
技术领导力
10-18 384
工程效能是什么呢?工程效能是研发团队能够持续为用户产生有效价值的效率,包括有效性、效率和可持续性三个方面。一提到工程效能,大家脑子里马上会浮现持续构建、持续发布、开发流程改进等词汇,往往会忽略有效性。有效性,指的是软件产品给用户带来的价值,如果研发团队辛辛苦苦开发了一个系统,交付给用户后,这个系统并没有很好地解决用户的实际问题,那么研发团队的工作就是无效的。所以,工程效能里首先强调的就是有效性,否...
YD_T 3763.2-2021-研发运营一体化(DevOps能力成熟度模型
01-20
第2部分:敏捷开发管理
03.景韵-基于DevOps标准的研发运营能力建设分享
10-24
03.景韵-基于DevOps标准的研发运营能力建设分享 线下论坛分享 运营 vivo 2018/10
linux-for-devops-engineers:用于DevOps工程师Linux
02-24
介绍 本书旨在作为面向新DevOps工程师的入门培训中使用Linux崩溃课程。 它包含了我作为系统工程师/应用程序管理员获得的知识。 状态草案在制品,我仍在决定结构以及要添加的内容。
azure-devops-python-api:Azure DevOps Python API
01-29
Azure DevOps Python API 此存储库包含用于与Azure DevOps进行交互和管理的Python API。 这些API支持Azure CLI的Azure DevOps扩展。 要了解有关Azure CLI的Azure DevOps扩展的更多信息,请访问回购。 安装 pip ...
aws-toolkit-azure-devops:适用于Azure DevOps的AWS工具
05-02
适用于Azure DevOps的AWS工具包添加了一些任务,可轻松在Azure DevOps(以前称为VSTS)和Azure DevOps Server(以前称为Team Foundation Server(TFS))中启用构建和发布管道,以与AWS服务一起使用,包括Amazon S3...
百度工程能力白皮书-工程标准.pdf
05-13
百度工程能力白皮书 Devops 论坛 最新版,描述百度相关工程质量标准和规范
华为硬件工程师手册(内部资料)
12-16
内容包括硬件开发过程,硬件工程师基本素质与技术,DSP 硬件设计,GPGA可编程器件的使用,MAX + PLUS II 开发工具,VHDL语言,常用通信协议及标准等等。
华为软件工程师手册(较正版)
12-11
华为软件工程师手册(较正版)
工程卓越和工具平台的关系
魏波
11-13 1095
工程卓越和工具平台 工具平台应该简单,易用,向下屏蔽复杂的实现,向上提供易于使用的能力,在不增加工程师学习成本的前提下,默默地优化研发过程的各个环节,提升整个工作的效率。在一定程度上,工具平台体现了“成全别人(用工具的人),死磕自己(工具开发者)”的设计哲学,但是工具平台并不是效能提升的全部,拥有工具和拥有能力是截然不同的两件事。很多公司采购了研效工具,就以为已经拥有了这样的能力,其实购买装备只能让你看起来显得专业而已。 我们不能仅仅关注工具,还要追求工程
goodCoder
HL_HLHL的博客
08-02 975
文章目录1.unset的使用2.自动加载文件函数3.等号的比较4.打印斐波那锲数5.判断类型的函数6.引用的基本使用7.请写一个函数,将一个长度超过10 的数组最后5项直接截取,不改变顺序变为前5项8.求数组中最大数的下标9.类10.生成订单号11.模拟get()/post()方法12.三种输出方法的比较13.字符串反转14. 将数组用一行拼装成一个字符串15.static 关键字用法16.遍历目...
百度工程效率部-实习研发工程师一、二面
zyh_helen的专栏
05-19 3632
一面:(2016/5/16)--->电面 //0:个人情况的了解(实习时间之类的) //1:项目1(C++的项目) //2:项目2(多线程) //3:对信号的理解(ctrl + z Ctrl + c Ctrl + / 分别代表什么)如何杀掉一个进程(kill - 9 PID) 9代表什么含义 //4:grep、awk、sed等工具的用途 //5:gcc的详细编译过程(预编译-->编译-->汇编-
数据技能图谱和产业地图
程序视界
06-25 3064
看到两张关于大数据的图,非常赞,推荐给大家。大数据挖掘工程师技能图谱:图片来自网络,原始出处不明大数据产业地图(来自“首席数据官联盟”):图片来自:首席数据官联盟如果大家...
【复盘】如何打造自己的研发能力
日拱一卒,不期速成!
03-26 1780
前提 什么是软件工程能力 1.软件研发的目的是为用户/客户创造价值 2.质量是生命线,质量是第一 3.实现软件的可持续交付 4.使用科学的方法 5.持续提升研发效率 为什么要提升软件工程能力 研发效率低的原因 1.缺乏需求分析 2.质量可以妥协 3.缺乏科学化,软件工程 4.不可持续维护和优化 软件研发能力要求 设计阶段 需求分析 系统设计 编码阶段 编码能力 代码提交 代码审查 保证质量 维护阶段 维护成本 开源协作 设计阶段-需求分析 目的:准确理解用户或者项目的功能,性能,可靠性等具体需
萧田国-权威解读devops标准体系及能力成熟度模型-发布版
最新发布
12-27
《萧田国-权威解读DevOps标准体系及能力成熟度模型-发布版》是一本针对DevOps领域的权威指南,旨在帮助企业了解和应用DevOps标准体系及能力成熟度模型,以实现持续交付和持续改进。 该指南首先介绍了DevOps的基本...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • [GIT实践]如何开启一个团队的CR机制-refs/for/branch和refs/head/branch 3749
  • 百度工程能力提升之道--方法,DevOps工具,人员能力,研发数据 3158
  • 百度工程能力白皮书--对工程能力永无止境的追求 1946
  • 百度APP大规模敏捷研发项目管理 939
  • BASH命令总结 638

分类专栏

  • 工程能力 3篇
  • devops 1篇
  • LINUX 1篇
  • 云原生 1篇
  • workshop 1篇
  • GIT实践 1篇
  • 转载
  • From Gitchat 1篇

大家在看

  • Python | Leetcode Python题解之第149题直线上最多的点数 100
  • Golang | Leetcode Golang题解之第150题逆波兰表达式求值
  • C语言 | Leetcode C语言题解之第150题逆波兰表达式求值
  • C语言 | Leetcode C语言题解之第149题直线上最多的点数
  • Golang | Leetcode Golang题解之第149题直线上最多的点数 50

最新文章

  • BASH命令总结
  • 深入理解网络协议
  • "我不要我觉得,我要你觉得"--如何根据企业研发的现状实施DevOps
2019年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司桂林网站推广工具报价丹竹头至尊标王报价黔西南百度关键词包年推广多少钱乌海关键词排名包年推广推荐西乡外贸网站制作南京推广网站价格连云港百度爱采购哪家好昭通关键词排名包年推广价格南阳百姓网标王推广推荐红河网站改版多少钱开封关键词按天扣费多少钱楚雄模板网站建设价格阳泉关键词按天计费报价铜仁seo网站优化多少钱张家口建设网站价格重庆网站制作设计价格黄冈关键词按天计费多少钱伊春品牌网站设计价格烟台百度竞价哪家好湘潭百度标王多少钱鹤岗英文网站建设推荐贵阳网站改版龙岩网站设计模板价格长春外贸网站制作推荐丹竹头英文网站建设报价孝感网站优化按天扣费价格玉溪百度竞价包年推广多少钱襄樊企业网站改版多少钱荆州网站搭建周口阿里店铺托管价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化