c++服务端面试个人小结

    今天闲下来,总结一下这段时间实习面试碰到的一些问题。在合肥面试了2家公司,思科和zoom,他们的合肥业务都是做在线视频会议的,业务也有交叉。

    首先思科是由于大批招实习生,当天安排了有20个学生来面试。各个部门联合交叉招聘,基本面试官都是各个团队的技术总监或者team leader,你碰到的面试官不一定是你报的岗位方向,我碰到了有移动端,前端,后端和一个全栈大牛,基本上我问了下都是工作有十几年的,经验很丰富。大概是6-7个面试室同事进行,每个房间里面有1-3个面试官不等。外企的话气氛也比较不错,挺喜欢他们的室内装潢设计的,色调很暖,中间还安排一次公司的参观。我当时是进行了三轮面试,流程基本都是先进行一个简短的自我介绍,然后面试官跟着简历上写的内容进行提问,大部分问题都是关于项目的内容,碰到的技术挑战和如何克服的问题,然后问了一些c++的基础知识不算太深,还有一些数据结构和linux的内容。

    最后是zoom,这个公司也还是成长中吧,有不少员工都是思科过去的。这一次是2轮面试,第一轮技术面,第二轮hr面。当时技术面试官是2位,也都是c++服务端开发的。流程也是自我介绍,项目介绍。这两位专业对口,问的内容相当的细致,c++中的各种细节、内存管理,linux系统的指令操作。有些内容我也看到了但是没记住很可惜...HR面的话就比较轻松了,跟你聊一聊个人情况,职业规划等等。聊天中感觉这个hr也是思科过来的...看来这里面必有py啊。

 下面总结一下两次面试中碰到的问题:

 1.项目

    这个的话因人而异了,讲清楚自己的项目内容,负责的工作,使用的技术以及碰到问题如何解决的就行。自己做过的东西应该也没什么太大问题。

 2.c++基础

 

  • i++和++i的区别
    • i++是先用后加,直接执行i+1然后返回i的引用
    • ++i是先加后用,先创建i的副本然后i+1,最后返回副本
  • new和malloc的区别
    • new分配内存按照数据类型进行分配,malloc分配内存按照大小分配;

    • new不仅分配一段内存,而且会调用构造函数,但是malloc则不会。

    • new返回的是指定对象的指针,而malloc返回的是void*,因此malloc的返回值一般都需要进行类型转化;

    • new是一个操作符可以重载,malloc是一个库函数;

    • new分配的内存要用delete销毁,malloc要用free来销毁;delete销毁的时候会调用对象的析构函数,而free则不会;

    • malloc分配的内存不够的时候,可以用realloc扩容。new没用这样操作;

    • new如果分配失败了会抛出bad_malloc的异常,而malloc失败了会返回NULL。因此对于new,正确的姿势是采用try…catch语法,而malloc则应该判断指针的返回值。

    • new和new[]的区别,new[]一次分配所有内存,多次调用构造函数,分别搭配使用delete和delete[],同理,delete[]多次调用析构函数,销毁数组中的每个对象。而malloc则只能sizeof(int) * n。

  • c++的多态性是如何实现的?虚函数表是什么?
    • “一个接口,多种方法”。C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。多态分为静态多态和动态多态。静态多态是通过重载和模板技术实现,在编译的时候确定。动态多态通过虚函数和继承关系来实现,执行动态绑定,在运行的时候确定。
    • 虚函数表,编译器为每一个类维护一个虚函数表,每个对象的首地址保存着该虚函数表的指针,同一个类的不同对象实际上指向同一张虚函数表。

  • c++继承中,父类和子类的构造函数和析构函数的调用顺序
    • 建立对象时,会先调用父类的构造函数再调用子类的构造函数。
    • 销毁对象时,会先调用子类的析构函数再调用父类的析构函数。
  • c++内存分为哪几块,分别存储什么变量
    • 堆:那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

    • 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

    • 自由存储区:由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

    • 全局/静态存储区:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

    • 常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

  • 解释一下智能指针是什么?功能?
    • 将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),并在析构函数里编写delete语句删除指针指向的内存空间。

    • 为了更容易且更安全的管理动态内存,C++推出了智能指针(smart pointer)类型来管理动态对象。智能指针存储指向动态对象的指针,用于动态对象生存周期的控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。智能指针的主要作用就是用栈智能指针离开作用域自动销毁时调用析构函数来释放资源。

  • c++的STL中,有哪几种容器?
    • 1.序列容器(7个)

      vector:提供了自动内存管理功能(采用了STL普遍的内存管理器allocator),可以动态改变对象长度,提供随机访问。在尾部添加和删除元素的时间是常数的,但在头部或中间就是线性时间。

      deque:双端队列(double-ended queue),支持随机访问,与vector类似,主要区别在于,从deque对象的开始位置插入和删除元素的时间也是常数的,所以若多数操作发生在序列的起始和结尾处,则应考虑使用deque数据结构。为实现在deque两端执行插入和删除操作的时间为常数时间这一目的,deque对象的设计比vector更为复杂,因此,尽管二者都提供对元素的随机访问和在序列中部执行线性时间的插入和删除操作,但vector容器执行这些操作时速度更快些。

      list:双向链表(是循环的)。目的是实现快速插入和删除。

      forward_list(C++11):实现了单链表,不可反转。相比于list,forward_list更简单,更紧凑,但功能也更少。

      queue:是一个适配器类。queue模板让底层类(默认是deque)展示典型的队列接口。queue模板的限制比deque更多,它不仅不允许随机访问队列元素,甚至不允许遍历队列。与队列相同,只能将元素添加到队尾、从队首删除元素、查看队首和队尾的值、检查元素数目和测试队列是否为空。

      priority_queue:是另一个适配器类,支持的操作与queue相同。两者之间的主要区别在于,在priority_queue中,最大的元素被移到对首。内部区别在于,默认的底层类是vector。可以修改用于确定哪个元素放到队首的比较方式,方法是提供一个可选的构造函数参数:

      priority_queue pq1;                     // default version

      priority_queue pg2(greater);       // use greater to order

      greater<>函数是一个预定义的函数对象。

      stack:与queue相似,stack也是一个适配器类,它给底层类(默认情况下为vector)提供了典型的栈接口。

    • 2.关联容器

      4种有序关联容器:set、multiset、map和multimap,底层基于树结构.

3.数据结构和算法

  • 栈和队列的区别
  • 平衡二叉树如何构造
  • 链表中删除一个结点操作
  • 个人对于数据结构的认识,可以结合实际谈谈

面试小结(二)——数据结构与算法基础

4.数据库

  • 索引是什么,作用以及采用的数据结构
  • 数据库优化的方法

面试小结(三)——数据库

5.计算机网络

  • TCP/IP模型结构分层
  • IP协议工作在哪一层
  • HTTPS协议
  • 三次握手和四次挥手的具体过程描述
  • 在三次握手过程中,如果服务器一直收不到客户端的ack会发生什么
  • TCP和UDP的区别

面试小结(四)——计算机网络

6.操作系统基础

  • 进程和线程的区别
  • 统一进程中的线程之间共享哪些变量
  • 有了进程为什么还需要线程
  • 进程间通信方式的种类
  • 同步和互斥
  • 死锁是如何产生的,解决方式

面试小结(五)——操作系统基础

7.Linux指令

  • 使用过哪些Linux指令
  • 使用Linux指令对文本进行词频统计
  • 自身使用Linux的体会

面试小结(六)——Linux

8.分布式系统和linux集群

 

  • 谈谈你个人对分布式系统的理解
  • 有分布式系统的开发经验吗
  • 负载均衡技术
  • 存储中的数据容灾和实施方案

 

ps:今天先列出一个大致问题,以后再来填坑~~

你可能感兴趣的:(个人记录分享)