2020字节春招--C++后端工程架构部 二面崩溃
字节跳动一面:
基本全A,自我评价的话我能打90分,一面后3分钟HR约一天后二面。
自我介绍
项目介绍
系统:
项目中的进程/线程
IPC
Socket通信
网络:
TCP/UDP
拥塞避免
HTTPS
数据结构:
树:详细说二叉树、红黑树、B/B+树
语言:
虚函数、纯虚函数
算法:单调栈结构
字节二面:
这篇面经写的时候还很难过很激动,出去逛了一圈回来冷静了。
感觉之所以自以为厚实的知识构筑能被轻松撕裂,还是因为自己思维不够工程化。
自己非科班出身,因为疫情不能出国,年初决定转行自学3个月到现在。其实一直自以为掌握了语言、系统、网络、设计模式、数据库、数据结构等等等等方面,自以为涉猎很广而沾沾自喜。
其实本质上还是一种基于侥幸心理的急功近利。学了一点皮毛,迫不及待地重构了别人的开源,加了自以为丰富的模块,其实底层根本没摸透彻。C++那么厚的文档都能看完,到最后的C++11却只看个一知半解。
感觉所有东西都可以在工作中在需求中在业务中去学习,感觉只要拿出普通科班生的百分之六七十水平就能有不错的结果,其实不然。
-------------------------以下原面经------------------------
我就想上来发泄一下,感觉遇到了工程大佬。
整个过程接近2个小时,根本是地狱体验。
我面试前还找到一篇同样base同样岗位,人家还是985还是硕士的面经看了一下,感觉自己能答得滴水不漏,已经信心满满了
整个过程下来反而手撕题感觉最好,其他几乎没有能拿得准的,粒度很细
1.上来啥都没说,自我介绍项目介绍也没让我讲,礼貌问了一下怎么称呼,没吃我这套。
2.字节对齐。写了7个sizeof 讲输出
2.多态。手写实现一个体现多态的程序。再手写一下派生类的析构函数的实现和效果。
3.C++11特性知道哪些?(这是我最后悔回答的一个问题,我还特意强调了了解,结果开始了不归路)
答:了解一点智能指针,lambda表达式,右值引用,auto和decltype关键字这些
4.刚想开始展开我了解的皮毛,给他讲讲4种智能指针,他打断了我,问
vector<A>和shared_ptr<A>里面的装的是对象?指针?引用?
答--对象 (开始懵逼
5.vector<int>里面删除特定元素,有重复,让我实现。
答—写完。我说了下中间插入删除会造成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.
想了一会儿,递归A了。但心态已经崩了,算法题是这轮下来我觉得最简单的题目。
#字节跳动2020春招面试进度##字节跳动##面经##C++工程师##校招#