高级软件工程-复习
高级软件工程复习
坐标国科大,下面是老师说的考试重点。
- Ruby编程语言的一些特征需要了解
- 要能读得懂Ruby程序
- Git的基本命令操作知道
- Rails的MVC工作机理需要清楚,Model, Controller, View各司什么职责明白
- BDD的User Story需要会写,SMART要求能理解
- TDD的Rspec读得懂,会补充
- 重点:最常用的几种设计模式知道、理解、会用;SOLID原则是什么?什么情况下是违背的。
SOA(Service Oriented Architecture)面向服务架构:所有组件都设计为服务、且服务可以组合的软件架构。
**特点:**一个服务直接访问另外一个服务的数据时可能出现不稳定。
软件质量(Quality Assurance)
软件质量保障(QA):确保软件开发的质量,改进优化过程,提高效率。
一般通过测试来保证软件质量
这个题的24,怎么选
提高开发者生产力:简洁性、合成、重用和工具
4种技术
- 通过表达的简洁化:语法更短更易读、抽象级别提高(高级程序设计语言、自动内存管理、动态脚本语言:计算反射和元编程)
- 程序合成(Program Synthesis):生成代码以适应情境和删除条件测试
- 重用 (Reuse):重用旧代码vs.编写新代码
- 重用技术(按历史顺序排列)
- 过程和函数-procedure, function
- 标准化库(重用单一任务)-standard library
- 面向对象编程-Object Oriented Porgramming: 重用和管理任务集合
- 设计模式-Design Pattern: 实现可以不同, 但重用的是通用策略
- 重用技术(按历史顺序排列)
- 自动化和工具 (Automation & Tools)
DRY-Don’t Repeat Yourself
在一个系统中,每一知识必须有一个单一的、明确的、权威的表示。
P&D软件过程模型
P&D: 计划与文档
- 编码前,项目经理制定计划
- 撰写计划各阶段的详细文档
- 根据计划来度量进展
- 项目的变更必须反映在文档中,并可能反映在计划中
瀑布模型 | 螺旋模型 | Rational统一软件开发过程,RUP |
---|---|---|
![]() | ![]() | ![]() |
缺点:当客户看到开发出来的产品时,通常想要对软件产品进行改变,这时就会遇到麻烦。 | ![]() | ![]() |
— | ![]() | ![]() |
P&D需要大量的文件和计划,并依赖于经验丰富的经理。
Aglie敏捷开发
个体与交互 vs过程 & 工具
工作软件vs全面文档化
客户协作vs合同谈判
响应变更vs遵从计划
敏捷强调测试驱动开发(TDD)来减少错误,记录用户故事来验证客户需求,用速度来度量进展。
设计模式:捕捉/刻画重复出现问题的常见结构化解决方法。
Client/Server: 架构级设计模式,Web是C/S架构,面向请求/应答方式。
Ruby/Rails框架中,Rails复杂管理防止篡改cookie
三层架构:表示层-逻辑(应用)层-持久层
MVC(Model-View-Controller)
提倡痩视图和控制器、不要在视图中添加功能代码。
在MVC中,用户可以进行的每个交互都是由控制器中的动作来处理的
Ruby语言中的方法(method)处理这种交互。
Git
使用版本控制系统
命令 | 说明 |
---|---|
checkout | 从库中拷贝一个版本的代码 |
commit | 将代码写回仓库 |
Git基础
命令 | 说明 |
---|---|
git init | 创建仓库 |
git config | 配置仓库 |
git clone <url> | 获取一个仓库 |
![]() | 将变更录入仓库 |
git log | 查看变更历史 |
git push ,git pull | 与远程仓库同步 |
git branch <branch_name> ,git checkout <branch_name> | 创建分支 |
git merge ,git rebase (branch 1) 在branch2上执行 | 合并分支 |
git rest --hard <commit_id> | 回退 |
git revert <commit_id> | 撤销 |
Git配置
Cit配置 | 配置用户信息 | 配置文本编辑器 | 查看配置信息 |
---|---|---|---|
git config --global / -- local | git config --global user.name "John Doe" | git config --global core.editor emacs | git config --list |
— | git config --global user.email johndoe@example.com | — | — |
Rails
Rails是使用Ruby语言建立的流行编程框架。
Ruby:现代动态脚本编程语言。
面向对象
,函数式
,自动内存管理
,动态类型
,mix-in
,闭包用于重用、元编程、程序合成
Rails遵守:(依赖于Ruby的语言特性:自省和元编程
,闭包
,模块(混合)
)
- 约定优于配置:命名遵守某些约定、不需要配置文件
- DRY:提取公共功能的开发原则:“在一个系统中,每一知识必须有一个单一的、明确的、权威的表示。”
CRUD: create, read, update, delete
Ruby->Database
从ActiveRecord::Base
子类化。–将模型连接到数据库+CRUD
ActiveRecord
上create
方法是new
方法与save
方法的组合。
save!
操作失败会抛出异常。
Rails解决方案: 开发、测试和生产环境都有自己的数据库。
**迁移:**用脚本描述更改,可以跨数据库类型进行安全快速移植。
# 创建迁移
rails generate migration CreateMovies# 将迁移应用于开发环境
rake db:migrate# 完成代码测试后,将迁移应用于生产环境,应用迁移还包括在数据库中记录哪些迁移脚本已经用过了
heroku rake db:migrate# 新模型,创建模型文件
app/models/model.rb# 更新测试数据库schema
rake db:test:prepare# 最终部署
heroku rake db:migrate
Ruby->Routes
Ruby->Views
创建表单—
BDD(行为驱动设计)
BDD:在开发之前和开发期间询问有关应用行为的问题,以减少误解。
需求以用户故事的方法记录。
创建用户故事
SMART故事
SMART | 说明 |
---|---|
Specific | 明确:每个场景可测试 |
Measurable | 可度量:已知合理输入,预期结果存在 |
Achievable | 可达成(理想情况:一个迭代下完成) |
Relevant | 相关性(5个为什么)![]() |
Timeboxed | 时间框(知道何时放弃) |
Cucumber测试
通过Cucumber,用户故事成为验收测试和集成测试用例
# 运行一个功能特征测试
cucumber filename# 运行所有测试
rake cucumber
绿:通过的步骤
黄:还未实现的
红:失败的–然后步骤是蓝色的
目标:使所有步骤通过
显式/隐式、命令式/声明式场景
显式需求:验收测试的一部分
隐式需求:显式需求的逻辑结果、集成测试
- 将电影列表
- 电影按时间顺序还是字母顺序排列?
**命令式场景:**初始用户故事,有许多步骤,指定逻辑顺序,直达所需结果。
如果很多用户故事是命令式,那就不DRY
**声明式场景:**描述状态而不是序列。(更少的步骤)
声明式步骤:描述应用程序应该处于的状态
命令式步骤:将当前状态改变表示为期望状态的步骤序列
TDD(测试驱动开发)
在代码本身之前,先为代码编写单元和功能测试
Rspec测试被称为specs或者例子
respec filename
# 运行测试
单元测试-FIRST原则
FIRST | 说明 |
---|---|
Fast(快) | 快速运行测试子集、因为将一直运行它们 |
Independent(独立) | 没有测试依赖于其他测试、远程可以以任何顺序运行任何子集 |
Repeatable(可重复) | 运行N次,得到相同的结果(以帮助隔离bug并启动自动化) |
Self-checking(自检查) | 测试可以自动检测是否通过 |
Timely(及时) | 与被测试的代码同时编写(使用TDD需要先编写测试) |
TDD周期:红-绿-重构
以“始终拥有工作代码”为目标。考虑代码应该完成的一件事(功能)
红:在失败的测试中记录/步骤这种想法
绿:编写尽可能简单的代码使测试通过
重构:与其他测试一起来提炼共性、改进代码。
继续完成代码应该做的下一件事。
接缝(Seam)
接缝:可以唉不改变源代码的情况下改变应用程序行为的位置。
对测试有用:将某些代码的行为与其所依赖的其他代码隔离开来。
每个seam仅为测试中地某些特定行为提供足够地支撑。
Seam概念 | 说明 |
---|---|
存根(stub) | 类似should_receive ,但没有期望;add_return 可选地控制返回值. |
模拟(mock) | “特技替身”对象,常用于行为验证(让某方法被调用)、字其上为单个方法创建存根. |
RSpec
装置/工厂
从何获取真实对象?
装置(Fixture) | 工厂(Factory) | |
---|---|---|
说明 | 静态地将一些已知数据预加载到数据库表中 | 只创建每次测试所需要的内容动态创建 |
需求 | 每次测试之前,db需要擦除和重新载入 | 根据测试需要,设置helper 来快速创建带有默认属性的对象 |
赞成的原因 | 真正的静态数据(e.g.永远不变的配置线性),恒容易在一个地方看到所有测试数据 | 保持测试的独立性:不受它们不关心对象的影响 |
反对的原因 | 可能会引入对装置数据的依赖 | 复杂的关系可能很难建立(但可能表明代码耦合过紧) |
测试覆盖、单元测试、集成测试
覆盖度量
覆盖度量 | 说明 |
---|---|
S0 | 方法覆盖 |
S1 | 调用覆盖 |
C0 | 语句覆盖 |
C1 | 分支覆盖 |
C1+ | 判定覆盖:条件中的美国个子表达式 |
C2 | 路径覆盖(苦难,价值如何有很大分歧) |
测试与调试
变异测试:在代码中引入故意的错误、是否会有一些测试失败?
模糊测试:1万只猴子向你的代码扔随机输入:1.发现了MS~20% bug,崩溃了~25%的Unix应用工具2.以应用程序不应该被使用的方式来测试它
DU-覆盖率:每一对<define x/use x>
执行了吗?
黑盒测试/集成测试:不依赖于对应用程序结构的理解
白盒测试
代码坏味-SOFA
通过捕获哪些白哦是代码坏味的症状。
- Short:短的
- One:只做一件事
- Few:不多的参数
- Abstraction:一致的抽象级别
定量:ABC复杂度
Assignment,Brach,Condition赋值+分支+条件,检查ABC复杂度
Agile敏捷开发
P&D
需求抽取:抽取非功能/功能需求
面谈、合作创建场景(快乐/悲伤路径流)、创建用例(UML描述)
需求文档(软件需求规范记录需求)
需求检查:有效性、一致性、完整性、可行性
PD维护
PD中设计模式
将软件需求规范(SRS)分解为问题(任务):
- 对每个任务寻找匹配的设计模式、然后是子问题的某事
- 设计评审将有所帮助
P&D中测试方法
将软件需求规范(SRS)划分为编程单元、开发人员编写单元代码+执行编程测试。
**独立的质量保证(QA)**团队进行更改级别的测试:模块、集成、系统、验收测试。
QA集成选项
自顶向下 | 自底向上 | 三明治集成 |
---|---|---|
从依赖关系图的顶部开始 | 从依赖关系图的底部开始 | 两全其美? |
高级功能(UI)很快就能开始工作 | 没有stub,吧所有的集成在一个模块中 | 通过自底向上集成一些单元来减少stub构造 |
构建许多存根Stub让应用程序“工作” | 不能看到应用程序工作,知道所有的代码和集成完成 | 通过自顶向下集成一些单元,让UI可操作 |
QA团队测试
QA团队进行系统测试:
- 完成的应用程序可以运行
- 测试非功能需求+功能需求
何时系统测试?–看机构的政策
- 测试覆盖级别(C0类似)
- 所有测试要输入好的/坏的数据
最后一步是:用户/客户验收测试(UAT)–确认&验证
性能
可以是验收测试的一部分。PD周期忽略了性能。
版本管理:
SaaS
SaaS:Software as a Service
SaaS通过运行在客户端设备上的瘦程序(浏览器、APP),访问Internet上以服务形式提供的软件(包括数据)。
优点:
- 无需安装、不用担心硬件与OS差异
- 无需担心数据丢失(数据远程存储)
- 便于团队共享和分享数据
- 如果数据很大/频繁更改,在中心站点保存一份副本更简单
- 软件单一拷贝、单一部署硬件/软件环境
SaaS对基础设施的需求:
- 通讯::允许客户与服务互动
- 可扩展性:需求波动满足新服务快速引入、增加用户
- 可靠性:服务和通信7*24h可用
SaaS类的设计模式
GoF:结构化、创建型、行为型
模式不是单独的类或者库,也不是完整的设计(更像是设计的蓝图)
**元模式:**把变与不变的东西分开。
- 针对接口百年城而不是针对实现编程。
- 比起继承,更倾向组合和委托:委托是接口共享、继承是关于实现代码共享。
SOILD面向对象编程原则
动机:将变更的代价最小化。
SOLID原则 | 说明 |
---|---|
单一职责(Single Responsibility, SRP) | 一个类应该有且只有一个改变的理由、每一项职责可能是变化的轴心、对一个轴的更改不应该影响其他轴。 |
开闭(Open/Close, OCP) | 类应该对功能扩展开发、对源代码修改关闭。–抽象工厂模式(提炼构造) |
里氏替换(Liskov substitution) | 子类型可以i替代基类型。 |
依赖注入(injection of dependencied, DIP) | 需求:a依赖于b,但b的接口和实现可以改变,即使功能稳定; 解决方案:“注入”a和b所依赖的抽象接口 |
迪米特(Demeter,DP) | 只和朋友交谈而不是陌生人。1.用委托替换直接方法调用,2.将遍历与计算分离(Visitor模式),3.在不了解实现细节的情况下只关注重要事件 (Observer模式) |
观察者模式Observer
实体Observer想hi到何时某些事情发生在实体Subject上。
非功能需求
服务水平目标(SLO,service level oeject)
考试回忆版
哈哈终于考完了,我为期1个多月的考试周终于宣告结束了。
考之前,一直在想,老师会不会根据给的题库然后做一些变动。但实际情况是:完全没有.
让我们说:谢谢老师!
此外,虽然老师给了部分的重点,但是还是和我自己复习的有一些出入,比如,我以为概念应该会考SOLID或者BDD/TDD,像单元测试的SMART,TDD周期的红-绿-重构这些。但其实都没考,反倒是后面出了一个SaaS的概念,但是考前就看了两眼,觉得不会考…
再一个有出入的就是,我以为会考点读Ruby程序给输出的题,毕竟简单,但也完全没有()
所以大家复习的时候,建议还是复习的全面一点,基本上给的题库要全部过一遍,然后根据老师给出重点,再过一遍重要的。因为如果万一没有命中的话,至少之前做过一遍,还是会有印象,至少不会是0分(?)
当然,要是有时间能够全面复习,那就太好辣!
很高兴你能看到这里~
获取考试试题,请到个人博客中找。就不放CSDN了~
Schwertlilien.blog<--------
相关文章:

高级软件工程-复习
高级软件工程复习 坐标国科大,下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚,Model, Controller, View各司什么职责明白BDD的User Story需要会写,SMART要求能…...
eslint.config.js和.eslintrc.js有什么区别
eslint.config.js 和 .eslintrc.js 的主要区别在于它们所对应的 ESLint 版本和配置方法: 1. .eslintrc.js: 这是 ESLint v8 及更早版本使用的配置文件格式。 它使用层级式的配置系统。 现在被称为"旧版"配置格式 。 2. eslint.config.js&am…...
如何使用MVC模式设计和实现校园自助点餐系统的微信小程序
随着智慧校园的普及,校园自助点餐系统在提高学生用餐效率、减轻食堂运营压力方面发挥了重要作用。 在开发这类系统时,MVC(Model-View-Controller)模式是一种非常适合的架构,它将系统的业务逻辑、用户界面和数据交互清晰…...

继续坚持与共勉
经过期末考试后,又要开始学习啦。 当时一直在刷算法题就很少写博客了,现在要继续坚持写博客,将每天对于题的感悟记录下来。 同时我将会在学习Linux操作系统,对于过去学习的内容进行回顾!! 在此ÿ…...
人机交互 | 期末复习(上)| 补档
文章目录 📚1-HCI Introduction🐇人机交互的定义,分别解释人-机-交互的概念🐇six ”mantras“ of UCD🐇Difference between User-Interface (UI) and User-Experience(UX)📚2-HCI history🐇WIMP🐇WYSIWYG📚3-Understanding User🐇Design Thinking Process的…...

Oracle 表分区简介
目录 一. 前置知识1.1 什么是表分区1.2 表分区的优势1.3 表分区的使用条件 二. 表分区的方法2.1 范围分区(Range Partitioning)2.2 列表分区(List Partitioning)2.3 哈希分区(Hash Partitioning)2.4 复合分…...

多并发发短信处理(头条项目-07)
1 pipeline操作 Redis数据库 Redis 的 C/S 架构: 基于客户端-服务端模型以及请求/响应协议的 TCP服务。客户端向服务端发送⼀个查询请求,并监听Socket返回。通常是以 阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客…...
网络编程的进程查看连接描述符信息等
一.查看当前进程的socket对应的fd信息 1. lsof lsof(List Open Files)命令可以列出系统中所有打开的文件的信息,包括 socket。 用法 要查看特定进程的 socket 信息,可以使用以下命令: lsof -p <pid> | grep…...
ChatGPT API快速搭建自己的第一个应用—文章摘要(单轮对话应用)
使用ChatGPT API快速搭建自己的第一个应用 1 安装库2 设置与导入3 文章摘要(单轮对话应用)3.1 任务简介:3.2 初始化3.3 点击发送3.4 保存3.5 检查并打印你的结果1 安装库 !pip install gradiogradio 是一个用于快速搭建交互式用户界面的 Python 库,特别适合展示机器学习模…...

【01】AE特效开发制作特技-Adobe After Effects-AE特效制作快速入门-制作飞机,子弹,爆炸特效以及导出png序列图-优雅草央千澈
【01】AE特效开发制作特技-Adobe After Effects-AE特效制作快速入门-制作飞机,子弹,爆炸特效以及导出png序列图-优雅草央千澈 开发背景 优雅草央千澈所有的合集,系列文章可能是不太适合完全初学者的,因为课程不会非常细致的系统…...

软件测试预备知识④—NTFS权限管理、磁盘配额与文件共享
在软件测试的实际环境搭建与管理过程中,了解和掌握NTFS权限管理、磁盘配额以及文件共享等知识至关重要。这些功能不仅影响系统的安全性和稳定性,还对测试数据的存储、访问以及多用户协作测试有着深远的影响。 一、NTFS权限管理 1.1 NTFS简介 NTFS&am…...

CI/CD 流水线
CI/CD 流水线 CI 与 CD 的边界CI 持续集成CD(持续交付/持续部署)自动化流程示例: Jenkins 引入到 CI/CD 流程在本地或服务器上安装 Jenkins。配置 Jenkins 环境流程设计CI 阶段:Jenkins 流水线实现CD 阶段:Jenkins 流水…...
【python3】 sqlite格式的db文件获得所有表和数据
【python3】 sqlite格式的db文件获得所有表和数据 1.背景2.代码3.解析1.背景 SQLite 格式的 .db 文件就是一个包含 SQLite 数据库的文件。 SQLite 格式的 .db 文件通常存储的是一个关系型数据库。 SQLite广泛用于应用程序、移动设备、浏览器等场景。它将整个数据库存储在一个文…...

【灵码助力安全3】——利用通义灵码辅助智能合约漏洞检测的尝试
前言 随着区块链技术的快速发展,智能合约作为去中心化应用(DApps)的核心组件,其重要性日益凸显。然而,智能合约的安全问题一直是制约区块链技术广泛应用的关键因素之一。由于智能合约代码一旦部署就难以更改…...

openEuler 22.04使用yum源最快速度部署k8s 1.20集群
本文目的 openEuler的官方源里有kubernetes 1.20,使用yum源安装是最快部署一个k8s集群的办法 硬件环境 主机名系统架构ipmasteropenEuler release 22.03 (LTS-SP2)arm192.168.3.11edgeopenEuler release 22.03 (LTS-SP2)arm192.168.3.12deviceopenEuler release 22.…...
Docker Compose 教程
Docker Compose 是一个 Docker 容器的依赖管理工具。 例如我们一个服务需要依赖到多个 Docker 容器,那么使用 Docker Compose 这个工具就能很方便的帮助我们管理。 Docker Compose 通过配置文件 .yml。 定义了所有容器的依赖关系。 然后我们只需把我们想要的 Docke…...

opencv的NLM去噪算法
NLM(Non-Local Means)去噪算法是一种基于图像块(patch)相似性的去噪方法。其基本原理是: 图像块相似性:算法首先定义了一个搜索窗口(search window),然后在该窗口内寻找…...
scala基础学习_方法函数
文章目录 方法与函数函数(又称函数值/匿名函数)定义方法注意 单参数函数多参数函数函数作为参数传递 方法将方法转换为函数方法的返回值总结 方法与函数 函数(又称函数值/匿名函数) 定义在任何地方:函数可以定义在类…...

Android车机DIY开发之软件篇(八)单独编译
Android车机DIY开发之软件篇(八)单独编译 1.CarLauncher单独编译 CarLauncher源码位于 packages/apps/Car/Launcher 用Eclipse ADT 谷歌定制版编译而成,.mk .bp编译 Android13目录如下: alientekalientek:~/packages/apps/Car$ ls Calendar …...
【Bug】报错信息:Required request body is missing(包含五种详细解决方案)
大家好,我是摇光~ 遇到“Required request body is missing”错误通常意味着服务器期望在HTTP请求中包含一个请求体(body),但是实际上并没有收到。 例如: 当你在使用网页或应用程序的后台(比如一个网站或手…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...