彻底掌握Protobuf编码原理与实战
目录
1.类型
2.VARINT
2.1 无符号数
2.2 有符号数
3.定长
3.1 I64类型
3.2 I32类型
4.LEN
5.代码
学习这些有什么用?
- 如果你是后端开发者,掌握这个对工作非常有用
- 如果你是求职者,面试时可以临危不惧
1.类型
最近看到有直接操作wire type相关的api调用,例如:
WriteTag
WriteVarint32
等等,那么什么是wire type以及protobuf最核心的编码原理是什么?
| ID | Name | Used For |
|---|---|---|
| 0 | VARINT | int32, int64, uint32, uint64, sint32, sint64, bool, enum |
| 1 | I64 | fixed64, sfixed64, double |
| 2 | LEN | string, bytes, embedded messages, packed repeated fields |
| 3 | SGROUP | group start (deprecated) |
| 4 | EGROUP | group end (deprecated) |
| 5 | I32 | fixed32, sfixed32, float |
如上表,官方提供了六个wire类型,其中SGROUP与EGROUP废除掉了,我们忽略它,来看看其他4个编码。

本篇文章内容与代码已更新与知识星球,感兴趣的加入即可,欢迎一起讨论。

2.VARINT
相关文章:
彻底掌握Protobuf编码原理与实战
目录 1.类型2.VARINT 2.1 无符号数2.2 有符号数3.定长 3.1 I64类型3.2 I32类型4.LEN5.代码 学习这些有什么用? - 如果你是后端开发者,掌握这个对工作非常有用 - 如果你是求职者,面试时可以临危不惧 1.类型 最近看到有直接操作wire type相关的…...
移动测试之语音识别功能如何测试?
移动测试之语音识别功能如何测试? 要知道语音识别功能如何测试,我们先了解智能产品语音交互流程: 所以,要进行测试的话,我们需要从以下几个维度来准备测试点: 基础功能测试: 1、声纹的录入&…...
Python 图形化界面基础篇:使用网格布局( Grid Layout )排列元素
Python 图形化界面基础篇:使用网格布局( Grid Layout )排列元素 引言什么是 Tkinter 的网格布局?步骤1:导入 Tkinter 模块步骤2:创建 Tkinter 窗口步骤3:创建网格步骤4:将元素放置在…...
MongoDB副本集搭建
版本 > db.version() 4.4.24 > 集群相关命令 rs.status()## id 要和配置文件定义的replSetName一致 cfg{_id:"knight",members:[{_id:0,host:182.27.239.17:27017,priority:1}]}## id 要和配置文件定义的replSetName一致 cfg{_id:"knight",memb…...
【面试】Redis的热key问题如何发现和解决?
文章目录 背景一、怎么发现热key1.1 方法一:凭借业务经验,进行预估哪些是热key1.2 方法二:在客户端进行收集1.3 方法三:在Proxy层做收集1.4 方法四:用redis自带命令1.5 方法五:自己抓包评估 二、如何解决2.1. 利用二级缓存2.2. 备份热key2.3 永不过期2.4 分布式锁 三…...
LeetCode-热题100-笔记-day21
24. 两两交换链表中的节点https://leetcode.cn/problems/swap-nodes-in-pairs/ 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。…...
Spring框架中的@Conditional系列注解
目录 1 Contidional 介绍1.1 Condition 接口1.2 Spring Conditional注解实例1.3 Conditional 与Profile 的对比 2 Spring boot 扩展2.1 ConditionalOnClass和ConditionalOnMissingClass注解2.2 ConditionalOnBean 和ConditionalOnMissingBean注解2.3 ConditionalOnProperty注解…...
spring boot + minio 8.5.4 遇到 okhttp3包冲突
解决方案: 在你spring boot项目的根pom上指定okhttp3版本, <properties><okhttp3.version>4.8.1 </okhttp3.version></properties> 这样其他的模块引入minio就不会报错了 <dependencies><!--minio oss服务--><dependenc…...
springboot整合actuator、admin对应用程序进行监控
Spring Boot Actuator 是 Spring Boot 的一个子项目,可以对 Spring Boot 应用程序进行监控和管理,并对外提供了大量的端点,可以选择使用 HTTP 端点或 JMX 来管理和监控应用程序。 这篇文章主要介绍我们的应用程序中怎么加入actuator来对应用进…...
文举论金:黄金原油全面走势分析策略指导。
市场没有绝对,涨跌没有定势,所以,对市场行情的涨跌平衡判断就是你的制胜法宝。欲望!有句意大利谚语:让金钱成为我们忠心耿耿的仆人,否则,它就会成为一个专横跋扈的主人。空头,多头都…...
Fedora CoreOS 安装部署详解
《OpenShift 4.x HOL教程汇总》 Fedora CoreOS 的裸机安装方法_fedora coreos 安装-CSDN博客 OpenShift 4 - Fedora CoreOS (1) - 最简安装_fedora core 安装_dawnsky.liu的博客-CSDN博客 OpenShift 和 CoreOS 我们知道 Red Hat Enterprise Linux CoreOS(简称RHCOS&…...
Web应用开发 - 实训三 B Servlet基础
Web应用开发 - 实训三 B Servlet基础 前言: 零、前期准备准备工具创建项目导入 jar 包配置运行设置 一、实训第一部分第一张图第二张图第三张图 二、实训第二部分第一张图第二张图 前言: eclipse 是不可能用的,并不是说它界面丑,…...
Debian12安装 Docker
Docker中基本概念 镜像(Image) 镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配…...
Elasticsearch:为具有许多 and/or 高频术语的 top-k 查询带来加速
作者:Adrien Grand Disjunctive queries(term_1 OR term_2 OR ... OR term_n)非常常用,因此在提高查询评估效率方面它们受到了广泛关注。 Apache Lucene 对于评估 disjunctive queries 有两个主要优化:一方面用于详尽评…...
【pythonflask-1】简单实现加减乘除输入界面
app.py import flask from flask import Flask, render_template, request # 计算精确的浮点结果,float加法也计算不出来 from decimal import Decimalapp Flask(__name__)app.route(/) def home():return render_template(index.html)app.route(/calculate, meth…...
基于协同过滤算法的旅游推荐系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
遇见问题:使用mybaties向数据库中插入数据,idea显示插入成功,但是数据库中并没有数据变化?
遇见问题:使用mybaties向数据库中插入数据,idea显示插入成功,但是数据库中并没有数据变化? 可能的原因有几种: 没有提交事务:在使用 MyBatis 进行数据库操作时,需要手动提交事务。你可以在插入数据完成后…...
markdown学习笔记
markdown学习笔记 1.文字(依靠HTML) 1.1文字缩进-空格转义符 单字符空:  半字符空: 1.2文字对齐 「居中:」<center> 居中 </center> or <p align"center"> 居中 …...
C++项目实战——基于多设计模式下的同步异步日志系统-⑧-日志落地类设计
文章目录 专栏导读抽象基类StdoutSink类设计FileSink类设计RollBySizeSink类设计日志落地工厂类设计日志落地类整理日志落地拓展测试RollByTimeSink类设计测试代码测试完整代码 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领…...
从零开始探索C语言(八)----指针
文章目录 1. 什么是指针?2. 如何使用指针?3. NULL 指针4. 指针的算术运算5. 指针数组6. 指向指针的指针7. 传递指针给函数8. 从函数返回指针 有人说,指针是C语言的灵魂,所以学习C语言,学习指针是很有必要的。 通过指针…...
基于Claude API的智能代理框架:从架构设计到实战应用
1. 项目概述:一个面向Claude API的智能代理框架最近在折腾AI应用开发,特别是围绕Anthropic的Claude模型构建自动化工作流时,发现了一个挺有意思的开源项目——CLAUDGENCY。这个项目由开发者Aviralx77创建,本质上是一个专门为Claud…...
在ubuntu上使用nodejs通过taotoken统一调用多模型api
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Ubuntu 上使用 Node.js 通过 Taotoken 统一调用多模型 API 基础教程类,指导 Ubuntu 上的 Node.js 开发者如何利用 T…...
软件测试行业的结构性变化:外包测试正在消失,高端测试供不应求
一个正在被重新定义的职业 如果你是一位在软件测试领域工作了三到五年的从业者,大概率会在某个加班的深夜产生过这样的困惑:为什么招聘网站上“功能测试工程师”的岗位越来越少,薪资也停滞不前?为什么同事群里讨论的不再是如何设…...
Azure OpenAI代理:无缝迁移OpenAI应用到Azure云服务
1. 项目概述如果你正在使用或开发基于OpenAI官方API的应用,比如各种ChatGPT Web UI、LangChain应用,但同时又想利用微软Azure OpenAI Service在合规性、稳定性、网络延迟或成本控制上的优势,那么你大概率会遇到一个头疼的问题:这两…...
5分钟掌握TrafficMonitor插件系统:从零开始构建你的桌面监控中心
5分钟掌握TrafficMonitor插件系统:从零开始构建你的桌面监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 还在为Windows桌面上单调的系统监控而烦恼吗&#x…...
三引脚压电陶瓷片:从自激振荡原理到高效驱动电路设计
1. 三引脚压电陶瓷片为何成为硬件工程师的新宠 第一次接触三引脚压电陶瓷片时,我和大多数工程师一样充满疑惑:为什么要在传统两引脚结构上增加第三个引脚?直到在某个低功耗项目中,传统它激式蜂鸣器耗电量超出预期,我才…...
别再折腾了!STM32CubeMX+Keil 5+Proteus 8.9保姆级联调配置,一次搞定
STM32开发环境联调实战:从零搭建CubeMXKeilProteus高效工作流 第一次接触STM32开发时,我被各种工具链的配置折磨得焦头烂额——CubeMX生成的工程在Keil里报错、Proteus仿真时芯片毫无反应、Debug选项神秘消失...如果你也经历过这种绝望,这篇文…...
Sketch Find and Replace终极指南:设计师必备的批量文本替换神器
Sketch Find and Replace终极指南:设计师必备的批量文本替换神器 【免费下载链接】Sketch-Find-And-Replace Sketch plugin to do a find and replace on text within layers 项目地址: https://gitcode.com/gh_mirrors/sk/Sketch-Find-And-Replace 还在为Sk…...
别再死记硬背了!用PyTorch和TensorFlow动手实现四种池化层,直观理解它的作用
用代码可视化理解深度学习中的池化层:PyTorch与TensorFlow实战指南 当你第一次听说"池化层"这个概念时,是否也感到困惑?为什么神经网络需要这样一个"缩小"图像的层?本文将通过PyTorch和TensorFlow两种框架的实…...
3步解决下载难题:imFile下载管理器实战指南
3步解决下载难题:imFile下载管理器实战指南 【免费下载链接】imfile-desktop A full-featured download manager. 项目地址: https://gitcode.com/gh_mirrors/im/imfile-desktop 你是否经常遇到这些下载烦恼?浏览器下载速度慢如蜗牛,大…...
