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

FastDFS的安装及使用

分布式存储发展历程

前段时间 618 活动火热进行,正是购物的好时机。当我们访问这些电
商网站的时候,每一个商品都会有各式各样的图片展示介绍,这些图
片一张两张可以随便丢在服务器的某个文件夹中,可是电商网站如此
大体量的图片,得分门别类的进行管理。再比如我们平时浏览的各大
视频网站的视频,还有我们现在正在浏览的 CSDN 上的各类文章,都
需要在服务器上分门别类的管理好。
在文件管理早期的时候,由于文件本身的数量和占用空间都比较小,
往往在一台服务器上既有程序在运行,也有文件在存储。随着互联网
的不断发展,现在的程序越做越大,图片的内容和数量也越来越多,
不断的侵蚀服务器有限的资源,进而影响到程序本身运行的稳定性。
于是,越来越多的系统在最初设计,或者升级改造的时候,选择将文
件的存储单独拎出来放在一台专用的文件服务器上。和程序服务器相
互独立,相互不受影响。文件服务器的功能也相对比较单一,只需要
对文件进行管理即可。

随着图片的数量越来越多,单个图片自身占用的空间越来越大,单台
服务器对于图片的承载压力也越来越大,就需要拓宽服务器的数量,
通过更多的图片服务器存储文件。这样虽然解决了文件的存储问题,
但是却产生了一个新的问题:怎么从这么多的机器中快速的找寻到需
要的那张图片?于是便引申出了分布式存储的概念,在众多的机器之
中,如何讲文件放进去,如何讲文件取出来。


常见的分布式存储框架

什么是 FastDFS 

FastDFS 是前阿里的一位大神余庆开源的一个轻量级分布式文件系
统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问
(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性
扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭
建一套高性能的文件服务器集群提供文件上传、下载等服务。

 

FastDFS 服务端有两个角色:跟踪器( tracker )和存储服务器
storage )。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储服务器存储文件,完成文件管理的所有功能:就是这样的存储、
同步和提供存取接口, FastDFS 同时对文件的 metadata 进行管理。
所谓文件的 metadata 就是文件的相关属性,以键值对( key value
方式表示,如: width=1024 ,其中的 key width value 1024
文件 metadata 是文件属性列表,可以包含多个键值对。
很多人可能不太理解为什么要设计 tracker 这个角色,当存储服务器由
很多个物理机器组成时。客户端要上传 / 下载文件的时候,不知道文件
上传 / 下载到哪个具体的机器。于是客户端会先请求 tracker tracker
会返回具体的 group group 中的具体主机信息。客户端拿着这个具
体的主机信息去请求相应的主机进行文件的上传 / 下载。

 

 

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节
点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪
器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加
或减少。
为了支持大容量,存储节点(服务器)采用了分组(或分卷)的组织
方式: group 。存储系统由一个或多个 group 组成, group group
间的文件是相互独立的,所有 group 的文件容量累加就是整个存储系
统中的文件容量。一个 group 可以由一台或多台存储服务器组成,一
group 下的存储服务器中的文件都是相同的, group 中的多台存储
服务器起到了冗余备份和负载均衡的作用。
group 中增加服务器时,同步已有的文件由系统自动完成,同步完
成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足
或即将耗尽时,可以动态添加 group 。只需要增加一台或多台服务器,
并将它们配置为一个新的卷,这样就扩大了存储系统的容量。 FastDFS
中的文件标识分为两个部分:组名和文件名,二者缺一不可。

 

FastDFS 的安装与部署 

FastDFS 开源的地址在 GitHub 上: https://github.com/happyfish10
0
源码安装要将对应的源码下载后编译运行安装,当然图省事的话可以
直接使用 docker 快速安装。先看使用 docker 的情况下如何快速安
装,毕竟很多人应该对源码编译安装没啥兴趣。
docker 安装
首先,查询 docker 中关于 FastDFS 有哪些可用的镜像: docker
search fastdfs

选择需要的镜像,拉取到本地:docker pull delron/fastdfs
 

镜像文件并不大,本身只有 400+M
 

通过 Docker 命令来创建 Tracker 服务:
docker run -d --name tracker --network=host -v
/mydata/fastdfs/tracker:/var/fdfs delron/fastdfs tracker
tracker 服务默认的端口为 22122 -v 实现了 docker 中的容器和本地
目录之间的挂载。所以在执行 docker 命令前应手动先将本地的
/mydata/fastdfs/tracker 目录创建好。

 

Tracker 服务创建成功之后,继续通过 docker 的命令创建 Storage
务:
docker run -d --name storage --network=host -e
TRACKER_SERVER=192.168.29.128:22122 -v
/mydata/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1
delron/fastdfs storage
在执行上面命令的时候要注意对应的修改下,其中
TRACKER_SERVER 中的 IP 要修改为你的 Tracker 服务所在的服务
IP 地址。并且同样的,先手动将 / mydata/fastdfs/storage 目录创建
好。
默认情况下在 Storage 服务中是已经预装了 Nginx 服务的,相关的端
口为 8888 Storage 自身的端口默认是 23000 。当然如果你发现这些
相关的端口被占用了,或者想要对应的修改端口信息也可以,需要进

入容器中查看下相关的配置文件信息。

进入 Storage 服务的容器中: docker exec -it d4926e8325e3 bash
在容器中的 /etc/fdfs/ 目录下找到 storage.conf 配置文件

 

可以看到在配置文件的最后一行指定了 http 的端口:

 

除此之外,还得再来到容器中的 /usr/local/nginx/conf 目录下,将
nginx.conf 配置文件中的 8888 端口一并更改:
Tracker Storage 服务安装完成之后,在服务器的 Storage 本地目录
中放几张用于测试上传的图片。因为之前在启动的时候,已经将本地
目录和 docker 目录进行了一个挂载,所以当进入到 docker 中的
Storage 服务中,依然可以看到本地目录中的测试图片:
 

 

使用服务原生的 / usr/bin/fdfs_upload_file 命令进行文件上传:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf face2face1.jpg
上传成功之后,返回已上传成功的图片信息。这张图片存于 group1
中, /M00/00/00 / 目录下,重命名为
wKgggGSD2feAXsv4AER92Sd_dzk072.jpg 。然后拿着这串图片地
址,使用浏览器访问: http://192.168.29.128:8888/group1/M00/00/0
0/wKgggGSD2feAXsv4AER92Sd_dzk072.jpg

 

可以成功拿到这张上传的图片则说明 FastDFS 服务安装成功。因为
Storage 服务中已经安装了 Nginx 服务,所以访问图片的端口就是
Nginx 监听的 8888 端口,经过 Nginx 的代理拿到上传的那张图片。
注意: 如果无法访问照片的路径,可能是 linux 防火墙的问题,把
Nginx storage tracker 的端口打开,再重启镜像服务就好

springboot整合fastdfs 

 

 

 

 

 

2.4 测试文件上传
 

从上图中可以,实现了文件的上传和缩略图的生成。
2.5 文件下载

 

 

相关文章:

FastDFS的安装及使用

分布式存储发展历程 前段时间 618 活动火热进行,正是购物的好时机。当我们访问这些电 商网站的时候,每一个商品都会有各式各样的图片展示介绍,这些图 片一张两张可以随便丢在服务器的某个文件夹中,可是电商网站如此 大体量的…...

二叉树(了解)c++

二叉树是一种特殊的树型结构,它的特点是: 每个结点至多只有2棵子树(即二叉树中不存在度大于2的结点) 并且二叉树的子树有左右之分,其次序不能任意颠倒,因此是一颗有序树 以A结点为例,左边的B是它的左孩子,右边的C是…...

头像生成小程序搭建(免费分享)

如下图为小程序页面的基本效果&#xff0c;下面将介绍该小程序的功能 页面template代码如下&#xff1a; <template><view class"avatar-containner"><block v-if"!showCropper"><image class"pageback" src"../../s…...

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…...

【ComfyUI专栏】ComfyUI 部署Kolors

什么是Kolors?我相信一定会有朋友可能第一次听说这个生图的模型,开始我也很难想象,这竟然是快手推出的可灵AI的项目,我们可以直接利用模型来生成图片和视频。 大家可以通过直接访问可灵AI的网址获取到可灵的项目,但是对于我们来说我们需要基于ComfyUI来生成必要的图片和视…...

HBase的原理

一、什么是HBase HBase是一个分布式&#xff0c;版本化&#xff0c;面向列的数据库&#xff0c;依赖Hadoop和Zookeeper &#xff08;1&#xff09;HBase的优点 提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统 (2) HBase 表的特性 Region包含多行 列族包含多…...

Spring Boot中如何实现异步处理

在 Spring Boot 中实现异步处理可以通过使用 Async 注解和 EnableAsync 注解来实现。以下是如何配置和使用异步处理的步骤和示例代码。 步骤&#xff1a; 启用异步支持&#xff1a; 在 Spring Boot 配置类上使用 EnableAsync 注解启用异步处理。使用 Async 注解异步方法&…...

SSM电子商城系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 电…...

新版IDEA创建数据库表

这是老版本的IDEA创建数据库表&#xff0c;下面可以自己勾选Not null&#xff08;非空),Auto inc&#xff08;自增长),Unique(唯一标识)和Primary key&#xff08;主键) 这是新版的IDEA创建数据库表&#xff0c;Not null和Auto inc可以看得到&#xff0c;但Unique和Primary key…...

二叉树的存储(下)c++

链式存储 我们可以创建两个数组L[N]、r[N]&#xff0c;分别存储i 号结点的左右孩子的编号&#xff0c;这样就可以通过数组下标实现链式访问。 本质上还是孩子表示法&#xff0c;存储的是左右孩子的信息 #include <iostream>using namespace std;const int N 1e6 10; …...

Flutter中PlatformView在鸿蒙中的使用

Flutter中PlatformView在鸿蒙中的使用 概述在Flutter中的处理鸿蒙端创建内嵌的鸿蒙视图创建PlatformView创建PlatformViewFactory创建plugin&#xff0c;注册platformview注册插件 概述 集成平台视图&#xff08;后称为平台视图&#xff09;允许将原生视图嵌入到 Flutter 应用…...

Docker—搭建Harbor和阿里云私有仓库

Harbor概述 Harbor是一个开源的企业级Docker Registry管理项目&#xff0c;由VMware公司开发。‌它的主要用途是帮助用户迅速搭建一个企业级的Docker Registry服务&#xff0c;提供比Docker官方公共镜像仓库更为丰富和安全的功能&#xff0c;特别适合企业环境使用。‌12 Harb…...

一篇博文了解JVM的各个内存区域

​ JVM的内存区域可以细分为程序计数器、虚拟机栈、本地方法栈、堆和方法区 其中&#xff0c;方法区和堆是线程共享的&#xff0c;虚拟机栈、本地方法栈和程序计数器是私有的&#xff1b; 先来说说程序计数器&#xff0c;它也被称为PC寄存器&#xff0c;占据着很小的内存空间…...

无监督学习:聚类、异常检测

聚类 工作原因我对聚类特别熟悉&#xff0c;因此视频课程基本快进看完&#xff0c;不做记录 异常检测 高斯(正态)分布 多特征异常检测 将每个特征作为独立特征&#xff08;实践证明即使不完全独立也影响不大&#xff09;计算高斯分布的参数&#xff0c;然后将待预估样本代入…...

pdf与ofd的区别详细对比

PDF&#xff08;Portable Document Format&#xff09;和OFD&#xff08;Open Fixed-layout Document&#xff09;是两种常见的电子文档格式&#xff0c;它们在设计理念、技术实现、应用场景等方面存在显著差异。以下是对这两种格式的详细对比分析&#xff0c;涵盖其历史背景、…...

DDD架构实战第六讲总结:领域驱动设计中的聚合

云架构师系列课程之DDD架构实战第六讲总结:领域驱动设计中的聚合 聚合提升了对象系统的粒度,保证了业务逻辑的完整性,减少了错误产生的概率 一、引言 本讲将探讨领域驱动设计(DDD)中的重要概念——聚合。聚合是业务完整性的单元,是一个更大力度的封装。在领域驱动设计中…...

CentOS7使用源码安装PHP8教程整理

CentOS7使用源码安装PHP8教程整理 下载安装包解压下载的php tar源码包安装所需的一些依赖扩展库安装前的配置修改配置文件1、进入php8的安装包 配置环境变量开机自启启动服务创建软连接常见问题1、checking for icu-uc > 50.1 icu-io icu-i18n... no2、configure: error: Pa…...

vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定

1. 基础用法 在 Vue3 中&#xff0c;v-model 在组件上的使用有了更灵活的方式。默认情况下&#xff0c;v-model 使用 modelValue 作为 prop&#xff0c;update:modelValue 作为事件。 1.1 基本示例 <!-- CustomInput.vue --> <template><input:value"mo…...

【win11】解决msrdc.exe窗口启动导致周期性失去焦点

msrdc.exe randomly stealing focus 最近写代码时&#xff0c;经常出现周期性失去焦点的情况非常恼人,不确定是否是Q4的微软更新引起&#xff1f;换了输入法也不行&#xff0c;只能借助工具来查看&#xff1a;大神的工具非常好&#xff1a; 可以发现是remote app 启动了一个UI…...

【2024年终总结】深圳工作生活评测

距离上次写年终总结已经过了一年半了&#xff0c;这一年半中哪怕经历了很多的事情&#xff0c;但是感觉又没发生什么。想写一些骚话&#xff0c;却总觉得自己无法完全表达&#xff0c;便也就这样&#xff0c;静静地记录下这一段时光。 现在是2025年&#xff0c;春节前的时光&am…...

【29】Word:李楠-学术期刊❗

目录 题目​ NO1.2.3.4.5 NO6.7.8 NO9.10.11 NO12.13.14.15 NO16 题目 NO1.2.3.4.5 另存为手动/F12Fn光标来到开头位置处→插入→封面→选择花丝→根据样例图片&#xff0c;对应位置填入对应文字 (手动调整即可&#xff09;复制样式&#xff1a;开始→样式对话框→管理…...

npm常用命令

以往nodejs版本 Node.js — Node.js 版本 CNPM Binaries Mirror 查看当前版本 npm -v 查看node安装在哪里 where node 清除缓存 npm cache clean --force 淘宝镜像&#xff08;只支持下载&#xff0c;不支持上传发布&#xff09; npm config set registry https://reg…...

安装最小化的CentOS7后,执行yum命令报错Could not resolve host mirrorlist.centos.org; 未知的错误

文章目录 安装最小化的CentOS7后&#xff0c;执行yum命令报错"Could not resolve host: mirrorlist.centos.org; 未知的错误"错误解决方案&#xff1a; 安装最小化的CentOS7后&#xff0c;执行yum命令报错"Could not resolve host: mirrorlist.centos.org; 未知…...

现代 JavaScript 的入门教程

现代 JavaScript 的定义 现代 JavaScript 通常指的是自 ECMAScript 2015&#xff08;也称为 ES6&#xff09;以来的一系列语言更新和改进&#xff0c;以及随之而来的开发工具、库和框架的生态系统。这些变化不仅增强了 JavaScript 的功能性和表达能力&#xff0c;还推动了更高…...

linux naive代理设置

naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...

Java数据结构 (链表反转(LinkedList----Leetcode206))

1. 链表的当前结构 每个方框代表一个节点&#xff0c;每个节点包含两个部分&#xff1a; 左侧的数字&#xff1a;节点存储的值&#xff0c;例如 45、34 等。右侧的地址&#xff08;如 0x90&#xff09;&#xff1a;表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…...

游戏与硬件深度协同,打造更精细的体验优化

高画质的游戏往往带来手机的发热和卡顿从而影响游戏体验。开发者希望能够获取到手机运行的实时状态&#xff0c;从而能够进行主动的负载调节&#xff0c;将手机发热时游戏体验影响降到最低&#xff1b;同时手机也可以通过游戏传入的关键场景如"正在下载资源"“团战中…...

C++实现设计模式---命令模式 (Command)

命令模式 (Command) 命令模式 是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使得可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。 意图 将操作的调用者与接收者分离&#xff0c;通过将请求封装为独…...

office 2019 关闭word窗口后卡死未响应

最近关闭word文件总是出现卡死未响应的状态&#xff0c;必须从任务管理器才能杀掉word 进程&#xff0c;然后重新打开word再保存&#xff0c;很是麻烦。&#xff08;#其他特征&#xff0c;在word中打字会特别变慢&#xff0c;敲击键盘半秒才出现字符。&#xff09; office官网…...

flutter入门系列教程<三>:tabbar的高度自适用,支持无限滚动

背景 在之前的文章中&#xff0c;简介了tabbar组件的使用&#xff0c;它通常用于顶部放置tabbar标签页头&#xff0c;内容全部都是TabbarView的全部内容&#xff0c;且内容通常是占满屏幕的&#xff08;尽可能大&#xff09;&#xff0c;如下&#xff1a; 但是有时候我们需要…...

前端三件套详解之 HTML

HTML&#xff1a; 师承b站pink老师【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】 HTML概述 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创…...

【pytorch 】miniconda python3.11 环境安装pytorch

ubuntu24.04 miniconda python3.11 环境安装pytorch 组件:langgraph本身不需要有一些模型是需要的:python3.11环境:报错ModuleNotFoundError: No module named ‘torchaudio’ ModuleNotFoundError: No module named ‘torchaudio’File "/root/miniconda3/envs/05_ep_…...

支持大功率输出高速频闪的图像处理用光源控制器

机器视觉系统中的光源控制器在确保图像质量、提高系统稳定性、降低能耗以及方便系统扩展和升级等方面发挥着重要作用。它可提供稳定光源&#xff0c;调节参数&#xff0c;另外具有操作便捷性。 下面我们来看Gardasoft的光源控制器&#xff0c;Gardasoft拥有作为图像处理用LED光…...

使用 Python 和 Tesseract 实现验证码识别

验证码识别是一个常见且实用的技术需求&#xff0c;尤其是在自动化测试和数据采集场景中。通过开源 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;工具 Tesseract&#xff0c;结合 Python 的强大生态&#xff0c;我们可以高效实现验证码识…...

Opencv学习

Long time no see!哈哈&#xff0c;假期终于有时间做一点自己喜欢的东西了 还是想说&#xff0c;每天花一点时间投在自己喜欢的事情上&#xff0c;或者专攻一些平时不学的方向&#xff0c;真的很酷&#xff01; 图片绘制 对于图像绘制&#xff0c;可以分为&#xff1a;图像创…...

数学大模型MAmmoTH:通过混合说明调整建立数学通才模型

向悦和陈文虎是该项目的主要作者。他们这个项目推出 MAmmoTH&#xff0c;这是一系列专为解决一般数学问题而定制的开源大型语言模型 (LLM)。 MAmmoTH 模型在 MathInstruct 上进行训练&#xff0c;MathInstruct 是我们精心策划的指令调整数据集。 MathInstruct 已编译 来自 13 个…...

springboot 配置多数据源以及动态切换数据源

场景 我们springboot项目&#xff0c;通常会有多个数据库&#xff0c;例如mysql,vertica,postgresql等等数据库&#xff0c;通常我们需要动态切换使用我们想要的数据库&#xff0c;这时候就需要配置多数据源了 多数据源特性 支持多数据库类型&#xff1a;例如&#xff0c;同…...

计算机图形学:实验三 光照与阴影

一、程序功能设计 设置了一个3D渲染场景&#xff0c;支持通过键盘和鼠标控制交互&#xff0c;能够动态调整光源位置、物体材质参数等&#xff0c;具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体&#xff1a;代码中通过 openGLObject 结构体表示一个…...

idea修改模块名导致程序编译出错

本文简单描述分别用Idea菜单、pom.xml文件管理项目模块module 踩过的坑&#xff1a; 通过idea菜单创建模块&#xff0c;并用idea菜单修改模块名&#xff0c;结构程序编译报错&#xff0c;出错的代码莫名奇妙。双击maven弹窗clean时&#xff0c;还是报错。因为模块是新建的&am…...

Arcgis国产化替代:Bigemap Pro正式发布

在数字化时代&#xff0c;数据如同新时代的石油&#xff0c;蕴含着巨大的价值。从商业决策到科研探索&#xff0c;从城市规划到环境监测&#xff0c;海量数据的高效处理、精准分析与直观可视化&#xff0c;已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…...

RNN实现阿尔茨海默症的诊断识别

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…...

大数据学习(36)- Hive和YARN

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析

在Windows系统中&#xff0c;你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效&#xff0c;如图&#xff1a; 你可以使用以下代码&#xff1a; import os import winreg as reg# ffmpeg.exe的路径 ffmpeg_path …...

计算机的错误计算(二百二十一)

摘要 利用一个数学解题器化简计算 实验表明&#xff0c;即使是数学解题器&#xff0c;也是一派胡言。 有一读者来信&#xff0c;询问数学大模型的推理事宜。现就前面的案例继续做一讨论。 例1. 化简计算摘要中算式。 下面是与一个数学解题器的对话。 点评&#xff1a; &am…...

小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统

全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片:...

外部flash烧写算法学习笔记(一)

一&#xff0c;STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二&#xff0c;QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了&#xff0c;含MDK下载算法制作和STM32CubeProg下载算法制作 …...

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道&#xff0c;通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…...

差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法

四轮驱小车的话&#xff1a; 转向角度计算方法&#xff1a;float turning_angle z_angular / x_linear; // 转向角度&#xff0c;单位为弧度 速度的话直接用线速度 两轮驱动小车&#xff1a; 计算公式&#xff1a; leftSpeed x_linear - z_angular * ORIGINBOT_WHEEL_TRACK /…...

解释器模式

在软件开发的诸多场景中&#xff0c;我们有时需要处理特定领域的语言或表达式。例如&#xff0c;在数据库查询中&#xff0c;我们使用 SQL 语句来查询数据&#xff1b;在数学计算软件里&#xff0c;需要解析和计算各种数学表达式。解释器模式&#xff08;Interpreter Pattern&a…...

代码随想录刷题day14(2)|(链表篇)02.07. 链表相交(疑点)

目录 一、链表理论基础 二、链表相交求解思路 三、相关算法题目 四、疑点 一、链表理论基础 代码随想录 二、链表相交求解思路 链表相交时&#xff0c;是结点的位置&#xff0c;也就是指针相同&#xff0c;不是结点的数值相同&#xff1b; 思路&#xff1a;定义两个指针…...