easyQQ

♻️项目基本介绍

easyQQ是基于electron(vue2)nodejs实现的简单聊天软件,其中用websockethttp进行通讯传递,数据库使用了mysql数据库,该项目功能简单,界面简洁,每个功能都会添加相应的逻辑

🧧 作者自己的配置环境

数据库

在这里插入图片描述

nodejs

在这里插入图片描述

npm

在这里插入图片描述

🧨 部分用户遇到的问题

双击chat.exe出现闪退

这里大概率就是你的数据库配置有问题,你需要去修改config.json将里面的内容修改成你自己mysql的配置信息

启动项目出现问题

在这里插入图片描述

问题分析

数据库配置出现错误

问题解决方案

检测当前目录下的config.json文件,看数据库配置是否与自己的本机的数据库配置一致

数据库无法连接

在这里插入图片描述

问题分析

可能用户新装的mysql,没有设置数据库访问权限

问题解决方案

  1. 进入到你的数据库
mysql -u root -p
  1. 输入以下命令
use mysql;
update user set Host="%" where User="root";
flush privileges;
exit;
  1. 使用连接工具尝试连接mysql数据库(navicat)

mysql8后端无法连接成功,navicat能连接?

在这里插入图片描述

问题分析

MySQL 8 默认情况下不允许使用旧的身份验证插件,而某些 Node.js MySQL 驱动程序(例如 mysql 模块)可能仍在使用这些插件。如果您遇到这个问题,可以在 MySQL 8 中启用旧的身份验证插件。您可以使用以下命令在 MySQL 8 中启用旧的身份验证插件:

解决方案

  1. 进入到你的数据库
mysql -u root -p
  1. 输入以下命令
use mysql;
update user set Host="%" where User="root";
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
flush privileges;
exit;

前端安装依赖出现问题

在这里插入图片描述

问题分析

这个是因为没有管理员权限

解决方案

在win+S搜索框输入cmd或者powershell后,右键以管理员身份运行

electron安装报错?

在这里插入图片描述

问题分析

报错信息提到用了淘宝镜像,复制url到浏览器,这个镜像已经找不到了

解决方案

将镜像换为electron官方镜像,运行如下3行代码

npm config delete ELECTRON_CUSTOM_VERSION
npm config delete ELECTRON_MIRROR
npm config set electron_mirror https://npmmirror.com/mirrors/electron/

后端安装依赖出现问题(node-gyp)

在这里插入图片描述

问题分析

node-pty需要python依赖,这个只能根据错误去一个一个查找问题

问题解决方案

错误可忽略,不影响程序运行

前端依赖安装成功结果

在这里插入图片描述

后端依赖安装成功结果

在这里插入图片描述

🧨项目目前存在的问题

  • 目前视频通话存在画质模糊问题
  • 如果想使用需要将chat.exe放在windows上运行
  • 还没有实现文件断点续传功能
  • 与new bing的AI对话功能未实现

🥑已修复的bug

  1. 文件下载出现了白屏
  2. 聊天框没有置底

👻注意事项

  1. 打开软件第一时间修改服务器地址

在这里插入图片描述

在这里插入图片描述

格式必须为https://你的ip地址

🎉已完成功能

  • 登录账号
  • 修改服务器地址
  • 注册账号
  • 忘记密码
  • 查询好友和群聊
  • 添加好友和群聊
  • 一对一聊天
  • 发送表情包,图片,文字,文件(50mb以内)
  • 支持一对一语音通话,一对一视频通话
  • 群聊
  • 修改好友备注
  • 邀请好友进入群聊
  • 群视频

🖼️ 项目截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

🪵前端框架和技术介绍

前端主要是由vue2electron配合elementuiUI框架实现的页面

vue2

Vue.js是一款流行的前端JavaScript框架,它由尤雨溪(Yuxi You)开发并维护,第一个版本发布于2014年2月。Vue.js 的目标是通过尽可能简单的 API 实现响应式的数据绑定和组合视图组件。

Vue.js的核心库只关注视图层,易于上手,同时也可以轻松与其他第三方库或现有项目集成。Vue.js 可以通过简单的模板语法和可重用组件来实现快速开发,它也支持许多高级特性,例如计算属性、指令、路由、状态管理等。

Vue.js在2016年发布了Vue.js 2.0版本,Vue.js 2.x的性能得到了很大提升,并增加了许多新特性。Vue.js 2.x使用虚拟DOM(Virtual DOM)进行高效的DOM更新,还支持服务端渲染(SSR)和单文件组件(SFC)等功能。Vue.js 2.x也提供了更好的TypeScript支持,使得开发更加友好。

Vue.js还有一些周边生态,例如Vue Router、Vuex、Vue CLI、Vue Devtools等,这些库可以进一步扩展Vue.js的功能和性能,以提高开发效率。

electron

Electron(前身为Atom Shell)是由 GitHub 开发的一款跨平台桌面应用程序开发框架,它基于 Chromium 和 Node.js 构建,允许开发者使用 web 技术(如 HTML、CSS 和 JavaScript)构建原生的跨平台桌面应用程序。Electron 的目标是让开发人员使用简单的前端技术构建跨平台桌面应用程序,并且可以像开发网页一样进行调试。

Electron 采用了多进程架构,应用程序主进程使用 Node.js 运行,用于管理应用程序的生命周期和处理系统级别的操作,如菜单、对话框、剪贴板等。而渲染进程则是一个 Chromium 浏览器实例,用于渲染应用程序的 UI。

Electron 提供了丰富的 API 和开发工具,例如可以通过 Electron-Builder、Electron-Packager 等工具将应用程序打包成可执行文件,并支持跨平台发布和自动更新。此外,Electron 还支持许多第三方模块和插件,如 Spectron、electron-devtools-installer、electron-store 等,用于进一步扩展应用程序的功能。

Electron 已经被广泛应用于许多知名的跨平台应用程序,如 Visual Studio Code、GitHub Desktop、Slack、Atom、Discord 等。

elementui

Element UI 是一款基于 Vue.js 2.0 的桌面端组件库,由饿了么前端团队开发并维护。它提供了丰富的 UI 组件,包括表单、表格、弹窗、菜单、导航等,可以满足大部分企业级应用的 UI 需求。

Element UI 设计风格简洁、美观,同时还具备响应式设计,可以适应不同屏幕尺寸的设备。Element UI 的组件可高度定制,允许通过修改主题、样式、属性等实现自定义的外观和功能。

Element UI 还提供了丰富的文档和示例,便于开发人员快速学习和上手,同时也提供了丰富的 API 文档和源代码,方便开发者进行二次开发和定制。

除了 Vue.js,Element UI 还支持其他常用的前端框架,例如 React、Angular 等,可以与这些框架轻松集成。Element UI 是一款开源的组件库,采用 MIT 许可证,可以在任何商业和非商业项目中免费使用。

目录介绍

在这里插入图片描述

核心文件介绍

components的vueImageVerify.vue

这个文件主要是生成验证码图片

utils的cookie.js

这个文件主要是帮你存储你的登录信息,个人信息到缓存里

utils的file.js

这个文件主要是获取从一个url里获取文件名和判断你的文件类型是图片还是zip或者其他的

utils的request.js

这个文件主要就是向后端发送请求并获取相应的数据,axios

views的Login

这个目录核心就是负责登录,注册,忘记密码,修改服务器地址,代码基本上一样,如果看懂其中一个页面其他页面的代码基本上就都看懂了,以下是实现登录的核心逻辑,简单吧!!

在这里插入图片描述

views的index目录

这个目录偏核心一点,主要就是我们登录后的界面,界面主要分为三大块,侧边栏,列表栏,聊天栏,侧边只会影响列表栏并不会影响聊天栏

前端逻辑

  1. 用户打开应用后,页面具有四个功能,登录,注册,找回密码,设置服务器地址,二个次要功能自动登录记住密码,填入正确的用户名和密码后会直接跳转到首页,如果填入失败则会提示响应的错误

在这里插入图片描述

  1. 登录成功或者注册成功后,我们将进入到主页面,主页面主要由侧边栏,列表栏,聊天栏组成,侧边栏主要可以进行个人信息的修改,选择聊天联系人,当我们点击其中一个图片,我们会进行相对于的tag修改,然后通过vue的路由跳转实现响应的界面展示

在这里插入图片描述

  1. 当我们选择一个好友时,我们获取房间号和好友名称来建立一个websocket,后端会发送所有与之相关的所有历史记录,前端会根据消息的类型来进行相对应的展示,(音视频记录不会展示,可以做但是不想做😼😼😼),当发送或接收一条消息会自动更新列表栏的数据

    在这里插入图片描述

后端项目

后端主要是由nodejs配合expressexpress-ws实现简单的后端搭建,通过mysql对数据的存储,代码已经实现创建各个表,无需执行sql文件,代码简单且逻辑基本上类似

nodejs

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,使JavaScript可以在服务器端运行。Node.js采用事件驱动、非阻塞I/O模型,因此可以处理大量并发连接,且处理速度快、性能高。Node.js的模块化设计使得开发者可以方便地组织代码和管理依赖项。

Node.js最初由Ryan Dahl在2009年开发,目的是构建高性能、可扩展的网络应用程序。Node.js的优点在于可以使用JavaScript编写服务器端代码,并且可以方便地与前端JavaScript框架进行集成,如React、Angular、Vue.js等。

Node.js拥有丰富的内置库和第三方模块,可用于构建Web应用程序、命令行工具、网络服务器、流处理应用程序等。Node.js提供了许多有用的工具和工具库,如npm、Express、Socket.IO等,使得开发和维护应用程序变得更加轻松和高效。

Node.js具有跨平台的特性,可在Windows、Linux、macOS等不同操作系统上运行。由于其强大的性能和便捷的开发体验,Node.js被越来越多的开发者和企业所采用,并且在大型公司和开源社区中得到了广泛的应用。

express

Express是一个流行的基于Node.js的Web应用程序框架,提供了一组简单的API,可以帮助开发者更快地构建Web应用程序。Express采用MVC(模型-视图-控制器)的软件设计模式,使得开发者可以将应用程序的逻辑、数据和UI分离开来,从而使得代码更加模块化和易于维护。

Express框架提供了许多有用的功能和中间件,如路由、模板引擎、HTTP工具、数据库集成等,可帮助开发者快速构建Web应用程序。同时,Express也是高度可定制的,允许开发者根据需求自定义中间件和插件,以满足特定的开发需求。

Express非常流行,因为它具有简单、轻量级、易于学习的特点,同时也可以通过第三方模块扩展其功能,例如body-parser、cookie-parser、multer等。Express也被广泛应用于许多开源项目和企业级应用程序中,包括GitHub、PayPal、IBM等。

express-ws

Express-ws是一个基于Express框架的WebSocket插件,用于在Express应用程序中添加WebSocket功能。WebSocket是一种网络协议,允许客户端和服务器之间进行双向通信,可以在Web应用程序中实现实时数据传输和通信。

Express-ws提供了WebSocket相关的API,可帮助开发者快速添加WebSocket功能,同时也与Express的中间件机制兼容,使得WebSocket和HTTP请求可以在同一应用程序中共存。使用Express-ws,开发者可以在Express应用程序中实现实时通信、在线游戏、聊天室等功能。

Express-ws支持标准的WebSocket协议和Socket.IO协议,可以通过简单的API进行配置和使用。Express-ws也可以与其他Express中间件和插件集成,例如Express-session、Passport等,以实现更加复杂的功能。

总的来说,Express-ws是一个非常有用的工具,使得在Express应用程序中添加WebSocket功能变得更加容易和快速,可以大大提高Web应用程序的实时通信能力。

目录介绍

在这里插入图片描述

🎙️WebRTC

代码逻辑

  1. 邀请人先创建麦克风并初始化PC源

  2. 发送创建房间的指令到当前房间,后端接受到指令后,给当前房间的所有用户发送响应的指令

在这里插入图片描述

  1. 被邀请人点击同意后,获取自己的视频流,初始化PC源,PC添加音视频流,创建offer,获取自己的音视频流,并通过setLocalDescription函数存储自己的音视频流,并发送new_peer指令(携带自己的音视频)告诉房间的人,我要进入房间
    在这里插入图片描述

在这里插入图片描述

  1. 邀请人接收到有新人进入房间,则发送视频流和offer指令给新人

在这里插入图片描述

  1. 新人接受到对方同意的指令后,将对方的音视频流通过setRemoteDescription函数进行存储,存储完后新人创建answer来获取自己的音视频流,通过setLocalDescription函数存储自己的音视频流,并发送answer指令(携带自己的音视频)告诉对方要存储邀请人的音视频
    在这里插入图片描述

  2. 设置邀请方发来的音频源

在这里插入图片描述

6.双方建连成功后,会相互发送ice_candidate,我们需要将其发送给双方

在这里插入图片描述

7.双方收到后,addIceCandidate添加到pc中

在这里插入图片描述

  1. 如何验证成功了,一般是查看pc.onaddstream是否监听到数据,如果有大概率就是ok的

在这里插入图片描述

🕹️数据库

用户表(user)

在这里插入图片描述

这是一个MySQL数据库中的用户表,其中包含以下字段:

  • id:用户ID,用于标识每个用户,是自动增加的整数类型。
  • username:用户名,必填字段,用于登录和身份验证,是一个长度为255的字符串,使用utf8mb4编码和Unicode排序规则,使用B树索引来保证唯一性。
  • password:用户密码,必填字段,用于登录验证,是一个长度为255的字符串,使用utf8mb4编码和Unicode排序规则,不需要索引。
  • avatar:用户头像,可选字段,用于显示用户的个人信息,是一个长度为255的字符串,使用utf8mb4编码和Unicode排序规则,可以为NULL。
  • phone:用户电话,可选字段,用于联系用户,是一个长度为50的字符串,使用utf8mb4编码和Unicode排序规则,可以为NULL。
  • name:用户昵称,可选字段,用于显示用户的个人信息,是一个长度为255的字符串,使用utf8mb4编码和Unicode排序规则,可以为NULL。
  • signature:用户签名,可选字段,用于显示用户的个人信息,是一个长文本类型,使用utf8mb4编码和Unicode排序规则,可以为NULL。
  • created_at:用户创建时间,用于记录用户的创建时间,是一个日期时间类型,使用当前时间戳作为默认值,可以为NULL。

好友表(friend)

在这里插入图片描述

  • id: 该字段为自增主键,表示每个朋友记录的唯一标识符。
  • user_id: 该字段表示朋友所属的用户 ID。
  • username: 该字段表示朋友的用户名。
  • online_status: 该字段表示朋友的在线状态,取值为 online 或 offline。
  • remark: 该字段表示朋友的备注,可以为 NULL。
  • group_id: 该字段表示朋友所属的朋友分组 ID,可以为 NULL。
  • room: 该字段表示朋友所在的聊天室,可以为 NULL。
  • unread_msg_count: 该字段表示未读消息数量,初始值为 0。
  • created_at: 该字段表示记录创建时间,类型为 timestamp。
  • updated_at: 该字段表示记录最后一次更新时间,类型为 timestamp,并且设置了 ON UPDATE 触发器以自动更新时间。
  • PRIMARY KEY: 指定主键为 id 字段。
  • INDEX: 指定索引为 group_id 字段。
  • CONSTRAINT: 指定外键约束,将 group_id 字段与 friend_group 表中的 id 字段关联,实现级联更新和级联删除。该约束名称为 friend_ibfk_1。

好友组表(friend_group)

在这里插入图片描述

  • id: 主键,自动递增的整数。
  • user_id: 外键,引用user表的id字段,整数类型。
  • username: 用户名,最大长度为255个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • name: 组名,最大长度为50个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。
  • updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。
  • 此外,该表还定义了一个名为idx_user_id的索引,用于加速对user_id字段的查询。并且定义了一个名为friend_group_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的friend_group表中的记录。

群聊表(group_chat)

在这里插入图片描述

  • id: 主键,自动递增的整数。
  • name: 群聊名称,最大长度为50个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • creator_id: 外键,引用user表的id字段,整数类型。
  • avatar: 群聊头像,最大长度为255个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • announcement: 群公告,文本类型,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • room: 房间号,最大长度为255个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。
  • updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。
  • 此外,该表还定义了一个名为idx_creator_id的索引,用于加速对creator_id字段的查询。并且定义了一个名为group_chat_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的group_chat表中的记录。

群聊成员表(group_numbers)

在这里插入图片描述

  • id: 主键,自动递增的整数。
  • group_id: 外键,引用group_chat表的id字段,整数类型。
  • user_id: 用户ID,整数类型。
  • nickname: 用户在群聊中的昵称,最大长度为50个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。
  • updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。
  • 此外,该表还定义了两个索引:一个名为idx_user_id的索引用于加速对user_id字段的查询;另一个名为idx_group_id的索引用于加速对group_id字段的查询。并且定义了一个名为group_members_ibfk_1的外键约束,当删除group_chat表中的记录时,会级联删除与之关联的group_members表中的记录

消息表(message)

在这里插入图片描述

  • id: 主键,自动递增的整数。
  • sender_id: 外键,引用user表的id字段,整数类型。
  • receiver_id: 接收者ID,整数类型。
  • content: 消息内容,长文本类型,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • room: 房间号,最大长度为255个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • type: 消息类型,枚举类型,可选值为’private’和’group’。
  • media_type: 媒体类型,枚举类型,可选值为’text’、‘image’、‘video’和’file’。
  • status: 消息状态,整数类型,默认值为0。
  • created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。
    此外,该表还定义了一个名为sender_id的索引,用于加速对sender_id字段的查询。并且定义了一个名为message_ibfk_1的外键约束,当删除user表中的记录时,会级联删除与之关联的message表中的记录。

消息统计表(message_statistics)

在这里插入图片描述

  • id: 主键,自动递增的整数。
  • room: 房间号,最大长度为255个字符,使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。
  • total: 消息总数,整数类型。
  • created_at: 记录创建时间,时间戳类型,默认值为当前时间戳。
  • updated_at: 记录更新时间,时间戳类型,默认值为当前时间戳,在记录更新时自动更新。
    该表没有定义外键约束和索引。

AI密钥存储表(ai_conversation)

在这里插入图片描述

  • id: 主键,自动递增的整数。
  • username: 用户名,非空字符串。
  • room: 房间名称,非空字符串。
  • conversation_id: 会话 ID,非空字符串。
  • conversation_signature: 会话签名,非空字符串。
  • client_id: 客户端 ID,非空字符串。
  • count: 统计使用次数,默认值为 0。
  • created_at: 记录创建时间,默认值为当前时间戳。
  • updated_at: 记录更新时间,默认值为当前时间戳,在更新时自动更新。

此外,该表还包含一个外键约束,它引用了 user 表中的 username 字段,并在删除或更新时级联操作。
表使用 InnoDB 引擎,并使用 utf8mb4 字符集和 utf8mb4_unicode_ci 校对规则。

AI消息存储表(ai_conversation)

在这里插入图片描述

  • id: 主键,自动递增的整数。

  • sender_id: 发送者 ID,非空整数。

  • receiver_id: 接收者 ID,非空整数。

  • content: 消息内容,非空长文本。

  • link_list: 链接列表,JSON 格式,默认值为 NULL。

  • room: 房间名称,非空字符串。

  • conversation_id: 会话 ID,非空字符串。

  • conversation_signature: 会话签名,非空字符串。

  • client_id: 客户端 ID,非空字符串。

  • invocation_id: 调用ID,非空整数。

  • created_at: 记录创建时间,默认值为当前时间戳。

注意electron打包会出现的问题

打包前必须做的事

  • 进入到下面目录C:\Users\自己的用户名\AppData\Local\electron-builder\Cache
    在这里插入图片描述

  • 创建目录winCodeSignnsis
    在这里插入图片描述

  • electron必须安装包目录下的winCodeSign-2.6.0.7z解压到C:\Users\自己的用户名\AppData\Local\electron-builder\Cache\winCodeSign目录下

在这里插入图片描述

  • 进入到C:\Users\自己的用户名\AppData\Local\electron-builder\Cache\nsis目录下,将electron必须安装包目录下分别解压成如下图所示的样子
    在这里插入图片描述

前端成功打包结果

在这里插入图片描述

后端成果打包结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BERT 模型准备与转换详细操作流程

在尝试复现极客专栏《PyTorch 深度学习实战|24 | 文本分类:如何使用BERT构建文本分类模型?》时候,构建模型这一步骤专栏老师一笔带过,对于新手有些不友好,经过一阵摸索,终于调通了,现在总结一下…

doris 和StarRocks 导入导出数据配置

一、StarRocks 导数据到hdfs EXPORT TABLE database.table TO “hdfs://namenode/tmp/demo/table” WITH BROKER ( “username”“username”, “password”“password” ); 二、StarRocks 导数据到oss EXPORT TABLE database.table TO “oss://broke/aa/” WITH BROKER ( “…

【HTTP】取消已发送的请求

场景 在页面中,可能会因为某些操作多次触发某个请求,如多次点击某按钮触发请求,实际上我们只需要最后一次请求的返回值,但是由于请求的耗时不一,请求未必会按发送的顺序返回,导致我们最终获取到的值 ≠ 最后…

JSON框架转化isSuccess()为sucess字段

在您的描述中,BankInfoVO子类返回的JSON中出现了"success": true字段,但类本身没有定义这个字段。这通常是由以下原因之一造成的: 原因分析及解决方案 序列化框架的Getter自动推导 Java序列化框架(如Jackson/Gson&…

Ragflow 源码:task_executor.py

目录 介绍主要功能核心组件 流程图核心代码解释1. 系统架构与核心组件2. 核心处理流程3. 高级处理能力4. 关键创新点5. 容错与监控机制6. 性能优化技巧 介绍 task_executor.py 是RAGFlow系统中的任务执行器(Task Executor)核心部分,主要负责文档的解析、分块(chunk…

创客匠人联盟生态:重构家庭教育知识变现的底层逻辑

在《家庭教育促进法》推动行业刚需化的背景下,单一个体 IP 的增长天花板日益明显。创客匠人提出的 “联盟生态思维”,正推动家庭教育行业从 “单打独斗” 转向 “矩阵作战”,其核心在于通过工具整合资源,将 “同行竞争” 转化为 “…

【Docker基础】Docker容器管理:docker stop详解

目录 1 Docker容器生命周期概述 2 docker stop命令深度解析 2.1 命令基本语法 2.2 命令执行流程 2.3 stop与kill的区别 3 docker stop的工作原理 3.1 工作流程 3.2 详细工作流程 3.3 信号处理机制 4 docker stop的使用场景与最佳实践 4.1 典型使用场景 场景1&#…

rules写成动态

拖拽排序和必填校验联动(rules写到computed里) computed: {rules() {const rules {};this.form.feedList.forEach((item, idx) > {rules[feedList.${idx}] [{ required: true, message: 路线评价动态${idx 1}待填写,请填写完毕提交, trigger: change }];});re…

The Open Group开放流程自动化™ 论坛(OPAF)发布组织最新进展报告

除埃克森美孚(ExxonMobil)的成就外,开放流程自动化™ 论坛(OPAF)的最新论坛报告显示,该组织其他成员也在多个领域取得进展。 “我们祝贺埃克森美孚,因为他们证明了在前线、创收的工艺操作中部署…

线程的基本控制

线程终止 exit是危险的 如果进程中的任意一个线程调用了exit,那么整个进程终止。 不终止进程的退出方式 普通单个线程的退出方法,以下方法退出不会导致进程终止: (1)从启动例程中返回,返回值是线程的退出…

DeepSeek+WinForm串口通讯实战

前言 在现代软件开发中,串口通讯仍然是工业自动化、物联网设备和嵌入式系统的重要通信方式。随着.NET技术的发展,特别是.NET 5/.NET 6的跨平台能力,传统的WinForm应用现在可以通过现代UI框架实现真正的跨平台串口通讯。本文将深入探讨三种主…

针对数据仓库方向的大数据算法工程师面试经验总结

⚙️ 一、技术核心考察点 数据建模能力 星型 vs 雪花模型:面试官常要求对比两种模型。星型模型(事实表冗余维度表)查询性能高但存储冗余;雪花模型(规范化维度表)减少冗余但增加JOIN复杂度。需结合场景选择&…

Nuxt3 Cannot read properties of undefined (reading ‘createElement‘)

你遇到的 TypeError: Cannot read properties of undefined (reading createElement) 这个报错,通常是由于在 Nuxt3 或 Vue3 项目中,某些地方尝试访问 document.createElement 或类似 DOM API,但此时 document 还未定义(比如在服务…

正则表达式匹配实现

直接上代码 using Microsoft.AspNetCore.Mvc; using System.Text.RegularExpressions;namespace SaaS.OfficialWebSite.Web.Controllers {public class RegController : Controller{public IActionResult Index(){return View();}[HttpPost]public IActionResult TestRegex([F…

API测试工具Parasoft SOAtest:应对API变化,优化测试执行

API频繁变更给测试工作带来诸多挑战,如手动排查变更影响耗时费力、测试用例维护繁琐易出错等。Parasoft SOAtest作为一款企业级API测试工具,通过自动扫描API接口、智能分析变更影响、优化测试,执行以及支持测试用例共享与版本控制等功能&…

mysql 数据库连接 -h localhost 和 -h 127.0.0.1 区别是什么

对于 mysql 数据库, 在 my.conf 中指定的client 端口是 3358,实际的mysql server 的端口监听在 3306, mysql -h localhost 可以居然可以连接成功; mysql -h 127.0.0.1 连接失败提示Can’t connect to MySQL server on 127.0.0.1&a…

Educational Codeforces Round 180 (Rated for Div. 2) A-D

A.Race 题目大意 给你两个x,y,终点会在二点之间随机出现,alice在点a,假设alice和bob有相同的速度(距离更短者用时更少),问对于bob是否存在一点,无论终点是x还是y,他都能比alice更快到达 思路 如果alice在…

python requests post请求

在Python中,使用requests库进行POST请求是一种常见的操作,用于向服务器发送数据。下面是如何使用requests库进行POST请求的步骤: 安装requests库 如果你还没有安装requests库,可以通过pip安装: pip install requests…

Postman中设置定时自动运行接口测试

‌创建测试集合‌ 将需每日运行的接口组织到Collection中,并配置好测试脚本和断言。 ‌配置定时运行‌ 打开目标Collection → 点击 ‌Run‌ 按钮在Collection Runner页面底部选择 ‌Schedule runs‌关键配置: Frequency: Daily // 选择每日执行 Time…

multiprocessing.pool和multiprocessing.Process

在CPU密集型任务中,Python的multiprocessing模块是突破GIL限制的关键工具。multiprocessing.Pool(进程池)和multiprocessing.Process(独立进程)是最常用的两种并行化方案,但其设计思想和适用场景截然不同。…