记麦穗人工智能后端开发/研发技术一面
这次面的比上次还难,碰到了ACM的面试官,计网和操作系统一点也没问,我还是回去好好学习吧(连面试官都喊我回去买本书看看我哭……),心拔凉拔凉,面了30mins,我为我的无知感到羞愧啊……学的又少又浅
-
C++的四种强转(没让自我介绍,后来我说他说你觉得有必要可以说,然后我说了……早知道他是ACM大佬的我就不说了,哭)(我回答的int ll double这些,面试官说这是C的,问的C++的强转)
- 类型转化机制可以分为隐式类型转换和显示类型转化(强制类型转换)隐式类型转换比较常见,在混合类型表达式中经常发生,四种强制类型转换操作符。static_cast、dynamic_cast、const_cast、reinterpret_cast
- static_cast :编译时期的静态类型检查。该运算符把expression转换成type-id类型,在编译时使用类型信息执行转换,在转换时执行必要的检测(指针越界、类型检查),其操作数相对是安全的
- dynamic_cast:运行时的检查
- const_cast:去除const常量属性,使其可以修改 ; volatile属性的转换
- reinterpret_cast:通常为了将一种数据类型转换成另一种数据类型
-
deque
-
STL比模拟慢多少(我说大概慢几十毫秒……)
-
队列和栈的区别(我说了先进先出和先进后出,然后面试官说)
-
队列和栈的相同点(我说都是线性的,时间复杂度都是O(n),然后面试官说逻辑上呢)
-
队列和栈的本质怎么实现的(…… 解释说都是deque,但是队列和栈是封装好的deque,去调用接口)
-
STL中的vector的实现,是怎么扩容的?
- vector使用的注意点及其原因,频繁对vector调用push_back()对性能的影响和原因。vector就是一个动态增长的数组,里面有一个指针指向一片连续的空间,当空间装不下的时候,会申请一片更大的空间,将原来的数据拷贝过去,并释放原来的旧空间。当删除的时候空间并不会被释放,只是清空了里面的数据。对比array是静态空间一旦配置了就不能改变大小。vector的动态增加大小的时候,并不是在原有的空间上持续新的空间(无法保证原空间的后面还有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,并释放原空间。在VS下是1.5倍扩容,在GCC下是2倍扩容。在原来空间不够存储新值时,每次调用push_back方法都会重新分配新的空间以满足新数据的添加操作。如果在程序中频繁进行这种操作,还是比较消耗性能的。
-
resize
-
Queue插入一个元素时间复杂度多少
-
vector插入一个元素时间复杂度多少,插入内存不够怎么办(我说了会扩容)
-
vector扩容后,插入一个元素时间复杂度多少(后来给我分析一个是多少,扩容后是多少,然后问平摊时间复杂度)
-
O(1)和O(n)的平摊时间复杂度
-
问我CF多少分
-
卷积神经网络的模型(我说了TensorFlow和caffe……)
- AlexNet、VGG、GoogLeNet、ResNet、DenseNet
-
卷积过程(我大概说了由大变成1x1的……)
-
MySQL调优手段(针对查询怎么调优,有哪些手段,面试官后来给我解释了……explain)
-
算法题:有n个元素的数组a,选出k个数之和不大于s,求k最大(还没开始敲多少,面试官是面试只有半小时,就问其他的了)
-
OJ如何实现的
-
OJ前端用了什么技术(我说用了pyqt……(这是我另一个项目的……),面试官一直问 你用pyqt可以在浏览器上运行 然后我说了可以……)
- 用的是Vue
-
OJ后端用了什么技术(我说了PHP实现的)
- 用的是Django
-
OJ测试机如何实现的
- 判题沙箱(Seccomp)、判题服务器(对Judger的封装)
-
后来问了OJ是不是只部署了,不了解技术(对)
-
卷积神经网络(CNN)有哪些层 (我说了卷积层、池化层、全连接层)
-
C++ mutable,我没听过(面试官说是xxx套了一个模板啥的)
-
让我回去好好学习acm平摊时间复杂度、买一本C++primer、改改简历不要写熟练