【微服务】SpringBoot 对接飞书多维表格事件回调监听流程详解
目录
一、前言
二、前置准备
2.1 创建一个应用
2.2 准备一张测试使用的多维表
2.3 获取对接文档
2.4 工程中添加SDK
三、对接过程
3.1 配置Encrypt Key 和 Verification Token
3.2 配置订阅方式
3.3 添加事件
3.4 申请权限
3.5 编写订阅代码
3.6 订阅文档事件
3.7 效果测试
四、在springboot工程中集成
4.1 导入基础以依赖
4.2 自定义一个配置类
4.3 启动服务和效果测试
五、写在文末
一、前言
在上一篇 【微服务】Java 对接飞书多维表格使用详解_飞书 java 多维表格-CSDN博客,分享了基于飞书开放平台对接多维表的过程,紧接着上一篇,本文将分享如何通过飞书提供的事件订阅机制,并集成到SpringBoot项目中对多维表数据的记录变更进行对接的详细流程。
二、前置准备
2.1 创建一个应用
参考上一篇创建应用的详细过程,后面在程序代码中调用API的前提都是基于创建的应用产生的信息。
2.2 准备一张测试使用的多维表
创建一张测试使用的多维表,将这个多维表的权限授权给上一步添加的应用,并提前为多维表添加几条数据
2.3 获取对接文档
通过飞书的开放平台找到事件与订阅部分的对接文档,文档链接:https://open.feishu.cn/document/server-docs/event-subscription-guide/overview
2.4 工程中添加SDK
如果在上一篇对接中添加了,可以忽略,以Java为例,在pom文件中添加如下依赖
<dependency><groupId>com.larksuite.oapi</groupId><artifactId>oapi-sdk</artifactId><version>2.3.6</version>
</dependency>
三、对接过程
接下来按照平台文档提供的操作步骤进行对接
3.1 配置Encrypt Key 和 Verification Token
这两个参数,官方文档说明是可选项,即可以不配,不配的话平台会默认生成两个参数,但如果你对数据传输安全性要求比较高的话,建议做一下配置(参数的位置,我的应用 —> 事件与回调 —> 加密策略)
3.2 配置订阅方式
这一步,表示后续在应用程序中通过哪种方式接收飞书平台的事件消息,平台提供了2种方式:
-
将事件发送至开发者服务器
-
这种方式需要开发者按照平台的要求,开发一个webhook接口,部署到IPV4类型服务器上,并在平台的控制台进行配置;
-
-
使用长连接接收事件
-
该方式是飞书 SDK 内提供的能力,你可以通过集成飞书 SDK 与开放平台建立一条 WebSocket 全双工通道(你的服务器需要能够访问公网)。后续当应用订阅的事件发生时,开放平台会通过该通道向你的服务器发送消息。
-
这也是官方推荐的一种配置方式;
-
点击进入到我的应用控制台,在订阅方式这里选择 ”长连接” 的方式
3.3 添加事件
这一步表示你需要对接哪些事件,是订阅多维表记录变更的事件?部门员工移除事件?还是一个审批通过的事件呢?即需要为当前应用关联需要处理的事件,这样飞书平台才能在后续将此类变更事件推送到应用程序。
添加事件入口如下,进入到我的应用之后,在事件与回调中,在上一步的基础上,点击右侧的添加事件,选择你要对接的事件进行添加,比如我这里选择的是多维表记录变更的事件。
3.4 申请权限
做完上面添加的监听事件之后,需要重新发布一下应用才能生效
选择版本管理,新增一个版本并点击发布,等待管理员审批通过即可
3.5 编写订阅代码
接下来,需要在代中编写监听程序,从而监听订阅的事件的数据变更,通过平台提供的示例代码直接拿来使用,简单修改下参数,然后运行起来即可,平台提供的参考代码链接:https://open.feishu.cn/document/server-docs/event-subscription-guide/event-subscription-configure-/request-url-configuration-case
完整的参考代码如下,代码中几个核心参数文档上面有描述,这里再单独说明一下:
-
appId
-
上一篇中创建应用后产生的那个 appId ;
-
-
appSecret
-
上一篇中创建应用后产生的那个 appSecret ;
-
-
Encrypt Key
-
事件与回调控制台上面那个参数,为空就不填;
-
-
Verification Token
-
事件与回调控制台上面那个参数,为空就不填;
-
package com.congge.web;import com.lark.oapi.core.request.EventReq;
import com.lark.oapi.core.utils.Jsons;
import com.lark.oapi.event.CustomEventHandler;
import com.lark.oapi.event.EventDispatcher;
import com.lark.oapi.service.im.ImService;
import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1;
import com.lark.oapi.ws.Client;
import java.nio.charset.StandardCharsets;public class Sample {// onP2MessageReceiveV1 为接收消息 v2.0;onCustomizedEvent 内的 message 为接收消息 v1.0。private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("7ZCxxfFBXsCJUa2j0MpfcTYiLkfJXAGG", "").onP2MessageReceiveV1(new ImService.P2MessageReceiveV1Handler() {@Overridepublic void handle(P2MessageReceiveV1 event) throws Exception {System.out.printf("[ onP2MessageReceiveV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent()));}}).onCustomizedEvent("drive.file.bitable_record_changed_v1", new CustomEventHandler() {@Overridepublic void handle(EventReq event) throws Exception {System.out.printf("[ onCustomizedEvent access ], type: message, data: %s\n", new String(event.getBody(), StandardCharsets.UTF_8));}}).build();public static void main(String[] args) {String appId = "你的appId ";String appSecret = "你的appSecret ";Client cli = new Client.Builder(appId, appSecret).eventHandler(EVENT_HANDLER).build();cli.start();}
}
代码运行起来之后,通过控制台输出日志可以看到已经与平台建立了通信
3.6 订阅文档事件
为了能让你的代码与平台给你正常推送事件消息匹配,还需手动在这里调用一下订阅文档事件的接口,官方客服解释说,只有调用一次,平台才知道后续是针对哪个事件的文档?哪个事件的多维表给你推送事件消息。
API控制台操作文档链接:
https://open.feishu.cn/document/server-docs/docs/drive-v1/event/subscribe?appId=cli_a79f0662f9bd500c
以本次测试使用的多维表为例进行说明,此处控制台中在调试时的几个参数至关重要,这里单独说明:
-
Authorization
-
这里的token使用用户的token,不要使用tenant的那个token;
-
-
file_type
-
这里取值为 bitable;
-
-
file_token
-
即多维表格类型的那个token,在上一步中有提到;
-
即这里的file_token取值为下图中的obj_token值,这个切记;
-
3.7 效果测试
上述都做完之后,然后回到多维表,删除下面这条数据
很快,在控制台上就能看到这个事件被捕获到了,相关的参数日志信息也输出出来了,后续程序中就可以基于这个输出的事件参数,做进一步的参数解析,从而进行后续的数据和逻辑处理了
四、在springboot工程中集成
细心的伙伴不难发现,官方提供的示例程序是一个main入口的演示代码,在真实的工程中集成时,这种方式肯定是不行的,下面来看怎么在springbooot工程中进行集成使用。
4.1 导入基础以依赖
依赖包含了飞书的SDK以及springboot运行所需的基础依赖
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.35</version>
</dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.12.0</version>
</dependency><dependency><groupId>com.larksuite.oapi</groupId><artifactId>oapi-sdk</artifactId><version>2.3.6</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope>
</dependency>
4.2 自定义一个配置类
该类模拟示例代码中的main程序,相当于是通过这个自定义的类启动一个异步任务,完整代码如下:
package com.congge.config;import com.lark.oapi.core.request.EventReq;
import com.lark.oapi.core.utils.Jsons;
import com.lark.oapi.event.CustomEventHandler;
import com.lark.oapi.event.EventDispatcher;
import com.lark.oapi.service.im.ImService;
import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1;
import com.lark.oapi.ws.Client;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;import java.nio.charset.StandardCharsets;@Component
public class SampleListenerTask {@PostConstructpublic void start(){String appId = "你的appId ";String appSecret = "你的appSecret ";Client cli = new Client.Builder(appId, appSecret).eventHandler(EVENT_HANDLER).build();cli.start();System.out.println("监听飞书多维表程序启动...");}// onP2MessageReceiveV1 为接收消息 v2.0;onCustomizedEvent 内的 message 为接收消息 v1.0。private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("7ZCxxfFBXsCJUa2j0MpfcTYiLkfJXAGG", "").onP2MessageReceiveV1(new ImService.P2MessageReceiveV1Handler() {@Overridepublic void handle(P2MessageReceiveV1 event) throws Exception {System.out.printf("[ onP2MessageReceiveV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent()));}}).onCustomizedEvent("drive.file.bitable_record_changed_v1", new CustomEventHandler() {@Overridepublic void handle(EventReq event) throws Exception {System.out.printf("[ onCustomizedEvent access ], type: message, data: %s\n", new String(event.getBody(), StandardCharsets.UTF_8));}}).build();}
4.3 启动服务和效果测试
将工程运行起来,通过控制台输出日志可以看到已经与飞书平台建立了通信连接
然后和上面操作类似,我们在测试的多维表中添加一条数据,通过控制台输出日志可以看到,程序已经捕捉到多维表的数据变化,后续只需要根据实际需要解析参数进行数据处理即可。
五、写在文末
本文通过案例和代码操作详细介绍了如何对接飞书多维表格事件回调监听流程,希望对看到的伙伴有用哦,本篇到此结束,感谢观看。
相关文章:
【微服务】SpringBoot 对接飞书多维表格事件回调监听流程详解
目录 一、前言 二、前置准备 2.1 创建一个应用 2.2 准备一张测试使用的多维表 2.3 获取对接文档 2.4 工程中添加SDK 三、对接过程 3.1 配置Encrypt Key 和 Verification Token 3.2 配置订阅方式 3.3 添加事件 3.4 申请权限 3.5 编写订阅代码 3.6 订阅文档事件 3.7…...
docker常用命令
docker 常用命令 1、查看基本信息 docker info docker run --rm hello-world docker pull nginx docker run -p 8080:80 nginx docker image ls 查看详细信息 docker inspect nginx 查看当前正运行的容器 docker ps 后台运行容器 docker run -d -p 8080:80 nginx 给容器取个名字…...
如何调用百度文心一言API实现智能问答
诸神缄默不语-个人CSDN博文目录 百度需要先认证个人信息才能使用LLM API。 文章目录 1. 获得 API Key2. 撰写代码并实现提问和回答2.1 用openai包实现调用2.2 用openai包实现流式调用2.3 用openai包实现工具调用2.4 构建智能体2.5 文生图2.6 图生图 3. 用gradio建立大模型问答…...
数据类型扮演着至关重要的角色
在Java编程语言中,数据类型扮演着至关重要的角色,它们定义了变量能够存储的数据类型以及可以对这些数据执行的操作。Java的数据类型主要可以分为两大类:基本数据类型(也称为原始数据类型)和引用数据类型。 基本数据类…...
React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
3.STM32通信接口之SPI通信---SPI实战(W25Q64存储模块介绍)《精讲》
上一节介绍了SPI的通信过程和方法,接下来就要进行STM32与外围模块通信了,这个模块是一块非易失型存储芯片,能够提供8MB的存储空间。接下来跟着Whappy脚步,进行探索新大陆吧!【免费】W25Q64(中英文数据手册)资源-CSDN文…...
yagmail邮件发送库:如何用Python实现自动化邮件营销?
🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…...
vue elementui layout布局组件实现规则的弹性布局
背景:遇到在一个容器里,采用弹性盒布局的时候,如果元素个数改变,元素的排列会错乱。 解决方式 方式一:之前遇到的时候,是采用计算元素个数的方式,采用透明元素补齐的方式(比如一个有…...
Python虚拟环境管理工具:Pipenv
Python虚拟环境管理工具:Pipenv 前言1. Pipenv的功能和特点2. 安装Pipenv3. 基本使用3.1 创建项目并初始化 Pipenv3.2 使用虚拟环境3.3 安装开发依赖3.4 查看当前依赖3.5 锁定依赖3.6 升级依赖3.7 卸载依赖 4. Pipenv vs. Poetry5. 常见问题 总结 前言 Pipenv 是一个…...
Tomcat使用教程
下载地址:https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…...
Flink历史服务器-History Server
在以session模式提交作业后,我们可以在session集群里查看作业的详细信息,但是假如session集群重启后,则不能再查看到之前作业的信息;或者以yarn application或per-job或k8s application模式提交,都存在一个问题,就是在作业完成后(即Flink集群关闭),无法查看作业信息,…...
redis核心命令全局命令 + redis 常见的数据结构 + redis单线程模型
文章目录 一. 核心命令1. set2. get 二. 全局命令1. keys2. exists3. del4. expire5. ttl6. type 三. redis 常见的数据结构及内部编码四. redis单线程模型 一. 核心命令 1. set set key value key 和 value 都是string类型的 对于key value, 不需要加上引号, 就是表示字符串…...
Java后端请求想接收多个对象入参的数据方法
在Java后端开发中,如果我们希望接收多个对象作为HTTP请求的入参,可以使用Spring Boot框架来简化这一过程。Spring Boot提供了强大的RESTful API支持,能够方便地处理各种HTTP请求。 1.示例:使用Spring Boot接收包含多个对象的HTTP…...
傅里叶变换FT——DFT——FFT(三者之间的关系)
FT 周期函数 f(t) 的傅里叶变换实质上是将函数信号分解为不同频率、不同幅值的正、余弦信号,如下图所示。换言之,无数个不同频率,不同幅值的正、余弦信号来不断逼近周期函数 f(t) 。 分解出的这些信号的频率都是基频 ω0 的整数倍࿰…...
华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称
场景介绍 如应用需要完善用户头像昵称信息,可使用Account Kit提供的头像昵称授权能力,用户允许应用获取头像昵称后,可快速完成个人信息填写。以下只针对Account kit提供的头像昵称授权能力进行介绍,若要获取头像还可通过场景化控…...
git命令-基本使用
#git安装后-指定名称和邮箱: $ git config --global user.name "Your Name" $ git config --global user.email "emailexample.com" #查看远程分支: git branch -a #查看本地分支: git branch #切换分支: git checkout…...
学习笔记050——SpringBoot学习1
文章目录 Spring Boot1、Spring Boot 配置文件2、Spring Boot 整合视图层3、Spring Boot 整合持久层 Spring Boot Spring Boot 可以快速构建基于 Spring 的 Java 应用,可以快速整合各种框架,不需要开发者进行配置,Spring Boot 会实现自动装配…...
【前端开发】微信裁剪图片上传
Cropper.js: 一款基于 JavaScript 的开源图片裁剪神器,支持图片裁剪、缩放、旋转 HTML页面引用: css:<link rel"stylesheet" type"text/css" href"css/cropper.css" /> js:<sc…...
【Golang】WaitGroup 实现原理
文章目录 前言一、介绍二、实现原理三、使用方式四、总结 前言 在并发编程中,协调多个 goroutine 的执行顺序和同步是一个常见的需求。Golang 提供了 sync.WaitGroup 来简化这一过程。WaitGroup 允许主 goroutine 等待一组 goroutine 完成工作。本文将详细介绍 syn…...
从被动响应到主动帮助,ProActive Agent开启人机交互新篇章
在人工智能领域,我们正见证着一场革命性的变革。传统的AI助手,如ChatGPT,需要明确的指令才能执行任务。但现在,清华大学联合面壁智能等团队提出了一种全新的主动式Agent交互范式——ProActive Agent,它能够主动观察环境…...
框架模块说明 #05 权限管理_03
背景 权限设计可以分为两个主要方面:操作权限和数据权限。前两篇文章已经详细介绍了操作权限的设计与实现,以及如何将其与菜单关联起来的具体方法。本篇将聚焦于数据权限,为您深入讲解相关的设计与实现方式。 全局开关 Value("${syst…...
autogen-agentchat 0.4.0.dev8版本的安装
1. 安装命令 pip install autogen-agentchat0.4.0.dev8 autogen-ext[openai]0.4.0.dev82. 版本检查 import autogen_agentchat print(autogen_agentchat.__version__)0.4.0.dev8import autogen_ext print(autogen_ext.__version__)0.4.0.dev83. 第一个案例 使用 autogen-age…...
JavaScript实现tab栏切换
JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先…...
yarn install遇到问题处理
1、Yarn在尝试安装一个依赖项时遇到了问题。具体来说,这个错误指出期望提升(hoist)的包的manifest文件丢失了,这通常是因为缓存中的数据损坏或不一致所致。 解决方法:有以下两种 1、清除Yarn缓存:运行 yarn…...
量化交易系统开发-实时行情自动化交易-8.9.通达信平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于通达信平台介绍。 通达信…...
qt QAnimationDriver详解
1、概述 QAnimationDriver是Qt框架中提供的一个类,它主要用于自定义动画帧的时间控制和更新。通过继承和实现QAnimationDriver,开发者可以精确控制动画的时间步长和更新逻辑,从而实现丰富和灵活的动画效果。QAnimationDriver与QAbstractAnim…...
Nginx篇之实现nginx转发兼容HTTP和Websocket两种协议
Nginx实现同时兼容http协议和websocket协议 map $http_upgrade $eop_gateway {default "eop-gateway-http";websocket "eop-gateway-ws"; }# 控制 Connection header map $http_upgrade $connection_upgrade {default "keep-alive"; # HTTP …...
底部导航栏新增功能按键
场景需求: 在底部导航栏添加power案件,单击息屏,长按 关机 如下实现图 借此需求,需要掌握技能: 底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。 比如放不下、顺序排列、坑点如…...
Mac安装MINIO服务器实现本地上传和下载服务
0.MINIO学习文档 Minio客户端mc使用 | Elibaron学习笔记 1.Mac安装MINIO 中文官方网址:MinIO下载和安装 | 用于创建高性能对象存储的代码和下载内容 (1) brew 安装 brew install minio/stable/minio (2)安装完成,执行brew i…...
SpringMVC:参数传递之日期类型参数传递
环境准备和参数传递请见:SpringMVC参数传递环境准备 日期类型比较特殊,因为对于日期的格式有N多中输入方式,比如: 2088-08-182088/08/1808/18/2088… 针对这么多日期格式,SpringMVC该如何接收,它能很好的处理日期类…...
【C语言基础】斐波那契数列
相信你是最棒哒!!! 文章目录 题目描述 正确代码: 总结 题目描述 菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。 给出一个正整数k,要求菲波那契数列中第k个数…...
Ubuntu无法连接Linux
检查网络连接 确保你的机器能够正常连接互联网。你可以尝试 ping 一下 GitHub 或其他网站,确认是否有网络问题: ping github.com如果无法 ping 通 GitHub,检查一下你的网络连接。 检查 GitHub 状态 有时候 GitHub 本身可能会出现服务故障。你…...
T5模型、GPT和BERT
目录 T5模型、GPT和BERT 一、T5模型 二、GPT模型 三、BERT模型(词嵌入模型,一个单词4096维度) 四、区别与联系 T5模型、GPT和BERT T5模型、GPT模型和BERT模型都是基于Transformer架构的预训练语言模型,但它们在设计目标、架构和应用上存在一些区别和联系: 1. **模型架…...
51c自动驾驶~合集39
我自己的原文哦~ https://blog.51cto.com/whaosoft/12707676 #DiffusionDrive 大幅超越所有SOTA!地平线DiffusionDrive:生成式方案或将重塑端到端格局? 近年来,由于感知模型的性能持续进步,端到端自动驾驶受到了来…...
ThinkPHP场景动态验证
一、缘由 今天在用thinkphp8写东西的时候发现,写验证器规则和场景优点费时间,就算用tinkphp的命令行生成也是生成一个空壳。内容还是要自己填写感觉麻烦。 就突发奇想能不能自动生成验证器,也不能是说自动生成验证器,生成验证其的…...
3D基因组工具(HiC可视化)trackc--bioinfomatics tools 35
01 3D genome data analysis guides 茶树三维基因组-文献精读19 https://trackc.readthedocs.io/en/latest/install.html #官网 https://github.com/seqyuan/trackc #官网https://trackc.readthedocs.io/en/latest/analysis_guide/index.html #HiC可视化案例 …...
Maven进阶
前言 我们这一节讲一下Maven 1. 分模块开发的意义 同一个程序我们按功能划分为不同的模块 同一个模块导成jar之类的,这样就可以共享数据了 2. 分模块开发与设计 我们以原来的ssm整合的模块来考虑 我们来把domain这个模块搞消失,重新制造一个模块 我们…...
【k8s】kubelet 的相关证书
在 Kubernetes 集群中,kubelet 使用的证书通常存放在节点上的特定目录。这些证书用于 kubelet 与 API 服务器之间的安全通信。具体的位置可能会根据你的 Kubernetes 安装方式和配置有所不同,下图是我自己环境【通过 kubeadm 安装的集群】中的kubelet的证…...
我们来学mysql -- 事务并发之脏写(原理篇)
事务并发之脏写 题记脏写防止脏写题记 在《事务之概念》提到事务对应现实世界的状态转换,这个过程要满足4个特性这世界,真理只在大炮射程之类,通往和平的道路,非“常人”可以驾驭一个人生活按部就班,人多起来,难免鸡飞狗跳同理现实世界的状态转换映射到数据库,满足4个特…...
AI×5G 市场前瞻及应用现状
本文为《5GAI时代:生活方式和市场的裂变》一书读后总结及研究。 本书的上架建议是“经营”,内容也更偏向于市场分析。书出版于2021年,现在是2024年,可以收集整理一些例子,看看书里的前瞻性5GAI应用预测,到…...
LLM:模拟o1的思维链实现
本文项目地址:https://github.com/stay-leave/enhance_llm/tree/main/like-o1 运行的流程: 1.输入用户消息,query 2.组装消息列表,包括系统提示词(关键),用户消息,助手消息ÿ…...
vue3+vite 批量引入组件动态使用
import { ref, reactive, toRaw, markRaw, defineAsyncComponent, onMounted } from vue import type { Component } from vue// vue3vite 批量引入组件动态使用 const modules import.meta.glob<Component>(./details/*.vue) // 明确指定导入的模块类型为Component con…...
PyQt 中的无限循环后台任务
在 PyQt 中实现一个后台无限循环任务,需要确保不会阻塞主线程,否则会导致 GUI 无响应。常用的方法是利用 线程(QThread) 或 任务(QRunnable 和 QThreadPool) 来运行后台任务。以下是一些实现方式和关键点&a…...
【python使用kazoo连ZooKeeper基础使用】
from kazoo.client import KazooClient, KazooState from kazoo.exceptions import NoNodeError,NodeExistsError,NotEmptyError import json# 创建 KazooClient 实例,连接到 ZooKeeper 服务器 zk KazooClient(hosts127.0.0.1:2181) zk.start()# 定义节点路径 path…...
【MySQL】内置函数
MySQL中的内置函数 一、日期函数1.1 current_date函数1.2 current_time函数1.3 current_timestamp函数1.4 date_add函数1.5 date_sub函数1.6 datediff函数1.7 now函数综合使用1综合使用2 二、字符串函数2.1 charset函数2.2 concat函数2.3 length函数2.4 replace函数2.5 substri…...
机器学习面试八股总结
下面是本人在面试中整理的资料和文字,主要针对机器学习面试八股做浅显的总结,大部分来源于ChatGPT,中间有借鉴一些博主的优质文章,已经在各文中指出原文。有任何问题,欢迎随时不吝指正。 文章系列图像使用动漫 《星游…...
【Android Debug Bridge】adb常用指令(更新中)
adb常用指令 ADB(Android Debug Bridge)是一个强大的命令行工具,用于与连接的Android设备进行通信。 1:安装软件包,假设app安装包为apk adb install [apk]2:查看当前连接PC的安卓设备编号 adb devices3…...
贵州大学oj平台软工24-11-27第5次小测
题目:阶乘和函数 题目描述 设计一个计算阶乘和的函数,用于求1!2!...n!并返回结果。 其中n是函数的参数。 程序的开始部分及main函数已经写好如下: #include <stdio.h> double factSum(int n); int main(){ int n; scanf("…...
【GPT】代谢概念解读
以下是对代谢中分解代谢和合成代谢两个概念的深入解读,用简单易懂的方式展开说明: 1. 分解代谢(Catabolism) 什么是分解代谢? 分解代谢是身体把大分子“拆开”的过程。就像把一个三明治分解成面包片、肉片和菜叶&#…...
Flutter如何适配RTL
阿拉伯语和希伯来语等是使用的从右到左书写的文字系统。世界上估计有4.22亿人以阿拉伯语做为母语。使用从右至左的人口可以说是更多了。所以对于出海项目来说,是不能忽视的一部分。 RTL可以说是本地化适配中比较麻烦的一项,并没有多语言适配来的简单。RT…...