面了75min,面完只有一个感受,让人不禁感叹,这就是 字 节 跳 动 啊。
本来以为基础架构重点在OS,计网这块,对语言不是很看重,最近一段时间就没怎么看语言相关,没想到基本都在问语言,而且对项目根本不关心(LZ参与三个项目,角色也比较重要,成果都还不错,两个项目是百万级的,都拿了奖和专利,因此准备了很长时间的项目。
面试基本上就是问到不会为止,压力太大了,第一次面试,思路很乱,碰到不会的很慌,以下是面经,可能遗漏。
1、errno是什么(错误码),放在哪里(全局变量位置),errno是线程安全的吗?(思考了一下感觉不是)怎样才能使它变成线程安全的(我说加锁) 他最后总结的时候说你看你连thread_local都不知道。。其他人都能说出来的
2、RAII是什么,你刚刚说到智能指针,unique_ptr是什么, unique_ptr可以用=号赋值吗?可以拷贝构造吗?为什么不可以?那unique_ptr怎么赋值呢?(我答要先释放release,将值传递 他不满意
3、shared_ptr的拷贝构造和赋值过程会发生什么(答了,那如果我不想有默认的拷贝构造函数怎么办?(delete或者private
4、map,unordered_map 模板在定义的时候需要什么东西 (k,v类型) 还有呢,如果我是个类呢? (比较函数cmp 为什么?(因为需要排序) 除了你说的还有什么是需要的呢?(不知道了
5、unordered_map 模板在定义的时候需要什么 (说了类型,hashcode,vector 容量和解决冲突的策略)还有呢?(不知道了 )还有equals (这不就是冲突策略吗?)
6、多继承、虚函数表的内存分布情况,虚函数表中是什么?(函数指针)函数指针是地址还是偏移?(不知道。。)然后写了个代码让我看 C<-B<-A的继承关系 现在new一个A的指针,dynamic_cast成C 类型指针 问c和a的地址是否一样 (我一开始没搞懂他要问什么,一直在内存分布上说,面试官非常失望,说了半天,才反应过来他没想问其他,就想问个指针值是否相同。
7、他说他很失望,就说那问你点简单的吧 进程的内存 内核空间是什么 有哪些区?栈为什么是向下生长的(为了加快运行速度)为什么能加快?(说了一通栈帧调用过程)你说的跟这个好像没关系啊(不知道说啥了
8、你说到了栈,线程的栈共享吗(不)堆呢(共享),那进程的内核栈呢(我说进程的内核栈应该不共享吧。过了一会儿他说他说错了,想问的是线程间内核栈共享吗?(我答共享,复盘的时候想想应该答错了,前面说了栈不共享,内核栈应该也不共享
9、算法题 判断一棵树是否是BST
先讲了思路 然后写 写出来了 但是抓着我INT_MIN INT_MAX说不好 我说那应该咋办 如果规定一个值也不合适吧 要写成LONG LONG 吗? 他说不是这个原因 说整体上差不多但是不合适(也不说为什么不合适。。。
反问:我说我以为基础架构偏向OS计网一点。。没想到语言知识问这么多。。我感觉我啥都不会。。
他说:你认为的和我们还是有偏差的 我问你的都是需要思考推理的东西,前面很多人都能答出来 可能你不是我们需要的人才吧(打扰了
总结:给我的感觉就是面错部门了。第一次面试,前半个小时很慌,他问的对我来说很难,也不是我擅长的东西,有几个问题感觉都语无伦次了,自己说了又推翻自己,要想很久,面到最后感觉面试官都不耐烦了,一直在说时间,超过一个小时了,最后写代码的时候还说你还有4分钟,写不出来算了。
约面试的时候推迟了挺久,因为中间要答辩和其他事情,中间看牛客的面经以为基础架构部门不怎么关心语言,我就基本没看语言的东西,没想到栽了跟头,唉,吸取教训。
编辑:
还想起来一个,他问我shared_ptr的引用是不是线程安全的,我说不是,为什么不是,我说use_count++操作一定是线程不安全的。他说那你说说怎么样才能线程安全,我说加锁或者写成原子语句,原子语句是什么,你能写给我看看吗?(我写了一下CAS的do while,但是写的不好,我写了个int的快照,应该是地址的快照)后来查了一下,一开始就回答错了,shared_ptr的引用计数本身是安全且无锁的。只有多线程对一个share_ptr对象操作才是不安全的,这里我没多想直接说了不安全,sad。 太菜了 给面试官的印象应该很差吧。。
全部评论
(15) 回帖