03ddf700439dd256827b19686c4eb798.gif

淘宝App搜索业务侧采用的是局部动态化的跨端技术架构,客户端提供丰富的基础能力与视图组件的API,前端负责业务视图搭建与业务逻辑实现。

de5b80aa104fc26e83d2f1c74f5e88b2.png

背景

目前客户端侧对于基础能力与组件的API信息内容是通过人工使用语雀文档来进行维护,然而端侧的API是在不断地迭代的,人工维护的方式存在以下的问题:

  1. 填写内容无统一规范,导致能力/组件介绍和调用规范不准确。

  2. 无卡口管控,文档内容同步非强制操作,导致有时候会忘记同步。(很多历史能力/组件的描述内容就是这样被遗漏的)。

而当调用规范文档有缺失后,对于跨端架构下的协同开发会带来下面的问题:

  1. 能力/组件介绍缺失:前端同学开发时无法获取到准确的端侧业务能力/组件的提供范围,导致出现二次开发的情况。

  2. 调用规范缺失:因缺少能力调用规范说明,增加了跨端协同之间的答疑和联调成本,降低了开发效率。

因此如何将端侧的API信息低成本的、规范化的维护,同时能够将这块信息高效的利用起来,降低跨端协同的成本是本篇文章的主题。

55103bd5247430c69995f165e6b850e4.png

思路分析

  现状

客户端侧的跨端API代码在编写时是有模板规范的(方便代码编译时检索与提取),且为了方便后续的维护,端侧同学在编写相关代码的时候,或多或少都会写一些注释对相关方法进行说明。eg:

基础能力模块相关:模块定义、模块方法

5c3a689fb7d0b0b4c5a6f6cd7e534b1d.png

视图组件相关:组件定义、组件属性、组件方法

3389e92f897b5e37c4d7cc659a92e3fd.png

  • 文档维护

在代码编写完后,端侧同学会按照自己的话术将注释内容进行丰富后(让前端同学能够理解的内容)维护到语雀文档中。

590934294bf307379d0aaf2aa338bd82.png

由于上面这种方式,无论是代码侧还是文档侧基本全靠开发同学的主观能动性来确保信息的完整和有效,那么久而久之就会出现背景中所述的问题。

  优化思路

  • 信息编写规范化

既然跨端能力代码可以有模板规范,那么也可以约定注释信息的填写模板,将注释内容信息规范化。

  • 信息收集自动化

基于规范化的注释内容,可以通过脚本工具或者编译插件工具,在代码编译时按照既定的规则将这些信息进行采集。采集到信息之后,通过服务上报的方式将数据持久化在远端数据库,方便后续的二次加工和使用。

  • 信息使用多样化

基于采集到的API信息,可以生成API介绍的网页来替代语雀文档展示的方式。

同时还可以更进一步,按照前端语言规范,将这些信息生成前端代码库的JS描述文件,实现了在前端IDE中编写代码时的端侧 Api 提示和代码补全能力,同时描述文件也可以使用npm进行版本管理。



基于以上思路分析,整体的方案链路大致如下:

d746ef218febcd1b00d0cc498a61a852.png

26e539a9b3ccec19fdc4754094c4ff48.png

模块拆解

综合考虑开发成本并结合Android端侧的编译环境,选择自定义Java注解和注解处理器的方式来作为信息生成的方案。

  基于注解的API信息生成

  • API注解与注解内容规范定义

既然是基于注解的自动化采集方式,我们除了需要将端侧复杂的API按照作用进行分类外,还需要对不同类目的API设计适配性的内容填写规范,使API信息尽可能的有效且丰富。

Java注解定义

9a5d65049e7f390da1641c53a369a5d7.png


注解内容规范定义

24303a5551a2461935d622cdb03131d6.png

ef28a6f7c0fa4e784966a411c7c3a0e0.png

  • API注解内容生成与维护工具

在实际操作过程中我们发现,为了尽可能完整的描述方法或者组件的能力和调用方式,有些比较复杂的方法需要填写的信息内容比较多,例:

1a0a5a6e4fd56573307b0a7d21aa3cb7.png

如果纯手工完成信息生成和后续的维护,难免会出现内容填写格式错误的情况,一旦内容填充错误,就会导致后续的信息采集失败。

既然注解内容的生成是有模板规范的,那么我们完全可以通过工具将一些关键字段补充之后,按照规范生成对应内容,于是就有了下面的注解内容自动化生成工具。

根据关键字段生成注解内容:

93e6eab3951b56d4816bcaebe94900d8.gif

相应的,也能通过注解内容反序列化成关键字段。

  基于自定义注解处理器的API信息采集

基于Java自定义注解的信息在填充完成后,我们需要自定义Java注解处理器,在代码编译时将相关信息采集并处理成我们需要的格式。

  • 信息采集规则

采集规则不用特殊设计,代码编译时按照注解的定义规则,将对应注解里面的字段按照定义拆解出key-value即可。

74c9d03c1289e960ce5cf7c14f20ee99.png

  • 生成目标文件

信息JSON文件

按照方案设计中的构想,我们需要将采集到的API信息进行上报,为了方便数据上报,我们将信息组装成json文件。

文件生成

9b806a609c5476e4fdd357727a632bd8.png

目标文件

46db80ba6506ebac72eba4db82f1812a.png


前端描述文件

为了支持前端IDE的代码提示,还需要按照前端的API描述文件编写规范生成对应的描述文件。

前端API描述文件规范

ea67f8acb3fd8a51b938c90a935a9392.png

文件生成

d984dd0c62b2f5b42619df999f455780.png

目标文件

dfdd096a17ad2a2528e8686f0ee1fa28.png

  基于脚本的API信息数据上报

目前端侧的打包发布平台支持丰富的自定义配置,在打包流水线中添加自定义脚本执行节点,在自定义脚本文件中完成API信息数据的上报和前端描述文件的发布。

ec2cd4f214424141348c03f891c9eef4.png

进展

  使用效果

  • 前端代码提示插件

目前前端代码提示插件已能正常使用,相比之前盲写代码还是舒服了不少。IDE中使用效果如下:

b4cf89842f6e7a96f374ba98a26e999f.png

  • 端侧API说明站点

通过持久化的API数据,自动生成相关API的说明站点,包含API的功能描述与调用方式。

8574895e727ba5a3ea30c5d3d389c269.png

  持续优化

  • API注解信息编译卡口检测

目前注解信息填写依靠CR规范限制开发者填写,后续考虑通过使用编译插件进行检测,对没有填写相关信息的API进行编译中断,强制开发者进行填写。

19adb03c3959a790b8f51e55e5e857ee.png

总结

以上就是淘宝App搜索业务在跨端架构下客户端侧API维护的一种思路实现方式,整体方案比较常规,也是希望通过将一些常用的工具进行组合,尽可能的提高跨端协同的效率与开发幸福感。

6003e4243197c23e97c8c8cccc93b598.png

团队介绍

我们是大淘宝技术营销与平台策略技术搜索终端团队,负责集团核心电商搜索推荐、图像视频搜索的业务研发,还致力于相关技术平台的建设、新业务和前沿技术探索等工作。

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

跨端架构下客户端侧API维护方案总结

相关文章

  1. 栈的数据结构

    一、栈的概念及结构 1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原…...

    2023/3/28 17:29:45
  2. 机器学习(四十七):万字可视化终极篇

    在下面的文章中,我将介绍可视化机器学习工具,并提供代码示例来创建一些最常见的机器学习可视化。 文章目录 混淆矩阵ROC-AUC图精确度-召回曲线手肘图残差图排名特征图分类平衡图验证曲线学习曲线特征重要性雷达可视化分类评估更多详细说明混淆矩阵 混淆矩阵是一种直观地评估…...

    2023/3/28 17:28:43
  3. 数据分发服务 (DDS)及Fast DDS环境搭建

    1. 数据分发服务 (DDS) 数据分发服务 (DDS)是一种以 数据为中心的通信协议,用于分布式软件应用程序通信。它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 (API) 和通信语义。 由于它是一个以数据为中心的发布订阅 (DCPS) 模型,因此…...

    2023/3/28 17:26:45
  4. 172_再谈 Power BI 客户帕累托(ABC)分析度量值写法

    172_再谈 Power BI 客户帕累托(ABC)分析度量值写法 一、背景 我们再来谈一谈帕累托在 Power BI 中的度量值写法。我们分别使用以RANKX 和 WINDOW 两个函数为核心写度量值。 按照惯例,我们先看一下示例结果。 Power BI 公共 web 效果:https://demo.jia…...

    2023/3/28 17:25:56
  5. AI Tool 免责申明

    AI Tool 免责申明 在使用本网站提供的 AI Tool 体验站服务前,请您务必仔细阅读并理解本《免责声明》(以下简称“本声明”)。请您知悉,如果您选择继续访问本网站、或使用本网站提供的本服务以及通过各类方式利用本网站的行为&…...

    2023/3/28 17:21:04
  6. Linux - 第9节 - Linux多线程

    1.Linux线程概念 1.1.线程的概念 书本中对线程的描述: 1.在进程内部运行的执行流 2.线程比进程粒度更细,调度成本更低 3.线程是CPU调度的基本单位 注:上面的说法都没有问题,这里我们以Linux内核的角度切入来讲解线程。 线程的概念…...

    2023/3/28 17:20:19
  7. mysql以txt文本方式快速导入导出百万数据

    1.先查看有没有设置权限 如果没有权限,会出现: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement show variables like %secure%; # 查看 secure-file-priv 当前的值是什么 show variables like …...

    2023/3/28 17:20:07
  8. 结合 Casbin 对 http 请求做 RBAC 鉴权以及添加请求路由参数支持

    目录 总结 背景 实操 安装 Casbin 创建一个 Casbin 模型 创建一个 Casbin 策略 加载 Casbin 模型和策略并创建一个路由 总结 在本文中,我们将介绍如何结合 Casbin 对 HTTP 请求进行基于角色的访问控制 (RBAC) 鉴权,并支持请求路由参数。我们将使用…...

    2023/3/28 17:19:54
  9. Pytorch : 自动求导

    在训练神经网络时,最常用的算法是反向传播算法。在该算法中,参数(模型权重)根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的期望输出和实际输出之间的差值。目标是使损失函数的结果尽可能接近于零。该算法通过网络反向遍历来调整…...

    2023/3/28 17:19:30
  10. 每周一算法:高精度加法

    高精度数值处理 在C++中,数值的加减乘除运算都已经在系统内部被定义好了,我们可以很方便的对两个变量进行简单运算。但其中变量的取值范围,各不相同,以整数为例,最大的是long long类型,范围是 [ − 2 63 , 2 63 ) [-2^{63},2^{63}) [−2...

    2023/3/28 17:19:20
  11. 神经网络可视化工具netron安装教程

    文章目录一. netron简介二. 不同操作系统下的安装使用方式2.1 在线版本:只要浏览器就可以2.2 不同操作系统安装使用三. netron支持的网络框架一. netron简介 在实际的项目中,经常会遇到各种网络模型,需要我们快速去了解网络结构。如果单纯的…...

    2023/3/28 17:19:02
  12. 信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

    文章目录概述什么是JS渗透测试?例子JS安全问题流行的Js框架有那些?如何判定JS开发应用?如何获取更多的JS文件?前端架构-手工搜索分析前端架构-半自动Burp分析自带功能官方插件第三方插件前端架构-自动化项目分析Jsfinder-从表现中…...

    2023/3/28 17:17:05
  13. 【Unity游戏开发教程】零基础带你从小白到超神28——反向动力学

    什么是反向动力学 一般我们都是通过父节点来调动子节点运动,而在实际开发过程中,有时候我们需要子节点带动父节点进行相应的动作。这种情况就是反向动力学。其实在国内的游戏中很少看见IK动画,一般而言国外的游戏较多。 通俗讲:就是使用场景中的各种物体来控制和影响角色身…...

    2023/3/28 17:15:47
  14. Leveldb源码解读------Memtable(跳表)详解

    在leveldb中的memtable实际上是对核心数据结构skipList做了一个包装,并对外提供了接口。 使用让我们一起来研究一下跳表 为什么使用跳表 因为memtable为了更快的查询,是一个sortmap要求。一般会采用红黑树,不过LevelDB采用的是Skiplist。S…...

    2023/3/28 17:15:12
  15. Git统计项目成员代码提交量

    目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员,如何查看各个时间段每个组员的代码提交量,下…...

    2023/3/28 17:11:01
  16. Vue实现单页缓存,下一页刷新

    vue单页缓存实现方案分析 实现前进刷新&#xff0c;返回不刷新的功能&#xff0c;并且返回时可以记住上一页的滚动位置&#xff0c;有两套方案可选 方案一&#xff1a;vue的keep-alive组件 具体使用如下&#xff1a; <keep-alive max"10"><router-view…...

    2023/3/28 17:09:36
  17. Downie 4 4.6.12 MAC上最好的一款视频下载工具

    Downie for Mac 简介 Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...

    2023/3/28 17:03:43
  18. vscode搭建Django环境五:vscode配置react开发环境

    1、安装node 请在官网下载安装&#xff1a;https://nodejs.org/zh-cn/vscode 中新建终端输入指令node -v&#xff0c;能显示版本号&#xff0c;说明 node 已经装好了输入指令npm -v&#xff0c;能显示版本号&#xff0c;说明 npm 可以使用了 nodejs安装参考&#xff1a;https…...

    2023/3/28 17:03:28
  19. TiDB入门篇-数据物理备份和恢复

    简介 快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现&#xff0c;将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群&#xff08;压缩后的&#xff09;单副本数据大小。备份完成之后&#xff0c;你可以在一个空集群或不…...

    2023/3/28 17:02:48
  20. 电脑录屏怎么录?超详细的录屏教程来了

    案例&#xff1a;电脑录屏怎么录&#xff1f;求详细的电脑录屏教程&#xff01; “最近的工作需要用到电脑录屏&#xff0c;但是我不知道电脑录屏怎么录&#xff1f;去网上搜索了一下教程都是比较大概的&#xff0c;我这个新手小白根本看不懂。在这里想问问大家&#xff0c;有…...

    2023/3/28 17:02:09
  21. 从0使用TCP手撸http服务器一

    背景介绍&#xff1a; 成熟的http服务器框架非常多&#xff0c;例如SB,flask,.net.....这些框架基本上都是运行在操作系统之上&#xff0c;非常的高级。但是我们做嵌入式的望尘莫及&#xff01;当然如果是linux的设备&#xff0c;可能还能用上轻量级的http服务器框架&#xff0…...

    2023/3/28 17:01:16
  22. Linux- 浅谈ELF目标文件格式

    理解了进程的描述和创建之后&#xff0c;自然会想到我们编写的可执行程序是如何作为一个进程工作的&#xff1f;这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”&#xff0c;是指编译器生成的文件。“目标”指目标平台&#xff0c…...

    2023/3/28 16:59:58
  23. 2022(二等奖)C859基于WebGIS的南京市排污口管理系统

    作品介绍 一、需求分析 &#xff08;一&#xff09;社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出&#xff0c;入河入海排污口(以下简称排污口&#xff09;是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门&#xff0c;是流…...

    2023/3/28 16:58:54
  24. MobTech|场景唤醒的实现

    什么是场景唤醒&#xff1f; 场景唤醒是moblink的一项核心功能&#xff0c;可以实现从打开的Web页面&#xff0c;一键唤醒App&#xff0c;并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态&#xff0c;比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...

    2023/3/28 16:57:55
  25. echarts 关系调用高亮示例 dispatchAction及其遇到的问题

    如图所示 <template><div class"Chart"><div class"main_box"><div class"diagram_box" v-if"activeChart diagram"><div class"drawer"><drawer:drawer.sync"drawer":cusStyl…...

    2023/3/28 16:56:33
  26. L1-018 大笨钟 L1-020 帅到没朋友 L1-034 点赞

    微博上有个自称“大笨钟V”的家伙&#xff0c;每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律&#xff0c;所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的&#xff0c;如果正好在某个整点敲&#xff0c;那么“当”数就等于那个整点数&#xff…...

    2023/3/28 16:55:06
  27. 两个数组的交集(力扣刷题)

    给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-arrays 说…...

    2023/3/28 16:54:40
  28. 【HashMap】jdk1.8中HashMap的插入扩容源码学习分析

    jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用&#xff0c;在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor&#xff08;加载因子&#xff09;用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...

    2023/3/28 16:53:02
  29. uni-app css尺寸单位rpx介绍

    一&#xff0c;前言 1.在使用uni-app开发小程序时支持的尺寸单位如下 &#xff08;1&#xff09;基础单位&#xff1a;px &#xff0c; rpx &#xff08;2&#xff09;h5单位&#xff1a;rem &#xff0c;vm &#xff0c;vh 2.rpx是微信小程序提出的一种响应式px 二&#x…...

    2023/3/28 16:52:49
  30. 纳瓦尔的推荐读物

    非虚构类 《无穷的开始&#xff1a;世界进步的本源》&#xff0c;戴维多伊奇这本书不是很好理解&#xff0c;但确实让我变得更聪明了。 《人类简史&#xff1a;从动物到上帝》&#xff0c;尤瓦尔赫拉利这本书介绍了人类的历史。书中的观察、框架和心智模型会让你以不同的方式看…...

    2023/3/28 16:50:33

最新文章

  1. 栈的数据结构

    一、栈的概念及结构 1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原…...

    2023/3/28 17:29:45
  2. 机器学习(四十七):万字可视化终极篇

    在下面的文章中,我将介绍可视化机器学习工具,并提供代码示例来创建一些最常见的机器学习可视化。 文章目录 混淆矩阵ROC-AUC图精确度-召回曲线手肘图残差图排名特征图分类平衡图验证曲线学习曲线特征重要性雷达可视化分类评估更多详细说明混淆矩阵 混淆矩阵是一种直观地评估…...

    2023/3/28 17:28:43
  3. 数据分发服务 (DDS)及Fast DDS环境搭建

    1. 数据分发服务 (DDS) 数据分发服务 (DDS)是一种以 数据为中心的通信协议&#xff0c;用于分布式软件应用程序通信。它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 (API) 和通信语义。 由于它是一个以数据为中心的发布订阅 (DCPS) 模型&#xff0c;因此…...

    2023/3/28 17:26:45
  4. 172_再谈 Power BI 客户帕累托(ABC)分析度量值写法

    172_再谈 Power BI 客户帕累托(ABC)分析度量值写法 一、背景 我们再来谈一谈帕累托在 Power BI 中的度量值写法。我们分别使用以RANKX 和 WINDOW 两个函数为核心写度量值。 按照惯例&#xff0c;我们先看一下示例结果。 Power BI 公共 web 效果&#xff1a;https://demo.jia…...

    2023/3/28 17:25:56
  5. AI Tool 免责申明

    AI Tool 免责申明 在使用本网站提供的 AI Tool 体验站服务前&#xff0c;请您务必仔细阅读并理解本《免责声明》&#xff08;以下简称“本声明”&#xff09;。请您知悉&#xff0c;如果您选择继续访问本网站、或使用本网站提供的本服务以及通过各类方式利用本网站的行为&…...

    2023/3/28 17:21:04
  6. Linux - 第9节 - Linux多线程

    1.Linux线程概念 1.1.线程的概念 书本中对线程的描述&#xff1a; 1.在进程内部运行的执行流 2.线程比进程粒度更细&#xff0c;调度成本更低 3.线程是CPU调度的基本单位 注&#xff1a;上面的说法都没有问题&#xff0c;这里我们以Linux内核的角度切入来讲解线程。 线程的概念…...

    2023/3/28 17:20:19
  7. mysql以txt文本方式快速导入导出百万数据

    1.先查看有没有设置权限 如果没有权限&#xff0c;会出现&#xff1a; The MySQL server is running with the --secure-file-priv option so it cannot execute this statement show variables like %secure%; # 查看 secure-file-priv 当前的值是什么 show variables like …...

    2023/3/28 17:20:07
  8. 结合 Casbin 对 http 请求做 RBAC 鉴权以及添加请求路由参数支持

    目录 总结 背景 实操 安装 Casbin 创建一个 Casbin 模型 创建一个 Casbin 策略 加载 Casbin 模型和策略并创建一个路由 总结 在本文中&#xff0c;我们将介绍如何结合 Casbin 对 HTTP 请求进行基于角色的访问控制 (RBAC) 鉴权&#xff0c;并支持请求路由参数。我们将使用…...

    2023/3/28 17:19:54
  9. Pytorch : 自动求导

    在训练神经网络时&#xff0c;最常用的算法是反向传播算法。在该算法中&#xff0c;参数(模型权重)根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的期望输出和实际输出之间的差值。目标是使损失函数的结果尽可能接近于零。该算法通过网络反向遍历来调整…...

    2023/3/28 17:19:30
  10. 每周一算法:高精度加法

    高精度数值处理 在C++中,数值的加减乘除运算都已经在系统内部被定义好了,我们可以很方便的对两个变量进行简单运算。但其中变量的取值范围,各不相同,以整数为例,最大的是long long类型,范围是 [ − 2 63 , 2 63 ) [-2^{63},2^{63}) [−2...

    2023/3/28 17:19:20
  11. 神经网络可视化工具netron安装教程

    文章目录一. netron简介二. 不同操作系统下的安装使用方式2.1 在线版本&#xff1a;只要浏览器就可以2.2 不同操作系统安装使用三. netron支持的网络框架一. netron简介 在实际的项目中&#xff0c;经常会遇到各种网络模型&#xff0c;需要我们快速去了解网络结构。如果单纯的…...

    2023/3/28 17:19:02
  12. 信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

    文章目录概述什么是JS渗透测试&#xff1f;例子JS安全问题流行的Js框架有那些&#xff1f;如何判定JS开发应用&#xff1f;如何获取更多的JS文件&#xff1f;前端架构-手工搜索分析前端架构-半自动Burp分析自带功能官方插件第三方插件前端架构-自动化项目分析Jsfinder-从表现中…...

    2023/3/28 17:17:05
  13. 【Unity游戏开发教程】零基础带你从小白到超神28——反向动力学

    什么是反向动力学 一般我们都是通过父节点来调动子节点运动,而在实际开发过程中,有时候我们需要子节点带动父节点进行相应的动作。这种情况就是反向动力学。其实在国内的游戏中很少看见IK动画,一般而言国外的游戏较多。 通俗讲:就是使用场景中的各种物体来控制和影响角色身…...

    2023/3/28 17:15:47
  14. Leveldb源码解读------Memtable(跳表)详解

    在leveldb中的memtable实际上是对核心数据结构skipList做了一个包装&#xff0c;并对外提供了接口。 使用让我们一起来研究一下跳表 为什么使用跳表 因为memtable为了更快的查询&#xff0c;是一个sortmap要求。一般会采用红黑树&#xff0c;不过LevelDB采用的是Skiplist。S…...

    2023/3/28 17:15:12
  15. Git统计项目成员代码提交量

    目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员&#xff0c;如何查看各个时间段每个组员的代码提交量&#xff0c;下…...

    2023/3/28 17:11:01
  16. Vue实现单页缓存,下一页刷新

    vue单页缓存实现方案分析 实现前进刷新&#xff0c;返回不刷新的功能&#xff0c;并且返回时可以记住上一页的滚动位置&#xff0c;有两套方案可选 方案一&#xff1a;vue的keep-alive组件 具体使用如下&#xff1a; <keep-alive max"10"><router-view…...

    2023/3/28 17:09:36
  17. Downie 4 4.6.12 MAC上最好的一款视频下载工具

    Downie for Mac 简介 Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...

    2023/3/28 17:03:43
  18. vscode搭建Django环境五:vscode配置react开发环境

    1、安装node 请在官网下载安装&#xff1a;https://nodejs.org/zh-cn/vscode 中新建终端输入指令node -v&#xff0c;能显示版本号&#xff0c;说明 node 已经装好了输入指令npm -v&#xff0c;能显示版本号&#xff0c;说明 npm 可以使用了 nodejs安装参考&#xff1a;https…...

    2023/3/28 17:03:28
  19. TiDB入门篇-数据物理备份和恢复

    简介 快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现&#xff0c;将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群&#xff08;压缩后的&#xff09;单副本数据大小。备份完成之后&#xff0c;你可以在一个空集群或不…...

    2023/3/28 17:02:48
  20. 电脑录屏怎么录?超详细的录屏教程来了

    案例&#xff1a;电脑录屏怎么录&#xff1f;求详细的电脑录屏教程&#xff01; “最近的工作需要用到电脑录屏&#xff0c;但是我不知道电脑录屏怎么录&#xff1f;去网上搜索了一下教程都是比较大概的&#xff0c;我这个新手小白根本看不懂。在这里想问问大家&#xff0c;有…...

    2023/3/28 17:02:09
  21. 从0使用TCP手撸http服务器一

    背景介绍&#xff1a; 成熟的http服务器框架非常多&#xff0c;例如SB,flask,.net.....这些框架基本上都是运行在操作系统之上&#xff0c;非常的高级。但是我们做嵌入式的望尘莫及&#xff01;当然如果是linux的设备&#xff0c;可能还能用上轻量级的http服务器框架&#xff0…...

    2023/3/28 17:01:16
  22. Linux- 浅谈ELF目标文件格式

    理解了进程的描述和创建之后&#xff0c;自然会想到我们编写的可执行程序是如何作为一个进程工作的&#xff1f;这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”&#xff0c;是指编译器生成的文件。“目标”指目标平台&#xff0c…...

    2023/3/28 16:59:58
  23. 2022(二等奖)C859基于WebGIS的南京市排污口管理系统

    作品介绍 一、需求分析 &#xff08;一&#xff09;社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出&#xff0c;入河入海排污口(以下简称排污口&#xff09;是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门&#xff0c;是流…...

    2023/3/28 16:58:54
  24. MobTech|场景唤醒的实现

    什么是场景唤醒&#xff1f; 场景唤醒是moblink的一项核心功能&#xff0c;可以实现从打开的Web页面&#xff0c;一键唤醒App&#xff0c;并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态&#xff0c;比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...

    2023/3/28 16:57:55
  25. echarts 关系调用高亮示例 dispatchAction及其遇到的问题

    如图所示 <template><div class"Chart"><div class"main_box"><div class"diagram_box" v-if"activeChart diagram"><div class"drawer"><drawer:drawer.sync"drawer":cusStyl…...

    2023/3/28 16:56:33
  26. L1-018 大笨钟 L1-020 帅到没朋友 L1-034 点赞

    微博上有个自称“大笨钟V”的家伙&#xff0c;每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律&#xff0c;所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的&#xff0c;如果正好在某个整点敲&#xff0c;那么“当”数就等于那个整点数&#xff…...

    2023/3/28 16:55:06
  27. 两个数组的交集(力扣刷题)

    给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-arrays 说…...

    2023/3/28 16:54:40
  28. 【HashMap】jdk1.8中HashMap的插入扩容源码学习分析

    jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用&#xff0c;在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor&#xff08;加载因子&#xff09;用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...

    2023/3/28 16:53:02
  29. uni-app css尺寸单位rpx介绍

    一&#xff0c;前言 1.在使用uni-app开发小程序时支持的尺寸单位如下 &#xff08;1&#xff09;基础单位&#xff1a;px &#xff0c; rpx &#xff08;2&#xff09;h5单位&#xff1a;rem &#xff0c;vm &#xff0c;vh 2.rpx是微信小程序提出的一种响应式px 二&#x…...

    2023/3/28 16:52:49
  30. 纳瓦尔的推荐读物

    非虚构类 《无穷的开始&#xff1a;世界进步的本源》&#xff0c;戴维多伊奇这本书不是很好理解&#xff0c;但确实让我变得更聪明了。 《人类简史&#xff1a;从动物到上帝》&#xff0c;尤瓦尔赫拉利这本书介绍了人类的历史。书中的观察、框架和心智模型会让你以不同的方式看…...

    2023/3/28 16:50:33