- 博客(32)
- 收藏
- 关注
原创 C++基础面试问题之const(非常重要!!!很考验基础!!!尤其是校招生,没有工程经验,尤其需要关注!!!)
小结:对于加了const关键字的变量,其定义时必须初始化,无论是const还是非const变量都可以对其进行初始化;而对于初始化了的const变量,不能再被赋值。考虑一个如下函数对它进行如下调用小结:可以看到,用int,const int,const int& ,auto类型的都能接收到,那在函数返回值前加const还有什么意义呢?在这里const是用于说明getNum返回的是一个const int,也就是函数的设计者希望不要改变函数的返回值,作为调用者,最好应该使用const int& 接收。看一下接
2024-04-09 10:27:30
372
原创 C++内存管理
从C++的内存分区谈起,简单比较堆和栈的区别;然后是内存分配和释放相关的new/delete,malloc/free的比较;再然后是内存的不合理分配或释放可能造成的问题(野指针,悬浮指针,内存泄漏等),以及为了避免这些问题的常用解决方案,也就是内存管理方面的手段(智能指针);最后是一些重要但是与计算机体系结构相关的问题,如内存对齐、乱序执行等。
2024-03-10 16:31:53
835
原创 Redis持久化(一)-------AOF
服务层的binlog也是通过追加的方式记录日志,称之为逻辑日志。引擎层根据选择的存储引擎不同,日志也是不同的,以InnoDB来说,有undo日志和redo日志,undo日志主要用来作数据回滚的,而redo日志支持故障恢复,称之为物理日志,redo日志和binlog配合(涉及到两阶段提交)可以实现持久化。重写机制的妙处在于,尽管某个键值对被多条写命令反复修改,最终也只需要根据这个「键值对」当前的最新状态,然后用一条命令去记录键值对,代替之前记录这个键值对的多条命令,这样就减少了 AOF 文件中的命令数量。
2024-01-20 16:08:29
1454
原创 MySQL事务隔离中的规则---以可重复读为例
然后事务A执行查询语句,版本[id=1,k=3,row trx_id=101]对事务A不可见,因为101等于高水位,对事务A而言是未开始的事务,版本[id=1,k=2,row trx_id=102]对A不可见,因为102大于高水位,版本[id=1,k=1,row trx_id=90]对A可见,因为90小于低水位,所以查出来k=1;事务A到事务C的事务ID分别为100, 101, 102,事务C最先执行update语句创建了一个版本[id=1,k=2,row trx_id=102],自动提交;
2024-01-15 20:55:06
1844
原创 单例模式的C++实现
逻辑上,双检查锁是没问题的,一旦m_instance不为空,多线程都可以访问它,但可惜的是编译器优化会reorder,也就是汇编代码的顺序和高级语言代码顺序不是完全一致的,比如,new的过程会先分配内存,再执行类的构造函数,假设在分配完内存后,进行了线程切换,此时m_instance不是nullptr,但m_instance代表的对象可能还没有构造好就被使用了。,在其它语言中,如Java中不用这么复杂,给m_instance加个volatile关键字就行了,VC下也可以,但不是跨平台的。
2024-01-15 16:46:00
1641
原创 Redis常用数据结构
因此,我们需要借助 Redis 对这些 Session 信息进行统一的存储和管理,这样无论请求发送到那台服务器,服务器都会去同一个 Redis 获取相关的 Session 信息,这样就解决了分布式系统下 Session 存储的问题。例如用户一的 Session 信息被存储在服务器一,但第二次访问时用户一被分配到服务器二,这个时候服务器并没有用户一的 Session 信息,就会出现需要重复登录的问题,问题在于分布式系统每次会把请求随机分配到不同的服务器。应用场景:排序场景,比如排行榜、电话和姓名排序等。
2024-01-12 20:47:58
893
转载 第四章 Go内存管理(一):内存分配原理
数组中每个元素代表了一种class类型的span列表,每种class类型都有两组span列表,第一组列表中所表示的对象中包含了指针,第二组列表中所表示的对象不含有指针,这么做是为了提高GC扫描性能,对于不包含指针的span列表,没必要去扫描。有了管理内存的基本单位span,还要有个数据结构来管理span,这个数据结构叫mcentral,各线程需要内存时从mcentral管理的span中申请内存,为了避免多线程申请内存时不断的加锁,Golang为每个线程分配了span的缓存,这个缓存即是cache。
2023-11-26 21:55:16
79
原创 第四章 Lab4_assembly
执行make fs.img编译它,并在user/call.asm中生成可读的汇编版本。在call.asm中,没有对应的汇编代码来调用。6.在下面的代码中,“y=”之后将打印什么(注:答案不是一个特定的值)?,这个实验过程基本包含了在xv-6下增加文件后,更改声明及编译规则的一般步骤),通过。这次我们不直接看call.asm文件了,汇编代码的可读性是真难受,通过gdb来查看。第二个值是从a2寄存器读出来的,a2寄存器中是什么值打印出来的就是什么值。57616的大小端序是一样的,不用更改。
2023-11-08 16:49:15
79
原创 第一章 exec系统调用初探
接受两个参数,其中path指定可执行文件的位置(包括文件名),argv是字符串参数数组。如下例//标准输出会打印hello这个代码片段将调用程序替换为了参数列表为echo hello的/bin/echo程序运行,多数程序忽略参数数组中的第一个元素,它通常是程序名。exec系统调用定义在文件中,下面来看具体代码,大致分为如下几个部分。有很多细节现在无法深究,等到后面章节结束后再回来看。int i, off;begin_op();end_op();return -1;
2023-10-22 21:00:29
268
1
原创 精讲enable_shared_from_this
enable_shared_from_this是为了解决(两个非共享的shared_ptr指向同一个对象,未增加引用计数导对象被析构两次)。至于它的具体实现后文再说。有如下一个资源类我们用shared_ptr管理它生成的对象,这个资源类的成员函数getPtr的作用是。然后我们执行下面的测试程序。注:在vs2017中是触发了一个异常断点,实际上是重复释放了内存。从结果可知,。为什么会这样?通过创建了一个id=1的Obj对象,并用智能指针obj1管理它(),此时obj1中的引用计数为1;
2023-10-12 14:22:25
217
原创 字典树(Trie)小结
一种针对字符串进行维护的数据结构,字典树,顾名思义,是关于“字典”的一棵树。即:它是对于字典的一种存储方式(所以是一种数据结构而不是算法)。这个词典中的每个**“单词”就是从根节点出发一直到某一个目标节点的路径**,路径中每条边的字母连起来就是一个单词。例如:标橙色的节点是“目标节点“,即根节点到这个目标节点的路径上的所有字母构成了一个单词。...
2022-08-06 12:37:19
170
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人