当前位置: 首页 > news >正文

浅谈小程序开源业务架构建设之路

  一、业务介绍

1.1 小程序开源整体介绍

百度从做智能小程序的第一天开始就打造真正开源开放的生态,我们的愿景是:定义移动时代最佳体验,建设智能小程序行业标准,打破孤岛,共建开源、开放、繁荣的小程序行业生态。百度智能小程序的生态玩家有三类,分别是:联盟合作伙伴、开发者和用户。对于联盟合作伙伴,满足合作伙伴的生态共建、流量共享、商业共赢诉求,使得合作伙伴App内缺失场景得到高效补充,拉动合作伙伴App用户使用时长,共享小程序的变现收入。对于开发者,满足了开发者一次开发,多端运行诉求,使得开发者流量获取更加便捷高效、并且增加开发者商业收入。对于用户,满足用户的无需跳出即可享受一站式服务诉求。百度搜索做为小程序的十分重要分发入口,通过构建统一的小程序行业生态, 提升百度的搜索生态中的用户体验、服务闭环。

百度智能小程序开源的架构是如何支撑起整个联盟生态运转的呢?

如图所示,小程序开源联盟的整个业务架构分位四层。包括:联盟宿主层、对外联盟赋能层、中间服务层、基础建设层。

  • 联盟宿主层。百度智能小程序已经接入非常丰富的联盟宿主,包括OPPO浏览器、VIVO浏览器、小米浏览器、爱奇艺、百度极速版等等。

  • 对外联盟赋能层,百度智能小程序开源联盟主要通过开源联盟平台对宿主提供入场能力、经营能力、资源输出能力,以支持开源生态成员的入驻、配置、集成、准入检测、小程序信息、物料信息、分佣、订单信息、运营等诉求。宿主通过资源输出模块拿到小程序以及物料的数据后,可以在自己的App内场探索可落地的场景并进行资源的分发。

  • 内部中间服务层,主要是承上启下的服务,封装基础服务,并支撑对外联盟赋能层对基础业务数据的获取。主要包含:小程序开源宿主管理、能力资产管理、分发管理、订单及分佣管理、数据管理等。

  • 基础建设层,主要包含小程序开源框架、数据服务、小程序/物料服务、包服务以及安全加固等方案的落地。

1.2 小程序开源与厂商合作介绍

随着百度小程序开源联盟的不断发展,也吸引了头部手机厂商。小程序开源与厂商共建了丰富的业务场景,不仅包含厂商的浏览器场景,还有桌面锁屏、负一屏、全局搜等多种场景。如此多样化的场景建设中,我们面临的共性挑战是:如何保障厂商线上分发质量、如何建设一条从厂商浏览器到百度搜索到小程序的全流程分发管控通路,从而可以精准、实时的管控厂商浏览器的小程序分发。

具体我们是如何考虑并建设的呢?下面将详细介绍下。

二、整体技术建设思路介绍

2.1小程序开源分发保障技术要点

1.背景介绍

开源保障核心围绕的对象为宿主与小程序,核心目的是为了保障小程序在宿主上的分发质量。

为什么会存在分发质量问题?宿主在入驻开源后需要集成开源SDK并进行相关能力的开发,在这些流程完成后宿主就获得了相应的宿主能力。小程序是基于swanjs开发框架进行的开发,swanjs这套运行时框架底层同样是依赖开源SDK运行,因此在小程序完成开发后小程序本身也获得或依赖了相关能力。因为不同的宿主能力支持情况不同,就会导致同一个小程序在不同宿主上分发时可能遇到某个宿主不支持小程序使用到的某个能力,进而导致该小程序无法在宿主上正常打开或者降级为H5打开,导致用户体验受损。

因此需要有一套开源保障方案来提前发现宿主与小程序之间能力不匹配情况,进而确保系统能够自由管控小程序在宿主上分发全过程。

2.技术要点

要实现小程序在宿主上分发通路建设,核心涉及端流程打通、能力与定级流打通及最终分发流打通三大板块,如下图所示:

1)端流程包含宿主端流程和小程序端流程打通

a、宿主端流程:

宿主入驻开源,入驻成功后宿主需要集成开源SDK与开发,宿主开发完成后即可打包发布宿主App;同时宿主包在发布前需要经过宿主能力测试,通过下载宿主工具进行CTS能力测试并产出宿主能力支持情况。

b、小程序端流程:

开发者进行小程序开发,开发完成后操作小程序包版本发布上线,之后小程序开源保障模块会订阅小程序发版动作,同时拉取小程序包信息执行小程序能力扫描测试,并产出小程序能力使用情况。

2)能力与定级流

在宿主与小程序分别完成接入与能力扫描后,开源保障系统就可以分别基于宿主与小程序能力扫描结果进行解析,产出最终的宿主和小程序能力使用情况并存储。同时开源保障系统可以基于宿主能力与小程序能力分别对宿主和小程序进行能力定级,计算出宿主与小程序当前能达到哪个等级,并给宿主和小程序分别打上等级标识。

3)分发流

主要由小程序分发端实现,主要根据用户在开源保障系统中配置的分发策略,基于策略计算小程序是否满足在宿主上分发条件。

3.名词解释

SWANJS:小程序前端运行时框架。

能力:能力指的是小程序开源系统中,对百度APP或者说开源SDK中所封装并支持的各种API、组件、框架等系统能力的统称,详细可参考小程序开发者文档https://smartprogram.baidu.com/docs/develop/api/apilist/进行了解,目前小程序开源共支持的能力有1000多个。

CTS测试:CTS即Compatibility Test Suite, 兼容性测试套件;是为了保障智能小程序在宿主APP稳定运行,提供了一套兼容性测试集合,宿主APP上线前,需先通过CTS测试。

AST扫描:抽象语法树(Abstract Syntax Tree)扫描,是小程序应用的一种源码扫描工具,通过抽象语法树的方式对小程序源码进行扫描分析,目前已支持小程序用到的能力、能力属性、能力参数、能力返回值、能力涉及的关键路径等多种维度的扫描功能。

L级:根据能力在小程序侧使用情况,区分出一些基础能力与特色能力和低频能力等,同时宿主可以根据这些能力标准进行按需实现,等级划分如下:

L1:小程序自带,不用宿主额外配合(框架实现)。

L2:能力建议端补齐,确保基础体验,内部矩阵必要实现(包含手百独有能力在内的必要能力)。

L3:特色能力,强依赖端能力满足,宿主按需实现。

L4:低频能力,不追求满足,宿主按需实现。

2.2 宿主能力检测机制

1.使用宿主工具进行CTS能力测试

宿主在集成开源SDK并完成开发后进行打包,可在开源宿主平台下载宿主工具,对包体进行CTS能力测。,CTS支持宿主进行全能力自动测试和补充测试,补充测试可以对全能力测试中未通过的能力进行批量测试,测试完成后上传自动测试报告。其中还存在部分能力无法实现CTS自动化测试,需进行手动测试,测试完成后宿主在手机上传手动测试报告。

2.宿主工具上传测试报告

在宿主执行完自动测试与手动测试后,需分别上传自动测试报告与手动测试报告至开源保障系统,同时因为同一个宿主版本可能存在多次重复测试过程,会产生多份测试报告,因此宿主需要分别选择一份最终的自动测试报告和手动测试报告,使得开源保障系统可以对最终确认的报告进行解析。

3.报告解析产出宿主能力

开源系统在收到宿主确认报告的操作后,开始执行报告解析,计算宿主能力支持情况,产出最终的宿主能力列表并存储下来;在宿主能力产出的同时同样会执行宿主能力定级,计算出宿主能力等级并进行标记;产出的宿主能力和宿主等级将在后续宿主分发小程序时分发策略中使用。

能力检测服务可用性保障:

当用户完成测试报告确认动作后,开源保障系统实时进行报告解析和能力解析相关操作,在一个进程中完成,如果因为系统执行异常导致的宿主能力检测失败,开源保障系统中设计重试任务进行兜底,保障所有宿主都能完成能力检测。

2.3 小程序能力检测机制:

1.小程序包发布及发版消息订阅

小程序能力检测通路依赖开发者在开发者中心完成小程序开发与发版全流程,之后开源保障系统负责订阅小程序发版行为并自动拉取小程序包体信息,最后推送给AST小程序能力扫描工具进行扫描操作。

2.小程序能力扫描

小程序能力扫描核心依赖AST小程序能力扫描工具完成,该工具主要通过抽象语法树方式实现对小程序包体代码进行扫描分析,共支持扫描小程序使用到哪些开源能力,能力对应的参数、返回值及属性,及能力涉及的小程序关键路径,以上信息扫描成功后的结果将回传给开源保障系统。

3.小程序能力解析

开源保障系统在接收到AST小程序能力扫描结果后,会进行扫描结果分析,提取出小程序使用的能力情况及其他关键信息并存储下来,同时会触发小程序定级任务来执行小程序等级计算,产出并存储当前小程序包版本的等级以便后续保障流程使用。

能力检测服务可用性保障:

当开源保障系统订阅到小程序发版信息后,开始走推送AST扫描及后续流程,整个流程过程均为实时流,但是中间存在跨系统交互等多个子流程,为了保证小程序能力检测过程一定能全部执行成功,开源保障系统中设计重试任务进行兜底,对能力检测失败的小程序记录进行重推AST扫描及能力解析等,同时中间步骤保证幂等,保障所有小程序都能完成能力检测。

2.4 分发匹配机制:

为了得到宿主App与小程序的兼容情况,小程序开源业务系统建设了分级机制。将小程序与宿主App从低到高分别评定为 L1 至 L4 级,并基于L级确定可以分发哪些小程序。具体步骤包括:

1.宿主App与小程序的能力分析:将待匹配的宿主App进行能力测试得到宿主App所支持的全部能力;将待匹配的小程序进行能力扫描得到小程序运行需要的全部能力。

2.宿主App与小程序的等级评定:根据能力的重要性,对宿主App与小程序的能力进行等级映射、等级聚合来评定App与小程序的等级。

3.宿主App与小程序的分发匹配:根据宿主App等级确定匹配的小程序集,其中L1级的宿主App仅能匹配到L1级的小程序,L2级的宿主App可以匹配到L1与L2的小程序,宿主App的最高级别为L4,即具备运行全部小程序的能力。

2.5 分发干预机制:

为了得到宿主App上可分发的小程序,小程序开源业务系统结合内部分发匹配机制与管理员干预机制,来确定宿主App可以打开的小程序集。具体步骤包括:

1.小程序管理员管控:第一级小程序分发管控,基于管理员对小程序的私有化、App黑名单,以及小程序下线的诉求,确保App上无法打开私有、被拉黑、下线的小程序。

2.L级匹配机制管控:第二级小程序分发管控,通过L级匹配机制得到App可正常运行的小程序集合,使默认情况下宿主App只能打开L级相匹配的小程序。

3.宿主App管理员干预:匹配机制的补充,App管理员可根据小程序运行的数据、App应用场景等需求,提交想分发的小程序名单,来表达分发诉求。

三、总结与思考

打破孤岛,共建开源、开放、繁荣的小程序行业生态 一直是小程序开源联盟努力的目标。基础能力框架的完善、各行各业数据的互通以及开发者、宿主和百度友好积极的合作模式是完成这样目标的关键。技术架构的规划一定是围绕着共同的目标和伙伴们的诉求展开,切实的跟踪和服务为理念,用合理的技术手段赋能产品和生态,这样才可以体现生态价值。在小程序开源业务架构建设道路中对服务化结构以及全流程的问题排查有如下总结和思考:

3.1服务化架构的设计思路

1.基础数据的内聚和服务的收敛

数据是服务的基础,无论是开发者平台、tp平台还是宿主平台,都会对基础数据的使用场景,统一管理基础数据可以很好的保证基础信息在各个平台的统一性,而统一收敛的基础数据提供服务,可以有效的管理和运维。

2.自研rpc框架赋能微服务架构和治理

微服务的架构往往离不开的组件就是rpc框架,整体框架中的内部服务调用使用rpc框架,在提高网络交互的效率同时,使用rpc框架的运维功能,有效提高服务稳定性。

3.单一职责原则拆分原有的重模块,切实落地架构微服务化

随着开源业务逐年快速发展,很多模块原有的功能聚合和边界划分已经不太符合现有场景,基于业务发展的趋势和微服务单一职责理念,对服务进行拆解,不仅可以有效降低服务的耦合度,而且衍生出更易扩展和更健壮的服务。

4.日志收集、监控报警 服务稳定性保障

分布式的日志收集和全面的监控报警是保证服务稳定性的重要手段,也是问题排查和解决的常用方式,但也并不是所有的地方都要日志收集和监控报警,合理有效的的日志上报和监控报警指标可以有效的在第一时间发现问题和解决问题。

3.2全流程问题排查

小程序开源的链路比较长,在遇到线上badcase的时候,如果核心日志数据不完善,日志数据链路没打通,上下游数据链路情况就无法查询,排查问题周期长,甚至排查不了问题,继而导致稳定性问题得不到很好的解决和处理,基于这样的问题,在线日志建设十分重要。

1.http请求日志链路

  • trace维护:基于 server mesh 理念,使用 java agent 能力和 openTrace 标准,发布平台统一管理trace生成和传递,不仅无侵入,而且对于业务只需要很少的接入成本即可完成。

  • trace链路:发布平台提供想用的trace链路拓扑,有效的排查traceId下调用场景和花费时间,帮助开发同学及时发现问题和排查问题。

  • trace日志:统一分布式日志收集服务将收集业务方提交日志,兼容发布平台统一管理的trace信息,保留trace链路的具体日志详情,方便在具体问题场景上面更详细排查问题。

2.物料消息日志链路

  • 物料唯一标识:物料服务将统一管理和存储物料数据,对于不同场景的物料都有各自的唯一标识体系,使用物料唯一表示进行物料消息的链路日志串联。

  • 日志收集检索:公司统一的收集服务提供业务标识定义、检索和排序功能,对于长链路的物料消息传递分发场景,可以很好的串联起整个异步链路。

相关文章:

浅谈小程序开源业务架构建设之路

一、业务介绍 1.1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态,我们的愿景是:定义移动时代最佳体验,建设智能小程序行业标准,打破孤岛,共建开源、开放、繁荣的小程序行业生态。百度…...

git、gitee、github关系梳理及ssh不对称加密大白话解释

温馨提示:本文不会讲解如何下载、安装git,也不会讲解如何注册、使用gitee或GitHub,这些内容网上一大把,B站上的入门课程也很多,自己看看就好了。 本文仅对 git、gitee、github的关系梳理及ssh公钥私钥授权原理用白话讲…...

UDP协议详解

目录 前言: 再谈协议 UDP协议 比较知名的校验和 小结: 前言: UDP和TCP作为传输层非常知名的两个协议,那么将数据从应用层到传输层数据是怎样进行打包的?具体都会增加一些什么样的报头,下面内容详细介绍…...

Myb atis基础3

Mybatis注解开发单表操作Mybatis的常用注解Mybatis的增删改查MyBatis注解开发的多表操作MyBatis的注解实现复杂映射开发一对一查询一对多查询多对多查询构建sqlsql构建对象介绍查询功能的实现新增功能的实现修改功能的实现删除功能的实现Mybatis注解开发单表操作 Mybatis的常用…...

VHDL语言基础-时序逻辑电路-寄存器

目录 寄存器的设计: 多位寄存器: 多位寄存器的VHDL描述: 移位寄存器: 串进并出的移位寄存器的VHDL描述: 寄存器的设计: 多位寄存器: 一个D触发器就是一位寄存器,如果需要多位寄存器&…...

高通开发系列 - linux kernel更新msm-3.18升至msm-4.9

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 linux kernel更新msm-3.18升至msm-4.9第一周处理的内容:第二周处理的内容第三周处理的内容linux kernel更新msm-3.18升至msm-4.9 第…...

【Tensorflow2.0】tensorflow中的Dense函数解析

目录1 作用2 例子3 与torch.nn.Linear的区别4 参考文献1 作用 注意此处Tensorflow版本是2.0。 由于本人是Pytorch用户,对Tensorflow不是很熟悉,在读到用tf写的代码时就很是麻烦。如图所示,遇到了如下代码: h Dense(unitsadj_di…...

PyTorch学习笔记:data.RandomSampler——数据随机采样

PyTorch学习笔记:data.RandomSampler——数据随机采样 torch.utils.data.RandomSampler(data_source, replacementFalse, num_samplesNone, generatorNone)功能:随即对样本进行采样 输入: data_source:被采样的数据集合replace…...

设计模式(七)----创建型模式之建造者模式

1、概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解…...

DCGAN

DCGAN的论文地址[https://arxiv.org/pdf/1511.06434.pdf]。DCGAN是GAN的一个变体,DCGAN就是将CNN和原始的GAN结合到一起,生成网络和鉴别网络都运用到了深度卷积神经网络。DCGAN提高了基础GAN的稳定性和生成结果质量。DCGAN主要是在网络架构上改进了原始的…...

【速通版】吴恩达机器学习笔记Part3

目录 1.多元线性回归 a.特征缩放 可行的缩放方式: 1.除以最大值: 2.mean normalization: 3.Z-score normalization b.learning curve: c.learning rate: 2.多项式回归 3.classification logistics regression 1.多元线性回归 其意义很…...

【leetcode】跳跃游戏

一、题目描述 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输出:true 解释&#x…...

论文投稿指南——中文核心期刊推荐(冶金工业 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...

【GPLT 二阶题目集】L2-044 大众情人

人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比,并且距离感是单向的。例如小蓝对小红患了单相思,从小蓝的眼中看去,他和小红之间的距离为 1,只差一层窗户纸;但在小红的眼里&#xf…...

SpringBoot整合(二)MyBatisPlus技术详解

MyBatisPlus详解 一、标准数据层开发 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 MyBatisPlus的官网为:https://mp.baomidou.com/ 1.1 标准CRUD 1.2 新增 int insert (T t)T:泛型&#xff0c…...

导入importk8s集群,添加node节点,rancher agent,Rancher Agent设置选项

curl方式: Rancher在每个节点上部署代理以与节点通信。 此页面描述了可以传递给代理的选项,要使用这些选项,您需要采用创建自定义集群 ,并在docker run添加节点时将选项添加到生成的命令中。 常规选项 参数环境变量描述—serve…...

C++11--右值引用与移动语义

目录 基本概念 左值与右值 左值引用与右值引用 右值引用的使用场景和意义 左值引用的使用场景 右值引用和移动语义 移动构造和拷贝构造的区别 编译器的优化 移动赋值和赋值运算符重载的区别 右值引用的其他应用场景 完美转发 万能引用 完美转发保持值属性 完美转…...

Python SQLAlchemy入门教程

本文将以Mysql举例,介绍sqlalchemy的基本用法。其中,Python版本为2.7,sqlalchemy版本为1.1.6。 一. 介绍 SQLAlchemy是Python中最有名的ORM工具。 关于ORM: 全称Object Relational Mapping(对象关系映射&#xff0…...

你是真的“C”——操作符详解【下篇】+整形提升+算术转换

你是真的“C”——操作符详解下篇😎前言🙌操作符详解【上篇】内容:操作符详解【下篇】内容:1、 条件操作符2、逗号表达式:3、下标引用、函数调用和结构成员3、访问一个结构的成员表达式求值1、隐式类型转换&#xff1a…...

文本匹配SimCSE模型代码详解以及训练自己的中文数据集

前言 在上一篇博客文本匹配中的示例代码中使用到了一个SimCSE模型,用来提取短文本的特征,然后计算特征相似度,最终达到文本匹配的目的。但是该示例代码中的短文本是用的英文短句,其实SimCSE模型也可以用于中文短文本的特征提取&a…...

Biotin-PEG-FITC 生物素聚乙二醇荧光素;FITC-PEG-Biotin 科研用生物试剂

结构式: ​Biotin-PEG-FITC 生物素聚乙二醇荧光素 英文名称:Biotin-PEG-Fluorescein 中文名称:生物素聚乙二醇荧光素 外观:黄色液体、半固体或固体,取决于分子量。 溶剂:溶于大部分有机溶剂,…...

FISCO BCOS 搭建区块链,在SpringBoot中调用合约

一、搭建区块链 使用的是FISCO BCOS 和 WeBASE-Front来搭建区块链,详细教程: https://blog.csdn.net/yueyue763184/article/details/128924144?spm1001.2014.3001.5501 搭建好能达到下图效果即可: 二、部署智能合约与导出java文件、SDK证…...

面试官:int和Integer有什么区别?

回答思路: 原始数据类型和包装类介绍 主要区别(数据使用内存) 自动装箱、自动拆箱机制和实践原则 回答总结: int 是8种基本数据类型(byte、boolean、char、short、int、long、float、double)之一&#xff…...

MFC常用技巧

MFC常用技巧1、句柄MFC中如何获取窗口的句柄2、字符串CString转char*Unicode下char *转换为CString3、Visual C 64 位迁移的常见问题(数据类型、指针类型的长度问题)4、c - 将_beginthread返回的uintptr_t转换为HANDLE是否安全1、句柄 MFC中如何获取窗口…...

C++ —— 多态

目录 1.多态的概念 2.多态的定义及实现 2.1构成多态的两个硬性条件 2.2虚函数的重写 2.3override和final 3.抽象类 3.1接口继承和实现继承 4.多态原理 4.1虚函数表 4.2原理 4.3静态绑定和动态绑定 5.单继承和多继承体系的虚函数表 5.1单继承体系的虚函数表 5.2多继…...

java agent设计开发概要

agent开发设计 agent 开发的一些心得,适合熟悉agent或者有agent开发需求的同学 1 有个基础的agent,是java 标准的agent。这是agent代码入口 2 设计包结构, 基础agent agent下有plugin,加载plugin可以自己定义一个类加载器 plugin&#xff1…...

node.js笔记-模块化(commonJS规范),包与npm(Node Package Manager)

目录 模块化 node.js中模块的分类 模块的加载方式 模块作用域 向外共享模块作用域中的成员 向外共享成员 包与npm(Node package Manager) 什么是包? 包的来源 为什么需要包? 查找和下载包 npm下载和卸载包命令 配置np…...

Linux 磁盘坏块修复处理(错误:read error: Input/output error)

当磁盘出现坏块时,你对所关联的文件进行读取时,一般会出现 read error: Input/output error 这样的错误。 反过来讲,当你看到 read error: Input/output error 这种错误时,很大可能就是磁盘出现了坏块问题。 解决步骤&#xff1a…...

API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?

下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享. 一、token 简介 Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减…...

操作系统题目收录(六)

1、某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1us。在T时刻就绪队列中有3个进程P1P_1P1​、P2P_2P2​和P3P_3P3​,其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。若优先权值大的进程优先获…...

wordpress本地数据/拉新推广平台有哪些

我们编写的Web项目部署之后,经常会因为需要进行配置变更或功能迭代而重启服务,单纯的kill -9 pid的方式会强制关闭进程,这样就会导致服务端当前正在处理的请求失败,那有没有更优雅的方式来实现关机或重启呢?阅读本文需…...

网站开发文档模板/seo咨询师

摘要众所周知,windows7系统自带有家庭组功能,它是家庭网络上可以共享文件和打印机的一组计算机,使用家庭网络让共享变得简单,不过一些使用windows7系统的用户发现创建家庭组之后,却无法加入家庭组,这是怎么…...

网站建设建议/google搜索优化方法

本文介绍了三大主题:自动化持续集成/持续部署(CI/CD)配置、使用Git代码仓库用于常见的CI/CD工件以及参数化Jenkins管道。 术语介绍 先不妨定义几个术语。CI/CD是一种让团队可以快速自动测试、打包和部署应用程序的实践。它常常通过利用名为Jenkins的服务器来实现&am…...

网站内容建设整改工作/seo是啥

sizeof运算符用来计算某个对象在内存中占用的字节数。 此运算符的使用形式为:sizeof(类型名)或sizeof(表达式)。 计算结果是这个类型或者这个表达式结果在内存中占的字节数。转载于:https://www.cnblogs.com/xingkai/p/6322191.html...

如何创建旅游网站/谷歌排名推广

retrying用于程序在访问时可能会偶尔出现错误,并需要重新执行的场景,如爬虫。 1 安装 pip install retrying2 使用 可以指定函数出错的最大次数,被装饰函数反复执行全部出错才会出错,若有一次不出错则返回 使用方法 from retry…...

做网站学什么软件/网站首页制作网站

前言本文为笔者阅读 react-image[1] 源码过程中的总结&#xff0c;若有所错漏烦请指出。✨ 仓库传送门[2]作者&#xff1a;海秋https://github.com/worldzhao/blog/issues/1<img />可以说是开发过程中极其常用的标签了。但是很多同学都是<img src"xxx.png" …...