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

浅谈开源在线客服系统与 APP 集成的技术方案与优劣势

在为移动端 App 接入在线客服系统的过程中,我经历了长时间的技术选型探索。最初,我也曾被一些“技术理想主义”选项所吸引,比如让用户自己研发界面我提供 API 以获得最高自由度,或集成 SDK 以追求原生体验。然而,随着项目逐步推进,我意识到单纯从技术出发的方案并不能完全满足真实业务场景下的复杂需求。尤其是在面对不同行业客户的使用反馈之后,我开始重新思考“选什么”的核心标准。我与来自电商、教育、SaaS、金融、政企等十几个行业的客户做了深入交流。通过大量实战落地和反馈,总结出几个重要判断维度:

  1. 上线周期是关键瓶颈:大部分客户希望在1~2周内完成客服上线,且不影响原有 App 的业务流程。能否“快速上线、无痛集成”成了第一考量。

  2. 界面一致性是用户体验关键点:用户期望客服界面与 App 的整体风格保持一致,不能跳出 App 界面,也不能出现风格割裂的第三方窗口。

  3. 功能完整性要求高:用户不仅要发文字、图片,还希望支持文件传输、智能机器人接入、满意度评价、排队与转接机制。

  4. 运维能力有限,不能承担复杂集成带来的长期成本:技术团队往往人手紧张,维护一个全自研客服模块(尤其是通信与状态同步)将成为高压负担。

  5. 多端适配成为隐性负担:让用户自研聊天界面,若在 Android / iOS / H5 上都要单独实现,那不仅工期翻倍,未来的维护也是灾难。

于是我逐渐明确了核心技术策略:选择一个高度可控、快速集成、功能完善、跨端复用的方案,才是大多数企业的最佳路径。 必须提供足够的灵活性(支持样式定制、参数透传、主题配置),同时也拥有成熟稳定的服务端支撑(排队逻辑、客服分配、历史记录、消息通知、满意度评价等)。

在接下来的正文中,我将详细对比几种主流 App 接入客服系统的技术路径,重点分享我们为何坚定选择 WebView 嵌入,并结合实际开发中踩过的坑与代码实践,希望对你在项目选型中有所启发。


这个开篇可以作为软文或技术文章的第一节内容,既真实、又专业、具备技术领导力的视角。如果你还需要我补充行业案例、数据引用、引用用户访谈摘要等素材,我们可以继续完善。是否要我接着写下一段“客户场景举例+适配判断”?

一、 SDK 集成或 API + 自研界面?

虽然 SDK 集成与 API 自研在某些极端定制场景中有其价值,但它们在实际落地过程中存在诸多隐性成本和风险。


❌ SDK 集成方式的常见问题

虽然“原生 SDK 集成”在宣传中常被标榜为“最佳体验”方案,但在实际工程实施中,这种方式往往带来隐藏的复杂性和长期维护成本。下面我们从开发、性能、兼容性三个层面进行分析,并结合代码示例说明问题。


1. 接入复杂,平台依赖重

SDK 往往要求在 Android 和 iOS 各自平台上分别集成,并配置一系列依赖库、权限声明、生命周期钩子,稍有不慎就可能造成运行错误或 App 崩溃。

示例:Android 集成时常见的问题片段:

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET"/>
<application>...<activity android:name="com.sdk.chat.ChatActivity"android:theme="@style/SDKTheme"android:exported="true"/>
</application>

// MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)ChatSDK.initialize(apiKey = "your_key",userId = user.id,context = this)
}

问题在于:

  • 每次 SDK 升级都有可能更改初始化参数或权限要求;

  • 某些 SDK 使用内部广播或 Service,不公开文档,干扰宿主 App 行为;

  • 混淆配置(ProGuard)不完整时,容易在 release 包中崩溃。


2. 体积与性能负担明显

许多第三方客服 SDK 打包了以下组件:

  • WebSocket 客户端(如 OkHttp/WebSocket);

  • 图片缓存库(如 Glide/Fresco);

  • 本地数据库(如 Realm、SQLite);

  • 内置 UI 模板、字体、动画资源等。

典型问题:

  • App 包体猛增 3~5 MB;

  • 启动初始化时间增加,尤其在低端设备上感知明显;

  • 与宿主 App 使用的库冲突,导致方法数暴增、Dex 限制问题。


3. 样式无法自定义,割裂用户体验

多数 SDK 提供的是一个封闭的“客服界面模块”,虽然也许支持修改 logo 或颜色,但想要深度定制(如自定义气泡、快捷回复布局、夜间模式适配)则非常困难。

示例:SDK 返回的聊天界面组件:

val intent = Intent(this, ChatSDK.getChatActivityClass())
startActivity(intent)

你无法像使用 Fragment 一样嵌入它,也无法对其 UI 做出任何 DOM 样式层级的控制。这会造成:

  • 与 App 原生风格不一致;

  • 切换页面、分享链接、发送图片等功能受限;

  • 多语言适配无法精细控制。


4. 更新不透明,调试困难

由于 SDK 由第三方维护,你的项目对其实现逻辑一无所知,调试几乎只能靠 SDK 输出的日志。

调试时常见的问题:

E/ChatSDK: WebSocket failed to connect.
E/ChatSDK: Internal message parser error.

你既无法进入 SDK 的源代码调试,也无法断点查看 WebSocket 的状态机、消息队列、超时策略等关键逻辑。

更糟糕的是,某些 SDK 使用了加壳、混淆保护技术,导致 logcat 输出异常,完全黑盒。


5. 与业务逻辑难以集成

假设你希望客服系统能识别 App 用户当前正在浏览的商品、订单、页面位置,并自动转接到对应技能组客服。在 SDK 集成方式下,这通常非常困难,原因有:

  • SDK 接口不支持动态透传上下文;

  • 无法实时从 App 获取业务事件;

  • 客服系统也未暴露相关服务端接口做二次分配。

示例:希望发送商品信息给客服:

ChatSDK.sendMessage("{ \"type\": \"product\", \"id\": \"123456\" }") // 通常 SDK 不支持结构化消息

此类自定义消息常被 SDK 拦截或格式化失败,完全无法实现你预期的产品功能。


非常好,延续技术风格,我们来扩展「API + 自研界面的陷阱」章节。我们将重点揭示:看似“自由度高”的自研,其实充满高复杂度、隐性坑和维护压力,并配以具体代码示例和典型技术难题,让内容足够“硬核”,适合技术论坛受众。


❌ API + 自研界面的陷阱

“自研客服界面”听起来自由度高、可控性强,但实际开发后你会发现,客服系统不是简单的“聊天室”,而是一个高复杂度的异步实时通信系统,包含消息状态、排队系统、断线重连、文件上传、客服转接、满意度评价等模块,每一个细节都可能踩坑。


1. 消息同步机制复杂,容易出错

聊天系统不是“简单发消息”,而是要处理如下状态:

  • 发送中 / 发送成功 / 发送失败;

  • 客服已读 / 未读;

  • 本地未读消息数计数;

  • 消息顺序乱序处理;

  • 重复消息去重。

示例代码:处理消息发送状态更新

function sendMessage(content: string) {const msgId = generateClientMsgId();renderMessageLocally({id: msgId,status: 'sending',content});sendToServer(content, msgId).then(() => updateStatus(msgId, 'sent')).catch(() => updateStatus(msgId, 'failed'));
}

问题在于:

  • 如果 WebSocket 中断,这段逻辑容易“发送成功但状态未回写”;

  • 用户反复点击发送时会重复发送;

  • 客服系统返回的 ack 消息无法精准对应 msgId,导致状态更新混乱。


2. 断线重连与消息补偿机制坑多

客服系统必须保证“不丢消息”。但自研时如果仅靠 WebSocket 重连,很容易漏消息、重消息。

你需要做的远比你想的多:

  • 客户端需记录最后一条消息时间戳;

  • 每次重连后要发起一段时间内的消息补偿请求;

  • 客服系统服务端需提供带 offset 的增量接口,并处理去重。

伪代码示例:

socket.onopen = () => {const lastTimestamp = getLastMessageTimestamp();fetch(`/api/messages/since?ts=${lastTimestamp}`).then(syncMessages);
}

问题是:

  • 消息是否按时间排序?是否可能服务端时钟不一致?

  • 补偿接口是否能处理网络高延迟情况下的顺序错乱?

  • 如何防止同步期间用户发送消息导致时序错乱?


3. 缺乏完整状态机控制,容易 UI 乱套

客服聊天界面实际上是一个“有限状态机”,不同状态下允许的操作完全不同:

  • 会话前:显示“欢迎语”

  • 排队中:显示“排队提示语”与“放弃排队”按钮

  • 会话中:显示对话窗口与快捷回复

  • 已结束:禁用输入框、显示“评价入口”

伪状态管理示意:

enum ChatState {NotStarted,Queuing,InConversation,Finished
}function renderUI(state: ChatState) {switch (state) {case ChatState.Queuing:showQueuePanel(); break;case ChatState.InConversation:showChatPanel(); break;...}
}

问题是:这些状态并不是线性演进,任何网络异常、客服转接、系统重启 都可能触发跳转,你必须手动控制每个状态迁移和回滚逻辑,稍不留神就是逻辑 Bug 或“死界面”。


4. 客服系统逻辑隐藏在服务端,接口文档未必告诉你真相

很多自研团队以为拿到 API 文档就能做完,其实根本不是。客服系统里的:

  • 技能组转接:需要服务端根据业务数据分配客服

  • 工作时间逻辑:非工作时间应自动进入留言模式

  • 满意度评价入口:需要根据服务端标识触发,且不能重复提交

  • 防刷机制:很多接口有速率限制,不说明

比如:你想在聊天结束时引导用户评价客服:

if (session.status === 'ended') {showSatisfactionSurvey(); // 然而服务端可能未允许
}

但服务端实际可能要返回一段标识,如:

{"canEvaluate": true,"evaluationId": "abc123"
}

你如果直接弹出入口就可能导致用户“评价失败,请稍后再试”。


5. 上传图片/语音/文件的细节几乎是地狱

文件上传是客服系统中的一大痛点:

  • 需对接服务器签名机制(如阿里 OSS、S3)

  • 上传前需校验文件大小、格式、权限

  • 上传后返回资源路径再发送消息内容

  • 上传失败还需断点续传或重试

伪代码:

async function handleFileUpload(file: File) {const signedUrl = await getUploadUrl(file.name);await fetch(signedUrl, { method: 'PUT', body: file });sendMessage({ type: 'image', url: signedUrl.split('?')[0] });
}

问题在于:

  • CDN URL 有效期,消息历史中可能已过期;

  • 文件类型需对接客服系统白名单;

  • 上传中的状态、进度条、失败提示、网络重试都需自己做。


6. 你得从零处理“排队机制”

客服排队逻辑远比你想象的复杂,包括:

  • 按技能组排队;

  • 每个客服并发上限;

  • 排队超时释放;

  • 用户取消排队操作;

  • 排队过程中消息不可发。

你可能自研成这样:

const queueStatus = await fetch('/api/queue-status');
if (queueStatus.position === 0) {startSession();
} else {showQueueWaiting(queueStatus.position);
}

但实际上:

  • 服务端可能会随时打断排队(客服离线、超时);

  • 你必须轮询状态;

  • 或使用 WebSocket 推送排队动态——你得自己维护“虚拟排队系统”。


二、WebView 嵌入:轻巧而高效的整合方案

我们在深入评估后,最终选择 WebView 嵌入方式作为升讯威在线客服系统与 App 对接的默认方案,WebView 嵌入方式,是指通过在 App 中内嵌客服系统的 H5 页面,完成客服窗口的接入。在不牺牲体验的前提下,实现了:

  • 更快的接入节奏;

  • 更轻量的客户端负担;

  • 更高的定制灵活性;

  • 更强的系统控制力。

这种方式在实践中表现出了以下优势:

✅ 1. 实现成本低,部署快速

  • App 仅需打开一个 WebView 并传入基本参数即可完成接入;

  • 客服界面、交互逻辑、消息处理等均由服务端负责渲染与控制;

  • 不依赖原生开发,可跨平台(iOS / Android)共用一套界面。

✅ 2. 更新维护方便

  • 客服界面的更新部署无需修改 App 代码,不需走 App Store 审核流程;

  • 可实现灵活的 A/B 测试与动态配置;

  • 前端改动可实时上线,快速响应产品和运营的变化需求。

✅ 3. 跨系统一致性强

  • 同一套页面在不同终端上的表现一致,有助于统一用户体验与品牌风格;

  • 对接逻辑在服务端统一控制,方便调试与故障排查。

✅ 4. 易于接入多渠道

  • 同一套网页客服模块可复用于官网、H5、小程序等多端场景;

  • 节省研发资源,提升整体系统复用率。

✅ 5. 灵活支持登录态与上下文透传

  • 可通过 URL 参数或 Cookie 注入用户信息、会话标识,实现精准识别;

  • 支持与 App 的用户系统打通,实现自动登录、上下文展示、客服分配等高级能力。

文章转载自:升讯威在线客服系统

原文链接:浅谈开源在线客服系统与 APP 集成的技术方案与优劣势 - 升讯威在线客服系统 - 博客园

体验地址:JNPF快速开发平台

相关文章:

浅谈开源在线客服系统与 APP 集成的技术方案与优劣势

在为移动端 App 接入在线客服系统的过程中&#xff0c;我经历了长时间的技术选型探索。最初&#xff0c;我也曾被一些“技术理想主义”选项所吸引&#xff0c;比如让用户自己研发界面我提供 API 以获得最高自由度&#xff0c;或集成 SDK 以追求原生体验。然而&#xff0c;随着项…...

AutoGPT,自主完成复杂任务

AutoGPT是一个开源的AI Agent项目&#xff0c;它的核心目标是让AI能够自主完成复杂任务&#xff0c;而不仅仅是回答单个问题。简单来说&#xff0c;它让AI具备了"自主思考和行动"的能力。 1. AutoGPT的核心概念 什么是AI Agent&#xff1f; AI Agent&#xff08;智…...

基于Qt C++的影像重采样批处理工具设计与实现

摘要 本文介绍了一种基于Qt C++框架开发的高效影像重采样批处理工具。该工具支持按分辨率(DPI) 和按缩放倍率两种重采样模式,提供多种插值算法选择,具备强大的批量处理能力和直观的用户界面。工具实现了影像处理的自动化流程,显著提高了图像处理效率,特别适用于遥感影像处…...

Qt Windows平台调用ffmpeg动态库

本文基于QT6.8实测验证。 一、下载预编译库‌ 从官方或第三方源获取FFmpeg的Windows动态库&#xff08;Shared版本&#xff09;&#xff0c;解压后需包含以下目录&#xff1a; bin   DLL文件&#xff08;运行时依赖&#xff09;include   头文件lib   .lib或.dll.a链接…...

猿人学js逆向比赛第一届第十三题

一、分析请求 通过分析请求得知&#xff0c;本题目的参数为yuanrenxue_cookie&#xff0c;因为题目中中明说了是动态cookie&#xff0c;所以可以先删除这个cookie然后下脚本断点&#xff0c;简单分析看一下页面执行的js代码逻辑。 在经过这段代码的时候很明显的可以看到这里的有…...

React性能优化精髓之一:频繁setState导致滚动卡顿的解决方案

在开发一个 List 页面时&#xff0c;我们遇到了一个典型的React性能问题&#xff1a;页面在滚动时出现明显卡顿。这个问题的调试过程充满了误判和重新思考&#xff0c;最终发现了一个重要的性能优化原则。 问题现象 我们有一个监控仪表盘页面&#xff0c;包含多个图表组件。用…...

JavaScript 事件常用属性

一、事件对象基础 在事件处理函数中&#xff0c;浏览器会自动传入一个 event 对象&#xff0c;它包含了与事件相关的所有信息。 element.addEventListener(click, function(event) {// event 是事件对象 }); 二、常见事件属性 属性名 类型 描述 type String 事件类…...

配置自己的NTP 服务器做时间同步

✅ 推荐方案&#xff1a;使用 chrony 搭建 NTP 服务器&#xff08;适用于 CentOS 7/8/9&#xff09; chrony 是 CentOS 推荐的 NTP 实现&#xff0c;精度高、资源占用低、同步快&#xff0c;默认在 CentOS 8 中取代了 ntpd。 &#x1f527; 一、安装 chrony sudo yum install…...

基于深度学习的双色球智能预测系统:从原理到实现

需要源码的小伙伴可以在这里直接下载&#xff1a;基于深度学习的双色球智能预测系统&#xff1a;从原理到实现&#xff08;完整代码训练数据&#xff09;可直接运行-预测&#xff09;资源-CSDN下载可直接运行&#xff0c;包括完整的训练测试数据&#xff0c;让你的双色球更准&a…...

STM32[笔记]--4.嵌入式硬件基础

4.嵌入式硬件基础 4.1认识上官二号开发板 主控芯片:STM32F103C8T6高速晶振:8M低速晶振:32.768kLED:5颗KEY:3个 主控芯片内部的资源如下项目介绍内核Cortex-M3Flsah64K*8bitSRAM20K*8bitGPIO37个GPIO,分别为PA0-PB15,PC13-PC15,PD0-PD1ADC2个12bitADC合计12了通道,外部通…...

Springboot项目中使用手机号短信验证码注册登录实现

文章目录 1. 功能概述2. 技术栈3. 实现步骤3.1 短信服务集成3.2 创建短信工具类3.3 验证码生成和存储3.4 控制器实现发送短信验证码手机号+验证码注册短信验证码登录3.5 服务层实现4. 前端实现4.1 API层4.2 手机号注册页面5. 最佳实践6. 总结本文将介绍如何在Spring Boot应用中…...

Python的GUI库选择指南(深度拓展)

前文我们分析了python的GUI库&#xff0c;有很多&#xff0c;面向应用场景也不尽相同&#xff0c;如何在使用过程中&#xff0c;选择合适的GUI库呢&#xff1f;可以查看&#xff1a;python有哪些常用的GUI&#xff08;图形用户界面&#xff09;库及选择指南-CSDN博客 初学者推…...

Kubernetes生命周期管理:深入理解 Pod 生命周期

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

JVM(12)——详解G1垃圾回收器

G1&#xff08;Garbage-First&#xff09;垃圾回收器。它是现代 Java 应用中默认的垃圾回收器&#xff08;自 JDK 9 起&#xff09;&#xff0c;旨在提供一个高性能、可预测停顿时间&#xff08;低延迟&#xff09;的解决方案&#xff0c;尤其适合大内存&#xff08;多GB甚至TB…...

Matplotlib vs Seaborn:选择与区别

相同点 都是Python数据可视化库&#xff1a;两者都用于创建统计图形和图表 基于Python生态系统&#xff1a;都与NumPy、Pandas等科学计算库良好集成 开源免费&#xff1a;两者都是开源项目&#xff0c;可自由使用 支持多种图表类型&#xff1a;都能创建折线图、柱状图、散点…...

TCP/UDP协议深度解析(一):UDP特性与TCP确认应答以及重传机制

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 前言 在网络通信的世界里&#xff0c;传输层协议如同交通规则&#xff0c;决定了数据包如何从源头抵达目的地。其中UDP和TCP就…...

Linux线程概念及常用接口(1)

目录 1. Linux线程概念 什么是线程 线程的优点 线程的缺点 线程异常 线程用途 2. Linux进程VS线程 进程和线程 关于进程线程的问题 3. Linux线程控制 POSIX线程库 创建线程 线程ID及进程地址空间布局 线程终止 线程等待 为什么需要线程等待&#xff1f; 4. 分离线程 1. Linux线…...

Qt+OPC开发笔记(三):OPC客户端订阅特点消息的Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/148868209 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

《美化生活》投稿简介

《美化生活》杂志是国家新闻出版署批准的正规期刊&#xff0c;是面向全国发行的文学艺术刊。本刊坚持“传播新理念&#xff0c;交流新经验”办刊方针&#xff0c;坚持“指导消费、丰富生活、美化心灵、雅俗共赏”的宗旨&#xff0c;以其丰富的内容&#xff0c;融学术性与技术性…...

如何为虚拟机上的 Manjaro Linux启用 VMware 拖放功能

如果你的Manjaro 发行版本是安装在 VMware Workstation Player 上使用的 &#xff0c;而且希望可以通过拖放功能将文件或文件夹从宿主机复制到客户端的Manjaro 里面&#xff0c;那么可以按照以下的步骤进行操作&#xff0c;开启拖放功能。 在 VMware 虚拟机上安装 Manjaro 后&…...

VIVADO导出仿真数据到MATLAB中进行分析

VIVADO导出仿真数据到MATLAB中进行分析 目录 前言 一、导出仿真数据需要编写的RTL代码 二、MATLAB读入txt文件中的数据 三、需要注意的点 总结 前言 在使用 Xilinx Vivado 进行 FPGA 开发时&#xff0c;如何将 RTL 仿真生成的数据导出&#xff0c;进行进一步分析与可视化&…...

Harmony状态管理@Event

ArkUI Event装饰器&#xff1a;实现子组件向父组件通信的规范方式 概述 Event装饰器是ArkUI框架中用于规范组件间通信的重要工具&#xff0c;特别是在需要子组件向父组件请求更新Param变量的场景下。它通过回调机制实现数据的双向同步&#xff0c;是组件化开发中不可或缺的一…...

算力服务器选型

算力服务器选型需结合应用场景、算力需求及扩展性&#xff0c;核心要素如下&#xff1a; 应用定位&#xff1a; AI 训练 / 推理&#xff1a;优先高算力 GPU&#xff08;如 NVIDIA A100、H100&#xff0c;或 RTX4090&#xff09;&#xff0c;搭配多核 CPU&#xff08;如 Intel …...

基于目标驱动的分布式敏捷开发

研究结论 风险对项目目标的影响 时间目标&#xff1a;需求管理不当&#xff08;如需求优先级不明确、多产品负责人需求冲突&#xff09;、架构变更导致的返工、跨站点协调问题&#xff08;如第三方依赖、通信基础设施不足&#xff09;是影响项目时间的主要风险因素。质量目标&…...

大数据在UI前端的应用拓展:用户行为分析的深度挖掘

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在当今数字化时代&#xff0c;大数据已成为推动各行业发展的核心动力之一。对于 UI 前端而言&…...

elk+filebeat收集springboot项目日志

目录 步骤 1: 安装和配置Elasticsearch 步骤 2: 安装和配置Logstash&#xff08;可选&#xff09; 步骤 3: 安装和配置Filebeat 步骤 4: 安装和配置Kibana 要使用ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;堆栈和Filebeat来收集Spring Boot项目的日志&am…...

华为云Flexus+DeepSeek征文 | 华为云MaaS平台上的智能客服Agent开发:多渠道融合应用案例

华为云FlexusDeepSeek征文 | 华为云MaaS平台上的智能客服Agent开发&#xff1a;多渠道融合应用案例 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不…...

SQL关键字三分钟入门:UPDATE —— 修改数据

在数据库操作中&#xff0c;除了添加新记录外&#xff0c;我们还需要经常修改已有的记录。例如&#xff1a; 更新用户的个人信息&#xff1b;调整订单的状态&#xff1b;更改产品的价格。 这时候就需要用到 SQL 中非常基础但极其重要的关键字 —— UPDATE&#xff01; 它是用…...

用Rust写平衡三进制加法器

1、三进制加法器的发展 最初的平衡三进制加法是采用了三选一结构(github原文)&#xff0c;这位大佬也很厉害&#xff0c;他是硬件都弄了出来的&#xff0c;也写了虚拟机&#xff0c;甚至用这三态多路复用器弄出了可以存状态的硬件&#xff0c;但我没有去看了&#xff0c;因为当…...

【AI时代速通QT】第三节:Linux环境中安装QT并做测试调试

目录 引言 一、Linux QT开发环境的核心要素 1.1 编译器&#xff08;g&#xff09;与构建工具&#xff08;make&#xff09; 1.2 搞定 OpenGL 依赖 二、核心步骤——安装 Qt Creator 2.1 获取官方在线安装器 2.2 赋予文件执行权限 2.3 运行图形化安装向导 三、Linux上创…...

论文阅读:2025 arxiv Qwen3 Technical Report

https://arxiv.org/pdf/2505.09388 https://www.doubao.com/chat/9918384373236738 文章目录 论文翻译Qwen3技术报告摘要1 引言 论文翻译 Qwen3技术报告 Qwen团队 摘要 在这项工作中&#xff0c;我们介绍了Qwen模型家族的最新版本Qwen3。Qwen3包含一系列大型语言模型&…...

Vue3+el-table-v2虚拟表格大数据量多选功能详细教程

Vue3el-table-v2虚拟表格大数据量多选功能详细教程 本教程基于 Element Plus 组件库的 el-table-v2&#xff08;假设你使用虚拟滚动表格&#xff09;&#xff0c;实现大数据量场景下的多选功能&#xff0c;并包含了全选、反选、已选行展示、清除选择等完整交互。 一、项目背景与…...

开源跨平台的轻量 C# 编辑器

NetPad一个基于.NET 开源、跨平台的 C# 编辑器&#xff0c;目的是创建一个开源的、支持 Web 的跨平台替代方案&#xff0c;从而为开发者提供便利的编程环境并为非 Windows 环境下的开发者提供一个可替代 LINQPad 的实用工具。它以.NET SDK 作为基础运行时环境&#xff0c;利用E…...

QT多线程

使用多线程的好处 假如当前窗口要进行一段非常复杂的逻辑处理&#xff0c;在单线程的情况下&#xff0c;是无法操控界面UI的&#xff0c;点击界面UI没有响应。此时就要用到多线程。 注意&#xff1a; 1、默认的线程在Qt中称之为窗口线程&#xff0c;也叫主线程&#xff0c;负…...

了解公共部门中的数据网格:支柱、架构和示例

作者&#xff1a;来自 Elastic Elastic Platform Team 想想那些像公共健康记录、城市规划模型等项目背后的所有数据。政府机构一直在产生大量数据。当数据分散在云平台、本地系统或像卫星和应急响应中心这样的专业环境中时&#xff0c;情况变得更加复杂。找到信息变得困难&…...

关于一维数组和字符串的详细讲解(从属于GESP三级)

本章内容 一维数组基础 字符串基础 就像打磨一串符号&#xff0c;每个位置都要精准对待&#xff0c;才能串起完整的风景。坚持下去&#xff0c;小细节终将成就大格局。 一、⼀维数组基础 1 &#x1f4da; 定义 典型写法 说明 易错/拓展 int a[5]; 编译期长度常量&#x…...

【驱动设计的硬件基础】PCI和PCI-E

打开电脑主机&#xff0c;你会看到主板上一排长短不一的插糟&#xff1a;矮胖的 PCI 插糟还插着古老的声卡&#xff0c;旁边细长的 PCI-E 插糟则牢牢卡住显卡、高速网卡等核心设备。这些看似普通的插糟&#xff0c;其实是计算机硬件沟通的 "高速公路"&#xff0c;承载…...

【学习记录】Git Base使用-免密连接代码仓库

github&#xff08;JL765&#xff09;和gitee&#xff08;JL765/git-test01&#xff09;都可以用于管理代码 在windows中&#xff0c;可以通过Git Base软件&#xff08;Git - Downloading Package&#xff09;和仓库进行连接 下载略过 github登录 ssh -T gitgithub.com # 成…...

android脱糖

前言 另外一篇相关文章&#xff1a;https://androidblog.blog.csdn.net/article/details/148574130 通过sourceCompatibility 和targetCompatibility可以实现低版本写代码高版本输出&#xff08;详情可查看我的另一篇文件中的&#xff1a;验证各种Java版本 > 一、纯Java项…...

DVWA Brute Force漏洞深度分析与利用指南

DVWA简介 DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个基于PHP/MySQL的脆弱性Web应用平台&#xff0c;专为安全专业人员设计&#xff0c;用于测试技能和工具。它包含十大安全模块&#xff0c;其中Brute Force&#xff08;暴力破解&#xff09;是最基础…...

Docker 报错“x509: certificate signed by unknown authority”的排查与解决实录

目录 &#x1f527;Docker 报错“x509: certificate signed by unknown authority”的排查与解决实录 &#x1f4cc; 问题背景 &#x1f9ea; 排查过程 步骤 1&#xff1a;确认加速器地址是否可访问 步骤 2&#xff1a;检查 Docker 是否真的使用了镜像加速器 步骤 3&…...

采用ArcGIS10.8.2 进行插值图绘制

一、最终成果图展示 二、软件下载 链接: 百度网盘 请输入提取码 密码:azay 三、软件安装 1、在安装之前需要关闭电脑的防火墙及杀毒软件 设置-隐私和安全性-Windows安全中心-防火墙和网络保护 2、软件解压 (1)【ArcGIS_Desktop_1082_180......】“以管理员身份运行”…...

国产安路FPGA纯verilog视频图像去雾,基于暗通道先验算法实现,提供5套TD工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目国产安路FPGA相关方案推荐本博主已有的图像处理方案 3、设计思路框架工程设计原理框图输入Sensor之-->GC0308摄像头输入Sensor之-->OV7725摄像头输入Sensor之--…...

利用大型语言模型增强边缘云 AI 系统安全性

大家读完觉得有帮助及的关注和点赞&#xff01;&#xff01;&#xff01; 抽象 随着边缘计算和云系统在 AI 驱动应用中的广泛应用&#xff0c;如何在确保数据隐私的同时保持高效性能已成为一个紧迫的安全问题。本文提出了一种基于联邦学习的数据协作方法&#xff0c;以提高边缘…...

微信小程序中 rpx与px的区别

在微信小程序中的rpx比px方便的多 <!--pages/welcome/welcome.wxml--> <!--rpx替换px--> <image style"width:200rpx;height: 200rpx"src"/images/avatar/3.png"></image> <text>你好&#xff0c;冻梨</text> <but…...

解锁阿里云AnalyticDB:数据仓库的革新利器

AnalyticDB&#xff1a;云数据仓库新势力 在数字化浪潮中&#xff0c;数据已成为企业的核心资产&#xff0c;而云数据仓库作为数据管理与分析的关键基础设施&#xff0c;正扮演着愈发重要的角色。阿里云 AnalyticDB 作为云数据仓库领域的佼佼者&#xff0c;以其卓越的性能、创…...

告别水印烦恼,一键解锁高清无痕图片与视频!

在这个数字化飞速发展的时代&#xff0c;无论是设计小白还是创意达人&#xff0c;都可能遇到这样的困扰&#xff1a;心仪的图片或视频因水印而大打折扣&#xff0c;创意灵感因水印而受限。别急&#xff0c;今天就为大家带来几款神器&#xff0c;让你轻松告别水印烦恼&#xff0…...

前端面试记录

前言&#xff1a;面试题永远是刷不完的&#xff0c;即使刷了一大堆下次面试又忘记了&#xff0c;重要的是组织自己的语言&#xff0c;保持自信&#xff0c;不给自己制造面不过的心理负担&#xff0c;对刷过的题要有个大致印象&#xff0c;好在答题的时候能够多多少少说出点贴近…...

RAG实战基础篇/windows电脑快速部署qwen3:14B

现阶段&#xff0c;在本地部署ollama非常简单&#xff0c;准备好一个有GPU的电脑&#xff0c;十分钟轻松部署qwen3:14b。实现本地的大模型部署。 我这里为了方便起见&#xff0c;直接使用windows电脑下载一个ollama。 访问ollama GIthub地址&#xff1a;ollama开源地址 直接…...

Java SE - 图书管理系统模拟实现

目录 1.设计框架2. 实现用户类3.实现书和书架类4.登录界面的实现5.实现menu方法6.测试菜单选择7.实现一个IFun接口7.1 查找功能的实现7.2 展示功能的实现7.3 增加功能的实现7.4 删除功能的实现7.5 退出功能的实现7.6 借阅功能的实现7.7 归还功能的实现 8.实现IFuntion类型的数组…...