
面经之C++
文章平均质量分 67
介绍面经一些C++知识
黑猫爱小鹿
这个作者很懒,什么都没留下…
展开
-
手把手教你简历制作需要注意的点
简历制作小技巧,教你如何避坑原创 2022-07-19 13:18:42 · 1208 阅读 · 0 评论 -
大小端详解
编程基础知识之大小端原创 2022-06-09 21:16:40 · 261 阅读 · 1 评论 -
字节面经(gdb原理、valgrind)
字节面经文章目录字节面经GBD调试的原理gdb的调试命令原理gdb如何实现断点的呢你怎么定位程序cpu使用率高的问题内存泄露kill某个有名称的进程voliate栈的效率为什么比堆要高为什么构造函数不可以被继承GBD调试的原理gdb调试可以用vscode的launch进行配置,同时也可以用用Cmake进行一个编译在进行调试参考链接GBD调试包括两个程序:(1) gdb程序,(2)被调试程序本地调试 上面两个程序都运行在本地远程调试 调试程序在一台电脑,被调试程序在另外一台电脑gdb的调试原创 2022-03-02 15:47:19 · 1474 阅读 · 0 评论 -
手把手教学前缀树
前缀树应用前缀匹配词频统计数据结果root节点 root = Trie()孩子节点 HashMap<char,Trie> children结束FLag bool isEnd/isword 判断是否是数字对应的值 string val题目推荐leetcode 208leetcode 720leetcode 692208. 实现 Trie (前缀树)难度中等923Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符原创 2021-10-22 10:02:25 · 151 阅读 · 0 评论 -
手把手教学----------带你手撕LFU
手把手带你手撕LFU文章目录手把手带你手撕LFU代码LFU的淘汰策略是优先淘汰最久的使用频率最低的那个所以第一步put如果没有超过容量,需要知道key对应的插入那么一个频率块,需要知道当前的频率块在里面删除如果超过了,要知道最小的频率在哪里get快速知道key对应的value在哪里需要快速的删除,插入所以我们设计如下struct Node: 包括key value freq 三个属性unordered_map<int,List<Node>>原创 2021-10-18 14:37:04 · 196 阅读 · 0 评论 -
内存池详解
内存池详解文章目录内存池详解概念分配内存的过程内存的释放内存池的优缺点概念如图所示,内存池可以减少大量的调用new malloc产生的空间碎片,提高内存的利用率在STL中一共有两级空间分配器,内存池就是实现在二级空间分配器当中的内存池里面一共维持中16根链表,每一个链表负责特定大小的空间区块,从8byte到128byte分配内存的过程当我们传入一个字节的参数表示我们所需要的内存的大小的时候,自动校对到第几号链表,比如13byte会分配16byte,找到对应的几号链表以后判断链表是否为空,原创 2021-09-24 09:40:03 · 504 阅读 · 0 评论 -
类对象只在栈或者堆里面创建
类对象只在堆或者栈里面创建文章目录类对象只在堆或者栈里面创建类对象只在栈里面创建类的对象只在堆里面创建构建对象有两种方式方法, 第一: 静态构建 A a 第二: 动态构建 调用new类对象只在栈里面创建如果要在栈里面创建,那么就必须采用静态构建对象的方法,也就是直接调用构造函数禁用new运算符将operator new 和 operator delete设置为私有的类的对象只在堆里面创建只在堆里面创建,就是说不能直接调用构造函数,只能调用new进行对象的创建把类的构造函数原创 2021-09-01 16:40:57 · 250 阅读 · 0 评论 -
手把手教学堆排序
手把手教学堆排序文章目录手把手教学堆排序堆排序的一般步骤手动模拟建堆的过程c++代码实现堆排序的一般步骤用数组表示二叉树(完全二叉树,也就是插入的顺序必须是从左到右从上到下),同时进行建堆堆顶的元素与堆最后一个元素交换,断开最后一个的链接,维护剩下的n-1个堆再对剩下的n-1个元素进行步骤2重复到堆里面只有一个元素,或者没有元素为止Tip 数组表示二叉树,下标为i的父节点是 (i-1)/2 下标为i的左子节点是 i*2+1 下标为i的右子节点是 i*2+2建堆的时间复杂度是 O(原创 2021-08-30 19:00:35 · 176 阅读 · 0 评论 -
手动实现atoi
手动实现atoi文章目录手动实现atoi关键在于异常,过滤空格,过滤小数点,更新状态#include <string.h>#include <exception>#include <iostream>#include <stdexcept>using namespace std;enum class State { NORMAL, ABNORMAL };State state;int My_atoi(const char* d原创 2021-08-29 17:11:41 · 181 阅读 · 0 评论 -
自己实现智能指针
自己实现智能指针#include <utility>using namespace std;template <class T>class MyUniquePtr { public: // 默认构造函数 explicit MyUniquePtr(T* p = nullptr) noexcept { myptr_ = nullptr; } // 移动构造 explicit MyUniquePtr(MyUniquePtr&& p) noexc原创 2021-08-29 09:53:02 · 205 阅读 · 0 评论 -
多线程顺序执行实现方式
多线程顺序执行实现方式文章目录多线程顺序执行实现方式方式一 互斥锁方式二 信号量方式一 互斥锁#include <time.h>#include <unistd.h>#include <iostream>#include <mutex>#include <thread>using namespace std;int flag = 1;mutex mtx;void PrintA() { for (;;) {原创 2021-08-23 16:09:42 · 195 阅读 · 0 评论 -
同步异步IO阻塞非阻塞IO有缓存无缓存IO
同步异步IO阻塞非阻塞IO有缓存无缓存IO同步异步IO所谓同步异步其实就是相对于用户来说的当内核缓冲区有数据的时候,用户就需要取读取,这时候就是用户就是一个一个取读取。而异步就是当内核度缓冲区有数据的时候,这时候我们提前会内核注册一个信号(也可以叫做通知函数),当有数据的时候,内核去读,用户可以先去干别的事情,这时候当读满的时候,再通过信号去通知用户去一次性把数据读取出来。这也是实现reactor和proreactor的原理.就跟搬鸡蛋的很像,先把东西搬到篮子里(内核区缓存)再一次性搬到目的地(用原创 2021-08-10 09:05:25 · 238 阅读 · 0 评论 -
面试知识点二
c++面试知识点-------------(二)文章目录c++面试知识点-------------(二)static说一下C和C++的区别this指针运算符结合(左结合,右结合)举例析构函数fork()函数NULL 与 nullptr的区别static对应的是`auto`放在动态存储区,就是在函数执行区间存在,执行结束自动销毁静态全局变量:静态存储区,未初始化会初始化为0,在整个程序运行期间都存在,只能在当前文件可见(准确的说是定义开始到文件结尾)静态局部变量:静态存储区,未初始化会初始化为0,原创 2021-07-29 14:01:12 · 126 阅读 · 0 评论 -
手撕线程池
手撕线程池文章目录手撕线程池代码std::functionstd::forwardlock_guard与unique_lock的区别lock_guardunique_lock代码#include <assert.h>#include <condition_variable>#include <functional>#include <memory>#include <mutex>#include <queue>#in原创 2021-07-28 14:12:25 · 294 阅读 · 0 评论 -
c++之malloc底层实现
malloc底层实现文章目录malloc底层实现首先讲一下malloc这个函数相关函数malloc分配规则内存池首先讲一下malloc这个函数void* malloc(size_t size);malloc是c里面的函数,调用时候需要显示的指定分配空间的大小,分配成功会返回void *的指针,需要自己进行强制转换,不安全,失败返回NULL相关函数int brk(const void *addr)函数是为了扩展heap的上界brk的。0成功 -1失败void* sbrk(intpr原创 2021-07-26 17:24:57 · 1781 阅读 · 4 评论 -
extern C的前世今生
extern C的前世今生文章目录extern C的前世今生**extern "C"的前世今生**==为什么不把include放进extern C中==extern "C"的主要作用就是为了==能够正确实现C++代码调用其他C语言代码。==加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类原创 2021-07-22 14:41:44 · 113 阅读 · 0 评论 -
手撕排序算法(下)
排序算法(下)文章目录排序算法(下)快速排序快速排序是原地排序吗快速排序是稳定的排序算法吗快速排序算法的时间复杂度度算法实现归并排序归并排序是原地排序吗归并排序是稳定的排序算法吗归并排序算法的时间复杂度度算法实现快速排序快排的思想是这样的:如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点)。我们遍历 p 到 r 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间。经过这一步骤之后,数原创 2021-07-09 10:54:28 · 107 阅读 · 0 评论 -
C++面经计算机网络-------------详解TCP与UDP
详解TCP与UDPTCP与UDP区别TCP(Transmission Control Protocol)传输控制协议是面向连接的,提供可靠的,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),只提供点到点一对一之间的通信UDP(User Datagram Protocol)用户数据报协议是无连接的,尽最大可能交付,没有拥塞控制,面向报文的(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多原创 2021-07-08 16:47:19 · 628 阅读 · 0 评论 -
C++面经之----------内存对齐
内存对齐文章目录内存对齐为什么需要内存对齐结构体对齐规则结构体大小计算大小三部曲第一步:找出每个成员变量的大小将其与编译器的默认对齐数相比较,取其较小值为该成员变量的对齐数第二步:根据每个成员对应的对齐数画出它们在内存中的相对位置第三步:通过最大对齐数决定最终该结构体的大小变量类型占用内存大小为什么需要内存对齐尽管内存是以字节为单位,但是大部分处理器并不是按字节块来存取内存的.它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存,我们将上述这些存取单位称为内存存取粒度.现在考虑4原创 2021-07-05 14:07:38 · 951 阅读 · 4 评论 -
手撕排序算法(上)
排序算法(上)文章目录排序算法(上)算法指标冒泡排序冒泡排序是原地排序吗冒泡排序是稳定的排序算法吗冒泡排序算法的时间复杂度度算法实现插入排序插入排序是原地排序算法吗插入排序是稳定的排序算法吗插入排序算法的时间复杂度度算法实现选择排序选择排序是原地排序算法吗选择排序是稳定的排序算法吗选择排序算法的时间复杂度度算法实现总结算法指标时间复杂度空间复杂度(是否是原地排序)算法的稳定性仅仅用执行效率和内存消耗来衡量排序算法的好坏是不够的。针对排序算法,我们还有一个重要的度量指标,稳定性。这个概念是说,原创 2021-07-05 10:32:10 · 112 阅读 · 0 评论 -
c++面试知识点-------------(一)
c++面试知识点-------------(一)文章目录c++面试知识点-------------(一)vector的resize和reserve的区别?vector的[]索引和at的区别?构造函数可以为虚函数吗?手写链表结构虚函数的机制了解const的作用吗数组名是指针常量不可以改变右移运算正数高位补零,负数高位补1vector的resize和reserve的区别?在vector中size()和capacity()属性分别对应着resize(size_type)和reserve(size_t原创 2021-03-26 20:02:33 · 123 阅读 · 2 评论