• 仿muduo库实现高并发服务器-面试常见问题

仿muduo库实现高并发服务器-面试常见问题

2025-04-29 06:00:07 0 阅读

目录

  • 通用问题
    • 为什么要做这个项目
    • 这个项目为什么和上一个同学的项目一样
    • 介绍一下这个项目流程和架构设计
    • 项目最终的成果如何? 你从这个项目中学到了什么?
    • 你在这个项目中使用了哪些技术? 这些技术是怎么选型的, 对比过那些其他的相关技术吗?
    • 你在项目中扮演了什么角色? 你负责了哪些模块或功能?
    • 在项目中, 你是如何平衡技术实现和项目时间线的?
    • 你在项目中遇到了哪些挑战? 你是如何解决这些问题的?
    • 你是如何测试和部署这个项目的?
    • 项目性能如何, 有没有尝试优化过性能呢?
    • 你是如何设计项目以支持未来的扩展?你们是如何确保项目代码的可维护性的?
  • 专属问题
    • 你怎么理解Reactor模型? 相比较传统的多线程I/O模型有什么优势
    • eventfd的作用是什么?为什么要用eventfd而不用普通的fd?eventfd的原理?
    • runInLoop的作用及实现? 为什么执行_tasks任务的时候需要交换
    • 定时器的设计以及为什么要用shared_ptr和weak_ptr?
    • 怎么理解 One Loop Per Thread

通用问题

为什么要做这个项目

自己的某个业务类项目需要自己搭建网络通信框架, 为了锻炼并提升自己的C++多线程编程和工程化的能力. 参考muduo库这个开源项目做了一些简化, 自己实现了一个支持高并发的网络通信组件

这个项目为什么和上一个同学的项目一样

是参考github上的一个开源项目muduo库, 网上一搜有很多这个项目的博客分析, 写得优质的主要就是那几篇, 可能我们参考了一样的博客讲解梳理框架吧.

介绍一下这个项目流程和架构设计

整个项目的实现划分为两个的模块:

  • SERVER模块: 实现Reactor模型的TCP服务器.
    • Buffer模块:是一个缓冲区模块, 用于实现通信中用户态的接收缓冲区和发送缓冲区功能
    • Socket模块: Socket模块是对套接字操作封装的一个模块, 主要实现的socket的各项操作
    • Channel模块: Channel模块是对一个描述符需要进行的IO事件管理的模块, 实现对描述符可读, 可写, 错误…事件的管理操作, 以及Poller模块对描述符进行IO事件监控就绪后, 根据不同的事件, 回调不同的处理函数功能
    • Connection模块: Connection模块是对Buffer模块, Socket模块, Channel模块的一个整体封装, 实现了对一个通信套接字的整体的管理, 每一个进行数据通信的套接字(也就是accept获取到的新连接) 都会使用Connection进行管理.
    • Acceptor模块: Acceptor模块是对Socket模块, Channel模块的一个整体封装, 实现了对一个监听套接字的整体的管理
    • TimerQueue模块: 是实现固定时间定时任务的模块, 可以理解就是要给定时任务管理器, 想定时任务管理器中添加一个任务, 任务将在固定时间后被执行, 同时也可以通过刷新定时任务来延迟任务的执行. 这个模块主要是对Connection对象的生命周期管理, 对非活跃连接进行超时后的释放功能
    • Poller模块: 是对epoll进行封装的一个模块, 主要实现epoll的IO事件添加, 修改, 移除, 获取活跃连接的功能
    • EventLoop模块: EVentLoop模块可以理解就是我们上边所说的Reactor模块, 它是对Poller模块, TimerQueue模块, Socket模块的一个整体封装, 进行所有描述符的事件监控
    • TcpServer模块: 这个模块是一个整体Tcp服务器模块的封装, 内部封装了Acceptor模块, EventLoop模块作为主, EventLoopThreadPool模块作为从
  • 协议模块: 对当前的Reactor模型服务器提供应用层协议支持
    • http协议模块
      • Util模块: 这个模块是一个工具模块, 主要提供HTTP协议模块所用到的一些工具函数, 比如url编解码, 文件读写…等
      • HttpRequest模块: 这个模块是HTTP请求数据模块, 用于保存HTTP请求数据被解析后的各项请求元素信息
      • HttpResponse模块: 这个模块是HTTP响应数据模块, 用于业务处理后设置并保存HTTP响应数据的各项元素信息, 最终会被按照HTTP协议响应格式组织成为响应信息发送给客户端
      • HttpContext模块: 这个模块是一个HTTP请求接收的上下文模块
      • HttpServer模块: 这个模块是最终给组件使用者提供的HTTP服务器模块了, 用于以简单的接口实现HTTP服务器的搭建.

项目主要流程:
1.在实例化TcpServer对象过程中, 完成Baseloop的设置, Acceptor对象的实例化, 以及EventLoop线程池的实例化, 以及std::shared_ptr< Connection >的hash表的实例化
2.为Acceptor对象设置回调函数: 获取到新连接后, 为新连接构建Connection对象, 设置Connection的各项回调, 并使用shared_ptr进行管理, 并添加到hash表中进行管理, 并未Connection选择一个EventLoop线程, 为Connection添加一个定时销毁任务, 为Connection添加事件监控
3.启动BaseLoop
4.通过Poller模块对当前模块管理内的所有描述符进行IO事件监控, 有描述符事件就绪后, 通过描述符对应的Channel进行事件处理
5.所有就绪的描述符IO事件处理完毕后, 对任务队列中的所有操作顺序进行执行
eventfd的作用:
6.由于epoll的事件监控, 有可能会因为没有事件到来而持续阻塞, 导致任务队列中的任务不能及时得到执行, 因此创建了eventfd, 添加到Poller的事件监控中, 用于实现每次向任务队列添加任务的时候, 通过向eventfd写入数据来唤醒epoll的阻塞.
7.实现向Channel提供可读, 可写, 错误等不同事件的IO事件回调函数, 然后将Channel和对应的描述符添加到Poller事件监控中.
再具体一点说:
8.当描述符在Poller模块中就绪了IO可读事件, 则调用描述符对应Channel中保存的读事件处理函数, 进行数据读取, 将socket就收缓冲区全部读取到Connection管理的用户态接收缓冲区中. 然后调用由组件使用者传入的新数据到来回调函数进行处理.
9.组件使用者进行数据的业务处理完毕后, 通过Connection向使用者提供的数据发送接口, 将数据写入Connection的发送缓冲区中.
10.启动描述符在Poller模块中的IO写事件监控, 就绪后, 调用Channel中保存的写事件处理函数, 将发送缓冲区中的数据通过Socket进行面向系统的实际数据发送.

项目最终的成果如何? 你从这个项目中学到了什么?

成果:

  • 通过实现的高并发服务器组件, 可以简洁快速的完成一个高性能的服务器搭建
  • 通过组件内提供的不同应用层协议支持, 也可以快速完成一个高性能应用服务器的搭建(当前项目中提供HTTP协议组件的支持)
    学到了什么:
  • 学到了以项目为主导的开发应该如何完成, 比如从项目确定到功能拆解, 再到开发测试部署
  • 学到了当项目中遇到问题, 迫使我思考和寻找解决方案, 这增强了我的问题解决能力
  • 学到了如何进行有效的测试, 以确保项目不出现bug. 例如功能测试, 安全性测试等.

你在这个项目中使用了哪些技术? 这些技术是怎么选型的, 对比过那些其他的相关技术吗?

这个项目作为一个基础的网络通信组件, 使用纯C++语言编写的, 没有使用任何的第三方库. 只是用到了C++11的线程库和多路复用的系统接口.

  • epoll: 对比select, poll效率更高, 但是只有unix平台支持
  • std::thread: 方便易用, 可移植

你在项目中扮演了什么角色? 你负责了哪些模块或功能?

(比较简单的项目不应该是和别人合作完成的, 一定是独立完成)

  • 独立完成项目的设计, 实现, 测试, 部署.
  • 社招的同学可以说明基础通信模块是自己实现的, 协议支持模块是同事实现的

在项目中, 你是如何平衡技术实现和项目时间线的?

这个项目我花了2个月来完成, 从项目目标的确定, 到项目原型图的敲定, 到各个模块的拆分, 再到最后的开发测试部署.
关于时间, 其实我没有制定详细的规划, 是因为我也是抱着学习的心态来完成这个项目. 在开发中可能会遇到一些问题, 解决问题也是我学习的过程, 因此时间就不能确定下来.

你在项目中遇到了哪些挑战? 你是如何解决这些问题的?

在参考muduo源码的时候,发现有很多回调函数的设置,导致在项目的流程梳理上特别困难,我花了好长的时间才把这些回调函数的设置梳理清楚。

  • Acceptor模块启动的时候需要一个newConnection的回调, 这个是因为当主Reactor接受到新连接的时候, 即监听套接字产生可读事件, 这个时候通过EventLoop分发到newConnection回调的调用创建一个新连接并分配给从Reactor
  • Connection对象中需要用户设置3个回调函数进去, 分别是连接建立完成回调, 新数据回调, 关闭回调, 当从Reactor监听到IO事件的时候, 通过EventLoop分发到对应的回调函数进行调用

你是如何测试和部署这个项目的?

测试思路:
1.编写一个简单的html欢迎页面, 然后使用浏览器进行访问
2.长连接连续请求测试: 一个连接中每隔3s向服务器发送一个请求, 查看是否会收到响应.
3.超时连接释放测试: 创建一个客户端, 连接上服务器后, 不进行消息发送, 等待看超时后, 连接是否会自动释放(当前默认设置超时时间为10s). 预期结果: 10s后连接被释放.
4.数据中多条请求处理测试: 给服务器发送的一条数据中包含有多个HTTP请求, 观察服务器的处理. 预期结果: 每一条请求都有其对应的响应
5.PUT大文件上传测试: 使用put请求上传一个大文件进行保存, 大文件的接收会被分在多次请求中接收, 然后计算源文件和上传后的文件的MD5值, 判断请求的接收处理是否存在问题. 预期结果: 两个文件的MD5是一样的

项目性能如何, 有没有尝试优化过性能呢?

性能测试采用Webbench进行服务器性能测试. Webbench是知名的网站压力测试工具, Webbench的标准测试可以向我们展示服务器的两项内容: 每秒钟相应请求数 和每秒钟传输数据量, 即QPS和吞吐

服务器环境: 4核4G虚拟机ubuntu-22.04LTS, 服务器程序采用1主3从Reactor模式
Webbench客户端环境: 同一个虚拟机

客户端数量QPS/min吞吐/sec
5003910612620396字节
50003845772589020字节
100003571572423604字节

以上测试中,使⽤浏览器访问服务器,均能流畅获取请求的⻚⾯。但是根据测试结果能够看出,虽然并发量⼀直在提⾼,但是总的请求服务器的数量并没有增加,反⽽有所降低,侧⾯反馈了处理所耗时间更多了,基本上可以根据35w/min左右的请求量计算出10000并发量时服务器的极限了。
但是这个测试其实意义不⼤,因为测试客⼾端和服务器都在同⼀台机器上,传输的速度更快,但同时抢占cpu也影响了处理,最好的⽅式就是在两台不同的机器上进⾏测试,这⾥只是通过这个⽅法告诉⼤家该如何对服务器进⾏性能测试。

你是如何设计项目以支持未来的扩展?你们是如何确保项目代码的可维护性的?

项目扩展:

  • 支持其他的应用层协议, 比如webosocket, rpc, amqp等等
  • 确保代码的可维护性:
    1.遵循编码规范: 定并遵守一致的编码标准和命名约定,使代码易于理解和维护
    2.模块化设计: 系统分解为独立的模块,每个模块负责一个特定的功能,这样可以降低复杂性,提高可维护性。
    3.文档化: 写清晰的文档,包括代码注释、API文档和用户手册,以帮助其他开发者理解代码的工作原理。

专属问题

你怎么理解Reactor模型? 相比较传统的多线程I/O模型有什么优势

传统的IO模型是指当接收到一个新连接之后, 为这个新连接开辟一个进程/线程负责处理IO事件和业务.
特点:

  • 采用阻塞式IO模型获取输入数据
  • 每个连接都需要独立的线程完成数据输入, 业务处理, 数据返回的完整操作

缺点:

  • 当并发数较大时, 需要创建大量线程来处理连接, 系统资源占用较大
  • 连接建立后, 如果当前线程暂时没有数据可读, 则线程就阻塞在Read操作上, 造成线程资源浪费

解决方案:

  • 基于I/O多路复用模型: 多个连接共用一个阻塞对象, 应用程序只需要在一个阻塞对象上等待, 无需阻塞等待所有连接. 当某条连接有新的数据可以处理时, 操作系统通知应用程序, 线程从阻塞态返回, 开始进行业务处理
  • 基于线程池复用线程资源: 不必再为每个连接创建线程, 将连接完成后的业务处理任务分配给线程进行处理, 一个线程可以处理多个连接的业务

Reactor模式, 是指通过一个或多个输入同事传递给服务器进行请求处理时的事件驱动处理模式.
服务端程序处理传入多路请求, 并将它们同步分派给请求对应的处理线程, Reactor模式也叫Dispatcher模式
简单理解就是使用 IO多路复用 统一监听事件, 收到事件后分发给处理进程或线程, 是编写高性能网络服务器的必备技术之一.

eventfd的作用是什么?为什么要用eventfd而不用普通的fd?eventfd的原理?

  • 作用: eventfd是用来传递事件的fd, 在本项目的作用是为了唤醒有可能epoll因为没有事件就绪而导致的阻塞, 因为要执行后续的任务, 所以通过eventfd来唤醒epoll_wait
  • 为什么: 不是所有的fd类型都可用epoll池来监听事件的, 只有实现了file_operation->poll的调用的 “文件” fd 才能被epoll管理. eventfd刚好就实现了这个接口.
  • 原理: eventfd实现的是一个计数功能, 写进去一个8字节的整数, eventfd实现的逻辑是累计计数, 读的时候, 读到总计数, 并且会清零. 使用epoll监听事件, 那么都是监听读事件, 因为监听写事件无意义, read eventfd的时候, 如果计数器的值为0, 就会阻塞, 一旦向该eventfd写入数据, 则唤醒epoll

runInLoop的作用及实现? 为什么执行_tasks任务的时候需要交换

  • 作用: 任何一个线程, 只要创建并运行了EventLoop, 都称之为IO线程. runInLoop()使得IO线程能够执行某个用户任务回调. 如果用户在当前IO线程调用这个函数, 回调会同步进行; 如果用户在其他线程调用runInLoop(), 回调函数会加入到队列中, IO线程会被唤醒来调用这个函数. 这样就能够轻易地在线程间调配任务, 比如将回调函数都移到IO线程中执行, 就可以在不使用锁的情况下保证线程安全.
  • 实现: eventfd实现, 判断回调函数是否是当前IO线程调用, 如果是, 则直接执行, 如果不是, 则push到EventLoop中的_tasks任务池中, 然后通过向eventfd中write一个数据唤醒epoll_wait而执行对应的回调任务
  • 为什么: 这样做可以减小锁的力度, 相当于一次批处理

定时器的设计以及为什么要用shared_ptr和weak_ptr?

定时器的设计是一个二维数组,第一维是一个循环数组,数组中每个元素也是一个数组,其他存储具体的定时任务。
使用shared_ptr的引l用计数来解决定时刷新问题,当需要刷新定时任务的时候,重新构造一个shared_ptr对象插入时间轮,第一个shared_ptr到期会销毁,引用计数-1,但此时引用计数还不是0,表示当前这个shared_ptr指向的任务失效。但是要注意,需要保存之前定时任务的weak_ptr,通过weak_ptr来构造新的shared_ptr才会共享引用计数。

怎么理解 One Loop Per Thread

OneLoop PerThread的含义就是,一个EventLoop和一个线程唯一绑定,和这个EventLoop有关的,被这个EventLoop管辖的一切操作都必须在这个EventLoop绑定线程中执行,比如在MainEventLoop中,负责新连接建立的操作都要在MainEventLoop线程中运行。已建立的连接分发到某个SubEventLoop上,这个已建立连接的任何操作,比如接收数据发送数据,连接断开等事件处理都必须在这个SubEventLoop线程上运行。

本文地址:https://www.vps345.com/5310.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge 阿里云 网络 网络安全 网络协议 llama 算法 opencv 自然语言处理 神经网络 语言模型 ssh ubuntu 进程 操作系统 进程控制 Ubuntu deepseek Ollama 模型联网 API CherryStudio 科技 ai java 人工智能 个人开发 python MCP fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse ssl RTSP xop RTP RTSPServer 推流 视频 运维开发 分布式 云原生 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn harmonyos 华为 开发语言 typescript 计算机网络 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 数据库 centos oracle 关系型 安全 rust http 深度学习 YOLO 目标检测 计算机视觉 银河麒麟 kylin v10 麒麟 v10 spring boot websocket pycharm ide pytorch 笔记 C 环境变量 进程地址空间 .netcore nginx dubbo macos 向日葵 面试 cuda cudnn anaconda 机器学习 sqlserver rust腐蚀 物联网 ESP32 c++ 单片机 前端框架 aws googlecloud vSphere vCenter 软件定义数据中心 sddc golang 后端 HCIE 数通 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 ESXi tcp/ip 智能路由器 外网访问 内网穿透 端口映射 android 鸿蒙 node.js json html5 firefox ollama 大模型 mac Dify vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 kubernetes 容器 学习方法 经验分享 程序人生 numpy asm docker DeepSeek-R1 API接口 性能优化 jdk intellij-idea 架构 c# cpu 内存 实时 使用 efficientVIT YOLOv8替换主干网络 TOLOv8 Hyper-V WinRM TrustedHosts flutter WSL2 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 开源 camera Arduino 电子信息 debian PVE GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 github 创意 社区 编辑器 鸿蒙系统 go 代理模式 Windsurf 计算机外设 电脑 软件需求 iot 统信UOS 麒麟 bonding 链路聚合 php ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 adb mysql ffmpeg 音视频 Dell R750XS 嵌入式硬件 温湿度数据上传到服务器 Arduino HTTP udp unity 华为云 vim HarmonyOS Next 命名管道 客户端与服务端通信 信息与通信 学习 uni-app flask AI编程 AIGC tcpdump conda 自动化 多进程 1024程序员节 智能手机 NAS Termux Samba Linux Trae AI AI代码编辑器 弹性计算 云服务器 裸金属服务器 弹性裸金属服务器 虚拟化 unix arkUI vscode windows ecmascript KVM redis 缓存 LDAP tomcat postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 Cookie 腾讯云 spring apache Agent maven intellij idea micropython esp32 mqtt rpc 实时音视频 wireshark 测试工具 chatgpt DeepSeek IIS服务器 IIS性能 日志监控 ue4 着色器 ue5 虚幻 bash pip YOLOv8 NPU Atlas800 A300I pro 服务器管理 宝塔面板 配置教程 服务器安装 网站管理 mongodb r语言 数据挖掘 数据可视化 数据分析 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 git ansible pygame 小游戏 五子棋 django sqlite Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer spring cloud kafka hibernate 课程设计 工业4.0 软件工程 客户端 java-ee nvidia gpu算力 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 僵尸进程 matplotlib VMware安装Ubuntu Ubuntu安装k8s k8s arm开发 漏洞 kind 微信开放平台 微信公众平台 微信公众号配置 .net 安全威胁分析 centos-root /dev/mapper yum clean all df -h / du -sh 京东云 进程信号 safari Mac 系统 系统架构 豆瓣 追剧助手 迅雷 nas 微信 其他 远程工作 AI大模型 程序员 微信小程序 小程序 unity3d gitlab vue 中间件 web安全 可信计算技术 安全架构 网络攻击模型 express okhttp CORS 跨域 ollama下载加速 dns n8n 工作流 workflow 大模型入门 低代码 恒源云 c语言 firewalld jenkins chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 致远OA OA服务器 服务器磁盘扩容 华为od OD机试真题 华为OD机试真题 服务器能耗统计 jmeter 软件测试 kylin arm opcua opcda KEPServer安装 大模型微调 oceanbase 传统数据库升级 银行 飞牛NAS 飞牛OS MacBook Pro 监控 自动化运维 gateway Clion Nova ResharperC++引擎 Centos7 远程开发 MQTT mosquitto 消息队列 Ubuntu Server Ubuntu 22.04.5 多线程服务器 Linux网络编程 virtualenv threejs 3D https AISphereButler live555 rtsp rtp outlook kamailio sip VoIP 蓝耘科技 元生代平台工作流 ComfyUI 大数据 大数据平台 yum源切换 更换国内yum源 Qwen2.5-coder 离线部署 微服务 springcloud Reactor 设计模式 C++ 媒体 pillow 嵌入式 linux驱动开发 IDE AI 原生集成开发环境 Trae AI 框架搭建 WSL win11 无法解析服务器的名称或地址 web3.py 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 Kali Linux 黑客 渗透测试 信息收集 服务器主板 AI芯片 持续部署 服务器繁忙 孤岛惊魂4 jupyter hadoop Docker Hub docker pull 镜像源 daemon.json xrdp 远程桌面 远程连接 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap devops springboot 游戏服务器 TrinityCore 魔兽世界 开发环境 SSL证书 代码调试 ipdb adobe Python 网络编程 聊天服务器 套接字 TCP Socket NPS 雨云服务器 雨云 springsecurity6 oauth2 授权服务器 token sas zabbix VMware创建虚拟机 源码剖析 rtsp实现步骤 流媒体开发 MacOS录屏软件 爬虫 数据集 pdf list 数据结构 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 远程控制 远程看看 远程协助 visualstudio rsyslog QQ 机器人 bot Docker 串口服务器 C语言 驱动开发 硬件工程 嵌入式实习 ipython 并查集 leetcode gpt llm 本地部署 api DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 bootstrap html asi_bench nextjs react reactjs stm32 gitee RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 kvm 交换机 telnet 远程登录 能力提升 面试宝典 技术 IT信息化 thingsboard postgresql 视觉检测 prometheus fpga开发 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 dell服务器 命令 rabbitmq 直播推流 protobuf 序列化和反序列化 安装 yum 服务器配置 生物信息学 rdp 实验 jar gradle react.js 前端面试题 C# MQTTS 双向认证 emqx 微信分享 Image wxopensdk UOS 统信操作系统 svn rc.local 开机自启 systemd KylinV10 麒麟操作系统 虚拟机 Vmware mybatis Ark-TS语言 llama3 Chatglm 开源大模型 transformer ping++ 深度优先 图论 并集查找 换根法 树上倍增 ddos iBMC UltraISO qt stm32项目 政务 分布式系统 监控运维 Prometheus Grafana microsoft zotero WebDAV 同步失败 agi mcu VMware安装mocOS VMware macOS系统安装 腾讯云大模型知识引擎 Deepseek ocr k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm webrtc asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 金融 部署 网络用户购物行为分析可视化平台 大数据毕业设计 产品经理 银河麒麟服务器操作系统 系统激活 报错 矩阵 sql KingBase 博客 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 eureka RAID RAID技术 磁盘 存储 LLM 负载均衡 远程 执行 sshpass 操作 YOLOv12 excel chrome devtools selenium chromedriver SSH 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 wps 安卓 p2p ArcTS 登录 ArcUI GridItem 搜索引擎 ip 蓝桥杯 游戏机 hugo 高级IO epoll 大语言模型 Netty 即时通信 NIO jvm SWAT 配置文件 服务管理 网络共享 HTTP 服务器控制 ESP32 DeepSeek ruoyi Cursor linux安装配置 银河麒麟桌面操作系统 Kylin OS 国产化 DeepSeek行业应用 Heroku 网站部署 rocketmq 迁移指南 半虚拟化 硬件虚拟化 Hypervisor hive DBeaver 数据仓库 kerberos 思科模拟器 思科 Cisco nuxt3 etcd 数据安全 RBAC 企业微信 Linux24.04 deepin vasp安装 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 seatunnel openstack Xen openssl 密码学 sdkman 模拟退火算法 目标跟踪 OpenVINO 推理应用 Redis Desktop 开机自启动 rag ragflow ragflow 源码启动 图形渲染 算力 计算机 DevEco Studio 黑苹果 visual studio code npm 链表 银河麒麟高级服务器 外接硬盘 Kylin alias unalias 别名 mamba Vmamba 社交电子 数据库系统 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 大模型教程 remote-ssh 直流充电桩 充电桩 lio-sam SLAM IPMI glibc W5500 OLED u8g2 TCP服务器 chfs ubuntu 16.04 mysql离线安装 ubuntu22.04 mysql8.0 OpenManus 源码 毕业设计 dify 同步 备份 建站 宝塔 混合开发 环境安装 JDK 网络穿透 火绒安全 Nuxt.js x64 SIGSEGV SSE xmm0 Xterminal yolov8 CLion 实时互动 Node-Red 编程工具 流编程 系统安全 命令行 基础入门 编程 bug Hive环境搭建 hive3环境 Hive远程模式 openEuler elasticsearch curl wget 大模型应用 飞书 uniapp flash-attention css CPU 主板 电源 网卡 ip命令 新增网卡 新增IP 启动网卡 linux 命令 sed 命令 oneapi open webui 设置代理 实用教程 echarts matlab LLMs 边缘计算 SSH 密钥生成 SSH 公钥 私钥 生成 北亚数据恢复 oracle数据恢复 android studio 业界资讯 cnn 鲲鹏 邮件APP 免费软件 SSH 服务 SSH Server OpenSSH Server code-server pgpool 自动化任务管理 XCC Lenovo 田俊楠 华为认证 网络工程师 移动云 MS Materials 硬件架构 自定义客户端 SAS shell embedding fd 文件描述符 毕设 nfs 信息可视化 网页设计 SSL 域名 华为机试 Java skynet 线程 DNS LORA NLP vr NFS deepseek r1 国产操作系统 ukui 麒麟kylinos openeuler 统信 虚拟机安装 云桌面 微软 AD域控 证书服务器 大大通 第三代半导体 碳化硅 回显服务器 UDP的API使用 指令 URL mq ftp web rustdesk VPS pyqt EasyConnect iftop 网络流量监控 minio RustDesk自建服务器 rustdesk服务器 docker rustdesk 黑客技术 make命令 makefile文件 big data opensearch helm MI300x WebRTC web3 openwrt grafana ux 多线程 vscode1.86 1.86版本 ssh远程连接 open Euler dde RTMP 应用层 Linux的权限 IPMITOOL BMC 硬件管理 集成学习 集成测试 文件系统 路径解析 SRS 流媒体 直播 elk 交互 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 单一职责原则 ui 云服务 odoo 服务器动作 Server action FTP 服务器 游戏程序 崖山数据库 YashanDB 繁忙 解决办法 替代网站 汇总推荐 AI推理 pyautogui Ubuntu 24.04.1 轻量级服务器 MQTT协议 消息服务器 代码 职场和发展 redhat dba tidb GLIBC 群晖 文件分享 iis WebUI DeepSeek V3 VSCode 运维监控 银河麒麟操作系统 CrewAI log4j qemu libvirt 服务器部署ai模型 RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 sqlite3 Anolis nginx安装 linux插件下载 AI写作 prompt 医疗APP开发 app开发 三级等保 服务器审计日志备份 v10 软件 bcompare Beyond Compare 无桌面 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 3d GIS 遥感 WebGIS openvpn server openvpn配置教程 centos安装openvpn ios 流式接口 DocFlow 图像处理 远程服务 联想开天P90Z装win10 无人机 Kylin-Server 多个客户端访问 IO多路复用 TCP相关API Cline ci/cd 软考 kali 共享文件夹 网工 压测 ECS ssrf 失效的访问控制 k8s集群资源管理 云原生开发 宕机切换 服务器宕机 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? EMUI 回退 降级 升级 Google pay Apple pay 压力测试 自动化编程 gcc centos 7 docker run 数据卷挂载 交互模式 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 MCP server C/S windows日志 监控k8s 监控kubernetes 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 技能大赛 idm ros2 moveit 机器人运动 自动化测试 性能测试 功能测试 灵办AI wsl linux环境变量 环境迁移 python3.11 c dity make dash 正则表达式 单元测试 显示过滤器 ICMP Wireshark安装 相差8小时 UTC 时间 netty 图形化界面 minicom 串口调试工具 远程过程调用 Windows环境 测试用例 IIS .net core Hosting Bundle .NET Framework vs2022 rime XFS xfs文件系统损坏 I_O error es GPU 状态管理的 UDP 服务器 Arduino RTOS Docker Compose docker compose docker-compose webstorm gitea wsl2 risc-v tensorflow trae file server http server web server GCC crosstool-ng 多层架构 解耦 docker命令大全 自动驾驶 5G 3GPP 卫星通信 Invalid Host allowedHosts nac 802.1 portal 强制清理 强制删除 mac废纸篓 监控k8s集群 集群内prometheus Wi-Fi TRAE SysBench 基准测试 ecm bpm xml 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 云电竞 云电脑 todesk 分析解读 cmos 硬件 音乐服务器 Navidrome 音流 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 虚拟局域网 ceph Minecraft selete DOIT 四博智联 Erlang OTP gen_server 热代码交换 事务语义 MNN Qwen 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 freebsd 深度求索 私域 知识库 gpt-3 文心一言 gaussdb playbook 重启 排查 系统重启 日志 原因 MacMini 迷你主机 mini Apple Claude 宠物 免费学习 宠物领养 宠物平台 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 eNSP 网络规划 VLAN 企业网络 大模型面经 大模型学习 Dell HPE 联想 浪潮 iDRAC R720xd 显卡驱动 小艺 Pura X 实战案例 匿名管道 磁盘监控 frp AI作画 next.js 部署next.js 聊天室 muduo xcode 个人博客 X11 Xming 拓扑图 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 英语 ruby 剧本 VR手套 数据手套 动捕手套 动捕数据手套 系统开发 binder 车载系统 framework 源码环境 网络结构图 Linux PID mariadb P2P HDLC 计算虚拟化 弹性裸金属 LInux JAVA linux上传下载 昇腾 npu 输入法 王者荣耀 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos av1 电视盒子 机顶盒ROM 魔百盒刷机 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 USB网络共享 数学建模 Playwright 阻塞队列 生产者消费者模型 服务器崩坏原因 xshell termius iterm2 vscode 1.86 网站搭建 serv00 jetty undertow vmware 卡死 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 neo4j 数据库开发 database langchain uv keepalived 设备 PCI-Express sonoma 自动更新 c/c++ 串口 banner 软负载 IO模型 etl 服务网格 istio 大模型推理 yaml Ultralytics 可视化 DIFY llama.cpp 我的世界服务器搭建 minecraft 序列化反序列化 xss rnn 游戏引擎 语法 nlp HarmonyOS OpenHarmony 真机调试 查询数据库服务IP地址 SQL Server perf 分布式训练 语音识别 AutoDL qt项目 qt项目实战 qt教程 seleium 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 捆绑 链接 谷歌浏览器 youtube google gmail IMX317 MIPI H265 VCU composer 产测工具框架 IMX6ULL 管理框架 Ubuntu共享文件夹 共享目录 Linux共享文件夹 Radius k8s二次开发 集群管理 Linux的基础指令 EMQX 通信协议 VS Code Logstash 日志采集 代码托管服务 开发 rclone AList webdav fnOS 物联网开发 根服务器 clickhouse 区块链 UOS1070e prometheus数据采集 prometheus数据模型 prometheus特点 regedit 开机启动 做raid 装系统 laravel 程序 性能分析 小智AI服务端 xiaozhi ASR TTS junit AD 域管理 NLP模型 自学笔记 小米 澎湃OS Android 考研 内网服务器 内网代理 内网通信 策略模式 单例模式 miniapp 调试 debug 断点 网络API请求调试方法 HiCar CarLife+ CarPlay QT RK3588 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 需求分析 规格说明书 历史版本 下载 webgl ubuntu24.04.1 网络建设与运维 互信 玩机技巧 软件分享 软件图标 bat 端口 查看 ss 毕昇JDK 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 OpenSSH 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 备选 网站 调用 示例 autodl 读写锁 AD域 AI Agent 字节智能运维 私有化 反向代理 WSL2 上安装 Ubuntu vpn MySql IPv4 子网掩码 公网IP 私有IP CDN harmonyOS面试题 相机 EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 权限 ShenTong Headless Linux tcp 安防软件 用户缓冲区 端口测试 模拟实现 easyui wpf 移动魔百盒 支付 微信支付 开放平台 USB转串口 CH340 ArkTs ArkUI 进程优先级 调度队列 进程切换 飞牛nas fnos SenseVoice flink Mac内存不够用怎么办 cocoapods Windows ai工具 armbian u-boot 版本 DeepSeek r1 Open WebUI Jellyfin 存储维护 NetApp存储 EMC存储 Kali 渗透 TrueLicense 项目部署到linux服务器 项目部署过程 CVE-2024-7347 iphone AI-native Docker Desktop 免费域名 域名解析 超融合 h.264 eclipse 办公自动化 自动化生成 pdf教程 cpp-httplib 镜像 Ubuntu22.04 开发人员主页 trea idea 李心怡 LLM Web APP Streamlit su sudo g++ g++13 影刀 #影刀RPA# docker部署Python IMM 智能音箱 智能家居 ROS sysctl.conf vm.nr_hugepages arcgis less 信号处理 视频编解码 spark HistoryServer Spark YARN jobhistory asp.net大文件上传下载 键盘 推荐算法 串口驱动 CH341 uart 485 DenseNet 僵尸世界大战 游戏服务器搭建 IM即时通讯 剪切板对通 HTML FORMAT 代理 代理服务器 edge浏览器 onlyoffice zookeeper saltstack figma WebVM 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 流水线 脚本式流水线 swoole FTP服务器 ldap 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR Xinference RAGFlow 模拟器 教程 GoogLeNet 阿里云ECS cd 目录切换 virtualbox 架构与原理 ubuntu24 vivado24 网络药理学 生信 gromacs 分子动力学模拟 MD 动力学模拟 内网环境 apt 国内源 tailscale derp derper 中转 triton 模型分析 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 大模型部署 嵌入式Linux IPC 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 IDEA 稳定性 看门狗 Typore 网卡的名称修改 eth0 ens33 deep learning vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 多端开发 智慧分发 应用生态 鸿蒙OS 本地知识库部署 DeepSeek R1 模型 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 Unity Dedicated Server Host Client 无头主机 aarch64 编译安装 HPC Deepseek-R1 私有化部署 推理模型 WLAN 中兴光猫 换光猫 网络桥接 自己换光猫 rancher 实习 常用命令 文本命令 目录命令 交叉编译 换源 Debian searxng Linux环境 PPI String Cytoscape CytoHubba sentinel 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 信创 信创终端 中科方德 midjourney 抗锯齿 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 firewall FunASR 佛山戴尔服务器维修 佛山三水服务器维修 金仓数据库 2025 征文 数据库平替用金仓 deekseek 加解密 Yakit yaklang 干货分享 黑客工具 密码爆破 Spring Security 技术共享 我的世界 我的世界联机 数码 线性代数 电商平台 服务器时间 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 ISO镜像作为本地源 聚类 执法记录仪 智能安全帽 smarteye cursor 信号 lua 软件构建 强化学习 虚拟显示器 pppoe radius ros 域名服务 DHCP 符号链接 配置 powerpoint dns是什么 如何设置电脑dns dns应该如何设置 音乐库 飞牛 H3C AnythingLLM AnythingLLM安装 前后端分离 基础环境 AI agent iventoy VmWare OpenEuler 主从复制 jina 人工智能生成内容 can 线程池 程序员创富 cfssl 虚拟现实 ssh远程登录 本地部署AI大模型 7z QT 5.12.12 QT开发环境 Ubuntu18.04 双系统 GRUB引导 Linux技巧 grub 版本升级 扩容 游戏开发 浏览器开发 AI浏览器 ssh漏洞 ssh9.9p2 CVE-2025-23419 显示管理器 lightdm gdm CentOS Stream CentOS deployment daemonset statefulset cronjob win服务器架设 windows server 合成模型 扩散模型 图像生成 鸿蒙开发 移动开发 状态模式 国产数据库 瀚高数据库 数据迁移 下载安装 sequoiaDB TCP协议 SVN Server tortoise svn HAProxy ABAP 端口聚合 windows11 milvus 钉钉 hexo SEO 磁盘清理 System V共享内存 进程通信 软件卸载 系统清理 在线office visual studio docker desktop image Linux权限 权限命令 特殊权限 本地化部署 fast ranger MySQL8.0 MAC SecureCRT 离线部署dify word UEFI Legacy MBR GPT U盘安装操作系统 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 MacOS 企业网络规划 华为eNSP 软链接 硬链接 rpa PX4 iperf3 带宽测试 wsgiref Web 服务器网关接口 Linux find grep java-rocketmq ardunio BLE 浏览器自动化 抓包工具 粘包问题 kernel 热榜 perl MAVROS 四旋翼无人机 navicat vu大文件秒传跨域报错cors 健康医疗 MDK 嵌入式开发工具 论文笔记 sublime text vnc Attention zip unzip 嵌入式系统开发 知识图谱 网络爬虫 通信工程 毕业 极限编程 电视剧收视率分析与可视化平台 安装MySQL 云耀服务器 问题解决 React Next.js 开源框架 kotlin 虚幻引擎 xpath定位元素 gnu Sealos 论文阅读 烟花代码 烟花 元旦 性能调优 安全代理 查看显卡进程 fuser ArtTS 防火墙 NAT转发 NAT Server nvm whistle 树莓派 VNC 网络搭建 神州数码 神州数码云平台 云平台 db 元服务 应用上架 ip协议 css3 智能电视 nftables UDP ubuntu20.04 开机黑屏 流量运营 MVS 海康威视相机 带外管理 hosts ubuntu 18.04 proxy模式 欧标 OCPP dock 加速 Python基础 Python教程 Python技巧 环境配置 沙盒 AI员工 Unity插件 容器技术 计算生物学 生物信息 基因组 HarmonyOS NEXT 原生鸿蒙 IO 多路转接 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 fstab Qwen2.5-VL vllm rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 对比 工具 meld DiffMerge ros1 Noetic 20.04 apt 安装 互联网医院 top Linux top top命令详解 top命令重点 top常用参数 react native 项目部署 nosql js Web服务器 多线程下载工具 PYTHON MobaXterm yolov5 达梦 DM8 接口优化 mcp服务器 client close 解决方案 西门子PLC 通讯 yum换源 Linux 维护模式 机柜 1U 2U Reactor反应堆 conda配置 conda镜像源 java-rabbitmq 本地环回 bind powerbi copilot 搭建个人相关服务器 话题通信 服务通信 数字证书 签署证书 macOS mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 WebServer 风扇控制软件 服务器正确解析请求体 视频平台 录像 视频转发 视频流 搜狗输入法 中文输入法