LVGL lv_color_t 像素定义详解

news2025/1/21 0:51:08

更多源码分析请访问:LVGL 源码分析大全

目录

  • 1、概述
  • 2、颜色格式详解
    • 2.1、LV_IMG_CF_RAW_X
    • 2.2、LV_IMG_CF_TRUE_COLOR_X
    • 2.3、LV_IMG_CF_INDEXED_XBIT
    • 2.4、LV_IMG_CF_ALPHA_XBIT
    • 2.5、LV_IMG_CF_RGBX
  • 3、送显函数(flush_cb)中的 lv_color_t
  • 附录
    • A、通过`lv_img_conv.js`生成的代码
      • A.1 CF_ALPHA_X_BIT
        • A.1.1 CF_ALPHA_1_BIT
        • A.1.2 CF_ALPHA_2_BIT
        • A.1.3 CF_ALPHA_4_BIT
        • A.1.4 CF_ALPHA_8_BIT
      • A.2 CF_INDEXED_X_BIT
        • A.2.1 CF_INDEXED_1_BIT
        • A.2.2 CF_INDEXED_2_BIT
        • A.2.3 CF_INDEXED_4_BIT
        • A.2.4 CF_INDEXED_8_BIT
      • A.3 CF_RAW_X
        • A.3.1 CF_RAW
        • A.3.2 CF_RAW_ALPHA
        • A.3.3 CF_RAW_CHROMA
      • A.4 CF_TRUE_COLOR_X
        • A.4.1 CF_TRUE_COLOR
        • A.4.2 CF_TRUE_COLOR_ALPHA
        • A.4.3 CF_TRUE_COLOR_CHROMA
      • A.5 CF_RGB565A8
    • B、lv_img_cf_t 的定义


1、概述

本章节从一个特殊的4x2的32位真彩色的长方形图片,通过工具 lv_img_conv.js生成不同的内置图片数据来入手,以更深入的了解LVGL中像素的处理思路和逻辑。
特殊的4x2的长方形图片是为了更方便我们理解像素的排布和处理逻辑,其原始数据被设置如下:
{0xFFAABBCC, 0xFFAA0000, 0xFF00BB00, 0xFF0000CC, 0x7F0000CC, 0x7F00BB00, 0x7FAA0000, 0x7FAABBCC}

小白提醒lv_img_conv.js 转换时,最好先将图片转换成png格式,因为使用bmp或者其它格式图片存在生成的数据丢失透明度的问题。

此案例中,我们转换了以下格式,在附录中,可以找到对应格式的数据截图:

  • CF_ALPHA_1_BIT, CF_ALPHA_2_BIT, CF_ALPHA_4_BIT, CF_ALPHA_8_BIT
  • CF_INDEXED_1_BIT, CF_INDEXED_2_BIT, CF_INDEXED_4_BIT, CF_INDEXED_8_BIT
  • CF_RAW, CF_RAW_CHROMA, CF_RAW_ALPHA
  • CF_TRUE_COLOR, CF_TRUE_COLOR_ALPHA, CF_TRUE_COLOR_CHROMA
  • CF_RGB565A8

生成的内置图片数据被定义为一个lv_img_dsc_t结构体供其它地址使用,这个结构体定义如下:

/**
 * The first 8 bit is very important to distinguish the different source types.
 * For more info see `lv_img_get_src_type()` in lv_img.c
 * On big endian systems the order is reversed so cf and always_zero must be at
 * the end of the struct.
 */
#if LV_BIG_ENDIAN_SYSTEM
typedef struct {
    uint32_t h : 11; /*Height of the image map*/
    uint32_t w : 11; /*Width of the image map*/
    uint32_t reserved : 2; /*Reserved to be used later*/
    uint32_t always_zero : 3; /*It the upper bits of the first byte. Always zero to look like a
                                 non-printable character*/
    uint32_t cf : 5;          /*Color format: See `lv_img_color_format_t`*/

} lv_img_header_t;
#else
typedef struct {

    uint32_t cf : 5;          /*Color format: See `lv_img_color_format_t`*/
    uint32_t always_zero : 3; /*It the upper bits of the first byte. Always zero to look like a
                                 non-printable character*/

    uint32_t reserved : 2; /*Reserved to be used later*/

    uint32_t w : 11; /*Width of the image map*/
    uint32_t h : 11; /*Height of the image map*/
} lv_img_header_t;
#endif

/** Image header it is compatible with
 * the result from image converter utility*/
typedef struct {
    lv_img_header_t header; /**< A header describing the basics of the image*/
    uint32_t data_size;     /**< Size of the image in bytes*/
    const uint8_t * data;   /**< Pointer to the data of the image*/
} lv_img_dsc_t;

lv_img_dsc_t结构体,有一个颜色格式(Color format)字段(header.cf),决定了对数据的处理逻辑,它被定义为lv_img_cf_t的枚举类型。
而这个lv_img_cf_t枚举分为了八类处理逻辑:

  • LV_IMG_CF_UNKNOWN 未知,资源可能出错了;
  • LV_IMG_CF_RAW_X 包含LV_IMG_CF_RAW, LV_IMG_CF_RAW_ALPHALV_IMG_CF_RAW_CHROMA_KEYED三种,表示此资源是一个原始数据资源,需要开发者先解码后才能使用;
  • LV_IMG_CF_TRUE_COLOR_X 包含LV_IMG_CF_TRUE_COLOR, LV_IMG_CF_TRUE_COLOR_ALPHALV_IMG_CF_TRUE_COLOR_CHROMA_KEYED三种,表示此资源是一个解码后的数据,解码后的数据具体使用的那种格式,取决于LVGL的宏LV_COLOR_DEPTHLV_COLOR_16_SWAP参数配置;
  • LV_IMG_CF_INDEXED_XBIT 包含LV_IMG_CF_INDEXED_1BIT,LV_IMG_CF_INDEXED_2BIT,LV_IMG_CF_INDEXED_4BITLV_IMG_CF_INDEXED_8BIT四种,表示这是一个颜色表+索引值方式保存的图片资源,其中颜色表的大小由XBIT决定(1BIT表示2位,2BIT表示4位,4BIT表示16位,8BIT表示256位);
  • LV_IMG_CF_ALPHA_XBIT 包含LV_IMG_CF_ALPHA_1BIT,LV_IMG_CF_ALPHA_2BIT,LV_IMG_CF_ALPHA_4BITLV_IMG_CF_ALPHA_8BIT四种,表示这是一个透明色表资源(没有像素信息,只有像素点上透明色的值),其中透明色的大小由XBIT决定(1BIT表示1位,2BIT表示2位,4BIT表示4位,8BIT表示8位);
  • LV_IMG_CF_RGBX 包含LV_IMG_CF_RGB888, LV_IMG_CF_RGBA8888,LV_IMG_CF_RGBX8888,LV_IMG_CF_RGB565, LV_IMG_CF_RGBA5658,LV_IMG_CF_RGB565A8六种,这是实现在图片送显或者处理中的数据格式;
  • LV_IMG_CF_RESERVED_X 预留字段,官方没有给处理方案或者逻辑,如果使用,需要开发者自行处理;
  • LV_IMG_CF_USER_ENCODED_X 开发者自定义加密数据处理,需要先解密再做其它处理;

2、颜色格式详解

2.1、LV_IMG_CF_RAW_X

此类颜色格式常用于保存原始的需要解码的图片资源,也可以用来保存JOSN音频等需要内置的资源。它具体有三种LV_IMG_CF_RAW, LV_IMG_CF_RAW_ALPHALV_IMG_CF_RAW_CHROMA_KEYED,这三种在LVGL里分别对应三种处理逻辑,如下表所示:

LV_IMG_CF_RAWLV_IMG_CF_RAW_ALPHALV_IMG_CF_RAW_CHROMA_KEYED
1、表示lv_img_dsc_t结构中的data字段保存的数据即为文件原始二进制数据1、表示lv_img_dsc_t结构中的data字段保存的数据即为文件原始二进制数据1、表示lv_img_dsc_t结构中的data字段保存的数据即为文件原始二进制数据
2、如果是图片,数据中没有透明色(即便有,应当丢弃)2、如果是图片,数据中包含透明色,应当使用此透明色进行图层混合2、如果是图片,当像素为LV_COLOR_CHROMA_KEY定义字段,应当将其像素点的透明色改为全透明色,否则为不透明

因此使用工具生成的LV_IMG_CF_RAW, LV_IMG_CF_RAW_ALPHALV_IMG_CF_RAW_CHROMA_KEYED三种类型的文件,仅是.header.cf字段上有差异,而其它的都是一样的数据;但在LVGL里的默认处理逻辑,却是不一样的。如下图所示:
在这里插入图片描述

小白提醒
1、LV_IMG_CF_RAW_X 类型多为开发者自解析或操作资源,因此实际项目中到底有没有遵循这一约束,实际上是不可控的,这里讲的是LVGL框架上计划或推荐使用的处理逻辑。
2、LV_IMG_CF_RAW_CHROMA_KEYED 多用于扣图显示逻辑中,应用最多的,就是将绿色(0x00FF00)的像素点全部换成透明色,以显示下一个图层的内容(拍摄中的小绿人,或者绿色布,多用这种方法替换成其它背景的)。

2.2、LV_IMG_CF_TRUE_COLOR_X

此类颜色格式是完全解码后的数据(真彩色),但解码后的数据使用的是 BGRA888还是 BGR565取决于LV_COLOR_DEPTH参数的配置。 仅对比生成的数据, LV_IMG_CF_TRUE_COLORLV_IMG_CF_TRUE_COLOR_CHROMA_KEYED生成的数据是一样的,而LV_IMG_CF_TRUE_COLOR_ALPHA多了一个字节的透明色值。
在这里插入图片描述

实际的像素格式,列举如下:

LV_COLOR_DEPTHLV_COLOR_16_SWAP数据格式LV_IMG_CF_TRUE_COLOR 示例
32无效BGRA888
(透明色全为0xFF)
在这里插入图片描述
161RGB565在这里插入图片描述
160BGR565在这里插入图片描述
8(或1)无效BGR332在这里插入图片描述
LV_COLOR_DEPTHLV_COLOR_16_SWAP数据格式LV_IMG_CF_TRUE_COLOR_ALPHA 示例
32无效BGRA888
(透明色为实际值)
在这里插入图片描述
161RGB565A8在这里插入图片描述
160BGR565A8在这里插入图片描述
8(或1)无效BGR332A8在这里插入图片描述

小白提醒
1、此种格式保存下来的图片资源占用空间是非常大的,唯一的好处是不用解码而可以直接使用;因此多用于对性能要求比较高的图片使用场景中(例如动画)

2.3、LV_IMG_CF_INDEXED_XBIT

此类颜色是颜色表+索引的方式保存的,多用于缩小图片资源的大小。LVGL在使用时,会先转换成 LV_IMG_CF_TRUE_COLOR_ALPHA 格式,因此在使用中,要考虑性能是否足够。
LV_IMG_CF_INDEXED_2_BITLV_IMG_CF_INDEXED_4_BITLV_IMG_CF_INDEXED_8_BIT 的颜色表是固定BGRA888格式,其颜色表长度分别2、4、16和256(不足的会用0x00000000来补全,如果颜色表超出会进行合并);
XBIT中的X代表索引占用的BIT位大小。
在这里插入图片描述

小白提醒
LV_IMG_CF_INDEXED_1_BIT 格式似乎与此说法不太符。因无项目使用此格式,未深入研究原因。

2.4、LV_IMG_CF_ALPHA_XBIT

此类型颜色格式仅保存了XBIT位的透明色值,多用于指定区域挖洞(挖洞后显示视频等)。
在这里插入图片描述

小白提醒
LV_IMG_CF_ALPHA_1_BIT 格式似乎与此说法不太符。因无项目使用此格式,未深入研究原因。

2.5、LV_IMG_CF_RGBX

LV_IMG_CF_RGBX 为具体实际的像素格式,但LVGL的格式定义与FFMPEG等主流的常见像素格式定义方式不太一样,个人也不知道具体原因。具体数据格式对应表如下:

LVGL像素格式FFMPG像素格式说明
LV_IMG_CF_RGB888BGR888char buf[3];
#define B buf[0]
#define G buf[1]
#define R buf[2]
LV_IMG_CF_RGBA8888BGRA8888char buf[4];
#define B buf[0]
#define G buf[1]
#define R buf[2]
#define A buf[3]
LV_IMG_CF_RGBX8888BGRX8888char buf[4];
#define B buf[0]
#define G buf[1]
#define R buf[2]
其中buf[3]为无效值
LV_IMG_CF_RGB565BGR565char buf[2];
#define B (buf[0] & 0x1F)
#define G ((buf[0] & 0xE0) >> 3) | (buf[1] >> 5))
#define R (buf[1] & 0x1F)
LV_IMG_CF_RGBA5658BGRA5658char buf[3];
#define B (buf[0] & 0x1F)
#define G ((buf[0] & 0xE0) >> 3) | (buf[1] >> 5))
#define R (buf[1] & 0x1F)
#define A buf[3]
LV_IMG_CF_RGB565A8BGR565A8char buf[3]; #define B (buf[0] & 0x1F)
#define G ((buf[0] & 0xE0) >> 3) | (buf[1] >> 5))
#define R (buf[1] & 0x1F)
#define A buf[3]

小白提醒
从表中看LV_IMG_CF_RGB565A8LV_IMG_CF_RGBA5658似乎是一样的,实现是有区别的。LV_IMG_CF_RGBA5658的数据排布是 BGRABGRA...的方式排布的,而 LV_IMG_CF_RGB565A8的数据排布却是BGRBGR...AA...

3、送显函数(flush_cb)中的 lv_color_t

送显函数中的 lv_color_t定义是由LV_COLOR_DEPTHLV_COLOR_16_SWAP决定的。对应的具体格式如下表所示:

LV_COLOR_DEPTHLV_COLOR_16_SWAP数据格式说明
32无效BGRA888(LV_IMG_CF_RGBA8888)带透明度,多用于Linux上或者RGB/MIPI等带透明色的32位屏
161RGB565多用于SPI屏
160BGR565(LV_IMG_CF_RGB565)多用于SPI屏
8无效BGR332没用过
1无效BGR111没用过

附录

A、通过lv_img_conv.js生成的代码

A.1 CF_ALPHA_X_BIT

A.1.1 CF_ALPHA_1_BIT

在这里插入图片描述

A.1.2 CF_ALPHA_2_BIT

在这里插入图片描述

A.1.3 CF_ALPHA_4_BIT

在这里插入图片描述

A.1.4 CF_ALPHA_8_BIT

在这里插入图片描述

A.2 CF_INDEXED_X_BIT

A.2.1 CF_INDEXED_1_BIT

在这里插入图片描述

A.2.2 CF_INDEXED_2_BIT

在这里插入图片描述

A.2.3 CF_INDEXED_4_BIT

在这里插入图片描述

A.2.4 CF_INDEXED_8_BIT

在这里插入图片描述

A.3 CF_RAW_X

A.3.1 CF_RAW

在这里插入图片描述

A.3.2 CF_RAW_ALPHA

在这里插入图片描述

A.3.3 CF_RAW_CHROMA

在这里插入图片描述

A.4 CF_TRUE_COLOR_X

A.4.1 CF_TRUE_COLOR

在这里插入图片描述

A.4.2 CF_TRUE_COLOR_ALPHA

在这里插入图片描述

A.4.3 CF_TRUE_COLOR_CHROMA

在这里插入图片描述

A.5 CF_RGB565A8

在这里插入图片描述

B、lv_img_cf_t 的定义

lv_img_cf_t 定义在lvgl/src/draw/lv_img_buf.h

/*Image color format*/
enum {
    LV_IMG_CF_UNKNOWN = 0,

    LV_IMG_CF_RAW,              /**< Contains the file as it is. Needs custom decoder function*/
    LV_IMG_CF_RAW_ALPHA,        /**< Contains the file as it is. The image has alpha. Needs custom decoder
                                   function*/
    LV_IMG_CF_RAW_CHROMA_KEYED, /**< Contains the file as it is. The image is chroma keyed. Needs
                                   custom decoder function*/

    LV_IMG_CF_TRUE_COLOR,              /**< Color format and depth should match with LV_COLOR settings*/
    LV_IMG_CF_TRUE_COLOR_ALPHA,        /**< Same as `LV_IMG_CF_TRUE_COLOR` but every pixel has an alpha byte*/
    LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED, /**< Same as `LV_IMG_CF_TRUE_COLOR` but LV_COLOR_TRANSP pixels
                                          will be transparent*/

    LV_IMG_CF_INDEXED_1BIT, /**< Can have 2 different colors in a palette (can't be chroma keyed)*/
    LV_IMG_CF_INDEXED_2BIT, /**< Can have 4 different colors in a palette (can't be chroma keyed)*/
    LV_IMG_CF_INDEXED_4BIT, /**< Can have 16 different colors in a palette (can't be chroma keyed)*/
    LV_IMG_CF_INDEXED_8BIT, /**< Can have 256 different colors in a palette (can't be chroma keyed)*/

    LV_IMG_CF_ALPHA_1BIT, /**< Can have one color and it can be drawn or not*/
    LV_IMG_CF_ALPHA_2BIT, /**< Can have one color but 4 different alpha value*/
    LV_IMG_CF_ALPHA_4BIT, /**< Can have one color but 16 different alpha value*/
    LV_IMG_CF_ALPHA_8BIT, /**< Can have one color but 256 different alpha value*/

    LV_IMG_CF_RGB888,
    LV_IMG_CF_RGBA8888,
    LV_IMG_CF_RGBX8888,
    LV_IMG_CF_RGB565,
    LV_IMG_CF_RGBA5658,
    LV_IMG_CF_RGB565A8,

    LV_IMG_CF_RESERVED_15,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_16,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_17,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_18,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_19,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_20,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_21,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_22,              /**< Reserved for further use.*/
    LV_IMG_CF_RESERVED_23,              /**< Reserved for further use.*/

    LV_IMG_CF_USER_ENCODED_0,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_1,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_2,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_3,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_4,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_5,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_6,          /**< User holder encoding format.*/
    LV_IMG_CF_USER_ENCODED_7,          /**< User holder encoding format.*/
};
typedef uint8_t lv_img_cf_t;

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

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

相关文章

【P54】JMeter 生成概要结果(Generate Summary Results)

文章目录 一、生成概要结果&#xff08;Generate Summary Results&#xff09;参数说明二、准备工作三、测试计划设计 一、生成概要结果&#xff08;Generate Summary Results&#xff09;参数说明 可以将测试结果在客户端模式下输出&#xff0c;同时能美化压测输出的结果 使…

申请Let‘s Encrypt免费SSL证书、自动化续签证书

一、环境 安装证书的环境为Centos Nginx&#xff0c;如果没有安装Nginx则需要先安装。 二、申请流程 1、开放80和443端口 firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port443/tcp firewall-cmd --reload2、安装 certbot 使用certbot工具能…

Doris动态表使用快速入门实战

1. 动态表构功能概述 半结构化数据&#xff0c;是介于结构化和非结构化之间的数据。和普通纯文本相比&#xff0c;半结构化数据具有一定的结构性。和结构化数据相比&#xff0c;其结构变化复杂&#xff0c;我们又不能方便的使用结构化的方式去描述它。 半结构的数据中通常即包…

Java基础知识总结归纳

0. 入门常识 0.1 Java 特点 0.2 Java 和 C 0.3 JRE 和 JDK 0.4 Java 程序编译过程 1. 数据类型 1.1 基本数据类型 1.2 引用类型 1.3 封装类 1.4 缓存池 2. 字符串 String 2.1 定义 2.2 不可变性的优点 2.3 String vs StringBuffer vs StringBuffer 2.4 字符串常量池…

【网络协议详解】——BGP协议(学习笔记)

目录 &#x1f552; 1. 概述&#x1f552; 2. BGP 发言人&#x1f552; 3. 工作原理&#x1f552; 4. 报文格式&#x1f558; 4.1 报文首部&#x1f558; 4.2 打开报文&#x1f558; 4.3 更新报文&#x1f558; 4.4 保活报文&#x1f558; 4.5 通知报文 &#x1f552; 5. BGP 的…

接口实战一“篇”入魂!你真正地了解接口测试么?

目录 前言&#xff1a; 需求描述&#xff1a; 计划和目标&#xff1a; 需求分析&#xff1a; 1.功能点划分 2.接口测试用例设计 3.测试用例评审 4.测试准备 5.测试执行 前言&#xff1a; 接口测试是软件测试的一种类型&#xff0c;它主要关注软件系统中的接口或 API …

STM32CubeIDE 入门教程

1.安装教程 1.1 去ST 官网下载软件安装包&#xff1a;https://www.st.com/content/st_com/en.html 1.2软件安装&#xff1a; 2.创建工程 2.1 双击打开软件&#xff0c;选择工作区路径&#xff0c;不要出现中文名称 2.2 选择直接创建STM32 工程&#xff0c;我们这里以STM32F103…

详细讲解!Selenium真正绕过webdriver检测

目录 前言&#xff1a; 一、什么是真正绕过浏览器检测&#xff1f; 2、 普通的启动webdriver 3、Js注入真正绕过webdriver的检测属性 js注入的文件[stealth.min.js] 前言&#xff1a; Selenium是一个流行的开源测试工具&#xff0c;用于网络应用程序测试。它使测试人员能够…

运用短信案例举例!Appium自动化测试该如何进行PO模式

目录 前言&#xff1a; 案例一&#xff1a;自动发送短信 前言&#xff1a; Appium是一种广泛用于移动应用程序自动化测试的工具&#xff0c;可以支持iOS和Android系统。在测试App时&#xff0c;使用Page Object&#xff08;PO&#xff09;模式可以提高测试用例的可重用性和可…

如何短时间内上手公众号的运营?选择工具很重要

现在网上都在讲如何运营微信公众号&#xff0c;讲有什么微信公众号技巧&#xff0c;这些都是需要用户话花较多的时间去尝试和理解&#xff0c;今天小编分享一个更简单高效运营公众号的方法&#xff01;下面跟着小编的教程一起学习如何使用乔拓云公众号助手去运营自己的公众号吧…

Vue3 ElementPlus Dialog封装

引言 多个页面中需要录入用户数据&#xff08;弹窗内容相同&#xff09;&#xff0c;重复写弹窗代码比较繁琐。因此封装一下组件&#xff0c;使用效果如下&#xff1a; 本例中模型较简单&#xff0c;记录下使用方法和原理 实现原理 参考VUE官方两个例子&#xff0c;基本父子件…

C++ 教程(02)---- 环境设置

本地环境设置 如果您想要设置 C 语言环境&#xff0c;您需要确保电脑上有以下两款可用的软件&#xff0c;文本编辑器和 C 编译器。 文本编辑器 这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。 文本编辑器的名…

技术架构演进

架构演进 单机架构应用数据分离架构应用服务集群架构读写 主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构实际互联网架构 单机架构 单机架构&#xff1a; 用户访问量很少&#xff0c;没有对我们的性能、安全等提出很高的要求&#xff0c;而且系统架构简单&#x…

Pilota:为什么一个代码生成工具如此复杂丨GOTC Rust系列分享

对于一个 Rust RPC 框架来说&#xff0c;根据 IDL 做代码生成是为了让用户更方便地使用框架。而生成代码的质量以及周边能力都会对用户的开发体验有着非常非常直接的影响。 所以&#xff0c;字节跳动 CloudWeGo 开发了 Pilota 这样的一个框架&#xff0c;来为用户生成良好的代码…

Redis延时双删

1.为什么缓存和MySQL数据没有保持一致性&#xff1f; 数据一致性是什么意思&#xff0c;“一致性”包含如下情况&#xff1a; 若缓存中有数据&#xff0c;则缓存的数据值需要和DB值相同若缓存无数据&#xff0c;则DB值必须是最新值 不符合这两种情况的&#xff0c;都属于缓存…

【OJ比赛日历】快周末了,不来一场比赛吗? #06.10-06.16 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-06-10&#xff08;周六&#xff09; #4场比赛2023-06-11…

实验五 标准ACL的配置【网络安全】

实验五 标准ACL的配置【网络安全】 前言推荐实验五 标准ACL的配置问题方案步骤 最后 前言 2023-6-8 18:54:22 以下内容源自《【网络安全】》 仅供学习交流使用 推荐 配置标准ACL 实验五 标准ACL的配置 问题 络调通后&#xff0c;保证网络是通畅的。同时也很可能出现未经…

软件测试与打螺丝

单元测试中的FIRST代表下面五组英文单词对应的原则&#xff1a; FastIsolated / IndependentRepeatableSelf-validatingTimely / Thorough 软件开发中&#xff0c;往往会因为我们没有注意到的逻辑或难以理解的代码&#xff0c;而引进Bug来。 怎么尽早地发现Bug&#xff0c;…

【springCloud-2】Ribbon负载均衡

负载均衡&#xff0c;一般分为服务端负载均衡和客户端负载均衡。 服务端&#xff1a;如Nginx&#xff0c;F5等&#xff0c;请求到达服务器后进行负载均衡。 客户端&#xff1a;客户端获取到服务端的列表&#xff0c;自己经过一定的计算后选择某一台访问。 ribbon实现的就是客…

Monica: 您的又一个免费ChatGPT 4.0

最近 ChatGPT 又开始封号了&#xff0c;主要原因如下&#xff1a; 违反使用条款&#xff1a;如果用户违反了平台或应用的使用条款&#xff0c;例如发布违法、恶意或滥用行为的内容&#xff0c;侵犯他人的权利&#xff0c;或者从事垃圾信息传播等&#xff0c;管理员可能会采取封…