avatar-decorate
BambooWine level
获赞
200
粉丝
132
关注
4
看过 TA
1325
东北大学
2021
C++
IP属地:辽宁
心累⊙﹏⊙
私信
关注
头像
2023-10-02 20:18
已编辑
东北大学 C++
C++面试题 (面试官们别再问什么是虚函数)有一些C++岗位的面试官,在面试的时候总是问一下莫名其妙、烂大街,甚至不合逻辑的问题,万年不变的“指针和引用的区别”、“构造析构函数能否是虚函数”、“虚函数的原理”,听得都烦,根本看不出对C++的熟悉和理解程度。这里我整理了一些非传统的问题,摒弃那种细枝末节的语法,专注在使用和理解方向,可以适当参考。(下面的问题并不严格按照小标题划分,更多的是连环问,彼此之间有关系)======================C++面试题 (Ⅱ章节)C++面试题 (Ⅲ章节)======================计算机基础逻辑与或非的优先级?逻辑运算的短路特性?...
顺便我来试着强行回答一下最后一节(评论留言只给 1000 字很讨厌) 说一下 C++ 提供的智能指针?各自有什么用途 - 本问题太宽泛了,暂略 shared_ptr 的基本数据结构可以讲讲么? - 分两层,sp 直接成员是 ① 对象指针 ② 控制块指针。控制块主要包含 ① 被管理的对象 (或指针),② deleter、③ allocator、④ shared 引用计数、⑤ weak 引用计数。 make_shared 和构造函数传裸指针的区别? - 两点。首先标准建议 make_shared 同时申请控制块与对象的内存 (直观可减少一次内存申请);其次是异常安全,C++17 之前形如 f(sp(new A), g()) 的执行顺序可能是 new A、g()、sp(),一旦 g() 中发生异常,那么 new A 将无法被回收,使用 make_shared 可以避免。 shared_ptr 是否是线程安全的?或者说哪些部分是线程安全的? - 前问提到的“控制块”是线程安全的。 那引用计数的线程安全性怎么实现的(可能一般人说原子类型)? - 看情况,比如 libstdc++ 的文档提到他们的 sp 有三种模式:不保证并发安全、cas、mutex。 如果有一个场景需要用到线程安全的 shared_ptr,一般你会怎么做? - 本问题太开放了,需要根据上下文作答,暂略。 说到线程安全性,在语言层面,你一般使用什么手段? - 主要借助各种同步原语,或者一开始从设计上消除 data race。 如何在代码角度来避免死锁呢?是否用过相关的API?原理了解吗? - 可以参考 C++ Concurrency in Action 这本书,里面有些建议。比如保证平时加锁的顺序是“嵌套”的,又比如使用 std::lock 等自带死锁避免算法的加锁方式。原理我也不了解。 C++ 提供的 shared_mutex 是否了解?主要用于什么场景? - 读写锁,用于多个读者需要并发读取数据的情况。
查看46道真题和解析 C++面试题分享 牛客解忧铺
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务