佳期投资 C++开发 一面

1. 在 C++ 中,智能指针有哪些类型,重点说一下 unique_ptr 和 shared_ptr 的区别

答案:常见智能指针主要有 unique_ptrshared_ptrweak_ptr,以及比较早期的 auto_ptr,不过 auto_ptr 已经被废弃了。unique_ptr 表示独占所有权,同一时刻只能有一个智能指针拥有对象,不能拷贝,只能移动,所以它的开销最小,也最符合“资源独占”的语义。shared_ptr 表示共享所有权,多个智能指针可以共同管理同一个对象,底层通常依赖控制块维护引用计数。最后一个 shared_ptr 析构时,对象才会真正释放。两者最大的区别在于所有权模型和成本。unique_ptr 更轻量,适合对象生命周期明确、不会共享的场景;shared_ptr 更灵活,但有额外控制块、引用计数维护成本,而且容易出现循环引用。weak_ptr 本身不拥有对象,主要是配合 shared_ptr 解决循环引用和观察对象是否还存活的问题。

代码:

#include <iostream>
#include <memory>
using namespace std;

int main() {
    unique_ptr<int> p1 = make_unique<int>(10);
    // unique_ptr<int> p2 = p1; // 错误,不能拷贝
    unique_ptr<int> p2 = move(p1);

    shared_ptr<int> s1 = make_shared<int>(20);
    shared_ptr<int> s2 = s1;

    cout << *p2 << endl;
    cout << *s1 << " " << s1.use_count() << endl;
    return 0;
}

2. 对于 C++17 和 C++20 的新特性,你了解哪些

C++17 我比较常用的有结构化绑定、if constexpr、折叠表达式、std::optionalstd::variantstd::string_view、并行算法,还有返回值优化规则加强。像 string_view 很适合只读字符串视图传递,可以减少不必要拷贝;optional 很适合表达“可能有值也可能没有值”的语义,比返回特殊值更清晰。C++20 比较典型的是 concepts、ranges、coroutine、std::span、三路比较、模块、jthread 和更完整的原子等待通知机制。如果从工程角度看,C++20 最大的几个提升点,一个是 concepts 让模板约束更清晰,一个是 coroutine 对异步编程表达能力更强,一个是 ranges 能把算法和容器操作写得更自然。

代码:

#include <iostream>
#include <optional>
#include <tuple>
using namespace std;

optional<int> findValue(bool ok) {
    if (ok) return 42;
    return nullopt;
}

int main() {
    auto [a, b] = pair<int, int>{1, 2}; // C++17 结构化绑定
    cout << a << " " << b << endl;

    auto res = findValue(true);
    if (res) cout << *res << endl;
    return 0;
}

3. C++ 中类的内存布局通常是怎样的,如果包含虚函数会发生什么变化

一个普通类对象的内存通常由成员变量按声明顺序排布,中间可能因为对齐要求插入 padding。如果类里有普通成员函数,这些函数代码本身不在对象内存里,对象里只存数据成员。如果类包含虚函数,主流编译器实现里对象内部通常会多出一个隐藏的虚表指针,也就是 vptr,它指向该类型对应的虚函数表。这样对象大小通常会变大,至少要多出一个指针大小。如果存在继承,尤其是多继承、虚继承,内存布局会更复杂,编译器可能还会插入额外指针、偏移信息来支持运行时多态和基类定位。所以类对象内存布局不能只看源码里写了哪些成员,还要考虑对齐、虚函数、继承模型这些因素。

代码:

#include <iostream>
using namespace std;

class A {
    int x;
    char y;
};

class B {
public:
    virtual void foo() {}
    int x;
    char y;
};

int main() {
    cout << sizeof(A) << endl;
    cout << sizeof(B) << endl;
    return 0;
}

4. 除了类内存布局,你了解对象模型里 this 指针、静态成员和虚函数表分别放在哪吗

this 指针不是对象里的一个显式成员,它本质上是成员函数调用时编译器隐式传入的一个参数,用来指向当前对象。静态成员变量不属于某个具体对象,它通常存放在静态存储区,所有对象共享同一份。普通成员函数和虚函数的代码段本身都在程序代码区,不在对象实例内部。虚函数表通常也是编译器生成的一张静态表,放在只读数据区或者类似区域,对象内部只保存一个 vptr 指向它。所以对象实例真正占内存的,通常是非静态数据成员以及编译器为对象模型附加的隐藏指针,而不是函数代码和静态成员。

5. C++ 中可以控制内存对齐吗,特别是在网络传输场景里怎么保证结构紧凑

可以。C++ 里可以通过 alig

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论
请问有机考的相关内容吗
点赞 回复 分享
发布于 04-22 17:16 北京

相关推荐

昨天 20:15
门头沟学院 Java
timeline&nbsp;见上条帖子,流程推进的十分神速,感谢东哥---一面&nbsp;(30min)1.&nbsp;自我介绍2.&nbsp;本科成绩如何,是否有奖学金3.&nbsp;项目里挑一两个认为有挑战的点讲一讲4.&nbsp;设计模式了解哪些5.&nbsp;口述观察者模式,代码怎么写6.&nbsp;给定一组学生,要求按照学历,成绩一次排序,代码怎么写Collections.sort()&nbsp;重写排序方法下面单纯闲聊环节抗压能力如何,对互联网强度认知如何,什么时间到岗,实习多久,购物贷和现金贷的区别其实一面答的并不好,但是面试刚结束面试官就打电话问晚上有没有空二面,这时候感觉运气要来了---二面&nbsp;(30min)前面一些java的常规八股,类加载机制,双亲委派,还有几个八股都很常规后面是一个agent相关的八股,不太记得了,主要问了rag多路检索,提示词优化,提示词投毒后面依旧闲聊,未来规划,对互联网强度的看法反问:部门的ai&nbsp;coding率&nbsp;:30%(金融业务比较严谨)什么时候出结果:很快果然很快,面完五分钟邮件约三面了,感叹东子效率这么高吗,难道说---三面(30min)找暑期实习以来第一次hr面,感觉不太常规没有问题性格,规划,到岗时间,企业价值观之类可能因为自我介绍的时候说了目前在一家初创公司实习,所以面试官很感兴趣,一直问我这短暂的实习里做了什么,让我以非技术性的语言向面试官解释,中间还讨论了人工智能伦理(初创公司实习主要做skill相关),最后反问结果说最快本周,但是隔了一个五一假期,等待的挺心急的,实际上三面到oc用了1.5个工作日---5.6中午电话oc感觉像做梦一样,可能真狗运到了吧,面试问的很简单,和东哥做兄弟啦---PS:为什么会在初创公司实习因为三月底的时候感觉暑期实习无望,联系了家校友企业,边干边找实习,准备把战线拉到六月份,在初创公司也跟着老板学到了不少思路上的东西,虽然实习经历没写到简历上但是每次自我介绍的时候都会提一嘴,这样面试官感兴趣的话也可以聊一聊,感谢校友收留
点赞 评论 收藏
分享
27暑期&nbsp;前端&nbsp;bg双非硕3月中起投,4月中结束,为期一个月base只接受北京,所以能投的岗很有限,比如腾讯阿里大部分都不能选正文如下——————————⭕主流大厂:●阿里系:投个几个BU,全挂,有的是打电话简历评估后挂。认清自我了。。●腾讯:投递后当日wxg约面,面试时聊的很好,结果发现base不符,去不了,挂。次日pcg约面,一周推一次进程,本周OC。●字节:中国交易广告部门。面了一周多,三面时面试官说表现很好问到岗时间,没成想过两天横向挂了。后来转推国际广告部门约面,累,拒了。●京东:零售部门JDY。在腾讯字节终面时突然约面,三轮后顺利OC。●快手:第一次约面发现业务不好,拒了。过了很久可灵AI约面了,但别家已OC没机会面了,拒。●百度:想暑期找不着了再走内部转岗,没投。●小红书:简历挂。今年真的有HC吗?牛客也没见着几个面前端暑期的。●美团:笔试拖太久了,做完就邀面,太晚面不完了,拒了。●滴滴:应聘进度页面做的跟tm💩一样,每次都要两套验证码。没投。●小米:最幽默的一集,投着玩的结果简历挂。⭕其它公司:◉基本都OC,包括一些不知名小厂、初创和搜狐等中厂(谁记得曾是国内Top2呢)。当然有些面试确实也挺水…◉值得一提的是有个九坤的岗位,但面试时说是其全资子公司,在一块工作,但薪资并不是九坤的1k一天,慎重考虑觉得自己有自知之明,如果是九坤我怎能进得去…遂拒。⭕总结:前前后后忙了两个月,从投递到结束一个月,以接受鹅鹅offer为结束,整个过程下来倒也不累,也学到了很多东西,比如今年真的要allin&nbsp;agent、ai&nbsp;coding的能力、以及学历确实还是挺重要的…起码能让你有一个面阿里的机会😰&nbsp;&nbsp;自己也的确能力学历都一般,只能多去尝试了,废物不一定失败,怯懦才会。ps.offer审批时发疯做的鹅鹅接offer弱智小游戏。。(技术栈:Claude)
我的求职进度条
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务