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

NoneBot2,基于Python的聊天机器人

NoneBot2,基于Python的聊天机器人

  • 第一步,配置python
  • 第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)
  • 第三步,配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持。

NoneBot2 具有丰富的插件生态系统,可以实现多种功能,例如自动回复、天气查询、消息推送等等。此外,它还提供了完善的文档和示例代码,方便用户快速上手和开发自己的插件。

如果你是一名 Python 程序员,想要开发一个聊天机器人,那么 NoneBot2 绝对是你的不二之选。你可以在官方文档中了解更多关于 NoneBot2 的详细信息和使用方法。

首先,你需要明白的是NoneBot2的运行是需要python运行环境来支持,因此我们首先需要配置好python环境;再有,以QQ聊天机器人举例,NoneBot2本身并不包含与QQ服务器通信的底层协议实现,因此无法独立搭建聊天机器人。与 QQ 服务器通信的底层协议实现可以有多种选择,如 CoolQ HTTP API 协议、Mirai 协议、go-cqhttp 协议等。因此,在使用 nonebot 框架搭建 QQ 机器人时,您还需要选择一个底层协议实现来与 QQ 服务器通信,这里我们以go-cqhttp为例

综上所述,如果我们要搭建一个属于自己的QQ机器人,需要进行如下几步:

  1. 要搭建一个安装 Python 是作为 nonebot 运行的基础环境;
  2. 配置 go-cqhttp 是为了实现与 QQ 服务器的通信,并提供 QQ 机器人的服务;
  3. 配置 nonebot 是将 go-cqhttp 和 Python 代码连接起来,实现具体的 QQ 机器人功能。

下面将直接用云服务器进行部署,毕竟如果你要开个机器人肯定是24小时一直服务,因此,这里以腾讯云的Centos为例部署。

第一步,配置python

首先你得先按照Python,需要注意的是,NoneBot 仅支持 Python 3.7.3 以上版本,这里以安装Python3.9.9为例:

由于CentOS7原本就安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。所以我们要额外安装Python3,而且系统一般允许多个版本的python同时存在。

我们先来查看python安装位置,一般是位于/usr/bin/python目录下。

$ which python
>> /usr/bin/python

下面介绍安装Python3的方法:

  1. 安装依赖包(切记安装)

    yum -y groupinstall "Development tools"
    yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
    

    在安装 Python 之前需要安装必要的开发工具和库。

    当您运行第一个命令 yum -y groupinstall development tools 时,它会安装一组常用的开发工具,用于在 Linux 系统上构建软件。这些工具包括编译器、链接器和其他用于构建软件的实用程序。

    接下来的命令 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 安装 Python 所需的其他开发库。这些库提供了压缩和加密功能、数据库访问支持以及 GUI 工具包(如 Tkinter)等功能。

    通过在安装 Python 之前安装这些工具和库,您可以确保您的系统具备构建和运行 Python 程序所需的所有必要组件。

    同时,补充个小知识点:在 yum 命令中,-y 参数是指定在执行安装或卸载操作时不需要手动确认。如果没有使用 -y 参数,则在安装或卸载软件包时,yum 会提示您确认操作,需要手动输入 y 才能继续执行操作。

    使用 -y 参数可以使 yum 命令在执行操作时自动确认,避免了人工交互的过程,方便自动化脚本和批量操作。但是,使用 -y 参数也需要注意,因为这样可能会导致不必要的安装或卸载,所以在使用时需要谨慎。

  2. 下载Python3安装包
    大家可根据自己需求下载不同版本的Python3,我下载的是Python3.9.9

    wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz
    
  3. 新建python3存放目录

    mkdir /usr/local/python3
    
  4. 安装Python3

    解压压缩包,进入解压目录,指定安装目录,安装Python3。

    tar -xvJf  Python-3.9.9.tar.xz # 该命令将 Python 的源代码文件(压缩文件)解压缩到当前目录中。
    cd Python-3.9.9 # 将当前工作目录更改为 Python 源代码所在的目录,以便在这个目录下执行后续的命令。
    ./configure --prefix=/usr/local/python3 # 运行配置脚本,为 Python 的构建过程设置参数。--prefix 选项指定 Python 的安装目录,这里设置为 /usr/local/python3。这意味着 Python 将被安装到 /usr/local/python3 目录中。
    yum install libffi-devel -y # 这个命令会安装 libffi-devel 开发包,该开发包是 Python 某些模块的依赖项。在安装 Python 的某些版本(如 Python 3.7 及以上版本)时,需要先安装此包。
    make && make install # 这个命令会构建和安装 Python。make 命令编译源代码,并生成可执行文件。make install 命令将编译好的文件安装到指定的目录中(在这里是 /usr/local/python3)。这样,Python 就已经成功安装到了系统中。
    

    在 Python 3.4 及以后的版本中,pip 被包含在了 Python 的安装包中,因此在安装 Python 3.4 及以后的版本时,pip 也会被一同安装。

    如果您使用的是 Python 3.4 及以后的版本,那么在安装完成后,您可以通过在终端中输入 pip 命令来验证 pip 是否已经安装成功。

    对于早期版本的 Python(例如 Python 2.x 系列和 Python 3.3 及以前的版本),pip 并不会自动安装。您需要手动安装 pip。yum -y install python-pipyum -y install python3-pip

  5. 创建软链接

    ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    

    在 Linux 系统中,通常使用 pythonpip 命令来分别执行 Python 解释器和 pip 包管理器。在您安装了多个版本的 Python 时,可能会出现需要切换 Python 版本的情况。此时,您可以使用软链接来指定默认版本。

    创建软链接的命令是 ln -s 源文件 目标文件,其中 -s 表示创建软链接。在这里,/usr/local/python3/bin/python3 是您要创建软链接的源文件,而 /usr/bin/python3 是软链接的目标文件。这样,当您执行 python3 命令时,实际上会调用 /usr/local/python3/bin/python3 解释器。

    同样,/usr/local/python3/bin/pip3 是源文件,/usr/bin/pip3 是目标文件,执行 pip3 命令时,实际上会调用 /usr/local/python3/bin/pip3 包管理器。

    通过创建软链接,您可以轻松地切换不同版本的 Python,并指定默认版本。但是,需要注意的是,软链接只是一个指向源文件的快捷方式,源文件被删除或移动时,软链接也将失效。

  6. 安装完成,输入python3测试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myB3jFx3-1678427983272)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a67a6491-bb37-4e64-92ad-72f67be00c5f/Untitled.png)]

    安装成功

第二步,配置go-cqhttp

go-cqhttp 是一个基于 go 语言开发的,轻量、原生跨平台、高效、可扩展的 QQ 机器人框架,支持多种协议和多个 QQ 用户同时连接,可轻松实现 QQ 消息收发、群消息管理、帐号管理、事件处理等功能。

以腾讯云轻量级服务器centos7为例,配置go-cqhttp的流程如下:

  1. 在github上下载最新的版本go-cqhttp,根据你的系统选择下载安装包,这里我们选择arm64 Linux

    系统类型可执行文件压缩文件
    Intel 版 MacosNot availablego-cqhttp_darwin_amd64.tar.gz
    M1 版 MacosNot availablego-cqhttp_darwin_arm64.tar.gz
    32 位 LinuxNot availablego-cqhttp_linux_386.tar.gz
    64 位 LinuxNot availablego-cqhttp_linux_amd64.tar.gz
    arm64 LinuxNot availablego-cqhttp_linux_arm64.tar.gz
    armv7 LinuxNot availablego-cqhttp_linux_armv7.tar.gz
    32 位 Windowsgo-cqhttp_windows_386.exego-cqhttp_windows_386.zip
    64 位 Windowsgo-cqhttp_windows_amd64.exego-cqhttp_windows_amd64.zip
    arm64 Windowsgo-cqhttp_windows_arm64.exego-cqhttp_windows_arm64.zip
    armv7 Windowsgo-cqhttp_windows_armv7.exego-cqhttp_windows_armv7.zip
    wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc4/go-cqhttp_linux_amd64.tar.gz
    

    (一定要注意你的安装目录)

  2. 解压安装设置并登录机器人QQ

    tar -xzvf go-cqhttp_linux_amd64.tar.gz
    

    解压后cd到解压的目录里执行ssh命令./go-cqhttp,执行这个命令会在当前文件夹下生成几个文件。重点关注config.yml文件,你需要在这个文件中设置QQ(和 QQ密码)

    # go-cqhttp 默认配置文件
    account: # 账号相关uin: # QQ账号password: '' # 密码为空时使用扫码登录encrypt: false  # 是否开启密码加密status: 0      # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态relogin: # 重连设置delay: 3   # 首次重连延迟, 单位秒interval: 3   # 重连间隔max-times: 0  # 最大重连次数, 0为无限制
    ......
    

    设置好后可以重启go-cqhttp。

  3. 重启后,第一次登录因为异地需要验证,可以选择扫码登录。

    • 如果你的服务器和手机不在同一个局域网内,会提示网络环境复杂

      解决办法:在本地电脑调试成功后,会在go-cqhttp所在的文件夹中生成session.token文件,将session.token文件传到云服务器中go-cqhttp所在的文件夹内即可

    • 提示登录失败: 密码错误或账号被冻结

      解决办法:在运行一次go-cqhttp后,可以发现其文件夹内会生成一个device.json文件,将device.josn中的protocol=5改为protocol=2即可

    这里你可能会出现其他bug,可以访问其GitHub,查看issue,看看有无解决办法。如下:

    https://github.com/Mrs4s/go-cqhttp/issues

  4. 由于我们想要其24小时运营,因此可以给它设置为后台运行,并进行进程守护

    1. 设置后台运行

      nohup ./go-cqhttp
      

      nohup ./go-cqhttp 是一个命令,它的作用是在后台运行 go-cqhttp。

      nohup 是 Linux 系统中一个命令,用于让命令在后台运行,并且忽略掉 Hangup 信号。Hangup 信号通常是在用户退出登录时发送给当前进程的,如果没有使用 nohup 命令,当用户退出登录时,进程也会被关闭。

      ./go-cqhttp 则是一个运行 go-cqhttp 的命令,其中 ./ 表示在当前目录下执行,go-cqhttp 是 go-cqhttp 的可执行文件名。因此,nohup ./go-cqhttp 的作用是在后台运行 go-cqhttp,并且忽略掉 Hangup 信号,这样即使当前用户退出登录,进程也会继续在后台运行。

      需要注意的是,在使用 nohup 命令运行程序时,程序的输出信息将不再显示在终端上,而是保存在当前目录下的 nohup.out 文件中,您可以使用 tail -f nohup.out 命令来实时查看输出信息。

    2. 进程守护:

      pm2 start ./go-cqhttp --name="go-cqhttp" 
      pm2 save 
      pm2 startup
      

      **pm2**是一个用于管理 Node.js 进程的工具,它可以帮助我们轻松地启动、停止、重启和监控 Node.js 进程。在这里,我们使用 **pm2**来启动 go-cqhttp 进程,并将其命名为 go-cqhttp,方便我们后续管理进程。使用 **pm2启动进程后,可以通过 pm2 list命令查看当前运行的进程列表,也可以通过 pm2 stoppm2 restartpm2 delete**命令来停止、重启、删除进程。

  5. 测试

    接下来我们进行http通信测试,首先需要在config.yml配置http通信

    如果你是本地服务器,配置IP地址以及端口号以127.0.0.1:5700为例,运行go-cqhttp。

    • 浏览器访问下面网址,测试使用机器人QQ发送消息给好友

      http://127.0.0.1:5700/send_private_msg?user_id=接收消息的好友QQ号码&message=这里输入发送的信息内容

      执行成功会返回一段响应数据{"data":{"message_id":xxxx},"retcode":0,"status":"ok"} 说明发送成功了

    • 给qq群发送消息测试,成功同样会返回上面一样的数据"status":"ok”

      http://127.0.0.1:5700/send_group_msg?group_id=接收消息QQ群号&message=这里输入发送的信息内容

更多详情内容,请访问go-cqhttp相关文档:https://docs.go-cqhttp.org/

第三步,配置NoneBot

直接进入正题,根据以下步骤进行None Bot的配置:

  1. 下载安装机器人依赖

    使用 pip 或 其他包管理工具 安装 nb-cli,nonebot2 会作为其依赖被一起安装

    python3 -m pip install nb-cli
    

    如果没有安装的话,可以执行下面这段命令安装nonebot2

    python3 -m pip install nonebot2
    
  2. 安装cqhttp适配器

    python3 -m pip install nonebot-adapter-cqhttp
    

    nonebot 是一个基于 Python 的 QQ 机器人开发框架,它本身只提供了一些高级 API 和插件,方便开发者编写 QQ 机器人的功能。但是,与 QQ 服务器通信的底层协议实现是多种多样的,如 go-cqhttp、Mirai、CoolQ 等,这些协议实现之间的 API 不尽相同。因此,开发 QQ 机器人需要先选择一个合适的协议实现,然后再编写对应的适配器,以便将协议实现和 nonebot 框架连接起来,实现 QQ 机器人的功能。

    适配器可以理解为是一个桥梁,它的作用是将底层协议实现和 nonebot 框架连接起来,使它们能够互相通信。在使用 nonebot 框架开发 QQ 机器人时,需要先根据所选的底层协议实现,选择相应的适配器,然后根据适配器提供的 API 编写 QQ 机器人的功能。

    举个例子,如果您选择使用 go-cqhttp 作为底层协议实现,那么您需要安装 go-cqhttp,并选择 go-cqhttp 适配器。这个适配器将 go-cqhttp 和 nonebot 框架连接起来,使得您可以通过 nonebot 框架来编写 QQ 机器人的功能,并且 go-cqhttp 可以帮助您与 QQ 服务器通信。

    因此,在使用 nonebot 框架开发 QQ 机器人时,需要根据所选的底层协议实现,选择相应的适配器,并将其与 nonebot 框架结合使用,以实现 QQ 机器人的功能。

  3. 修改go-cqhttp配置

    修改配置 config.yml文件,找到如下位置,修改地址及端口号,后面nonebot机器人安装要用到的

    ......
    # 反向WS设置- ws-reverse:# 反向WS Universal 地址# 注意 设置了此项地址后下面两项将会被忽略universal: ws://127.0.0.1:53245/cqhttp/ws# 反向WS API 地址api: ws://127.0.0.1:53245/cqhttp/api# 反向WS Event 地址event: ws://127.0.0.1:53245/cqhttp/event
    ......
    
  4. 新建nonebot qq机器人项目

    如果你已经按照推荐方式安装了 nb-cli,使用它创建一个空项目:

    nb create

    根据引导进行项目配置,完成后会在当前目录下创建一个项目目录,项目目录内包含 bot.py

    如果未安装 nb-cli,使用你最熟悉的编辑器或 IDE,创建一个名为 bot.py 的文件,内容如下(这里以 onebot.v11适配器为例):

    import nonebot
    from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapternonebot.init()
    app = nonebot.get_asgi()driver = nonebot.get_driver()
    driver.register_adapter(ONEBOT_V11Adapter)nonebot.load_builtin_plugins("echo")
    nonebot.load_from_toml("pyproject.toml")if __name__ == "__main__":nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")nonebot.run(app="__mp_main__:app")
    
  5. 继续配置编辑 .env.prod 文件端口,这里的53245就是上面设置的cqhttp端口一致,第四行是超级管理员qq

    DRIVER=~fastapi
    HOST=127.0.0.1  # 配置 NoneBot 监听的 IP/主机名
    PORT=53245  # 配置 NoneBot 监听的端口
    DEBUG=true  # 开启 debug 模式 **请勿在生产环境开启**
    SUPERUSERS=["123456789", "987654321"]  # 配置 NoneBot 超级用户
    NICKNAME=["awesome", "bot"]  # 配置机器人的昵称
    COMMAND_START='["/"]'   # 配置命令起始字符
    

    在命令行使用如下命令即可运行这个 NoneBot 实例:

    # nb-cli
    nb run
    # 其他
    python3 bot.py
    

    运行后会产生类似如下日志:

    09-14 21:02:00 [INFO] nonebot | Succeeded to import "nonebot.plugins.base"
    09-14 21:02:00 [INFO] nonebot | Running NoneBot...
    09-14 21:02:00 [INFO] uvicorn | Started server process [1234]
    09-14 21:02:00 [INFO] uvicorn | Waiting for application startup.
    09-14 21:02:00 [INFO] uvicorn | Application startup complete.
    09-14 21:02:00 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:53245 (Press CTRL+C to quit)
    

至此,所有的配置都over了

我们来看一下最终效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MeRI14H8-1678427983275)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d384c2a2-882d-452c-84b3-1bfe17e49279/Untitled.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BFxZ7IWW-1678427983276)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4ec65a12-3b0e-41bb-9a33-a8d0dc776601/Untitled.png)]

声明:本博客为基础学习性质,想要更加深入了解请自行研究官方文档

相关文章:

NoneBot2,基于Python的聊天机器人

NoneBot2,基于Python的聊天机器人第一步,配置python第二步,配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)第三步,配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)NoneBot2 是一个现代、跨平台、…...

java反射机制及其详解

反射反射机制反射调用优化有时候我们做项目的时候不免需要用到大量配置文件,就拿框架举例,通过这些外部文件配置,在不修改的源码的情况下,来控制文件,就要用到我们的反射来解决 假设有一个Cat对象 public class Cat …...

Leetcode—环形链表

前言:给定一个链表,判断是否为循环链表并找环形链表的入口点 首先我们需要知道什么是双向循环链表,具体如下图所示。 对于链表,我们如何去判断链表是循环链表呢?又寻找入环点呢?我们可以利用快慢指针的方法…...

蓝牙耳机哪个戴的最舒服?久戴不累的蓝牙耳机推荐

在喧嚣的时代中,快节奏和疲惫充斥着我们的生活,于是耳机成为了人们必不可少的东西,无论是闲暇时亦或是正处在工作时,都会将它戴上,出门在外戴耳机变成了常态,所以小编就整理了一期久戴不累的蓝牙耳机。 No…...

25k的Java开发常问的AQS问题有哪些?

前言:面试高频的AQS问题大多。本文将以实战面试角度出发,将面试官喜欢问的一些问题罗列出来。 文章目录 AQSAQS定义底层实现独占锁举例底层实现独占锁超时获取锁共享锁举例共享锁实现原理作者辟谣AQS AQS定义 AQS的全称是AbstractQueuedSynchronizer,也就是抽象队列同步器…...

Grafana 监控面板绘制流程

本篇作者:IoTDB 社区 -- 张洪胤本文以 IoTDB V1.0.1 版本为例本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。1监控指标的 Prometheus 格式说明对于 Metric Name 为 name, Tags 为 K1V1, ..., K…...

一句话设计模式5:责任链模式

责任链模式:步步为营。 文章目录 责任链模式:步步为营。前言一、责任链模式的作用二、如何实现责任链1 既然是责任链,那么就需要一个链路的承载体 ChainBody2 责任链中每一步都是一个抽象类,因为承载体仅仅是构造链路顺序,里面不放置任何具体业务逻辑:步骤抽象类3 具体步骤执行…...

保姆级使用PyTorch训练与评估自己的EVA网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…...

Java--JMH--性能测试--测试软件运行效率/时间--StopWatch

写在前面: 很多时候想要测试代码运行时间,或者比较2个运行的效率。 最简单的方法就是Sytem.currentTimeMillis记录2开始和结束时间来算 但是Java 代码越执行越快,放在后面的方法会有优势,这个原因受留个眼,以后研究。大概有受类加…...

JavaScript Array(数组)对象

数组对象的作用是:使用单独的变量名来存储一系列的值。参数参数 size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。参数 element ...; elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元…...

干货 | 电容在电路35个基本常识

第1个电压源正负端接了一个电容,与电路并联,用于整流电路时,具有很好的滤波作用,当电压交变时,由于电容的充电作用,两端的电压不能突变,就保证了电压的平稳。当用于电池电源时,具有交…...

日读300篇文献的技巧

感觉自己看文章很慢,有时候也抓不住重点。 如果是英文文献的话,可能还要有点难度,毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候,发现了一个非常好玩的东西,大大提升了我看文章搞科研&#x…...

C++核心编程

一、内存分区模型概述:C程序在执行时,将内存划分为4个区域程序运行前:代码区:存放函数体的二进制代码,由操作系统管理①共享。共享的目的是对于频繁被执行的程序,在内存中只需有一份代码即可②只读。使其只…...

SpringMVC程序开发

目录 SpringMVC 1、MVC定义 2、MVC和SpringMVC之间的关系 学SpringMVC 1、Spring MVC的创建和连接 浏览器获取前端接口和后端程序连接功能实现 2、获取参数 2.1、传递单个参数/多个参数 2.2、传递对象 2.3、传递表单参数 2.4、后端参数重命名 2.5、RequestBody接收J…...

多版本并发控制MVCC

什么是MVCC? MVCC是一种并发控制方法,一般在数据库管理系统中,实现数据库的并发访问。 可以使用乐观锁和悲观锁来实现。 MVCC的作用? 可以在不加锁的情况下解决读写问题,同时还可以解决脏读,幻读&#…...

JavaScript Date(日期)对象

日期对象用于处理日期和时间。在线实例返回当日的日期和时间如何使用 Date() 方法获得当日的日期。getFullYear()使用 getFullYear() 获取年份。getTime()getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。setFullYear()如何使用 setFullYear() 设置具体的日期。toUTCString()…...

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战

🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 🍟🍟原来加解密也可以这么有趣,虽然看起…...

代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果

1005. K 次取反后最大化的数组和 题目链接 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&…...

Java性能调优杀手锏JMH

JMH简介 JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程…...

实现excle表上传生成echarts图

代码如下html <!--这是一个网上关于读取Excel最经典的代码--> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>ECharts</title><!-- 引入 echarts.js --><!-- <script src"newjs/js/incubato…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...