前言
本节主要讲解STM32利用通用定时器,利用CCR和CNT寄存器,输出指定占空比和频率的PWM波形。其功能的应用有:实现LED呼吸灯的效果、控制步进电机、控制直流电机转速等。
导航
图98 通用定时器框图:

图片引自STM32 F1XX系列的中文参考手册。在通用定时器章节的定时器架构图中,本章讲解的定时器输出功能位于右下角的红色矩形中。
LeveDB源码笔记系列:
前言
本文讨论的Key都是LevelDB里面的Internal Key,至于什么是Internal Key请看LevelDB源码阅读笔记(1、整体架构)。另外本文的源码分析涉及Bloom过滤器的应用,不懂什么是Bloom过滤器的读者需自行学习。
SSTable的结构有关的的文件全部放在table目录下:
LeveDB源码笔记系列:
前言
对LevelDB源码的博客,我准备采用总-分的形式进行记录,我觉得先了解一下LevelDB整体流程,再往后讲解各个基础组件的话,读者会更容易理解这样设计的用意。
数据参考自leveldb的README:https://github.com/google/leveldb。
在Qt框架中,代理(Delegate)、模型(Model)和视图(View)之间的关系构成了MVVM(Model-View-ViewModel)架构的一部分,尽管Qt通常使用Model-View架构。这三者之间的关系可以这样理解:
1. Model(模型)
Model是数据的核心代表,它负责存储和管理应用程序的数据。Model提供了数据的接口,允许View查询和修改数据。Model与View的交互是通过信号和槽机制来完成的,当Model中的数据发生变化时,它会发出信号通知View进行更新。
2. View(视图)
View是Model数据的展示层,它负责将数据以用户友好的形式展示出来,并接收用户的交互操作。在Qt中,View通常是通过一些控件来实现的,比如QListView、QTableView、QTreeView等。View不处理数据的逻辑,它只是简单地展示Model提供的数据。
3. Delegate(代理)
资源分享:
官网地址:http://nil.csail.mit.edu/6.5840/2023/
Raft论文地址:http://nil.csail.mit.edu/6.5840/2023/papers/raft-extended.pdf
官方学生指导(又称官方避坑指导):https://thesquareplanet.com/blog/students-guide-to-raft/
总结:
简单来说,Raft算法是:可以让一条数据备份到多台机器上,而在外部看来,好像只有一台机器的样子。 ,实验做完到现在,也过去了很久了,在这里只能模模糊糊还原当时遇到的一些印象比较深的BUG,千言万语,还是亲身体验一下这些坑,印象才会深刻。
背景
菜鸟博主是2024届毕业生,学历背景太差,导致23年秋招无果,准备奋战春招。此前有读过LevelDB源码的经历,对数据库的了解也仅限于LevelDB。奔着”有对比才能学的深“的理念,以及缓解自身就业焦虑的想法,于是乎在2024.2.16日开始CMU15445(关系性数据库)实验之旅。目前进度:将P2做完了。
所以,本博客仅是对p1(Buffer Pool)和p2(B+Tree)的总结。
因为C++的基础还凑合,而且时间紧迫,于是跳过了p0实验,建议之前没学过C++同学,可以做做p0以熟悉现代C++的语法。
资源分享:
课程主页链接:https://15445.courses.cs.cmu.edu/spring2023/
B站有一位up主“Moody-老师”,对着CMU15445的ppt按照自己的理解复现了每一次的讲座,链接如下:https://space.bilibili.com/23722270