【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
《API Testing and Development with Postman》最新第二版封面
文章目录
- 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程
- 1 前言
- 2 准备工作
- 3 具体部署
- 3.1 将项目 Fork 到自己名下
- 3.2 创建虚拟环境并安装依赖
- 3.3 初始运行与项目调试
- 4 示例项目的用法
- 5 复盘与总结
写在前面
本篇完整介绍了贯穿全书的 todo-list 演示项目的本地部署过程,并结合亲身经历复盘了 AI 在整个过程中发挥的作用及今后应该注意的一些关键细节。一旦完成了该项目的本地部署,很多和项目本身无关的干扰因素都将降至最低,可以和本书作者的思路更加同步,还能进一步积累 Python 在 Web 应用快速开发方面的宝贵经验,可谓一举多得。本篇姑且可视为本次专栏的收尾篇,因为全书最主要的重点知识和难点环节都已经全部整理出来了。诚挚欢迎所有对 Postman 接口测试感兴趣的朋友前来交流心得,共同进步!
最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程
1 前言
2025 年 2 月 7 日,我顺利完成了高分实战专栏《Postman接口测试与开发实战》最后一篇自学笔记的梳理。系统复盘时才发现 示例 API 项目 的本地化问题一直没有解决。该项目是一个用 Python
搭建的待办清单简易应用,不仅开放了 API
接口和 OpenAPI
文档页,还提供了一个简易页面方便进行 CRUD
操作:
【图 1:示例 API 项目首页效果图】
我试过按照 README 的提示进行操作,结果服务端虽然启动成功了,一访问门户首页就报 500 异常;但是接口文档页(即 Swagger 接口页)又能正常打开。随后几天我又在 GitHub Copilot 的提示下了解了 Django
、Flask
以及 FastAPI
相关的知识,才慢慢对这个示例项目有了点感觉。趁着刚学完 FastAPI
集成 SQLite
的新鲜劲,今天再次挑战一举拿下,便有了这篇复盘文章。
一旦解决了该项目的本地部署问题,原书《API Testing and Development with Postman, Second Edition》中的配套练习就无需再用 GitPod
的线上环境来搭建了;苛刻的无操作超时的问题也消失了;后续遇到新的测试需求也能第一时间在本地直接调试验证,可谓一举多得。
最关键的是,借助这次调试 Python
项目的实战经历,我对 AI 辅助编程又有了更立体的认识。
2 准备工作
相关前置准备工作如下:
Git
:v2.45.1
(能克隆GitHub
项目就行);- 一个有效的
GitHub
帐号; Python
:v3.11
及以上(示例项目要求);Anaconda Prompt
:v24.11.3
(方便创建Python
虚拟环境);
3 具体部署
3.1 将项目 Fork 到自己名下
示例项目地址:https://github.com/djwester/todo-list-testing
。
为了方便后续二次开发,最好将原项目复刻到自己名下:
【图 2:复刻原项目到自己名下】
$ (pwd).Path
D:\sandbox
$ git clone git@github.com:SafeWinter/todo-list-testing.git
$ cd todo-list-testing
实测效果图:
【图 3:将 Fork 后的示例项目克隆到本地】
3.2 创建虚拟环境并安装依赖
本地项目代码就绪后,再来创建一个 Python
虚拟环境 todolist
(在 Anaconda Prompt
命令行中实现):
# 查看当前环境列表
> conda env list# conda environments:
#
base * C:\Users\ad\anaconda3
myenv C:\Users\ad\anaconda3\envs\myenv# 新建 todolist 环境
> conda create --prefix D:\conda_venvs\todolist python=3.11
# 配置自定义虚拟环境所在路径
> conda config --add envs_dirs D:\conda_venvs
# 切到 todolist 环境
> conda activate todolist
# 确认当前环境
> conda env list# conda environments:
#
base C:\Users\ad\anaconda3
myenv C:\Users\ad\anaconda3\envs\myenv
todolist * D:\conda_venvs\todolist
>
关于虚拟环境的删除
如果哪天不需要该环境,则可使用以下命令彻底删除:
# 使用 conda env remove 命令 > conda env remove --prefix=D:\conda_venvs\todolist # 如果上述命令不成功,则可手动删除 > rm -rf D:\conda_venvs\todolist # 清理 Conda 缓存和元数据 > conda clean --all # 验证操作结果 > conda env list
注意:
- 删除虚拟环境后,所有安装在该环境中的包和数据都会被清除,且无法恢复;
- 如果虚拟环境正在使用中(已激活状态),请先停用该环境:
conda deactivate
。
虚拟环境搭好后,根据 README 文档,需要安装 poetry
依赖管理工具:
> curl -sSL https://install.python-poetry.org | python -
其中:
-s
(--silent
):静默模式,不显示进度条或错误信息;-S
(--show-error
):与-s
一起使用时,如果请求失败,curl
会显示错误信息;-L
(--location
):如果请求的 URL 有重定向,curl
会自动跟随重定向;-
:表示标准输入(stdin
),用于将curl
下载的内容直接传递给python
解释器执行。
然后进入刚才的示例项目根路径,利用 poetry install
安装所需依赖项:
(D:\conda_venvs\todolist) C:\Users\ad> D:
(D:\conda_venvs\todolist) D:\> cd sandbox\todo-list-testing
(D:\conda_venvs\todolist) D:\sandbox\todo-list-testing> poetry install
Installing dependencies from lock filePackage operations: 54 installs, 0 updates, 0 removals- Installing mdurl (0.1.2)- Installing colorama (0.4.6)
# ...- Installing requests (2.32.3)- Installing sqlalchemy (2.0.31)Installing the current project: todo-list (0.1.0)
Error: The current project could not be installed: No file/folder found for package todo-list
If you do not want to install the current project use --no-root.
If you want to use Poetry only for dependency management but not for packaging, you can disable package mode by setting package-mode = false in your pyproject.toml file.
If you did intend to install the current project, you may need to set `packages` in your pyproject.toml file.(D:\conda_venvs\todolist) D:\sandbox\todo-list-testing>
可以看到,安装到最后有个报错(其实并不影响项目启动):
【图 4:执行 poetry install 到最后显示的报错界面(不影响)】
也可以根据提示再次运行 poetry install --no-root
,警告就消失了:
【图 5:添加 --no-root 选项后依赖安装过程就不报错了】
3.3 初始运行与项目调试
到了这一步,项目就初步具备启动条件了,执行命令 poetry run uvicorn main:app --reload
即可运行服务端:
【图 6:直接通过 poetry run 启动后台服务端(运行正常)】
但只要在浏览器中访问首页 URL http://127.0.0.1:8000
则会报错:
【图 7:在浏览器打开项目首页看到的页面及后台报错情况】
但此时访问接口文档页(GET /docs
)却能正常打开:
【图 8:示例项目的接口文档页可以正常打开】
为什么会报错呢?其实控制台最后一句话已经提示得很明显了(我之前一直没仔细看):某语句在调用 startswith
属性时报了空指针异常;但是控制台并没有给出具体的文件位置。根据 README
的操作提示可以得知,这里跳过了复制生成 .envrc
文件的步骤,其中定义了一个只在 Linux
系统生效的环境变量 DATABASE_URL
:
# 漏掉的命令:cp .envrc.example .envrc
# .envrc.example 只有一个语句:
export DATABASE_URL="sqlite+pysqlite:///./sql_db.db"
这就说明报错来自数据库的初始化。其实也可以用 VSCode
全局检索关键字 startswith
,即可锁定问题出处:
【图 9:在 VSCode 中全局检索 startswith 锁定后端报错的具体出处】
这样就定位到了三处包含 startswith
方法调用的文件,打开任意一个,例如 database.py
,可以看到如下内容:
def db_session():uri = os.getenv("DATABASE_URL")if uri.startswith("postgres://"):uri = uri.replace("postgres://", "postgresql://", 1)engine = create_engine(uri)Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)db = Session()maybe_initialize_db(db, engine)with Session() as session:yield sessionsession.close()
注意第 2 至 4 行,这表明 uri
是从环境变量中读取 DATABASE_URL
的值,且项目还支持 postgreSQL
数据库;可惜实际运行时读取失败了。
为了在 Windows
系统中实现快速启动,这里直接导入一个硬编码的 uri
模块,并令其取值为默认字符串 "sqlite+pysqlite:///./sql_db.db"
:
于是新建模块 database/uri.py
并输入以下内容:
uri = "sqlite+pysqlite:///./sql_db.db"
然后分别导入报错的那三个文件,并进行如下调整:
# database/database.py
from database.uri import uri
# ...
def db_session():engine = create_engine(uri)# ...# create_tables.py
from database.uri import uri
# ...
engine = create_engine(uri)# remove_tables.py
from database.uri import uri
# ...
engine = create_engine(uri)
改好后,再次刷新浏览器页面,就能看到项目首页了(启动服务端时加了 --reload
选项支持动态更新):
【图 10:对 uri 模块进行硬编码导入后看到的项目首页效果】
4 示例项目的用法
该项目看似简陋,其实还包含了很多必要的功能点:
- 用户登录:用户名可以是
user1
、user2
、admin
,登录密码均为12345
; - 只有自己创建的待办事项可以被删除;
- 页面上可以修改待办事项的几个状态:
Draft
、In Progress
、Complete
; - 如果存在删不掉的数据,可退出运行,并执行数据库初始化命令:
poetry run python remove_tables.py
如果想调用 API
接口,则可以打开 GET /docs
页面利用 OpenAPI
接口规范生成的标准接口进行测试(如获取登录令牌 POST /token
):
【图 11:在 OpenAPI 接口页尝试发送 POST 请求获取登录令牌】
更多操作步骤,可以结合源码进行二次开发,加深对 API
接口调试的理解。
5 复盘与总结
这次的项目本地化实战其实走了很多弯路:明明可以从后台报错信息中直接找到解决方案,之前的几次尝试我都忽略了这个关键细节,反而让 GH Copilot
列出项目用到的主要技术栈,然后一个一个地去了解、一个一个从零学起。这么做不能说没用,毕竟项目调试始终存在一定的偶然性,全面了解项目用到的技术栈可以大幅提高调试的一次通过率;只是对于这个项目而言有点杀鸡用牛刀了——最终的解决方案(导出 uri
模块)和任何一个 Python Web
框架本质上都没有任何关系。说到底还是自己的粗心大意白白耽误了一周多的时间。
另一方面也可以看到,强大如 Copilot
、DeepSeek
这样的 AI 工具,其实是无法快速帮我锁定这个漏掉的关键细节的。它们只会按我给的思路和提示词进行回答,从这个角度来看,当下这些炙手可热的 AI 工具似乎又过于笨拙——因为真正有经验的老程序员,是一定会先问我报了什么错再来确定具体的解决方案的。因此,用好 AI 的关键,其实就在于能否从自身出发,切实培养出一系列良好的软件开发习惯,比如:问题导向、低耦合高内聚、重视测试用例……不一而足;能否在大家都能使用 AI 模型指导编程实践的情况下,直达问题本质,率先找到突破口。
这次实战也再次印证了 AI 工具 遇强则强 的特点。或许,今后无论 AI 如何发展,人与人之间的各种差距,可能都不会因为 AI 智能的大幅提升而被彻底消除;更有可能出现的情况是进一步加深人们在认知层面上的 “贫富差距”。
相关文章:
【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)
《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…...
LearnOpenGL——高级OpenGL(下)
教程地址:简介 - LearnOpenGL CN 高级数据 原文链接:高级数据 - LearnOpenGL CN 在OpenGL中,我们长期以来一直依赖缓冲来存储数据。本节将深入探讨一些操作缓冲的高级方法。 OpenGL中的缓冲本质上是一个管理特定内存块的对象,它…...
wangEditor 编辑器 Vue 2.0 + Nodejs 配置
资料 Vue2.0 版本的安装:https://www.wangeditor.com/v5/for-frame.html#%E4%BD%BF%E7%94%A8上传图片配置:https://www.wangeditor.com/v5/menu-config.html#%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87 安装步骤 1.安装界面基础部分 <!-- 富文本编辑器…...
机器学习·数据处理
前言 对于大规模数据,我们经常会使用python内置函数或者编写脚本进行批量化处理,从而提高后续使用算法的效率。 1. 正则表达式 定义:用于检索、替换符合某个模式的文本,是文本预处理常用技术。基本语法 符号描述.匹配除换行符 …...
如何在Bigemap Pro中用线分割面、挖空
有时候需要以一条线为界对面元素进行分割或者是需要在一个面元素里面挖空一个面形状的洞,对此需求可以使用bigemap pro工具实现,这里为你介绍一下具体的操作方法。 【一】画线分割面 第一步:现在这是一个不规则多边形,想要以手动…...
网络安全入门攻击与防御实战(四)
漏洞利用:永恒之蓝(MS17-010)与同类漏洞解析 1 永恒之蓝(MS17-010)漏洞背景 (1)漏洞信息 CVE编号:CVE-2017-0143 ~ CVE-2017-0148 影响范围:Windows XP ~ Windows 201…...
DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)
前言 在当今数字化时代,AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选。今天,就让我们一起探索如何将DeepSeek接入PyCharm,实现高效、智…...
CF1801D
CF1801D 题目大意: n n n 个顶点, m m m 条边的图。你一开始在起点 1,拥有 P P P 枚硬币,通过每条 ( i , j ) (i,j) (i,j) 边都需要花费一定的硬币 s ( i , j ) s(i,j) s(i,j)。但你在每个城市 i i i 都可以打工赚硬币 w i w…...
大厂算法面试常见问题总结:高频考点与备战指南
在大厂算法面试中,数据结构与算法是必考的核心内容。 无论是校招还是社招,算法题的表现往往决定了面试的成败。 为了帮助大家更好地备战,本文总结了大厂算法面试中的高频考点,并提供了详细的备战建议,助你轻松应对面…...
【R语言】主成分分析与因子分析
一、主成分分析 主成分分析(Principal Component Analysis, PCA)是一种常用的无监督数据降维技术,广泛应用于统计学、数据科学和机器学习等领域。它通过正交化线性变换将(高维)原始数据投影到一个新的坐标系ÿ…...
解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025
2025 年 3 月 11-13 日,全球规模最大的嵌入式展览会——Embedded World 2025 将在德国纽伦堡盛大开幕。作为物联网和嵌入式技术领域的领先企业,乐鑫信息科技 (688018.SH) 将展示在 AI LLM、HMI、双频 Wi-Fi 6、低功耗 MCU 和 Matter 等领域的最新技术及解…...
人工智能基础之数学基础:01高等数学基础
函数 极限 按照一定次数排列的一列数:“,“,…,"…,其中u 叫做通项。 对于数列{Un}如果当n无限增大时,其通项无限接近于一个常数A,则称该数列以A为极限或称数列收敛于A,否则称数列为发散, 极限值 左…...
【从0做项目】Java搜索引擎(8) 停用词表 正则
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 文章导读 零:项目结果展示 一:前引 二:停用词表 1:…...
线程和进程的区别
如果说一个服务器同一时刻收到了许多请求,针对每一个请求,操作系统都会产生一个进程,从而给这个请求提供一些服务 ,返回响应,如果请求处理完了,这个进程就要销毁了!如果请求很多的话,…...
深入理解 QObject的作用
QObject 作为 Qt 库中所有对象的基类,其地位无可替代。几乎 Qt 框架内的每一个类,无论是负责构建用户界面的 QWidget,还是专注于数据处理与呈现的 QAbstractItemModel,均直接或间接继承自 QObject。这种继承体系赋予 Qt 类库高度的…...
解码 NLP:从萌芽到蓬勃的技术蜕变之旅
内容概况: 主要讲述NLP专栏的内容和NLP的发展及其在现代生活中的广泛应用。课程强调实践为主、理论为辅的学习方法,并通过多个生活场景展示了NLP技术的实际应用,如对话机器人、搜索引擎、翻译软件、电商推荐和智能客服等。 这边我就不多做自我…...
【核心算法篇十五】《深度解析DeepSeek遗传算法:让超参数调优从“玄学”变“科学”的终极指南》
引言:超参数调优的“炼丹困局”与破局之路 在机器学习的世界里,调参工程师常被戏称为"炼丹师"——面对动辄几十个超参数的复杂模型,我们就像古代术士守着炼丹炉,不断尝试各种参数组合,期待偶然炼出"仙丹"。传统网格搜索(Grid Search)需要遍历所有可…...
Python—变量、基本数据类型、类型的转换
文章目录 Python—变量、基本数据类型1 格式化输出2 号的使用3 变量的数据类型4 type() 函数的使用5 数据类型的基本介绍5.1 int 整型5.2 float 浮点类型5.3 bool 布尔类型5.4 str 字符串类型5.5 字符串驻留机制5.6 数据类型的转换(1)隐式转换ÿ…...
启明星辰规则库下载
启明星辰规则库下载 一、脚本介绍 1、背景介绍 因为项目上有启明星辰的安全设备、并且在内网无法直接连接互联网进行在线升级,必须使用离线升级模式,下载规则库升级,每月一更有点繁琐,所以写了这个b脚本,偷懒一下&a…...
uniapp 拖拽排序
1.拖拽排序 使用 sortablejs库 npm install sortablejs --save-dev <template><view id"list"><view v-for"(item, index) in list" :key"item.id" class"item">{{ item.name }}</view></view> </t…...
测试。。。
移动到中位数位置能保证总移动距离最小,数学知识 #include <iostream> #include <vector> #include <cmath> using namespace std;int main() {int n;string s;cin >> n >> s;vector<int> positions;// 记录所有1的位置for (…...
Java常用设计模式及其应用场景
1. 什么是设计模式? 设计模式是一个经过多次验证的、针对常见问题的可复用解决方案。设计模式并不是具体的代码实现,而是给出了如何解决问题的思路和结构。在实际开发过程中,设计模式有助于开发者快速找到合适的解决方案,从而减少…...
2000字,极简版华为数字化转型方法论
作为国内科技行业的领军者,华为的成功经验为众多企业提供了宝贵的借鉴。本文将围绕准备、规划和执行三个阶段展开,结合华为的实践案例,深入剖析其数字化转型的方法论,希望能为您的企业数字化转型提供有益的参考。 一、数字化转型…...
Ubuntu:20.04更新cmake到更高版本
从输出信息可以看出,您当前的系统中已经安装了 cmake,但版本是 3.16.3,而您的项目需要 CMake 3.18 或更高版本。默认情况下,Ubuntu 20.04 的官方软件仓库中提供的 CMake 版本较低(如 3.16.3),因…...
【SpringBoot教程】Spring Boot + MySQL + Druid连接池整合教程
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 前面毛毛张介绍过HikariCP连接池,今天毛毛张来介绍一下Druid连接池,SpringBoot 2.0以上默认使用HikariCP数据源,但是也要学会使用…...
基于SpringBoot实现的宠物领养系统平台功能一
一、前言介绍: 1.1 项目摘要 宠物领养需求增加:随着人们生活水平的提高和对宠物养护意识的增强,越来越多的人选择领养宠物作为家庭的一员。这导致了宠物领养需求的显著增加。 传统领养方式存在问题:传统的宠物领养方式…...
【DeepSeek 学C++】std::atomic 用于线程控制,和内存强顺序一致性
std::atomic<bool> workerTerminate_{}; std::atomic<bool> workerTerminate_{}; 是一个原子布尔变量的声明,变量名为 workerTerminate_。这种变量通常用于多线程编程中,用来控制或通知工作线程的终止。使用 std::atomic 可以确保对该变量的…...
计算存储一幅大小为 1024×10241024×1024、256 灰度级的图像所需的字节数
1. 图像的基本信息 图像分辨率:1024102410241024,表示图像有 1024 行和 1024 列,总像素数为: 102410241,048,576 像素102410241,048,576 像素 灰度级:256 灰度级,表示每个像素的灰度值可以用 256 个不同的值…...
Flutter 网络请求与数据处理:从基础到单例封装
Flutter 网络请求与数据处理:从基础到单例封装 在 Flutter 开发中,网络请求是一个非常常见的需求,比如获取 API 数据、上传文件、处理分页加载等。为了高效地处理网络请求和数据管理,我们需要选择合适的工具并进行合理的封装。 …...
从开发到部署:EasyRTC嵌入式视频通话SDK如何简化实时音视频通信的集成与应用
嵌入式设备和视频综合管理平台均支持B/S架构。在B/S架构下,传统的视频观看方式依赖于微软的OCX控件,然而OCX控件的使用正面临越来越多的挑战: 首先,用户需要安装浏览器插件、调整浏览器安全级别,并允许ActiveX控件弹出…...
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300的秘密武器
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 企业级应用开发的需求日益增长。今天,我们要介绍的是一个在GitHub上广受好评的开源项目——Jeesite5。这不仅是一个技术框架,更…...
C++(23):lambda可以省略()
C越来越多的使用了lambda,C23也进一步的放宽了对lambda的限制,这一次,如果lambda没有参数列表,那么可以直接省略掉(): #include <iostream> using namespace std;void func() {auto f []{cout<<"in…...
vue3之echarts柱状图-圆锥加自动轮播
vue3之echarts柱状图-圆锥加自动轮播 效果: 版本 "echarts": "5.4.2" 核心代码: <template><div ref"echartRef" class"chart"></div><svg><linearGradient v-for"(item, i…...
Qt中利用httplib调用https接口
httplib中如果要调用https接口,需要开启OPENSSL支持,经过半天坑爹得摸索,总结下经验。 1,下载 并安装Win64OpenSSL 地址如下,我Qt版本是5.15.2 ,openssl选择的是 64位(Win64OpenSSL-3_3_3.msi…...
深度学习04 数据增强、调整学习率
目录 数据增强 常用的数据增强方法 调整学习率 学习率 调整学习率 调整学习率的方法 有序调整 等间隔调整 多间隔调整 指数衰减 余弦退火 自适应调整 自定义调整 数据增强 数据增强是通过对训练数据进行各种变换(如旋转、翻转、裁剪等)&am…...
卷积神经网络之AlexNet经典神经网络,实现手写数字0~9识别
深度学习中较为常见的神经网络模型AlexNet,AlexNet 是一个采用 GPU 训练的深层 CNN,本质是种 LeNet 变体。由特征提取层的5个卷积层两个下采样层和分类器中的三个全连接层构成。 先看原理: AlexNet网络特点 采用 ReLU 激活函数,…...
建筑兔零基础自学python记录22|实战人脸识别项目——视频人脸识别(下)11
这次我们继续解读代码,我们主要来看下面两个部分; 至于人脸识别成功的要点我们在最后总结~ 具体代码学习: #定义人脸名称 def name():#预学习照片存放位置path M:/python/workspace/PythonProject/face/imagePaths[os.path.join(path,f) f…...
全球化趋势下中资企业出海投资及合规运营实战分享
企业全球化布局需构建“战略-架构-合规-运营”四位一体体系,通过灵活的投资架构、精准的税务规划、本土化运营和ESG融合,实现风险可控的海外扩张。核心策略包括: 供应链多节点布局(至少3个国家备份产能);融…...
2025-2-19 leetcode刷题情况(二叉树)
一、226.翻转二叉树 1.题目描述 给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点 2.代码 3.思路 递归遍历(DFS)交换每个节点的左 / 右子节点,即可生成二叉树的镜像。 递归解析: 终止条件&a…...
Linux常见命令
文件和目录操作命令 cd:用于切换目录。例如,cd /home/user 可进入 /home/user 目录;cd.. 可返回上一级目录。ls:用于列出目录内容。ls 直接列出当前目录下的文件和文件夹;ls -l 以详细列表形式显示;ls -a 显…...
C++ 一篇读懂“值传递”和“地址传递”
让我们通过一个简单的、形象的比喻来帮助你理解“值传递”和“地址传递”是如何影响实参的。 1. 值传递 想象你有一个 **信封**(代表变量),里面放着一张纸条(代表数据)。你决定把这个信封寄给一个朋友,让他…...
我用AI做数据分析之数据清洗
我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样? 这里描述自己在使用AI进行数据分析(数据清洗)过程中的几个小故事: 1. 变量名的翻译 有一个项目是某医生自己收集的数据,变量名使用的是中文,分…...
韩国哈希散列算法DHA-256
韩国哈希散列算法DHA-256 DHA-256是在2005年11月由NIST举行的Hash研讨会(Cryptographic Hash Workshop)上提出的。DHA-256压缩函数将长度为512比特的分组,压缩成长度为256比特的串,总共迭代64步,扩展的消息字在步函数中使用了两次。 DHA-25…...
【愚公系列】《Python网络爬虫从入门到精通》022-Splash的爬虫应用
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
Golang深度学习
前言 在2009年,Google公司发布了一种新的编程语言,名为Go(或称为Golang),旨在提高编程效率、简化并发编程,并提供强大的标准库支持。Go语言的设计者们希望通过Go语言能够解决软件开发中的一些长期存在的问…...
React(8)
封装评论列表的Item组件 实现父传子以及子组件调用父组件方法 import { useEffect, useState } from "react"; import "./index.css"; import _ from "lodash"; import classNames from "classnames"; import axios from "axio…...
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
苹果的AirTag很贵,虽然某强北有平价代替品,但是仍需要苹果设备才能绑定,才能查看位置。不支持安卓/鸿蒙/PC,也不支持集成到Home Assistant中。 AirTag 的原理 每个AirTag都会发送一个蓝牙信号,其可以被临近的苹果设备…...
docker修改镜像默认存储路径(基于页面迁移)
文章目录 1、停止服务2、拷贝镜像3、docker界面设置路径4、重新启动服务5、重启电脑 1、停止服务 桌面底部右键打开任务管理器 停止docker服务 2、拷贝镜像 从原目录拷贝到新的目录下,新的目录自己定,如果没有权限,需要先对原文件添加权限…...
10. 软件设计架构-经典架构问题
文章目录 前言一、高并发场景下的系统崩溃1. 问题描述2. 解决方案:3. 案例分析:电商秒杀系统 二、单体架构到微服务的拆分陷阱1. 问题描述2. 解决方案:3. 案例分析:在线教育平台拆分 三、分布式系统中的数据一致性难题1. 问题描述…...
Qt学习(五)自定义对话框,多窗口开发---添加设计师类, MDI多窗口开发
一 对话框 实现功能:打开文件,选择目录,保存文件,选择颜色,选择字体,输入信息, 消息提示框 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE na…...