当时使用的是钉钉作视频面试,面试官没露面,面试时长大概80分钟,估计大概率凉了。
- 自我介绍
- 项目介绍(详细,用过什么技术、难点)
- 自我评价
当时,要求项目详细解析,但我讲了快10分钟后,面试官没有对我将的项目进行询问,这让我感觉有点奇怪(估计不是面试官的领域范围)
C++
-
如何理解C++指针
我答了指针的大致概念,但她仍不满意,现在我查了一轮也不大理解他想的答案是什么,估计需要答到智能指针,然后引出问题。 -
指针非法引用情况及解决方法
(1)数组越界之类(边界检查)
(2)指向对象生命周期结束后未将指针指向空指针(注意在回收对象后,将指针置空,一般在析构函数中操作)
(3)动态分配类成员空间未实现复制构造函数,即使用默认复制构造函数实现的为浅层复制,其中一个对象生命周期结束,使指针成为非法指针。(应自行实现重载复制构造函数)
e.g:
class Message { private: char* pmessage; public: void ShowIt() const { cout <<endl <<pmessage; } Message(const char* text = "Defaut message") { pmessage = new char[strlen(test) + 1]; strcpy_s(pmessage,strlen(text) + 1,text); } ~CMessage() { delete[] pmessage; } }; int main() { Message motto1("Fallout4."); Message motto2(motto1);//当motto1或motto2其中一个生命周期结束另一个会产生非法指针,应实现复制构造函数使两者指向对象不同 }
- 引用是否存在与指针相同的非法使用情况? 为什么?
我觉得是不存在的,当时理由没答出来,应该只需要答指针与引用的区别即可。
(1)当引用被创建时,它必须被初始化。而指针则可以在任何时候被初始化。
(2)一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引用。而指针则可以在任何时候指向另一个对象。
(3)不可能有NULL引用。必须确保引用是和一块合法的存储单元关联。
进一步理解:
①指针是一个实体,而引用仅是个别名;
②引用必须被初始化,指针不必;
③引用只能在定义时被初始化一次,之后不可变;指针可以改变所指的对象;
④可以有const指针,但是没有const引用;
⑤不存在指向空值的引用,但是存在指向空值的指针,即引用不能为空,指针可以为空;
⑥“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
⑦指针和引用的自增(++)运算意义不一样;
⑧程序为指针变量分配内存区域,而引用不需要分配内存区域;
⑨指针可以有多级,但是引用只能是一级,例如int **p是合法的,而 int &&a是不合法的;
⑩指针和引用作为函数参数进行传递时也不同。用指针传递参数,可以实现对实参进行改变的目的;在将引用作为函数参数进行传递时,实质上传递的是实参本身,而不是实参的一个拷贝,因此对形参的修改其实是对实参的修改。
-
C++左值与右值
我也是第一次听这种问法。
简单来说,左值是指一个在内存中占有确定位置的对象(即有地址);而右值值一个暂时存在的值存在于单个表达式之内的对象(即该语句结束后,他的生命周期也就结束了)
稍微引申一下左值引用和右值引用:总的来说,左值引用为我们常见的引用,即变量的别名。而右值引用是为了实现移动语义,即简单的切换右值的内部缓冲区为自己的,分配它所以右值析构器将会释放我们对象自己不再使用的缓冲区。具体可参考:https://blog.csdn.net/xuwqiang1994/article/details/79924310 -
多态
多态是在不同继承关系的类对象,去调同一函数,产生了不同的行为。构成多态的两个必要条件:①调用函数的对象必须是指针或者引用 ②被调用的函数必须是虚函数,且完成了虚函数的重写。 -
虚函数
虚函数的作用主要是实现了多态的机制(当时主要是问虚函数的作用,后来想起应该详细答下虚函数的机制)具体参考:https://blog.csdn.net/lyztyycode/article/details/81326699 -
是否有在实际开发中运用过虚函数,用过的框架
从没在实际开发中用过c++,凉了
网络
-
TCP三次握手?为什么是三次,不能是两次?
经典问题 -
常见的HTTP HEADER
这个问题相当迷,我当时以为我听错了,然后重新再问了一遍。我觉得答案是REQUEST HEADER和RESPONSE HEADER。但面试官说还有。我觉得应该他是想问问头部里面的TAG还是什么。
TAG可参考:https://www.cnblogs.com/lyraLee/p/12014810.html -
TCP重发机制
我答了快速重传机制,面试官不满意。
1)滑动窗口机制,确立收发的边界,能让发送方知道已经发送了多少(已确认)、尚未确认的字节数、尚待发送的字节数;让接收方知道(已经确认收到的字节数)
- 超时重传,tcp每发送一个报文段,就设置一次计时器,重传时间到但还没收到确认,就重传这一报文段,这个时间是加权平均的往返时间
3)选择重传,用于对传输出错的序列进行重传,如果中间有顺序的包丢了,接收窗口发送确认号的时候,会发丢之前的ack号,选择重发的包序号,选择确认
数据结构
-
树的遍历方式
-
手撕一道算法题(限定25分钟)
实现字符串转整型,不难,注意负数的特殊情况即可。还有,传过来的是字符指针,非string类,处理时不能用到string的相关函数。
本文来互联网采集,已注明来源,如未注明来源可能来源未知,如有侵权请联系站长删除处理。