C++面经

我把上述题目当成试卷,写一下答案哈

1. C++中的构造函数和析构函数有什么区别?

答:「构造函数」用于对象构造时的初始化工作,「析构函数」用来做对象销毁时的工作。

2. 解释一下C++中的拷贝构造函数和移动构造函数。

答:「拷贝构造函数」是用于创建对象的一个副本,拷贝构造函数得函数名和类名相同,参数类型与当前类相同,并通过引用得方式传递。

「移动构造函数」是将资源所有权进行转移,这样的话可以减少开销,省去了创建副本,和释放另一个对象的开销。

3. C++中的模板是什么?它的优缺点是什么?

答:「优点」:代码复用,避免编写重复代码;类型安全:在编译时会进行安全检测。

「缺点」:错误信息复杂,不便于调试。

4. C++中的静态成员与非静态成员有什么区别?

答:1) 非静态成员可以调用成员变量和成员函数,非静态成员则不可以,它没有this指针。

2) 非静态成员函数可以使用virtual函数修饰,静态成员则不可以。

3) 调用时静态成员函数时,必须实例化对象才可以对象,而静态成员通过类名即可直接调用。

5. 解释一下C++中的命名空间(namespace)。

答:我了解到的是它用于避免命名冲突,尤其是在大项目中,命名空间尤为重要。

6. C++中如何实现一个简单的链表?

答:通过结构,定义一个值和一个后继指针即可。

7. C++中的虚函数表(vtable)是什么?

答:它用于存储虚函数的地址,当发生动态绑定时,虚指针vptr就会去查询虚表vtable。

8. C++中的异常处理机制是如何工作的?

答:通过try - catch

9. C++中如何使用std::thread创建和管理线程?

答:thread t1(函数地址,参数);通过join回收线程。

10. 解释一下C++中的多态性及其实现方式。

答:多态通俗讲就是允许基类指针指向派生类指针,通过基类指针,在运行时调用具体指向的对象;总之是通过继承的方式,并需要

virtual关键字修饰,派生类重写。

11. C++中的const修饰符有什么作用?

答:const修饰的变量只读。

12. C++中如何使用std::map和std::unordered_map?

答:map的底层实现是红黑树, 有序不重复,适用于数据有序的场景。

unordered_map的底层是哈希表,适用于查询频繁的场景。

13. 解释一下C++中的函数重载和运算符重载。

答:「函数重载」,函数名相同,参数列表不同,包括参数个数、参数顺序等不同。

「运算符重载」只能重载已有的运算符。

14. C++中如何实现一个简单的计数器类?

答:需要有一个成员变量存储计数,有两个成员函数分别是加1和减一。

15. C++中的内存泄漏是什么,如何防止?

答:内存泄漏,一般指的是堆内存泄漏;当指针对象使用完毕后,要及时释放,或则用一个变量计数,当申请一块内存时 + 1,释放时 - 1,

最后打印这个变量是否为0,查看内存是否泄漏;最根本的解决方式,我认为最好使用智能指针。

16. 解释一下C++中的智能指针的使用场景。

答:auto_ptr好像已经不用了,我也没过多了解。

unique_ptr : 独占式指针,同一时刻只能有一个指针指向同一个对象。

shared_ptr这个是共享式指针,同一个时刻可以有多个指针指向同一个对象

weak_ptr : 用来解决shared_ptr相互引用导致的死锁问题。

17. C++中如何使用std::deque?

答:deque是双端队列,两端都可以插入,也都可以出队。

18. C++中的范围for循环是什么,如何使用?

答 : vector<int> nums;

for (int num : nums) {

cout << num << endl;

}

19. C++中如何实现一个简单的状态模式?

答:不太懂

20. 解释一下C++中的动态内存分配和释放。

答:内存分配就是分配一块空闲的内存来存储数据。当释放时,将这块内存的使用权拿走。

21. C++中如何使用std::unordered_set?

答:std::unordered_set底层是哈希表,通过迭代器获取和修改数据。

22. C++中的函数模板和类模板有什么区别?

答:函数模板是与「类型无关」的函数

类模板是与「类型无关」的类

23. 解释一下C++中的类型限制(SFINAE)。

答:不太懂

24. C++中如何实现一个简单的二叉树?

答:设计一个结构体,包括值,以及左右孩子。

25. C++中的std::function有什么用?

答:它是一个可调用对象包装器,可以将不同的函数包装成统一的调用方式。可调用对象包括普通函数,仿函数、静态成员函数,成员函数(需要

与bind搭配使用才可以)四类。

26. C++中如何使用std::condition_variable进行线程同步?

答:不太懂

27. 解释一下C++中的类型安全(type safety)。

答:类型安全很大程度上等价于内存安全,指是否使用未授权的内存区域。

28. C++中如何实现一个简单的优先队列?

答:通过堆数据结构实现。

29. C++中的std::string与C风格字符串有什么区别?

答:string其实是对C风格字符串的封装,使用起来更加方便,它是可变长字符串。

30. 解释一下C++中的尾返回类型(trailing return type)。

答:不太懂

31. C++中如何使用std::tuple?

答:例如vector<tuple<int, int, int>> nums;

获取数据 nums[0].get(1);

32. C++中的可变参数模板(variadic templates)是什么?

答:不太懂

33. 解释一下C++中的委托构造函数(delegating constructors)。

答:复用已经存在的构造函数代码

34. C++中如何实现一个简单的图遍历算法?

答:bfs和dfs

35. C++中的std::shared_ptr与std::weak_ptr有什么关系?

答:std::weak_ptr用于解决std::shared_ptr的依赖问题。

全部评论
这是哪家公司的面经,感觉问的问题都挺在点上
点赞 回复 分享
发布于 2024-10-23 23:07 四川

相关推荐

05-20 13:03
已编辑
浙江工业大学 C++
5.8&nbsp;用过C++十一之后的语法吗?比如&nbsp;()?了解C++11&nbsp;的Lamda表达式,智能指针以及(没听清)吗你刚刚说你用到Lamda和智能指针比较多一点,那我们先来谈谈Lamda表达式,lamda的组成部分有哪些?lamda表达始中的返回类型需要写吗?为什么?它的实现原理了解过吗?为什么编译器会把他形成一个类?然后实现这个类的时候发生了什么?具体使用它的时候发生了什么?这个类有几部分组成?必须有哪些成员函数?Lamda表达始终的[]叫做什么?它的使用场景都有哪些?接下来我们聊聊智能指针,你用过哪些智能指针,简单解释一下?Unique_ptr的使用场景?Unique_ptr的具体实现?你刚刚谈到它的移动构造,描述一下Uniqu_ptr从使用层面怎么去转移所有权,再分析一下它是怎么实现的?std::move实际上做了什么?讲一下shared_ptr实现是怎么样的?底层如何实现?讲一下你的代码中shared_ptr一般怎么写?如果不适用make_shared怎么去实现shared_ptr?new和make_shared他们两个谁的效率更高一点?make_shared是线程安全的吗?引用计数是怎么实现的?你说会指向引用计数,那么是怎么指向的?底层怎么实现的?你可以大概讲一下比如说是一个结构体,这个结构体里面有哪些东西?然后是如何创建它的?然后怎么去通过多个shared_ptr去持有他?引用计数是线程安全的吗?我答的不安全的,他说如果引用计数都不安全的话,那么shared_ptr又该怎么实现安全呢?然后谈到了多线程是不安全的,单线程安全?问如何保证多线程下的安全?除了加锁之外还有哪些方法?知不知道原子操作?接下来谈一谈容器,你是使用哪些STL容器。讲一下vector容器。扩容机制是怎么样的?底层如何实现?用这个扩容过程,性能会有消耗吗?怎么解决频繁扩容带来的性能消耗问题?vector怎么删除元素?写一个vector原地删除重复元素的代码。写快排。---5.91&nbsp;&nbsp;项目注册登陆是怎么做的&nbsp;&nbsp;&nbsp;登陆注册的时候会携带那些信息2&nbsp;&nbsp;密码传输不安全&nbsp;怎么解决的&nbsp;&nbsp;&nbsp;你的解决方法太简单了&nbsp;&nbsp;会被破解&nbsp;&nbsp;有没有其它方法3&nbsp;登陆注册&nbsp;&nbsp;用的什么协议&nbsp;&nbsp;&nbsp;&nbsp;怎么改成HTTPS&nbsp;&nbsp;改为HTTPS的话&nbsp;客户端需要做哪些工作4&nbsp;HTTPs怎么实现&nbsp;加密&nbsp;&nbsp;&nbsp;加密通道怎么建立de5&nbsp;你的数据&nbsp;需要发送到服务端&nbsp;&nbsp;过程是怎么样的?6&nbsp;就直接到服务器去了?(大概说的是在网络怎么传输)&nbsp;说一下具体细节7&nbsp;不使用ARP、DNS怎么解决?8&nbsp;项目中多线程高并发怎么实现的&nbsp;&nbsp;&nbsp;没有任务的时候&nbsp;&nbsp;你的线程在干嘛9&nbsp;没有互斥锁会怎么样&nbsp;&nbsp;&nbsp;会导致服务崩溃吗10&nbsp;举例子说明11&nbsp;再举一个例子&nbsp;&nbsp;更好的说明12&nbsp;举一个较好的让系统崩掉的例子13&nbsp;系统一定会崩溃吗?&nbsp;为什么会崩溃?背后有什么机制?14&nbsp;开很多线程就一定会卡死吗&nbsp;&nbsp;什么原因导致卡死?15&nbsp;CPU占满就一定不能切换到另外的程序吗16&nbsp;再举一个&nbsp;多线程操作导致程序崩溃的例子&nbsp;&nbsp;&nbsp;怎么就让程序崩溃了呢?(指我的例子)&nbsp;&nbsp;&nbsp;从系统的角度和程序运行的角度来看,是怎么发生的?系统报错,报什么错?为什么没有合适的程序处理&nbsp;&nbsp;就会崩掉&nbsp;?什么机制&nbsp;&nbsp;让程序推出的(上面应该都是想问操作系统会做什么事情)17&nbsp;你遇到崩溃的话&nbsp;&nbsp;怎么排查---5.13自我介绍为什么选择云智,对云智了解吗?具体了解那些?你家哪儿的?愿意来武汉吗?愿意留在武汉吗?你有其他的offer吗?分别是什么?你的职业规划?能实习多久?选择你其中一个项目介绍一下?(背景,你做了哪些?)---5.15OC---5.16offer
点赞 评论 收藏
分享
05-20 21:35
门头沟学院 Java
5.13&nbsp;总时长:1h30min1.&nbsp;自我介绍、项目介绍2.&nbsp;项目拷打:项目背景?自己完成了哪里?技术出彩的点?超卖的业务场景和解决细节?1.&nbsp;所有请求都在SET&nbsp;NX前面等待吗?重试的时间间隔是?有重试不就不公平了吗?锁的超时时间?为什么?一定能完成吗?2.&nbsp;为什么用Redis?不入库吗?丢了咋办?zset的数据结构是?具体实现细节是?3.&nbsp;SET&nbsp;NX和SET&nbsp;EX是两步,中间挂了咋办?Spring的事务是怎么保证实现的?4.&nbsp;下一个项目:怎么分词的?3.&nbsp;时间复杂度和空间复杂度怎么理解?二分查找的复杂度是多少?4.&nbsp;常见的数据结构?(一开始答成数据类型被紧急叫停hhh)链表是什么?应用场景是?数组呢?哈希表的原理和结构?5.&nbsp;树的结构还在哪些场景下使用?(丝滑转场到MySQL)innoDB的B+树是什么结构?xx场景下的xx字段适合建索引吗?6.&nbsp;HTTP和TCP分别工作在计网中的哪几层?Nginx中做TCP代理的话,能转发HTTP的请求吗?常见的HTTP状态码?HTTP返回readtimeout是为什么?(其实是处理太慢而不是连不上,答错了)7.&nbsp;进程、线程、协程分别是什么?区别?8.&nbsp;给代码说运行结果和原因9.&nbsp;Python写过吗?多进程会吗?(不会)C++写过吗?进程间通信的理论知识了解吗?10.&nbsp;a主机上一个进程上的一个线程要读取b主机内存中的一个数据,两个主机之间的层、数据、操作系统之类的交互过程是怎样的?如果是json报文(内存中——的话,内核态怎么从内存中取这部分数据(操作系统)?(说出了技术过程但不记得名字。。)11.&nbsp;Java中的垃圾回收器了解吗?讲一下。什么时候用标记-清理、标记-负值、标记-整理?12.&nbsp;做题:二分查找和一个排序(感觉应该写快排但是写了归并,并且因为想优化写了20+min不知道是不是太慢了)13.&nbsp;归并排序的优缺点是什么?归并和快排在复杂度上是什么区别?最坏情况下快排的复杂度?14.&nbsp;反问1.&nbsp;贵公司对实习生的要求:主要看基础和学习成长能力,项目经验没那么看重2.&nbsp;很想问表现怎样,但是还是问不出口
查看18道真题和解析
点赞 评论 收藏
分享
部门:剪映-深圳timeline:4.25一面4.27二面4.28三面4.29hr面之后就一直泡着排序更:5.13oc,拒了————————面经一面1h:问项目token被窃取了怎么办如果要你设计一个系统可以从哪些方面解决这个问题intersectionObserver怎么实现的无限滚动,和用scroll有什么区别了解虚拟列表吗,用intersectionObserver怎么实现接着问项目,引导怎么拓展和优化一个里面一个功能点http2接着引导那个优化点(鼠鼠拼尽全脑一通瞎猜乱扯把自己说笑了,面试官遂放弃,接着往下进行了,但事后鼠鼠搜了一下发现鼠鼠扯得应该挺对了)nodejs了解koa吗讲讲express中间件有什么好处this指向题手写:封装一个函数,只在第一次点击按钮时执行,之后就不再执行讲讲闭包讲讲发布订阅发布订阅有什么好处手写:发布订阅点了一下直接delete事件会有安全问题二面45min:怎么想着大二就出来实习可实习时间学校的课怎么办为什么选前端学前端多久了两个项目的背景为什么选择写线上商城遇到的难点,怎么解决的自己最大的两个优点和缺点(鼠鼠说觉得自己脑子很聪明,绷不住笑了,面试官也跟着笑)有些急躁有导致过xxxxx吗?(没听清说的导致过什么,猜测可能是说工作延误之类的,当机立断说没有,主要导致自己焦虑)如果早上给你个任务,要求晚上ddl,你会到什么时候才寻求帮助平常有写文章的习惯吗(鼠鼠说自己语文不好,面试官又乐了,鼠鼠意识到在考写文档的能力,遂找补道平常会复盘然后写一些思路之类的)你希望在这段实习里学到什么怎么看ai现在在写代码上发展到什么阶段了最近在用哪个大模型ai在你学习里作用大吗,或者说和不用ai的效率进度差别大吗能接受的上班时间(鼠鼠说不上早八就行,面试官笑了说他们不上早八,鼠鼠接了句我们上早八写点代码题吧,最近有正在写的什么小项目吗?(鼠鼠思考了一下要不要编个,遂决定还是直接说没在写什么,最近都在准备面试。又把面试官逗笑了)手写:合并有序数组写一个登录页面,可以用ai反问:这轮是技术面吗?是如果通过的话后面还有几轮面试?正常来说至少还有一轮hr面业务?to&nbsp;B还是to&nbsp;C?即梦ai的to&nbsp;C面试结果什么时候能出来?今晚三面30min:问项目共享屏幕运行看看
点赞 评论 收藏
分享
评论
5
36
分享

创作者周榜

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