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

云原生--核心组件-容器篇-4-认识Dockerfile文件(镜像创建的基础文件和指令介绍)

1、Dockerfile的定义与作用

  • 定义:
    Dockerfile是一个文本文件,包含一系列Docker指令,用于自动化构建Docker镜像。Docker 在构建镜像时会按照Dockerfile中的指令逐步执行,每一行指令都会生成一个新的镜像层(layer)。这些层是只读的,并且可以通过缓存机制提高构建效率,最终生成一个可运行的容器镜像。

  • 核心作用:

    • 标准化镜像构建流程。
    • 确保环境一致性(开发、测试、生产)。
    • 通过分层存储技术提升构建效率。

2、Dockerfile的基本结构

一个典型的Dockerfile包含以下部分:
(1)、基础镜像(Base Image):指定构建镜像的起点。
(2)、元数据定义(Labels):添加镜像的元数据(如作者、版本)。
(3)、构建过程指令:安装依赖、复制文件、设置环境变量,端口暴露等。
(4)、启动指令:定义容器启动时的默认命令。

3、Dockerfile常用指令详解

在这里插入图片描述

(1)、FROM

  • 作用:指定基础镜像,是Dockerfile的第一个指令,后续的构建操作都基于这个基础镜像进行。
  • 语法:
FROM <image>[:<tag>] [AS <name>]

dockerfile示例:

FROM python:3.9-slim     # 使用轻量级的 Python 3.9 基础镜像
FROM ubuntu:20.04 AS build-env     # 为多阶段构建命名阶段
FROM openjdk:17-jdk-slim

(2)、LABEL

  • 作用:为镜像添加元数据标签。
  • 语法:
LABEL <key>=<value> [<key>=<value>...]

dockerfile示例:

LABEL maintainer="john.doe@example.com" \version="1.0" \description="A Python web application"

(3)、RUN

  • 作用:构建过程,在容器中执行命令,常用于安装软件包、配置环境等操作。
  • 语法:
RUN <command>            # Shell格式(默认)
RUN ["executable", "param1", "param2"]     # Exec格式
  • 最佳实践:
    合并多个命令,减少镜像层数。
    dockerfile示例:
RUN apt-get update && apt-get install -y build-essential && rm -rf /var/lib/apt/lists/*

(4)、COPY/ADD

  • COPY:将本地文件/目录复制到镜像中。
  • ADD:功能与COPY类似,但还支持从远程URL复制文件以及自动解压压缩包。
  • 语法:
COPY <src> <dest>
ADD <src> <dest>

dockerfile示例:

COPY requirements.txt /app/requirements.txt     # 复制依赖文件
ADD https://example.com/app.tar.gz /app/      # 下载并解压文件

(5)、WORKDIR

  • 作用:设置工作目录,后续指令(如RUN, COPY,ADD等)都在此目录下执行。
  • 语法:
WORKDIR /path/to/directory

dockerfile示例:

WORKDIR /app

(6)、ENV

  • 作用:设置环境变量。这些环境变量在容器运行时可以被应用程序使用。
  • 语法:
ENV <key>=<value> [ <key>=<value>... ]

dockerfile示例:

ENV PYTHONUNBUFFERED=1 \DATABASE_URL="postgres://user:pass@localhost:5432/mydb"

(7)、EXPOSE

  • 作用:声明容器运行时会监听的端口,但并不实际进行端口映射。
  • 语法:
EXPOSE <port> [<port>...]

dockerfile示例:

EXPOSE 8000

(8)、CMD/ENTRYPOINT

  • CMD:定义容器启动时默认执行的命令(如果有多个,仅最后一个生效)。
  • ENTRYPOINT:与CMD类似,优先级高于CMD,也是用于指定容器启动时执行的命令,但ENTRYPOINT不会被docker run后面的命令覆盖,而CMD则可能会被覆盖。
  • 语法:
CMD ["executable", "param1", "param2"]    # 推荐exec格式
ENTRYPOINT ["executable", "param1"]

dockerfile示例:

CMD ["python", "app.py"]                 # 默认启动命令
ENTRYPOINT ["nginx", "-g", "daemon off;"]      # 固定启动命令

(9)、ARG

  • 作用:定义构建时变量(仅在构建过程中有效)。在构建镜像时可以通过–build-arg参数传递值。
  • 语法:
ARG <name>[=<default value>]

dockerfile示例:

ARG BUILD_VERSION=1.0
RUN echo "Build Version: $BUILD_VERSION" > version.txt

4、Dockerfile示例

(1)、Python Web应用

Dockerfile示例:

# 1. 指定基础镜像
FROM python:3.9-slim# 2. 设置工作目录
WORKDIR /app# 3. 复制 requirements.txt 文件到镜像中
COPY requirements.txt .# 4. 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt# 5. 复制当前目录下的所有文件到镜像的工作目录中
COPY . .# 6. 暴露应用程序运行的端口
EXPOSE 5000# 7. 设置环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=development# 8. 指定容器启动时运行的命令
CMD ["flask", "run", "--host=0.0.0.0"]

解释:

  1. FROM python:3.9-slim
  • 作用:指定基础镜像。
  • 解释:这里使用的是官方的Python 3.9精简版镜像(slim表示精简版,体积较小)。它是构建其他镜像的基础。
  1. WORKDIR /app
  • 作用:设置工作目录。
  • 解释:在镜像中创建一个/app目录,并将其设置为后续指令的工作目录。如果目录不存在,Docker会自动创建它。
  1. COPY requirements.txt .
  • 作用:将本地文件复制到镜像中。
  • 解释:将主机上的requirements.txt文件复制到镜像的/app目录下。
  1. RUN pip install --no-cache-dir -r requirements.txt
  • 作用:运行命令安装依赖。
  • 解释:使用pip安装requirements.txt中列出的所有Python依赖项。–no-cache-dir参数避免缓存以减小镜像体积。
  1. COPY . .
  • 作用:复制文件。
  • 解释:将主机当前目录下的所有文件(包括子目录)复制到镜像的/app目录中。
  1. EXPOSE 5000
  • 作用:声明容器对外暴露的端口。
  • 解释:告诉Docker容器运行时会监听5000端口。注意,这只是声明,不会自动发布端口,实际运行时需要通过-p参数映射端口。
  1. ENV FLASK_APP=app.py和ENV FLASK_ENV=development
  • 作用:设置环境变量。
  • 解释:
    • FLASK_APP指定Flask应用程序的入口文件。
    • FLASK_ENV设置Flask的运行模式为开发模式(启用调试功能)。
  1. CMD [“flask”, “run”, “–host=0.0.0.0”]
  • 作用:指定容器启动时运行的默认命令。
  • 解释:当容器启动时,会运行flask run --host=0.0.0.0命令,启动Flask开发服务器并监听所有网络接口。

(2)、Java Web示例

Spring Boot的Java应用程序镜像构建示例。
Dockerfile示例:

# 1. 使用Maven基础镜像构建阶段
FROM maven:3.8.6-openjdk-17 AS build# 2. 设置工作目录
WORKDIR /app# 3. 复制Maven配置文件(如果需要)
COPY pom.xml .# 4. 下载依赖项
RUN mvn dependency:go-offline# 5. 复制项目源代码
COPY src ./src# 6. 构建应用程序
RUN mvn clean package -DskipTests# 7. 使用运行时基础镜像
FROM openjdk:17-jdk-slim# 8. 设置工作目录
WORKDIR /app# 9. 从构建阶段复制 JAR 文件
COPY --from=build /app/target/my-springboot-app.jar /app/my-springboot-app.jar# 10. 暴露应用程序端口
EXPOSE 8080# 11. 启动应用程序
ENTRYPOINT ["java", "-jar", "my-springboot-app.jar"]

解释:

  1. FROM maven:3.8.6-openjdk-17 AS build
  • 作用:指定基础镜像,并为构建阶段命名。
  • 解释:
    • 使用官方的Maven 3.8.6镜像,内置OpenJDK 17。
    • AS build定义了一个构建阶段,后续可以通过COPY --from引用。
  1. WORKDIR /app
  • 作用:设置工作目录。
  • 解释:在镜像中创建/app目录,并将其作为后续指令的工作目录。
  1. COPY pom.xml .
  • 作用:将主机上的pom.xml文件复制到镜像中。
  • 解释:Maven项目的核心配置文件,定义了项目的依赖项和构建步骤。
  1. RUN mvn dependency:go-offline
  • 作用:下载依赖项并使构建过程离线化。
  • 解释:
    • mvn dependency:go-offline下载所有依赖项到本地缓存。
    • 这样可以减少后续构建时间,并避免网络波动对构建的影响。
  1. COPY src ./src
  • 作用:复制项目源代码。
  • 解释:将主机上的src目录复制到镜像的/app/src中。
  1. RUN mvn clean package -DskipTests
  • 作用:编译、打包项目。
  • 解释:
    • mvn clean清理旧的构建文件。
    • mvn package 打包项目,生成可运行的 JAR 文件。
    • -DskipTests 跳过测试以加速构建(生产环境中建议单独运行测试)。
  1. FROM openjdk:17-jdk-slim
  • 作用:指定运行时基础镜像。
  • 解释:
    • 使用更轻量级的OpenJDK 17镜像作为运行时环境。
    • 这是最终镜像的基础,只包含运行应用程序所需的组件。
      说明:
      使用maven:3.8.6-openjdk-17作为构建阶段,使用openjdk:17-jdk-slim作为运行时阶段。这种方式可以显著减小最终镜像的体积,因为它只包含运行应用程序所需的组件。
  1. WORKDIR /app
  • 作用:设置工作目录。
  • 解释:在运行时镜像中创建/app目录,并将其作为工作目录。
  1. COPY --from=build /app/target/my-springboot-app.jar /app/my-springboot-app.jar
  • 作用:从构建阶段复制生成的JAR文件。
  • 解释:
    • –from=build引用前面定义的构建阶段。
    • 将构建阶段生成的my-springboot-app.jar文件复制到运行时镜像的/app目录。
  1. EXPOSE 8080
  • 作用:声明容器对外暴露的端口。
  • 解释:告诉Docker容器运行时会监听8080端口。实际运行时需要通过-p参数映射端口。
  1. ENTRYPOINT [“java”, “-jar”, “my-springboot-app.jar”]
  • 作用:指定容器启动时运行的命令。
  • 解释:
    • 使用java -jar命令运行JAR文件。
    • ENTRYPOINT不会被覆盖,适合定义不可变的启动命令。

5、构建与运行镜像

构建命令示例:

docker build -t my-flask-app:1.0 .     # 构建并标记镜像
docker build --no-cache .             # 忽略缓存,强制重新构建
docker build --build-arg VERSION=2.0 .   # 传递构建参数

解释:
最后的.表示Dockerfile所在的路径

运行容器示例:

docker run -d -p 5000:5000 --name my-app my-flask-app:1.0

6、Dockerfile最佳实践

(1)、轻量级基础镜像

优先选择*-slim或*-alpine版本(如python:3.9-slim)。

(2)、合并RUN命令:

减少镜像层数,提高构建速度。

bash示例:

RUN apt-get update && apt-get install -y <package> && rm -rf /var/lib/apt/lists/*

(3)、多阶段构建

分离构建环境和运行环境,减少最终镜像体积。

(4)、缓存优化

将不常变化的指令放在前面(如依赖安装),常变化的放在后面(如代码复制)。

(5)、使用.dockerignore

排除不必要的文件(如.git, node_modules)。

(6)、安全加固

使用非root用户运行容器(通过USER 指令)。

7、常见问题与解决方案

(1)、镜像体积过大?

  • 解决方案:
    • 使用多阶段构建。
    • 选择轻量级基础镜像(如alpine)。
    • 清理构建过程中的临时文件(如apt-get clean)。

(2)、构建缓存失效?

  • 原因:Docker会缓存每一层的构建结果,如果某层指令变化,则后续层会重新构建。
  • 解决:
    • 保持依赖文件(如requirements.txt)在代码的前面。
    • 使用–no-cache强制重新构建。

(3)、容器启动失败?

  • 常见原因:
    • 工作目录未正确设置。
    • 启动命令未指定(缺少CMD或ENTRYPOINT)。
  • 解决:

dockerfile示例:

WORKDIR /app
CMD ["python", "app.py"]

8、总结

  • Dockerfile 是容器化应用的核心,通过标准化构建流程确保环境一致性。
  • 关键指令:FROM, RUN, COPY, CMD, ENTRYPOINT 是构建镜像的基础。
  • 最佳实践:轻量基础镜像、多阶段构建、缓存优化是提升效率的关键。

逆风前行,Dare To Be!!!

相关文章:

云原生--核心组件-容器篇-4-认识Dockerfile文件(镜像创建的基础文件和指令介绍)

1、Dockerfile的定义与作用 定义&#xff1a; Dockerfile是一个文本文件&#xff0c;包含一系列Docker指令&#xff0c;用于自动化构建Docker镜像。Docker 在构建镜像时会按照Dockerfile中的指令逐步执行&#xff0c;每一行指令都会生成一个新的镜像层&#xff08;layer&#x…...

13.组合模式:思考与解读

原文地址:组合模式&#xff1a;思考与解读 更多内容请关注&#xff1a;7.深入思考与解读设计模式 引言 在软件开发中&#xff0c;是否曾经遇到过这样一种情况&#xff1a;你有一个对象&#xff0c;它本身很简单&#xff0c;但是它包含了其他类似的对象。随着系统变得越来越复…...

Pycharm(十七)生成器

一、生成器介绍 1.1 概述 生成器指的是Generator对象&#xff0c;它不再像以往一样&#xff0c;一次性生成所有的数据&#xff0c;而是用一个&#xff0c;再生成一个&#xff0c;基于用户写的规则&#xff08;条件&#xff09;来生成数据&#xff0c;如果条件不成立&#xff…...

盛元广通实验材料管理系统-实验室管理系统-LIMS

一、引言 在当下科学研究及各类实验日益频繁的背景下&#xff0c;实验材料管理成为实验室高效运作的核心环节。从“人工低效”到“智能自动化”&#xff0c;盛元广通可覆盖实验材料的采购、存储、使用、追踪等全流程&#xff0c;从功能适配性、技术性能、成本效益、供应商服务…...

检查 NetCDF Fortran的版本

执行 nf-config --all命令后&#xff0c;它会输出一堆信息&#xff0c;大致像这样&#xff1a; This netCDF-Fortran version: 4.6.0 netCDF-Fortran installation dir: /usr/local/netcdf4 Fortran compiler: gfortran Fortran compiler flags: -g -O2 Fortran preprocesso…...

MySQL 存储引擎与服务体系深度解析

一、存储引擎核心概念 基本定义 存储引擎:MySQL服务的核心组件,负责数据的存储、检索和管理版本演进: MySQL 5.0/5.1 默认使用MyISAM引擎MySQL 5.5/5.6+ 默认采用InnoDB引擎关键特性 不同存储引擎采用不同的数据存储结构和处理机制直接影响表的CRUD操作性能和数据安全特性作…...

乐企数电发票分布式发票号码生成重复的问题修复思路分享

文章目录 1.前言2.解决思路2.1错误姿势2.2歪打正着2.3正确姿势 3.总结 1.前言 由于之前接了乐企数电开票&#xff0c;服务上线之后&#xff0c;使用的公司少没有啥问题&#xff0c;后面切换了两家日开票量大的公司上线之后&#xff0c;就发现发票号码生成重复了&#xff0c;后面…...

多级缓存架构设计与实践经验

多级缓存架构设计与实践经验 在互联网大厂Java求职者的面试中&#xff0c;经常会被问到关于多级缓存的架构设计和实践经验。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面试现场。请问您对多级…...

LCD1602液晶显示屏详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图​编辑 2.接口说明 三、程序设计 main文件 lcd1602.h文件 lcd1602.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 LCD1602A字符型液晶显示模块是专门用于显示字母、数字元、符号等的点阵型液晶显示模块。分4位和8位数据…...

Golang | 集合求交

文章目录 bitmap求交集2个有序链表多个有序链表跳表 bitmap求交集 2个有序链表 多个有序链表 为什么非最大的所有都要往后移动呢&#xff1f;因为现在已经知道交集即使有&#xff0c;也最小都是这个目前最大的了&#xff0c;其他不是最大的不可能是交集&#xff0c;所有除了最大…...

手机充电进入“秒充“时代:泡面刚下锅,电量已满格

现代人的生活节奏越来越快&#xff0c;手机充电技术也在飞速发展。从最初的"充电一整晚"到如今的"秒充"时代&#xff0c;充电效率的提升正在悄然改变着我们的生活习惯。最新数据显示&#xff0c;目前最快的手机充电技术仅需4分30秒就能充满一部手机的电量&…...

网站字体文件过大 导致字体从默认变成指定字体的时间过长

1.选择字体中只用到的字符集较小的包 只用到了数字&#xff0c;所以使用了 xx-sans.ttf的版本(86kb) 2.转换ttf格式为woff2 转换后26kb 3.使用字体 // 定义字体 font-face {font-family: "myFont";src: url(/assets/fonts/myFont.woff2) format(woff2);font-weigh…...

WPF常用技巧汇总 - Part 2

WPF常用技巧汇总-CSDN博客 主要用于记录工作中发现的一些问题和常见的解决方法。 目录 WPF常用技巧汇总-CSDN博客 1. DataGrid Tooltip - Multiple 2. DataGrid Tooltip - Cell值和ToolTip值一样 3. DataGrid Tooltip - Cell值和ToolTip值不一样 4. DataGrid - Ctrl A /…...

C++中析构函数

析构函数 析构函数&#xff08;Destructor&#xff09;是类的一种特殊成员函数&#xff0c;用于在对象的生命周期结束时执行清理操作&#xff0c;他的主要作用是释放对象占用资源&#xff0c;例如动态分配的内存&#xff0c;文件句柄或网络连接等。 特点 名称与类名称相同 单…...

树莓派超全系列教程文档--(44)如何在树莓派上编译树莓派内核

如何在树莓派上编译树莓派内核 构建内核下载内核源代码 本地构建内核构建配置使用 LOCALVERSION 自定义内核版本构建安装内核 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 构建内核 操作系统预装的默认编译器和链接器被配置为构建在该操作系统…...

flask返回文件的同时返回其他参数

参考:flask实现上传文件与下载文件_flask 文件上传和下载-CSDN博客 在 Flask 中,返回文件的同时附加额外参数(如处理时间)可以通过 自定义 HTTP 响应头 或 返回 JSON 数据与文件结合 的方式实现。以下是具体方法和示例: 方法 1:通过 HTTP 响应头 附加参数(推荐) 将参…...

C++23 std::move_only_function:一种仅可移动的可调用包装器 (P0288R9)

文章目录 一、定义与基本概念1.1 定义1.2 基本概念 二、特点2.1 仅可移动性2.2 支持多种限定符2.3 无target_type和target访问器2.4 强前置条件 三、使用场景3.1 处理不可复制的可调用对象3.2 性能优化3.3 资源管理 四、与其他可调用包装器的对比4.1 与std::function的对比4.2 …...

Zookeeper实现分布式锁实战应用

Zookeeper实现分布式锁实战应用示例 1. 分布式锁概述 在分布式系统中&#xff0c;当多个进程或服务需要互斥地访问共享资源时&#xff0c;就需要分布式锁来协调。Zookeeper因其强一致性和临时节点特性&#xff0c;非常适合实现分布式锁。 2. Zookeeper实现分布式锁的核心原理…...

使用 Playwright 构建高效爬虫:原理、实战与最佳实践

随着网站前端技术日益复杂,传统的基于请求解析(如 requests、BeautifulSoup)的爬虫在处理 JavaScript 渲染的网站时变得力不从心。Playwright,作为微软推出的一款强大的自动化浏览器控制框架,不仅适用于自动化测试,也成为了处理现代网站爬取任务的利器。 本篇文章将带你…...

ComfyUI for Windwos与 Stable Diffusion WebUI 模型共享修复

#工作记录 虽然在安装ComfyUI for Windwos时已经配置过extra_model_paths.yaml 文件&#xff0c;但升级ComfyUI for Windwos到最新版本后发现原先的模型配置失效了&#xff0c;排查后发现&#xff0c;原来是 extra_model_paths.yaml 文件在新版本中被移动到了C盘目录下&#x…...

【RabbitMQ消息队列】详解(一)

初识RabbitMQ RabbitMQ 是一个开源的消息代理软件&#xff0c;也被称为消息队列中间件&#xff0c;它遵循 AMQP&#xff08;高级消息队列协议&#xff09;&#xff0c;并且支持多种其他消息协议。 核心概念 生产者&#xff08;Producer&#xff09;&#xff1a;创建消息并将其…...

【MySQL数据库入门到精通-08 约束】

文章目录 4、约束4.1 概述4.2 约束演示1. 根据需求&#xff0c;完成表的创建2. SQL数据库3. 结果 4.3 外键约束4.3.1 介绍1. 根据需求&#xff0c;完成表的创建2. SQL数据库3. 结果4.3.2 外键约束建立1. 语法2. SQL语句3. 现象4.3.3 外键删除更新行为1. 知识点2.SQL3.结果 4、约…...

C++笔记-模板进阶和继承(上)

一.模板进阶 1.1非模板类型参数 那之前学过的stack举例&#xff0c;在这之前我们如果要用N&#xff0c;就要用宏来定义&#xff0c;但是宏毕竟有局限性&#xff1a; 如果我要用到两个stack&#xff0c;一个要求10个空间&#xff0c;另一个要求100空间呢&#xff1f; 这时候…...

云计算赋能质检LIMS的价值 质检LIMS系统在云计算企业的创新应用

在云计算技术高速发展的背景下&#xff0c;实验室信息化管理正经历深刻变革。质检LIMS&#xff08;实验室信息管理系统&#xff09;作为实验室数字化转型的核心工具&#xff0c;通过与云计算深度融合&#xff0c;为企业提供了高弹性、高安全性的解决方案。本文将探讨质检LIMS在…...

2025系统架构师---数据抽象(Data Abstraction)‌与‌面向对象架构风格

引言 在软件系统复杂度与规模不断攀升的今天&#xff0c;如何设计出可扩展、易维护且能快速响应需求变化的架构&#xff0c;是每一位系统架构师面临的挑战。‌数据抽象&#xff08;Data Abstraction&#xff09;‌与‌面向对象架构风格&#xff08;Object-Oriented Architectu…...

[python] 基于WatchDog库实现文件系统监控

Watchdog库是Python中一个用于监控文件系统变化的第三方库。它能够实时监测文件或目录的创建、修改、删除等操作&#xff0c;并在这些事件发生时触发相应的处理逻辑&#xff0c;因此也被称为文件看门狗。 Watchdog库的官方仓库见&#xff1a;watchdog&#xff0c;Watchdog库的官…...

缺省处理、容错处理

布尔判定 假&#xff1a;false 0 null undefined NaN 可选符.?和&#xff1f;&#xff1f; let obj {name: jim,data: {money: 0,age: 18,fn(a){return a}} }1、如果左侧的值为null或者undefined&#xff0c;则使用右侧值。需要使用"??" obj?.data?.a…...

Taro on Harmony :助力业务高效开发纯血鸿蒙应用

背景 纯血鸿蒙逐渐成为全球第三大操作系统&#xff0c;业界也掀起了适配鸿蒙原生的浪潮&#xff0c;用户迁移趋势明显&#xff0c;京东作为国民应用&#xff0c;为鸿蒙用户提供完整的购物体验至关重要。 &#xfeff; &#xfeff;&#xfeff; 去年 9 月&#xff0c;京东 AP…...

Java基础——排序算法

排序算法不管是考试、面试、还是日常开发中都是一个特别高频的点。下面对八种排序算法做简单的介绍。 1. 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&#xff1a;相邻元素比较&#xff0c;每一轮将最大元素“冒泡”到末尾。 示例数组&#xff1a;[5, 3, 8, 1, 2] pub…...

【操作系统原理07】输入/输出系统

文章目录 零.大纲一.I/O设备的概念和分类0.大纲1.什么是I/O设备2.I/O分类 二.I/O控制器0.大纲1.I/O设备的电子部件&#xff08;I/O控制器&#xff09;2.IO控制器组成3.内存映像I/O VS 寄存器独立编址 三.I/O控制方式0.大纲与总结1.程序直接控制方式&#xff08;1&#xff09; 操…...

IM云端搜索全面升级,独家能力拓展更多“社交连接”玩法

在这个数字时代&#xff0c;网络让信息传递前所未有的便捷&#xff0c;但同时&#xff0c;海量数据堆积也让内容检索变得像大海捞针。尤其是在我们日常工作生活中最常用的即时通信软件中&#xff0c;信息的快速查找和精准定位正变得越来越重要。 但传统的本地搜索功能受限于设…...

汽车产业链主表及类别表设计

&#xff08;提前设计&#xff0c;备用&#xff09; 一、汽车产业链类别表&#xff08;industry_chain_category&#xff09; 设计要点 1、核心字段&#xff1a;定义产业链分类&#xff08;如零部件、整车制造、销售服务等&#xff09; 2、主键约束&#xff1a;自增ID作为唯一标…...

有效的字母异位词

recorded&#xff1a;用于统计或抵消字符出现次数。 class Solution { public:bool isAnagram(string s, string t) {int record[26]{0};for(int i0;i<s.size();i){record[s[i]-a];}for(int i0;i<t.size();i){record[t[i]-a]--;}for(int i0;i<26;i){if(record[i]!0){…...

汽车网络安全 -- 理解暴露面、攻击面和攻击向量

1.暴露面是攻击面的子集 举个例子&#xff0c;房子都有门、窗户&#xff0c;这些窗户、门不管是否打开&#xff0c;都可能被小偷利用进入到房内&#xff0c;因此这些门窗可能是潜在的漏洞&#xff0c;所以称之为攻击面(Attack Surface)。 小偷经过长期观察&#xff0c;发现家…...

C++异步利器:全面理解 std::packaged_task

在现代 C&#xff08;C11及以后&#xff09;中&#xff0c;并发与异步编程是不可回避的重要技能。我们常常希望把某些计算任务扔给后台线程去处理&#xff0c;同时又能优雅地获取任务结果。 这时候&#xff0c;std::packaged_task 就是一个非常强大的工具。 本文将带你深入理解…...

Animate 中HTMLCanvas 画布下的鼠标事件列表(DOM 鼠标)

在 JavaScript 和 ‌Adobe Animate&#xff08;CreateJS&#xff09;‌ 中&#xff0c;常用的鼠标交互事件可分为两大类&#xff1a;‌基础 DOM 事件‌ 和 ‌CreateJS 扩展事件‌12。以下是完整分类&#xff1a; 一、基础 DOM 鼠标事件 事件名触发场景冒泡特性click鼠标左键单…...

RagFlow文档切块提升

1.RagFlow切块介绍 2.复现优化 2.1 General 通用分块 def parser_text(self, txt, blockSize512, overlapSize0, delimiter"\n!?;。&#xff1b;&#xff01;&#xff1f;"):文本分割sentences self.split_text_by_period_qh(txt, delimiter, blockSizeblockSize)…...

音频转base64

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>音频转Base64</title><style>.containe…...

蓝桥杯 11. 打印大X

打印大X 原题目链接 题目描述 小明希望用星号拼凑&#xff0c;打印出一个大 X&#xff0c;他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格&#xff0c;所有的空白位置都以句点符 . 来代替。 输入描述 输入两个整数 m 和 n&#xff0c;表示笔画的宽度和 X 的高…...

页面需要重加载才能显示的问题修改

1.问题描述&#xff1a;跳转页面后&#xff0c;只有点击重新加载后才会显示内容 经过测试后&#xff1a; / 跳转详情 const goToDetail (bookId) > { router.push({ path: /classic-detail, query: { book_id: bookId } }) } 执行完以上代码后&#xff0c;页面从classics…...

On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其二——数学计算部分

这篇内容的源博文是 On the Biology of a Large Language Model 这是Anthropic&#xff0c;也就是Claude的团队的一遍技术博客。他的主要内容是用一种改良版的稀疏编码器来解释LLM在inference过程中内部语义特征的激活模式。因为原文太长&#xff0c;我把原文分成了几份来写阅读…...

Python语言基础知识详解:标识符与变量

Python语言基础知识详解&#xff1a;标识符与变量 一、标识符&#xff08;Identifiers&#xff09; 定义 标识符是用于命名变量、函数、类、模块或其他对象的名称。它是代码中对实体的唯一标识。 1. 标识符的命名规则 Python的标识符需遵循以下规则&#xff1a; 允许的字符 由…...

google chrome 中 fcitx5 候选框不跟随光标

我的电脑&#xff1a;ubuntu22.04&#xff0c;窗口系统&#xff1a;wayland 2025/4/26 号更新的谷歌浏览器 今天打开浏览器发现输入法的候选框固定在左上角不动了&#xff0c;一番折腾&#xff0c;发现解决办法如下&#xff1a; 在搜索框中输入 about:flags搜索 wayland&#…...

深入浅出提示词工程(结合 DeepSeek)

提示词工程 Prompt 即提示、指令&#xff0c;所以提示工程也叫「指令工程」 用户输入的问题称为 Prompt&#xff0c;本文主要探讨 System Prompt&#xff08;我将其翻译成「系统预设」&#xff09; 使用 Prompt 的目的 直接提问 如「我该学 Vue 还是 React&#xff1f;」&…...

OpenVLA:大语言模型用于机器人操控的经典开源作品

TL;DR 2024 年斯坦福大学提出的 OpenVLA&#xff0c;基于大语言模型实现机器人操控&#xff0c;代码完全开源。 Paper Notes Name&#xff1a;OpenVLA: An Open-Source Vision-Language-Action ModelURL&#xff1a;https://openvla.github.io/作者&#xff1a;斯坦福&#…...

数值分析、数值代数之追赶法

数值分析、数值代数之追赶法 MATLAB 中&#xff0c;diag 函数用法追赶法推导过程代码运行过程 MATLAB 中&#xff0c;diag 函数用法 在 MATLAB 中&#xff0c;diag 函数用于处理矩阵的对角线元素或创建对角矩阵。以下是其常见的用法&#xff1a; 1.提取矩阵的对角线元素 2.创…...

深入浅出JVM - Java架构师面试实战

深入浅出JVM - Java架构师面试实战 本文通过模拟一位拥有十年Java研发经验的资深架构师马架构与面试官之间的对话&#xff0c;深入探讨了JVM的核心知识点。涵盖内存结构、垃圾回收算法、垃圾回收器、内存调优工具及参数配置等关键领域。 第一轮提问 面试官&#xff1a; 马架…...

Qt网络数据解析方法总结

在Qt中解析网络数据通常涉及接收原始字节流&#xff0c;并将其转换为有意义的应用层数据。以下是详细步骤和示例&#xff1a; 1. 网络数据接收 使用QTcpSocket或QUdpSocket接收数据&#xff0c;通过readyRead()信号触发读取&#xff1a; // 创建TCP Socket并连接信号 QTcpSo…...

[AHOI2001] 质数和分解

import java.util.*;public class Main {static int[] ss new int[201];public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNextInt()) { int n sc.nextInt();int num 0; // 记录质数个数int[] dp new int[201];dp[0] 1;for (in…...

说一下Drop与delete区别

在数据库操作里&#xff0c;DROP与DELETE是两个重要且功能不同的命令&#xff0c;以下为你详细介绍二者的区别&#xff1a; 功能层面 DROP&#xff1a;此命令用于删除数据库、表、视图、索引等数据库对象。一旦执行&#xff0c;数据库对象就会被彻底删除&#xff0c;其定义和…...