2020字节春招--C++后端工程架构部二面

作者:Kensley

看了好多天面经,回馈一下。 一二面大起大落,目前已经没有什么找工作的热情了,想静下心沉淀一下技术。

一面:

基本全A,自我评价的话我能打90分,一面后3分钟HR约一天后二面。

  • 自我介绍

  • 项目介绍

  • 系统:

  • 项目中的进程/线程

  • IPC

  • Socket通信

  • 网络:

  • TCP/UDP

  • 拥塞避免

  • HTTPS

  • 数据结构:

  • 树:详细说二叉树、红黑树、B/B+树

  • 语言:

  • 虚函数、纯虚函数

  • 算法:单调栈结构

二面

  • 1.上来啥都没说,自我介绍项目介绍也没让我讲,礼貌问了一下怎么称呼,没吃我这套。

  • 2.字节对齐。写了7个sizeof 讲输出

  • 2.多态。手写实现一个体现多态的程序。再手写一下派生类的析构函数的实现和效果。

  • 3.C++11特性知道哪些?(这是我最后悔回答的一个问题,我还特意强调了了解,结果开始了不归路)

答:了解一点智能指针,lambda表达式,右值引用,auto和decltype关键字这些

  • 4.刚想开始展开我了解的皮毛,给他讲讲4种智能指针,他打断了我,问

vector和shared_ptr里面的装的是对象?指针?引用?

答--对象 (开始懵逼

  • 5.vector里面删除特定元素,有重复,让我实现。

答—写完。我说了下中间插入删除会造成vector的迭代器失效,内存重新分配,但是erase方法不会。

--哦?那你实现一下迭代器会失效的写法。

  • 6.stl里面有算法,有容器自己封装的函数,同样职能的比如remove和vector::erase有什么不同?

答--(我说实话都没用过remove,sort倒是用的多…..)具体用法,底层实现等,因为对一个链表和一个vector进行remove肯定是不一样的,对于vector…

--被打断,再想想

  • 7.手写一个用Lambda表达式的程序。

答:写了个比较器接口。

  • 8.有什么是函数指针做不到,Lambda可以的?逮着问lambda捕获引用的作用域?底层怎么保证作用域持续的?

答--我几乎连问题都听不懂,尽我所能讲了我知道的Lambda相关

--皱眉

  • 9.右值引用是个啥,有什么用?我不太懂这个,不如你实现一下给我看看

答-写了右值引用实现移动构造函数,和移动赋值号的重载。说了在大量new场景下不用生成多余临时对象进行拷贝的开销优势

  • 10.这样移动赋值的好处还有什么?如果类内成员元素是int这种,还有没有必要写?

  • 11.进程间通信。着重问了共享内存

  • 12.多进程,多线程。

  • 13.如果你自己做一个处理高并发的系统,不论是单还是多线程,你提高并发效率的思路是?(想详述select poll epoll被打断--那个简单,说说自己的想法)

  • 14.父子进程其中一个new一份内存,另一个在同样的地址空间能不能看到?线程呢?

  • 15.Volatile

  • 16.new的是物理内存还是虚拟内存?那虚拟内存什么时候分配?

  • 17.我现在想跟内核态交互,怎么做?

  • 18.算法题: 行列递增的mn矩阵,找target.