商汤面试记录和总结
前几天在 SenseTime 面试了实习生职位,求职意向主要是算法模块以及工程业务,也就是偏码农一些。之所以不想做纯算法研究,我觉得我是根据自己的兴趣来制定的职业规划,也希望自己能够做相对喜欢的工作。
技术面试官总共有三个,不过时间都不长,侧重点也不太一样。
第一个面试官是部门的项目负责人,主要聊了一下求职的意向和个人的能力。会问以前实习的情况,会问项目以及擅长的领域。最后他了解到我想做工程业务,就直接拿了一套
Linux/C++
的题目来了。说一下题目:- 选择题有,关于虚函数的表述,
kill
命令是通过什么实现的(信号、信号量、管道….)总之不难 - Linux 下进程间通信的方式极其特征简述。(很重要,因为公司的业务关系吧)
- 有一个填空题,不同基本类型,判断为 0 的方式(浮点型不是 0)
- 代码题我觉得主要考察的 STL 的使用吧,vector 和 map 的元素操作(求和、插入、删除)。当然,能用
<algorithm>
和iterator
的地方都要用吧。从面试官的话中,我感觉他可能也是想这样做。 - 问了一个删除
iterator
后,此iterator
是否还有效?我认为被回收进垃圾区了,无效。
- 选择题有,关于虚函数的表述,
第二个面试官可能是主管工程业务的。根据描述来看,我如果入职,可能就是跟他。这部分工作主要打包算法给上层应用来使用,感觉像写中间件?接触的最多的是 TCP/IP(结果他没问我),问的问题主要还是个人简介、项目、经历等等。非项目技术问题有:进程和线程的区别(分布式情况下只能使用进程来通信,另外进程相对线程稳定,一个线程挂了,线程所在进程都挂了。这些点我答的不全,其余的区别基本说道了)、C++ 虚函数和多态的具体实现(虚表和虚指针的工作方式)、继承会不会覆盖虚函数等等。
第三个面试官可能时间比较急,和前面一样,自我介绍、项目、实习等等。然后就让我实现一下 memcpy 函数的功能,并写一个单元测试例子….我从没写过单元测试,我记录这篇文章也主要是想把这两个题记录一下。当然,实现参考网上的了。
memcpy 函数实现
重点就在于,地址重叠情况下,需要分清从前往后拷贝和从后往前拷贝两种情况
1 | void* my_memcpy(void *dst, const void *src, size_t size) { |
测试用例
1 | void test() { |