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

【Docker】针对开发环境、测试环境、生产环境如何编排?

目录

一、引言

二、Docker Compose 文件基础

三、针对不同环境的 Docker 编排

开发环境

测试环境

生产环境

四、配置文件全局变量的编写

五、总结


一、引言

在软件开发和部署的过程中,不同的环境有着不同的需求和配置。Docker 作为一种强大的容器化技术,能够帮助我们轻松地创建和管理不同环境下的应用程序。通过合理地编排 Docker 容器,我们可以确保应用在开发、测试和生产环境中的一致性和可靠性。本文将详细介绍如何针对这三种环境进行 Docker 编排,包括 docker-compose 文件的编写以及配置文件全局变量的设置。

二、Docker Compose 文件基础

Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,它使用 YAML 文件来配置应用程序的服务、网络和卷等方面14. 以下是一个基本的 docker-compose.yml 文件结构:

version: '3.3'
services:# 服务1的配置service1:image: image_name:tagcontainer_name: container_nameworking_dir: /path/to/working/dircommand: command_to_runvolumes:- host_path:container_pathenvironment:- VAR1=value1- VAR2=value2ports:- "host_port:container_port"restart: alwaysruntime: nvidia# 服务2的配置service2:# 类似服务1的配置项...

其中:

  • version指定了 Docker Compose 的版本,不同版本可能具有不同的特性和语法14.
  • services下定义了各个服务,每个服务都有自己的配置,如image指定了使用的 Docker 镜像,container_name定义了容器的名称,working_dir设置了容器内的工作目录,command是容器启动时要执行的命令14.
  • volumes用于挂载主机目录到容器内,实现数据的持久化或共享14.
  • environment设置了容器内的环境变量14.
  • ports进行端口映射,将容器内的端口映射到主机的端口上,方便外部访问14.
  • restart定义了容器的重启策略,always表示容器总是在退出后自动重启14.
  • runtime指定了容器运行时的环境,如nvidia表示使用 NVIDIA 的 GPU 运行时环境。

三、针对不同环境的 Docker 编排

开发环境
  • 特点:开发环境主要用于开发者进行代码编写、调试和初步测试。通常需要频繁地修改代码和配置,并且对环境的灵活性要求较高,以便快速迭代和验证新功能3.
  • Docker Compose 编排示例
version: '3.3'
services:hy-asr-dev:image: hy-asr:v1.0container_name: hy-asr-server-devworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resources-../src:/workspace/hy-asr/src  # 挂载本地代码目录,方便开发时修改代码environment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=0  # 可根据开发机器的GPU资源进行调整(不同环境可视GPU不同,以免出现多个环境使用同一GPU出现显存处理不足的问题)
# 以下是配置全局变量,在配置文件中一般使用 ${KAFKA_BROKER_URL:192.168.0.24:9093} 作为全局可变配置参数- SERVER_PORT=- KAFKA_BROKER_URL=- DB_USERNAME=iotmp- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=ports:- "8668:8666"restart: alwaysruntime: nvidia

在开发环境的编排中,我们额外挂载了本地的代码目录../src到容器内的/workspace/hy-asr/src,这样开发者在主机上修改代码后,容器内的代码也会同步更新,无需重新构建镜像。同时,我们可以根据开发机器的实际情况调整 GPU 设备的可见性和端口号等配置。

测试环境
  • 特点:测试环境用于对开发完成的功能进行系统的测试,包括功能测试、性能测试等。测试环境的配置应该尽可能地接近生产环境,以确保测试结果的准确性和可靠性,但也可能需要一些特定的测试工具和配置3.
  • Docker Compose 编排示例
version: '3.3'
services:hy-asr-test:image: hy-asr:v1.0container_name: hy-asr-server-testworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=2- SERVER_PORT=8667- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=Falseports:- "8667:8666"restart: alwaysruntime: nvidia

与开发环境相比,测试环境的编排可能会使用不同的外部服务地址或测试数据库等配置,以模拟真实的生产环境场景。例如,这里的KAFKA_BROKER_URLDB_HOST等配置与开发环境有所不同,指向了专门为测试环境搭建的服务。

生产环境
  • 特点:生产环境是应用程序最终运行的环境,要求高度的稳定性、可靠性和安全性。配置应该经过严格的测试和验证,并且尽可能地优化性能和资源利用3.
  • Docker Compose 编排示例
version: '3.3'
services:hy-asr-prod:image: hy-asr:v1.0container_name: hy-asr-server-prodworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=3- SERVER_PORT=80- KAFKA_BROKER_URL=prod_kafka.example.com:9092- DB_USERNAME=prod_user- DB_PASSWORD=Prod@Passw0rd- DB_HOST=prod_db.example.com- DB_PORT=3306- MINIO_ENDPOINT=prod_minio.example.com:29000- MINIO_ACCESS_KEY=prod_admin- MINIO_SECRET_KEY=ProdAdmin@123!- MINIO_BUCKET_NAME=dida- MINIO_SECURE=Trueports:- "8669:8666"restart: alwaysruntime: nvidia

在生产环境中,我们使用了正式的域名和生产级别的配置,如prod_kafka.example.comprod_db.example.com等,并且将端口映射到了标准的 HTTP 端口 80。同时,对于敏感信息如数据库密码等,应该使用更严格的安全措施进行管理,这里只是简单示例,实际生产中可能会使用加密存储或从安全的配置中心获取等方式。

四、同时启动docker-compose开发环境、测试环境、生产环境

示例:docker-compose.yml文件内容如下

version: '3.3'
services:# 开发环境服务hy-asr-dev:image: hy-asr:v1.0container_name: hy-asr-server-devworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resources-../src:/workspace/hy-asr/srcenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=0  # 容器可见GPU(假设服务器为多显卡,课件GPU可设置为0, 1, 2, 3)- SERVER_PORT=8667
# 以下是配置全局变量的值,若在项目中配置文件中有使用${... : ...}指定值,会使其替换为这里定义的全局变量值- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=ports:
# 原需调用的接口为10.0.4.66:8666,映射后调用该开发环境服务接口为10.0.4.66:8667- "8667:8666" # 8667是在容器外的映射端口,8666是容器内项目实际需要调用服务的端口restart: alwaysruntime: nvidia# 测试环境服务hy-asr-test:image: hy-asr:v1.0container_name: hy-asr-server-testworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=2- SERVER_PORT=8668- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=Falseports:
# 原需调用的接口为10.0.4.66:8666,映射后调用该测试环境服务接口为10.0.4.66:8668- "8668:8666"restart: alwaysruntime: nvidia# 生产环境服务hy-asr-prod:image: hy-asr:v1.0container_name: hy-asr-server-prodworking_dir: /workspace/hy-asrcommand: python3 hy_asr_main.pyvolumes:- /usr/share/zoneinfo:/usr/share/zoneinfo- /etc/localtime:/etc/timezone:ro-./logs:/workspace/hy-asr/logs-./resources:/workspace/hy-asr/resourcesenvironment:- TZ=Asia/Shanghai- CUDA_DEVICE_ORDER=PCI_BUS_ID- CUDA_VISIBLE_DEVICES=3- SERVER_PORT=80- KAFKA_BROKER_URL=- DB_USERNAME=- DB_PASSWORD=- DB_HOST=- DB_PORT=- MINIO_ENDPOINT=- MINIO_ACCESS_KEY=- MINIO_SECRET_KEY=- MINIO_BUCKET_NAME=- MINIO_SECURE=Trueports:
# 原需调用的接口为10.0.4.66:8666,映射后调用该生产环境服务接口为10.0.4.66:8668- "8669:8666"restart: alwaysruntime: nvidia

五、配置文件全局变量的编写

配置文件可变全局变量如何定义?

如下使用 ${KAFKA_BROKER_URL:192.168.0.4:9093} 形式

kafka:broker_url: ${KAFKA_BROKER_URL:192.168.0.4:9093}topic_name: ${KAFKA_TOPIC_NAME:hy-asr-audio}consumer_topic: ${KAFKA_CONSUMER_TOPIC:hy-asr-generate}group_id: ${KAFKA_GROUP_ID:hy-asr}auto_offset_reset: ${KAFKA_AUTO_OFFSET_RESET:earliest}enable_auto_commit: ${KAFKA_ENABLE_AUTO_COMMIT:true} # 是否自动提交偏移量,默认为true

在 Docker Compose 文件中,我们可以使用环境变量来设置配置文件的全局变量,这样可以方便地在不同环境中切换配置,而无需修改 Docker Compose 文件本身。例如,对于KAFKA_BROKER_URL,我们可以这样设置:

environment:- KAFKA_BROKER_URL=${KAFKA_BROKER_URL:192.168.0.4:9093}

这里的 ${KAFKA_BROKER_URL:192.168.0.4:9093} 表示如果环境变量KAFKA_BROKER_URL未设置,则使用默认值192.168.0.4:9093。在实际使用中,我们可以在启动 Docker 容器之前,在主机上设置相应的环境变量,或者在 CI/CD 流程中通过脚本设置环境变量,从而实现不同环境下的配置切换。例如,在开发环境中,也可以在终端中执行 export KAFKA_BROKER_URL=dev_kafka.example.com:9092,然后再运行 docker-compose up,这样容器内的KAFKA_BROKER_URL环境变量就会使用开发环境的配置。

相关文章:

【Docker】针对开发环境、测试环境、生产环境如何编排?

目录 一、引言 二、Docker Compose 文件基础 三、针对不同环境的 Docker 编排 开发环境 测试环境 生产环境 四、配置文件全局变量的编写 五、总结 一、引言 在软件开发和部署的过程中,不同的环境有着不同的需求和配置。Docker 作为一种强大的容器化技术&…...

数据采集卡的各参数介绍

数据采集卡(DAQ 卡)是用于测量物理信号(如电压、电流、温度等)并将其转化为数字信号的设备。 1. 通道数(Channels) 含义:数据采集卡可以同时采集多少路信号。比喻:通道数就像一个人…...

MySQL备份恢复

华子目录 MySQL日志管理为什么需要日志日志作用日志文件查看方法错误日志通用查询日志慢查询日志示例 撤销日志重做日志二进制日志---重要中继日志 MySQL备份备份类型逻辑备份优缺点备份内容备份工具导入sql文件 MySQL日志管理 为什么需要日志 用于排错用来做数据分析了解程序…...

flask内存马的真谛!!!

flask内存马 1.概念 常用的Python框架有Django、Flask, 这两者都可能存在SSTI漏洞. Python 内存马利用Flask框架中SSTI注入来实现, Flask框架中在web应用模板渲染的过程中用到render_template_string进行渲染, 但未对用户传输的代码进行过滤导致用户可以通过注入恶意代码来实…...

【机器学习02--模型评估】

机器学习 --- 模型评估 你需要得到更好的模型,怎么判断模型更好呢?你需要先得到训练集和测试集,怎么划分它们呢?训练完模型之后,在验证集上测试的时候,用什么指标衡量好坏呢?云里雾里&#xff0…...

【人工智能】深入解析Python中的聚类算法:从K-Means到DBSCAN

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 聚类是一种无监督学习的核心技术,用于将数据点分组到不同的簇中,使得同一簇内的点相似度最大化,不同簇间的点差异性最大化。K-Means和DBSCAN是两种最常见的聚类算法,分别适用于密度驱动和形状复杂的数据分组需…...

【STM32 Modbus编程】-作为主设备读取线圈和输入

作为主设备读取线圈和输入 文章目录 作为主设备读取线圈和输入1、硬件准备与连接1.1 RS452模块介绍1.2 硬件配置与接线1.3 软件准备2、读取线圈2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读取输入4、结果本文将在前面文章的基础上,实现主设备通过ModBus协议对从…...

数据结构(栈Stack)

1.前言: 在计算机科学中,栈(Stack)是一种基础而存在的数据结构,它的核心特性是后进先出(LIFO,Last In, First Out)。想象一下,在现实生活中我们如何处理一堆托盘——我们…...

Maven 中scope 的provided、compile、runtime、test、system 含义

在 Maven 中&#xff0c;<scope> 定义了依赖的可见性和生命周期。不同的 scope 值指示 Maven 在编译、测试和运行时如何处理这些依赖。以下是 Maven 中的几种常用依赖范围及其详细说明&#xff1a; 1. <scope>provided</scope> 含义&#xff1a;provided 范…...

Nginx 负载均衡和反向代理

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器&#xff0c;广泛应用于负载均衡中。它的负载均衡功能支持多种策略&#xff0c;可以有效分配流量到后端服务器&#xff0c;提升系统的可靠性和可用性。 负载均衡 首先&#xff0c;Nginx 负载均衡配置是通过在 Nginx 配置文件…...

【网络安全】数据集合集!

本文将为您介绍经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 SecGPT 更新时间&#xff1a;2024-05-08 访问地址: GitHub 描述&#xff1a; SecGPT的愿景是将人工智能技术引入网络安全领域&#xff0c;以提高网络防御的效率和效果。其使命是推动…...

大数据(一)MaxCompute

一、引言 作者后面会使用MaxCompute&#xff0c;所以在进行学习研究&#xff0c;总会有一些疑问产生&#xff0c;这里讲讲作者的疑问和思路 二、介绍 MaxCompute&#xff08;原名 ODPS - Open Data Processing Service&#xff09;是阿里云提供的大数据处理平台&#xff0c;专…...

数据科学与大数据之间的区别

什么是数据科学&#xff1f; 数据科学是一个跨学科领域&#xff0c;它将统计学和计算方法相结合&#xff0c;旨在从数据中提取见解和知识。它涉及收集、处理、分析以及解读数据&#xff0c;以揭示可用于为决策过程提供依据并推动创新的模式、趋势和关系。 数据科学涵盖了广泛…...

IP 地理位置定位技术原理概述

本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用&#xff0c;随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议&#xff0…...

多进程multiprocessing通信multiprocessing.Queue

multiprocessing.Queue 通常只能在主模块&#xff08;即 if __name__ "__main__": 块&#xff09;中创建和使用。这是因为 multiprocessing 模块在 Windows 系统上需要通过 if __name__ "__main__": 块来避免递归导入问题。 from multiprocessing import…...

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为...

微信小程序4-内容溢出滚动条

感谢阅读&#xff0c;初学小白&#xff0c;有错指正。 一、功能描述 在前一篇文章的隐藏框页面的功能里&#xff08;《微信小程序3-显标记信息和弹框》&#xff09;&#xff0c;我想添加一个内容溢出的时候&#xff0c;可通过滑动滚动条&#xff0c;实现查看溢出部分的内容&a…...

python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250+个项目、26.6GB)

文章目录 源代码下载地址项目介绍预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250个项目、26.6GB) 预览 项目备注 1、该资源内项目代码都经过测试运行成功&#xff0c;功能ok的情…...

ProjectSend 身份认证绕过漏洞复现(CVE-2024-11680)

0x01 产品描述: ProjectSend 是一个开源文件共享网络应用程序,旨在促进服务器管理员和客户端之间的安全、私密文件传输。它是一款相当流行的应用程序,被更喜欢自托管解决方案而不是 Google Drive 和 Dropbox 等第三方服务的组织使用。0x02 漏洞描述: ProjectSend r1720 之前…...

算法训练-搜索

搜索 leetcode102. 二叉树的层序遍历 法一&#xff1a;广度优先遍历 leetcode103. 二叉树的锯齿形层序遍历 法一&#xff1a;双端队列 法二&#xff1a;倒序 法三&#xff1a;奇偶逻辑分离 leetcode236. 二叉树的最近公共祖先 法一&#xff1a;递归 leetcode230. 二叉…...

【C++】map和set

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 关联式容器2. 键值对3. set3.1 set的模板参数列表3.2 set的构造3.3 set的迭代器3.4 set的容量3.5 set修改操作3.6 multiset 4. map4.1 map的模板参数说明4.2 map的构造4.3 map的迭代器4.4 map的容量与元素访问4.5 …...

MongoDB安装|注意事项

《疯狂Spring Boot讲义》是2021年电子工业出版社出版的图书&#xff0c;作者是李刚 《疯狂Spring Boot终极讲义》不是一本介绍类似于PathVariable、MatrixVariable、RequestBody、ResponseBody这些基础注解的图书&#xff0c;它是真正讲解Spring Boot的图书。Spring Boot的核心…...

使用playwright自动化测试时,npx playwright test --ui打开图形化界面时报错

使用playwright自动化测试时&#xff0c;npx playwright test --ui打开图形化界面时报错 1、错误描述&#xff1a;2、解决办法3、注意符号的转义 1、错误描述&#xff1a; 在运行playwright的自动化测试项目时&#xff0c;使用npm run test无头模式运行正常&#xff0c;但使用…...

Linux ufw 命令详解

简介 UFW(Uncomplicated Firewall) 简单防火墙是一款基于 iptables 构建的、用于管理防火墙规则的用户友好型工具。它简化了在 Linux 系统上配置防火墙的过程。 安装 在 Ubuntu/Debian 上安装 sudo apt update sudo apt install ufw在 CentOS/Red Hat 上安装 sudo yum ins…...

3248. 矩阵中的蛇

3248. 矩阵中的蛇 题目链接&#xff1a;3248. 矩阵中的蛇 代码如下&#xff1a; class Solution { public:int finalPositionOfSnake(int n, vector<string>& commands){int i 0, j 0;for (string& command : commands){if (command "LEFT") { j…...

图片的懒加载

目录 懒加载的来源 事件监听 IntersectionObserver 懒加载的来源 图片的来加载其实就是延迟加载&#xff0c;我们知道浏览器的可视范围是有限的&#xff0c;现在网页的内容越来越丰富&#xff0c;一般网页的内容都是需要滚动才能完成浏览 如果网页有很多图片&#xff0c;然…...

网络脚本生成器

网络官网地址 网络配置生成工具 终端-接入-汇聚-核心-防火墙-互联网路由器 一 开局配置 华为设备配置命令 system-viewsysname SW-JR-Switchvlan 10 vlan 20 vlan 30 vlan 40 quitinterface Vlan-interface 40 ip address 192.168.40.1 255.255.255.0 quitip route-static 1…...

Kibana server is not ready yet

遇到“Kibana server is not ready yet”错误通常表示Kibana无法连接到Elasticsearch。以下是一些常见原因及其解决方案&#xff1a; 1.常见原因 1.1.Elasticsearch未运行&#xff1a; 确保Elasticsearch服务已启动并正常运行。您可以通过访问 http://localhost:9200 来检查…...

Git 高频命令及其功能、作用与使用场景

在软件开发的世界里&#xff0c;Git 已经成为了版本控制的代名词。无论你是开发小型项目还是参与大型团队协作&#xff0c;Git 都是你不可或缺的得力助手。今天我们来聊聊 Git 中的一些高频命令&#xff0c;了解它们的功能、作用以及常见的使用场景&#xff0c;帮助你在日常开发…...

将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式

文章目录 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式MathType安装问题MathType30天试用延期MathPage.wll文件找不到问题 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式 word自带公式编辑器编辑的公式格式&#xff1a; MathType编辑的格式&a…...

【HarmonyOS】Component组件引入报错 does not meet UI component syntax.

【HarmonyOS】Component组件引入报错 一、问题背景 有时会碰到引入组件时&#xff0c;无法import引入组件&#xff0c;导致引入的组件报错。 或者提示does not meet UI component syntax. &#xff08;不符合UI组件语法。&#xff09; 如下图所示&#xff0c;在引入组件时&a…...

力扣-图论-1【算法学习day.51】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

使用lumerical脚本语言创建定向耦合器并进行数据分析(纯代码实现)

本文使用lumerical脚本语言创建定向耦合器波导、计算定向耦合器的偶数和奇数模式、分析定向耦合器的波长依赖性、分析定向耦合器的间隙依赖性(代码均有注释详解)。 一、绘制定向耦合器波导 1.1 代码实现 # 这段代码主要实现了绘制定向耦合器波导几何结构的功能。通过定义各种…...

Java面试要点50 - List的线程安全实现:CopyOnWriteArrayList

文章目录 一、引入二、实现原理解析2.1 写时复制机制2.2 读写分离策略 三、性能测试分析四、应用场景分析4.1 事件监听器管理4.2 缓存实现 五、最佳实践建议5.1 性能优化技巧5.2 常见陷阱规避 总结 一、引入 在并发编程中,线程安全的集合类扮演着重要角色。CopyOnWriteArrayLi…...

python脚本实现csv中百度经纬度转84经纬度

数据准备 csv文件,带百度经纬度字段:bd09_x,bd09_y 目的 将百度经纬度转换为84经纬度,并在csv文件中添加两个字段:84_x,84_y python脚本 from ChangeCoordinate import ChangeCoordimport pandas as pd import numpy as npcoord = ChangeCoord()def bd09_to_wgs84...

Vue2和Vue3的区别

响应式系统 Vue 2 技术基础&#xff1a;使用 Object.defineProperty 实现响应式。局限性&#xff1a; 无法监听新增属性&#xff1a;如果在创建实例后添加新属性&#xff0c;这些属性不会自动成为响应式的。数组变更检测问题&#xff1a;直接通过索引设置值或长度不会触发更新…...

JavaEE-经典多线程样例

文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...

Android显示系统(04)- OpenGL ES - Shader绘制三角形

一、前言&#xff1a; OpenGL 1.0采用固定管线&#xff0c;OpenGL 2.0以上版本重要的改变就是采用了可编程管线&#xff0c;Shader 编程是指使用着色器&#xff08;Shader&#xff09;编写代码来控制图形渲染管线中特定阶段的处理过程。在图形渲染中&#xff0c;着色器是在 GP…...

PMP–一、二、三模、冲刺–分类–10.沟通管理

文章目录 技巧十、沟通管理 一模10.沟通管理--1.规划沟通管理--文化意识--军事背景和非军事背景人员有文化差异5、 [单选] 项目团队由前军事和非军事小组成员组成。没有军事背景的团队成员认为前军事团队成员在他们的项目方法中过于结构化和僵化。前军事成员认为其他团队成员更…...

flutter windows 使用c++、dll等实践记录

在flutter的windows平台引入dll文件 https://juejin.cn/post/7223676609794015287 google官方说法&#xff08;感觉不太实用&#xff09; https://groups.google.com/a/dartlang.org/g/misc/c/fyh2W38AEVo Using a C DLL in Flutter Windows desktop app&#xff08;未尝试&…...

JUnit介绍:单元测试

1、什么是单元测试 单元测试是针对最小的功能单元编写测试代码&#xff08;Java 程序最小的功能单元是方法&#xff09;单元测试就是针对单个Java方法的测试。 2、为什么要使用单元测试 确保单个方法运行正常&#xff1b; 如果修改了代码&#xff0c;只需要确保其对应的单元…...

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项...

【每日刷题】Day162

【每日刷题】Day162 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 3302. 字典序最小的合法序列 - 力扣&#xff08;LeetCode&#xff09; 2. 44. 通配符匹配 - 力扣&…...

使用 EasyExcel 实现高效的 Excel 读写操作

在日常开发中&#xff0c;Excel 文件的读写操作是一个常见的需求。EasyExcel 是阿里巴巴开源的一个高性能、易用的 Excel 读写库&#xff0c;可以大幅提高处理 Excel 文件的效率。它通过事件驱动模型优化了大数据量 Excel 的读写性能&#xff0c;非常适合处理大文件或高并发场景…...

千益畅行,旅游卡有些什么优势?

千益畅行共享旅游卡是一种创新的旅游服务模式&#xff0c;旨在通过整合各类旅游资源&#xff0c;为用户提供一站式的旅游解决方案。这张旅游卡支持2至6人同行&#xff0c;涵盖了接机、酒店、用餐、大巴、导游、景区门票等服务&#xff0c;用户只需自行承担往返交通费用即可享受…...

Hive分区裁剪(Partition Pruning)详解

Hive分区裁剪是一种优化技术&#xff0c;旨在查询时只读取与条件匹配的分区&#xff0c;从而减少不必要的数据扫描。这种机制依赖于分区表的设计和查询优化器的工作&#xff0c;特别是在处理大规模数据时&#xff0c;分区裁剪可以显著提高查询性能。 1. 什么是分区裁剪&#xf…...

云原生数据库 PolarDB

PolarDB 是阿里云推出的一款云原生数据库&#xff0c;旨在为企业提供高性能、高可靠性的数据库解决方案。它基于云计算环境设计&#xff0c;特别适用于云上的大规模数据处理和存储需求。PolarDB 是一种兼具关系型数据库&#xff08;RDS&#xff09;和分布式数据库特性的新型数据…...

数据库原理-期末基础知识

1、数据库管理系统有哪些功能&#xff1f; 数据定义功能、数据操作功能、数据库的运行管理、数据库的建立与维护。 2、数据库设计分哪几个阶段&#xff1f; 需求分析->概念设计->逻辑设计->物理设计->数据库实施->数据的运营与维护 3、简述三级封锁协议的内…...

Java版-速通数据结构-树基础知识

现在面试问mysql,红黑树好像都是必备问题了。动不动就让手写红黑树或者简单介绍下红黑树。然而&#xff0c;我们如果直接去看红黑树&#xff0c;可能会一下子蒙了。在看红黑树之前&#xff0c;需要先了解下树的基础知识&#xff0c;从简单到复杂&#xff0c;看看红黑树是在什么…...

量化交易系统开发-实时行情自动化交易-8.4.MT4/MT5平台

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来会对于MT4/MT5平台介绍。 MetaT…...