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

SpringBoot微服务编写Dockerfile流程及问题汇总

背景

跟 Docker 磕了两天,将一个包含 N 个微服务的应用部署包改造,使其能够生成 Docker 镜像,并在 Docker 容器中运行。几年前玩过 Docker,隐约记得几个命令「Dockerfile 命令:黑卡饮料、山楂果费、哦SUV,机器学习」,项目中用不到,早忘光了。

开着 metaso,一路追问了两天,终于搞定了这个应用的 Dockerfile 编写,卡住的点:

  1. 多层级命令结构下,启动脚本中的 . 的相对路径问题,它相对的是 WORKDIR 而不是当前执行脚本路径。
  2. 如何查看容器中运行程序的 logs 日志?非 Docker 命令输出到控制台的日志,而是 SpringBoot 应用通过 logback 组件写入到文件系统的日志。
  3. SpringBoot 应用配置文件中的变量,如何通过 Docker 运行命令传递并接收?基于 Nacos Config 的应用,容器运行时需要传递 Nacos 的信息。
  4. 外部宿主机怎么访问容器中的 Web 应用?
  5. 包含验证码的应用使用了 sun.awt.X11FontManager 绘图异常,怎么调整 JDK镜像?
  6. 一个容器中启动 N 个微服务 VS 每个容器启动一个微服务?
  7. 保证容器运行时不出现 Exited 状态的关键语句 tail -f /dev/null

需求描述

我有一个应用目录 myApp,下面有一个 appA,包含 bin/start.sh bin/stop.sh,Dockerfile。appA 需要引用到 myApp 目录的文件,现在需要对这个目录打镜像包含父级目录,而Dockerfile 位于子目录 appA中,怎么实现呢?

向秘搜AI输入上面的提问,它梳理出应用的目录结构如下:

	myApp/├── commonJar├── bin/│   ├── startAll.sh│   └── stopAll.sh		├── appA/│   ├── bin/│   │   ├── start.sh│   │   └── stop.sh│   └── Dockerfile│   └── bootstrap.yml		│   └── appA.jar	├── appB/│   ├── bin/│   │   ├── start.sh│   │   └── stop.sh│   └── Dockerfile│   └── appB.jar├── appC/│   ├── bin/│   │   ├── start.sh│   │   └── stop.sh│   └── Dockerfile│   └── appC.jar		└── Dockerfile

要实现将 myApp 目录及其子目录 appA 打包成 Docker 镜像,并且 appA 中的 Dockerfile 需要引用 myApp 目录下的文件,可以按照以下步骤进行操作:

  1. 构建上下文:Docker 构建时需要一个构建上下文(context),这个上下文是一个目录,Dockerfile 中的所有 COPY 和 ADD 指令都会相对于这个目录来查找文件。因此,我们需要将 myApp 目录作为构建上下文。
  2. 指定 Dockerfile 路径:由于 Dockerfile 位于 appA 子目录中,我们需要使用 -f 参数来指定 Dockerfile 的路径。
  3. 编写 Dockerfile:在 Dockerfile 中,使用相对路径来引用 myApp 目录下的文件。

编写Dockerfile

单独为每个模块编写 Dockerfile,以模块 appA 为例,编写如下内容:

#use jdk
FROM eclipse-temurin:8-jre-alpine#work dir in docker.
RUN mkdir /opt/myApp
WORKDIR /opt#copy all content in myApp/* to /apps.
COPY . myApp#grant start.sh and stop.sh
RUN chmod +x /opt/myApp/appA/bin/start.sh#expose all ports for appA
EXPOSE 8080ENTRYPOINT ["/opt/myApp/appA/bin/start.sh"]
CMD ["in"]

调整 appA/bin/start.sh 启动脚本,之前定位 appA.jar 是通过相对路径,直接在 Linux 运行正常,使用 Docker 容器运行时,由于工作目录设置的是父级 myApp ,相对路径也是相对工作目录的,所以直接启动会出现 appA.jar 文件不存在。

此外,启动时由于服务内部使用日志框架将日志输出到 appA/logs 目录了,所以忽略了控制台日志,要想保证容器不退出,必须让启动脚本处于挂起状态,通过一个启动参数控制。

调整启动脚本如下:

#!/bin/sh
basePath=$(cd `dirname $0`; pwd)
echo "basepath is $basePath"#change dir to appA ,which is .. of start.sh path
cd $basePath/..# start appA.jar use nohup & and ignore console log
loadPath=../commonJar
nohup java -Xmx512m -Dloader.path=$loadPath -jar -Dlogging.config=./logback-spring.xml  appA.jar >/dev/null 2>&1 &#hold on if has parameter 
if [ -n "$1" ]; thenecho '$1 is not empty, holding on for container'tail -f /dev/null
fi

此外,应用的 Nacos 参数需要容器通过设置环境变量的方式接收,因此修改应用的配置文件 bootstrap.yml ,使用环境变量接收:

spring:cloud:nacos:# nacos 服务器地址server-addr: ${address}# nacos 配置中心config:enabled: trueusername: ${username}password: ${password}# 引用的配置文件所属的命名空间,public时必须注掉,非public可以放开并修改为目标名称namespace: ${namespace}

这就编写好了模块 appA 的 Dockerfile 文件了,进入根目录 myApp 下依次创建镜像、运行容器、停止容器、删除容器、删除镜像。启动 DockerDesktop,

第一步,进入应用根目录 cd /xxx/myApp

第二步,运行构建命令:docker build -t appa -f appA/Dockerfile . 。构建完成后,执行 docker images 查看镜像:
在这里插入图片描述
第三步,执行容器启动:docker run -d -e address=IP:port -e username=xxx -e password=xxx -e namespace=nonPublic -p 8080:8080 -v /Applications/dockerlogs:/opt/myApp/appA/logs --name appa appa
等待容器启动后,使用 docker ps -a 查看容器状态,正常是 Up :
在这里插入图片描述
第四步,停止容器:docker stop d8ec9fbf8f49
在这里插入图片描述

第五步,删除容器:docker rm d8ec9fbf8f49,只能针对 Exited 状态的容器进行删除。

第六步,删除镜像:docker rmi 616b785f371e,只能针对没有容器运行的镜像进行删除。

Docker 操作汇总

针对每个应用提供一个 docker 操作脚本,方便操作,汇总 docker 脚本如下

  1. 根目录下创建镜像:docker build -t myapp .,针对当前文件目录下的 Dockerfile进行编译,且镜像名称必须小写
  2. 在父级别目录中对子模块构建:docker build -t appa -f appA/Dockerfile .
  3. 后台进程方式运行容器:docker run -d -e address=IP:port -e username=xxx -e password=xxx -e namespace=nonPublic -p 8080:8080 -v /Applications/dockerlogs:/opt/myApp/appA/logs --name appa appa ,容器环境变量、挂载日志文件,开放宿主机端口和容器端口一致。
  4. 查看容器:docker ps -a
  5. 删除容器:docker rm containId
  6. 删除镜像:docker rmi imageId
  7. 查看镜像:docker images
  8. 查看日志:docker logs appa【容器名称】仅shell 执行时的控制台日志
  9. 针对运行状态的容器,可以打印容器中日志目录下的文件:docker exec -it containId /opt/myApp/appA/logs/a.log
    9存储镜像: docker save -o appA.tar appA:latest

启示录

第一点,纠结一个问题 「一个容器中启动 N 个微服务 VS 每个容器启动一个微服务?」根据 Docker容器的设计思想:

  1. 一次构建,到处运行"的可移植性
  2. 轻量高效的资源利用
  3. 微服务友好的架构哲学,单一职责原则:每个Container仅运行一个主进程(如Nginx/MySQL),通过组合多个Container完成复杂应用,天然契合微服务拆分。
  4. 开发即生产的生命周期管理
  5. 开放生态的扩展性

比较好的实践方式是一个微服务一个镜像,独立容器启动。那么之前的部署方式一台服务器上三个服务运行的方式就不可行了。但是如果硬是这么实践,也是没问题的吧,毕竟通过瘦身包方式部署的,微服务共用了通用 jar 包。

一个容器里面运行 N 个微服务的 Dockerfile 文件就编写在根目录 myApp 中,然后逐次调用子模块的 start.sh 脚本进行启动,只用对根目录的应用打一个镜像就可以了。小公司的单体多模块的应用,就没必要打 N 个镜像了。

但是需要注意在一个容器中同时启动的微服务的个数,如果过多的话,可能 Docker 容器运行有资源约束,可能有些服务启动会失败。

第二点,JDK 选择上面,本来所有模块统一用轻量级 eclipse-temurin:8-jre-alpine 可以的,单有一个包含验证码的模块,这个精简镜像存在字体缺失问题,所以对该模块使用 openjdk:17-jdk 镜像。

最后一点,docker run 命令的参数 -v 必须在 --name 之前。用了 Docker 容器管理后,程序就不需要提供 stop 脚本了,直接通过容器的 stop 命令就可以停止应用。

相关文章:

SpringBoot微服务编写Dockerfile流程及问题汇总

背景 跟 Docker 磕了两天,将一个包含 N 个微服务的应用部署包改造,使其能够生成 Docker 镜像,并在 Docker 容器中运行。几年前玩过 Docker,隐约记得几个命令「Dockerfile 命令:黑卡饮料、山楂果费、哦SUV,…...

PostgreSQL使用

一、PostgreSQL语法 PostgreSQL表、模式、库三者之间的关系 库 -> 模式 -> 表、视图、函数等等对象。 在postgresql的交互式终端psql中,“\”开头的命令称为元命令(类似mysql的show语句),用于快速管理数据库。 常见元命令&…...

现代化SQLite的构建之旅——解析开源项目Limbo

现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需…...

MySQL 主从复制搭建全流程:基于 Docker 与 Harbor 仓库

一、引言 在数据库管理中,MySQL 主从复制是一种非常重要的技术,它可以实现数据的备份、读写分离,减轻主数据库的压力。本文将详细介绍如何使用 Docker 和 Harbor 仓库来搭建 MySQL 主从复制环境,适合刚接触数据库和 Docker 的新手…...

网页表格转换为markdown

网页表格到Markdown:一键转换,复制即用! 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或论坛中使用。然而,手动转换不仅耗时,还容易…...

MySQL字符串拼接方法全解析

目录 常用字符串处理函数 方法一:CONCAT基础拼接 方法二:CONCAT_WS带分隔符拼接 方法三:GROUP_CONCAT分组拼接 方法四:算术运算符拼接(仅限数字) 常用字符串处理函数 方法一:CONCAT基础拼接…...

零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL

在日常开发中,可能会遇到从 MySQL 迁移到 PostgreSQL 的需求。你也许是: 正在准备从传统架构转向云原生;想使用 PostgreSQL 更强的事务与 JSON 支持;想统一团队数据库技术栈;纯粹为了尝试学习不同的数据库系统。 别担…...

影刀Fun叉鸟-2048

文章目录 仅为自动化演示,实际2048判定逻辑需要更加严谨 参考代码 # 使用提醒: # 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能 # 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能 # 3. 当此模块作…...

uni-app(2):页面

1 页面简介 uni-app项目中,一个页面就是一个符合Vue SFC规范的 vue 文件。 在 uni-app js 引擎版中,后缀名是.vue文件或.nvue文件。 这些页面均全平台支持,差异在于当 uni-app 发行到App平台时,.vue文件会使用webview进行渲染&…...

【spring】spring学习系列之十一:spring的事件监听

系列文章目录 文章目录 系列文章目录前言一、使用二、整体流程三、EventListenerMethodProcessor和DefaultEventListenerFactory1.EventListenerMethodProcessor2.DefaultEventListenerFactory3.ApplicationListenerDetector4.initApplicationEventMulticaster5.registerListen…...

代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)

图论part03 孤岛的总面积 代码随想录链接 题目链接 视频讲解链接 思路:既然某个网格在边界上的岛屿不是孤岛,那么就把非 孤岛的所有岛屿变成海洋,最后再次统计还剩余的岛屿占据的网格总数即可。 dfs: import java.util.Scanner…...

AI人工智能——Matplotlib绘制各种数据可视化图表的基础方法

一、绘制图像基础 import matplotlib.pyplot as plt# 1、创建画布 plt.figure(figsize(20, 8), dpi100) # 2、绘制图像 x [1, 2, 3, 4, 5, 6] y [3, 5, 4, 3, 6, 1] plt.plot(x, y) # 3、显示图像 plt.show() 二、图像保存 import matplotlib.pyplot as plt# 1、创建画布 p…...

亚马逊AWS跑不动了?

5月2日,亚马逊公布了2025年第一季度的财报。财报数据显示,云计算业务增速放缓以及第二季度的指引低于预期。事实上,这并不是亚马逊AWS第一次增速放缓。 亚马逊AWS作为全球第一大云计算服务公司,这些年跟微软云、谷歌云等其他云计…...

PyTorch中cdist和sum函数使用详解

torch.cdist 是 PyTorch 中用于计算**两个张量之间的成对距离(pairwise distance)**的函数,常用于点云处理、图神经网络、相似性度量等场景。 基本语法 torch.cdist(x1, x2, p2.0)参数说明: 参数说明x1一个形状为 [B, M, D] 或 …...

PyTorch的基本操作

前言 为了方便大家学习,我整理了PyTorch全套学习资料,包含配套教程讲义和源码 除此之外还有100G人工智能学习资料 包含数学与Python编程基础、深度学习机器学习入门到实战,计算机视觉自然语言处理大模型资料合集,不仅有配套教程…...

分类算法 Kmeans、KNN、Meanshift 实战

任务 1、采用 Kmeans 算法实现 2D 数据自动聚类,预测 V180,V260 数据类别; 2、计算预测准确率,完成结果矫正 3、采用 KNN、Meanshift 算法,重复步骤 1-2 代码工具:jupyter notebook 视频资料 无监督学习&#xff…...

aws平台s3存储桶夸域问题处理

当我们收到开发反馈s3存在跨域问题 解决步骤: 配置 S3 存储桶的 CORS 设置: 登录到 AWS 管理控制台。转到 S3 服务。选择你存储文件的 存储桶。点击 权限 标签页。在 跨域资源共享(CORS)配置 部分,点击 编辑。 登陆…...

在Windows上安装Pygame 2.1.3:解决常见问题

在Windows系统上安装Pygame 2.1.3时,可能会遇到各种问题,例如网络问题或依赖安装失败。本文将详细介绍如何在Windows上成功安装Pygame 2.1.3,并解决常见的安装问题。 1. 前提条件 在开始安装之前,确保你的系统中已经安装了Pytho…...

linux中安装jdk(Java环境),tomcat

安装时候选择 tomcat 软件版本要与程序开发使用的版本一致。jdk 版本要进行与 tomcat 保持一致。 1. 系统环境说明 [root@bogon ~]# getenforce Disabled [root@bogon ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon …...

DeepSeek源码解构:从MoE架构到MLA的工程化实现

文章目录 **一、代码结构全景:从模型定义到分布式训练****二、MoE架构:动态路由与稀疏激活的工程化实践****1. 专家路由机制(带负载均衡)****数学原理:负载均衡损失推导** **三、MLA注意力机制:低秩压缩与解…...

国产linux系统(银河麒麟,统信uos)使用 PageOffice实现PDF文件加盖印章和签字功能

PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯(Mips、LoogArch)芯片架构。 PageOffice支持…...

第四十三节:人脸检测与识别-人脸识别基础 (Eigenfaces, Fisherfaces, LBPH)

引言 人脸识别技术是计算机视觉领域最具应用价值的方向之一,广泛应用于安防监控、身份认证、人机交互等领域。本文将通过OpenCV框架,深入解析人脸检测与识别的核心算法(Eigenfaces/Fisherfaces/LBPH),并提供完整的代码实现。 第一部分:人脸检测基础 1.1 人脸检测原理 …...

面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)

全部内容梳理 目标检测的两个任务: 预测标签 边界框 语义分割 实力分割 一个是类别 一个是实例级别 分类任务把每个图像当作一张图片看待 所有解决方法是先生成候选区域 再进行分类 置信度: 包括对类别和边界框预测的自信程度 输出分类和IOU分数的…...

物联网相关词汇

物联网(英文:Internet of Things,缩写:IoT) specs 英[speks] 美[speks] 规格说明 topology 英[təpɒlədʒɪ] 拓扑结构 vertical 美 [ˈvɜrtɪk(ə)l] 英 [ˈvɜː(r)tɪk(ə)l] n.垂直线;垂直位…...

【net6】一文跑通前后端以及数据库,简单的天气系统管理(保姆入门)

一、前言 使用Vue3为前端,.net6为后端,连接postgreSQL数据库,连通前后端与数据库,实现最基础的天气管理系统的增删改查。 二、内容 目录 一、前言 二、内容 2.1 后端部分 2.1.1 在VS里面使用此模板创建项目 2.1.2 安装下列…...

宝塔安装的 MySQL 无法连接的情况及解决方案

宝塔安装的 MySQL 无法连接的情况及解决方案 宝塔面板是一款流行的服务器管理工具,其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误:“1130 - Host is not allowed to connect” 和 “1045 - Access denied”&…...

【iOS】分类、扩展、关联对象

分类、扩展、关联对象 前言分类扩展扩展和分类的区别关联对象key的几种用法流程 总结 前言 最近的学习中笔者发现自己对于分类、扩展相关知识并不是很熟悉,刚好看源码类的加载过程中发现有类扩展与关联对象详解。本篇我们来探索一下这部分相关知识,首先…...

计算机网络学习(一)—— OSI vs TCP/IP网络模型

一、OSI模型(开放系统互联参考模型) OSI(Open Systems Interconnection)模型由ISO(国际标准化组织)在1984年提出,用于标准化网络通信,它将网络通信分为七个层次: 层级名…...

【MySQL成神之路】MySQL查询用法总结

MySQL查询语句全面指南 一、基础查询语句 MySQL中select的基本语法形式 select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属性名[asc|desc]] [limit <offset>,row count] 说明&#xff1a; where子句&…...

攻防世界——Web题 fakebook

首先测试网站的功能&#xff0c;当我注册一个账号时&#xff0c;发现这里的链接&#xff1a; 点进去看到URL&#xff1a; 感觉no这个地方可以尝试一下sql注入 推测应该是数字型注入 发现果然可以进行sql注入&#xff0c; 最终测得列数应该是4列&#xff0c;但当我尝试sql注入…...

【Java微服务组件】异步通信P2—Kafka与消息

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。 目录 引言Kafka与消息生产者发送消息到Kafka批处理发送设计消息的幂等信息确保消息送达acks配置…...

AI数字人一体机和智慧屏方案:开启智能交互新纪元

在当今这个信息化飞速发展的时代&#xff0c;AI技术正以前所未有的速度改变着我们的生活方式和工作模式。特别是在人机交互领域&#xff0c;AI数字人的出现不仅极大地丰富了用户体验&#xff0c;也为各行各业提供了前所未有的创新解决方案。本文将重点介绍由广州深声科技有限公…...

10-码蹄集600题基础python篇

题目如上&#xff1a; 这题就是ASCII的转换&#xff0c;直接使用ord就可以 下面是代码&#xff1a; def main():#code here# a1,a2input().split(",")# print(f"The ASCII code of {a1} is {ord(a1)}")# print(f"The ASCII code of {a2} is {ord(a2…...

给几张图片和一段文字,怎么制作成带有语音的视频---php

想用PHP将图片和文字转换成带有语音的视频&#xff0c;想做自动化的视频生成&#xff0c;比如用于广告、演示或者其他需要多媒体处理的场景。 接下来考虑PHP本身的能力。PHP主要是用于服务器端的脚本语言&#xff0c;不太擅长处理多媒体内容&#xff0c;比如视频和语音合成。所…...

vue3中RouterView配合KeepAlive实现组件缓存

KeepAlive组件缓存 为什么需要组件缓存代码展示缓存效果为什么不用v-if 为什么需要组件缓存 业务需求&#xff1a;一般是列表页面通过路由跳转到详情页&#xff0c;跳转回来时&#xff0c;需要列表页面展示上次展示的内容 代码展示 App.vue入口 <script setup lang"…...

NIFI的处理器:ExecuteGroovyScript 2.4.0

ExecuteGroovyScript是常用的处理器之一&#xff0c;用于执行GroovyScript脚本。该脚本负责处理传入的流文件&#xff08;例如传输到SUCCESS或删除&#xff09;以及由该脚本创建的任何流文件。如果处理不完整或不正确&#xff0c;会话将被回滚。 属性值-失败处理策略 Failure …...

安全可控的AI底座:灯塔大模型应用开发平台全面实现国产信创兼容适配认证

国产信创产品兼容适配认证是为了支持和推动国产信息技术产品和服务的发展而设立的一种质量标准和管理体系。适配认证旨在确保相关产品在安全性、可靠性、兼容性等方面达到一定的标准&#xff0c;以满足政府和关键行业对信息安全和自主可控的需求。 北京中烟创新科技有限公司&a…...

.NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)

一&#xff1a;背景 1. 讲故事 开局一张表&#xff0c;故事全靠编&#xff0c;为了能够承上启下&#xff0c;先把参数列表放出来。 参数名说明__instance访问非静态方法的实例&#xff08;类似 this&#xff09;。__result获取/修改返回值&#xff0c;要想修改用 ref。__res…...

Spring Boot 登录实现:JWT 与 Session 全面对比与实战讲解

Spring Boot 登录实现&#xff1a;JWT 与 Session 全面对比与实战讲解 2025.5.21-23:11今天在学习黑马点评时突然发现用的是与苍穹外卖jwt不一样的登录方式-Session&#xff0c;于是就想记录一下这两种方式有什么不同 在实际开发中&#xff0c;登录认证是后端最基础也是最重要…...

vscode离线安装组件工具vsix

1.外网下载vsix 网址为&#xff1a;Open VSX Registry 2.输入需要下载的组件 3.下载组件 4.安装 5.选择安装文件 6.安装完成...

Vue大数据量前端性能优化策略

文章目录 前言Vue大数据量前端性能优化策略1. 虚拟列表的使用方式及优势2. 列表和图表的懒加载技术3. Web Worker 在图表数据预处理中的应用4. 图表渲染优化技巧5. 分批渲染技术实现方法&#xff08;如 requestIdleCallback&#xff09;6. 其他可行的 Vue 层优化策略 前言 Vue…...

Hass-Panel - 开源智能家居控制面板

文章目录 ▎项目介绍&#xff1a;预览图▎主要特性安装部署Docker方式 正式版Home Assistant Addon方式详细安装方式1. Home Assistant 插件安装&#xff08;推荐&#xff09;2. Docker 安装命令功能说明 &#xff1a;3. Docker Compose 安装升级说明Docker Compose 版本升级 功…...

iPaaS集成平台技术选型关注哪些指标?

在数字化转型进程中&#xff0c;企业系统间的数据孤岛问题日益凸显。根据IDC调研&#xff0c;85%的IT决策者将“系统集成效率”列为业务创新的关键瓶颈。iPaaS&#xff08;集成平台即服务&#xff09;凭借其敏捷性、低代码特性和智能化能力&#xff0c;已成为企业构建数字生态的…...

JavaScript性能优化实战(14):跨端JavaScript性能优化

在当今多端开发的时代,JavaScript已经突破了浏览器的界限,广泛应用于移动应用、桌面应用、小程序等各类环境。然而,不同平台的运行时环境存在差异,为JavaScript性能优化带来了新的挑战和思考维度。 目录 React Native性能优化最佳实践Electron应用性能优化策略混合应用中J…...

多通道经颅直流电刺激器产品及解决方案特色解析

前记 团队在多通道经颅直流电刺激这个技术方向&#xff0c;一路深耕。在服务了不少客户之后&#xff0c;为了方便后续的产品和方案推广。我们弄出来了产品和方案两种形态。标准产品是为了给用户演示以及一些常规的实验使用。方案则是为了满足不同方向的科研用户的需求。这两者相…...

Quasar 使用 Pinia 进行状态管理

官方文档&#xff1a;使用 Pinia 进行状态管理 |Quasar 框架 视频教程&#xff1a;quasar框架store-状态管理库pinia介绍_哔哩哔哩_bilibili 使用 Quasar CLI 创建一个新的store quasar new store date --format jsPinia存储模板详解解 基本结构解析 import { defineStore,…...

计算机网络--第一章(下)

1.计算机网络的分层结构 1.1 分层结构 网络体系结构描述的是&#xff0c;计算机网络有几层&#xff0c;有什么功能&#xff0c;用的什么协议。 水平方向的关系&#xff0c; 协议&#xff0c;说的是对等实体间通信需要遵守的规则。用于约束&#xff0c;这个约束的方向是水平的。…...

Veo 3 可以生成视频,并附带配乐

谷歌最新的视频生成 AI 模型 Veo 3 可以创建与其生成的剪辑相配的音频。 周二&#xff0c;在谷歌 I/O 2025 开发者大会上&#xff0c;谷歌发布了 Veo 3。该公司声称&#xff0c;这款产品可以生成音效、背景噪音&#xff0c;甚至对话&#xff0c;为其制作的视频增添配乐。谷歌表…...

数据结构核心知识总结:从基础到应用

数据结构核心知识总结&#xff1a;从基础到应用 数据结构是计算机科学中组织和存储数据的核心方式&#xff0c;直接影响程序的性能和资源利用率。本文系统梳理常见数据结构及其应用场景&#xff0c;帮助读者构建清晰的知识体系。 一、数据结构基础概念 数据结构是数据元素之间…...

Flannel后端为UDP模式下,分析数据包的发送方式(二)

发往 10.244.2.5 的数据包最终会经过物理网卡 enp0s3&#xff0c;尽管路由表直接指定通过 flannel.1 发出。以下以 Markdown 格式详细解释为什么会经过 enp0s3&#xff0c;结合 Kubernetes 和 Flannel UDP 模式的背景。 问题分析 在 Kubernetes 环境中&#xff0c;使用 Flanne…...