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

在Linux系统命令行如何使用deepseek官方API调用AI大模型?

在Linux系统命令行如何调用deepseek官方API调用AI大模型?

书接上文:

在这里插入图片描述

同样的开头哈哈哈哈:

”在这个AI技术飞速发展的时代,每一个程序员都应该问问自己:如何将人工智能的强大能力融入到我们熟悉的操作系统中?Linux,这个开源世界的基石,正在悄然拥抱这场认知革命。你是否想过,在你的服务器、你的开发环境中,也能轻松接入强大的AI大模型?这不仅仅是一个技术突破,更是一场开源精神与人工智能的完美邂逅。无需复杂界面,只需几行命令就能让AI帮你解答数学题、写代码、甚至分析数据!本文将手把手教你 零基础搭建专属AI命令行工具,让你在终端里体验「钢铁侠的贾维斯」般的智能助手!“

但我们今天不再使用本地搭建的AI大模型了,毕竟自己的电脑性能有限,搭建的AI大模型根本没办法支撑我们进行一些复杂共工作,所以我今天为大家介绍如何调用官方API进行使用AI大模型。

开始吧~~~

充值

哈哈哈哈哈么得办法,想用人家好一点的AI大模型就只能充钱啦,当然在网页上使用是无需花费的,但是我们毕竟要调用嘛,所以还是要收费的。

搜索deepseek官方:

在这里插入图片描述

点击API开放平台:

在这里插入图片描述

在充值界面就可以支付相应的金额了,毕竟是按照请求的token算的,整10块应该能用好久的了,当然仅限没事的时候玩玩哈。

二.创建API Keys

充值完成之后,点击API Keys,创建一个Keys,随便起一个名字,官方也有提示:

列表内是你的全部 API key,API key 仅在创建时可见可复制,请妥善保存。不要与他人共享你的 API key,或将其暴露在浏览器或其他客户端代码中。创建一个Keys后自己要记得好好保存哦,只能查看一次这个Keys。

在这里插入图片描述

创建完成之后我们就可以去Linux系统上进行操作了。

三.搭建Linux基本环境

创建调用文件:

[root@ai-linux ~]# touch /usr/local/bin/ai 
[root@ai-linux ~]# vi /usr/local/bin/ai 
#!/bin/bash# 配置参数
API_KEY="你的API Keys"
API_URL="https://api.deepseek.com/v1/chat/completions"
MODEL_NAME="deepseek-chat"# 构建请求数据
QUESTION="$*"
REQUEST_DATA=$(jq -n \--arg q "$QUESTION" \--arg model "$MODEL_NAME" \'{model: $model, messages: [{role: "user", content: $q}], temperature: 0.0}') #0.0表示我要调用它干推理的事情# 发送请求并捕获响应
response=$(curl -s -w "\nHTTP_STATUS:%{http_code}" -X POST "$API_URL" \-H "Content-Type: application/json" \-H "Authorization: Bearer $API_KEY" \-d "$REQUEST_DATA")# 分离状态码和响应内容
http_status=$(echo "$response" | grep 'HTTP_STATUS:' | cut -d':' -f2 | tr -d ' ')
response_body=$(echo "$response" | sed '/HTTP_STATUS:/d')# 错误处理
if [[ $http_status -ne 200 ]]; thenecho "Error: API request failed (HTTP $http_status)" >&2echo "$response_body" | jq . >&2exit 1
fi# 提取并格式化内容
content=$(echo "$response_body" | jq -r '.choices[0].message.content' 2>/dev/null)# 美化输出格式
if [ -n "$content" ]; thenecho "$content" | awk '# 移除Markdown标记{ gsub(/\\n### |### |\\n---.*|\*\*/, "") }# 处理列表项/^[0-9]+\./ { gsub(/^[0-9]+\./, "•")print "  " $0next}# 处理空行/^$/ { print ; next }# 默认输出{ print }' | sed -e 's/\\n/\n/g' -e 's/“/"/g' -e 's/”/"/g'
elseecho "Error: Empty response" >&2exit 1
fi

赋予执行权限:

[root@ai-linux ~]# chmod +x /usr/local/bin/ai 

下载jq工具:

[root@ai-linux ~]# yum -y install epel-release
[root@ai-linux ~]# yum -y install jq

那么接下来我们就可以开始玩了哦。

四.测试

介绍一下什么是Kubernetes:

[root@ai-linux ~]# ai "讲解一下Kubernetes的原理。"
Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。其核心原理围绕声明式配置和控制器模式展开,通过一系列组件协同工作实现分布式系统的自动化运维。以下是其核心原理的详细解析:---一、核心架构
Kubernetes采用主从架构(Master-Worker),分为控制平面(Control Plane)和工作节点(Node)两部分:#1. 控制平面(Master)- API Server:核心入口,接收所有REST请求(如`kubectl`命令),验证并更新集群状态到`etcd`。- etcd:分布式键值数据库,存储集群所有配置数据和状态(如Pod、Service等资源对象)。- Scheduler:监听未调度的Pod,根据资源需求、亲和性等规则将其绑定到合适节点。- Controller Manager:运行多个控制器(如Deployment、ReplicaSet控制器),持续比对实际状态与期望状态,驱动集群向目标状态收敛。#2. 工作节点(Node)- kubelet:节点代理,负责与API Server通信,管理本机Pod生命周期(创建/销毁容器)、监控资源使用。- kube-proxy:维护节点网络规则(如iptables/IPVS),实现Service的负载均衡和流量转发。- 容器运行时(如containerd、CRI-O):实际运行容器的引擎。---二、核心概念与工作原理
#1. 声明式API与期望状态(Desired State)- 用户通过YAML/JSON文件定义应用的期望状态(如副本数、镜像版本)。- Kubernetes持续监控实际状态,通过控制循环(Control Loop)自动修复偏差(如重启崩溃的Pod)。#2. Pod:最小调度单元- 一个Pod包含一个或多个共享网络/存储的容器,是K8s调度的基本单位。- 每个Pod分配唯一IP,内部容器通过`localhost`通信。#3. 控制器模式(Controller Pattern)- Deployment:管理无状态应用,通过ReplicaSet确保指定数量的Pod副本运行,支持滚动更新和回滚。- StatefulSet:为有状态应用(如数据库)提供有序部署、持久化存储和稳定网络标识。- DaemonSet:确保每个节点运行一个Pod副本(如日志收集器)。- Job/CronJob:运行一次性或定时任务。#4. 服务发现与负载均衡- Service:为一组Pod提供稳定的虚拟IP(ClusterIP)和DNS名称,流量自动负载均衡到后端Pod。- Ingress:通过HTTP路由规则暴露服务到集群外,支持基于路径/域名的流量分发。#5. 配置与存储管理- ConfigMap/Secret:将配置或敏感数据(如密码)与容器解耦,通过环境变量或卷挂载使用。- PersistentVolume(PV):抽象存储资源(如云盘、NFS),由PersistentVolumeClaim(PVC)动态申请。---三、关键工作流程示例
#1. Pod创建流程1. 用户提交Pod定义到API Server。2. Scheduler选择合适节点,绑定Pod与节点。3. 目标节点的kubelet通过容器运行时创建Pod。4. 控制器持续监控Pod状态,确保与期望状态一致。#2. Service流量转发- 用户创建Service时,kube-proxy在节点上配置iptables规则。- 请求到达Service IP时,自动转发到后端Pod(通过Endpoints对象动态维护)。---四、扩展机制• CRD(Custom Resource Definition):自定义资源类型,扩展K8s API。• Operator:基于CRD和控制器模式,封装领域知识(如管理数据库集群)。---五、设计思想
- 声明式优于命令式:用户关注"做什么"而非"如何做"。
- 自愈能力:自动重启失败容器、替换不可用节点。
- 水平扩展:通过控制器轻松调整应用规模。---六、可视化理解
```
用户提交YAML → API Server → etcd存储期望状态↓
控制器检测偏差 → 驱动创建Pod → Scheduler分配节点 → kubelet运行容器↓
Service/Ingress暴露服务 → kube-proxy配置流量规则
```Kubernetes通过分层抽象和自动化机制,将复杂的分布式系统管理简化为对声明式配置的操作,成为云原生时代的操作系统级平台。

在这里插入图片描述
可以看到,由于我们在/usr/local/bin/ai文件中定义了很多关于格式的操作,致使ai输出的文件是比较干净整洁的,并且格式也较为合理,如果不去设置相关规则,那么他输出的就会很乱套,比如:
在这里插入图片描述

哈哈哈哈哈。

我们让他写写Kubernetes的yaml文件试试:

编写一个wordpress搭建脚本,定义数据库镜像版本、wordpress版本、pv-pvc持久化存储:

[root@ai-linux ~]# ai "在Kubernetes部署一个wordpress,要求要使用PV和PVC实现持久化存储,数据库使用mysql:5.7,wordpress使用latest,帮我写成一个yaml"
以下是一个使用 PV 和 PVC 实现持久化存储的 WordPress 部署 YAML 文件,包含 MySQL 5.7 数据库:```yaml
apiVersion: v1
kind: Namespace
metadata:name: wordpress
---
# MySQL 持久卷声明 (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvcnamespace: wordpress
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: standard
---
# WordPress 持久卷声明 (PVC)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: wordpress-pvcnamespace: wordpress
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: standard
---
# MySQL 部署
apiVersion: apps/v1
kind: Deployment
metadata:name: mysqlnamespace: wordpress
spec:selector:matchLabels:app: mysqlstrategy:type: Recreatetemplate:metadata:labels:app: mysqlspec:containers:- image: mysql:5.7name: mysqlenv:- name: MYSQL_ROOT_PASSWORDvalue: rootpassword- name: MYSQL_DATABASEvalue: wordpress- name: MYSQL_USERvalue: wordpress- name: MYSQL_PASSWORDvalue: wordpressports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-persistent-storagemountPath: /var/lib/mysqlvolumes:- name: mysql-persistent-storagepersistentVolumeClaim:claimName: mysql-pvc
---
# MySQL 服务
apiVersion: v1
kind: Service
metadata:name: mysqlnamespace: wordpress
spec:ports:- port: 3306selector:app: mysqlclusterIP: None
---
# WordPress 部署
apiVersion: apps/v1
kind: Deployment
metadata:name: wordpressnamespace: wordpress
spec:selector:matchLabels:app: wordpressstrategy:type: Recreatetemplate:metadata:labels:app: wordpressspec:containers:- image: wordpress:latestname: wordpressenv:- name: WORDPRESS_DB_HOSTvalue: mysql- name: WORDPRESS_DB_USERvalue: wordpress- name: WORDPRESS_DB_PASSWORDvalue: wordpress- name: WORDPRESS_DB_NAMEvalue: wordpressports:- containerPort: 80name: wordpressvolumeMounts:- name: wordpress-persistent-storagemountPath: /var/www/htmlvolumes:- name: wordpress-persistent-storagepersistentVolumeClaim:claimName: wordpress-pvc
---
# WordPress 服务
apiVersion: v1
kind: Service
metadata:name: wordpressnamespace: wordpress
spec:type: NodePortports:- port: 80nodePort: 30080selector:app: wordpress
```使用说明:• 这个 YAML 文件创建了一个名为 `wordpress` 的命名空间• 为 MySQL 和 WordPress 分别创建了 PVC(PersistentVolumeClaim)• 部署了 MySQL 5.7 数据库,使用 PVC 持久化存储数据• 部署了最新版 WordPress,同样使用 PVC 持久化存储• 创建了 WordPress 的 NodePort 服务,可以通过节点 IP 和 30080 端口访问注意事项:• 根据你的 Kubernetes 集群环境,可能需要调整 `storageClassName`(默认为 "standard")• 生产环境中建议使用更安全的密码替换示例中的密码• 如果需要使用动态存储供应,确保你的集群已配置 StorageClass• 对于生产环境,建议考虑使用 StatefulSet 替代 Deployment 来管理数据库要应用这个配置,保存为 wordpress.yaml 后运行:
```bash
kubectl apply -f wordpress.yaml
```

在这里插入图片描述

写个Python代码:

[root@ai-linux ~]# ai "使用Python写一个俄罗斯方块。"# Python俄罗斯方块游戏下面是一个使用Python和Pygame库实现的简单俄罗斯方块游戏:```python
import pygame
import random# 初始化
pygame.init()# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (128, 128, 128)
COLORS = [(0, 255, 255),  # I - 青色(0, 0, 255),    # J - 蓝色(255, 165, 0),  # L - 橙色(255, 255, 0),  # O - 黄色(0, 255, 0),    # S - 绿色(128, 0, 128),  # T - 紫色(255, 0, 0)     # Z - 红色
]# 游戏设置
BLOCK_SIZE = 30
GRID_WIDTH = 10
GRID_HEIGHT = 20
SCREEN_WIDTH = BLOCK_SIZE * (GRID_WIDTH + 6)
SCREEN_HEIGHT = BLOCK_SIZE * GRID_HEIGHT
GAME_AREA_LEFT = BLOCK_SIZE# 方块形状
SHAPES = [[[1, 1, 1, 1]],  # I[[1, 0, 0],[1, 1, 1]],  # J[[0, 0, 1],[1, 1, 1]],  # L[[1, 1],[1, 1]],  # O[[0, 1, 1],[1, 1, 0]],  # S[[0, 1, 0],[1, 1, 1]],  # T[[1, 1, 0],[0, 1, 1]]   # Z
]# 创建游戏窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("俄罗斯方块")clock = pygame.time.Clock()class Tetris:def __init__(self):self.grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]self.current_piece = self.new_piece()self.game_over = Falseself.score = 0self.level = 1self.fall_speed = 0.5  # 初始下落速度(秒)self.fall_time = 0def new_piece(self):# 随机选择一个方块形状shape = random.choice(SHAPES)color = COLORS[SHAPES.index(shape)]# 初始位置(居中)x = GRID_WIDTH // 2 - len(shape[0]) // 2y = 0return {"shape": shape, "color": color, "x": x, "y": y}def valid_move(self, piece, x_offset=0, y_offset=0):for y, row in enumerate(piece["shape"]):for x, cell in enumerate(row):if cell:new_x = piece["x"] + x + x_offsetnew_y = piece["y"] + y + y_offsetif (new_x < 0 or new_x >= GRID_WIDTH or new_y >= GRID_HEIGHT or (new_y >= 0 and self.grid[new_y][new_x])):return Falsereturn Truedef rotate_piece(self):# 获取当前方块形状shape = self.current_piece["shape"]# 旋转矩阵(转置然后反转每一行)rotated = [[shape[y][x] for y in range(len(shape)-1, -1, -1)] for x in range(len(shape[0]))]old_shape = self.current_piece["shape"]self.current_piece["shape"] = rotated# 如果旋转后位置无效,则恢复原状if not self.valid_move(self.current_piece):self.current_piece["shape"] = old_shapedef lock_piece(self):for y, row in enumerate(self.current_piece["shape"]):for x, cell in enumerate(row):if cell:if self.current_piece["y"] + y < 0:self.game_over = Trueelse:self.grid[self.current_piece["y"] + y][self.current_piece["x"] + x] = self.current_piece["color"]# 检查是否有完整的行self.clear_lines()# 生成新方块self.current_piece = self.new_piece()# 检查游戏是否结束if not self.valid_move(self.current_piece):self.game_over = Truedef clear_lines(self):lines_cleared = 0for y in range(GRID_HEIGHT):if all(self.grid[y]):lines_cleared += 1# 移动上面的行下来for y2 in range(y, 0, -1):self.grid[y2] = self.grid[y2-1][:]self.grid[0] = [0 for _ in range(GRID_WIDTH)]# 更新分数if lines_cleared == 1:self.score += 100 * self.levelelif lines_cleared == 2:self.score += 300 * self.levelelif lines_cleared == 3:self.score += 500 * self.levelelif lines_cleared == 4:self.score += 800 * self.level# 更新等级和下落速度self.level = self.score // 2000 + 1self.fall_speed = max(0.05, 0.5 - (self.level - 1) * 0.05)def update(self, delta_time):if self.game_over:returnself.fall_time += delta_timeif self.fall_time >= self.fall_speed:self.fall_time = 0if self.valid_move(self.current_piece, 0, 1):self.current_piece["y"] += 1else:self.lock_piece()def draw(self):# 绘制游戏区域背景pygame.draw.rect(screen, BLACK, (GAME_AREA_LEFT, 0, BLOCK_SIZE * GRID_WIDTH, SCREEN_HEIGHT))# 绘制网格线for x in range(GRID_WIDTH + 1):pygame.draw.line(screen, GRAY, (GAME_AREA_LEFT + x * BLOCK_SIZE, 0), (GAME_AREA_LEFT + x * BLOCK_SIZE, SCREEN_HEIGHT))for y in range(GRID_HEIGHT + 1):pygame.draw.line(screen, GRAY, (GAME_AREA_LEFT, y * BLOCK_SIZE), (GAME_AREA_LEFT + GRID_WIDTH * BLOCK_SIZE, y * BLOCK_SIZE))# 绘制已固定的方块for y in range(GRID_HEIGHT):for x in range(GRID_WIDTH):if self.grid[y][x]:pygame.draw.rect(screen, self.grid[y][x], (GAME_AREA_LEFT + x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))pygame.draw.rect(screen, WHITE, (GAME_AREA_LEFT + x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE), 1)# 绘制当前方块if not self.game_over:for y, row in enumerate(self.current_piece["shape"]):for x, cell in enumerate(row):if cell:pygame.draw.rect(screen, self.current_piece["color"], (GAME_AREA_LEFT + (self.current_piece["x"] + x) * BLOCK_SIZE, (self.current_piece["y"] + y) * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))pygame.draw.rect(screen, WHITE, (GAME_AREA_LEFT + (self.current_piece["x"] + x) * BLOCK_SIZE, (self.current_piece["y"] + y) * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE), 1)# 绘制分数和等级font = pygame.font.SysFont(None, 36)score_text = font.render(f"分数: {self.score}", True, WHITE)level_text = font.render(f"等级: {self.level}", True, WHITE)screen.blit(score_text, (GAME_AREA_LEFT + GRID_WIDTH * BLOCK_SIZE + 10, 30))screen.blit(level_text, (GAME_AREA_LEFT + GRID_WIDTH * BLOCK_SIZE + 10, 70))# 游戏结束提示if self.game_over:font = pygame.font.SysFont(None, 48)game_over_text = font.render("游戏结束!", True, (255, 0, 0))screen.blit(game_over_text, (SCREEN_WIDTH // 2 - 100, SCREEN_HEIGHT // 2 - 30))def main():game = Tetris()running = Truewhile running:delta_time = clock.tick(60) / 1000.0  # 转换为秒for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif not game.game_over:if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:if game.valid_move(game.current_piece, -1, 0):game.current_piece["x"] -= 1elif event.key == pygame.K_RIGHT:if game.valid_move(game.current_piece, 1, 0):game.current_piece["x"] += 1elif event.key == pygame.K_DOWN:if game.valid_move(game.current_piece, 0, 1):game.current_piece["y"] += 1elif event.key == pygame.K_UP:game.rotate_piece()elif event.key == pygame.K_SPACE:# 硬降落while game.valid_move(game.current_piece, 0, 1):game.current_piece["y"] += 1game.lock_piece()screen.fill(BLACK)game.update(delta_time)game.draw()pygame.display.flip()pygame.quit()if __name__ == "__main__":main()
```## 游戏说明• 控制方式:- 左箭头:向左移动方块- 右箭头:向右移动方块- 下箭头:加速下落- 上箭头:旋转方块- 空格键:硬降落(立即下落到底部)• 游戏规则:- 当一行被填满时,该行会被消除,上面的行会下落- 消除的行数越多,得分越高- 随着分数增加,游戏等级会提高,方块下落速度会加快- 当新方块无法放置时,游戏结束• 运行要求:- 需要安装Pygame库:`pip install pygame`这个实现包含了俄罗斯方块的基本功能,你可以根据需要进一步扩展,比如添加音效、暂停功能、下一个方块预览等。

哈哈哈哈当然可以这么玩哈,但是一定要注意自己的余额¥!

那我就再用一个相同的结尾结束这篇文章吧:

“想象一下,当Linux的稳定性和可定制性遇上AI的强大能力,会迸发出怎样的火花?这不仅让开发者如虎添翼,更为整个开源生态注入了新的活力。未来的世界级应用或许就诞生于这样的结合之中。现在,让我们一起走进这个激动人心的技术前沿,探索如何将Linux与AI大模型完美融合,开启属于我们的智能化新时代!“

相关文章:

在Linux系统命令行如何使用deepseek官方API调用AI大模型?

在Linux系统命令行如何调用deepseek官方API调用AI大模型&#xff1f; 书接上文&#xff1a; 同样的开头哈哈哈哈&#xff1a; ”在这个AI技术飞速发展的时代&#xff0c;每一个程序员都应该问问自己&#xff1a;如何将人工智能的强大能力融入到我们熟悉的操作系统中&#xff…...

我开源了一个“宝藏”开源项目

我开源了一个“宝藏”开源项目 - AI需求分析项目 | 适合交作业和学习 &#x1f680; 前言 大家好&#xff01;最近在学习软件工程和大模型应用开发的过程中&#xff0c;我发现许多学生都遇到了需求分析AI的题目。把一份需求文档转化为用户故事、实体关系或数据库设计&#xff…...

SmolDocling:一种超紧凑的视觉语言模型,用于端到端多模态文档转换

paper地址:SmolDocling: An ultra-compact vision-language model for end-to-end multi-modal document conversion Huggingface地址:SmolDocling-256M-preview 代码对应的权重文件:SmolDocling-256M-preview权重文件 一、摘要 以下是文章摘要的总结: SmolDocling 是一…...

理解CSS3 的 max/min-content及fit-content等width值

本文首发在我的个人博客&#xff1a; 理解CSS3 的 max/min-content及fit-content等width值https://www.brandhuang.com/article/1744253362074 width/height 的属性值 fit-content 这是一个 CSS3 属性&#xff0c;用来设置元素的宽度和高度&#xff0c;值为 fit-content&#…...

关键路径任务延误,如何快速调整

快速识别延误原因、优化资源配置、实施任务并行、调整任务优先级是关键路径任务延误后快速调整的有效方式。其中&#xff0c;快速识别延误原因尤为重要&#xff0c;需要项目管理者及时发现影响关键路径任务延误的核心问题&#xff0c;通过系统性的分析&#xff0c;确保延误的具…...

Elasticsearch 全面解析

Elasticsearch 全面解析 前言一、简介核心特性应用场景 二、核心原理与架构设计1. 倒排索引&#xff08;Inverted Index&#xff09;2. 分片与副本机制&#xff08;Sharding & Replication&#xff09;3. 节点角色与集群管理 三、核心特点1. 灵活的查询语言&#xff08;Que…...

linux入门四:Linux 编译器

一、C 语言编译器 GCC&#xff1a;开启编程之旅 1.1 GCC 安装&#xff1a;一站式工具链 GCC&#xff08;GNU Compiler Collection&#xff09;是 Linux 下最常用的 C/C 编译器&#xff0c;支持多种编程语言。安装命令&#xff08;适用于 Debian/Ubuntu 系统&#xff09;&…...

springboot集成springcloud vault读值示例

接上三篇 Vault---机密信息管理工具安装及常用示例 Vault机密管理工具集群配置示例 vault签发根证书、中间证书、ca证书流程记录 项目里打算把所有密码都放到vault里管理&#xff0c;vault提供了springcloud vault用来在springboot里连接vault&#xff0c;启动加载vault里的值放…...

什么是虚拟线程?与普通线程的区别

引言&#xff1a;线程的演进与挑战 在传统的并发编程中&#xff0c;线程是一种非常重要的概念。我们使用线程来实现任务的并发执行&#xff0c;从而提高程序的执行效率。普通线程&#xff08;如 Thread 类&#xff09;是一种重量级的线程&#xff0c;每个线程都对应着操作系统…...

edis 主从复制

Redis 主从复制是一种数据同步机制&#xff0c;主节点&#xff08;Master&#xff09;将数据复制到一个或多个从节点&#xff08;Slave&#xff09;&#xff0c;从 而实现数据备份、读写分离和高可用性。 1、解决我们的日常一个单机故障&#xff0c;而衍生出来 主从架构 2、…...

机器视觉+深度学习,让电子零部件表面缺陷检测效率大幅提升

在精密加工的3C电子行业中&#xff0c;一抹0.1毫米的油渍&#xff0c;一粒肉眼难辨的灰尘或将引发整机性能隐患。当制造业迈入微米级品质竞争时代&#xff0c;产品表面看似微不足道的脏污缺陷&#xff0c;正成为制约企业高质量发展的隐形枷锁。分布无规律的污渍斑点、形态各异的…...

Java基础关键_035_Lambda 表达式

目 录 一、引例&#xff1a;TreeSet 排序 1.实现 Comparable 接口 2.比较器 3.匿名内部类 4.Lambda 表达式 5.Lambda 表达式和匿名内部类的区别 二、函数式编程 三、Lambda 表达式的使用 1.无返回值函数式接口 &#xff08;1&#xff09;无返回值无参数 &#xff08;…...

OPEX baota 2024.02.26

OPEX baota 2024.02.26 运维集成软件宝塔2024.02.26作废例子&#xff1a; 最重要的两个地方&#xff1a;上传文件 网站&#xff0c;重启应用服务器&#xff08;tomcat&#xff09; 其他很少用的...

若依 前后端部署

后端&#xff1a;直接把代码从gitee上拉去到本地目录 (https://gitee.com/y_project/RuoYi-Vue ) 注意下redis连接时password改auth 后端启动成功 前端&#xff1a;运行前首先确保安装了node环境&#xff0c;随后执行&#xff1a; &#xff01;&#xff01;一定要用管理员权限…...

LeetCode算法题(Go语言实现)_37

题目 给你一棵以 root 为根的二叉树&#xff0c;二叉树中的交错路径定义如下&#xff1a; 选择二叉树中 任意 节点和一个方向&#xff08;左或者右&#xff09;。 如果前进方向为右&#xff0c;那么移动到当前节点的的右子节点&#xff0c;否则移动到它的左子节点。 改变前进方…...

网络3 子网掩码 划分ip地址

1.根据子网掩码判断主机数 IP地址网络位主机位 核心&#xff1a;将主机位划分为子网位和主机位 疑问&#xff1a;子网位有什么作用 子网掩码&#xff1a;网络位全为1&#xff0c;主机位全为0 主机数2^主机位 -2 2.根据主机和子网判断子网掩码 有一个B类网络145.38.0.0需要划…...

使用 react-three-fiber 快速重构 Three.js 场景⚛️

不明白的知识先放在一边&#xff0c;激发兴趣是第一步&#xff0c;所以不必纠结代码的细节&#xff0c;相信我你很快就会爱上这种感觉&#xff01;&#xff01;&#xff01; 今天&#xff0c;我们将更进一步&#xff0c;将上一篇中vite npm传统 Three.js 原生代码完整 重构为 …...

RT-Thread 屏蔽在线软件包的方法

说明 可能大家对 RT-Thread 的 Kconfig 配置项&#xff0c;Scons 构建有些疑惑&#xff0c;其实 BSP 的 Kconfig 可以自由的配置&#xff0c;目录也可以自由的调整 RT-Thread BSP 默认都有在线软件包的配置项&#xff0c;如果你不需要在线软件包&#xff0c;也可以把这个配置项…...

深入理解Java反射

反射(Reflection)是Java语言的一个强大特性&#xff0c;它允许程序在运行时动态地获取类的信息并操作类或对象的属性、方法和构造器。就是在获取运行时的java字节码文件&#xff0c;通过各种方法去创建对象&#xff0c;反射是Java被视为动态语言的关键特性之一。 反射其实就是…...

Apipost自定义函数深度实战:灵活处理参数值秘籍

在开发过程中&#xff0c;为了更好地处理传递给接口的参数值&#xff0c;解决在调试过程中的数据处理问题&#xff0c;我们经常需要用到函数处理数据。 过去&#xff0c;我们通过预执行脚本来处理数据&#xff0c;先添加脚本&#xff0c;然后将处理后的结果再赋值给请求参数。…...

对重大保险风险测试的算法理解

今天与同事聊到重大保险风险测试&#xff0c;借助下面链接的文章&#xff0c; 谈IFRS 17下的重大保险风险测试 - 知乎 谈一下对下图这个公式的理解。 尤其是当看到下面这段文字的解释时&#xff0c;感觉有些算法上的东西&#xff0c;需要再澄清一些。 首先&#xff0c;上面文…...

如何白嫖Grok3 API? 如何使用Grok3 API调用实例?怎么使用Grok3模型?

前段时间&#xff0c;Grok3&#xff08;想要体验Grok3的童鞋可以参考本文&#xff1a;Grok 上线角色扮演功能&#xff0c;教你课后作业手到擒来&#xff0c;Grok3使用次数限制&#xff1f;如何使用Grok3? Grok3国内支付手段如何订阅升级Premium - AI is all your need!&#x…...

学习Python的优势体现在哪些方面?

文章目录 前言易于学习和使用应用领域广泛丰富的开源库和社区支持跨平台兼容性职业发展前景好 前言 学习 Python 具有多方面的优势&#xff0c;这使得它成为当今最受欢迎的编程语言之一&#xff0c;以下为你详细介绍。 易于学习和使用 语法简洁易懂&#xff1a;Python 的语法…...

icoding题解排序

数组合并 假设有 n 个长度为 k 的已排好序&#xff08;升序&#xff09;的数组&#xff0c;请设计数据结构和算法&#xff0c;将这 n 个数组合并到一个数组&#xff0c;且各元素按升序排列。即实现函数&#xff1a; void merge_arrays(const int* arr, int n, int k, int* out…...

LangChain-检索系统 (Retrieval)

检索系统 (Retrieval) 检索系统是LangChain的核心组件之一&#xff0c;它提供了从各种数据源获取相关信息的能力&#xff0c;是构建知识增强型应用的基础。本文档详细介绍LangChain检索系统的组件、工作原理和最佳实践。 概述 检索系统解决了大型语言模型知识有限和过时的问…...

Fast网络速度测试工具

目录 网站简介 功能特点 测试过程 为什么使用Fast 如果网络速度不达标 网站简介 Fast是一个由Netflix提供的网络速度测试工具&#xff0c;主要用来测试用户的互联网下载速度。它以其简洁的界面和快速的测试过程而受到用户的欢迎。 功能特点 下载速度测试&#xff1a;这是…...

ubuntu20.04在mid360部署direct_lidar_odometry(DLO)

editor&#xff1a;1034Robotics-yy time&#xff1a;2025.4.10 1.下载DLO&#xff0c;mid360需要的一些...: 1.1 在工作空间/src下 下载DLO&#xff1a; git clone https://github.com/vectr-ucla/direct_lidar_odometry 1.2 在工作空间/src下 下载livox_ros_driver2&…...

制造企业数据治理体系搭建与业务赋能实践

当下制造企业正面临着前所未有的机遇与挑战&#xff0c;从多环节业务协同的复杂性&#xff0c;到海量数据资源的沉睡与孤岛化&#xff1b;从个性化定制需求的爆发&#xff0c;到供应链效率优化的迫切性——如何通过数据治理将“数据包袱”转化为“数据资产”&#xff0c;已成为…...

java基础多态------面试八股文

是什么是多态 类引用指向子类对象&#xff0c;并调用子类重写的方法&#xff0c;实现不同的行为 例子 class Animal {void sound() {System.out.println("动物发出声音");} }class Dog extends Animal {Overridevoid sound() {System.out.println("狗叫&…...

【LunarVim】解决which-key 自定义键位注册不成功问题

问题描述 LunarVim将which-key设置放在一个keymaps.lua中&#xff0c;然后config.lua调用reload “user.keymaps”&#xff0c;键位没用注册成功&#xff0c;而直接写在config.lua中&#xff0c;就注册成功 这暴露了LunarVim 插件和配置加载顺序的一些细节坑&#xff0c;下面解…...