地平线提前批一面Linux应用开发工程师
1.手写单例模式(饿汉式)。(不存在线程安全)
2.手撕不含有重复字符的最长子字符串。
3.了解大端字节序、小端字节序吗?为什么需要分大端字节序和小端字节序?
4.手写大小端字节序?
#include <iostream> #include <cstring> using namespace std; int main() { union { short x; char c[sizeof(short)]; }test; test.x = 0x0102; // 0x0102 // c[0] c[1] if (test.c[0] == 1 && test.c[1] == 2) { cout << "大端字节序" << endl; } else { cout << "小端字节序" << endl; } return 0; }
5.能说说右值引用吗?为什么要有右值引用呢?
这块回答的不好,右值引用有点忘记了,只说了引用的右值是可以修改的,在某些临时情况下可以应用。
6.手写一个String类(估计右值引用答得不好就让实现一个String类)。
7.了解模板吗,可以实现一下类模板吗?
刚准备写,又忘记该怎么写了,写了个template<class T1, class T2>就没写了,难受,主要还是模板写得太少了。
8.C++11 了解哪些新特性呢,能说说看吗?
9.你说的智能指针有哪几种,各自有什么作用?
10.能解释解释shared_ptr的引用计数机制吗?
11.什么是多态?
12.vector和list的区别?
13.list支持自增、自减吗?(不支持,内存非连续)
14.什么是内存对齐,为什么要有内存对齐?(刚准备想画个图更加清晰一些,发现画还不如直接说,尴尬...)
15.能谈谈编译的过程吗?
16.那预编译的又做了哪些事呢?
17.GDB调试如何调试一个崩溃的程序?(可以用bt查看堆栈信息)
18.线程同步有哪些?
19.除了互斥锁、条件锁、读写锁、自旋锁,你还了解哪些同步机制?(我说还有无锁队列,面试官又问还有呢?......)
20.你说的自旋锁的应用场景有哪些呢?(锁的粒度足够小,持锁的时间足够短,建议使用互斥锁)
21.opencv了解吗?(不了解)
22.在不同平台上的如何链接的,了解吗?(不了解)
反问(这反问还是我提出来的,感觉自己有点强势,哈哈):面试官具体负责公司那块业务呢?
回答:需要将写好的程序【主要使用C/C++以及python】载入芯片运行,供汽车对路边的障碍物等进行识别,而这边也有现成的模型去处理,其次有时还要和客户对接需求,也会涉及到出差,但是出差次数不多。
一面80min,最长的一次了(可能不像其它统一面试,面了这一场还要面下一场,时间紧迫)。
PS:当时用的腾讯会议,只设置了1个小时的会议,1个小时后突然结束了,联系hr重新进入后,面试官嘟囔了一句想多问点。。。