开源看板平台Open Kanban:从部署到生产环境全栈实践指南

news2026/5/18 18:20:18
1. 项目概述一个开源的看板协作平台如果你正在寻找一个轻量级、可自部署、且能完全掌控数据的团队协作工具那么clawnify/open-kanban这个项目值得你花时间深入了解。简单来说它是一个开源的看板Kanban系统旨在为小型团队、开源项目组或个人开发者提供一个简洁、高效的敏捷协作环境。不同于那些功能庞杂、学习曲线陡峭的商业化项目管理软件Open Kanban 的核心设计哲学是“专注”与“透明”——它只做看板这一件事并力求把它做到极致让任务流程一目了然。看板方法源自精益生产在软件开发、产品设计乃至个人事务管理领域都得到了广泛应用。其核心在于可视化工作流限制在制品WIP数量并通过持续优化流程来提升效率。Open Kanban 正是这一理念的数字化实践。它允许你创建多个看板每个看板代表一个项目或工作流在看板内你可以自定义列例如“待办”、“进行中”、“测试中”、“已完成”通过拖拽卡片来移动任务状态每张卡片可以承载丰富的细节如描述、检查清单、附件、评论和负责人。对于厌倦了 SaaS 工具订阅费、担忧数据安全或者希望工具能完全适配自身工作流的团队而言能够将这样一套系统部署在自己的服务器上无疑具有巨大的吸引力。这个项目适合谁首先是技术团队的负责人或敏捷教练他们需要一个干净的、可定制的工具来推行看板实践而不被无关功能干扰。其次是开源项目的维护者可以利用它来透明地管理 Issue 和 Pull Request 的工作流。再者是任何有基本服务器运维能力的个人或小团队希望拥有一个私有的、长期稳定的协作空间。接下来我将从设计思路、部署实操、核心功能使用到高级定制为你完整拆解 Open Kanban分享从零搭建到顺畅使用的全过程以及我踩过的一些坑和总结出的技巧。2. 核心架构与技术栈选型解析2.1 为什么选择这样的技术组合初次接触 Open Kanban 的代码仓库你会发现它的技术栈非常“现代”且清晰这反映了开发者对当前主流Web开发趋势的理解和取舍。项目主要采用了Vue.js 3作为前端框架搭配TypeScript确保代码类型安全后端则基于Node.js与Express框架构建数据存储方面默认使用了轻量级的SQLite数据库同时也支持PostgreSQL以满足更复杂的生产环境需求。这种选择背后有很强的逻辑。前端选用 Vue 3 的 Composition API使得构建复杂的、响应式的看板交互界面变得非常高效。卡片拖拽、实时更新、模态框这些功能用 Vue 生态的成熟库如Vue Draggable Next可以优雅实现。TypeScript 的引入对于开源项目尤其重要它能极大提升代码的可维护性和团队协作的可靠性避免许多运行时才能发现的低级错误。后端采用 Node.js Express是一个经过无数项目验证的、高性能且灵活的方案。它足够轻量能快速处理 RESTful API 请求与前端 Vue 应用天然契合便于全栈开发者理解和贡献代码。数据库层面默认集成 SQLite 是一个降低使用门槛的明智之举。对于个人用户或小团队SQLite 无需安装独立的数据库服务一个文件搞定所有数据存储备份和迁移都极其简单。项目通过Knex.js作为查询构建器提供了良好的数据库抽象层这使得切换数据库比如从 SQLite 到 PostgreSQL的配置变得相对容易。这种设计给了用户弹性初期可以用 SQLite 快速验证当团队规模扩大、需要并发连接和更高级的数据库功能时可以平滑迁移到 PostgreSQL。注意虽然 SQLite 方便但在多用户同时高频写入的场景下例如超过10人团队频繁拖拽卡片、添加评论可能会遇到数据库锁的问题。因此如果你的团队活跃度较高建议从一开始就使用 PostgreSQL。2.2 项目结构与模块化设计Open Kanban 的代码结构遵循了清晰的关注点分离原则。通常一个全栈项目会分为client前端和server后端两个主要目录。在client目录中你会看到典型的 Vue 3 项目结构src/components里存放着可复用的UI组件如KanbanBoard.vue看板主组件、TaskCard.vue任务卡片组件、ModalDialog.vue通用弹窗src/views或src/pages对应不同的页面路由src/stores很可能使用了 Pinia 进行状态管理用于集中管理看板数据、用户认证状态等src/api文件夹则封装了所有与后端通信的 HTTP 请求函数。server目录则体现了 Express 应用的经典模式routes/目录定义了各种 API 端点如/api/boards,/api/cards,/api/authcontrollers/处理具体的业务逻辑models/或services/层负责数据存取和业务规则middlewares/包含认证、日志等中间件config/存放数据库连接等配置。使用 Knex 的话还会有一个migrations/文件夹用于管理数据库表结构的版本变更这是团队协作和持续迭代中不可或缺的一环。这种模块化设计的好处是显而易见的。对于开发者而言代码易于阅读、调试和扩展。如果你想添加一个新功能比如“卡片时间追踪”你可以很明确地知道要去修改前端的哪个组件、添加哪个API路由、以及更新哪个数据模型。对于运维者来说清晰的分离也便于部署前后端甚至可以独立部署通过环境变量配置API基地址即可。3. 从零开始的部署与安装实战3.1 环境准备与依赖安装部署 Open Kanban 的第一步是准备好运行环境。由于它是一个 Node.js 全栈应用所以你需要确保服务器或本地开发机上已经安装了合适版本的 Node.js建议 LTS 版本如 18.x 或 20.x和 npm或 yarn、pnpm。你可以通过node -v和npm -v命令来验证。接下来是获取源代码。通常你需要将项目克隆到本地git clone https://github.com/clawnify/open-kanban.git cd open-kanban在项目根目录下你会看到package.json文件。仔细查看其中的scripts字段这是了解项目构建和启动命令的关键。一个典型的全栈项目可能会在根目录有一个总的package.json里面通过concurrently之类的工具同时启动前后端也可能前后端有独立的package.json需要分别安装依赖和启动。假设项目结构是前后端分离的常见的安装步骤是# 安装后端依赖 cd server npm install # 安装前端依赖 cd ../client npm install安装过程可能会遇到网络问题或某些原生模块如node-gyp编译的模块编译失败。如果遇到node-sass或bcrypt等模块安装错误通常需要确保你的系统已安装 Python 和构建工具如 Windows 下的windows-build-tools macOS 下的 Xcode Command Line Tools Linux 下的build-essential。3.2 配置详解环境变量与数据库初始化安装完依赖后最关键的一步是配置。Open Kanban 的配置很可能通过环境变量.env文件来管理。在后端server目录下你应该能找到.env.example或类似的文件。复制一份并重命名为.envcp .env.example .env然后用文本编辑器打开.env文件进行配置。核心配置项通常包括PORT: 后端服务器监听的端口例如3001。NODE_ENV: 环境模式开发用development生产用production。DATABASE_URL: 数据库连接字符串。对于 SQLite可能是sqlite://./dev.db对于 PostgreSQL格式类似postgresql://username:passwordlocalhost:5432/openkanban。JWT_SECRET: 用于签发和验证用户认证令牌JWT的密钥必须设置为一个长且复杂的随机字符串且在生产环境中严格保密。CLIENT_URL: 前端应用的访问地址用于配置 CORS跨域资源共享例如http://localhost:8080。配置好环境变量后需要初始化数据库。如果项目使用了 Knex 迁移通常可以通过以下命令创建数据库表结构cd server npx knex migrate:latest这条命令会执行migrations目录下的所有迁移文件在你的数据库中创建users、boards、columns、cards等表。执行成功后你可能会看到类似“Batch 1 run: 4 migrations”的提示。实操心得在运行迁移前务必确认.env中的DATABASE_URL指向一个你有权限写入的数据库。对于 SQLite确保所在目录有写权限对于 PostgreSQL确保数据库实例已启动并且连接字符串中的数据库如openkanban已存在你可能需要先用createdb openkanban命令创建空数据库。3.3 启动应用与初次访问数据库就绪后就可以启动应用了。根据项目结构启动方式可能有两种方式一前后端独立启动开发模式常见# 终端1启动后端API服务器 cd server npm run dev # 终端2启动前端开发服务器 cd client npm run dev后端服务通常在http://localhost:3001运行前端则在http://localhost:8080。你需要在浏览器中访问前端地址。方式二生产模式构建与启动对于生产环境我们需要先构建前端静态文件然后让后端服务一并托管。# 1. 构建前端生产包 cd client npm run build # 构建产物通常会输出到 client/dist 目录 # 2. 将构建产物复制到后端静态资源目录具体路径参考项目文档 # 例如cp -r client/dist/* server/public/ # 3. 启动后端生产服务 cd server NODE_ENVproduction npm start此时你只需要访问后端服务的地址如http://你的服务器IP:3001即可看到完整应用。首次访问应用你应该会看到一个注册或登录页面。由于是全新安装你需要注册第一个账户这个账户通常会自动成为系统管理员。注册成功后就可以开始创建你的第一个看板了。4. 核心功能深度使用与配置技巧4.1 看板、列与卡片的艺术创建看板是第一步。点击“新建看板”给它起个名字比如“产品开发路线图”还可以添加描述和封面颜色。创建后你就进入了一个空白的看板。默认可能只有“待办”、“进行中”、“已完成”三列但这完全不够用。列的自定义是看板灵活性的核心。不要被模板限制要根据你团队的实际工作流来设计列。例如一个软件开发的看板列可能是“需求池”、“本周待办”、“开发中”、“代码审查”、“测试中”、“待发布”、“已完成”。每一列代表任务的一个明确状态。你可以轻松地通过拖拽列标题来调整顺序或者点击列标题的菜单进行重命名、设置颜色、限制在制品数量WIP Limit。WIP Limit在制品限制是看板方法中提升效率、暴露瓶颈的关键工具。它为每一列设置一个同时可容纳卡片数量的上限。例如将“开发中”列的 WIP Limit 设为 3意味着最多只能有 3 张卡片处于该状态。当列已满时团队成员就不能再从上游拖入新卡片必须先推动下游的卡片移动或者协作解决当前卡片遇到的阻塞。这迫使团队关注完成而非开始有效减少了上下文切换和半成品堆积。创建卡片就是创建具体任务。点击列下方的“添加卡片”填写标题。标题要简洁、 actionable例如“实现用户登录API”而不是“登录功能”。点击卡片进入详情页这里才是发挥威力的地方描述用 Markdown 格式详细说明任务背景、验收标准、相关链接。好的描述能减少沟通成本。检查清单将大任务拆解成可勾选的小步骤能极大提升完成感和进度可视性。成员指派负责人和协作者。被指派的成员会在相关通知中收到提醒。标签用颜色标签对卡片进行分类如“Bug”、“功能”、“文档”、“高优先级”。日期设置开始日期和截止日期卡片上会以视觉方式提醒。附件上传设计图、文档、日志文件等。评论所有关于该任务的讨论都应在此进行形成完整的上下文记录避免信息散落在即时通讯工具中。4.2 团队协作与权限管理Open Kanban 作为一个协作平台权限管理是必不可少的。通常它会有一个简单的基于角色的权限系统所有者Owner、管理员Admin和成员Member。所有者通常是看板的创建者拥有所有权限包括删除看板、管理所有成员。管理员可以被所有者指派拥有邀请/移除成员除了所有者、编辑看板设置、管理所有卡片的权限。成员可以查看看板、创建和编辑自己负责的卡片、评论等但不能修改看板结构或管理成员。邀请成员通常有两种方式一是通过邮箱邀请系统会发送一封包含邀请链接的邮件二是生成一个邀请链接直接分享给团队成员。对于小型封闭团队后者更快捷。在实际使用中权限的粒度可能需要更细。例如你可能希望“实习生”角色只能评论而不能编辑卡片描述。Open Kanban 的开源优势就在这里如果你有这样的需求可以 fork 项目在后端的middlewares/auth.js和路由逻辑中添加更精细的权限检查。这是一个中级难度的定制点需要你熟悉 Node.js 和 Express 的中间件机制。通知系统是保持团队同步的关键。一个基本的通知系统应该包括当卡片被指派给你、当有人在你负责的卡片下评论、当卡片截止日期临近时在网页内给出提示小红点或者发送邮件。你需要检查 Open Kanban 是否实现了这些功能以及如何配置邮件服务器SMTP来启用邮件通知。配置项通常会在.env文件中如SMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS,NOTIFICATION_EMAIL_FROM。4.3 数据导入导出与备份策略数据是无价的。Open Kanban 应该提供看板数据的导出功能格式可能是 JSON 或 CSV。导出 JSON 可以完整保留看板结构、卡片详情、评论等所有信息用于完整的备份或迁移到另一个实例。导出 CSV 则更适合将任务列表导入到电子表格中进行批量分析。定期备份是生产环境运维的黄金法则。对于使用 SQLite 的情况备份就是直接复制数据库文件如prod.db。你可以写一个简单的 shell 脚本用cron定时任务每天将数据库文件压缩并拷贝到远程存储如另一台服务器、云存储桶。脚本示例#!/bin/bash BACKUP_DIR/path/to/backups DB_FILE/path/to/open-kanban/server/prod.db TIMESTAMP$(date %Y%m%d_%H%M%S) cp $DB_FILE $BACKUP_DIR/backup_$TIMESTAMP.db # 可选使用 rclone 或 scp 同步到远程 # rclone copy $BACKUP_DIR/backup_$TIMESTAMP.db remote:backup-bucket/对于 PostgreSQL可以使用pg_dump命令进行逻辑备份pg_dump -U username openkanban backup_$(date %Y%m%d).sql恢复数据同样重要。对于 SQLite用备份文件替换现有数据库文件即可需停止服务。对于 PostgreSQL使用psql命令恢复psql -U username openkanban backup_file.sql在进行任何恢复操作前务必再次备份当前数据以防误操作覆盖。5. 生产环境部署进阶与性能调优5.1 使用 Docker 容器化部署手动部署和维护 Node.js 应用涉及依赖安装、进程管理等诸多细节。使用 Docker 可以将其标准化实现“一次构建到处运行”。Open Kanban 项目很可能提供了Dockerfile和docker-compose.yml文件。如果没有你也可以自己编写。一个典型的Dockerfile会采用多阶段构建来减小镜像体积# 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY client/package*.json ./client/ COPY server/package*.json ./server/ COPY package*.json ./ RUN npm ci --prefix client npm ci --prefix server COPY . . RUN npm run build --prefix client # 运行阶段 FROM node:18-alpine WORKDIR /app COPY --frombuilder /app/server ./server COPY --frombuilder /app/client/dist ./server/public WORKDIR /app/server RUN npm ci --onlyproduction EXPOSE 3001 CMD [node, index.js]而docker-compose.yml则可以方便地定义应用服务及其依赖如 PostgreSQL 数据库version: 3.8 services: db: image: postgres:15-alpine environment: POSTGRES_DB: openkanban POSTGRES_USER: kanban_user POSTGRES_PASSWORD: strong_password_here volumes: - postgres_data:/var/lib/postgresql/data app: build: . ports: - 3001:3001 environment: NODE_ENV: production DATABASE_URL: postgresql://kanban_user:strong_password_heredb:5432/openkanban JWT_SECRET: your_super_secret_jwt_key depends_on: - db volumes: postgres_data:使用 Docker Compose 部署只需一行命令docker-compose up -d。它会自动拉取或构建镜像创建网络和卷并启动所有服务。管理起来也非常方便docker-compose logs -f app查看日志docker-compose down停止服务docker-compose pull docker-compose up -d更新应用。5.2 配置反向代理与 HTTPS直接通过 IP 和端口访问服务既不安全也不专业。我们需要使用 Nginx 或 Caddy 这样的反向代理服务器将域名如kanban.yourcompany.com指向我们的 Open Kanban 服务并配置 HTTPS。以 Nginx 为例假设你的 Docker 应用运行在宿主机的 3001 端口。你需要在 Nginx 的sites-available目录下创建一个配置文件server { listen 80; server_name kanban.yourcompany.com; # 将HTTP请求重定向到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name kanban.yourcompany.com; ssl_certificate /etc/letsencrypt/live/kanban.yourcompany.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kanban.yourcompany.com/privkey.pem; # 可在此添加其他SSL优化配置 location / { proxy_pass http://localhost:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果应用有WebSocket可能需要以下配置 # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection upgrade; } # 静态文件缓存优化如果Nginx直接托管前端文件 # location /assets/ { # expires 1y; # add_header Cache-Control public, immutable; # } }HTTPS 证书可以使用 Let‘s Encrypt 免费获取通过 Certbot 工具可以自动化申请和续期。配置好 Nginx 并重载服务后你的 Open Kanban 就可以通过安全的 HTTPS 域名访问了。5.3 监控、日志与性能考量应用上线后我们需要知道它是否健康、运行是否高效。日志确保 Open Kanban 的后端使用了像winston或morgan这样的日志库将访问日志和错误日志记录到文件中而不是仅仅输出到控制台。在 Docker 部署中确保日志是输出到stdout和stderr这样可以被 Docker 的日志驱动收集。你可以使用docker logs命令查看或者配置logrotate来管理宿主机上的日志文件防止磁盘被撑满。进程管理在生产环境中不应该直接用node index.js运行应用。如果进程崩溃服务就中断了。应该使用进程管理器来保持应用常驻并在崩溃后自动重启。pm2是一个流行的选择npm install -g pm2 pm2 start server/index.js --name open-kanban pm2 save pm2 startup # 设置开机自启对于 Docker 部署容器本身具有重启策略可以在docker-compose.yml中配置restart: always。性能监控对于小型应用基础的服务器监控CPU、内存、磁盘可能就够了。你可以使用htop、nmon等命令行工具或者搭建 Grafana Prometheus 看板。需要关注的是数据库性能如果感觉卡片加载变慢可能是没有对board_id、column_id等常用查询字段建立索引。你可以通过 Knex 的迁移文件来添加索引// 在迁移文件中 exports.up function(knex) { return knex.schema.table(cards, function(table) { table.index([column_id]); // 为column_id字段添加索引 table.index([board_id]); // 为board_id字段添加索引 }); };备份与更新建立自动备份流程如前文所述。关注项目 GitHub 仓库的 Release 页面定期更新以获取新功能和安全补丁。更新前务必在测试环境验证并备份生产环境数据。6. 常见问题排查与实战技巧锦囊6.1 安装与启动问题问题1npm install失败提示node-gyp错误。这通常是因为缺少编译原生模块的系统依赖。在 Ubuntu/Debian 上sudo apt-get install -y build-essential python3在 CentOS/RHEL 上sudo yum groupinstall -y Development Tools sudo yum install -y python3在 macOS 上确保已安装 Xcode Command Line Tools:xcode-select --install在 Windows 上安装windows-build-tools以管理员身份运行 PowerShellnpm install --global windows-build-tools如果问题依旧可以尝试跳过可选的原生模块或者使用--legacy-peer-deps标志安装。问题2前端构建失败提示内存不足JavaScript heap out of memory。Vue/TypeScript 项目在构建时可能占用较多内存。可以尝试增加 Node.js 内存限制NODE_OPTIONS--max-old-space-size4096 npm run build关闭并行构建如果使用 Webpack在vue.config.js中设置parallel: false。确保你的服务器或本地机器有足够的可用内存建议至少2GB。问题3应用启动后访问页面出现空白或前端资源加载失败。检查后端服务是否正常运行curl http://localhost:3001/api/health或类似健康检查端点。检查前端构建产物是否已正确复制到后端静态文件目录如server/public。检查浏览器开发者工具F12的“网络”Network标签页查看具体是哪个资源JS、CSS加载失败根据错误信息404、500等进行排查。如果使用反向代理检查 Nginx 配置中的proxy_pass地址和端口是否正确以及静态文件路径配置。6.2 运行时功能异常问题4卡片拖拽后刷新页面又回到了原位置。这几乎肯定是前端操作成功但后端API调用失败导致的。打开浏览器开发者工具的“网络”标签页在拖拽卡片时观察是否有失败的PATCH或PUT请求通常是更新卡片位置的API如/api/cards/:id。查看该请求的响应状态码和响应体。401 Unauthorized用户认证失效尝试重新登录。403 Forbidden当前用户没有权限移动这张卡片检查权限设置。500 Internal Server Error后端服务器错误。查看后端日志常见原因有数据库连接失败、数据验证错误、或服务器代码bug。问题5上传附件失败或文件大小受限。默认情况下Express 服务器对上传文件大小有限制。你需要在后端代码中增加 body-parser 的 limit 配置。例如在server/index.js或server/app.js中app.use(express.json({ limit: 10mb })); // 增加JSON解析大小限制 app.use(express.urlencoded({ limit: 10mb, extended: true })); // 如果使用 multer 等中间件处理文件上传也需要配置其 limits同时前端可能也有文件大小校验需要根据错误提示在前端代码中相应调整。问题6邮件通知功能不工作。首先检查后端.env文件中的 SMTP 配置是否正确包括主机、端口、用户名、密码。可以使用telnet或openssl s_client命令测试 SMTP 服务器连通性。检查后端日志看是否有发送邮件时的错误信息。常见错误包括认证失败、端口被屏蔽很多云厂商默认屏蔽25端口建议使用587端口STARTTLS。检查垃圾邮件文件夹有时通知邮件可能被误判。6.3 维护与数据问题问题7数据库迁移migration失败。在执行npx knex migrate:latest时如果报错例如某张表已存在可能是因为迁移文件顺序或内容冲突。首先备份当前数据库。查看knex_migrations表了解哪些迁移已执行。可以尝试回滚到上一个版本npx knex migrate:rollback然后检查代码再重新执行迁移。如果是生产环境需要极其谨慎最好先在测试环境复现并解决。问题8如何将数据从一个实例迁移到另一个实例从旧实例导出数据如果应用提供了导出功能使用它导出JSON。如果没有对于 SQLite直接复制数据库文件对于 PostgreSQL使用pg_dump。在新实例中确保数据库表结构已通过迁移创建完毕版本一致或更高。导入数据如果有导入功能则使用。否则需要编写脚本或手动操作数据库。对于简单的 SQLite可以直接替换文件需停止服务。对于 PostgreSQL使用psql导入 dump 文件。注意直接导入原始数据可能会带来用户ID冲突等问题最稳妥的方式是使用应用层提供的API进行导入如果实现了的话。问题9性能逐渐变慢尤其是打开包含大量卡片的看板时。前端优化检查是否一次性加载了看板所有历史卡片可以考虑实现分页加载或虚拟滚动只渲染可视区域内的卡片。这需要修改前端代码。后端优化检查数据库查询。使用数据库的 EXPLAIN 命令如EXPLAIN QUERY PLAN SELECT * FROM cards WHERE board_id ?分析查询效率确保在board_id,column_id等常用过滤字段上建立了索引。网络优化确保服务器带宽充足对于图片等附件可以考虑使用 CDN 或对象存储服务如 AWS S3、MinIO而不是直接存储在服务器磁盘或数据库里。这需要修改文件上传和访问的逻辑。6.4 我的几点实操心得从简开始不要一开始就设计一个拥有十几列的复杂看板。从最简单的三列待办、进行中、完成开始让团队先用起来。随着流程的演进再逐步添加或调整列。定期梳理每周或每两周安排一次看板梳理会议一起回顾各列卡片清理过时任务拆分大卡片确保看板反映真实、可执行的工作。善用标签和过滤器颜色标签是强大的元数据。可以按模块前端、后端、按优先级P0 P1、按类型Bug Feature打标签。结合看板上的过滤器功能可以快速聚焦到某一类任务。WIP Limit 是朋友不是枷锁刚开始设置 WIP Limit 时团队可能会感到不适觉得被限制了。这时要坚持并引导团队关注如何协作来移动下游的卡片而不是抱怨限制。这是暴露流程瓶颈、促进协作的开始。备份备份备份我已经强调过但值得再强调一遍。自动化你的数据库备份流程并定期测试恢复流程是否有效。一次数据丢失的事故足以摧毁团队对自建工具的信任。参与社区Open Kanban 是开源项目。如果你遇到了bug或者有很好的功能想法可以去 GitHub 仓库提交 Issue 或 Pull Request。这也是确保项目能持续发展、满足你未来需求的最好方式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…