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

Kubernetes 深入浅出系列 | 容器剖析之容器安全

目录

    • 1、容器真的需要privileged权限吗?
      • 一、什么是 --privileged 权限?
      • 二、privileged 的风险到底有多大?
      • 三、常见需求场景及更安全的替代方式
      • 四、如何判断容器是否真正需要特权?
    • 2、不以 Root 用户运行容器,真的更安全吗?
      • 一、为什么Docker 默认是 root 用户?
      • 二、不以 root 用户运行容器,有何好处?
      • 三、真正的容器安全建议
    • 3、容器安全实践:User Namespace 与 Rootless 技术
      • 一、为什么建议在容器中避免使用 root 用户?
      • 二、 User Namespace 的价值与优势
      • 三、Rootless 容器的进一步增强
      • 四、总结建议
    • 4、Rootless 模式的实践指南(systemd、Kubernetes 场景)
      • 一、 基于 systemd 的 Rootless 容器启动
      • 二、配置 subuid/subgid:UID/GID 映射的前提
      • 三、在 Kubernetes 环境中应用 Rootless 容器

容器提升了交付效率,但不当使用 --privileged 或以 root 用户运行,可能带来严重安全隐患。本文系统解析容器特权机制风险,并介绍 User Namespace 与 Rootless 等实用加固方案,助你构建更安全的容器环境。

1、容器真的需要privileged权限吗?

容器技术的发展极大推动了应用部署与交付的效率。然而,在安全性方面,很多人在构建容器镜像或部署容器时,常常会习惯性地加上 --privileged 参数,却对其实际含义和潜在风险了解不足。

本文将带你深入理解 privileged 权限的本质、风险以及更安全的替代方案。

一、什么是 --privileged 权限?

在默认情况下,容器受到多层隔离,包括 Linux Namespace、cgroups 和 seccomp 等机制,无法访问宿主机的大多数敏感资源。然而,当你为容器添加 --privileged 参数后,这些限制就会被全部解除。

具体来说,–privileged 会:

赋予容器所有 Linux Capabilities;

授权访问宿主机所有设备节点(/dev);

允许容器修改内核参数(如 sysctl)和执行挂载;

如果挂载了 docker.sock,还可以控制宿主机上的 Docker 引擎;

允许加载内核模块、访问 kmsg 等系统级资源。

简而言之,这个参数让容器具备了几乎和宿主机一致的能力。

二、privileged 的风险到底有多大?

从安全角度看,使用 --privileged 就像是在“裸奔”。

它绕过了 Linux Namespace 和 cgroup 的多个隔离机制。一旦容器被攻破,攻击者可以轻松“跳脱”容器,控制整个宿主机。例如:

利用 /dev/kmsg 或内核模块注入绕过安全限制;

利用 nsenter 进入主机其他命名空间;

通过 docker.sock 创建任意特权容器;

利用 cgroup 子系统逃逸至宿主机。

💡结论:非必要,绝不使用 --privileged!

三、常见需求场景及更安全的替代方式

虽然大多数应用并不需要 --privileged,但确实存在一些需要较高权限的场景。下面我们来看几类典型需求,并给出更合理的解决方案。

  1. 需要挂载宿主机目录或设备
    **替代方案:**使用 --cap-add 精细赋权 + 显式挂载 --device
docker run --cap-add=SYS_ADMIN --device=/dev/fuse mycontainer

常用的 Capabilities:

网络配置修改 NET_ADMIN
进程调试、gdb SYS_PTRACE
内核参数修改 SYS_ADMIN(慎用)
创建设备节点 MKNOD
2. 需要访问宿主机 Docker 引擎
该场景风险极高,强烈建议避免将宿主机 Docker socket 暴露给容器。推荐使用 containerd + CRI 接口,通过容器运行时安全隔离访问容器资源,并结合 API 网关或 Sidecar 模式完成管理需求。

  1. 需要进行网络、进程、命名空间调试(如 nsenter)
    **替代方案:**为容器添加 cap_add: SYS_PTRACE 权限,或使用特权较低的调试容器 + hostPID。

    securityContext:capabilities:add: ["SYS_PTRACE"]hostPID: true
    
  2. 在 Kubernetes 中使用特权容器

    更安全方式:

    securityContext:runAsNonRoot: trueallowPrivilegeEscalation: falsecapabilities:drop: ["ALL"]add: ["NET_ADMIN"]  # 按需添加
    

控制入口:
使用 PodSecurity Admission 替代已弃用的 PSP;

或通过 OPA Gatekeeper / Kyverno 强制执行权限规范;

利用 runtimeClass 使用如 gVisor、Kata Containers 实现沙箱隔离;

引入 KubeArmor、Tetragon 等安全模块做系统调用约束;

四、如何判断容器是否真正需要特权?

给出几个建议步骤供参考:

分析容器内应用行为:是否涉及系统级操作?是否访问设备?

在这里插入图片描述

采用最小权限原则:用 --cap-add 和 --device 替代完整特权。

结合 seccomp、AppArmor 或 SELinux 进行约束。

审计 Dockerfile 与运行命令,避免无脑加上 --privileged。

2、不以 Root 用户运行容器,真的更安全吗?

在容器中运行程序时,很多人听说过“不要以 root 用户身份运行”,这句话常被奉为最佳实践。那么,这背后的安全逻辑是什么?

一、为什么Docker 默认是 root 用户?

Docker 默认会以 root 用户运行容器中的进程。这种默认行为有历史与兼容性原因:

容器中的 root 与宿主机 root UID 相同(UID=0),这就意味着容器中运行的 root 用户理论上有机会获取宿主机的 root 权限,尤其当容器配置不当时(如使用 --privileged、挂载宿主机路径等)。

#容器中用户的uid/gid和宿主机上的完全一样;
# docker run -d --name root_example -v /etc:/mnt centos sleep 3600# docker exec -it root_example bash -c "ps -ef | grep sleep"
root          1     0  0 01:14 ?        00:00:00 /usr/bin/coreutils --# ps -ef | grep sleep
root       5473  5443  0 18:14 ?        00:00:00 /usr/bin/coreutils --

虽然容器里root用户的capabilities被限制了一些,但是在容器器中,对于被挂载上来的/eto
目录下的文件,比如说shadow文件,以这个root用户的权限还是可以做修改的。

# docker exec -it root_example bash
[root@9c7b76232c19 /]# ls /mnt/shadow -l
---------- 1 root root 586 Nov 26 13:47 /mnt/shadow[root@9c7b76232c19 /]# echo "hello" >> /mnt/shadow

接着在宿主机上查看/etc/shadow文件已经被修改了,这个例子说明容器中的root用户也有权限修改宿主机上的关键文件。

二、不以 root 用户运行容器,有何好处?

表面上,不以 root 用户运行容器,确实可以减轻以下几类攻击带来的风险:

  • 攻击者即便控制了容器内的应用,由于权限受限,难以访问容器内的系统资源;
  • 降低了通过容器逃逸攻击宿主机的可能性;
  • 配合 Linux 内核的安全模块(如 AppArmor、SELinux、seccomp、capabilities 等)时,效果更佳。

因此,在常规场景下,确实推荐创建一个非特权用户来运行容器进程。
⚠️ 这就“安全”了吗?
事实并非如此简单。
如果你通过如下方式切换用户运行容器:

RUN useradd -m appuser
USER appuser

但却仍使用以下 Docker 启动命令:

docker run --privileged -v /:/host ...

那么,攻击者可以通过容器中的程序或漏洞获得宿主机的 root 权限,即便你不以 root 运行容器进程,因为容器本身拥有过大的能力。

换句话说:

容器的宿主权限(宿主资源访问权限)比容器内进程使用哪个 UID 更关键!

🚨 常见误区举例

误区实际情况
以非 root 用户运行容器就很安全如果容器配置不当(如挂载宿主路径、使用 --privileged),仍然存在严重风险
rootless 容器一定安全如果容器逃逸漏洞存在,攻击者依然有可能通过内核提权等手段取得更高权限
改掉 USER 就够了USER 只是容器中进程的运行身份,和容器整体的特权配置、挂载机制等都有关

三、真正的容器安全建议

  • 避免使用 --privileged 模式运行容器。
  • 限制宿主机目录挂载(尤其是 /, /proc, /sys 等)。
  • 使用用户命名空间(User Namespaces) 实现容器内 root 与宿主机 root 的隔离。
  • 结合 AppArmor、seccomp、SELinux、capabilities 等 限制容器权限。
  • 考虑采用 Rootless 模式运行容器(例如 Podman、Rootless Docker)。

🧩 结语
不以 root 用户运行容器,虽然是一个重要的安全措施,但它不是万能的。真正的容器安全依赖于多层防御(Defense in Depth),包括用户权限、容器配置、内核机制、资源隔离等多个维度。

最安全的容器,不只是“不用 root”,而是“不信任容器内的任何进程”。

3、容器安全实践:User Namespace 与 Rootless 技术

虽然容器中的 root 用户在默认情况下已经被限制了一些 Linux capabilities,但在未启用 User Namespace 的情况下,容器中的 root 用户 UID=0 与宿主机的 root 用户是完全一致的。这意味着,一旦容器内应用存在漏洞,攻击者可能突破容器边界,直接威胁宿主机。

一、为什么建议在容器中避免使用 root 用户?

为了减少此类安全风险,业界普遍建议容器中的进程不要以 root 用户身份运行。然而,在不启用 User Namespace 的情况下,使用非 root 用户虽然能提供隔离,但也带来了一定的 UID/GID 映射管理负担,尤其在多租户平台或 CI/CD 场景下更为复杂。

二、 User Namespace 的价值与优势

现代容器引擎(如 Docker、containerd、Podman)已广泛支持 User Namespace技术,其核心作用是:

  1. 将容器内的 root 用户映射为宿主机上的非特权用户(例如 UID 100000),即使容器被攻破,攻击者也无法直接控制宿主系统资源;
  2. 提升多租户环境下的 UID/GID 分配灵活性,使云原生平台更易于管理容器资源和隔离权限。

三、Rootless 容器的进一步增强

除了在容器内运行非 root 进程,现在主流容器工具(如 Docker、Podman、Buildah、nerdctl 等)都已支持 Rootless 模式运行容器引擎本身。也就是说:

开发者和运维人员可以完全不使用 root 权限,就能创建、运行和管理容器。

这大大降低了容器守护进程本身被攻击的风险,是构建“最小信任容器运行环境”的关键路径之一。


四、总结建议

  • 优先启用 User Namespace,实现容器 root 用户与宿主机权限的真正隔离;
  • 尽量以非 root 用户运行容器内进程
  • 在支持的环境下优先采用 Rootless 模式运行 Docker/Podman 等引擎本身,将宿主机的攻击面进一步压缩到最小。

4、Rootless 模式的实践指南(systemd、Kubernetes 场景)

一、 基于 systemd 的 Rootless 容器启动

在现代 Linux 系统中,推荐使用 systemd --user 启动 Rootless 容器守护进程。以 Rootless Docker 为例:

# 初始化 rootless 环境(仅需一次)
$ dockerd-rootless-setuptool.sh install# 启动 docker rootless 守护进程(通过 systemd user 服务)
$ systemctl --user start docker
$ systemctl --user enable docker

然后添加环境变量,让 CLI 工具连接 rootless docker:

export DOCKER_HOST=unix:///run/user/1000/docker.sock

二、配置 subuid/subgid:UID/GID 映射的前提

要启用 User Namespace 或 Rootless 模式,必须配置 UID/GID 映射。编辑如下两个文件:

/etc/subuid
/etc/subgid

为当前用户配置:

your_user:100000:65536

表示将容器内的 UID 从 0 开始映射到宿主机的 UID 100000,共 65536 个 UID。GID 同理。

你也可以通过 usermod 命令自动添加:

sudo usermod --add-subuids 100000-165536 your_user
sudo usermod --add-subgids 100000-165536 your_user

三、在 Kubernetes 环境中应用 Rootless 容器

✅ CRI-O 支持 User Namespace 和 Rootless
CRI-O 原生支持以非 root 用户运行容器;

需启用内核功能与相应配置,如:

  • enable_userns: true(/etc/crio/crio.conf)
  • 配置 /etc/subuid 和 /etc/subgid

✅ K3s 轻量级 K8s 发行版支持 Rootless

  • K3s 可以通过设置 --rootless 参数启动;
  • 配置参考:https://docs.k3s.io/zh/advanced#%E5%90%AF%E5%8A%A8-rootless-server

✅ kind(Kubernetes IN Docker)
虽然 kind 本身默认使用 Docker,但你可以通过以下方式运行在 Rootless Docker 上:

export DOCKER_HOST=unix:///run/user/1000/docker.sock
kind create cluster

此时整个 kind 集群也运行在非 root 权限容器之上,进一步降低系统攻击面。

参考资料:

K3s 官方文档:https://docs.k3s.io/zh/advanced#%E5%90%AF%E5%8A%A8-rootless-server
Docker Rootless 模式官方文档:https://docs.docker.com/engine/security/rootless/
kind Rootless 支持: https://kind.sigs.k8s.io/docs/user/rootless/

相关文章:

Kubernetes 深入浅出系列 | 容器剖析之容器安全

目录 1、容器真的需要privileged权限吗?一、什么是 --privileged 权限?二、privileged 的风险到底有多大?三、常见需求场景及更安全的替代方式四、如何判断容器是否真正需要特权? 2、不以 Root 用户运行容器,真的更安全吗&#x…...

Spring Boot应用中可能出现的Full GC问题

Full GC的原理与触发条件 原理 标记-清除:首先遍历所有对象,标记可达的对象,然后清除不可达的对象。复制算法:将内存分为两部分,每次只使用其中一部分。当这部分内存用完时,将存活的对象复制到另一部分&a…...

Maven 的安装与配置(IDEA)

2025/4/9 向 一、什么是Maven Maven 是一个基于项目对象模型(Project Object Model,POM)概念的项目构建工具(所以就是一个工具),它主要用于自动化项目的构建过程,包括编译、测试、打包、部署等…...

软考中级-软件设计师 2022年下半年上午题真题解析:通关秘籍+避坑指南

📚 目录(快速跳转) 选择题(上午题)(每题1分,共75分)一、 计算机系统基础知识 🖥️💻 题目1:计算机硬件基础知识 - RISC(精简指令集计算…...

全栈开发套件Telerik DevCraft——赋能现代化应用构建

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Kendo…...

Windows + vmware + ubuntu+docker + docker-android实现Android模拟器构建和启动

文章目录 引言编译启动过程玩下adb最后 引言 Windows vmware ubuntudockerdocker-android实现Android模拟器启动 编译启动过程 #下载docker-android git clone https://github.com/budtmo/docker-android.gitmaqiubuntu:~/docker-android$ git remote -v origin https://…...

远程团队协作效率低,如何优化

在远程工作的环境中,团队协作效率低下成为许多企业面临的一大挑战。随着全球化和技术进步,远程团队的出现成为企业的常态,但由于沟通不畅、任务管理不明确、缺乏团队凝聚力等问题,往往会影响团队的整体效率。为了优化远程团队的协…...

Oracle 19C 通过 ODBC 连接 SQL Server 数据库指南 (Red Hat 7)

前言 本指南详细说明如何在 Red Hat Enterprise Linux 7 系统上配置 Oracle 19C 通过 ODBC 连接 SQL Server 数据库。这种异构数据库连接方式称为 Oracle Heterogeneous Services,允许 Oracle 数据库直接访问非 Oracle 数据源。 系统要求 操作系统:Red Hat Enterprise Linu…...

【MYSQL从入门到精通】数据类型及建表

一些基础操作语句 1.使用客户端工具连接数据库服务器:mysql -uroot -p 2.查看所有数据库:show databases; 3.创建属于自己的数据库: create database 数据库名;create database if not exists 数据库名; 强烈建议大家在建立数据库时指定编…...

鸿蒙开发中的并发与多线程

文章目录 前言异步并发 (Promise和async/await)多线程并发并发能力选择耗时任务并发执行场景常见业务场景 常驻任务并发执行场景常见业务场景 传统共享内存并发业务长时任务并发执行场景常见业务场景 并发任务管理线程间通信同语言线程间通信(ArkTS内)线…...

ruby self

在 Ruby 中,self 是一个指向当前对象的特殊变量,它的值根据代码的上下文动态变化。理解 self 的指向是掌握 Ruby 面向对象编程的关键。以下是详细解析: 一、self 的核心规则 self 始终指向当前方法的执行者(即调用方法的对象&…...

Kotlin 学习-集合

/*** kotlin 集合* List:是一个有序列表,可通过索引(下标)访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:(字典)是一组键值对。键是唯一的…...

封装方法的辨析

equals //字符串 str1.equals(str2); //list的两个实现类 list1.equals(list2); //map的两个实现类 //比较所有的键值对是否相同 map1.equals(map2); //数组(包括string类型) //比较内容是否相同 Arrays.equals(array1, array2); contains 基本都有…...

解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明

以下是解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明: 1. 切换项目视图模式 默认情况下,IDEA 的项目视图可能处于 Packages 模式,仅显示代码包结构,而非物理目录。 操作步骤: 点击…...

CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析

当前的CMIP6计划相较于前代模型,在空间分辨率、物理过程表达和地球系统组件耦合等方面均有显著提升。 一:气候变化研究的AI新视角 1、气候模型基础与全球气候模型(GCM) 全球气候(环流)模型的基本原理、发…...

如何精准控制大模型的推理深度

论文标题 ThinkEdit: Interpretable Weight Editing to Mitigate Overly Short Thinking in Reasoning Models 论文地址 https://arxiv.org/pdf/2503.22048 代码地址 https://github.com/Trustworthy-ML-Lab/ThinkEdit 作者背景 加州大学圣迭戈分校 动机 链式推理能显…...

1. Git 下载和安装

文章目录 Git 下载Git 安装(以windows为例)Git 使用(以windows为例) Git 下载 1.进 Git 官网 https://git-scm.com/downloads 2.选择对应的操作系统 3.选择对应的操作系统位数 Git 安装(以windows为例)…...

git回滚指定版本并操作

你可以通过以下步骤切换到第三个版本。根据你的需求,有两种主要方法: 方法 1:临时查看第三个版本(不修改当前分支) 适用于仅查看或测试旧版本,不保留后续修改: 找到第三个版本的提交哈希&#…...

FastAdmin和thinkPHP学习文档

介绍 - FastAdmin框架文档 - FastAdmin开发文档https://doc.fastadmin.net/doc目录结构 ThinkPHP5.0完全开发手册 看云ThinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性&#xff0c…...

通过HTTP协议实现Git免密操作的解决方案

工作中会遇到这样的问题的。 通过HTTP协议实现Git免密操作的解决方案 方法一:启用全局凭据存储(推荐) 配置凭证存储‌ 执行以下命令,让Git永久保存账号密码(首次操作后生效): git config --g…...

git 查看某一文件夹下所有文件 修改记录

git: 如何查询某个文件或者某个目录的更新历史_git 查看指定文件夹的记录-CSDN博客 git log --follow path/to/your/file git log -p --follow path/to/your/file git log --stat --follow path/to/your/file这是最常用的方法,可以显示指定文件的所有提交历史…...

测试(一)

软件的生命周期: 需求分析——计划——设计——编码——测试——运行维护 常见的开发模型: 瀑布模型: 最基本的开发模型,绝大多数开发模型的基本框架。 特点:线性的开发流程 使用场景:需求固定&#xff…...

解决华硕主板Z890m下载ubuntu20.04后没有以太网问题

问题描述: 华硕主板Z890m下载双系统ubuntu20.04后,发现ubuntu不能打开以太网。 问题原因: 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169,所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…...

从零推导飞机小扰动运动线性方程——0. 学习目录

第0期文章——学习目录 如图,本专栏将连载以下学习内容,带你从零开始学习飞机小扰动方程!...

Agentic AI 干货!DeepSeek + OpenAI SDK 构建 Agent 实战

引言: DeepSeek-R1、OpenAI-o1 等具备内化的假设、反思、验证等优秀推理能力的 LLM 大型推理模型将 AI 发展推进到智能体 AI 时代,将使 AI Agent 迸发出远超上一代由外化的手搓式简单推理 Agent 不可比拟的发展势能。 在 GTC2025 大会上,英伟…...

【语法】C++的list

目录 为什么会有list? 迭代器失效: list和vector的迭代器不同的地方: list的大部分用法和vector都很像,例如push_back,构造,析构,赋值重载这些就不再废话了,本篇主要讲的是和vecto…...

Java接口性能优化面试问题集锦:高频考点与深度解析

1. 如何定位接口性能瓶颈?常用哪些工具? 考察点:性能分析工具的使用与问题定位能力。 核心答案: 工具:Arthas(在线诊断)、JProfiler(内存与CPU分析)、VisualVM、Prometh…...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---5.2 工业机械臂系统性能测试全方案(专业工程级)

5.2 工业机械臂系统性能测试全方案(专业工程级) 一、测试体系架构设计 1.1 三级测试体系 #mermaid-svg-A55VxjZ7ENKNWAli {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-A55VxjZ7ENKNWAli .error-icon{fill:#55…...

VM——相机拍照失败

1、问题:相机频闪触发,在MVS中正常出图,在VM中出现拍照失败 2、解决: 1、首先排查网络设置(巨帧是否设置) 2、电脑的所有防火墙是否关闭 3、在MVS中恢复相机的设置参数为默认参数,删除VM中的全…...

图解力扣回溯及剪枝问题的模板应用

文章目录 选哪个的问题17. 电话号码的字母组合题目描述解题代码图解复杂度 选不选的问题78. 子集题目描述解题代码图解复杂度 两相转化77. 组合题目描述解题代码法一:按选哪个的思路法二:按选不选的思路 图解选哪个:选不选 复杂度 选哪个的问…...

Trae + LangGPT 生成结构化 Prompt

Trae LangGPT 生成结构化 Prompt 0. 引言1. 安装 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 联动4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 这个项目,主要向我们介绍了写结构化Prompt的一些方法和示例,我们怎么直接使用这个项目,辅助我们…...

模糊测试究竟在干什么

目录 1.软件漏洞和缺陷 2.模糊测试与传统测试 3.汽车领域中的模糊测试 4.常见工具总结 1.软件漏洞和缺陷 提单、上票、拒收,这是开发和测试的日常博弈。大多数时候,我们是根据自己对需求的理解来进行开发和测试,这基本是属于功能层级。 …...

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制

【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制 一,文档简介二,PWMTRGMUXPDBADC 2ch 软件配置与实现2.1 软硬件版本平台2.2 MCAL工程以及模块配置2.2.1 Dio 模块配置2.2.2 Adc模块配置2.2.3 Mcu模块配置2.2.4 Platform模块配置2.2.5 Port模块配置2.2.6…...

03--Deepseek服务器部署与cjson解析

一、ollama部署deepseek模型 1、Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。 Ollama 教程:从 0 到 1 全面指南 教程【全文两万字保姆级详细讲解】 -CSDN博客 1.下载o…...

实现抗隐私泄漏的AI人工智能推理

目录 什么是私人AI? 什么是可信执行环境? TEE 如何在 AI 推理期间保护数据? 使用 TEE 是否存在风险? 有哪些风险? Atoma 如何应对这些风险 为什么去中心化网络是解决方案 人工智能推理过程中还有其他保护隐私的方法吗? 私人人工智能可以实现什么? 隐私驱动的应…...

Kotlin 学习--数组

一、关于数组的基础知识和常用方式 /*** kotlin 数组* 使用arrayOf创建数组,必须指定数组的元素,可以是任意类型* */val arrayNumber arrayOf(1, 2, 3, 4)/*** 集合中的元素可以是任意类型* kotlin 中的Any 等价于 java 中的Object 对象的意思* */val a…...

Spring Boot 启动后自动执行 Service 方法终极指南

**导语​​:**在 Spring Boot 开发中,我们经常需要在应用启动后立即执行初始化任务(如加载配置、预热缓存、启动定时任务)。本文将深度解析 ​​5 种主流实现方案​​,包含完整代码示例、执行顺序控制技巧和避坑指南&a…...

STM32 HAL库之GPIO示例代码

LED灯不断闪烁 GPIO初始化,main文件中的 MX_GPIO_Init(); 也就是在 gpio.c文件中 void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_C…...

中间件-消息队列

SpringAMQP 任何语言只要遵循AMAP协议,都可以与RabbitMQ交互 生产者、队列、交换机、消费者 生产者Publisher:生产消息,发给交换机 交换机Exchange:接收生产者发送的消息。知道如何处理消息,例如递交给某个特别队列、…...

go游戏后端开发32:自摸杠处理逻辑

当我们在自摸杠时,实际上在杠完之后,我们还需要进行一个删除操作。因此,我们需要在上面拷贝一个删除操作。由于这是自摸杠,所以这个地方需要删除四次。在这里,我们需要注意的是,自摸杠时,传过来…...

AI创业风向标:构建下一代「AI叙事创作平台」

随着技术的进步和市场需求的爆发,AI故事叙述平台正成为投资者和创业者关注的焦点。本文将探讨为何这一赛道值得关注,并提供一些关于如何构建成功的AI叙事创作平台的战略建议。 一、为什么这是2025年值得关注的赛道? 1. 底层需求的爆发 人类永恒的故事需求:全球每月有超过…...

拜特科技签约惠生工程,携手打造高效资金管理系统

近日,拜特科技成功签约惠生工程(中国)有限公司(以下简称“惠生工程”)资金管理系统项目。此次双方携手打造一套先进的资金管理系统,为惠生工程的战略发展注入强劲新动力,推动其资金管理迈向更高水平。 惠生工程作为行…...

快瞳宠物肢体关键点检测:让宠物设备更懂“猫言狗语”

在宠物经济高速发展的今天,智能设备已渗透到养宠生活的方方面面。然而,如何让设备真正理解宠物的行为意图?快瞳科技推出的宠物肢体关键点检测技术,通过精准捕捉宠物肢体动作,为智能喂食、健康监测、行为训练等场景提供…...

【安卓】APP生成器v1.0,生成属于你的专属应用

今天作者给大家分享一个超级好用的手机APP。还在为反复搜索常用网站抓狂?今天安利一款颠覆性神器——它能将你所有心头好的网页变成专属按钮,像搭乐高一样DIY你的「软件」,从此告别收藏夹混乱!小说党、资讯控、摸鱼达人集体狂喜&a…...

详细解读react框架中的hooks

React Hooks 是 React 16.8 引入的一项革命性特性,它允许你在函数组件中使用状态(state)和其他 React 特性,而无需编写 class 组件。下面将详细解读 React Hooks 的核心概念、常用 Hooks 及其工作原理。 一、Hooks 的核心概念 1. 什么是 Hooks Hooks …...

机器学习01-支持向量机(SVM)(未完)

参考浙大 胡浩基老师 的课以及以下链接: https://blog.csdn.net/m0_74100344/article/details/139560508 https://blog.csdn.net/2301_78630677/article/details/132657023 https://blog.csdn.net/lsb2002/article/details/131338700 一、一些定义 T是倒置&…...

Java进阶版线程池(超详细 )

线程池 线程池工具类 Executors Executors 是 Java 提供的一个工具类,它包含了多个静态方法,能够方便地创建不同类型的线程池。 newFixedThreadPool 创建一个固定大小的线程池,线程池中的线程数量固定,当有新任务提…...

场外期权只适合上涨行情吗?

场外期权与直接进行期货市场操作相比,场外期权让我们有了更多的选择空间。”目前期权市场有了更多合适的风险管理模式,场外期权衍生品工具与其需求不谋而合,适合做以小博大,做各种对冲大盘下跌风险等等策略,下文为大家…...

echarts图表相关

echarts图表相关 echarts官网折线图实际开发场景一: echarts官网 echarts官网 折线图 实际开发场景一: 只有一条折线,一半实线,一半虚线。 option {tooltip: {trigger: "axis",formatter: (params: any) > {const …...

【操作系统(Linux)】——多线程对共享变量访问的同步与互斥

一、多线程对共享变量的非互斥访问 我们将要做的&#xff1a;构造多线程共享变量竞争的案例&#xff0c;并分析现象发生的原因&#xff0c;进而思考解决方式。 案例源代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #inc…...