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

Linux容器技术详解

容器技术基础

什么是容器

容器是一种轻量级的虚拟化技术,它将应用程序及其依赖(库、二进制文件、配置文件等)打包在一个独立的单元中,可以在任何支持容器运行时的环境中一致地运行。

Docker官网:https://www.docker.com/

与传统虚拟机相比,容器具有以下特点:

  1. 轻量级:容器共享主机操作系统内核,不需要完整的操作系统副本,因此启动速度快、资源占用少。
  2. 可移植性:容器封装了应用及其依赖,可以在不同环境中一致运行,解决了"在我的机器上能运行"的问题。
  3. 隔离性:容器提供了进程、文件系统、网络等资源的隔离,但隔离程度低于虚拟机。
  4. 高效性:容器可以在同一主机上高密度部署,提高资源利用率。
  5. 快速部署:容器可以快速启动和停止,支持快速扩展和缩减。

容器与虚拟机的区别

容器和虚拟机是两种不同的虚拟化技术,它们有以下主要区别:

特性容器虚拟机
虚拟化级别操作系统级虚拟化硬件级虚拟化
内核共享主机内核每个VM有独立内核
资源开销轻量级,MB级别重量级,GB级别
启动时间秒级分钟级
隔离性进程级隔离完全隔离
安全性相对较低较高
性能接近原生有一定损耗
操作系统支持限于主机内核兼容的OS几乎任何OS

Linux容器的核心技术

Linux容器技术基于以下几个核心内核特性:

1. Namespaces(命名空间)

命名空间提供了进程隔离的基础,Linux内核支持以下几种命名空间:

  • PID Namespace:进程ID隔离,容器内的进程看不到容器外的进程。
  • Network Namespace:网络栈隔离,每个容器有自己的网络设备、IP地址、路由表等。
  • Mount Namespace:文件系统挂载点隔离,容器有自己的文件系统视图。
  • UTS Namespace:主机名和域名隔离,容器可以有自己的主机名。
  • IPC Namespace:进程间通信资源隔离,容器内的进程只能与同一容器内的进程通信。
  • User Namespace:用户和组ID隔离,容器内外的用户ID可以映射,提高安全性。
  • Cgroup Namespace:控制组隔离,简化容器内进程对Cgroup的视图。
2. Cgroups(控制组)

Cgroups允许限制和监控进程组使用的资源,包括:

  • CPU:限制CPU使用率和调度优先级。
  • 内存:限制内存使用量和交换空间。
  • 磁盘I/O:限制读写速率和优先级。
  • 网络:通过tc(Traffic Control)限制网络带宽。
  • 设备:控制对设备的访问权限。
3. Union File System(联合文件系统)

联合文件系统允许将多个目录层叠在一起,形成一个统一的视图,是容器镜像分层存储的基础:

  • OverlayFS:现代Linux发行版中最常用的联合文件系统。
  • AUFS:早期Docker使用的联合文件系统。
  • Btrfs:支持写时复制和快照功能的文件系统。
  • ZFS:高级文件系统,支持数据压缩、重复数据删除等特性。
4. Seccomp(安全计算模式)

Seccomp限制容器内进程可以使用的系统调用,减少攻击面:

# 示例:使用seccomp配置文件启动容器
docker run --security-opt seccomp=/path/to/seccomp.json nginx
5. Capabilities(能力)

Linux Capabilities将传统的超级用户权限分解为更细粒度的权限集合,容器可以只获得必要的权限:

# 示例:移除所有能力并只添加必要的能力
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

Docker容器技术

Docker是最流行的容器平台,它简化了容器的创建、部署和管理。

Docker架构

Docker采用客户端-服务器架构,主要组件包括:

  1. Docker客户端(Client):用户通过命令行或API与Docker交互的接口。
  2. Docker守护进程(Daemon):运行在主机上的后台服务,管理容器的构建、运行和分发。
  3. Docker镜像(Images):容器的只读模板,包含运行容器所需的文件系统和配置。
  4. Docker容器(Containers):镜像的运行实例,包含应用及其运行环境。
  5. Docker仓库(Registry):存储和分发Docker镜像的服务,如Docker Hub。

Docker安装

在不同Linux发行版上安装Docker:

Ubuntu/Debian
# 更新包索引
sudo apt update# 安装依赖
sudo apt install apt-transport-https ca-certificates curl software-properties-common# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加Docker仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 更新包索引
sudo apt update# 安装Docker
sudo apt install docker-ce docker-ce-cli containerd.io# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker# 验证安装
sudo docker run hello-world
CentOS/RHEL
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker# 验证安装
sudo docker run hello-world
Fedora
# 安装依赖
sudo dnf -y install dnf-plugins-core# 添加Docker仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo# 安装Docker
sudo dnf install docker-ce docker-ce-cli containerd.io# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker# 验证安装
sudo docker run hello-world

Docker基本命令

镜像管理
# 搜索镜像
docker search nginx# 拉取镜像
docker pull nginx:latest# 列出本地镜像
docker images# 删除镜像
docker rmi nginx:latest# 构建镜像
docker build -t myapp:1.0 .# 保存镜像到文件
docker save -o nginx.tar nginx:latest# 从文件加载镜像
docker load -i nginx.tar# 标记镜像
docker tag nginx:latest myregistry.com/nginx:v1
容器管理
# 创建并启动容器
docker run -d --name webserver -p 80:80 nginx# 列出运行中的容器
docker ps# 列出所有容器(包括已停止的)
docker ps -a# 启动/停止/重启容器
docker start webserver
docker stop webserver
docker restart webserver# 删除容器
docker rm webserver# 进入容器
docker exec -it webserver bash# 查看容器日志
docker logs webserver# 查看容器详细信息
docker inspect webserver# 查看容器资源使用情况
docker stats webserver
数据管理
# 创建数据卷
docker volume create mydata# 列出数据卷
docker volume ls# 查看数据卷详情
docker volume inspect mydata# 删除数据卷
docker volume rm mydata# 使用数据卷挂载
docker run -d --name db -v mydata:/var/lib/mysql mysql:5.7# 使用主机目录挂载
docker run -d --name web -v /host/path:/container/path nginx
网络管理
# 创建网络
docker network create mynetwork# 列出网络
docker network ls# 查看网络详情
docker network inspect mynetwork# 删除网络
docker network rm mynetwork# 连接容器到网络
docker network connect mynetwork webserver# 断开容器与网络的连接
docker network disconnect mynetwork webserver# 使用特定网络启动容器
docker run -d --name db --network mynetwork mysql:5.7

Dockerfile详解

Dockerfile是构建Docker镜像的脚本,包含一系列指令和参数。

基本指令
# 基础镜像
FROM ubuntu:20.04# 维护者信息
LABEL maintainer="your-email@example.com"# 设置工作目录
WORKDIR /app# 复制文件
COPY . .
ADD https://example.com/file.tar.gz /app/# 运行命令
RUN apt-get update && \apt-get install -y python3 python3-pip && \pip3 install -r requirements.txt && \apt-get clean && \rm -rf /var/lib/apt/lists/*# 设置环境变量
ENV NODE_ENV=production \PORT=3000# 暴露端口
EXPOSE 3000# 定义卷
VOLUME ["/data"]# 设置用户
USER nobody# 健康检查
HEALTHCHECK --interval=5m --timeout=3s \CMD curl -f http://localhost:3000/ || exit 1# 入口点
ENTRYPOINT ["python3"]# 默认命令
CMD ["app.py"]
最佳实践
  1. 使用多阶段构建:减小最终镜像大小
# 构建阶段
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build# 生产阶段
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  1. 合并RUN指令:减少镜像层数
# 不推荐
RUN apt-get update
RUN apt-get install -y package1
RUN apt-get install -y package2
RUN apt-get clean# 推荐
RUN apt-get update && \apt-get install -y package1 package2 && \apt-get clean && \rm -rf /var/lib/apt/lists/*
  1. 使用.dockerignore:排除不需要的文件
# .dockerignore示例
node_modules
npm-debug.log
Dockerfile
.git
.gitignore
README.md
  1. 使用特定标签而非latest:确保版本一致性
# 不推荐
FROM ubuntu# 推荐
FROM ubuntu:20.04
  1. 最小化层数和大小:优化构建速度和镜像大小
# 使用轻量级基础镜像
FROM alpine:3.14# 安装必要的包并清理
RUN apk add --no-cache python3 py3-pip

Docker Compose

Docker Compose是一个用于定义和运行多容器Docker应用的工具。

安装Docker Compose
# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose# 验证安装
docker-compose --version
docker-compose.yml示例
version: '3'services:web:build: ./webports:- "80:80"depends_on:- dbenvironment:- DATABASE_URL=postgres://postgres:password@db:5432/mydbvolumes:- ./web:/codenetworks:- frontend- backenddb:image: postgres:13environment:- POSTGRES_PASSWORD=password- POSTGRES_DB=mydbvolumes:- postgres_data:/var/lib/postgresql/datanetworks:- backendredis:image: redis:6networks:- backendnetworks:frontend:backend:volumes:postgres_data:
Docker Compose命令
# 启动服务
docker-compose up -d# 查看服务状态
docker-compose ps# 查看服务日志
docker-compose logs# 停止服务
docker-compose stop# 启动服务
docker-compose start# 重启服务
docker-compose restart# 停止并删除容器、网络
docker-compose down# 停止并删除容器、网络、卷
docker-compose down -v# 构建或重建服务
docker-compose build# 执行命令
docker-compose exec web bash# 查看配置
docker-compose config

Kubernetes容器编排

Kubernetes(K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。

Kubernetes架构

Kubernetes集群由以下组件组成:

  1. 控制平面组件

    • kube-apiserver:API服务器,是控制平面的前端。
    • etcd:一致且高可用的键值存储,用于存储集群数据。
    • kube-scheduler:监视新创建的Pod,并决定在哪个节点上运行。
    • kube-controller-manager:运行控制器进程,如节点控制器、副本控制器等。
    • cloud-controller-manager:与云提供商的API交互。
  2. 节点组件

    • kubelet:确保容器在Pod中运行。
    • kube-proxy:维护节点上的网络规则,实现服务抽象。
    • 容器运行时:如Docker、containerd、CRI-O等,负责运行容器。

Minikube安装

Minikube是一个工具,可以在本地运行Kubernetes:

# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube# 安装kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl# 启动Minikube
minikube start# 验证安装
kubectl get nodes

Kubernetes基本概念

Pod

Pod是Kubernetes中最小的可部署单元,可以包含一个或多个容器:

# pod.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-podlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.19ports:- containerPort: 80
# 创建Pod
kubectl apply -f pod.yaml# 查看Pod
kubectl get pods# 查看Pod详情
kubectl describe pod nginx-pod# 删除Pod
kubectl delete pod nginx-pod
Deployment

Deployment提供了Pod的声明式更新和扩展能力:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.19ports:- containerPort: 80
# 创建Deployment
kubectl apply -f deployment.yaml# 查看Deployment
kubectl get deployments# 扩展Deployment
kubectl scale deployment nginx-deployment --replicas=5# 更新Deployment
kubectl set image deployment/nginx-deployment nginx=nginx:1.20# 查看更新状态
kubectl rollout status deployment/nginx-deployment# 回滚更新
kubectl rollout undo deployment/nginx-deployment
Service

Service定义了Pod的访问方式:

# service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- port: 80targetPort: 80type: ClusterIP  # 可选值:ClusterIP, NodePort, LoadBalancer, ExternalName
# 创建Service
kubectl apply -f service.yaml# 查看Service
kubectl get services# 查看Service详情
kubectl describe service nginx-service# 删除Service
kubectl delete service nginx-service
ConfigMap和Secret

ConfigMap用于存储非敏感配置,Secret用于存储敏感信息:

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: app-config
data:app.properties: |environment=productionlog_level=infodatabase.properties: |host=db.example.comport=5432
# secret.yaml
apiVersion: v1
kind: Secret
metadata:name: app-secret
type: Opaque
data:username: YWRtaW4=  # base64编码的"admin"password: cGFzc3dvcmQ=  # base64编码的"password"
# 创建ConfigMap和Secret
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml# 在Pod中使用ConfigMap
apiVersion: v1
kind: Pod
metadata:name: app-pod
spec:containers:- name: appimage: myapp:1.0volumeMounts:- name: config-volumemountPath: /etc/configenv:- name: LOG_LEVELvalueFrom:configMapKeyRef:name: app-configkey: log_levelvolumes:- name: config-volumeconfigMap:name: app-config
# 在Pod中使用Secret
apiVersion: v1
kind: Pod
metadata:name: app-pod
spec:containers:- name: appimage: myapp:1.0env:- name: DB_USERNAMEvalueFrom:secretKeyRef:name: app-secretkey: username- name: DB_PASSWORDvalueFrom:secretKeyRef:name: app-secretkey: password
持久卷(PV)和持久卷声明(PVC)

PV提供了存储资源,PVC是对PV的请求:

# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-volume
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainhostPath:path: /data/pv0001
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pv-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
# 在Pod中使用PVC
apiVersion: v1
kind: Pod
metadata:name: app-pod
spec:containers:- name: appimage: myapp:1.0volumeMounts:- name: data-volumemountPath: /datavolumes:- name: data-volumepersistentVolumeClaim:claimName: pv-claim

Helm包管理器

Helm是Kubernetes的包管理器,简化了应用的部署和管理:

# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash# 添加仓库
helm repo add stable https://charts.helm.sh/stable# 更新仓库
helm repo update# 搜索Chart
helm search repo nginx# 安装Chart
helm install my-nginx stable/nginx# 查看已安装的Release
helm list# 升级Release
helm upgrade my-nginx stable/nginx --set replicaCount=3# 回滚Release
helm rollback my-nginx 1# 卸载Release
helm uninstall my-nginx# 创建自己的Chart
helm create mychart

容器安全

容器安全是容器技术应用中的重要考虑因素。

容器安全最佳实践

  1. 使用最小基础镜像

    • 使用Alpine或Distroless等最小化镜像
    • 减少攻击面和漏洞风险
  2. 定期更新镜像

    • 保持基础镜像和依赖的更新
    • 使用自动化工具扫描镜像漏洞
  3. 不要以root用户运行容器

    # 在Dockerfile中创建非root用户
    RUN adduser -D appuser
    USER appuser
    
  4. 限制容器资源

    # 限制CPU和内存
    docker run --cpus=0.5 --memory=512m nginx
    
  5. 使用只读文件系统

    # 使用只读文件系统,只有特定目录可写
    docker run --read-only --tmpfs /tmp nginx
    
  6. 使用安全扫描工具

    • Clair
    • Trivy
    • Anchore Engine
    • Docker Bench for Security
  7. 实施网络分段

    • 使用自定义网络隔离容器
    • 限制容器间通信
  8. 使用安全计算模式(seccomp)

    # 使用seccomp配置文件
    docker run --security-opt seccomp=/path/to/seccomp.json nginx
    
  9. 限制容器能力(capabilities)

    # 移除所有能力并只添加必要的能力
    docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
    
  10. 使用内容信任和镜像签名

    # 启用Docker内容信任
    export DOCKER_CONTENT_TRUST=1
    docker push myregistry.com/myimage:1.0
    

容器安全工具

  1. Docker Bench for Security

    # 运行Docker安全基准测试
    docker run --net host --pid host --userns host --cap-add audit_control \-v /var/lib:/var/lib \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/lib/systemd:/usr/lib/systemd \-v /etc:/etc --label docker_bench_security \docker/docker-bench-security
    
  2. Trivy

    # 安装Trivy
    sudo apt-get install wget apt-transport-https gnupg lsb-release
    wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
    echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
    sudo apt-get update
    sudo apt-get install trivy# 扫描镜像
    trivy image nginx:latest
    
  3. Falco

    # 安装Falco
    curl -s https://falco.org/repo/falcosecurity-3672BA8F.asc | apt-key add -
    echo "deb https://download.falco.org/packages/deb stable main" | tee -a /etc/apt/sources.list.d/falcosecurity.list
    apt-get update -y
    apt-get install -y falco# 启动Falco
    systemctl start falco
    

容器网络

容器网络是容器技术的重要组成部分,它使容器能够相互通信以及与外部世界通信。

Docker网络模式

Docker支持多种网络模式:

  1. Bridge网络:默认网络模式,容器通过网桥连接。

    # 创建自定义桥接网络
    docker network create --driver bridge my-bridge-network# 使用自定义网络启动容器
    docker run --network my-bridge-network nginx
    
  2. Host网络:容器使用主机的网络命名空间。

    # 使用host网络启动容器
    docker run --network host nginx
    
  3. None网络:容器没有网络接口。

    # 使用none网络启动容器
    docker run --network none nginx
    
  4. Overlay网络:用于Docker Swarm中的多主机通信。

    # 创建overlay网络
    docker network create --driver overlay my-overlay-network
    

相关文章:

Linux容器技术详解

容器技术基础 什么是容器 容器是一种轻量级的虚拟化技术,它将应用程序及其依赖(库、二进制文件、配置文件等)打包在一个独立的单元中,可以在任何支持容器运行时的环境中一致地运行。 Docker官网:https://www.docker…...

显卡、Cuda和pytorch兼容问题

这里写目录标题 驱动与CUDA版本兼容性问题1. **驱动与CUDA版本兼容性问题**2. **任务特性与硬件适配差异**3. **优化策略与框架配置差异**4. **散热与功耗限制**5. **数据传输与CPU瓶颈**排查建议总结 查询PyTorch中实际使用的CUDA版本**1. 查询PyTorch中实际使用的CUDA版本***…...

仅需三张照片即可生成沉浸式3D购物体验?谷歌电商3D方案全解析

随着消费者对线上购物体验的要求不断提高,传统2D图片已难以满足用户“真实感知商品”的需求。尤其在鞋类、家具、服装等高决策成本的商品上,缺乏空间感和交互性的购物方式成为转化率瓶颈。 谷歌敏锐地捕捉到这一趋势,早在2022年起便开始探索通过生成式AI技术实现“低成本、…...

PIC16F877A LCD1602 DHT11 温湿度读取显示代码 MPLAB

#include <xc.h> #include <stdio.h> #include <stdlib.h> #...

PIC16F18877 的主时钟 设置方法

#include <xc.h>// ========== 配置位设置 ========== // #pragma config FEXTOSC = OFF // 使用内部振荡器 #pragma...

西门子 Teamcenter13 Eclipse RCP 开发 1.3 工具栏 单选按钮

西门子 Teamcenter13 Eclipse RCP 开发 1.3 工具栏 单选按钮 1 配置文件2 插件控制3 命令框架 位置locationURI备注菜单栏menu:org.eclipse.ui.main.menu添加到传统菜单工具栏toolbar:org.eclipse.ui.main.toolbar添加到工具栏 style 值含义显示效果push普通按钮&#xff08;默…...

asp.net core api RESTful 风格控制器

在 ASP.NET Core API 中&#xff0c;遵循 RESTful 风格的控制器一般具备以下几个关键特征&#xff1a; ✅ RESTful 风格控制器的命名规范 控制器命名 使用 复数名词&#xff0c;表示资源集合&#xff0c;如 ProductsController、UsersController。 路由风格 路由使用 [Rout…...

智能合约调用全景实战:前端 JS 与后端 Java 两种方式全面解析

目录 前言前端调用以太坊合约新建一个智能合约将合约部署到Hardhat本地链前端(HTML + JavaScript)调用合约后端调用以太坊合约生成java类调用智能合约(maven 插件方式)不生成Java类,通过合约ABI直接调用智能合约前后端调用方式对比开发建议结语前言 随着 Web3 的兴起,越…...

Javascript:WebAPI

获取网页元素 queryselector queryselector是 JavaScript 中用于选择 DOM 元素的重要方法&#xff0c;它允许使用 CSS 选择器语法来查找页面中的元素。 一般queryselector获取的元素都是html中第一个选择器的元素 支持选择器类型&#xff1a;类选择器(.class) &#xff0c…...

(4)python爬虫--JsonPath

文章目录 前言一、安装JsonPath库第一步&#xff1a; 打开pycharm第二步: 安装jsonpath 二、 jsonpath的基本使用2.1 基础语法2.2 语法测试2.2.1 准备json文件(store.json)2.2.2 jsonpath解析json语法 三、实战练习需求:爬取淘票票上所有的城市3.1 下载城市json文件3.2 解析城市…...

CentOS 上配置 Docker 使用 NVIDIA GPU

CentOS 上配置 Docker 使用 NVIDIA GPU&#xff08;前提是已安装 NVIDIA 驱动&#xff09;&#xff1a; 在 CentOS 上配置 Docker 使用 NVIDIA GPU 本文介绍如何在已安装 NVIDIA 驱动的 CentOS 系统中&#xff0c;配置 Docker 使用 GPU 资源进行加速。 ✅ 前提条件 已安装 Cent…...

JAVA Spring MVC+Mybatis Spring MVC的工作流程*

目录 注解总结 将传送到客户端的数据转成json数据 **描述一下Spring MVC的工作流程** 1。属性赋值 BeanUtils.copyProperties(addUserDTO,user); 添加依赖&#xff1a; spring web、mybatis framework、mysql driver Controller和ResponseBody优化 直接改成RestControl…...

【人工智能】DeepSeek解码:揭秘AI大模型训练的创新密码

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 DeepSeek作为开源AI领域的先锋,以其高效、低成本的大模型训练技术震撼业界。本文深入剖析DeepSeek-V3和R1模型的训练密码,聚焦其创新的混…...

Java 方法向 Redis 里操作字符串有什么需要注意的?​

在 Java 开发中&#xff0c;Redis 作为高性能的键值存储数据库&#xff0c;常被用于缓存数据、处理高并发场景等。当我们使用 Java 方法向 Redis 中操作字符串类型数据时&#xff0c;有许多关键要点需要格外注意。这些要点不仅关系到代码的正确性和性能&#xff0c;还影响着整个…...

C#与KepOPC通讯

使用C#连接KepOPC服务器进行数据读写的基础示例 using System; using Opc; using System.Threading;namespace KepOPCDemo {class Program{static void Main(string[] args){// OPC服务器连接参数string serverName "Kepware.KEPServerEX.V6"; // 根据实际安装的服…...

【软件测试】性能测试 —— 工具篇 LoadRunner 介绍与使用

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. LoadRunner 是什么&#xff1f;2. LoadRunner 安装前提&#xff1a;浏览器的选择 —— IE / 360极速浏览器…...

Linux面试题集合(6)

创建多级目录或者同级目录 mkdir -p 文件名/文件名/文件名 mkdir -p 文件名 文件名 文件名 Linux创建一个文件 touch 文件名 DOS命令创建文件 echo 内容>文件名&#xff08;创建一个有内容的文件&#xff09; echo >文件名&#xff08;创建一个没有内容的文件&#xff09…...

技术测评:小型单文件加密工具的功能解析

最近在测试一款名为OEMexe的文件加密工具&#xff0c;发现它确实有一些独特之处值得分享。这款软件体积非常小巧&#xff0c;仅209KB&#xff0c;属于绿色单文件版程序&#xff0c;无需安装即可直接运行。 主要特点 多格式支持&#xff1a;能够处理多种常见文件格式&#xff0…...

06、基础入门-SpringBoot-依赖管理特性

06、基础入门-SpringBoot-依赖管理特性 Spring Boot 的依赖管理特性是其核心优势之一&#xff0c;极大地简化了项目的构建和维护过程。以下是其主要特点&#xff1a; ## 1. 父项目依赖管理 ### 1.1 继承 spring-boot-starter-parent 在 pom.xml 文件中&#xff0c;通过继承 spr…...

基于 Python 的界面程序复现:标准干涉槽型设计计算及仿真

基于 Python 的界面程序复现&#xff1a;标准干涉槽型设计计算及仿真 在工业设计与制造领域&#xff0c;刀具的设计与优化是提高生产效率和产品质量的关键环节之一。本文将介绍如何使用 Python 复现一个用于标准干涉槽型设计计算及仿真的界面程序&#xff0c;旨在帮助工程师和…...

我的创作纪念日——《惊变256天》

我的创作纪念日——《惊变256天》 机缘收获日常成就憧憬 最近&#xff0c;博主收到了 CSDN 发来的系统消息&#xff0c;这才惊觉&#xff0c;自上次第128天创作纪念日之后&#xff0c;竟又悄然走过了 128 天。站在 256 天这个颇具意义的里程碑前回望&#xff0c;博主在2023 年 …...

Linux 的 UDP 网络编程 -- 回显服务器,翻译服务器

目录 1. 回显服务器 -- echo server 1.1 相关函数介绍 1.1.1 socket() 1.1.2 bind() 1.1.3 recvfrom() 1.1.4 sendto() 1.1.5 inet_ntoa() 1.1.6 inet_addr() 1.2 Udp 服务端的封装 -- UdpServer.hpp 1.3 服务端代码 -- UdpServer.cc 1.4 客户端代码 -- UdpClient.…...

回溯法理论基础 LeetCode 77. 组合 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合

目录 回溯法理论基础 回溯法 回溯法的效率 用回溯法解决的问题 如何理解回溯法 回溯法模板 LeetCode 77. 组合 回溯算法的剪枝操作 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合 回溯法理论基础 回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一…...

LeetCode --- 156双周赛

题目列表 3541. 找到频率最高的元音和辅音 3542. 将所有元素变为 0 的最少操作次数 3543. K 条边路径的最大边权和 3544. 子树反转和 一、找到频率最高的元音和辅音 分别统计元音和辅音的出现次数最大值&#xff0c;然后相加即可&#xff0c;代码如下 // C class Solution {…...

第五项修炼:打造学习型组织

最近一直接到的需求&#xff0c;都是公司董事长或总经理都特别推崇《第五项修炼&#xff1a;打造学习型组织》的内容&#xff0c;让各个层级的管理者都持续学习、应用、实践。我不禁开始反思&#xff0c;这背后到底隐藏着什么原因&#xff1f; 随着商业环境的变化和复杂性的增加…...

Bellman - Ford 算法与 SPFA 算法求解最短路径问题 ——从零开始的图论讲解(4)

目录 前言 为什么Dijkstra算法面对负权值图会有误差??? 举例说明 什么是Bellman -Ford算法? BF算法的核心思想 什么是松弛 为什么最多松弛N-1次? 代码实现 举例 初始状态&#xff08;dist[] 数组&#xff09; 第 1 轮松弛&#xff08;遍历所有边&#xff09; …...

Python训练营打卡 Day27

函数专题2&#xff1a;装饰器 知识点回顾&#xff1a; 装饰器的思想&#xff1a;进一步复用函数的装饰器写法注意内部函数的返回值 昨天我们接触到了函数大部分的功能&#xff0c;然后在你日常ctrl点进某个复杂的项目&#xff0c;发现函数上方有一个xxx,它就是装饰器 装饰器本质…...

初识计算机网络。计算机网络基本概念,分类,性能指标

初识计算机网络。计算机网络基本概念&#xff0c;分类&#xff0c;性能指标 本系列博客源自作者在大二期末复习计算机网络时所记录笔记&#xff0c;看的视频资料是B站湖科大教书匠的计算机网络微课堂&#xff0c;祝愿大家期末都能考一个好成绩&#xff01; 视频链接地址 一、…...

5月16日day27打卡

函数专题2&#xff1a;装饰器 知识点回顾&#xff1a; 装饰器的思想&#xff1a;进一步复用函数的装饰器写法注意内部函数的返回值 作业&#xff1a; 编写一个装饰器 logger&#xff0c;在函数执行前后打印日志信息&#xff08;如函数名、参数、返回值&#xff09; logger def …...

【生成式AI文本生成实战】DeepSeek系列应用深度解析

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…...

【Pandas】pandas DataFrame kurt

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

2025年渗透测试面试题总结-安恒[实习]安全服务工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 安恒[实习]安全服务工程师 1. SQLMap爆出当前库名的参数是什么&#xff1f; 2. Nmap探测系统的参数&am…...

在 Visual Studio Code (VSCode) 中配置 MCP(Model Context Protocol)

前提条件 安装 VSCode&#xff1a;确保已安装最新版本的 VSCode&#xff08;建议使用 1.99 或以上版本&#xff0c;支持 MCP&#xff09;。安装 GitHub Copilot 扩展&#xff1a;MCP 通常与 GitHub Copilot 的代理模式&#xff08;Agent Mode&#xff09;结合使用&#xff0c;…...

顶层架构 - 消息集群推送方案

一、推送基础概念简述 在即时通讯&#xff08;IM&#xff09;系统中&#xff0c;最基础的一件事就是“如何把消息推送给用户”。为了实现这个过程&#xff0c;我们要先了解两种常见的网络通信方式&#xff1a;HTTP 和 WebSocket。 1. HTTP 是什么&#xff1f; HTTP 就像一次性…...

C++性能测试工具——Vtune等的介绍

一、介绍 我们在前面的相关文章中对C性能的测试和分析工具&#xff08;见“C性能测试工具gprof和gperftools基础”等&#xff09;有一个初步的了解和应用&#xff0c;其实类似的相关工具还有不少。为了进一步的让开发者们掌握更多的相关性能测试分析相关的方法&#xff0c;对另…...

车道线检测----CLRKDNet

今天的最后一篇 车道线检测系列结束 CLRKDNet&#xff1a;通过知识蒸馏加速车道检测 摘要&#xff1a;道路车道是智能车辆视觉感知系统的重要组成部分&#xff0c;在安全导航中发挥着关键作用。在车道检测任务中&#xff0c;平衡精度与实时性能至关重要&#xff0c;但现有方法…...

【AI模型部署】

解决python引入huggingface_hub模块下载超时问题 背景问题解决 背景 AMD Ryzen™ AI处理器通过独特的NPUGPU异构架构&#xff0c;为AI工作负载提供强大的并行计算能力。本方案展示了如何将YOLOv8目标检测、RCAN超分辨率重建和Stable Diffusion文生图三类模型分别部署到NPU和GP…...

排序01:多目标模型

用户-笔记的交互 对于每篇笔记&#xff0c;系统记录曝光次数、点击次数、点赞次数、收藏次数、转发次数。 点击率点击次数/曝光次数 点赞率点赞次数/点击次数 收藏率收藏次数/点击次数 转发率转发次数/点击次数 转发是相对较少的&#xff0c;但是非常重要&#xff0c;例如转发…...

电子电器架构 --- Zonal架构正在开创汽车电子设计新时代

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?

阅读和解析 TCC&#xff08;Tiny C Compiler&#xff09; 的源代码需要对编译器的基本工作原理和代码结构有一定的了解。以下是分步骤的指南&#xff0c;帮助你更高效地学习和理解 TCC 的源代码&#xff1a; 1. 前置知识准备 C 语言基础&#xff1a;TCC 是用 C 语言编写的&…...

Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?

引言&#xff1a;泛型的“魔术”与类型擦除的困境 在 Java 中&#xff0c;泛型为开发者提供了类型安全的集合操作&#xff0c;但其背后的**类型擦除&#xff08;Type Erasure&#xff09;**机制却常常让人困惑。你是否遇到过这样的场景&#xff1f; List<String> list …...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习(2)復習3、单词(1)日语(2)日语片假名单词4、对话练习5、单词辨析记录6、总结1、前言 (1)情况说明 自己在今年,在日本留学中,目前在语言学校,…...

Java基础学习

Java 基础大纲 1. Java 概述 Java 语言特点&#xff08;跨平台、面向对象、自动内存管理&#xff09; JVM、JRE、JDK 的作用与区别 开发环境搭建&#xff08;安装 JDK、配置环境变量、IDE 使用&#xff09; 2. 基础语法&#xff08;已经学习&#xff09; 变量与数据类型&a…...

MGX:多智能体管理开发流程

MGX的多智能体团队如何通过专家混合系统采用全新方法,彻底改变开发流程,与当前的单一智能体工具截然不同。 Lovable和Cursor在自动化我们的特定开发流程方面取得了巨大飞跃,但问题是它们仅解决软件开发的单一领域。 这就是MGX(MetaGPT X)的用武之地,它是一种正在重新定…...

2025第三届盘古石杯初赛(计算机部分)

前言 比赛的时候时间不对&#xff0c;打一会干一会&#xff0c;导致比赛时候思路都跟不上&#xff0c;赛后简单复现一下&#xff0c;希望大家批批一下 计算机取证 1、分析贾韦码计算机检材&#xff0c;计算机系统Build版本为&#xff1f;【标准格式&#xff1a;19000】 183…...

XML介绍及常用c及c++库

一.xml概述 1.什么是XML&#xff1f; XML&#xff08;eXtensible Markup Language&#xff09;是一种标记语言&#xff0c;1998 年 2 月&#xff1a;XML 1.0 发布&#xff0c;用于存储和传输结构化数据。与HTML专注于数据显示不同&#xff0c;XML专注于数据本身及其结构。 它…...

动态规划-63.不同路径II-力扣(LeetCode)

一、题目解析 与62.不同路径不同的一点是现在网格中有了障碍物&#xff0c;其他的并没有什么不同 二、算法解析 1.状态表示 dp[i][j]表示&#xff1a;到[i,j]位置时&#xff0c;不同的路径数 2.状态转移方程 由于多了障碍物&#xff0c;所以我们要判断是否遇到障碍物 3.初…...

海盗王3.0的数据库3合1并库处理方案

原版的海盗王数据库有3个accountserver&#xff0c;gamedb&#xff0c;tradedb&#xff0c;对应到是账号数据库&#xff0c;游戏数据库&#xff0c;商城数据库。 一直都有个想法&#xff0c;如何把这3个库合并到一起&#xff0c;这样可以实现一些功能。 涉及到sqlserver的数据库…...

Vue百日学习计划Day16-18天详细计划-Gemini版

重要提示&#xff1a; 番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。动手实践&#xff1a; DOM 操作和事件处理的理解高度依赖于实际编码。请务必在浏览器中创建 HTML 页面&#xff0c;并配…...

【C++】15.并发支持库

本篇内容参考自cplusplus 1. thread 1.1 thread thread库底层是对各个系统的线程库&#xff08;Linux下的pthread库和Windows下Thread库&#xff09;进行封装。C11thread库的第一个特点是可以跨平台&#xff0c;第二个特点是Linux和Windows下提供的线程库都是面向过程的&…...