商汤 见习算法开发工程师(系统工程) 123面面经
背景
211本985硕,ICPC区域铜/邀请银(2017年),DevOps、架构和CV算法(偏部署)都可
无论文,有两个目标检测(但是偏运行部署)的top1/2,一个cvpr2021 workshop的top1
语言Modern C++/Python/.Net Core/Golang
部门是模型工具链
一面
总共大概70分钟,做题讲题15分钟左右
- 自我介绍
- 全程聊简历,三个项目和三个比赛细节
- 算法题:
132. 分割回文串 II
写了个manacher
二面
结合简历问八股,然后出了个匪夷所思的编程题……还有面试写C++黑魔法的吗
- 详细描述目标检测流程,一个图像最终怎么变成了框(单双阶段 anchor base或者free,nms base或者free等等,训练推理细节)
- nms,优化角度(回答了首先nms没法完美地降低时间复杂度,但可以并行化减少运算常数,或者近似化减少时间复杂度)
- cuda openmp 使用情况和cuda的写法,roi align/pooling和nms
- 异步编程和并行编程的概念以及实践区别,c++没有标准库前怎么实现协程,要完成哪些工作以及大概可以怎么完成
- docker文件系统,docker对外部设备的处理
- c++的智能指针,weak_ptr相比裸指针有什么不可替代性,关于你说的unique_ptr,rust相关
编程题:模板可变参数递归展开实现反转的std::make_tuple(C++11和14)
可以去cppreference搜一些标准库的接口
大概是这样,看网上应该没有一样的题,当时写了个大概
template <typename T, typename Ts = typename std::remove_reference<T>::type, size_t... I> auto __reverse_impl(T &&t, std::index_sequence<I...>) -> std::tuple<typename std::tuple_element<sizeof...(I) - 1 - I, Ts>::type...> { return std::make_tuple(std::get<sizeof...(I) - 1 - I>(std::forward<T>(t))...); } template <typename T, typename Ts = typename std::remove_reference<T>::type> auto __reverse(T &&t) -> decltype(__reverse_impl(std::forward<T>(t), std::make_index_sequence<std::tuple_size<Ts>::value>())) { return __reverse_impl(std::forward<T>(t), std::make_index_sequence<std::tuple_size<Ts>::value>()); } template <typename... T> auto make_tuple_reverse(T &&...t) -> decltype(__reverse(std::make_tuple(std::forward<T>(t)...))) { return __reverse(std::make_tuple(std::forward<T>(t)...)); } signed main() { auto res = make_tuple_reverse(1, std::string("123"), 4.2); std::cout << std::get<0>(res) << std::endl; std::cout << std::get<1>(res) << std::endl; std::cout << std::get<2>(res) << std::endl; return 0; }
三面
- 没有八股
- 简历聊了50分钟,除了ICPC的所有比赛和项目
算法题,一个只有0和1的数组,求最大的“0和1数量相等的区间长度”,On实现
HR电话(没有HR面)
确认入职时间地点,实习时长,转正意向,薪资待遇
应该快OC了
#商汤科技实习##算法工程师##商汤科技##面经#