- 博客(31)
- 收藏
- 关注
原创 Redis-场景缓存+秒杀+管道+消息队列
出现不一致问题场景:先更新数据库,再更新缓存;先更新缓存,再更新数据库;请求A更新 请求B读取但是具体睡眠多久其实是个玄学,很难评估出来,所以这个方案也只是尽可能保证一致性而已,极端情况下,依然也会出现缓存不一致的现象。因此,还是比较建议用「先更新数据库,再删除缓存」的方案。缺点是,对代码入侵性比较强,因为需要改造原本业务的代码。更具体的说法:
2025-04-09 10:14:39
534
原创 Redis高可用
命令传播主从服务器在完成第一次同步后,双方之间就会维护一个 TCP 连接。后续主服务器可以通过这个连接继续将写操作命令传播给从服务器,然后从服务器执行该命令,使得与主服务器的数据库状态相同。而且这个连接是长连接的,目的是避免频繁的 TCP 连接和断开带来的性能开销。上面的这个过程被称为基于长连接的命令传播1. Replication Buffer(复制缓冲区)哨兵(Sentinel)机制,它的作用是实现主从节点故障转移。
2025-04-06 21:57:03
1054
原创 C++编译汇编八股总结
宏(Macro)是C和C++编程语言中的一种预处理器指令,允许在编译前定义和替换文本和代码。宏通过预处理器(preprocessor)进行文本替换,只是简单的文本替换。宏的定义通常使用 #define指令,可以用于定义常量、简单的函数等。宏的优点提高代码重用性:宏允许定义一段代码或文本,然后在多个地方使用。这有助于减少重复代码和提高代码可维护性。提高性能:宏在编译阶段进行替换,因此可以避免函数调用带来的性能开销。宏的缺点命名冲突:宏的命名空间是全局的,这可能导致命名冲突。
2025-03-18 11:17:05
785
原创 Linux文件系统八股总结
1.1 使用代码打开“log.txt”文件,向文件当中写入“i like linux!”.1.2 在从文件当中读出文件当中的内容, 打印到标准输出当中;关闭文件描述符。
2025-03-18 10:04:01
649
原创 Mysql锁八股总结
那么在备份数据库之前先开启事务,会先创建 Read View,然后整个事务执行期间都在用这个 Read View,而且由于 MVCC 的支持,备份期间业务依然可以对数据进行更新操作。那么如果数据库里有很多数据,备份就会花费很多的时间,关键是备份期间,业务只能读数据,而不能更新数据,这样会造成业务停滞。,这样在备份数据库期间,不会因为数据或表结构的更新,而出现备份文件的数据与预期的不一样。里面包含:共享锁(读锁)、独占锁(写锁)意向锁里有:共享式意向锁、独占式意向锁。表锁、元数据锁、意向锁。
2025-03-13 15:51:10
684
原创 Linux进程通信八股总结
1.父子间管道通信2.命名管道通信3.利用共享内存实现两个进程通信4.让2号信号SIGINT执行自定义函数1.前台进程后台进程2.捕捉信号,让2号信号SIGINT执行自定义函数3.信号的三张表相关的操作。
2025-03-10 14:18:07
817
原创 Linux内存管理八股总结
内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出。
2025-03-08 21:39:56
951
原创 Mysql索引八股总结
如果某个查询语句使用了二级索引,但是查询的数据不是主键值,这时在二级索引找到对应的一行数据后,再找到对应的主键值,去聚簇索引中获得数据行,这个过程就叫作「回表」。查询时,MySQL 会先利用索引查找符合条件的记录(例如,查找某个列的值)。然后,MySQL 根据索引中的记录找到对应的数据行,但由于索引中并不包含查询所需的所有列,MySQL 需要再次访问数据表来获取完整的列数据。这个过程称为回表。
2025-02-17 15:55:28
870
原创 C++11八股复习
左值是一个表示数据的表达式,如变量名或解引用的指针。左值可以被取地址,也可以被修改(const修饰的左值除外)。左值可以出现在赋值符号的左边,也可以出现在赋值符号的右边。右值也是一个表示数据的表达式,如字母常量、表达式的返回值、函数的返回值(不能是左值引用返回)等等。右值不能被取地址,也不能被修改。右值可以出现在赋值符号的右边,但是不能出现在赋值符号的左边。
2025-02-17 14:25:04
520
原创 Linux进程线程基础八股总结
进程是操作系统进行资源分配和调度的基本单位。我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个。每个进程拥有独立的内存空间、文件描述符、寄存器状态等资源。进程之间的资源是相互隔离的。
2025-01-04 16:29:50
281
原创 C++STL容器八股总结
C++的STL是C++编程语言中的一个功能强大且广泛使用的库,它提供了一系列通用的模板类和函数。容器(Containers):容器是用来存储和管理数据的数据结构,例如向量(vector)、列表(list)、队列(queue)、栈(stack)、集合(set)和映射(map)等。迭代器(Iterators):迭代器是一种类似于指针的对象,可以用来遍历容器中的元素。迭代器为容器中的数据提供了统一的访问接口。算法(Algorithms)
2025-01-04 16:29:43
921
原创 c++继承和多态八股
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态就是同一个接口,使用不同的实例而执行不同操作。这种根据对象实际类型而非声明类型来确定执行方法的行为,就是多态性的体现。C++中有两种多态,一种是静态多态、一种是动态多态;编译时多态,又称静态绑定,是指编译器在编译时通过检查引用类型的方法是否存在,来定位到相应的类及其方法,而不检查实际对象是否支持该方法。
2024-11-17 17:16:24
893
原创 c++智能指针八股复习
智能指针的循环引用是指当两个或多个对象通过智能指针相互引用时,形成了一个闭环,导致它们的引用计数无法归零,进而导致内存无法释放的情况。解决。
2024-11-15 17:52:35
513
原创 Linux多线程复习/互斥锁等
多线程代码操作复习1.pthread_create、pthread_join、pthread_exit的使用1.1 创建线程执行一个自己的函数1.2 线程传入对象实现求和函数2.多线程2.1 多线程模拟实现抢票2.2 加锁抢票3.实现同步3.1 加入条件变量让多线程实现变量++3.2 生产者消费者模型****3.2.1 基于阻塞队列的生产者消费者模型3.2.2 基于循环队列的生产者消费者模型4.实现线程池5.线程封装6.线程池的单例模式6.1 单线
2024-11-06 17:04:56
844
原创 计算机网络TCP八股复习总结
TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的(不能一对多);可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;字节流:字节流是一种连续的数据流,没有固定的边界。发送方可以将数据分成任意大小的字节块发送,而接收方则需要以字节流的方式接收这些数据。没有固定的结构或数据格式。
2024-10-30 22:08:27
877
原创 计算机网络HTTP八股复习总结
强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。一般使用Cache-Controlhttp响应头部字段 来实现强缓存。当我们在浏览器使用开发者工具的时候,某些请求的响应码是 304,这个是告诉浏览器可以使用本地缓存的资源,通常这种通过服务端告知客户端是否可以使用缓存的方式被称为协商缓存。GET 和 POST 有什么区别?在 HTTP 协议中,GET 和 POST 是两种常用的请求方法,它们的主要区别在于用途和数据传输方式。GET。
2024-10-24 21:06:14
731
原创 linux文件系统
1.1 使用代码打开“log.txt”文件,向文件当中写入“i like linux!”.1.2 在从文件当中读出文件当中的内容, 打印到标准输出当中;关闭文件描述符。
2024-10-05 21:28:01
988
原创 linux内存管理
在 32 位的环境下,虚拟地址空间共有 4GB,假设⼀个⻚的⼤⼩是 4KB(2^12),那么就需要⼤约 100 万。那么, 100 个进程的话,就需要 400MB 的内存来存储⻚表,这是⾮常⼤的内存了,更别说 64 位的环。(2^20) 个⻚,每个「⻚表项」需要 4 个字节⼤⼩来存储,那么整个 4GB 空间的映射就需要有。最常访问的⼏个⻚表项存储到访问速度更快的硬件,于是计算机科学家们, 就在 CPU 芯⽚中,加⼊了⼀个。在 Linux 下,每⼀⻚的⼤⼩为。⻚号作为⻚表的索引,⻚表包含物理⻚每⻚所在。
2024-09-22 16:47:44
1098
原创 Linux基本指令
ls是命令 -l是选项文件=内容数据+属性数据文件名以 . 开头就是隐藏文件ls -a---显示所有文件包括隐藏文件ls -l---显示文件的属性ls -i---查看文件的inode编号-- 查看当前路径-- 进入路径--- 一个点表示当前路径---表示上级路径cd .. -- cd 空格 .. 进入上级路径./code/ --路径分隔符/ 也是根目录相对路径:以当前目录cd -返回最近访问的路径cd ~进入用户家目touch--
2024-09-13 14:57:13
996
原创 c++ stack queue 优先级队列
5.讲一下deque是怎样实现的?优点 缺点 deque的迭代器。力扣155题 牛客JZ31 栈的压入、弹出序列。1.stack的模拟实现。3.queue的模拟实现。
2024-03-02 14:16:32
356
原创 vector
在vector里面{1 ,2 ,3 ,4},假设pos指向4这个位置,erase删除pos指向的4,此时{1,2,3,__},此时最后一个位置是_finish指向的位置,pos也指向这个位置但是是一个无效位置。可能会出现报错因为,构造函数可能会匹配到下面这个构造函数进行构造,5和10默认是int类型,不能够进行解引用。指向了一块已经释放的空间,同时新开辟的空间也丢失,造成了内存泄漏。原先的pos指向2 扩容之后的原有的vector开辟的空间被释放掉了,pos成为野指针。指向的空间,程序都会运行崩溃,这是。
2024-02-13 11:02:19
253
原创 STL string
string下的swap与模板中的swap的区别。作用:把c++中string类型的字符串转换成 c中的字符串数组。string下的swap交换指针,效率更高。类型:const char* c_str() const。模板中的swap交换内容。查找所有的所给元素进行替换。
2024-02-01 16:14:48
162
原创 c++内存管理八股复习
这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的是1M,总之是一个编译时就确定的常数), 如果申请的空间超过栈的剩余空间时,将提示overflow。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表 的遍历方向是由低地址向高地址。operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。
2024-01-11 20:07:24
1007
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人