归档
08
21
Spdlog 库使用及详解 Spdlog 库使用及详解
前置知识 函数 fwrite 是 glibc 封装的一层有关 write 的接口,会在应用层再创建一个缓冲的 buffer,当调用的 fwrite 到一定的数量时,才会调用一次操作系统原生的 write。也因此有了函数 fflush,将这个
2025-08-21
04
03
Doip 协议详解 Doip 协议详解
Header1 字节的版本号,1 字节的版本号取反,2 字节的报文类型,4 字节的报文长度。 其中报文类型为 0000 的诊断报文,是通用 doip 报文头否定响应,所有类型都需要实现的。 Tcp type0x0005 路由激活请求
2025-08-03
02
12
开发工具使用之 Gdb 开发工具使用之 Gdb
多线程调试# 查看所有线程的堆栈 thread apply all bt # 切换到指定线程的堆栈 t 线程号 # 进入正在运行的程序查看堆栈(一般用于排查死锁或者进程卡死的问题) gdb attach 进程号 # 查看当前所有线程的
2025-02-12
07
21
UDS 协议详解 UDS 协议详解
序对于 UDS 协议,没法剥离出一个完全原子的概念出来理解,很多概念之间是相互穿插着的。 所以私以为一种比较好的理解思路便是,一股脑的介绍完所有的概念, 然后再通过一个简单的服务请求,或是 DTC 的报告,将这些概念逐个逐个的进行穿插和联系
2024-07-21
05
04
开发工具使用之 Catch2 开发工具使用之 Catch2
介绍目前使用的测试框架,好处就是只有头文件,方便无论是新人还是老人进行开发(gtest 需要编译成 静态库,使用上有点难度) CHECK 和 REQUIRECHECK 和 REQUIRE 用于检测当前括号中的表达式是否为真,常用于校验函数的
2024-05-04
04
开发工具使用之 Git 开发工具使用之 Git
Git 常用指令add# 将某个文件的修改提交到暂存区 git add filename # 将所有发生过修改的,以及新增的文件都添加到暂存区中 git add . branch# 创建分支 git branch branch_n
2024-05-04
03
17
一些 cpp 的编码规范 一些 cpp 的编码规范
什么时候使用前置声明为了防止循环引用的情况发生 避免头文件的使用者引入过多的无用的头文件(希望屏蔽底层的实现细节) 是否需要有 assertassert 只在 debug 的模式下才会生效,而 debug 模式并不会是生产模式下
2024-03-17
11
21
开发工具使用之 Cmake 开发工具使用之 Cmake
Example常用的编译脚本和 CmakeLists.txt build.sh#!bin/sh # Create makefile cmake -B build \ -DCMAKE_BUILD_TYPE=Release \ -DCM
2023-11-21
02
12
CMU 15-445 08-Index Concurrency CMU 15-445 08-Index Concurrency
Observation前面的操作中,都假设只有一个线程去操作数据结构,但实际操作中是有多个线程同时操作数据库的 因此需要研究多线程如何安全的执行查询 并且在实现线程安全的同时,也要注意如何优化磁盘IO 存在一些只支持单线程的数据库(比如
2023-02-12
01
19
CMU 15-445 14-Query Planning Optimization Part II CMU 15-445 14-Query Planning Optimization Part II
Backround上节课说的是基于规则的优化器,而本节课要说的就是基于代价模型的优化器 基于代价模型,估计每个计划的好坏 然后从众多执行计划中,选取一个性价比最高的执行计划 Cost model components代价估算的三
2023-01-19
19
CMU 15-445 13-Query Planning Optimization Part I CMU 15-445 13-Query Planning Optimization Part I
Query optimization为什么会有优化器的存在? SQL是声明式的,它只说明了需要的数据(答案)是什么,但没有说明要以什么方式去获取数据 因此DBMS可以对语句进行优化,从而以最小的成本获取相同的数据 因此有了众多SQL优
2023-01-19
1 / 4