Lowkey:基于Docker Compose的轻量级本地开发环境解决方案

news2026/5/9 1:19:09
1. 项目概述一个为开发者打造的轻量级本地开发环境最近在和一些独立开发者朋友聊天时发现一个挺普遍的现象大家手头的项目越来越多每个项目依赖的环境、数据库、中间件版本都不一样。在本地机器上装一堆Docker、配各种环境变量、处理端口冲突光是准备工作就能耗掉半天。更别提新同事入职光是配环境就得折腾一两天效率低不说还容易因为环境不一致导致各种“在我机器上是好的”的灵异问题。这时候一个能快速拉起、一键复现、并且足够轻量的本地开发环境栈就显得尤为重要。今天要聊的这个inceptionstack/lowkey项目就是冲着解决这个痛点来的。简单来说它是一个基于容器技术主要是Docker的预配置开发环境栈你可以把它理解为一个“开箱即用”的本地开发沙盒。它把Web服务器、数据库、缓存、消息队列等常见开发组件打包成一套可组合、可配置的标准化服务让你用几条命令就能在本地搭建起一个功能完整的开发后端。这个项目特别适合哪些人呢我觉得主要是三类一是独立开发者或小团队项目初期不想在环境搭建上耗费太多精力二是需要频繁切换不同技术栈项目的全栈工程师比如今天搞Node.jsPostgreSQL明天弄PythonRedis三是教学或培训场景讲师可以快速分发一套统一的环境给所有学员避免环境差异带来的教学干扰。它的核心价值就两个字省事。把繁琐的、重复的配置工作标准化、自动化让你能把宝贵的时间聚焦在写业务代码上。2. 核心架构与设计理念拆解2.1 为什么是“Lowkey”项目名叫“Lowkey”低调这个名字起得很有意思它直接反映了项目的设计哲学轻量、低调、不打扰。这不是一个像Kubernetes那样庞大而复杂的编排系统也不是一个全功能的PaaS平台。它的目标很明确就是在你的开发机上悄无声息地提供一套可靠的基础服务用完即走不留下一堆复杂的配置和残留进程。这种“低调”体现在几个方面。首先资源占用低。它通常使用最精简的官方镜像如Alpine Linux版本并且默认配置不会开启所有高级特性只保证核心服务能跑起来。其次侵入性低。它不要求你改变现有的项目结构或开发流程你原来的代码怎么放还是怎么放它只是在一旁提供运行时支持。最后学习成本低。你不需要去学习一套新的声明式语法或复杂的编排规则它的配置方式通常非常直观甚至是“约定大于配置”的。2.2 技术栈选型与组合逻辑lowkey的核心基石无疑是Docker和Docker Compose。选择它们几乎是必然的。Docker提供了隔离和一致性的基础而Docker Compose则完美解决了多服务定义和启动的问题。用docker-compose.yml一个文件就能描述整个服务栈的拓扑关系、依赖和配置这对于开发环境来说再合适不过了。在服务组件的选择上lowkey通常会包含一个“最小可行集合”。这个集合是经过大量实践筛选出来的覆盖了Web开发90%的场景Web服务器/应用服务器常用的是Nginx或Caddy。Nginx胜在强大和普及而Caddy则以自动HTTPS和配置简洁著称。lowkey可能会优先选择Caddy因为对于开发环境自动申请和管理本地HTTPS证书这个功能太香了能省去很多手动配置的麻烦。编程语言运行时这是一个可插拔的部分。可能会提供多个版本的Node.js、Python、PHP等镜像作为可选服务。关键设计在于这些运行时的容器通常会将本地项目代码目录通过Volume挂载到容器内实现代码的实时同步和热重载。数据库PostgreSQL和Redis几乎是标配。PostgreSQL作为功能强大的关系型数据库Redis作为高性能的缓存和键值存储。它们都会配置好默认的用户、密码和数据库数据通过Volume持久化到本地避免容器重启后数据丢失。辅助工具可能还包括MailHog用于捕获和查看本地发送的邮件代替真实的SMTP服务器、Adminer一个轻量级的数据库Web管理界面等。这些组件的版本选择也很有讲究。lowkey不会一味追求最新版而是会选择长期支持LTS版本或社区公认最稳定的版本。比如Node.js会选择当前的LTS版PostgreSQL可能会选择13或14这类经过充分验证的版本。稳定性在开发环境中优先级高于新特性。2.3 配置驱动与可扩展性设计lowkey的强大之处在于它的配置驱动模式。它不会把一切写死而是通过环境变量.env文件和可覆盖的Docker Compose配置来提供灵活性。一个典型的.env文件可能长这样# 项目基础配置 PROJECT_NAMEmyapp PROJECT_BASE_PATH./ # 服务端口映射避免与本地已有服务冲突 NGINX_HTTP_PORT8080 NGINX_HTTPS_PORT8443 POSTGRES_PORT54320 REDIS_PORT63790 # 数据库凭证默认值建议修改 POSTGRES_DBapp_db POSTGRES_USERapp_user POSTGRES_PASSWORDchange_this_strong_password你可以通过修改这个文件轻松改变服务的端口、数据库密码、项目路径等。而docker-compose.yml文件则会引用这些变量。更高级的用法是它可能支持Docker Compose Override功能。即有一个基础的docker-compose.yml然后你可以创建一个docker-compose.override.yml文件来添加或修改服务。例如基础文件只定义了PostgreSQL和Redis但你当前项目需要用到Elasticsearch你不需要修改基础文件方便后续更新只需在override文件中添加Elasticsearch的服务定义即可。这种设计保证了核心栈的稳定性和用户自定义的灵活性。注意.env文件中的密码等敏感信息严禁提交到版本控制系统如Git。务必确保.env在.gitignore文件中。一个最佳实践是在项目中提供一个.env.example文件列出所有需要的环境变量及其说明供协作者参考。3. 快速上手指南与核心操作解析3.1 环境准备与项目获取使用lowkey的前提是你的本地机器已经安装了Docker和Docker Compose。这是唯一强依赖。对于macOS和Windows用户直接安装 Docker Desktop 即可它包含了Docker引擎和Compose。Linux用户则需要分别安装Docker引擎和Compose插件。获取lowkey栈通常有两种方式直接克隆仓库如果项目是开源的你可以直接克隆它的Git仓库。git clone https://github.com/inceptionstack/lowkey.git my-dev-stack cd my-dev-stack作为项目子模块或模板更常见的用法是你将lowkey的配置目录比如一个包含docker-compose.yml和.env.example的目录复制到你自己的项目根目录下或者使用它作为新项目的初始化模板。我个人的习惯是为每个新项目创建一个docker或infra目录把lowkey的配置文件放进去。这样项目和环境配置就在一起管理起来更方便。3.2 配置文件解读与个性化定制拿到配置文件后别急着启动。花5分钟阅读并修改配置文件能避免后续很多问题。我们重点看两个文件docker-compose.yml解析 这个文件定义了所有服务。你会看到类似下面的服务定义以PostgreSQL为例services: postgres: image: postgres:15-alpine container_name: ${PROJECT_NAME}-postgres restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql ports: - ${POSTGRES_PORT}:5432 networks: - lowkey-network volumes: postgres_data: networks: lowkey-network: driver: bridgeimage: 指定了使用Alpine版本的PostgreSQL 15镜像非常轻量。container_name: 使用了环境变量PROJECT_NAME来生成唯一的容器名防止多个项目间冲突。volumes: 第一行将名为postgres_data的Docker卷挂载到容器内数据目录实现数据持久化。第二行是一个高级技巧将本地的./init.sql文件挂载到容器的初始化脚本目录这样容器首次启动时会自动执行这个SQL文件用于创建初始表结构或导入基础数据。networks: 所有服务都加入一个自定义的lowkey-network这样服务间可以通过服务名如postgres直接通信无需知道IP地址。.env文件定制 复制.env.example为.env然后根据你的项目修改。最关键的是修改默认密码和检查端口冲突。把POSTGRES_PASSWORD、REDIS_PASSWORD等改成你自己的强密码。然后检查NGINX_HTTP_PORT、POSTGRES_PORT等端口是否被你本地其他程序比如本地安装的MySQL、另一个Docker项目占用了。我一般会习惯性地把数据库端口从默认的5432改为54320、54321这类高位端口能减少很多冲突。3.3 启动、停止与日常操作配置好后操作就非常简单了。在包含docker-compose.yml的目录下启动整个栈docker-compose up -d加上-d参数让服务在后台运行。第一次运行会拉取镜像可能需要一点时间。查看运行状态docker-compose ps这个命令能清晰地列出所有服务的状态、端口映射和容器名称。查看某个服务的日志比如查看Nginx的访问日志或应用错误日志docker-compose logs -f nginx-f参数可以持续跟踪日志输出调试时非常有用。停止栈docker-compose down这会停止并移除所有容器但默认不会移除数据卷和网络。所以你的数据库数据在下次up时依然存在。彻底清理谨慎使用docker-compose down -v加上-v会同时移除所有关联的匿名数据卷注意在docker-compose.yml中具名定义的卷如postgres_data不会被这个命令删除。这个操作会清除所有数据库数据仅在需要完全重置环境时使用。进入容器执行命令docker-compose exec postgres psql -U app_user -d app_db这条命令直接进入postgres容器并用psql客户端以app_user用户连接到app_db数据库。对于Redis、应用容器等同样可以使用exec命令。实操心得我习惯在项目的README.md或package.json的scripts里封装这些命令。比如在package.json中加入docker:up: docker-compose up -d,docker:logs: docker-compose logs -f app。这样团队其他成员即使不熟悉Docker命令也能通过npm run docker:up轻松启动环境。4. 与开发工作流的深度集成4.1 多项目并行管理与隔离一个开发者同时维护多个项目是常态。lowkey如何避免项目间的干扰核心在于Docker Compose的项目名机制。默认情况下Compose会使用当前目录名作为项目名的前缀来命名容器、网络和卷。但这还不够可靠。更推荐的做法是在启动时通过-p参数或.env中的COMPOSE_PROJECT_NAME环境变量显式指定项目名。# 在项目A目录下 COMPOSE_PROJECT_NAMEproject-a docker-compose up -d # 在项目B目录下 COMPOSE_PROJECT_NAMEproject-b docker-compose up -d这样项目A的容器会叫project-a-postgres-1网络叫project-a_default项目B的则是project-b-postgres-1。两者完全隔离网络不通端口映射也可以设置成一样的因为绑定的是宿主机的不同端口或者通过容器网络隔离互不影响。4.2 代码实时同步与热重载开发效率的关键在于“修改代码立即看到效果”。lowkey通过Docker Volume实现代码同步。在你的docker-compose.yml中应用服务比如Node.js的配置里会有这样一段services: app: build: ./app # 或者 image: node:18 volumes: - ./app:/usr/src/app - /usr/src/app/node_modules # 匿名卷防止宿主机node_modules覆盖容器内的 working_dir: /usr/src/app command: npm run dev这行- ./app:/usr/src/app将宿主机的./app目录你的源代码挂载到容器的/usr/src/app。你在宿主机上用IDE修改代码改动会立刻反映到容器内。配合npm run dev或对应语言的开发服务器命令如flask run --reload,php -S就能实现应用的热重载。这里有一个经典的“坑”node_modules 问题。如果你将整个项目目录挂载进去宿主机上的node_modules可能是为你的宿主机操作系统安装的会覆盖容器内Linux环境安装的node_modules导致运行失败。解决方案就是上面示例中的第二行挂载- /usr/src/app/node_modules。这是一个匿名卷它“遮盖”了挂载的./app/node_modules目录使得容器可以使用自己内部安装的node_modules。4.3 数据库管理、数据持久化与初始化开发中经常需要重置数据库、导入测试数据或执行迁移。lowkey提供了几种优雅的方式数据持久化如前所述通过volumes将数据库数据目录挂载到Docker管理卷数据独立于容器生命周期。初始化脚本利用./init.sql:/docker-entrypoint-initdb.d/init.sql这样的挂载可以在数据库容器首次创建时自动建表、插入基础数据。这对于搭建标准化的测试环境非常有用。使用CLI工具通过docker-compose exec执行数据库命令。例如导出数据docker-compose exec postgres pg_dump -U app_user app_db backup.sql。导入数据cat backup.sql | docker-compose exec -T postgres psql -U app_user app_db。使用Adminer如果lowkey包含了Adminer服务你可以通过浏览器访问http://localhost:8080端口可能不同用图形界面管理数据库执行SQL、导入导出数据对不熟悉命令行的人更友好。注意事项数据库的Volume数据是长期存在的。当你修改了数据库的镜像版本比如从Postgres 13升级到14直接up可能会因为数据目录不兼容而启动失败。正确的升级流程是先备份数据 (pg_dump)然后docker-compose down -v删除旧数据卷修改docker-compose.yml中的镜像版本最后docker-compose up -d启动新版本并恢复数据。这是一个需要谨慎操作的过程。5. 高级技巧与自定义扩展5.1 集成测试与CI/CD流水线lowkey不仅用于本地开发还可以作为集成测试环境。你可以在GitLab CI、GitHub Actions等CI/CD流水线中使用docker-compose来启动一套完整的依赖服务然后运行你的测试套件。一个简单的.github/workflows/test.yml示例name: Run Tests on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Start services run: docker-compose up -d - name: Wait for services to be ready run: | # 写一个脚本检查数据库等是否就绪 ./scripts/wait-for-it.sh postgres:5432 -- echo Postgres is up - name: Run migrations run: docker-compose exec -T app npm run db:migrate - name: Run tests run: docker-compose exec -T app npm test - name: Stop services if: always() run: docker-compose down关键在于-T参数它禁止分配伪终端适合非交互式的CI环境。wait-for-it.sh是一个常用脚本用于等待某个TCP端口如数据库的5432就绪后再执行后续命令避免测试在服务未准备好时就开始。5.2 添加自定义服务假设你的项目需要用到Elasticsearch而基础的lowkey栈没有提供。你无需修改原始的docker-compose.yml只需创建一个docker-compose.override.yml文件version: 3.8 services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0 container_name: ${PROJECT_NAME}-elasticsearch environment: - discovery.typesingle-node - ES_JAVA_OPTS-Xms512m -Xmx512m - xpack.security.enabledfalse volumes: - elasticsearch_data:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - lowkey-network volumes: elasticsearch_data:然后运行docker-compose up -dCompose会自动合并基础配置和override配置启动包括Elasticsearch在内的所有服务。你的应用服务可以通过http://elasticsearch:9200这个主机名连接到它。5.3 性能调优与资源限制在本地开发我们通常不希望Docker容器吃掉所有内存和CPU。你可以在docker-compose.yml中为服务设置资源限制services: app: # ... 其他配置 deploy: resources: limits: cpus: 1.0 memory: 1G reservations: cpus: 0.5 memory: 512M这限制了app服务最多使用1个CPU核心和1GB内存并确保至少保留0.5个核心和512MB内存。这对于管理资源密集型的服务如Java应用非常有用可以防止你的开发机变得卡顿。另一个性能相关的技巧是对于像node_modules或vendor这样的大型依赖目录可以考虑使用Docker Build Kit的缓存机制或者将这些目录挂载为只读卷以减少宿主机和容器之间的IO开销。6. 常见问题排查与实战经验即使配置再完善在实际使用中还是会遇到各种问题。这里记录几个我踩过的坑和解决方案。6.1 端口冲突问题这是最常见的问题。错误信息通常是Bind for 0.0.0.0:5432 failed: port is already allocated。排查步骤确认占用者在宿主机上使用lsof -i :5432Linux/macOS或netstat -ano | findstr :5432Windows查看哪个进程占用了端口。解决方案方案A推荐修改.env文件中的端口映射比如将POSTGRES_PORT5432改为POSTGRES_PORT54320然后docker-compose down再up。方案B停止占用端口的本地进程如果是你不再需要的服务。方案C如果是另一个Docker容器占用了使用docker ps找到它然后停止或修改其映射。经验养成习惯在启动新项目前先检查.env中定义的端口是否空闲。可以写一个简单的脚本来自动检查。6.2 容器启动顺序与依赖问题你的应用服务 (app) 启动需要数据库 (postgres) 已经就绪。如果app启动太快连接数据库会失败。解决方案使用depends_on 健康检查最佳实践services: postgres: # ... 配置 healthcheck: test: [CMD-SHELL, pg_isready -U ${POSTGRES_USER}] interval: 10s timeout: 5s retries: 5 app: # ... 配置 depends_on: postgres: condition: service_healthy这样app会一直等到postgres的健康检查通过即数据库可连接后才启动。在应用启动脚本中增加重试逻辑如果lowkey没有配置健康检查你可以在应用的启动命令如npm start前加一个等待脚本比如使用wait-for-it.sh或dockerize工具。6.3 文件权限与挂载问题在Linux或macOS上有时容器内应用如Nginx、PHP-FPM会报“Permission denied”错误无法写入日志文件或缓存目录。这是因为容器内进程通常以非root用户运行的UID/GID与宿主机上文件的拥有者不匹配。解决方案统一UID/GID在Dockerfile中明确指定运行用户的UID并确保宿主机上挂载的目录对该UID有读写权限。例如在Dockerfile中RUN groupadd -g 1000 appuser useradd -u 1000 -g appuser -m appuser USER appuser然后在宿主机上确保挂载目录对UID 1000有权限。使用命名卷并管理权限对于需要持久化且由容器内进程写入的数据如上传的文件使用Docker命名卷并在容器启动的初始化脚本中正确设置卷内目录的权限。宿主机调整权限临时方案在开发环境有时图省事可以给宿主机目录设置宽松的权限如chmod -R 777 ./some_volume但这有安全风险不推荐用于生产相关目录。6.4 网络连通性问题服务间无法通过服务名互相访问比如app容器内无法ping postgres。排查步骤确保所有服务都在同一个自定义网络下如lowkey-network。检查docker-compose.yml中每个服务的networks配置。运行docker network inspect myproject_lowkey-network查看有哪些容器连接到了该网络以及它们的IP地址。进入应用容器进行调试docker-compose exec app sh然后在容器内尝试ping postgres、nslookup postgres或者使用curl http://postgres:5432如果数据库暴露了HTTP接口来测试连通性。通常原因网络定义错误或者服务名拼写错误。Docker Compose默认的服务名就是你在docker-compose.yml中定义的services下的键名如postgres。6.5 资源清理与磁盘空间回收Docker用久了会积累很多不用的镜像、停止的容器和悬空卷占用大量磁盘空间。定期清理命令# 删除所有已停止的容器 docker container prune -f # 删除所有未被任何容器使用的悬空镜像 docker image prune -f # 删除所有未被使用的卷谨慎确保数据已备份 docker volume prune -f # 一键清理所有未使用的资源容器、镜像、网络、卷可选构建缓存 docker system prune -af对于lowkey项目当你docker-compose down后容器被删除但关联的命名卷如postgres_data会保留。只有当你明确执行docker-compose down -v或docker volume prune时这些卷才会被删除数据随之丢失。我个人习惯是对于长期开发的项目数据卷一直保留。对于短期测试或演示项目在项目结束后运行docker-compose down -v进行彻底清理。同时每周或每月运行一次docker system prune来清理系统级的残留资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2596388.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…