如题,楼主前两天投的字节,星期一面试,今天已经收到凉凉邮件了
简述以下面试过程,畔友们锐评一下
先说个人背景。楼主电子科技大学计科本科,妮可软件工程专硕。面试之前楼主再力扣刷过一些题,八股方面C++看的是C++ PRIMERPLUS 和 C++PRIMER,计网OS看的是王道+CSAPP。楼
主投的是C++客户端开发,简历上项目写的是cmu15445。面试时长一个半小时
上来面试官先让我自我介绍,我就介绍了一下我的基本情况,包括学历背景,本科奖项,奖学金,项目等等。然后面试正式开始。
第一个问题:简述O0P及其三大特性。这个很简单,楼主答了。然后问:多态是怎么实现的?楼主打:虚函数,函数重载等方式。继续问:虚函数是怎么实现的?楼主答了虚函数表的实
现方式。然后继续问:类外给定指向对象的指针,让我实际的访问虚函数表,问我怎么操作。这个我没答出来。
第二个问题:既然你找不到虚函数表,那你来说说c++的内存分为哪几部分。楼主:从低地址到高地址:代码,数据(包括静态,全局),对,未使用区域,栈。继续问;那你觉得虚
函数表位于哪个位置?我:数据区。问:为什么?我又排除法解释了一遍
第三个问题:平时用什么开发环境?我:开发项目用linux系统下的cmake作为项目构建工具,通过编写cmakelist.txt来形式化生成makefile,用makefiie完成编译和链接的工作以生成可执行
文件。继续问:cmakelist的基本语法?楼主简单说了一些。又向:除了基本语法,你还了解哪些细节?比如说编译器的01,02,03,分别代表优化到什么程度?又,你是否了解一些编译
器标志位的设置?这里没答出来。
第四个问题:平时怎么调试?楼主:GDB。问:平时怎么使用GDB?或者说,如果你的程序崩溃了,你如何使用GDB排除故障?楼主:找到日志查看崩遗 位置和原因,然后在崩遗处查看
函数调用栈,在崩溃处上下文处打断点,以及通过函数调用栈逐级而上打断点以寻找崩清发生的县体原因。又问:你了解GDB的底层是如何实现的吗?这里没答出来。
第五个问题:三次握手四次挥手的具体过程和其中的状态,以及三次握手为什么不能变成两次,四次挥手可否变为三次?这是常见八股,楼主背了一遍
然后是算法时间。第一个题长整数(字符串)相乘。写之前问楼主思路,楼主就说长的当被乘数,短的当乘数。先写一个长整数相加的辅助函数,再写一个一位数乘长整数的辅助函
数。然后在主函数里面用乘数的每一位诸位乘以被乘数并逐次在未尾补,最后叠加在一起。面试官让我写。我写了一阵,把加法写完写一位数乘长整数的辅助函数的时候,面试官说时
间关系下一个题。第二个是链表倒数第k个节点,楼主拿下。
第六个问题:进程通信的方式。楼主说了一堆,包括共享内存,信号量,管程,管道文件等等。然后间我mux环境下C++如何使用共享内存完成进程间通信,以及是否了解ptrance,我没
答出来。然后间C++父进程如何创建子进程,我说for。他问返回几次,我说两次。他又问了C++如何使用线程并发以及线程和线程池的实现,我答了一堆。又问我C如何用线程,我说C
标准库里面没有对线程的支持,可以使用pthread等熟知库。
第七个问题是maloc和new的区别和底层实现。我答了一大堆,他说可以。接下来向c++ alocator的底层实现,我答了一大堆。又向实际分配内存的函数,比如t-alloc,m-alloc各自是如何
实现的,我没答出来。
第八个问题问了一些C++容器的底层实现,楼主答出来了。
提问到此为止。面试官问我有没有什么想问的,楼主问如果可以有幸成为贵公司的实习生,楼主还需要学些什么内容。他说具备"基本的写代码的能力"即可。至此,楼主浪费了人生中宝
贵的一个半小时。今天楼主收到了拒信。