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

如何在 Ubuntu24.04 TLS 上安装 Kubernetes 集群 - Antonie

0-先决条件

在开始安装之前,请确保您的环境满足以下先决条件:

  • Ubuntu 24.04 LTS 系统。
  • 至少 4GB RAM 或更多。
  • 至少 2 个 CPU 内核。
  • 有 40 GB 可用磁盘空间。

1- 环境准备

集群规划

  • k8s-node-1(Master):10.15.0.132
  • k8s-node-2(Worker):10.15.0.133
  • k8s-node-3(Worker):10.15.0.134

设置主机名,同步 host 文件:

1、设置主机名:

sudo hostnamectl set-hostname k8s-n1
sudo hostnamectl set-hostname k8s-n2
sudo hostnamectl set-hostname k8s-n3

2、同步 host 文件

在每台机器的 /etc/hosts 文件中添加主机名和 IP 的对应关系:

sudo sh -c 'cat >> /etc/hosts <<EOF
10.15.0.132 k8s-n1
10.15.0.133 k8s-n2
10.15.0.134 k8s-n3
EOF'

查看 /etc/hosts 文件,预期结果如下:
image-20250915235307484

在每台机器上,将 DNS 服务器修改成稳定可靠的公共DNS。

编辑 /etc/resolv.conf 文件:

sudo nano /etc/resolv.conf

将其内容修改或确保包含如下内容(可以使用谷歌或国内公共DNS):

nameserver 8.8.8.8       # 谷歌主DNS
nameserver 114.114.114.114 # 国内114DNS
nameserver 223.5.5.5     # 阿里DNS (可作为备选)

在某些系统(如Ubuntu)上,/etc/resolv.conf 可能被网络服务自动覆盖。你需要修改网络配置文件使其永久生效。

如果你使用 Netplan (常见于Ubuntu 18.04及以后):

找到你的 Netplan 配置文件(通常在 /etc/netplan/目录下),编辑它:

sudo nano /etc/netplan/50-cloud-init.yaml

在配置中添加 nameservers 部分:

network:version: 2ethernets:ens33: # 你的网卡名称,可能不是ens33,请用 `ip a` 命令确认dhcp4: truenameservers:addresses: [8.8.8.8, 114.114.114.114, 255.5.5.5]

应用配置:

sudo netplan apply

/etc/resolv.conf 文件内容结果如下:
image-20250915235724533

2 - 禁用 Swap 分区,加载内核模块

在每个实例上运行以下命令来禁用交换空间,这样 Kubernetes 集群才能顺利工作。

sudo swapoff -a  
sudo sed -i '/swap/ s/^/#/' /etc/fstab

image-20250915235820730

验证禁用 Swap 分区是否成功。如果没任何输出,则说明成功

swapon --show

使用 modprobe 命令加载以下内核模块。

sudo modprobe overlay
sudo modprobe br_netfilter

要永久加载这些模块,请创建包含以下内容的文件。

sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

接下来,添加像 IP 转发这样的内核参数。创建一个文件,并使用 sysctl 命令加载参数。

sudo tee /etc/sysctl.d/kubernetes.conf <<EOF  
net.bridge.bridge-nf-call-ip6tables = 1  
net.bridge.bridge-nf-call-iptables = 1  
net.ipv4.ip_forward = 1  
EOF

运行以下命令,加载上述内核参数。

sudo sysctl --system

3 - 安装配置 Containerd

Containerd 为 Kubernetes 提供了容器运行时,在所有三个实例上安装 containerd

首先,安装容器依赖项。

sudo apt update
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

添加阿里云 Docker 镜像源

sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

现在,使用以下 apt 命令安装 containerd

sudo apt update
sudo apt install containerd.io -y

验证安装:

containerd --version

image-20250916000622804

可能会出现这个异常:

image-20250916001834995

注意:这个时候解决的方法是重新设置一下 DNS 的配置。

接下来,配置 containerd,使其开始使用 SystemdCgroup 运行下面的命令。

  • 生成默认配置
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
  • 启用 SystemdCgroup
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

image-20250916000712226

为 contained 配置镜像加速源:

  • 编辑 containerd 的主配置文件 /etc/containerd/config.toml,确保其启用了目录模式的配置。
  • 执行下面的指令,明确指定镜像加速器配置目录。
sudo sed -i 's|config_path = ""|config_path = "/etc/containerd/certs.d"|g' /etc/containerd/config.toml
  • 创建配置目录与文件:

1、为 Docker Hub (docker.io) 创建对应的配置目录和文件:

sudo mkdir -p /etc/containerd/certs.d/docker.io
sudo nano /etc/containerd/certs.d/docker.io/hosts.toml

将下面的内容粘贴到 hosts.toml 文件中。

server = "https://docker.io"  # 原始仓库地址# 镜像加速器列表
[host."https://docker.1panel.live"]capabilities = ["pull", "resolve"]
[host."https://dc.j8.work"]capabilities = ["pull", "resolve"]
[host."https://docker.m.daocloud.io"]capabilities = ["pull", "resolve"]
[host."https://dockerproxy.com"]capabilities = ["pull", "resolve"]
[host."https://docker.mirrors.ustc.edu.cn"]capabilities = ["pull", "resolve"]
[host."https://docker.nju.edu.cn"]capabilities = ["pull", "resolve"]
# 可以保留一个到官方仓库的链接作为后备,但通常加速器已包含
# [host."https://registry-1.docker.io"]
#   capabilities = ["pull", "resolve", "push"]

2、为 registry.k8s.io 这个地址也配置加速镜像源。

sudo mkdir -p /etc/containerd/certs.d/registry.k8s.io
sudo nano /etc/containerd/certs.d/registry.k8s.io/hosts.toml

将下面的内容粘贴到 hosts.toml 文件中。

server = "https://registry.k8s.io"[host."https://registry.cn-hangzhou.aliyuncs.com/google_containers"]capabilities = ["pull", "resolve", "push"]

重新启动 containerd 服务,使上述更改生效。

sudo systemctl restart containerd
sudo systemctl enable containerd

image-20250916000854739

查看 /etc/containerd/config.toml 文件,路径已经配置上了。

image-20250916000948902

查看 /etc/containerd/certs.d 目录,也成功生成对应的配置目录。

image-20250916001133603

修改 Containerd 配置,统一 Sandbox 镜像。

sudo sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|g' /etc/containerd/config.toml

重新启动 containerd 服务,使上述更改生效。

sudo systemctl restart containerd

image-20250916001220935

查看 /etc/containerd/config.toml 文件,sandbox_image 已经被修改。

image-20250916001332428

安装 和 配置 crictl(可选)

crictl是 Kubernetes 节点上调试容器运行时(CRI)的标准工具,比 ctr 更贴近 Kubelet 的行为。

安装 K8s 时,默认就会安装 crictl 的,这里选择提前安装是为了测试 Containerd 是否可以成功拉取到镜像。

这里使用离线下载,将 crictl 压缩包下载然后上传到所有节点上。

官网地址:https://github.com/kubernetes-sigs/cri-tools

因为我们要安装的 K8s 的版本为 1.30,所以这里选择的 crictl 的版本为 1.34。

sudo tar zxvf crictl-v1.34.0-linux-amd64.tar.gz -C /usr/local/bin

创建配置文件,指定 containerd 的 socket 路径。

  • 注意:如果现在不安装 crictl,后面完成 k8s 集群初始化,下面的命令还是要执行的。
cat << EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

image-20250916002558709

测试拉取 Nginx 镜像,看看配置的镜像源能不能使用。

sudo crictl pull nginx
sudo crictl images

image-20250916002800946

4 - 安装 Kubernetes

4.1. 添加 Kubernetes Package Repository

Kubernetes 软件包在 Ubuntu 24.04 的默认包存储库中不可用,所以要先添加它的存储库。在每个实例上运行这些步骤。

使用 curl 命令下载 Kubernetes 包存储库的公共签名密钥。安装的 kubernetes 版本为 1.30。

  • 添加阿里云 Kubernetes 源
sudo curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  • 接下来,通过运行以下命令添加 Kubernetes 存储库。
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list

image-20250916002911417

4.2. 安装 Kubernetes 部件 (Kubeadm, kubelet & kubectl)

安装 Kubernetes 组件,在所有实例上运行以下 apt 命令。

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 锁定版本,防止意外升级
sudo apt-mark hold kubelet kubeadm kubectl
# 确保 kubelet 已启用(尽管 init 后才会完全正常)
sudo systemctl enable kubelet

4.3. 安装 Kubernetes

所有的先决条件都满足了,我们可以开始安装 Kubernetes 了。

在 master 节点上执行 Kubeadm 命令,仅用于初始化 Kubernetes 集群。

  1. 预先拉取 Kubernetes 需要的镜像,防止初始化的时候超时错误。
sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
  1. 执行初始化指令
sudo kubeadm init \--apiserver-advertise-address=10.15.0.132 \--control-plane-endpoint=10.15.0.132 \--image-repository=registry.aliyuncs.com/google_containers \--pod-network-cidr=10.244.0.0/16 \--kubernetes-version=v1.30.0
  • apiserver-advertise-address:Master 节点的 IP 地址。
  • control-plane-endpoint:Master 节点的 IP 地址。
  • image-repository:指定镜像的地址。
  • pod-network-cider:强烈建议使用 Kubernetes 社区更常用的网段,如 10.244.0.0/16(Flannel 默认) 或 10.192.0.0/12(Calico 常用),并确保其与你的物理网络、Service CIDR (10.96.0.0/12) 都不重叠。
  • kubernetes-version:明确指定 Kubernetes 版本,避免歧义。
  1. 如果初始化错误,则需要重装。重装前需要删除之前安装的资源,执行下面的命令。
sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes/manifests/*
sudo systemctl restart kubelet

成功执行此命令后,我们将得到如下所示的输出。

image-20250916004146880

在上面的输出中,我们将获得一系列命令。例如:如何与 kubernetes 群集互动,如何添加 worker 节点到此群集。

在 master 节点上运行以下命令。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

接下来,从输出中复制命令以连接 woker 节点,在两个 woker 节点上运行它。比如:

kubeadm join 10.15.0.132:6443 --token 11z2ot.9040p3ygy872219i \--discovery-token-ca-cert-hash sha256:8ea22dfe79f85ddbdcec81a139262142da206ea08e360f78aaa712ddb8afb35f

第一个 worker 节点的输出:

image-20250916004319913

第二个 worker 节点的输出:

image-20250916004346038

回到 master 节点,运行 kubectl get nodes 命令来验证 worker 节点的状态。

kubectl get nodes

image-20250916004404808

  • 输出确认 worker 节点已加入集群,但状态为 NotReady。我们需要在这个集群上安装 Network Add-on Plugin,例如:Flannel CNI
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

注意:让 Flannel 的网络配置 与 kubeadm init 指定的 pod-network-cidr 保持一致。因为 Flannel 默认的网段是 10.244.0.0/16,和我们初始化配置时一样,所以不需要更改。

检查状态:

kubectl -n kube-flannel get pods

image-20250916004721140

  • 目前网络插件的容器都处于初始化状态。

等待几分钟,等到容器都创建并运行后,我们执行下面命令:

kubectl get pod -A

image-20250916005022290

  • 我们可以看到所有的容器都正常运行。K8s 集群就搭建完成了。

相关文章:

如何在 Ubuntu24.04 TLS 上安装 Kubernetes 集群 - Antonie

0-先决条件 在开始安装之前,请确保您的环境满足以下先决条件:Ubuntu 24.04 LTS 系统。 至少 4GB RAM 或更多。 至少 2 个 CPU 内核。 有 40 GB 可用磁盘空间。1- 环境准备 集群规划k8s-node-1(Master):10.15.0.132 k8s-node-2(Worker):10.15.0.133 k8s-node-3(Worker)…...

Jmeter的插件开发

一、Jmeter的启动流程 在说启动流程之前我们先来看看Jmeter源码的各个重要的包:components—包含与协议无关的组件,如可视化、断言等等。 core —JMeter的核心代码,包括所有的核心接口和抽象类。 examples —演示采样器如何使用新bean框架的例子(开发插件前可以好好看看该包…...

Educational Codeforces Round 182 (Rated for Div. 2)

A. Cut the Array 题意:把数组分成三段,使得每段和模\(3\)后的值都相同或者都不相同。 \(n\)很小,暴力枚举分段就行了。点击查看代码 #include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int …...

java第二周课前提问

一、代码引入 public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] args) { String x = …...

java GC

java GC...

Redis最佳实践——性能优化技巧之监控与告警详解

一、监控体系构建1. 核心监控指标矩阵指标类别 关键指标 计算方式/说明 健康阈值(参考值)内存相关 used_memory INFO Memory 获取 不超过 maxmemory 的 80%mem_fragmentation_ratio 内存碎片率 = used_memory_rss / used_memory 1.0-1.5命中率 keyspace_hits INFO Stats 获取…...

week1

任务一,编码规范: 我在网上找到了华为公司C++编码规范,我摘下几点我觉得我应该注意的 1、程序块要采用缩进风格编写, 缩进的空格数为4个 2、不允许把多个短语句写在一行中, 即一行只写一条语句 3、 if、for、do、while、case、switch、default等语句自占一行, 且if、for、do…...

EF Core 与 MySQL:迁移和关系配置详解

EF Core 与 MySQL:迁移和关系配置详解 1. EF Core 中的关系类型 Entity Framework Core 支持三种主要的关系类型: 一对一关系 (One-to-One) 一个实体实例只与另一个实体实例相关联。例如:一个用户有一个用户资料。csharppublic class User {public int Id { get; set; }pub…...

《原子习惯》-读书笔记2

2025.09.15 Day2 1、目标和体系有什么不同?我最初是从“呆伯特漫画”的创作者斯科特亚当斯(Scott Adams)那里了解到两者的区别的。目标是关于你想要达到的结果,而体系是涉及导致这些结果的过程。2、争取每天都有进步是你走向成功唯一的方法。3、如果你想要得到更好的结果,那…...

CF1626D 题解

CF1626D 题解 貌似题解区没有这种解法。 题面 CF1626D Martial Arts Tournament - 洛谷 (luogu.com.cn) 思路 问题就是把 \(a\) 分成 \(3\) 个子集(可以为空),每两个子集里的数并不重复,把每个子集的大小补到 \(2^x\) 最少要补的数的个数。 先把 \(a\) 给排序,那么就可以转…...

Python 集合运算:并集、交集、差集全解析

在 Python 中,集合(set)是一种无序的、不包含重复元素的数据结构。集合提供了丰富的运算方法,包括并集、交集、差集等。这些运算在数据处理、数学计算和算法设计中非常实用。今天,就让我们一起深入学习 Python 集合的运算方法,并通过实例代码展示它们的使用。 一、集合的…...

第一周数据可视化作业

一、个人介绍 My name is Ou Qi. (🙂) 我性格阳光开朗,始终保持着对学习的热忱和对未知事物的探索欲,尤其从小就对数学有着浓厚兴趣 —— 课堂上会紧跟老师的思路深度思考,课后也常主动琢磨题型、尝试举一反三,在不断推导中把知识学扎实。 二、我的专业选择与学习历程 步…...

用 C++ + OpenCV + Tesseract 实现英文数字验证码识别

本文展示如何用 C++ 结合 OpenCV 做图像预处理,再调用 Tesseract OCR 识别验证码。适用于希望在高性能后端或本地服务里集成 OCR 的场景。方案包含: 更多内容访问ttocr.com或联系1436423940 环境与依赖安装 图像预处理(灰度、二值化、形态学去噪、放大) 使用 Tesseract API…...

java 第一节课课前提问

一、使用Java能编写的程序 企业级后端应用 Java 在企业级开发中占据重要地位,常被用于构建大型服务器端应用,如电商平台、银行交易系统、CRM(客户关系管理)系统等。这类应用通常需要处理高并发、复杂业务逻辑和海量数据,Java 凭借稳定的性能、丰富的企业级框架(如 Spring…...

二进制解码器、选通器和分配器

二进制解码器 3比特的二进制解码器可以由下图表示。每种组合方式对应着解码器的不同输出。3-8解码器可以用三个非门和三个与门构成解码器可以拼接起来组成更大的解码器,比如两个3-8解码器可以拼起来组成一个4-16解码器。选通器和分配器。 选通器 一个8选1的选通器如下图所示。…...

2025最新版 Photoshop软件免费下载安装完整教程(PS2025)超详细安装教程

Adobe Photoshop 2025 凭借升级的 AI 编辑功能、更优的图像处理效率,成为设计与摄影领域的热门工具。但不少用户在安装时,易因路径选择、安全软件拦截等问题卡壳。本教程聚焦安装全流程,从前期准备到后续配置,用清晰步骤帮你避开误区,顺利完成安装,快速解锁 PS 2025 的创…...

nac一键卸载软件脚本

将下面的代码保存为uninstall.sh: echo delete shit.app..need your root pwd; sudo rm -rf /Applications/dvc-manageproxy-exe.app; sudo rm -rf /Applications/LVSecurityAgent.app; echo script is fighting...; sudo chflags noschg /opt/LVUAAgentInstBaseRoot; sudo chf…...

交叉编译openharmony版本的openssh

sudo mkdir /systemsudo chmod 777 /system/export CC=aarch64-linux-gnu-gcc编译zlib./configure --prefix=/systemmake && make install 编译openssl./config linux-aarch64 --prefix=/system/ --openssldir=/system/etc/ssl --libdir=…...

为什么不建议在 Docker 中跑 MySQL

前言 今天我们来聊聊一个很有趣的话题:为什么我不建议在Docker中运行MySQL数据库? 有些小伙伴在工作中可能为了部署方便,习惯将所有组件都容器化,但数据库真的适合放在容器里吗? 今天就专门跟大家一起聊聊这个话题,希望对你会有所帮助。 一、容器化与数据库:天生的矛盾?…...

CFD

算例汇总 1、一维Sod激波管 2、二维平板 3、NACA0012 4、高马赫数喷流 5、双马赫反射 6、二维Riemann 7、二维Rayleigh-Taylor 8、TENO算例...

[MCP][05]Elicitation示例

Elicitation能让工具在关键时刻暂停执行,并向用户请求特定信息前言 如果你之前接触过LangGraph的"Human in the loop"概念,那么理解MCP的Elicitation机制就会容易很多。这两个功能非常相似,都是让AI在需要时停下来,礼貌地向人类寻求帮助或确认。 想象一下,当你正…...

Warsaw主题关闭导航条

\setbeamertemplate{headline}{}...

Python Socket网络编程(2)

进程:提供计算资源的单位 线程:真正工作的单位(cpu调度最小单元) GIL锁:全局解释器锁(是CPython解释器特有的,平时说的Python解释器一般都是CPython解释器,还有GPython等等) 让一个进程中同一时刻只能有一个线程可以被CPU调动。所以Python中应该是没有严格意义的多线程…...

PS2025安装包下载及PS2025安装包安装教程详细步骤(包含安装包下载链接)

在图像处理领域,Adobe Photoshop 一直占据着举足轻重的地位,而 PS 2025 更是汇聚前沿技术与实用功能,成为众多设计师与图像处理爱好者的得力工具。但初次安装这款软件,可能会因步骤繁杂、细节众多而让人感到棘手。别担心,本教程将以清晰、简洁的方式,带你一步步完成 PS 2…...

Nature Genetics | 本周最新文献速递

Multiancestry brain pQTL fine-mapping and integration with genome-wide association studies of 21 neurologic and psychiatric conditions 中文标题: 多祖先脑蛋白遗传调控解码!pQTL精细映射揭示神经精神疾病机制 关键词: 脑蛋白定量性状位点、精细映射、多祖先整合、…...

关于go里切片作为函数参数时是引用传递还是值传递

go语言中切片参数的值传递问题问题起因 写一道回溯算法题,把ans二维数组作为函数参数传入,想在函数里面,不停地append,最后返回ans 实际发现ans打印出来是空的,就很奇怪,因为我是事先分配好空间的,理论上不会发生扩容,底层数组是共用的,咋回事 func permute(nums []in…...

DRAN读写循环

DRAM读写循环 以一个8 * 8 的二维阵列为例子,假设部分存储单元为1,部分为0,现在要读写其中某一个cell的值。为了确定存储的位置,我们需要内存地址,为了传输内存地址,我们需要地址总线。8 * 8阵列一共有64个cell,我们需要6线地址总线,一共能表示64种二进制值。三根地址总…...

数据结构操作相关

堆 1、插入元素上滤每一次与父亲比较,满足大小就往上交换,直至不能往上为止。每次往上交换不会影响下面的性质2、删除/输出堆顶下滤假设大根堆,根节点换入末尾节点,每次先找出大儿子,若大儿子比自己大,则往下和他交换,直至不能往下为止。 3、建堆 1)初始为空,逐个inse…...

Neisbitt 不等式的证法

\(a,b,c\in R^+求证:\frac{a}{b+c}+\frac{b}{a+c}+\frac{c}{a+b}\geq\frac{3}{2}\) 证明: \(\because a,b,c\in R^+,\therefore\exists x,y,使得b=ax,c=ay\) \(\therefore LHS=\frac{1}{x+y}+\frac{x}{1+y}+\frac{y}{1+x}\) \(\therefore 令f(x,y)=\frac{1}{x+y}+\frac{x}{1+…...

端口转发神器Rinetd:轻量级安装与配置指南

什么是Rinetd? Rinetd(Redirection Internet Daemon)是一款轻量级的TCP端口转发工具,可以将来自一个IP地址和端口的连接转发到另一个IP地址和端口。它配置简单、资源占用少,是系统管理员和开发人员进行端口转发的理想选择。 Rinetd的主要特点轻量级:体积小,资源占用低 配…...

C语言中递归思想的应用

C语言中递归思想的应用 一、递归思想 在C语言中,函数是程序的基本单位,每个函数负责解决特定问题。但如果程序中出现n个相同的问题,就需要调用对应函数n次,这会导致程序冗长、可读性差。那么,有没有更简洁的解决方案呢? 答案是递归函数。递归函数并非万能,它更适用于解决…...

WITH RECURSIVE 递归公用表表达式(CTE)

生成一个从 1 到 12352 的连续数字序列SQL server SQL Server 对递归 CTE 有默认的递归深度限制(默认是 100),当递归次数超过这个限制时会报错。当远超默认限制时,需要在查询前使用 OPTION (MAXRECURSION 0) 来取消递归深度限制。WITH RECURSIVE num_sequence AS (SELECT 1…...

#java作业

1方法相关问题、 public class Main { static void changeStr(String x) { x = "xyz"; } static void changeArr(String[] strs) { for (int i = 0; i < strs.length; i++) { strs[i] = strs[i]+""+i; } } public static void main(String[] args) { …...

leetcode 3541. 找到频率最高的元音和辅音 便捷

leetcode 3541. 找到频率最高的元音和辅音 便捷pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !…...

匿名递归与不动点组合子

先贴上 CS61A Homework 3 Recursion, Tree Recursion 中的最后一道思考题题面: ​Q6: Anonymous FactorialThis question demonstrates that its possible to write recursive functions without assigning them a name in the global frame.The recursive factorial function…...

Markdown学习Day01

Markdown学习第一天 【【狂神说Java】Java零基础学习视频通俗易懂】https://www.bilibili.com/video/BV12J41137hu?p=6&vd_source=e3ba980d960d7d6c98e4872bba8cf225 Markdown学习 二级标题 字体 her hus hou KLI 引用选择不需要辩护。分割线插图超链接 学Java 表格年级 班…...

flutter compass结构代码分析

1.config文件夹:1.1assets.dart返回一个Assets类,包含activities和destinations两个静态属性。两个静态属性分别代表虚拟数据存放的路径。在assets文件夹下1.2 dependencies.dart使用provider绑定远程访问和本地访问所需要的数据 2.data文件夹2.1 repositoriesactivity文件夹a…...

25.9.15

应该都知道我退役了吧。 我对于这一段竞赛生涯呢,情感太复杂了。 (话说退役半年才回来写是不是有点晚了) 怎么说呢,这段竞赛让我有了一段快乐的时光,也让我彻底改变了。 想说很多,但是又说不出口。 先说说坏处吧 我的抑郁症可以说是被竞赛加深的,以至于我在初三下和高一…...

二十八、共享内存多处理器的基本概念

目录1. 核心定义2. 两种主要的共享内存架构a) 均匀内存访问b) 非均匀内存访问3. 共享内存多处理器的核心挑战与解决方案a) 缓存一致性b) 内存一致性4. 编程模型与同步5. 优势与劣势优势:劣势:总结共享内存多处理器是多处理器系统中最常见和直观的一种架构,也是现代多核CPU设…...

详细介绍:【ARMv7】系统复位上电后的程序执行过程

详细介绍:【ARMv7】系统复位上电后的程序执行过程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospac…...

C#高级语法

https://www.cnblogs.com/NotEnough/p/7426853.html https://juejin.cn/post/7100033147101773831...

配置Maven

IDEA配置Maven原文链接:https://blog.csdn.net/leah126/article/details/132020904 一、Maven下载 首先我们进入maven官方网站,进入网页后,点击Download去下载。下载免安装版,解压即可,解压至磁盘任意目录,尽量不要取中文名如下图: 二、配置Maven环境变量 打开cmd命令行,…...

那两年的回忆录

小引 我的OI之路是短暂且波折的,像是一则故事,曲曲折折,却又很是有趣,或许那两年是我最愉快的时光吧。 我总是问自己当初为什么要学OI,许是一腔热血,许是奔赴热爱。仔细想想,从最开始接触scratch,到后来的Python,最后的C++,前面两个都是觉得好玩,觉得有趣,可C++呢,…...

DDR4基本介绍

DDR4简介 DRAM的存储原理 DRAM的基本存储单元:cell 一个cell由一个晶体管和一个电容(约为30pF)组成,电容存储了电量代表1,电容放空电量代表0,晶体管作为电容的充放电开关,以便实现1bit数据的读写,cell的结构如下图所示 :读的过程:首先打开MOS管,根据电容的充放电信息…...

网络同步预测-Prediction

预测(Prediction) 是解决网络延迟问题、提升玩家操作流畅度的核心机制客户端接收玩家输入玩家操作(如 WASD 移动、跳跃)被捕获为输入事件(FInputActionValue)。客户端本地预测执行客户端不等服务器响应,直接基于输入在本地模拟角色行为(如移动、动画播放),并立即更新…...

二十五、多处理器的基本概念 (SISD/SIMD/MIMD)

目录1. SISD - 单指令流单数据流2. SIMD - 单指令流多数据流3. MIMD - 多指令流多数据流总结与对比简单类比多处理器体系结构中的三个基本概念:SISD、SIMD 和 MIMD,这些概念由迈克尔弗林(Michael Flynn)于1966年提出,被称为弗林分类法(Flynns Taxonomy)。它根据指令流(…...

java课堂问题2

1.1changeStr(String x):方法内部尝试将传入的字符串参数重新赋值为 "xyz",但该操作仅在方法内部有效,不会影响外部实参 changeArr(String[] strs):遍历传入的字符串数组,对数组中的每个元素进行修改,在原字符串后拼接其索引值(例如将第 0 个元素改为 "原…...

集训总结(六)

9.15 听 CEO 讲了 sb 树,不知道该写什么,挂个祂博客的链接吧。 https://www.cnblogs.com/Augenstern-/p/18964066...

GAS_Aura-Prediction GAS

1讲了关于GAS中的网络之间,Client-Server的网络同步时,需要使用预测...

PromptPilot 产品发布:火山引擎助力AI提示词优化的新利器

周六非常荣幸参加了火山引擎官方举办的PromptPilot产品发布会。其实早在8月份,我就有幸参与了该产品的内测阶段,并撰写了一些体验心得和感受。此次发布会当天,不仅深入聆听到了产品负责人以及工程师们对PromptPilot的全新解读和详细介绍,还现场感受到了他们对产品未来发展方…...