Linux容器技术详解
容器技术基础
什么是容器
容器是一种轻量级的虚拟化技术,它将应用程序及其依赖(库、二进制文件、配置文件等)打包在一个独立的单元中,可以在任何支持容器运行时的环境中一致地运行。
Docker官网:https://www.docker.com/
与传统虚拟机相比,容器具有以下特点:
- 轻量级:容器共享主机操作系统内核,不需要完整的操作系统副本,因此启动速度快、资源占用少。
- 可移植性:容器封装了应用及其依赖,可以在不同环境中一致运行,解决了"在我的机器上能运行"的问题。
- 隔离性:容器提供了进程、文件系统、网络等资源的隔离,但隔离程度低于虚拟机。
- 高效性:容器可以在同一主机上高密度部署,提高资源利用率。
- 快速部署:容器可以快速启动和停止,支持快速扩展和缩减。
容器与虚拟机的区别
容器和虚拟机是两种不同的虚拟化技术,它们有以下主要区别:
特性 | 容器 | 虚拟机 |
---|---|---|
虚拟化级别 | 操作系统级虚拟化 | 硬件级虚拟化 |
内核 | 共享主机内核 | 每个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采用客户端-服务器架构,主要组件包括:
- Docker客户端(Client):用户通过命令行或API与Docker交互的接口。
- Docker守护进程(Daemon):运行在主机上的后台服务,管理容器的构建、运行和分发。
- Docker镜像(Images):容器的只读模板,包含运行容器所需的文件系统和配置。
- Docker容器(Containers):镜像的运行实例,包含应用及其运行环境。
- 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"]
最佳实践
- 使用多阶段构建:减小最终镜像大小
# 构建阶段
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;"]
- 合并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/*
- 使用.dockerignore:排除不需要的文件
# .dockerignore示例
node_modules
npm-debug.log
Dockerfile
.git
.gitignore
README.md
- 使用特定标签而非latest:确保版本一致性
# 不推荐
FROM ubuntu# 推荐
FROM ubuntu:20.04
- 最小化层数和大小:优化构建速度和镜像大小
# 使用轻量级基础镜像
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集群由以下组件组成:
-
控制平面组件:
- kube-apiserver:API服务器,是控制平面的前端。
- etcd:一致且高可用的键值存储,用于存储集群数据。
- kube-scheduler:监视新创建的Pod,并决定在哪个节点上运行。
- kube-controller-manager:运行控制器进程,如节点控制器、副本控制器等。
- cloud-controller-manager:与云提供商的API交互。
-
节点组件:
- 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
容器安全
容器安全是容器技术应用中的重要考虑因素。
容器安全最佳实践
-
使用最小基础镜像:
- 使用Alpine或Distroless等最小化镜像
- 减少攻击面和漏洞风险
-
定期更新镜像:
- 保持基础镜像和依赖的更新
- 使用自动化工具扫描镜像漏洞
-
不要以root用户运行容器:
# 在Dockerfile中创建非root用户 RUN adduser -D appuser USER appuser
-
限制容器资源:
# 限制CPU和内存 docker run --cpus=0.5 --memory=512m nginx
-
使用只读文件系统:
# 使用只读文件系统,只有特定目录可写 docker run --read-only --tmpfs /tmp nginx
-
使用安全扫描工具:
- Clair
- Trivy
- Anchore Engine
- Docker Bench for Security
-
实施网络分段:
- 使用自定义网络隔离容器
- 限制容器间通信
-
使用安全计算模式(seccomp):
# 使用seccomp配置文件 docker run --security-opt seccomp=/path/to/seccomp.json nginx
-
限制容器能力(capabilities):
# 移除所有能力并只添加必要的能力 docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx
-
使用内容信任和镜像签名:
# 启用Docker内容信任 export DOCKER_CONTENT_TRUST=1 docker push myregistry.com/myimage:1.0
容器安全工具
-
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
-
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
-
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支持多种网络模式:
-
Bridge网络:默认网络模式,容器通过网桥连接。
# 创建自定义桥接网络 docker network create --driver bridge my-bridge-network# 使用自定义网络启动容器 docker run --network my-bridge-network nginx
-
Host网络:容器使用主机的网络命名空间。
# 使用host网络启动容器 docker run --network host nginx
-
None网络:容器没有网络接口。
# 使用none网络启动容器 docker run --network none nginx
-
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普通按钮(默…...
asp.net core api RESTful 风格控制器
在 ASP.NET Core API 中,遵循 RESTful 风格的控制器一般具备以下几个关键特征: ✅ RESTful 风格控制器的命名规范 控制器命名 使用 复数名词,表示资源集合,如 ProductsController、UsersController。 路由风格 路由使用 [Rout…...
智能合约调用全景实战:前端 JS 与后端 Java 两种方式全面解析
目录 前言前端调用以太坊合约新建一个智能合约将合约部署到Hardhat本地链前端(HTML + JavaScript)调用合约后端调用以太坊合约生成java类调用智能合约(maven 插件方式)不生成Java类,通过合约ABI直接调用智能合约前后端调用方式对比开发建议结语前言 随着 Web3 的兴起,越…...
Javascript:WebAPI
获取网页元素 queryselector queryselector是 JavaScript 中用于选择 DOM 元素的重要方法,它允许使用 CSS 选择器语法来查找页面中的元素。 一般queryselector获取的元素都是html中第一个选择器的元素 支持选择器类型:类选择器(.class) ,…...
(4)python爬虫--JsonPath
文章目录 前言一、安装JsonPath库第一步: 打开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(前提是已安装 NVIDIA 驱动): 在 CentOS 上配置 Docker 使用 NVIDIA GPU 本文介绍如何在已安装 NVIDIA 驱动的 CentOS 系统中,配置 Docker 使用 GPU 资源进行加速。 ✅ 前提条件 已安装 Cent…...
JAVA Spring MVC+Mybatis Spring MVC的工作流程*
目录 注解总结 将传送到客户端的数据转成json数据 **描述一下Spring MVC的工作流程** 1。属性赋值 BeanUtils.copyProperties(addUserDTO,user); 添加依赖: spring web、mybatis framework、mysql driver Controller和ResponseBody优化 直接改成RestControl…...
【人工智能】DeepSeek解码:揭秘AI大模型训练的创新密码
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 DeepSeek作为开源AI领域的先锋,以其高效、低成本的大模型训练技术震撼业界。本文深入剖析DeepSeek-V3和R1模型的训练密码,聚焦其创新的混…...
Java 方法向 Redis 里操作字符串有什么需要注意的?
在 Java 开发中,Redis 作为高性能的键值存储数据库,常被用于缓存数据、处理高并发场景等。当我们使用 Java 方法向 Redis 中操作字符串类型数据时,有许多关键要点需要格外注意。这些要点不仅关系到代码的正确性和性能,还影响着整个…...
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 介绍与使用
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. LoadRunner 是什么?2. LoadRunner 安装前提:浏览器的选择 —— IE / 360极速浏览器…...
Linux面试题集合(6)
创建多级目录或者同级目录 mkdir -p 文件名/文件名/文件名 mkdir -p 文件名 文件名 文件名 Linux创建一个文件 touch 文件名 DOS命令创建文件 echo 内容>文件名(创建一个有内容的文件) echo >文件名(创建一个没有内容的文件)…...
技术测评:小型单文件加密工具的功能解析
最近在测试一款名为OEMexe的文件加密工具,发现它确实有一些独特之处值得分享。这款软件体积非常小巧,仅209KB,属于绿色单文件版程序,无需安装即可直接运行。 主要特点 多格式支持:能够处理多种常见文件格式࿰…...
06、基础入门-SpringBoot-依赖管理特性
06、基础入门-SpringBoot-依赖管理特性 Spring Boot 的依赖管理特性是其核心优势之一,极大地简化了项目的构建和维护过程。以下是其主要特点: ## 1. 父项目依赖管理 ### 1.1 继承 spring-boot-starter-parent 在 pom.xml 文件中,通过继承 spr…...
基于 Python 的界面程序复现:标准干涉槽型设计计算及仿真
基于 Python 的界面程序复现:标准干涉槽型设计计算及仿真 在工业设计与制造领域,刀具的设计与优化是提高生产效率和产品质量的关键环节之一。本文将介绍如何使用 Python 复现一个用于标准干涉槽型设计计算及仿真的界面程序,旨在帮助工程师和…...
我的创作纪念日——《惊变256天》
我的创作纪念日——《惊变256天》 机缘收获日常成就憧憬 最近,博主收到了 CSDN 发来的系统消息,这才惊觉,自上次第128天创作纪念日之后,竟又悄然走过了 128 天。站在 256 天这个颇具意义的里程碑前回望,博主在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.电话号码的字母组合 回溯法理论基础 回溯法 回溯法也可以叫做回溯搜索法,它是一…...
LeetCode --- 156双周赛
题目列表 3541. 找到频率最高的元音和辅音 3542. 将所有元素变为 0 的最少操作次数 3543. K 条边路径的最大边权和 3544. 子树反转和 一、找到频率最高的元音和辅音 分别统计元音和辅音的出现次数最大值,然后相加即可,代码如下 // C class Solution {…...
第五项修炼:打造学习型组织
最近一直接到的需求,都是公司董事长或总经理都特别推崇《第五项修炼:打造学习型组织》的内容,让各个层级的管理者都持续学习、应用、实践。我不禁开始反思,这背后到底隐藏着什么原因? 随着商业环境的变化和复杂性的增加…...
Bellman - Ford 算法与 SPFA 算法求解最短路径问题 ——从零开始的图论讲解(4)
目录 前言 为什么Dijkstra算法面对负权值图会有误差??? 举例说明 什么是Bellman -Ford算法? BF算法的核心思想 什么是松弛 为什么最多松弛N-1次? 代码实现 举例 初始状态(dist[] 数组) 第 1 轮松弛(遍历所有边) …...
Python训练营打卡 Day27
函数专题2:装饰器 知识点回顾: 装饰器的思想:进一步复用函数的装饰器写法注意内部函数的返回值 昨天我们接触到了函数大部分的功能,然后在你日常ctrl点进某个复杂的项目,发现函数上方有一个xxx,它就是装饰器 装饰器本质…...
初识计算机网络。计算机网络基本概念,分类,性能指标
初识计算机网络。计算机网络基本概念,分类,性能指标 本系列博客源自作者在大二期末复习计算机网络时所记录笔记,看的视频资料是B站湖科大教书匠的计算机网络微课堂,祝愿大家期末都能考一个好成绩! 视频链接地址 一、…...
5月16日day27打卡
函数专题2:装饰器 知识点回顾: 装饰器的思想:进一步复用函数的装饰器写法注意内部函数的返回值 作业: 编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值) logger def …...
【生成式AI文本生成实战】DeepSeek系列应用深度解析
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...
【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年渗透测试面试题总结-安恒[实习]安全服务工程师(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 安恒[实习]安全服务工程师 1. SQLMap爆出当前库名的参数是什么? 2. Nmap探测系统的参数&am…...
在 Visual Studio Code (VSCode) 中配置 MCP(Model Context Protocol)
前提条件 安装 VSCode:确保已安装最新版本的 VSCode(建议使用 1.99 或以上版本,支持 MCP)。安装 GitHub Copilot 扩展:MCP 通常与 GitHub Copilot 的代理模式(Agent Mode)结合使用,…...
顶层架构 - 消息集群推送方案
一、推送基础概念简述 在即时通讯(IM)系统中,最基础的一件事就是“如何把消息推送给用户”。为了实现这个过程,我们要先了解两种常见的网络通信方式:HTTP 和 WebSocket。 1. HTTP 是什么? HTTP 就像一次性…...
C++性能测试工具——Vtune等的介绍
一、介绍 我们在前面的相关文章中对C性能的测试和分析工具(见“C性能测试工具gprof和gperftools基础”等)有一个初步的了解和应用,其实类似的相关工具还有不少。为了进一步的让开发者们掌握更多的相关性能测试分析相关的方法,对另…...
车道线检测----CLRKDNet
今天的最后一篇 车道线检测系列结束 CLRKDNet:通过知识蒸馏加速车道检测 摘要:道路车道是智能车辆视觉感知系统的重要组成部分,在安全导航中发挥着关键作用。在车道检测任务中,平衡精度与实时性能至关重要,但现有方法…...
【AI模型部署】
解决python引入huggingface_hub模块下载超时问题 背景问题解决 背景 AMD Ryzen™ AI处理器通过独特的NPUGPU异构架构,为AI工作负载提供强大的并行计算能力。本方案展示了如何将YOLOv8目标检测、RCAN超分辨率重建和Stable Diffusion文生图三类模型分别部署到NPU和GP…...
排序01:多目标模型
用户-笔记的交互 对于每篇笔记,系统记录曝光次数、点击次数、点赞次数、收藏次数、转发次数。 点击率点击次数/曝光次数 点赞率点赞次数/点击次数 收藏率收藏次数/点击次数 转发率转发次数/点击次数 转发是相对较少的,但是非常重要,例如转发…...
电子电器架构 --- Zonal架构正在开创汽车电子设计新时代
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?
阅读和解析 TCC(Tiny C Compiler) 的源代码需要对编译器的基本工作原理和代码结构有一定的了解。以下是分步骤的指南,帮助你更高效地学习和理解 TCC 的源代码: 1. 前置知识准备 C 语言基础:TCC 是用 C 语言编写的&…...
Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?
引言:泛型的“魔术”与类型擦除的困境 在 Java 中,泛型为开发者提供了类型安全的集合操作,但其背后的**类型擦除(Type Erasure)**机制却常常让人困惑。你是否遇到过这样的场景? 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 语言特点(跨平台、面向对象、自动内存管理) JVM、JRE、JDK 的作用与区别 开发环境搭建(安装 JDK、配置环境变量、IDE 使用) 2. 基础语法(已经学习) 变量与数据类型&a…...
MGX:多智能体管理开发流程
MGX的多智能体团队如何通过专家混合系统采用全新方法,彻底改变开发流程,与当前的单一智能体工具截然不同。 Lovable和Cursor在自动化我们的特定开发流程方面取得了巨大飞跃,但问题是它们仅解决软件开发的单一领域。 这就是MGX(MetaGPT X)的用武之地,它是一种正在重新定…...
2025第三届盘古石杯初赛(计算机部分)
前言 比赛的时候时间不对,打一会干一会,导致比赛时候思路都跟不上,赛后简单复现一下,希望大家批批一下 计算机取证 1、分析贾韦码计算机检材,计算机系统Build版本为?【标准格式:19000】 183…...
XML介绍及常用c及c++库
一.xml概述 1.什么是XML? XML(eXtensible Markup Language)是一种标记语言,1998 年 2 月:XML 1.0 发布,用于存储和传输结构化数据。与HTML专注于数据显示不同,XML专注于数据本身及其结构。 它…...
动态规划-63.不同路径II-力扣(LeetCode)
一、题目解析 与62.不同路径不同的一点是现在网格中有了障碍物,其他的并没有什么不同 二、算法解析 1.状态表示 dp[i][j]表示:到[i,j]位置时,不同的路径数 2.状态转移方程 由于多了障碍物,所以我们要判断是否遇到障碍物 3.初…...
海盗王3.0的数据库3合1并库处理方案
原版的海盗王数据库有3个accountserver,gamedb,tradedb,对应到是账号数据库,游戏数据库,商城数据库。 一直都有个想法,如何把这3个库合并到一起,这样可以实现一些功能。 涉及到sqlserver的数据库…...
Vue百日学习计划Day16-18天详细计划-Gemini版
重要提示: 番茄时钟: 每个番茄钟为25分钟学习,之后休息5分钟。每完成4个番茄钟,进行一次15-30分钟的长休息。动手实践: DOM 操作和事件处理的理解高度依赖于实际编码。请务必在浏览器中创建 HTML 页面,并配…...
【C++】15.并发支持库
本篇内容参考自cplusplus 1. thread 1.1 thread thread库底层是对各个系统的线程库(Linux下的pthread库和Windows下Thread库)进行封装。C11thread库的第一个特点是可以跨平台,第二个特点是Linux和Windows下提供的线程库都是面向过程的&…...