首页
学习
活动
专区
圈层
工具
发布

腾讯C++后台开发面试笔试知识点参考笔记

这样已连接 UDP 套接字只能与一个对端交换数据报; 由已连接 UDP 套接字引发的异步错误会返回给它们所在的进程,而未连接 UDP 套接字不会接收任何异步错误; tcp套接字 服务端: listenfd...我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload) 部分预留是1500-20-8=1472字节。...派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。...设计派生类时,只要可能,最好避免与基类数据成员的名字相同 类成员函数的重载、覆盖和隐藏区别?...: 向堆上申请一块内存空间(做够容纳对象A大小的数据)(operator new) 调用构造函数 (调用A的构造函数(如果A有的话))(placement new) 返回正确的指针 当然,如果我们创建的是简单类型的变量

1.2K10

字节客户端也疯狂拷打基础!

性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。...当基类的指针或引用指向派生类对象时,调用的虚函数将是派生类的版本,这就实现了运行时多态。 什么是纯虚函数?...抽象类不能被实例化,只能作为接口使用。派生类必须实现所有的纯虚函数,否则该派生类也会变成抽象类。...这可能会导致派生类对象的一些资源没有被正确释放,从而引发内存泄漏等问题。...如果我们将析构函数设置为虚函数,那么在删除基类指针时,会首先调用派生类的析构函数,然后再调用基类的析构函数,从而确保所有的资源都能被正确释放。 什么是内联函数?

53330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“

    在没有 override 关键字时,满足条件重写的条件同样可以构成虚函数的重写,只是若派生类函数使用 override声明,但未正确重写基类虚函数(如函数名、参数列表或常量性不匹配),编译器会报错,有助于在编译阶段发现错误...是不是会导致资源没有正确释放,派生类中的data指向的100个 int 内存未被释放,会导致内存泄漏。 如果基类中还有其他动态资源,比如文件句柄、数据库连接等资源,这些资源也会泄漏。...协变(Covariant Return Types) C++虚函数的协变允许派生类在重写基类虚函数时,将返回类型替换为基类函数返回类型的派生类指针或引用。...简单来说就是: 派生类重写基类虚函数时,可以与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变。...返回类型 基类虚函数返回 Fruit* 派生类重写时返回 Apple*(Apple 是 Fruit 的派生类) 符合协变要求:返回类型是基类返回类型的 派生类指针/引用 多态行为 通过基类指针 Fruit

    36600

    【C++】多态(定义、虚函数、重写、隐藏)

    注意:在重写基类虚函数时,派生类的虚函数在不加virtual关键字时,虽然也可以构成重写(因 为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使用 虚函数重写的两个例外...: 协变(基类与派生类虚函数返回值类型不同) 派生类重写基类虚函数时,与基类虚函数返回值类型不同。...当析构函数不是虚函数时,不能正确的进行析构。...可以发现,b对象是8字节,除了_b成员,还多一个_vfptr放在对象的前面(注意有些平台可能会放到对象的最后面,这个跟平台有关),对象中的这个指针我们叫做虚函数表指针(v代表virtual,f代表function...结论:多继承派生类的未重写的虚函数放在第一个继承基类部分的虚函数表中。 问答题 inline函数可以是虚函数吗?

    39710

    C++面试知识总结

    1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小,还有递归函数层次过多超过了栈大小。...动态内存泄露检测:检查new/delete的资源是否正确释放,检查程序运行期间内存是否一直在增长,使用内存检测工具来检测泄露情况。...区别:const定义的数据有数据类型,而宏常量没有数据类型。编译器可以对const常量进行类型检查。而对宏定义只进行字符替换,没有类型安全检查,所以字符替换时可能出错。...正确的做法:p = (char *)((int *)p + 1);。 3. 面向对象知识 3.1 面向对象三个基本特点 封装:将客观事物抽象成类,每个类对自身的数据和方法。...私有继承时,基类的成员只能被直接派生类的成员访问,无法再往下继承。 受保护继承时,基类的成员也只被直接派生类的成员访问,无法再往下继承。

    2.1K41

    硬钢百度面试!

    共享、线程之间数据传递效率高)由于同一进程的各线程间共享内存和文件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更高了; 所以,不管是时间效率,还是空间效率线程比进程都要高...心得:线程使用有一定难度,需要处理数据一致性问题,比如要使用互斥锁和条件变量等同步机制保证线程安全(原子性操作) 四、C++ 空类的大小?...如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全,造成内存泄漏。...所以在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生,要将基类的析构函数声明为虚函数。 为什么构造函数不写为虚函数?...如果在一个文件中想引用另一个文件中已定义的全局变量,比如现在两个文件都要使用到同一个全局变量int a,正确的做法应该是:在一个文件中定义变量a,而在另一个文件中使用extern int a;对该变量进行声明

    43620

    关于BUS通信系统的一些思考(三)

    同时完成了同时支持使用自定义的简单环形队列缓冲区(省去复杂内存块管理的CPU消耗,内存换CPU)和使用动态缓冲区(mallo/free)。...大纲如下: 协议规划 数据转发协议请求 如果目标自身直接接收,返回成功否则路由信息+1,进入后续流程 ttl+1,判定跳数过多则返回失败 如果目标节点子节点子域 不存在连接完成返回错误 直接转发子节点...如果发送方是子节点,允许子节点直连,选取最优通道通知建立子节点直连通道 如果目标是兄弟节点或兄弟节点子域 如果直连通道连接建立完成,直接转发 否则发给父节点 其他情况发给父节点或出错 数据转发协议响应...API:连接目标 连接内存和共享内存通道必须指定正确的目标,因为这些通道是共享的,不存在握手阶段 初始发起的连接为命令通道,连上后发起注册协议。...connection 选取发送通道(数据转发协议的流程) Connection address 状态: 未连接 正在连接(内存通道或者共享内存通道没有这个状态) 正在握手(检测双方node

    64720

    PSR-7 HTTP 消息接口规范

    作为读取者,可以调用只读的方法来返回数据流,以最大程度上保证数据流的不可修改性。使用者要时刻明确的知道数据流的可修改性,建议把数据流附加到消息实例中,来强迫不可修改的特性。...这个形式通常在向 HTTP 代理发出请求时使用。 认证形式 ,只包含认证信息。通常仅用于从 HTTP 客户端和代理服务器之间建立连接请求时使用。...在这些情况下,数据需要以不同的方式获取。比如: 进程可以解析消息体来发现上传的文件。这种情况下,实现方式可以选择不将上传文件写入文件系统,而是将它们包装在流中以减少内存、I/O 和存储开销。...108 */ 109 public function getUploadedFiles(); 110 111 /** 112 * 返回使用指定的上传文件数据的新实例。...39 * @param string $reasonPhrase 为状态码提供的原因短语;如果未提供,实现代码可以使用 HTTP 规范建议的默认代码。

    1.5K70

    面经:C++面试精品问答题总结(一)

    其 操作方式类似于数据结构中的栈。 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。...为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。...(3)使用抽象类时注意: 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。...有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。定义纯虚函数就是为了让基类不可实例化化因为实例化这样的抽象数据结构本身并没有意义。...不完全如此:数组名被解释为其第一个元素的地址,而对数组名应用地址运算符(即&)时,得到的是整个数组的地址: int test[5] = {1,2,3,4,5}; // 声明一个长度为20字节的数组(int

    76851

    UVM手把手教程系列(一)UVM基础

    和monitor分别发送来的数据,根据比较结果判断DUT是否正确工作; monitor:从DUT接收数据,并将其转成transaction级别的sequence_item,发送给scoreboard,供其比较...sequencer的功能就是组织管理sequence,当driver要求数据时, 它就把sequence生成的sequence_item转发给driver。...scoreboard的功能就是比较reference model和monitor分别发送 来的数据,根据比较结果判断DUT是否正确工作。...agent的使用主要是从可重用性的角 度来考虑的。如果在做验证平台时不考虑可重用性,那么agent其实是可有可无的。...component所拥有的child的数量 extern function int get_num_children(); 除了一次性得到所有的child外,还可以使用get_first_child和

    3K10

    解锁C++多态的魔力:灵活与高效的编码艺术(上)

    2.1.1 为什么需要基类指针或引用 在C++中,如果直接使用派生类对象,即使它重写了基类的虚函数,编译器仍然会使用静态绑定,即在编译时确定调用的函数版本。...推荐使用override关键字在派生类中重写虚函数,便于编译器检查是否正确地进行了重写。...2.3 重写虚函数(Override virtual function) 2.3.1 虚函数重写的三大条件 虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型...这在涉及多态和动态内存管理时尤为重要,可以有效避免内存泄漏和资源未正确释放的问题。 2.4.1 为什么需要虚析构函数?...抽象类中的纯虚函数必须在派生类中实现,否则派生类也会变成抽象类。 抽象类可以有数据成员和普通成员函数,但如果有纯虚函数,则它仍然是抽象类。

    60510

    C和C++安全编码复习

    因为不是virtual,所以在对Base类型的指针obj进行delete时,不会调用到派生类Derived的析构函数,这样就造成内存泄漏。...在使用像memcpy、strcpy、strncpy、sscanf()、sprintf()、snprintf()和wcstombs()这样的函数时,复制重叠对象会存在未定义的行为,这种行为可能破坏数据的完整性...但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。...,实行反向拷贝 内存管理 1.禁止引用未初始化的内存 说明:有些函数如malloc分配出来的内存是没有初始化的,可以使用memset进行清零,或者使用calloc进行内存分配,calloc分配的内存是清零的.../* ...do something... */ head->next = NULL; //【错误】解引用了已经释放的内存 return head; } 错误示例2:函数中返回的局部变量数据有可能会被覆盖掉

    2.5K10

    Python 标准类库-并发执行之multiprocessing-基于进程的并行

    实践环境 Python3.6 介绍 multiprocessing是一个支持使用类似于线程模块的API派生进程的包。该包同时提供本地和远程并发,通过使用子进程而不是线程,有效地避开了全局解释器锁。...请注意,如果两个进程(或线程)试图同时读取或写入管道的同一端,则管道中的数据可能会被破坏。当然,同时使用不同管道末端的进程不会有破坏数据的风险。...当使用多个进程时尤其如此。...maxtasksperchild 是工作进程在退出并替换为新的工作进程之前可以完成的任务数,以便释放未使用的资源。...(只有当只有一个工作进程时,才能保证顺序“正确”) starmap(func, iterable[, chunksize]) 类似于map(),只是iterable的元素被当做参数,不拆解。

    1.1K20

    C++抽象类完全指南

    {public: virtual void makeSound() = 0; // 纯虚函数 virtual ~AbstractAnimal() {} // 虚析构函数必须声明,确保派生类析构正确调用...现实类比:USB标准(抽象类)定义了接口规范具体U盘/鼠标(派生类)实现了具体功能3. 基础使用三步曲定义抽象类 → 派生类实现 → 通过基类指针调用// 1....:如果基类析构函数非虚函数,删除基类指针时只会调用基类析构函数,导致派生类资源泄漏。...大型项目中的抽象类设计谷歌/LLVM开源代码案例:LLVM中的Value类层次结构谷歌测试框架中的Test抽象类抽象类版本控制策略:新增虚函数时提供默认实现(保持兼容性)重大更新使用新抽象类(如InterfaceV2...忘记重写所有纯虚函数派生类必须实现所有纯虚函数,否则仍为抽象类,无法实例化。5. 跨库使用抽象类版本不兼容动态库更新时修改抽象类接口会导致客户端程序崩溃。

    16610

    C++多态---面向对象的心动信号:多态之美

    (即派生类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称派生类的虚函数重写了基类的虚函数。...注意:在重写基类虚函数时,派生类的虚函数在不加virtual关键字时,虽然也可以构成重写(因为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使用,不过在考试选择题中...即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变。协变的实际意义并不大,所以我们了解一下即可。...多态情况下确保派生类对象被正确析构 当基类析构函数是虚函数时,通过基类指针删除派生类对象会调用派生类的析构函数,从而正确地释放派生类资源。...vs下是存在代码段(常量区) 虚函数表是同类型数据共享的 同类型的数据共享一张虚函数表 函数编译好是一段指令 那么虚函数编译好也是一段指令,都是存在代码段里面的

    15510

    ChaCha20 vs AES:当加密算法遇上TLS1.3的安全铁拳

    HKDF 从密码派生安全密钥     HKDF (HMAC-based Key Derivation Function) 是一种安全的密钥派生方法     它可以将弱密码(如用户输入的密码)转换为强密码学密钥...生成随机 nonce (12字节)     2. 使用密钥初始化 AES-GCM     3. 用 nonce 和关联数据加密数据     4....(进行认证但不加密)     返回:         解密后的原始数据(用于验证算法正确性)     """     # 生成随机 nonce (96位,这是AES-GCM的标准推荐长度)     nonce...(进行认证但不加密)     返回:         解密后的原始数据(用于验证算法正确性)     """     # 生成随机 nonce (96位,这是ChaCha20-Poly1305的标准长度...从密码派生安全的加密密钥(32字节 = 256位)     key = derive_key(password)     print(f"使用的密钥: {key.hex()}")     # 3.

    74821

    嵌入式面试高频考点整理(建议收藏)

    malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常。...堆:程序中未使用的内存,在程序运行时可用于动态分配内存。由程序员自己维护申请和回收,若使用完毕未回收会导致内存泄漏。...总结如下: ① 系统资源不足; ② 进程运行推进的顺序不当; ③ 资源分配不当; 死锁产生的必要条件 ① 互斥条件: 进程在运行中对资源进行排他性使用,即一个资源仅能被一个进程使用,此时其他进程请求资源时...② 请求与保持条件: 某进程已经保持了一个资源,但又请求另一个资源,若该资源被其他进程占有,此时请求阻塞,且对已经占有的资源不释放; ③ 不可抢占条件: 进程获得的资源在未使用完时不可被抢占,只能在进程使用完时自己释放...⑥ 切换时 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

    95920

    C++进阶:详解多态(多态、虚函数、抽象类以及虚函数原理详解)

    在进行函数重写时,子类中的虚函数的返回值类型、函数名、参数列表必须与基类中的虚函数完全相同 注意:在重写基类虚函数时,派生类的虚函数在不加virtual关键字时,虽然也可以构成重写(因为继承后基类的虚函数被继承后在派生类依旧保持虚函数属性...2.2.3虚函数重写的两个例外 协变(基类与派生类虚函数返回值类型不同) 派生类重写基类虚函数时,与基类虚函数返回值类型不同。...即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变 class A { public: virtual A* f() { return new...,只会拷贝对象中的数据成员,而不会拷贝派生类的虚表指针。...多态必须使用基类的指针/引用来调用虚函数的原因主要是因为基类指针/引用可以在运行时指向派生类对象,而且能正确地调用派生类的虚函数。

    78910

    C++继承中的虚函数机制:从单继承到多继承的深度解析

    这一过程的关键在于索引位置固定:派生类不会改变继承的虚函数在vtable中的索引,确保基类指针能正确定位到派生类重写的函数。...多继承中的虚函数机制多继承(一个派生类继承多个基类)显著增加了虚函数机制的复杂性。当多个基类均包含虚函数时,派生类需同时维护多个vtable和vptr,且需解决this指针调整等问题。...,此时调用虚函数不会触发多态(C++标准规定); 使用final关键字限制过度继承:对无需进一步派生的类或虚函数添加final,编译器可优化vtable结构,提升调用性能。...多继承场景的谨慎使用多继承应仅限于接口组合(继承多个纯虚函数接口),避免继承带数据成员的基类。...& message) = 0; // 纯虚函数 virtual ~ILogger() = default; // 虚析构函数,确保派生类正确析构};// 序列化接口:仅定义纯虚函数class

    36610
    领券