深信服研发现场一二面面经
可能不全,毕竟是回忆版,然后面试的时候很多地方也会展开来这里同样也不写细了。
(为什么牛客会把 自动屏蔽(还是手机看不到?),所以下面都要用cpp代替了)
1.首先做个自我介绍吧(略)
2.介绍一下你简历中这个项目吧(略)
3.有一亿个数据,怎么找到前一千个最大的数据?内存大的情况下怎么做?内存小的情况下怎么做?(快排思想和堆思想)
4.一个人一次能跳一阶楼梯或两阶楼梯,请问到第n阶楼梯有几种方法?如果这个人一次能跳的是x阶楼梯呢?(dp思想)
5.怎么找字符串最短循环节长度?例如bcdabcdab可以看作是abcd的循环,展开成a[bcdabcdab]cd,所以最短循环节abcd的长度是4(kmp思想)
[上几个题都是直接秒杀了,面试官说算法基础不错,接着问我什么语言最熟,我说c#最熟,然后是cpp,面试官说那就问cpp吧]
6.在main函数前都会干一些什么(预编译、全局变量初始化等)
7.extern关键字有什么用(略)
8.static关键字有什么用(略)
9.虚函数了解吗?虚函数有什么作用实现了什么特性?(可以重载函数,实现多态)虚函数内部是怎么实现的?(虚函数表)
10.简述一下vector内存机制?(不够扩充两倍)map的实现?(红黑树)unondered_map的实现?(哈希)哈希碰撞了怎么办?(再寻址、再哈希、链式)
11.怎么避免临时变量过多?(答右值引用后),什么是右值?什么是引用?
12.简介一下拷贝函数(其实是上一题答引用避免拷贝函数后问的)。如果类中成员变量有指针的话重写拷贝函数要注意什么?(重新分配内存避免析构后指针悬挂)
13.c的指针有什么缺陷?cpp做了什么改进?(c的指针怕忘记回收,然后讲了cpp四种智能指针)
14.分配内存的两种方式?有什么区别?(简介new和malloc后)new失败了会怎么样?怎么解决?
[以上问题也全答出来了,面试官又夸我cpp基础不错,然后问我linux和网络学的怎么样,我说用过但没研究过,你可以先问我吧,他说好那就问一题]
14.简述一下io模型(我就答上来了阻塞非阻塞,同步异步)
[他说可以了你还有什么问题要问我吗?我问是不是因为我说linux和网络不熟凉了,他说没有的事,我们更看重算法和基础,你在等待区等二面吧]
---------------------等了大概二十分钟,叫我过去二面------------------
1.如何以单词为单位翻转字符串,例如"hello world"变成"world hello"?(先翻转整个字符串,再翻转每个单词)
2.一个单向链表如何找到倒数第n个节点?(第一眼看到题目的时候没有正解思路,但是又不想思考太久还答不上来,于是直接脱口而出,开一个变量count,遍历统计链表长,第二次遍历到count-n就可以了。然后他问我能不能只遍历一次,我说那遍历的时候记住前一个链表手动构造双向链表?空间用多一点。他说中间那些有用吗,只用记住前第n个就够了。这题确实没答好)
3.谈一谈你的项目,说一下你项目中有什么重难点。(结果给发现一个我没考虑到的设计上的瑕疵。。。。)
4.你平时是怎么学习的?你算法是怎么入门的?(略)
5.有学习接触过别人的开源代码或大型项目吗?(先是答stl源码剖析,然后被问有没有实用的项目,答unity photon网络框架,他说他unity和photon都没接触过让我从头给他讲一遍。噼里啪啦的讲了一大堆过后他问我,那这个unity如何做到跨平台的?然后再问我,这个photon网络框架底层用什么,我说应该是socket,他问你有看过或想过怎么给他复现出来吗,我说有思考过但是没具体尝试。接着他说你还有什么问题要问我的吗?我说没有,他就说那今天面试就到这里,回去等通知吧。)。
————————————————————————————————————————————————
已经offer,没打算去,还是准备去游戏公司多一点
#深信服##秋招##C++工程师#