按照数据通行方式分类:串行通信、并行通信按照数据传输方向分类:单工通信、半双工通信、全双工通信按照数据同步方式分类:同步通信、异步通信
[!note]- 同步通信要求收发双方使用同一个时钟信号实现同步,数据以帧为单位连续传输,帧内无间隔或仅有固定间隔。其优点是传输速率高、数据格式紧凑、传输效率高;但对时钟同步精度要求极高,时钟偏差易导致数据传输错误,适用于以太网、SPI、I2C、光纤通信、SDH/SONET光传输网络等大批量连续数据传输场景。
[!note]- 异步通信无需收发双方统一时钟,数据以字符为单位传输,每个字符前添加起始位、后添加停止位,通过这两个标识实现字符级同步。该方式的优点是无需额外时钟线、硬件结构简单、容错性强;缺点是起始位和停止位会占用10%-20%的带宽,额外开销大,传输速率较低,常见于UART串口通信、键盘与主机通信、鼠标与主机通信等间歇性、小批量数据传输场景。
UART
[!tip]+异步通信RX-TX发射端和接收端各自都是独立时钟,通过波特率保持同步
波特率每秒传输的码元个数,单位是Baud(波特)常见波特率:9600(基础)、1920 ...
配置和使用 esp32s3 n16r8CPU frequency = 240MHzFlash = QIOESP PSRAM 勾选 Pull-up PSRAM CS pin in light sleep,并且mode of spi ram chip in use = Octal Mode PSRAMconfigTICK_RATE_HZ = 1000
GPIO配置GPIO12345678910111213#include "driver/gpio.h"void gpio_init(void) { gpio_config_t io_conf = { .intr_type = GPIO_INTR_DISABLE, // 禁用中断 .mode = GPIO_MODE_OUTPUT, // 设置为输出模式 .pin_bit_mask = 1ULL << GPIO_NUM_3, // 配置 GPIO3 .pull_down_en = 0, // 禁用下拉电 ...
一、问题背景当你使用 ESP32-S3 N16R8(16MB Flash + 8MB PSRAM)开发时,会发现 PlatformIO 的 boards 列表中没有完全匹配的型号。默认选择 esp32-s3-devkitc-1 虽能编译,但系统仍按 4MB Flash 分配资源,导致大量存储空间无法使用。
二、解决方案:自定义配置三步走步骤 1:配置 platformio.ini123456789101112[env:esp32s3-n16r8]platform = espressif32board = esp32-s3-devkitc-1 ; 使用最接近的板子定义framework = arduino; 关键:指定 16MB Flashboard_upload.flash_size = 16MB; 启用 8MB PSRAM(OPI 模式,高速)board_build.arduino.memory_type = qio_opibuild_flags = -DBOARD_HAS_PSRAM
步骤 2:验证配置12345678910111213141516171819202 ...
SpringBoot
未读这里一篇我对Spring Security的笔记,多谢了下面这位博主的教程,也推荐他的视频
123456作者: 夜泊1990企鹅: 1611756908Q 群: 948233848邮箱: hd1611756908@163.com博客: https://hs-an-yue.github.io/B 站: https://space.bilibili.com/514155929/
理解这就是一个过滤器Filter
配置好依赖之后,启动就会自动创建一个动态password,默认用户名为user
客户端向服务器发起请求,被身份认证Filter拦截如果没有授权,让客户端访问/login路由页面客户端访问/login路由页面,则服务器返回login.html
深入常用内置核心接口123InMemoryUserDetailsManager: 内存账户信息管理类,是UserDetailsService的子类 UserDetailsService: SpringSecurity用户信息管理类的核心接口,管理用户信息来源(数据库还是内存以及其他...) UserDetails ...
SpringBoot
未读添加依赖(Freemarker模板)12345678910111213141516<!-- MyBatis Plus Starter --> <dependency> <groupId>com.github.yulichang</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.8-001</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.14</version> </dependency> < ...
Springboot常用Result12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273import java.io.Serializable; /** * 通用 API 响应封装类 * @param <T> 返回数据类型 */ public class Result<T> implements Serializable { private static final long serialVersionUID = 1L; /** 状态码 */ private int code; /** 提示信息 */ private String msg; /** 返回数据 */ private T data; // ========= ...
RBAC(Role-Based Access Control,基于角色的访问控制)是一种通过角色来管理用户访问权限的模型。它的核心思想是将权限分配给角色,再将角色分配给用户,用户通过扮演角色来获得相应的权限。
下面这个表格可以帮你快速抓住RBAC的核心组成部分:
核心组件
说明
生活中的类比
用户 (User)
系统的使用者,如员工、管理员等。
公司里的员工
角色 (Role)
一组权限的集合,代表特定的职责或岗位,如“经理”、“财务”。
员工所在的职位,如“部门经理”
权限 (Permission)
对特定资源(如文件、数据)可执行的操作(如读、写、删)。
该职位被允许处理的工作内容,如“审批10万元以下预算”
会话 (Session)
用户登录系统后建立的临时上下文,用于激活其拥有的角色。
员工在工作时间内履行其职责
RBAC的不同模型基础的RBAC模型(也称为RBAC0)包含了上述所有核心组件。为了满足更复杂的管理需求,RBAC还衍生出几个扩展模型:
RBAC1(角色分层模型):引入了角色继承概念。子角色可以继承父角色的所有权限,这类似于现实中的职位 ...
NVM
NVM指的是Node Version Manager,是一个Node.js的版本管理工具。它允许用户在同一台机器上安装和管理多个Node.js版本。这对于需要在不同的项目中使用不同Node.js版本的开发者来说非常有用。
以下是NVM的一些主要特点和功能:hexo
版本切换:允许用户在多个Node.js版本之间快速切换。
简易安装:提供了简单的命令行安装脚本,方便用户安装。
独立环境:每个Node.js版本都安装在其独立的目录中,不会干扰系统的其他Node.js安装。
默认版本设置:可以设置一个默认的Node.js版本,每次打开新的终端窗口时都会使用该版本。
兼容性:支持io.js,以及Node.js的各个LTS(长期支持)版本。使用NVM,开发者可以在测试新版本的应用程序的同时,保持生产环境使用稳定的Node.js版本,从而提高了开发的灵活性和便捷性。安装和使用NVM通常涉及以下步骤:
通过终端运行安装脚本。
使用nvm list available命令安装展示所有版本的Node.js。
使用nvm install <version>命令安装特定版 ...
在根目录创建一个store文件夹,里面创建js、ts文件
如果把state比作实体类的属性(如 user 的 name、age),actions比作实体类的方法(如修改属性的 setAge、执行业务逻辑的 login),那么getters可以理解为实体类中带缓存的 “计算属性方法”—— 它依赖属性(state)计算出新的值,并且只会在依赖变化时重新计算。
- **getters**:用于基于 state 的**派生状态**(如过滤、统计、格式化等),且这个派生状态可能被多次使用(比如在组件模板、其他 getters 中)。利用缓存可以避免重复计算,提升性能。
- **方法(actions 或普通函数)**:适合处理**不需要缓存的逻辑**(如单次计算、带参数的动态过滤),或包含**副作用的操作**(如请求接口、修改 state)。
123456789101112131415161718192021222324252627// 导入 defineStore 函数,用于定义 Pinia 存储import { defineStore } from ' ...
在官方插件中配置date属性
YYYY-MM-DDTHH:mm+08:00
安装插件
插件名
作用
Advanced Tables
表格工具
Better Word Count
字数统计
Editing Toolbar
编辑器上方快捷工具栏
Emoji Toolbar
Emoji表情
Excalidraw
超级好用的白板
Git
git同步
Hidden Folder
隐藏文件夹,例如node_modules
Tasks
任务
Templater
模板
Image auto upload
配合本地Picgo自动上传图片
Templater模板12345678---title: <% tp.file.title %>categories: -tags: -date: <% tp.date.now(format="YYYY-MM-DDTHH:mm:ss+08:00") %>---
IntelliJ IDEA 中配置 Live Template 快速生成日志对象在 IntelliJ IDEA 中,你可以通过配置Live Template(代码模板) 来快速生成日志对象的创建语句。以下是具体的配置方法和使用技巧:
步骤 1:创建日志模板
打开设置:File > Settings > Editor > Live Templates
点击右侧的+号,选择Template Group,新建一个分组(例如命名为Custom)
选中新建的分组,再次点击+号,选择Live Template
配置模板:
Abbreviation:设置触发前缀(例如log或logger)
Description:添加描述(例如Create logger instance)
Template Text:输入日志创建代码:
1private static final Logger logger = LoggerFactory.getLogger(\$CLASS\_NAME\$.class);
点击Define,选择适用的上下文(勾选Java > De ...
he—
一、核心调整策略
技术方向聚焦:以 Java(主赛道) 为核心,结合 算法竞赛(蓝桥杯/ACM) 和 软考备考,舍弃原计划中的Python/UE5/ESP32(硬件限制大),改为 Blender(碎片时间创作) 。
设备适配:用 在线IDE(如Replit、CodeSandbox) + 手机SSH工具(Termius) 编程,平板安装 AidLearning 运行Linux环境,解决无电脑问题。
考证优先级:根据考试时间安排优先级:英语四级(12月) > 软考中级(11月) > 计算机三级(9月) 。
体能训练:采用 微习惯法,从每天5分钟HIIT开始,逐步提升至20分钟。
二、每日计划表(打工期:4月底-9月底)【工作日:每天1.5-2小时】
时间段
周一、三、五
周二、四、六
周日(弹性)
早晨20min
四级词汇+听力(百词斩/每日英语听力)
软考知识点速记(信息系统管理/网络技术)
体能训练(Keep初级HIIT)
午休15min
刷LeetCode每日一题(Java实现)
看Blender ...
platformio.ini 配置任选其一
1234567891011121314; Flash: 16MB QD, PSRAM: 8MB OT[env:esp32-s3-devkitc-1]platform = espressif32board = esp32-s3-devkitc-1framework = arduinomonitor_speed = 115200board_build.arduino.memory_type = qio_opiboard_build.flash_mode = qioboard_build.psram_type = opiboard_upload.flash_size = 16MBboard_upload.maximum_size = 16777216board_build.extra_flags = -DBOARD_HAS_PSRAM
12345678910111213[env:esp32s3]platform = espressif32board = esp32-s3-devkitc-1framework = arduino; 指定为16M ...
概念我的理解就是,在整个前端Vue项目中,有需要全局都使用到的对象,例如token,而状态管理就是跨文件、跨域的一个全局变量对象
Vue 使用 Pinia
引用站外地址
pinia官网
123456789import { createApp } from 'vue'import { createPinia } from 'pinia'import App from './App.vue'const pinia = createPinia()const app = createApp(App)app.use(pinia)app.mount('#app')
例子创建 store123456789101112131415161718192021222324252627 ...
简介作用是当访问不同路径的时候,显示不同的页面
使用1npm install vue-router@4
创建src/router/index.js作为路由文件
1234567891011121314151617181920//导入vue-routerimport { createRouter, createWebHistory } from "vue-router";//导入组件import LoginVue from '@/views/Login.vue'import LayoutVue from '@/views/Layout.vue'//定义路由关系const routes = [ {path:'/login',component:LoginVue}, {path:'/',component:LayoutVue}]//创建路由器const router = createRouter({ his ...
什么是跨域跨域指的是一个域(比如 example.com)下的Web应用尝试去请求另一个域(比如 api.example.org)的资源。由于浏览器的同源策略限制,直接的跨域请求通常是被禁止的,以防止潜在的安全风险。CORS(Cross-Origin Resource Sharing)是一个协议,它允许服务器通过设置特定的HTTP响应头来放宽这个限制,从而允许某些跨域请求。
假如现在的页面是 http//:localhost:5173(Vue页面),访问后端服务器 http//:localhost:8080(SpringBoot),那么就属于跨域了。
只有浏览器端才存在跨域问题。
就是说在前端页面,通过 fetch、axios、vue-resource等ajax请求方式,向后端服务器发起请求。
不通过浏览器,选择使用代理,让前端服务器访问后端服务器,就可以拿到数据。
跨域:不同域名,不同端口,不同协议
如果是 http://localhost:8080/a 和 http://localhost:8080/b,那么属于同域,不跨域。
怎么解决SpringBoot 跨域方法上添加 ...
SpringBoot
未读简介SpringBoot支持多环境开发,通过配置文件来控制环境,默认是dev环境,可以通过命令行参数来指定环境,如:java -jar xxx.jar --spring.profiles.active=test
分割不同环境的配置使用
1---
指定配置属于哪个环境通过键值来指定,如:spring.config.activate.on-profile=<环境配置名称>
如何指定那个环境的配置生效?123spring: profiles: active: <环境配置名称>a
例子1234567891011121314151617181920212223spring: profiles: active: dev #指定默认环境---#开发环境spring: congfig: activate: on-profile: dev---#测试环境spring: congfig: activate: on-profile: test---#生成环境 ...