首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
W12138
门头沟学院 C++
发布于陕西
关注
已关注
取消关注
@cppjyh:
联想C++实习面试凉经
这个面试好像比较着急,也没有自我介绍,面试官直接就问问题了。一共面了40min左右介绍一下epoll是什么?epoll和select有什么区别?效率不同: 在处理大量文件描述符的情况下,epoll 比 select 更快更高效。这是因为 epoll 使用了红黑树(或者哈希表),能够快速检索就绪的文件描述符,而 select 只是简单地轮询所有的文件描述符。API 使用方式不同: epoll 使用更加简洁明了的 API,只需要调用 epoll_create() 创建 epoll 实例,然后使用 epoll_ctl() 向其注册事件和监听的文件描述符,最后使用 epoll_wait() 等待就绪的文件描述符即可。而 select 需要使用 fd_set 结构体进行操作,需要编写较为复杂的代码。支持的最大文件描述符数不同: select 在不同平台上支持的最大文件描述符数不同,一般情况下为 1024 左右,而 epoll 可以支持非常大的文件描述符数量,受系统资源限制。综上所述,epoll 是更为高效和灵活的 I/O 多路复用机制,在高并发场景下更受欢迎。select和epoll都是能在linux上用吗?是的说一下状态机是什么,有什么优点,以及它在HTTP请求的解析里面有什么用?这个没准备清楚,没答上来状态机被广泛应用于描述程序或协议的行为,以及对输入的响应。状态机的主要优点是:易于理解和描述:状态机描述了系统的状态和转移行为,可以用图形化的方式表示,便于理解和描述系统的行为。易于实现和调试:状态机可以直接转化为代码实现,通过调试器可以很方便地调试和测试。易于扩展和维护:当系统需要增加新的状态或转移时,可以直接在状态机中添加新的状态或转移,而不会影响原有的代码和逻辑在 HTTP 请求的解析中,状态机被广泛地使用。HTTP 请求的解析过程是一个典型的输入有序、处理有序的过程,其中每个步骤都是在特定的输入状态下进行的。从状态机即parse_line函数,负责读取http报文的第一行,检查读到的一行是否合法,若合法,则从状态机状态返回LINE_OK,主状态机即parse_request_line函数解析请求行,完成后的状态为CHECK_STATE_REQUESTLINE表示要检查然后从状态机继续从报文中读取一行,若状态变为LINE_OK,触发主状态机进行解析请求头(parse_headers函数),如果是get请求,就执行请求函数,如果是post解析后状态变为CHECK_STATE_CONTENT表示要检查http的消息体,这就又需要从状态机读取数据,当状态变为LINE_OK时,则可以执行post请求了知道那个网络通讯中粘包的情况吗?要如何解决呢?我:一个数据分成多个包连续发包的时候,无法确定包结束。方法有加结尾标识符和TCP包上加packet lenC++中虚函数是什么,它的机制是什么?没准备清楚C++中虚函数是一种特殊的成员函数,它允许在基类和派生类使用同名的函数,实现了多态的特性。虚函数是C++中实现多态(运行时多态)的一种方式。当基类中的成员函数被声明为虚函数时即函数声明前加上virtual,派生类可以重写该函数,使用基类指针(引用)指向派生类对象,在运行时,调用该函数时会根据对象的实际类型调用相应的函数。这样就实现了运行时的多态性。虚函数的机制是通过虚函数表 vftable 和虚函数指针 vfptr 来实现的。每个对象都有一个指向其虚函数表的指针(即虚函数指针),虚函数表是一个数组,包含了该类中所有的虚函数及其地址,最开头是RTTI指针,标识当前对象的实际类型。vfptr 存放在类的内存空间的最前面。派生类中的虚函数表会继承基类中的虚函数表,如果派生类中重写了基类中的虚函数,就会在派生类的虚函数表中更新该虚函数的地址。当调用虚函数时,通过对象的虚函数指针找到对应的虚函数表,再根据虚函数在虚函数表中的位置找到实际需要调用的函数即vfptr->vftable->func()一个类里虚函数个数,不影响类大小(都只是存一个vfptr),影响的只是虚函数表大小一个类只有一张虚函数表虚函数表是存在哪里的?进程虚拟地址空间的.rodata 只读数据段二义性怎么解决?这个问题没听懂,应该要问一下面试官的https://blog.csdn.net/afei__/article/details/82141731https://blog.csdn.net/wangjian530/article/details/80469625在C++中,二义性(Ambiguity)指的是在继承关系中出现了歧义,即在调用成员函数时无法确定应该使用哪一个版本的函数。例如,假设有一个基类A和两个派生类B和C,B和C都重载了一个函数foo,如果在另一个类D中以B和C的对象作为参数来调用foo函数,编译器将无法确定应该使用哪一个版本的foo函数,这就是二义性。class A{public: void f();} class B{public: void f(); void g();} class C:public A,public B{public: void g(); void h();}// 另一种二义性,菱形继承class A{public: int a; // B1,B2 都将继承一个变量 a};class B1 : public A{};class B2 : public A{};class C : public B1, public B2{}; int main(){ C c; c.a = 10; // ERROR ! 二义性 !!! return 0;}如果声明:C c1,则c1.f();具有二义性,而c1.g();无二义性(同名覆盖)为了解决二义性问题,C++提供了以下几种解决方案:使用作用域限定符:使用作用域限定符可以明确指定需要调用的函数版本。例如,可以使用类名限定符来调用基类中的函数,或者使用派生类名限定符来调用派生类中的函数。int main(){ C c; c.A::f(); c.B::f(); return 0;}使用虚函数:在基类中定义虚函数,让派生类重写虚函数,通过动态绑定来调用正确的函数版本。使用virtual继承:如果派生类从多个基类继承,而这些基类中有共同的基类,那么可以使用virtual继承来避免共同基类的重复继承。使用强制类型转换:使用强制类型转换可以将对象转换为需要的类型,以调用指定的函数版本。但是这种方式不是推荐的做法,因为可能会造成代码可读性下降和运行时错误。C++中拷贝构造函数和拷贝赋值函数什么时候用到?拷贝构造使用场景拷贝构造函数用于创建一个新对象,该对象是已有对象的副本。通常,拷贝构造函数采用另一个同类型的对象作为参数,并从该对象中复制数据。拷贝构造函数可以在以下情况下使用:初始化一个对象,将其作为参数传递给函数或返回一个对象时;通过另一个对象进行初始化或赋值。拷贝赋值函数使用场景拷贝赋值函数用于将一个对象的值赋给另一个对象。拷贝赋值函数采用另一个同类型的对象作为参数,并从该对象中复制数据。左边的对象已经初始化过!知道深浅拷贝吗?什么时候要深拷贝什么时候要浅拷贝?浅拷贝:只复制指针,不复制指针所指向的内容。深拷贝:复制指针所指向的内容,即重新分配一块新的内存,将原指针所指向的数据拷贝到新的内存空间中。当类中的成员变量指向动态分配的内存时,进行对象拷贝操作时需要使用深拷贝,以确保新的对象与原始对象完全独立,对一个对象的修改不会影响另一个对象,并且防止二次析构的问题。当类中的成员变量不指向动态分配的内存时,进行对象拷贝操作时可以使用浅拷贝。这是因为在这种情况下,复制指针并不会对程序产生任何负面影响。RTTI是什么?RTTI是C++中的一种运行时类型识别机制,它允许程序在运行时查询一个对象的实际类型信息。RTTI主要用于多态场景中,例如,当一个基类指针指向一个派生类对象时,通过RTTI可以判断出该指针所指向的对象的实际类型。可以通过使用两个关键字typeid和dynamic_cast来实现RTTI:typeid关键字:用于查询一个对象的类型信息dynamic_cast运算符:用于将一个基类指针或引用转换为派生类指针或引用,如果转换失败则返回nullptr虚函数表中起始部分存放RTTI指针标识动态类型,从而能实现多态;RTTI是一种运行时机制,需要在程序运行时才能进行类型信息的查询和转换。由于这种机制会增加程序的运行时开销。使用虚函数实现多态,而不是手动进行类型转换是一种避免额外RTTI开销的方法。内存泄漏这种问题有了解过吗?怎么去防范?内存泄漏是指在程序运行时,分配的内存空间没有被及时释放(malloc-free, new -delete),导致程序占用的内存越来越多,最终导致程序崩溃或性能下降等问题。下面是一些防范内存泄漏的方法:分配内存时,要确保在不需要使用该内存时及时释放。例如,对于动态分配的内存空间,使用delete或delete[]进行释放。注意对象生命周期的管理。在对象不再使用时,应该及时销毁。如果对象被其他对象引用,应该在没有任何引用时再进行销毁。比如在delete之前抛出异常或者return了对于资源对象,应该使用RAII(Resource Acquisition Is Initialization)技术进行管理。RAII是一种通过在对象的构造函数中获得资源,在析构函数中释放资源的技术,可以避免手动管理资源带来的错误。尽量避免使用裸指针进行内存管理,使用标准库中的智能指针或其他封装良好的类库进行内存管理。在编写代码时,可以使用内存泄漏检测工具(如Valgrind、ASAN等)对代码进行检测,及时发现内存泄漏问题。rpc工作原理是什么,介绍一下?不知道,还没深入学RPC(Remote Procedure Call,远程过程调用)是一种分布式计算模型,它允许程序在不同的计算机之间通过网络进行通信和交互,实现像本地调用一样的程序调用和数据传输。RPC通常用于构建分布式系统和微服务架构。RPC的工作原理可以简单地分为以下几个步骤:客户端调用远程服务:客户端程序调用本地接口,接口封装了需要执行的操作和参数,然后将请求通过网络发送到远程服务端。服务端接收请求:远程服务端接收请求,解析请求的内容,根据请求的操作调用相应的方法,执行操作。服务端返回结果:服务端将执行结果返回给客户端,客户端接收到结果后继续执行。客户端接收结果:客户端接收到服务端返回的结果,进行处理并返回给调用者。在这个过程中,RPC通常需要解决以下问题:远程服务的定位:客户端需要知道远程服务的位置和地址,才能将请求发送到正确的服务端。解决这个问题可以使用命名服务(如DNS)、注册中心等技术。数据传输和序列化:客户端和服务端之间需要进行数据传输和序列化。RPC框架通常使用网络协议(如HTTP、TCP等)进行数据传输,同时需要将数据序列化成二进制流或其他格式(Protobuf, json)。异常处理和容错机制:由于网络和远程服务的不确定性,RPC框架需要提供异常处理和容错机制,例如超时重试、故障转移等技术,保证RPC调用的可靠性和稳定性。回溯算法是什么?什么情况下使用回溯算法(Backtracking)是一种暴力搜索算法,用于在所有可能的情况下寻找解决方案。它通过尝试所有可能的解决方案,并在找到满足条件的解决方案后,回溯到之前的状态,继续搜索,直到找到所有可能的解决方案或确定无解。因此,回溯算法通常用于求解组合、排列、集合划分、子集、排列组合和图等问题。一道手写算法题,求数组中目标和返回下标,要求时间复杂度为O(n)就是用回溯解决一个英语问题:can you tell me about your education and work experiences?到这里已经紧张到爆炸了,节奏全乱了。
点赞 58
评论 6
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 16:00
上海交通大学 算法工程师
拼多多 / Temu 招商运营 一面
岗位名称:招商运营面试时长:45min–1h自评分:7.5/10是否下一轮:是自我介绍与动机背景三分钟自我介绍研究生专业和互联网不相关,为什么想进入互联网行业?是什么契机让你对跨境电商或平台招商运营产生兴趣?(追问)你是从什么时候开始系统了解跨境电商的?具体做过哪些调研?(追问)如果最终没有进入平台招商方向,你还会考虑哪些岗位?实习经历与个人能力实习中最有成就感的一件事是什么?你主要负责哪些具体工作?(追问)这件工作最终结果如何衡量?有没有量化指标?(追问)如果重新再做一次,你会优化哪个环节?遇到高强度任务时你是如何推进和完成的?(追问)有没有出现过延期或目标未达成的情况?当时怎么处理?行业认...
运营必备题库
点赞
评论
收藏
分享
02-16 11:26
海康威视_产品经理(准入职员工)
步步高内推,步步高内推码
步步高实验学校 2026届校招启动啦【学校简介】东莞市步步高实验学校于 2023 年投入运营,占地 230 亩,是一所集幼儿园、小学、初中、高中于一体的十五年一贯制非营利性高端民办学校,学校全面实行小班化教学,学校师生比为 1:5;步步高教育专家团队由来自一流大学的国家课标专家、教育学家,来自著名学校的卓越校长,来自一线、有着丰富教学经验的著名特级教师,以及来自国家级教育媒体的教育策划专家共同组成,为步步高的课程、教学、管理奠定了坚实基础。【招聘岗位】• 幼儿园、小学部及初中部各学科类教师 & 国际教师,类别多多,等你pick! 【福利待遇】• 薪资:幼儿园老师年收入16万起 、中小学...
点赞
评论
收藏
分享
2025-12-25 16:26
已编辑
河北科技学院 Java
不行兄弟们真得把他放网上了java开发
我真笑了兄弟们,可拽死这家公司了
勇敢的牛油不服输:
2800-300那不等于2500一个月吗兄弟们
点赞
评论
收藏
分享
02-06 13:06
第一拖拉机制造厂拖拉机学院 C++
hot100练熟
不说别的东西hot100一定要熟练 一定要理解 不是死记硬背那种 很多公司都是考这些的 只有这些稳了才有冲击大厂的资格
程序员找工作至少要刷多少...
点赞
评论
收藏
分享
02-20 18:18
浙江大学 算法工程师
快手C++ 一面 面经
1. 介绍一下你做过的项目,重点说说技术难点 (15min)答案要点:选择1-2个最有技术含量的项目深入讲解强调:性能瓶颈分析、内存优化、多线程并发、崩溃率降低用数据说话:启动速度提升40%、内存占用降低30%、崩溃率从2%降到0.5%准备追问:为什么这么设计?有没有考虑其他方案?如何权衡的?2. 智能指针有哪几种?shared_ptr的实现原理智能指针类型:unique_ptr:独占所有权,不可拷贝只能移动shared_ptr:共享所有权,引用计数管理weak_ptr:弱引用,解决循环引用问题auto_ptr:已废弃(C++11)shared_ptr实现原理: template<typ...
C++八股文全集
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
嵌入式应届生春招怎么准备——从零到拿 Offer 的系统攻略
774
2
...
28届Go日常实习简历求牛爷爷锐评
489
3
...
关于租房
375
4
...
HTTP 和 HTTPS 区别
368
5
...
27届实习近一年的年度经历和总结
355
6
...
agent实习都干什么?prompt设计
262
7
...
得力嵌入式工程师 二面 面经
206
8
...
美团推荐算法一面
203
9
...
27前端双非找实习
182
10
...
大三无实习
178
创作者周榜
更多
正在热议
更多
#
牛客新年AI问运
#
13658次浏览
166人参与
#
牛友们,签完三方你在忙什么?
#
137342次浏览
993人参与
#
牛客AI体验站
#
17829次浏览
302人参与
#
担心入职之后被发现很菜怎么办
#
282442次浏览
1185人参与
#
如何缓解入职前的焦虑
#
258810次浏览
1451人参与
#
牛客租房专区
#
151280次浏览
1477人参与
#
秋招开始捡漏了吗
#
229438次浏览
1044人参与
#
秋招投递攻略
#
268759次浏览
2553人参与
#
九月了,是考研还是就业?
#
89145次浏览
556人参与
#
校招第一份工作你干了多久?
#
139334次浏览
609人参与
#
搜狐工作体验
#
4109次浏览
29人参与
#
机械人求职现状
#
33616次浏览
297人参与
#
我是XXX,请攻击我最薄弱的地方
#
61745次浏览
409人参与
#
用友工作体验
#
18075次浏览
151人参与
#
你的实习什么时候入职
#
348049次浏览
2291人参与
#
今年秋招还有金九银十吗
#
75077次浏览
506人参与
#
机械人的offer怎么选
#
252631次浏览
1189人参与
#
校招谈薪技巧
#
129601次浏览
1357人参与
#
AI了,我在打一种很新的工
#
140471次浏览
1384人参与
#
这份实习,有没有动摇过你的职业方向?
#
1999次浏览
28人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务