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

(十一) Docker compose 部署 Mysql 和 其它容器

文章目录

  • 1、前言
    • 1.1、部署 MySQL 容器的 3 种类型
    • 1.2、M2芯片类型问题
  • 2、具体实现
    • 2.1、单独部署 mysql 供宿主机访问
      • 2.1.1、文件夹结构
      • 2.1.2、docker-compose.yml 内容
      • 2.1.3、运行
    • 2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)
      • 2.2.1、文件夹结构
      • 2.2.2、docker-compose.yml 内容
      • 2.2.3、运行
      • 2.2.4、 客户端配置
    • 2.3、使用一个 compose 文件,同时部署 mysql 和其它容器(以 apollo 为例)
      • 2.3.1、文件夹结构
      • 2.3.2、compose 文件内容
      • 2.3.3、运行
      • 2.3.4、 客户端配置
  • 3、附录
    • 3.1、调试可能用到的命令
    • 3.2、apollo 配置参考

1、前言

1.1、部署 MySQL 容器的 3 种类型

在容器中部署 Mysql 会有三种网络分布类型:

  • 单独部署 mysql 容器,宿主机通过端口映射访问 容器 mysql

  • 使用两个 compose 文件,分别部署 mysql 容器和其它容器(比如 apollo 的 config-service、admin-service、portal)

  • 使用一个 compose 文件,同时部署 mysql 和其它容器(比如 apollo 的 config-service、admin-service、portal),其它容器通过mysql容器名:容器端口访问 mysql,此时相当于一次部署了 4 个容器

1.2、M2芯片类型问题

容器来自镜像,而镜像和芯片架构有关。
部署完容器之后,又会涉及一些工具软件(比如 workbench)的适配问题。

一般而言,使用 compose 直接使用 镜像名:latest 即可,但是使用 Mysql,为了寻求 M2芯片&mysql镜像&workbench 适配,我们需要增加一些特殊配置。

  • 指定架构类型
    platform: linux/amd64 #x86_64 系统(大多数桌面和服务器)
    platform: linux/arm64 #ARM64 系统(例如 Apple M1/M2
    platform: linux/arm/v7 #32 位 ARM 系统(例如旧版 Raspberry Pi)

  • 指定 镜像版本

image: mysql:8.0.30

2、具体实现

2.1、单独部署 mysql 供宿主机访问

2.1.1、文件夹结构

sql 可以放置 xxx.sql 脚本,不过建议容器启动后,再手动执行。
data 为宿主机挂载容器的数据目录。
在这里插入图片描述

2.1.2、docker-compose.yml 内容

# 如果需要自定义共享网络 
# docker network create bestcxx-network
# 自定义工程名称,默认文件夹名,影响注册网络名,AAA_网络名,或者 docker-compose -p diy_project_name up 启动时定义
# 外部连接时,需要 &allowPublicKeyRetrieval=true 以支持明文连接数据库
version: '3.8'services:mysql-db-withdata:#platform:  linux/arm64 #非 arm 架构芯片可以注释本行image: mysql:8.0.30 #M2 版本 8.0.30,目前最新 workbench 最高到 8  #非 arm 架构芯片可以写 image: mysql:latestcontainer_name: mysql-db-withdatarestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: rootadminMYSQL_DATABASE: apollodbMYSQL_USER: userapolloMYSQL_PASSWORD: userapollovolumes:#- ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql- ./data:/var/lib/mysql # 在宿主机持久化数据networks:bestcxx-network:
networks:bestcxx-network:

2.1.3、运行

在 Mysql 文件夹目录下执行

# docker-compose stop
docker-compose up -d

2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)

最终容器运行形态展示
在这里插入图片描述

这里需要为两个容器创建一个共同的容器网络。
默认情况下,每启动一个容器,会自动创建一个 文件夹_网络名 的容器网络,当多个 compose 文件启动容器时,可以在命令行加入配置,使得不同的 compose 启动的多个容器使用共同的容器名、内部定义相同的网络名——最终共享同一个容器网络。

  • 创建一个容器网络,网络名为 bestcxx-network
docker network create bestcxx-network
  • compose 使用指定工程名,实际出册网络为 工程名_compose设置的网络名
# 默认会以文件夹作为工程名 docker-compose up -d
docker-compose -p diy_project_name up # 以 diy_project_name 作为工程名
  • compose 设定使用外部已有网络

如下,使用名为 bestcxx-network 的外部网络

networks:bestcxx-network:external: true
  • 查看容器网络列表
docker network ls
  • 删除容器网络
docker network rm  mysql_bestcxx-network

2.2.1、文件夹结构

  • mysql
    sql 可以放置 xxx.sql 脚本,不过建议容器启动后,再手动执行。
    data 为宿主机挂载容器的数据目录。
    在这里插入图片描述
  • apollo
    在这里插入图片描述

2.2.2、docker-compose.yml 内容

  • mysql
# 如果需要自定义共享网络 
# docker network create bestcxx-network
# 自定义工程名称,默认文件夹名,影响注册网络名,AAA_网络名,或者 docker-compose -p diy_project_name up 启动时定义
# 外部连接时,需要 &allowPublicKeyRetrieval=true 以支持明文连接数据库
version: '3.8'services:mysql-db-withdata:#platform:  linux/arm64 #非 arm 架构芯片可以注释本行image: mysql:8.0.30 #M2 版本 8.0.30,目前最新 workbench 最高到 8  #非 arm 架构芯片可以写 image: mysql:latestcontainer_name: mysql-db-withdatarestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: rootadminMYSQL_DATABASE: apollodbMYSQL_USER: userapolloMYSQL_PASSWORD: userapollovolumes:#- ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql- ./data:/var/lib/mysql # 在宿主机持久化数据networks:bestcxx-network:
networks:bestcxx-network:external: true
  • apollo

version: '3.6'
services:config-service:image: apolloconfig/apollo-configservicecontainer_name: apollo-config-servicehostname: config-serviceenvironment:#- SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true- SPRING_DATASOURCE_USERNAME=userapollo- SPRING_DATASOURCE_PASSWORD=userapollo- JAVA_OPTS=-Deureka.instance.homePageUrl=http://127.0.0.1:8080ports:- 8080:8080 # 宿主机端口 : 容器端口networks:bestcxx-network:admin-service:image: apolloconfig/apollo-adminservicecontainer_name: apollo-admin-servicehostname: admin-serviceenvironment:#- SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true- SPRING_DATASOURCE_USERNAME=userapollo- SPRING_DATASOURCE_PASSWORD=userapollo- CONFIGSERVICE_URL=http://config-service:8080- JAVA_OPTS=-Deureka.instance.homePageUrl=http://admin-service:8090ports:- 8090:8090depends_on:- config-servicenetworks:bestcxx-network:portal:image: apolloconfig/apollo-portalcontainer_name: apollo-portalhostname: portalenvironment:#- SPRING_DATASOURCE_URL=jdbc:mysql://host.docker.internal:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true- SPRING_DATASOURCE_USERNAME=userapollo- SPRING_DATASOURCE_PASSWORD=userapollo- APOLLO_PORTAL_ENVS=dev- DEV_META=http://config-service:8080- JAVA_OPTS=-Deureka.instance.homePageUrl=http://portal:8070ports:- 8070:8070depends_on:- config-service- admin-servicenetworks:bestcxx-network:networks:bestcxx-network:external: true

2.2.3、运行

  • 创建网络
docker network create bestcxx-network

在这里插入图片描述

  • 以指定工程名方式启动 mysql
    在 Mysql 文件夹下执行
docker-compose -p diy_project_name up

然后进行操作(建议使用 workbench)

#给用户 userapollo 授权-可以全部授权CREATEUSER'userapollo'@'%' IDENTIFIED BY'userapollo';GRANTALL PRIVILEGES ON ApolloConfigDB.*TO'userapollo'@'%';GRANTALL PRIVILEGES ON ApolloPortalDB.*TO'userapollo'@'%';FLUSH PRIVILEGES;#创建数据库:
CREATE DATABASE ApolloConfigDB;
CREATE DATABASE ApolloPortalDB;#执行 apollo 官方建表&初始化 sql
https://github.com/apolloconfig/apollo/tree/master/scripts/sql# 执行开发环境适配 sql
UPDATE `ApolloConfigDB`.`ServerConfig` SET `Value` = 'http://config-service:8080/eureka/' WHERE (`Id` = '1');
UPDATE `ApolloPortalDB`.`ServerConfig` SET `Value` = '{\"dev\":\"http://config-service:8080\"}' WHERE (`Id` = '8');
  • 以指定工程名方式启动 apollo
    在 Apollo 文件夹下执行
docker-compose -p diy_project_name up

2.2.4、 客户端配置

{"apollo": {"AppId": "helloabp","Env": "dev","Cluster": "default","MetaServer": "http://localhost:8080","Namespaces": ["hello.web.json"]},"ClientId": "bestcxxLocal"
}

2.3、使用一个 compose 文件,同时部署 mysql 和其它容器(以 apollo 为例)

  • 最终形态
    在这里插入图片描述
  • 容器网络
    在这里插入图片描述

2.3.1、文件夹结构

sql 可以放置 xxx.sql 脚本,不过建议容器启动后,再手动执行。
data 为宿主机挂载容器的数据目录。
在这里插入图片描述

2.3.2、compose 文件内容

  • ApolloMysql
version: '3.6'services:mysql-db-withdata:#platform:  linux/arm64 #非 arm 架构芯片可以注释本行image: mysql:8.0.30 #M2 版本 8.0.30,目前最新 workbench 最高到 8  #非 arm 架构芯片可以写 image: mysql:latestcontainer_name: mysql-db-withdatarestart: alwaysports:- "13306:3306"environment:MYSQL_ROOT_PASSWORD: rootadminMYSQL_DATABASE: apollodbMYSQL_USER: userapolloMYSQL_PASSWORD: userapollovolumes:- ./sql:/docker-entrypoint-initdb.d # 自动加载运行 /sql 目录下的脚本 xxx.sql- ./data:/var/lib/mysql # 在宿主机持久化数据networks:apollo-network:config-service:image: apolloconfig/apollo-configservicecontainer_name: apollo-config-servicehostname: config-serviceenvironment:- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true- SPRING_DATASOURCE_USERNAME=userapollo- SPRING_DATASOURCE_PASSWORD=userapollo- JAVA_OPTS=-Deureka.instance.homePageUrl=http://127.0.0.1:8080 #配置为 http://config-service:8080 可避免 http://127.0.0.1:8070/system_info.html check 报错,但是需要额外 /etc/hosts 配置ports:- 8080:8080 # 宿主机端口 : 容器端口networks:apollo-network:admin-service:image: apolloconfig/apollo-adminservicecontainer_name: apollo-admin-servicehostname: admin-serviceenvironment:- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true- SPRING_DATASOURCE_USERNAME=userapollo- SPRING_DATASOURCE_PASSWORD=userapollo- CONFIGSERVICE_URL=http://config-service:8080- JAVA_OPTS=-Deureka.instance.homePageUrl=http://admin-service:8090ports:- 8090:8090depends_on:- config-servicenetworks:apollo-network:portal:image: apolloconfig/apollo-portalcontainer_name: apollo-portalhostname: portalenvironment:- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db-withdata:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true- SPRING_DATASOURCE_USERNAME=userapollo- SPRING_DATASOURCE_PASSWORD=userapollo- APOLLO_PORTAL_ENVS=dev- DEV_META=http://config-service:8080- JAVA_OPTS=-Deureka.instance.homePageUrl=http://portal:8070ports:- 8070:8070depends_on:- config-service- admin-servicenetworks:apollo-network:networks:apollo-network:driver: bridge

2.3.3、运行

  • 以指定工程名方式启动 mysql
    在 ApolloMysql 文件夹下执行
docker-compose up -d

此时数据库启动,其余三个服务启动失败

  • 然后进行操作(建议使用 workbench)
#给用户 userapollo 授权-可以全部授权
CREATEUSER'userapollo'@'%' IDENTIFIED BY'userapollo';GRANTALL PRIVILEGES ON ApolloConfigDB.*TO'userapollo'@'%';GRANTALL PRIVILEGES ON ApolloPortalDB.*TO'userapollo'@'%';FLUSH PRIVILEGES;#创建数据库:
CREATE DATABASE ApolloConfigDB;
CREATE DATABASE ApolloPortalDB;#执行 apollo 官方建表&初始化 sql
https://github.com/apolloconfig/apollo/tree/master/scripts/sql# 执行开发环境适配 sql
UPDATE `ApolloConfigDB`.`ServerConfig` SET `Value` = 'http://config-service:8080/eureka/' WHERE (`Id` = '1');
UPDATE `ApolloPortalDB`.`ServerConfig` SET `Value` = '{\"dev\":\"http://config-service:8080\"}' WHERE (`Id` = '8');
  • 然后依次启动 config-service、admin-service、portal
    portal 可能还会少量报错,这是因为初始化配置需要发布下

2.3.4、 客户端配置

{"apollo": {"AppId": "helloabp","Env": "dev","Cluster": "default","MetaServer": "http://localhost:8080","Namespaces": ["hello.web.json"]},"ClientId": "bestcxxLocal"
}

3、附录

3.1、调试可能用到的命令

docker-compose stop 
docker-compose up -d 

3.2、apollo 配置参考

{"MyApollo": {"Name": "bestcxx"}
}

相关文章:

(十一) Docker compose 部署 Mysql 和 其它容器

文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)2.2.1、文件…...

提高项目透明度:有效的跟踪软件

国内外主流的10款项目进度跟踪软件对比:PingCode、Worktile、Teambition、Tower、Asana、Trello、Jira、ClickUp、Notion、Liquid Planner。 在项目管理中,确保进度跟踪的准确性与效率是每位项目经理面临的主要挑战之一。选用合适的项目进度跟踪软件不仅…...

大模型生成人物关系思维导图的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

精通 mysqldumpslow:深度分析 MySQL 慢查询日志

引言 在数据库管理与优化的领域中,慢查询日志是识别性能瓶颈的金矿。mysqldumpslow 工具是挖掘这座金矿的利器,它帮助我们分析 MySQL 慢查询日志并提取关键信息。本文将详细介绍 mysqldumpslow 的核心选项,并通过实例展示如何使用这些选项来…...

C# Winform之propertyGrid控件分组后排序功能

在 WinForms 的 PropertyGrid 控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid 控件会根据 [Category] 和 [DisplayName] 属性装饰器对属性进行分组和…...

Java基础(十九):集合框架

目录 一、Java集合框架体系二、Collection接口及方法1、添加2、判断3、删除4、其它 三、Iterator(迭代器)接口1、Iterator接口2、迭代器的执行原理3、foreach循环 四、Collection子接口1:List1、List接口特点2、List接口方法3、List接口主要实现类:Array…...

execute_script与JS

JavaScript简称JS,有的测试场景需要JS脚本辅助完成Selenium无法做到的测试工作。webdriver提供了execute_script()方法调用JS代码。execute_script()可以在当前窗口/框架中执行JS脚本,并返回结果。可以使用它操作DOM元素、获取元素属性、执行异步操作等。…...

访问 Postman OAuth 2.0 授权的最佳实践

OAuth 2.0 代表了 web 安全协议的发展,便于在多个平台上进行授权服务,同时避免暴露用户凭据。它提供了一种安全的方式,让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端,支持 …...

《BASeg: Boundary aware semantic segmentation for autonomous driving》论文解读

期刊:Neural Networks | Journal | ScienceDirect.com by Elsevier 年份:2023 代码:https://github.com/Lature-Yang/BASeg 摘要 语义分割是自动驾驶领域街道理解任务的重要组成部分。现有的各种方法要么专注于通过聚合全局或多尺度上下文…...

高效利用iCloud指南

高效利用iCloud的指南主要包括以下几个方面: 一、注册与登录 创建Apple ID: 如果尚未拥有Apple ID,可以在苹果官网或iOS设备的设置中创建。Apple ID是访问iCloud服务的前提。登录iCloud: 在苹果设备上,进入“设置”应…...

【MySQL】常见的MySQL日志都有什么用?

MySQL日志的内容非常重要,面试中经常会被问到。同时,掌握日志相关的知识也有利于我们理解MySQL 底层原理,必要时帮助我们排查解决问题。 MySQL中常见的日志类型主要有下面几类(针对的是InnoDB 存储引擎): 错误日志(error log):对 MySQL 的启…...

IDEA社区版使用Maven archetype 创建Spring boot 项目

1.新建new project 2.选择Maven Archetype 3.命名name 4.选择存储地址 5.选择jdk版本 6.Archetype使用webapp 7.create创建项目 创建好长这样。 检查一下自己的Maven是否是自己的。 没问题的话就开始增添java包。 [有的人连resources包也没有,那就需要自己添…...

C/C++ list模拟

模拟准备 避免和库冲突&#xff0c;自己定义一个命名空间 namespace yx {template<class T>struct ListNode{ListNode<T>* _next;ListNode<T>* _prev;T _data;};template<class T>class list{typedef ListNode<T> Node;public:private:Node* _…...

android studio开发

Kotlin 编程简介 | Android Basics Compose - First Android app | Android Developers (google.cn) 这是官网的教程&#xff0c;实现试一下。 之后进入课程 您的第一个 Kotlin 程序 (google.cn) 程序可以被视为一系列指示计算机或设备执行某项操作的指令&#xff0c;...

PostgreSQl 物化视图

物化视图&#xff08;Materialized View&#xff09;是 PostgreSQL 提供的一个扩展功能&#xff0c;它是介于视图和表之间的一种对象。 物化视图和视图的最大区别是它不仅存储定义中的查询语句&#xff0c;而且可以像表一样存储数据。物化视图和表的最大区别是它不支持 INSERT…...

Win10工具:批量word转png图片

首先声明这个小工具是小编本人开发的&#xff0c;无任何广告&#xff0c;会员收费机制等&#xff0c;永久使用。允许公司或个人使用&#xff0c;不允许倒卖&#xff0c;否则发现后会追究法律责任&#xff0c;毕竟开发不易。工具是用python开发的。 功能非常单一&#xff0c;就…...

期货量化交易客户端开源教学第八节——TCP通信服务类

private FReciveStr: AnsiString; {接收到的数据} IsConErr: Boolean; {网络连接是否失败} FSocket_LB: Integer; {TCP连接类别,0为交易,1为行情,2为查询} FRetryCount: Integer; {网络连接重试次数} FLoginErrEvent: TLoginErrEvent; {…...

bi项目笔记

1.bi是什么 bi项目就是商业智能系统&#xff0c;也就是数据可视画、报表可视化系统&#xff0c;如下图的就是bi项目了 2.技术栈...

金蝶云苍穹-插件开发(四)GPT开发相关插件

我只对GPT开发的相关插件进行讲解&#xff0c;因为我的是插件开发教程&#xff0c;关于GPT的一些提示词的写法&#xff0c;GPT任务的配置&#xff0c;请去金蝶云苍穹的文档和社区内学习。 GPT自定义操作 GPT自定义操作的代码的类要实现 IGPTAction 这个接口&#xff0c;这个接…...

【机器学习】精准农业新纪元:机器学习引领的作物管理革命

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 精准农业的背景与现状&#x1f341;精准农业的概念与发展历程&#x1f342;国内外精准农业实践案…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...