自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 深入浅出Bazel,构建快速、可靠的大型项目

Bazel虽然有一定的学习曲线,但它为大型、复杂和多语言项目带来的速度、可靠性和一致性是传统构建工具难以比拟的。它迫使你明确定义项目的模块和依赖,这本身就能极大地改善代码结构。

2025-10-09 17:23:27 1072

原创 autosar

AUTOSAR 是汽车行业为了应对软件定义汽车时代挑战而制定的核心基础设施。它通过标准化的软件架构,实现了软硬件解耦,极大地提升了开发效率、软件质量和可维护性,是推动汽车产业向智能化、网联化发展的关键基石技术。

2025-10-09 17:22:56 1511

原创 Go 语言核心知识点

才会被‘逃逸’到堆上,从而成为GC的管理对象。减少内存逃逸这是一种重要的性能优化手段,减轻了GC的压力。理解这些底层原理有助于编写更高效、更健壮的 Go 程序,尤其是在性能敏感的场景下,可以针对性地进行优化。

2025-10-02 11:33:37 955

原创 设计模式和代码设计原则

第一大分支:创建型模式 (Creational Patterns) - 处理对象创建机制核心思想:将对象的创建与使用分离,使系统更灵活、更易于扩展。主要模式单例模式意图:保证一个类仅有一个实例,并提供一个全局访问点。关键:私有构造函数,静态获取方法。工厂方法模式意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。关键:将实例化推迟到子类。抽象工厂模式意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。关键:生产“产品族”。建造者模式。

2025-10-02 11:32:54 895

原创 Redis缓存异常

在 Redis 缓存使用过程中,会遇到多种异常情况,合理处理这些异常对保障系统稳定性至关重要。

2025-09-30 20:53:22 881

原创 Redis的主从库与切片集群机制

总结:主从库解决单节点的读写压力和备份问题,切片集群解决海量数据的存储和扩展问题,两者结合可构建高可用、高扩展的 Redis 系统。当单节点 Redis 无法满足海量数据存储需求时,切片集群(Redis Cluster)通过数据分片实现水平扩展。:在切片集群中,每个主节点通常会配置从节点,既实现数据分片(集群),又通过主从保证单分片的高可用。主从库是 Redis 实现数据备份和读写分离的基础机制,通过数据复制保证数据一致性。

2025-09-16 21:08:36 1101

原创 Redis数据类型使用场景与底层原理

数据类型核心优势典型场景底层结构时间复杂度(核心操作)String简单、通用、原子操作缓存、计数器、分布式锁SDSHash结构化存储、字段级操作用户信息、商品属性List有序、两端操作高效消息队列、最新列表quicklist(ziplist 链表)Set去重、集合运算好友关系、去重、抽奖Sorted Set有序、按 score/rank 操作排行榜、延时任务Bitmap海量布尔值、内存极小签到、在线状态String(bit 数组)基数统计、内存极小。

2025-09-16 20:54:05 713

原创 MySQL的MVCC

MVCC 通过版本链(存储历史版本)和Read View(判断可见性),实现了读写操作的非阻塞并发,是 InnoDB 高性能、高并发的核心原因。读不加锁,读写不冲突,提升并发效率。支持不同隔离级别,满足多样化的一致性需求。避免了传统锁机制中可能出现的死锁和性能瓶颈。

2025-09-15 22:45:53 1109

原创 MySQL的事务特性和高可用架构

ACID 特性是事务可靠性的基石:原子性保证操作 “要么全成,要么全败”;一致性保证数据逻辑正确;隔离性避免并发干扰;持久性保证提交后数据不丢失。高可用架构通过 “主备一致” 实现数据冗余和故障切换,通过 “读写分离” 分担压力,核心是在 “一致性”“性能”“可用性” 之间找平衡(如异步复制性能高但一致性弱,组复制一致性强但性能略低)。实际应用中,需根据业务场景(如金融场景需强一致性,互联网场景可容忍轻微延迟)选择合适的隔离级别和高可用方案。

2025-09-14 22:59:06 801

原创 MySQL的性能优化。

MySQL 性能调优的核心是减少磁盘 IO、降低锁冲突、提高缓存利用率,需要结合业务场景(读多写少 / 写多读少)、数据量和并发量综合调整。优先解决瓶颈(如慢查询、索引缺失),再逐步优化参数和架构,避免盲目调优。

2025-09-14 22:29:17 1261

原创 MySQL的日志系统(redolog、binlog、WAL技术)

redo log:保障崩溃恢复,InnoDB 特有,物理日志,循环写。binlog:保障数据备份和主从复制,服务器层通用,逻辑日志,追加写。WAL:通过 “先写日志再写磁盘” 的策略,平衡性能与数据安全性,是 redo log 的核心实现思想。

2025-09-14 16:13:48 589

原创 MySQL中InnoDB索引使用与底层原理

特性MySQL Server查询缓存InnoDB缓冲池 (Buffer Pool)归属层面MySQL Server层InnoDB存储引擎层缓存内容完整的查询结果集表和索引的数据页粒度粗(表级)细(页级,通常16KB)失效机制对表的任何写操作导致所有相关缓存失效基于LRU算法和刷脏机制,精细管理现状MySQL 8.0中已移除InnoDB核心组件,至关重要目的避免重复执行相同的SQL查询减少磁盘I/O,加速数据访问。

2025-09-14 16:08:41 880

原创 数据库分区分表分库

数据量增长初期,优先考虑分区(对应用无侵入)。单表数据量超千万且持续增长,考虑分表。数据库并发压力大(如读写 QPS 超万级),考虑分库。实际场景中常结合使用(如先分库再分表),配合中间件(如 ShardingSphere)简化路由管理。

2025-09-14 15:57:06 417

原创 aiagent知识点

通常以一个JSON Schema数组的形式在请求时提供给LLM。

2025-09-09 22:14:00 802

原创 LangGraph和aiagent

python。

2025-09-09 21:36:25 1016

原创 HTTP协议

2、HTTP状态码:1XX信息性状态码,2xx成功状态码,3xx重定向状态码,4xx客户端错误状态码,5xx服务器错误状态码。HTTP/1.1:支持持久链接,允许多尔衮请求和响应通过同一个TCP连接传输,减少了建立和关闭连接的消耗。HTTP/2:基于独立二进制分帧,支持多路复用,运行单一的HTTP/2连接发起多重的、独立的、双向的交流。响应体:包含服务器的返回的数据,数据类型由响应头中的type字段指定MIME类型。请求行: 请求方法+ 空格+URL+空格+协议版本+回车+换行。响应头:头部字段+:+值。

2025-08-28 17:24:20 296

原创 linux的IO

inode分区存放inode表,不同的inode表示不同的文件,每一个文件都必须对应与一个inode,inode实质上是一饿个结构体。8、多次打开文件,多个文件表文件,导致文件覆盖,使用dup和dup2函数,进行文件描述符复制。2、open,write,read,close,lseek,每个文件表结构体都有一个指向文件写入文件位置的指针,使用lseek进行控制文件位置。9、文件描述符和FILE指针相互转化。,每个文件描述符表中的每项都指向一个文件表,多项可以指向同一个文件表,文件表为文件描述信息的结构体。

2025-07-30 02:01:52 980

原创 CMAKE

1、简易:cmake_minimum_required ( VERSION 2.8)//确定cmake最低版本project ( learn_cmake CXX) //项目名称和编译语言注意:变量的使用和Makefile不同,CMake是利用大括号,如${SRC_LIST}2、多个源文件cmake_minimum_required ( VERSION 2.8)//确定cmake最低版本project ( learn_cmake CXX) //项目名称和编译语言,C++使用CXX, C语言使用C。

2025-06-21 22:27:53 932 1

原创 I.MX6U的GPIO配置和LED点灯实验。

②、设置寄存器 IOMUXC_SW_MUX_CTL_PAD_XX_XX,设置 IO 的复用功能,使其复用 为 GPIO 功能。对于外设寄存器的地址,我们将GPIO的寄存器的地址写入通用寄存器,然后对通用寄存器进行[r1]解应用,可以向外设寄存器中写入对于的值来进行配置接口功能。根据I.MX6U 的参考手册,根据IO的名称,先对外设(一组GPIO)时钟使能,然后依次IO复用,IO属性配置,然后对复用的GPIO模式进行配置。_CTL_PAD_GPIO1_IO00对应的寄存器配置。使用IOMUXC_SW_

2025-05-04 14:38:28 587

原创 汇编常用语法

对会汇编过程进行控制的代码,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编陈旭提供汇编信息。(2)伪指令,不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。ADD, ADC (带进位),SUB(减法),MUL(乘法),UDIV(无符号除法),SDIV(有符号除法):未初始化的数据段,未初始化的全局变量和局部静态变量,使用动态的变量来初始化。:只读数据段,const修饰的static 变量都,以及一些字面量。(1)直接跳转指令B,BL,BX等。

2025-05-04 14:32:54 605

原创 递归,深度搜索,回溯,剪枝算法

【代码】递归,深度搜索,回溯,剪枝算法。

2025-04-30 00:18:07 394

原创 unix基础知识

linux中描述进程和线程的结构体相同,所有原则来说linux中没有线程,只有轻量级进程,使用线程接口,底层调用的时clone()函数,实现轻量级进程。拓展:文件表中包含文件状态标志、当前文件偏移量以及V节点指针,linux系统中是I节点指针,inode(I节点)是磁盘中的基本单位,磁盘中和内存交换的基本单位是页表。进程时间:用户CPU时间+系统CPU时间 = CPU时间,用户CPU时间在用户态执行的时间,系统CPU时间是指进程在内核态执行的时间。2、标准输入、输出和错误:文件描述符0,1,2。

2025-04-30 00:17:14 934

原创 算法笔记—动态规划

【代码】算法笔记—动态规划。

2025-04-20 22:56:09 690

原创 键入网址到网页显示,期间发生了什么?

通过路由表中的Destination目标地址,来区分各个网卡对应的子网,没有子网则使用默认网关发送到getway(路由器地址),网关的IP地址是具有路由功能的设备的IP地址。​ 3、根DNS收到来自本地的DNS的请求后,发现后置是.com , 说"www.server.com"这个域名是.com区域管理,将.com顶级域名服务器地址给你,如果没有,本地DNS会去问它的根域名服务器。接受方的MAC地址获取:查询路由表,在路由表中找到相匹配的条目,然后把包发给对应的网关(也就是gateway的IP地址),

2025-04-20 22:55:46 1016

原创 http、https协议

2025-04-17 15:34:09 428

原创 远程升级组件设计

-----------+-----------+ | 网络协议 ( 下载阶段使用什么通信协议) v +-----------+-----------+ | 远程升级服务器 | +-----------------------++-----------------------+ | 主应用程序 | +-----------+-----------+ | 通信接口(使用本地socket通信发送给远程升级模块进程或者线程。下载阶段中,任意时间点失败,进行版本回退,恢复备份,上报流程,然后结束流程。

2025-04-11 16:39:03 584

原创 应用层通信报文设计

序列化算法字段表示发送仿将对象转换成二进制流,以及接收方接受的二进制流准换成对象的方法。最常见的是,先构造文件流对象,选择二进制读取方法,将使用read()将文件对象读入string和vector<char>中,json和Hessian,java自带序列化。| 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte |初始化请求,初始化确认响应,文件数据块,数据块接受确认,文件传输完成通知,传输完成确认,错误通知。不同版本的协议对应的解析方法也是不同的。

2025-04-11 15:32:22 512

原创 MySQL基础命令

makedown代码块语言类型:shell 是命令行解释器,powershell是命令行界面和脚本语言。mysqld进程是服务端,mysql进程是客户端,MySQL是一个网络服务。C/C++ 连接MySql创建mysql。

2025-04-10 16:08:07 199

原创 程序员的自我修养-略读

​ ②读取可执行文件头,创建虚拟地址空间与可执行文件的关系,具体的,运行时缺页,然后通过页中断,将页表中对应磁盘中可执行文件的部分装载进内存,由linux内存管理实现,也是传统的装载。​ 共享库的版本,xxxx.X.Y.Z: X表示主版本,不同主板本的库不兼容,Y表示次版本,添加新的API(接口),Z表示发布版本号(修bug,性能改进)​ **段地址对齐,**页的单位大小为4KB,将segment邻接区域的一个页,通过两次映射到虚拟地址的两个页,实现内存空间的充分利用。

2025-02-22 18:04:44 919

原创 mysql_复合查询

​ 其他四大jion,分别对笛卡尔积取交集,并集,以及交集并上chart1或者chart2。​ 按cilumnZ分组,美足最大sal和sal组合和的表,并且 columnX=num1.​ 如果子查询是一行的话,条件匹配可以为 =;​ chart1所有行匹配chart2所有行,然后显示columnY。​ columnX在子查询的表中存在,查询所有的columnY。​ part2是打印的表,信息从这里获取,使用笛卡尔积时,​ part1是显示部分,打印所需的信息,依旧是一个表,

2025-02-22 11:11:45 395

原创 Hash表,STL-unordered_map和unordered_set

下面是模拟的底层hash表:使用的是开放定址法。一、unordered_map和unordered_set。

2025-02-18 18:47:22 326

原创 MySQL服务端启动问题

上图命令运行后出现:Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.使用mysql_update命令,更新mysqld的各种配置,但是mysqld没有启动,无法运行。我是通过查看mysql.log日志给Al,它让我使用mysql_update命令。

2025-02-18 18:46:44 1301

原创 算法笔记—前缀和(动态规划)

优化:前缀和+同余定理:首先,加以i结尾的子数组和为y,sum是i的前缀和,然后y%k==0表示子数组的和可以被整除。所以(sum-x)%k==0 => 同余定理: sum%k==x%k,其中x可以是i之前所有元素的前缀和,我们用hash统计好i之前所有元素的前缀和,就可以得出以i结尾的子数组和为k的个数。细节:这里的sum和x可能为负数,所以%k取余可能是负数,所以用 sum%k==x%k,无法正确判断出一些特殊情况,例如sum=-3,x=2;同余定理:(a-b)%k==c……

2024-12-20 22:54:47 354

原创 linux-多线程

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流ps:类Unix系统(linux和macos),系统并没有针对线程专门设计线程控制块,而windows针对线程设计了线程控制块。

2024-12-20 18:01:07 1312

原创 李沐_动手学深度学习_模型选择

模型选择:机器学习科学家,我们的目标是发现模式(pattern)

2024-10-23 15:46:31 1064 1

原创 C++特殊类设计,

比如在某个服务器程序中,该服务器的配置 信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再 通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取 文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化, 就会导致程序启动时非常的缓慢。派生类的继承会调用基类的构造函数,c++98将基类的构造函数私有化,派生类中调不到基类的构造函数。

2024-09-05 22:24:32 780

原创 C++的四种规范的类型转换

dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换) 向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则) 向下转型:父类对象指针/引用->子类指针/引用(用dynamic_cast转型是安全的)static_cast:用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用 static_cast,但它不能用于两个不相关和const与非const的类型进行转换。1. dynamic_cast只能用于父类含有虚函数的类。

2024-09-05 22:24:16 678

原创 进程通信-ipc

一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到 内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另 一个进程的所有陷入和异常,并能够及时知道它的状态改变。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止 时要通知父进程)。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道。管道是Unix中最古老的进程间通信的形式。

2024-07-27 17:37:41 1075

原创 操作系统信号_linux

1.忽略2.执行该信号的默认动作,默认动作也可以什么都不做3.提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉 (Catch)一个信号.处理函数也可以什么都不做。

2024-07-27 17:33:49 934

原创 贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解,但在某些问题上能提供足够好的解决方案。

2024-06-22 18:23:43 1087

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除