Docker【初识Docker】
目录
为什么会出现Docker这门技术喃?
应用开发和部署的困境
容器技术的先兆
Docker 的出现:简化容器化
Docker 技术的关键创新:
Docker 的广泛应用和变革
什么是 Docker?
Docker的历史
早期背景:容器化和虚拟化技术
虚拟化的挑战
LXC (Linux Containers)
Docker的诞生 (2010)
Solomon Hykes 和 Docker 的起源
Docker 的首次发布
Docker的快速发展 (2013-2014)
2013年,Docker 1.0的发布
2014年,Docker 2.0
Docker 的广泛应用 (2015-2016)
Docker 企业版 (Docker Enterprise Edition)
微服务和容器化的兴起
Docker 与 Kubernetes 的结合
Docker 的未来 (2017 至今)
Docker 的企业化
Docker 与云平台的结合
Docker 与容器生态的扩展
Docker 的一些基础概念
Docker 如何工作
Docker 的优势
Docker 的架构
容器与虚拟机的区别
为什么会出现Docker这门技术喃?
Docker 技术的出现,是解决 应用开发和部署的难题,特别是环境一致性和资源隔离的问题。为了更好地理解这一点,我们可以从开发和运维的历史背景出发,看看为什么 Docker 这种技术应运而生。
应用开发和部署的困境
在传统的软件开发流程中,开发人员和运维人员往往会遇到以下问题:
-
环境不一致:开发人员在本地机器上开发、调试应用,但在部署到测试环境或生产环境时,常常会遇到问题。即使是相同的操作系统,不同的硬件、软件版本、配置、依赖库等差异,都可能导致应用无法正常运行。
-
部署难度大:不同的开发环境和生产环境对系统资源(如 CPU、内存、存储等)的配置要求不同。而要确保软件在各个环境中都能稳定运行,开发人员需要与运维人员频繁沟通,并且不断调试和修改,极大地增加了运维成本。
-
资源利用率低:虚拟化技术的出现,虽然解决了运行多个应用的问题,但由于每个虚拟机都需要完整的操作系统(包括内核),这样不仅占用大量资源,而且虚拟机的启动时间很长,运维成本也高。
容器技术的先兆
在 Docker 出现之前,已经有一些技术在尝试解决这些问题,其中 虚拟化技术 和 Linux 容器(LXC) 是最重要的基础。
-
虚拟化技术(如 VMware)通过在硬件之上虚拟出多个独立的操作系统实例,让多个应用能够同时在一台物理机上运行。但是虚拟化每个应用都需要一个完整的操作系统,这样不仅浪费了大量的资源,还导致了虚拟机启动时间长,运行效率低。
-
Linux 容器(LXC) 是一种轻量级的虚拟化技术,它并不虚拟化操作系统内核,而是使用内核的 命名空间(Namespaces) 和 控制组(Cgroups) 功能为每个应用提供一个独立的、隔离的运行环境。这种方式比虚拟机更加高效,但对于开发人员来说,LXC 的使用较为复杂,管理不够方便。
Docker 的出现:简化容器化
Docker 的出现是为了简化容器化技术的使用,并使其更加适应现代应用开发和部署的需求。Docker 从 LXC 继承了容器的轻量和高效性,但它提供了更高层次的抽象,简化了容器的管理和部署,使得开发人员能够更容易地创建、打包、分发和运行应用。
Docker 技术的关键创新:
-
简化的容器管理: Docker 提供了一个简单易用的命令行工具和 API,让开发人员能够像管理应用一样管理容器。通过 Docker,开发人员可以轻松创建和启动容器,而不需要关心底层复杂的虚拟化技术和容器配置。
-
一致的环境: Docker 容器将应用程序和所有的依赖(如操作系统环境、库、软件包等)打包在一个单独的、可移植的容器中。无论是开发人员在本地开发,还是将应用部署到测试、生产环境,Docker 都能确保应用的一致性,消除了“在我的机器上可以跑”这个常见问题。
-
快速启动与高效利用资源: Docker 容器共享宿主机操作系统的内核,因此容器启动速度比虚拟机快得多,占用的资源也少。通过容器,开发人员可以在同一台机器上运行更多的应用,极大提高了资源利用率。
-
镜像和容器的分离: Docker 使用 镜像(Image) 来定义应用程序及其所有依赖,容器则是镜像的运行时实例。通过这种分离,Docker 提供了更高的灵活性和可扩展性。开发人员可以轻松地构建自己的镜像,也可以从 Docker Hub(一个公共的镜像仓库)中拉取其他人的镜像,快速构建和部署应用。
-
自动化与持续集成: Docker 容器特别适合于 持续集成(CI) 和 持续交付(CD) 流程。在这些流程中,开发人员可以通过 Docker 快速部署、测试和验证应用,而不必担心环境差异。Docker 的镜像和容器机制,使得应用的构建、测试、部署更加自动化和标准化。
Docker 的广泛应用和变革
随着 Docker 的出现,它迅速在开发、测试和运维中流行开来,特别是在 DevOps 和云计算环境中,Docker 成为了解决应用交付和资源管理的核心工具。
- 开发人员:使用 Docker 来构建和打包应用程序,确保应用的可移植性和一致性。
- 运维人员:使用 Docker 来简化部署和管理,确保应用可以快速、稳定地部署到任何环境中。
- 企业:Docker 使得企业能够以更高效的方式使用计算资源,减少基础设施成本,同时实现快速的应用交付和更新。
什么是 Docker?
Docker的历史
Docker 的历史可以追溯到 2010 年,其最初的诞生背景是为了简化开发和运维的过程,尤其是在云计算和 DevOps 运动的推动下,容器技术成为了一种关键的工具。以下是 Docker 发展的几个关键节点:
早期背景:容器化和虚拟化技术
虚拟化的挑战
在 Docker 出现之前,虚拟化技术已经相对成熟。像 VMware 这样的虚拟机技术通过在硬件之上虚拟出多个操作系统实例,使得多台“虚拟机”可以在同一物理服务器上运行。然而,虚拟机每个都需要自己的操作系统和内核,这导致了 资源消耗大 和 启动速度慢 等问题。因此,虚拟化并不是特别高效,尤其在需要运行大量小型服务的环境中。
LXC (Linux Containers)
在虚拟机之外,Linux 系统本身就有一些基础设施支持 容器化,最著名的是 LXC(Linux Containers)。LXC 利用 Linux 内核的 命名空间 (Namespaces) 和 控制组 (Cgroups) 功能来实现轻量级的隔离,使得多个应用可以共享同一个操作系统内核运行在不同的容器中。虽然 LXC 提供了容器技术的基础,但它对普通开发人员来说较为复杂,缺乏易用的管理工具。
Docker的诞生 (2010)
Solomon Hykes 和 Docker 的起源
Docker 的创始人是 Solomon Hykes,他在 2010 年创办了一个名为 dotCloud 的公司,最初致力于为企业提供云服务。dotCloud 的业务专注于提供一个平台来管理 PaaS(平台即服务),但是在开发过程中,Hykes 和他的团队意识到,现有的虚拟化和容器化技术太过复杂,而且缺乏标准化和高效的工具,无法满足开发人员和运维人员的需求。
为了简化和解决这些问题,Solomon Hykes 在 2013年3月 发布了 Docker 项目。这是一个开源的项目,旨在通过容器技术解决应用的部署和运行环境不一致的问题。
Docker 的首次发布
Docker 的初期版本是基于 LXC (Linux Containers) 的,提供了一个简洁的命令行工具,使开发人员能够轻松创建和管理容器。Docker 本身并没有从头开始实现容器化,而是利用了 Linux 内核中现有的容器化技术,如 LXC、namespaces 和 cgroups。不过,Docker 将这些技术包装得更加易用和易管理,同时为容器化提供了更加统一和标准的操作界面。
Docker的快速发展 (2013-2014)
2013年,Docker 1.0的发布
在 2013 年,Docker 从原先的容器管理工具发展成了一个完整的容器平台。Docker 提供了包括 Docker 镜像、容器、Docker Hub(一个在线镜像仓库)等一整套工具,使开发人员能够方便地创建、分发和运行容器化应用程序。
这一年,Docker 的开源社区迅速增长,开发者开始广泛地采纳 Docker 技术进行应用的打包和部署。Docker 的优势在于它不需要虚拟化整个操作系统,只需要共享主机操作系统的内核,同时提供了轻量级的隔离环境,节省了大量的资源。
2014年,Docker 2.0
2014 年,Docker 达到了一个重要的里程碑,推出了 Docker 2.0。这一版本增加了对容器管理的更好支持,并开始引入一些新的特性,如 Docker Compose(用于管理多容器应用)和 Docker Swarm(用于容器的集群管理)。这些特性使得 Docker 不仅仅是一个容器工具,而是一个可以支持大规模应用部署的完整平台。
Docker 的广泛应用 (2015-2016)
Docker 企业版 (Docker Enterprise Edition)
随着 Docker 在开发者和运维人员中的普及,Docker 公司在 2015 年推出了 Docker 企业版(Docker EE),并专注于为大公司提供容器技术的商业支持。这一版本包括了额外的安全性、管理工具和企业级的支持,使得 Docker 可以在生产环境中被大规模采用。
微服务和容器化的兴起
2015 年是 Docker 扩展到更广泛应用领域的一年,特别是在 微服务架构 和 DevOps 流程的推动下,Docker 成为构建和部署现代应用的关键技术。容器可以让开发团队轻松地将应用拆分成多个小服务,每个服务可以独立部署、扩展和更新,从而大大提高了应用的可维护性和可扩展性。
Docker 与 Kubernetes 的结合
2015 年,Google 推出了 Kubernetes,一个容器编排平台,用于管理大规模的容器集群。Kubernetes 和 Docker 是天然的结合体,Kubernetes 使用 Docker 容器来运行应用,并通过自动化管理、调度和扩展容器化的应用。随着 Kubernetes 的流行,Docker 成为微服务和云原生架构的标准容器平台之一。
Docker 的未来 (2017 至今)
Docker 的企业化
随着 Docker 在云计算和容器技术中的影响力越来越大,Docker 公司将其业务重心逐渐转向企业级产品。Docker 企业版(Docker EE)得到了进一步完善,专注于容器的安全性、合规性和大规模部署。
Docker 与云平台的结合
Docker 被各大云服务提供商(如 AWS、Google Cloud、Microsoft Azure 等)广泛支持,并与他们的基础设施集成。例如,Amazon ECS(Elastic Container Service)和 Google Kubernetes Engine(GKE)都基于 Docker 容器。
Docker 与容器生态的扩展
Docker 也推动了容器技术生态的蓬勃发展,开源工具如 Docker Compose、Docker Swarm、Docker Machine 以及其他容器相关技术(如 Helm、Istio 等)也纷纷涌现,构建起了一个完整的容器化开发和运维工具链。
Docker 的一些基础概念
容器(Container):容器就像一个小型、轻量级的虚拟机,它为应用程序提供了一个隔离的运行环境。不同的是,容器需要完整的网络,它只需一个网络内核,而且每个容器之间是完全隔离的。这让容器更多,占用更少的资源。
镜像(Image):镜像是一个模板,是用来创建容器的“配方”。它很奇怪,包含了容器运行所需要的文件和依赖。可以把镜像想象成一个带标记的应用程序和所有依赖项的“快照”。当你创建容器时,Docker 会从镜像中读取并启动容器。
Dockerfile:Dockerfile就是描述了如何构建镜像的蓝图,它写了一些指令,告诉Docker如何构建镜像——比如安装哪些软件,复制哪些文件等。
Docker 如何工作
-
开发阶段:您在本地机器上使用 Docker 创建容器并运行应用程序。这个容器包含您所有的依赖和环境配置,确保您开发的应用程序在任何环境下都能运行。
-
分发阶段:完成开发后,你可以将 Docker 容器资源并上传到 Docker Hub(类似一个云端的应用商店)。其他人可以从 Docker Hub 下载你上传的容器,并在自己的机器上运行。
-
部署阶段:一旦容器被下载,开发人员或运维人员就可以将其直接部署到生产环境中。由于容器已经包含了所有的依赖和配置,所以部署过程非常不需要,担心需要依赖冲突或配置不匹配。
Docker 的优势
- 一致性:Docker保证了开发、测试和生产环境的一致性,解决了“在我的机器上能运行”的问题。
- 高效性:容器比虚拟机更轻量级,启动速度快,资源占用低。
- 可移植性:容器可以在任何地方运行,无论是你的本地机器、云端服务器,还是混合环境。
- 快速:部署容器化的应用可以快速部署和扩展,无需担心环境配置问题。
- 隔离性:不同容器之间互不干扰,每个容器都有自己的独立运行环境。
Docker 的架构
Docker 采用客户端的-服务器架构,您通过 Docker 客户端(命令行工具)与 Docker 守护进程(后台服务)进行交互。客户端发送请求给守护进程,守护进程负责创建、启动和管理容器。
- Docker 守护进程(dockerd):它负责管理所有 Docker 容器、镜像、网络等,执行容器创建、启动等命令。
- Docker客户端(docker):是开发人员与Docker交互的主要工具。通过命令行,你可以创建、启动、停止容器等。
- Docker Hub:这是一个公共的镜像仓库,用户可以从这里下载已有的容器镜像,或者将自己构建的镜像上传到这里,供其他人使用。
容器与虚拟机的区别
可以把虚拟机想象成一个完整的电脑,它自己的操作系统,并且需要大量运行的资源。而Docker容器就像是一个简化版的虚拟机,容器共享主机操作系统的内核,但运行在自己身上的隔离环境中。容器相对虚拟机而言,启动速度更快,占用的资源更少,效率更高。
相关文章:
Docker【初识Docker】
目录 为什么会出现Docker这门技术喃? 应用开发和部署的困境 容器技术的先兆 Docker 的出现:简化容器化 Docker 技术的关键创新: Docker 的广泛应用和变革 什么是 Docker? Docker的历史 早期背景:容器化和虚拟化…...
开机存活脚本
vim datastadard_alive.sh #!/bin/bashPORT18086 # 替换为你想要检查的端口号 dt$(date %Y-%m-%d)# 使用netstat检查端口是否存在 if netstat -tuln | grep -q ":$PORT"; thenecho "$dt Port $PORT is in use" > /opt/datastadard/logs/alive.log# 如…...
【elementplus】中文模式
设置中文 <el-date-picker v-model“userAddKey” type“daterange” style“width: 240px” start-placeholder“Start Date” end-placeholder“End Date” change“handleUserAddChange” /> 引入: import zhCn from “element-plus/es/locale/lang/zh-cn”…...
【Docker命令】如何使用`docker exec`在容器内执行命令
大家好,今天我们来聊聊Docker容器管理中的一个非常有用的命令:docker exec。在日常工作中,我们经常需要在运行中的Docker容器内执行各种命令,docker exec正是帮助我们实现这一需求的利器。下面我将通过一个简单的例子,…...
FPGA的DMA应用——pcileech
硬件通过pcie总线,访存本机的内存,并进行修改,可以进行很多操作。 学习视频:乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址:AMD-Xilinx Vivado™ 2024.1 现…...
前后端数据交互
一、后端部分 1.创建Spring Boot项目:在IDEA中创建一个Spring Boot项目,引入必要的依赖。 2.编写Controller层:在Spring Boot项目中创建Controller,用于处理前端的请求和响应数据。 RestController RequestMapping("/demo/s…...
将现有Web 网页封装为macOS应用
文章目录 方式一:Unite for macOS方式二:Web2Desk方式三:Nativefier方式四:Flutter Flutter WebView Plugin总结 方式一:Unite for macOS Unite 是一款专为 macOS 设计的工具,可以将任意 Web 页面快速封装…...
代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。
1.孤岛的总面积 卡码网:101. 孤岛的总面积(opens new window) 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格…...
Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…...
逆袭之路(11)——python网络爬虫:原理、应用、风险与应对策略
困厄铸剑心,逆袭展锋芒。 寒苦凝壮志,腾跃绘华章。 我要逆袭。 目录 一、引言 二、网络爬虫的基本原理 (一)网络请求与响应 (二)网页解析 (三)爬行策略 三、网络爬虫的应用领…...
【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.3.1. super 我们可以通过在路径开头使用super来访问父级模块路径中的内容,就像使用..语法启动文件系统路径。例如ÿ…...
wangEditor富文本插件在vue项目中使用和媒体上传的实现
wangEditor是前端一个比较流行的简洁易用,功能强大的前端富文本编辑器,支持 JS Vue React,提供了很多丰富的功能,下面手把手教你实现wangWditor富文本插件在vue项目中配置,保存、图片上传等功能。无脑ctrlc即可 基本功…...
FFmpeg 的常用API
FFmpeg 的常用API 附录:FFmpeg库介绍 库介绍libavcodec音视频编解码核心库编码 (avcodec_send_frame, avcodec_receive_packet)。解码 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音视频流的解析和封装功能,多种多媒体封装格式&…...
【软件】教务系统成绩提交工具使用步骤
【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样,安装步骤很简单,一直点击“下一步”即可快速完成安装,安装完成后,在桌面会有一个软件图标,双击即可打开软件主界面。 导入成绩到Excel中…...
es快速扫描
介绍 Elasticsearch简称es,一款开源的分布式全文检索引擎 可组建一套上百台的服务器集群,处理PB级别数据 可满足近实时的存储和检索 倒排索引 跟正排索引相对,正排索引是根据id进行索引,所以查询效率非常高,但是模糊…...
埃斯顿机器人程序模版案例,欢迎指点
埃斯顿机器人程序模版案例,欢迎指点...
解锁成长密码:探寻刻意练习之道
刻意练习,真有那么神? 在生活中,你是否有过这样的困惑:每天苦练英语口语,可一到交流时还是支支吾吾;埋头苦学吉他,却总是卡在几个和弦转换上;工作多年,业务能力却似乎陷入…...
对外发PDF设置打开次数
在线 Host PDF 文件并对链接进行限制——保障文件安全的最佳解决方案 在数字化办公和远程协作日益普及的今天,如何安全高效地分享 PDF 文件成为许多用户关注的重点。MaiPDF 作为一款功能强大的在线工具,不仅支持在线 host PDF 文件,还提供多…...
【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别
su 命令 su (Switch User 切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。 默认行为:如果只运行 su,则系统会要求输入 root 用户的密码来切换到 root 用户,获取管理员权限。 切换到其他用…...
leetcode hot 100搜索回溯
39. 组合总和 已解答 中等 相关标签 相关企业 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candi…...
记录-->为2025添砖java的第二天
如何在java中创建自己的方法呢,我认为它和在C语言c里面写函数就没啥区别,(⊙﹏⊙),可能有一点点就是说public static int add(int a,int b){}就是得和main方法里面的状态一致。 import java.util.Scanner; public class Math3 {public stati…...
uniapp小程序实现弹幕不重叠
uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...
拼多多纠偏,能否实现买卖平权?
科技新知 原创作者丨江蓠 编辑丨蕨影 当曾将仅退款、运费险作为标配的电商平台们开始听到商家诉求,有意优化营商环境,作为“仅退款”服务发起者的拼多多也坐不住了。 在推出一揽子减免计划讨好中小商家之后,拼多多近期被传正在内测精选用户…...
【Leetcode】3159. 查询数组中元素的出现位置
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。 对于每个查询 q u e r i e s [ i ] queries[i] queries[i] ,你需要找到 n u m s nums nu…...
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
在 Laravel 中,基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同…...
Element-plus自动导入
安装 npm i element-plus 自动引入 1. 安装两个插件 npm install -D unplugin-vue-components unplugin-auto-import2. 配置插件 vue3项目修改vite.config.js,把两个插件添加入即可,注意:不是覆盖原有配置 Vite // vite.config.js import { define…...
贪心算法(常见贪心模型)
常见贪心模型 简单排序模型 最小化战斗力差距 题目分析: #include <bits/stdc.h> using namespace std;const int N 1e5 10;int n; int a[N];int main() {// 请在此输入您的代码cin >> n;for (int i 1;i < n;i) cin >> a[i];sort(a1,a1n);…...
碰一碰发视频后端源码技术开发详解,支持OEM
一、引言 碰一碰发视频作为一种新颖的交互方式,在前端为用户带来便捷体验的同时,后端技术起着至关重要的支撑作用。后端负责管理视频资源、处理 NFC 标签信息与视频的关联逻辑、用户数据的存储与分析以及与前端的高效通信,确保整个系统稳定、…...
Python vs PHP:哪种语言更适合网页抓取
本文将比较 Python 和 PHP,以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点,并根据读者的经验水平分析哪种语言可能更容易上手。接下来,文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之,…...
SpringBoot 新特性
优质博文:IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...
NAT 技术如何解决 IP 地址短缺问题?
NAT 技术如何解决 IP 地址短缺问题? 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 随着互联网的普及和发展,IP 地址的需求量迅速增加。尤其是 IPv4 地址&…...
微积分复习(微分方程)
1,一阶微分方程 可分离的微分方程: 可以把x和y分列等号两边,然后求积分可以解决 齐次方程和准齐次方程 要求是 :yf(y/x),也就是没有单独的x项,我们可以通过设ty/x来统一变量方便我们运算 准齐次方程就是常数项不统一,我们可以将Xxa,Yyb来消灭常数项进而转化为齐次形式…...
动态规划子序列问题系列一>等差序列划分II
题目: 解析: 1.状态表示: 2.状态转移方程: 这里注意有个优化 3.初始化: 4.填表顺序: 5.返回值: 返回dp表总和 代码: public int numberOfArithmeticSlices(int[] nums) {in…...
【连续学习之SSL算法】2018年论文Selfless sequential learning
1 介绍 年份:2018 期刊: arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID(Sparse coding through Local Neural Inhibition and…...
【FastAPI】中间件
【FastAPI】中间件 一、概述二、作用2.1 日志记录与监控2.2 身份验证与授权2.3 CORS(跨域资源共享)2.4 Gzip压缩2.5 会话管理2.6 自定义功能2.7 执行顺序 三、 总结四、相关链接 一、概述 FastAPI的中间件提供了一种强大的机制,允许开发者在…...
文档大师:打造一站式 Word 报告解决方案1
前言 在政府、医院、银行、财务以及销售等领域,常常需要创建各种报告文件来展开工作汇报,譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前,这类报告主要通过 Word 制作,费时费力且难以维护&#…...
再谈c++线性关系求值
目的 线性关系是最简单的一种关系,在编程当中应用非常多,所以,再说一次线性关系。 线性关系的定义是这样的: 两个变量之间存在一次方函数关系,就称它们之间存在线性关系。正比例关系是线性关系中的特例,反…...
【ES6复习笔记】Class类(15)
介绍 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,…...
AppAgent 源码 (xml 解析)
1. 数据准备 adb shell uiautomator dump /sdcard/output.xml # 获取手机ui界面的xml文件 adb pull /sdcard/output.xml output.xml # 将手机上的xml文件拉取到电脑上具体的xml文件: <?xml version1.0 encodingUTF-8 standaloneyes ?> <hierarchy ro…...
Oracle 11G还有新BUG?ORACLE 表空间迷案!
前段时间遇到一个奇葩的问题,在开了SR和oracle support追踪两周以后才算是有了不算完美的结果,在这里整理出来给大家分享。 1.问题描述 12/13我司某基地MES全厂停线,系统卡死不可用,通知到我排查,查看alert log看到是…...
FreeSwitch中启用WebRTC
在FreeSwitch中启用WebRTC需要进行一系列配置。以下是详细的步骤: 1. 安装必要的依赖: 确保安装了支持WebRTC的依赖库,如libsrtp。 2. 配置SIP Profile: 编辑 conf/sip_profiles/internal.xml 文件,添加或修改以下内…...
力扣矩阵-算法模版总结
lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…...
服务端高并发分布式结构演进之路
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 服务端高并发分布式结构演进之路 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 概述 …...
虚拟机桥接模式
主机Win10,虚拟机xp 1.虚拟机设置中选择桥接模式 2.在虚拟机菜单:编辑>虚拟机网络编辑,点击“更改设置”,可以看到三个网卡,这三个网卡分别对应不同的网络共享模式。桥接模式须使用VMnet0,如果没看到这个网卡&…...
JVM调优实践篇
理论篇 1多功能养鱼塘-JVM内存 大鱼塘O(可分配内存): JVM可以调度使用的总的内存数,这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…...
SpeedTree学习笔记总结
SpeedTree是一款业界领先的三维树木植被建模软件,特别适用于游戏开发和影视制作。 一、基础操作 旋转:鼠标左键 平移:鼠标中键 缩放:鼠标中键滚动 Trunks树干节点 Branches树枝 Cap给树干封口 Frond创建大树叶 Decorations…...
【MuJoCo和PhysX】
MuJoCo 与 Unity 的 PhysX 引擎的主要区别 应用领域: MuJoCo:主要用于机器人学、强化学习、生物力学等领域,擅长处理多自由度、复杂动力学问题,尤其适合进行高精度的物理仿真。 Unity PhysX:主要用于游戏开发、虚拟现…...
HTML制作一个普通的背景换肤案例2024版
一,完整的代码: <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>换肤</t…...
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
qt QZipReader详解
1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…...