当时使用的是钉钉作视频面试,面试官没露面,面试时长大概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)滑动窗口机制,确立收发的边界,能让发送方知道已经发送了多少(已确认)、尚未确认的字节数、尚待发送的字节数;让接收方知道(已经确认收到的字节数)

  1. 超时重传,tcp每发送一个报文段,就设置一次计时器,重传时间到但还没收到确认,就重传这一报文段,这个时间是加权平均的往返时间
    3)选择重传,用于对传输出错的序列进行重传,如果中间有顺序的包丢了,接收窗口发送确认号的时候,会发丢之前的ack号,选择重发的包序号,选择确认

数据结构

  • 树的遍历方式

  • 手撕一道算法题(限定25分钟)
    实现字符串转整型,不难,注意负数的特殊情况即可。还有,传过来的是字符指针,非string类,处理时不能用到string的相关函数。

本文来互联网采集,已注明来源,如未注明来源可能来源未知,如有侵权请联系站长删除处理。

发表回复

后才能评论