陈大大陈
码龄2年
关注
提问 私信
  • 博客:141,276
    社区:6,889
    动态:6,062
    154,227
    总访问量
  • 84
    原创
  • 6,078
    排名
  • 2,805
    粉丝
  • 33
    铁粉
  • 学习成就

个人简介:编程界的魔法编织者,️C++后端的探险家——欢迎来到我的CSDN小窝! 嗨,我是那个在代码海洋里遨游,用C++编织梦想的小精灵! 在这个充满逻辑与创意的数字世界里,我不仅是一位不懈的探索者,更是你学习路上的温馨伴侣。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:河北省
  • 加入CSDN时间: 2022-09-02
博客简介:

陈大大陈的博客

博客描述:
愿幸福降与此手。
查看详细资料
  • 原力等级
    成就
    当前等级
    6
    当前总分
    2,163
    当月
    26
个人成就
  • C++领域新星创作者
  • 获得2,392次点赞
  • 内容获得1,732次评论
  • 获得2,064次收藏
  • 代码片获得551次分享
创作历程
  • 12篇
    2024年
  • 68篇
    2023年
  • 4篇
    2022年
成就勋章
TA的专栏
  • C语言初阶以及进阶内容专栏
    33篇
  • 数据结构笔记
    9篇
  • 算法竞赛
    12篇
  • python笔记
    2篇
兴趣领域 设置
  • Python
    python
  • 编程语言
    c++c语言
  • 数据结构与算法
    算法
  • 后端
    sqlmysql爬虫
  • 学习和成长
    蓝桥杯leetcode面试程序人生学习方法考研
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

182人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Git全攻略:从基础到高级协作,一站式掌握版本控制精髓

欢迎踏入Git的奇妙魔法世界,一场穿梭于代码海洋中的奇幻旅程即将启程!🧚‍♂️想象一下,你手中握着的不仅仅是一个版本控制系统的钥匙,而是通往无限创意与完美协作的神奇门扉!🌟在这里,每一次commit都是一颗璀璨的星辰,在浩瀚的代码宇宙中留下你的智慧轨迹。🌌而branch,则是你的秘密花园,让你在不受干扰的天地里自由探索、大胆尝试,即使偶尔迷路,merge总能温柔地带你回归主路,拥抱变化,共同成长。🌱别担心,即使你是编程界的小萌新,Git也会用它那温暖而强大的怀抱,一步步引导你学会时间旅行,轻
原创
发布博客 2024.11.04 ·
659 阅读 ·
19 点赞 ·
8 评论 ·
36 收藏

【C++智能指针深度解析】std::shared_ptr、std::unique_ptr与std::weak_ptr的构造、原理及应用实战

智能指针是C++11引入的新特性,因为C++使用内存的时候很容易出现内存泄漏、野指针、悬空指针的问题,所以C++11引入了智能指针来管理内存。这篇文章会详细介绍了三种智能指针:、和的原理、使用方法和适用场景。共享式指针,同一时刻可以有多个指针指向一个对象。shared_ptr对象一旦被销毁,或者其值通过赋值操作或显式调用shared_ptr::reset而发生变化,就会立即释放它们共同拥有的对象的所有权。 shared_ptr指针的对象有获取指针所有权以及共享该指针所有权的能力,一旦它们获取了所有权,当最后
原创
发布博客 2024.10.24 ·
912 阅读 ·
17 点赞 ·
4 评论 ·
36 收藏

揭秘Git合并机制:为何先commit后pull再push,避免代码覆盖的真相

首先,在多人协作的环境中,远程仓库是团队成员共享代码的地方。在提交自己的改动之前,先拉取远程仓库的改动,可以及时发现并解决潜在的代码冲突。,再次 pull 一次是为了防止在你们协商的时候另一个人给又提交了新的一版东西,如果是这样,那上面的流程就再重复一遍,通常没有冲突的时候就直接给你合并了,而并不会把你的代码给覆盖掉。(或Rebase,取决于您的配置):将远程仓库的改动与你的本地改动合并。这位兄台对于pull有个误区,他认为pull会直接将远程仓库的代码覆盖到本地,实则不然。,我们来深入理解一下pull。
原创
发布博客 2024.10.22 ·
677 阅读 ·
14 点赞 ·
3 评论 ·
8 收藏

深入理解inet_addr函数:点分十进制IPv4地址到4字节网络字节序的转换

点分十进制(Dotted Decimal Notation,简称DDN)是一种用于表示IPv4地址的标准格式。IPv4地址是一个32位的数值,为了便于人类阅读和理解,它被分为4个字节(每个字节8位),并以点()分隔。每个字节的数值被转换为十进制数,并依次排列,用点号连接,从而形成一个点分十进制的IPv4地址字符串。例如,IPv4地址就是一个点分十进制格式的地址。1921681和1,每个部分都是一个十进制数,它们分别对应IPv4地址中的四个字节。
原创
发布博客 2024.10.22 ·
565 阅读 ·
6 点赞 ·
0 评论 ·
10 收藏

C++虚函数表深度剖析

只要一个类中有虚函数,那这个类中就一定会有一张虚函数表,虚函数表中的每一项都是虚函数的地址。这个类的每一个对象都会包含一个虚指针(虚指针存在于对象实例地址的最前面,保证虚函数表有最高的性能),这个虚指针指向虚函数表。
原创
发布博客 2024.10.20 ·
356 阅读 ·
6 点赞 ·
0 评论 ·
9 收藏

动态内存管理及RAII的简单应用

dll文件是Dynamic Link Library()文件的缩写,它是一种共享库文件,包含了程序所需的代码和数据。与静态链接库不同,动态链接库,使得程序的内存占用更小,同时也方便了程序的更新和维护。程序启动时,系统会将exe主程序依赖的所有dill库文件加载到进程的代码段的内存区中,这些文件里存放的是可执行的二进制机器码,也就是汇编代码。
原创
发布博客 2024.10.19 ·
735 阅读 ·
22 点赞 ·
0 评论 ·
11 收藏

线程互斥补全和加锁原理

可是此时寄存器内已经是0,它交换之后会做判断,如果是大于0,就执行,等于0,就挂起等待。操作时,以一条汇编指令的形式交换寄存器和内存单元中的数据,将寄存器的1和a来交换。为了方便理解,我们把锁简单理解成包含整形1的一个结构体,在内存单元中。要解决饥饿问题,就要使多线程执行有一定顺序性,也就是线程同步。多线程运行时,一份资源,有进程长期无法拥有,造成饥饿问题。可以定义上面这样的类,自动析构就等于解锁,非常方便。如果这时线程时间片到了,第二个线程过来,也要交换。互斥锁可以是全局的,也可以像上面一样是局部的。
原创
发布博客 2024.04.19 ·
358 阅读 ·
8 点赞 ·
0 评论 ·
1 收藏

线程互斥及基于线程锁的抢票程序

根据互斥的定义,任何一个时刻只允许一个线程申请锁成功,申请失败的进程在mutex阻塞,本质就是等待。任何时刻,互斥保证只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。首先把a从内存拷贝到CPU的寄存器,字CPU中完成++操作,再返回内存,不是原子的。可能大家会认为,当线程进入锁,执行锁内代码,这是如果发生切换,还是会产生同样的错误。其实这次不一样了,因为就算时间片到了,发生线程切换,被切换到的线程也没办法访问锁。申请锁本身是原子的,有宝马。就相当于上的线程的密码锁,专属的。
原创
发布博客 2024.04.18 ·
907 阅读 ·
16 点赞 ·
0 评论 ·
6 收藏

C++的线程

这样,我们学习别的语言,只需要学习接口,因为我们知道底层是一样的。用纯c++的接口创建线程时,在Linux中还是要包含线程库。这说明c++的那些库本质就是pthread原生线程库的封装。在编译链接库时,就会给每一个变量在线程局部存储中开辟空间。__thread可以给每个执行流一个变量。如果不添加-lpthread就会报错。说到底,这样的设计就是为了跨平台性。接下来了解一下线程的局部存储。下面是多线程的一个简单模版。
原创
发布博客 2024.04.18 ·
400 阅读 ·
5 点赞 ·
0 评论 ·
0 收藏

线程控制及线程底层原理

默认地址空间中的栈由主线程使用,这样,可以保证每一个新线程都可以保存要执行的方法,要传递的参数以及动态运行时的临时变量。同样的,pthread库也是库,在库中实现pthread_create的时候,内部包的就是clone函数。创建线程的时候,在正文代码区,直接跳转到共享区的库里,执行创建线程的函数,然后返回。7、用户栈:线程执行的用户方法栈,用来保存线程当前执行的用户方法的信息。而线程库是共享的,所以,内部要管理整个系统,多个用户启动的所有的线程。
原创
发布博客 2024.04.17 ·
689 阅读 ·
19 点赞 ·
0 评论 ·
10 收藏

多线程传参以及线程的优缺点

如果计算密集型 线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的 同步和调度开销,而可用的资源不变。linux没有真线程,只有轻量化进程,所以Linux OS只会提供轻量化进程的系统调用,不会直接提供线程创建的接口。编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了。与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多。而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。然后在软件层中,将线程对应成LWP。
原创
发布博客 2024.04.16 ·
1047 阅读 ·
22 点赞 ·
0 评论 ·
11 收藏

什么是线程?线程和进程谁更弔?

线程较进程更轻量化,调度上来说,pcb切换另一个pcb,地址空间,页表等是不用切换的,只需更换进程运行中寄存器产生的临时数据。线程的本质就是CPU调度的基本代码,Linux内核复用了进程代码,用进程pcb模拟充当线程。操作系统调度的时候,看的也是lwp,判断是主线程还是新线程,看的是lwp是否等于pid。换句话说,线程切换时,不需要切换CPU内部的所有寄存器的数据,而只需更换少部分。cache会对用户操作做出预判,加以缓存,大概率猜对,猜不对也没关系,重新缓存。
原创
发布博客 2024.04.16 ·
623 阅读 ·
6 点赞 ·
0 评论 ·
11 收藏

从零带你底层实现unordered_map的代码补全(2)

先把代码发出来,大家先看,有什么不懂得都可以私信问我。这块的迭代器是比较复杂,需要仔细看看。有问题题请私信 😘 😘 😘。
原创
发布博客 2023.12.04 ·
794 阅读 ·
16 点赞 ·
4 评论 ·
11 收藏

从零带你底层实现unordered_map的代码补全

改了一下开散列,加入了哈希桶,上期忘记加上了,现在补上,不好意思。
原创
发布博客 2023.11.28 ·
497 阅读 ·
11 点赞 ·
2 评论 ·
10 收藏

从零带你底层实现unordered_map (2)

💯 博客内容:从零带你实现unordered_map😀 作  者:陈大大陈🚀 个人简介:一个正在努力学技术的准C++后端工程师,专注基础和实战分享 ,欢迎私信!💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘哈希/散列:映射,关键字和另一个值建立一个关联关系。哈希表/散列表:映射,关键字和储存位置建立一个关联关系。哈希/散列是一种算法思想,而哈希表/散列表是基于这种算法思想而实现的一种数据结构,这点很容易混淆。上一篇博客介绍了两个解决哈希冲突的方法,
原创
发布博客 2023.11.28 ·
1314 阅读 ·
57 点赞 ·
22 评论 ·
41 收藏

从零带你底层实现unordered_map (1)

它是一个单向的迭代器。为什么专门提到这个呢?因为这是我踩过坑的地方!!单向迭代器压根就不能使用sort函数来排序!std::unordered_map的迭代器类型是ForwardIterator,而不是sort函数要求的RandomAccessIterator,这里不符合。我们要排序的话,还是将unordered_map里存的值,转存到vector里面。然后我们再自定义一个排序方法,对vector进行排序。
原创
发布博客 2023.11.20 ·
1034 阅读 ·
20 点赞 ·
19 评论 ·
20 收藏

并查集模版以及两道例题

上面的时间复杂度最好能有O(1)。实现方式是记忆化搜索,用数组存储好所需结果,需要时就不用再次递归了。这种并查集查找的效率太低,最坏情况的时间复杂度能达到O(N)。我们就针对它优化。上面的时间复杂度最好能有O(1)。实现方式是记忆化搜索,用数组存储好所需结果,需要时就不用再次递归了。来看两个例题巩固一下。How Many Tables(并查集)Problem - 1213 (hdu.edu.cn)题目:Today is
原创
发布博客 2023.11.06 ·
414 阅读 ·
26 点赞 ·
27 评论 ·
27 收藏

多态 多继承的虚表深度剖析 (3)

这么打印,需要注意的是,d是一个Derive类,加一的话会加上一个Derive的大小。我没看到,编译器仍旧是故技重施,欺骗我们的眼睛,我们检测监测不到func3。但是这样的话,就会衍生出一个问题,它自己的虚函数也就是func3放在哪里呢?此时有看起来有3个虚表,其实还是2个。答案是,因为继承了Base1和Base2两个类,所以有两个虚表。上面这种多继承的情况,Derive有几个虚表呢?我们得到结论,func3放到了第一个虚表里面。答案是两张,这种情况就跟普通的多继承没两样。还可以这样写,最聪明的一种写法。
原创
发布博客 2023.11.05 ·
1374 阅读 ·
25 点赞 ·
23 评论 ·
29 收藏

多态 虚函数表深度剖析 纯干货讲解(2)

打开内存监视窗口,我们高度怀疑后面两个地址是被隐藏的两个虚函数的地址。虚函数和普通函数一样,存在代码段,同时将虚函数地址存了一份到虚函数表。第一次编译器出了bug,没有在虚表后标识上0,第二次就好了。终于到了放终结技的时候了,我们可以在打印的时候同时调用函数。上面我们埋下了伏笔,在命令行窗口会打印出来调用函数的信息。经过测试,虚表是储存在常量区的代码段的,跟常量很接近。虚表储存在类的前四个字节,我们就取这四个字节打印出来。并不是这样,监视窗口看到的内容是经过编译器处理的。看不明白的老铁可以看看上面的图。
原创
发布博客 2023.11.05 ·
226 阅读 ·
16 点赞 ·
12 评论 ·
14 收藏

C++ 多态 纯干货讲解 复制可调试(1)

从上面可以看出,C++对函数重写的要求比较严格,但是有些情况下由于疏忽,可能会导致函数名字母次序写反而无法构成重载,而这种错误在编译期间是不会报出的,只有在程序运行时没有得到预期结果才来debug会得不偿失,因此:C++11提供了override和final两个关键字,可以帮助用户检测是否重写。调用指针或者引用指向的对象,指向父类就调用父类,指向子类就调用子类。查找虚函数表中存储的地址,是父类就调用父类,是子类就切割成父类对象。答案是B,容易选成D,需要注意的是,虚函数继承声明,重写实现。
原创
发布博客 2023.11.04 ·
264 阅读 ·
17 点赞 ·
16 评论 ·
16 收藏
加载更多