小鹏汽车面试经验分享

大家周一好,这篇文章转自我的朋友李纳克斯,在做工作的同事,去面试也能增长自己的技术面和技术深度。推荐给大家,希望对大家有所帮助。


某个下午,小鹏汽车的HR在招聘软件上撩我,于是我决定去聊聊看。

287249806c628a3dd9454df6aa6a8eb2.png

接触下来对他们的印象还不错,这家公司的面试风格非常的“美式”,二面三面的主考官都是美国人,有一个还是从苹果公司挖过来的,现在还在国外。面试出的题也很有意思,不考编程不问技术的,像三面就只考一道逻辑推理题,着实非常的有风格。

总体经历跟上次哔哩哔哩面试非常相似,四面以后的就不涉及技术了,不过前三次技术面试还是很有价值的,跟大家分享一下,希望能对大家有一些帮助。

面试岗位:小鹏汽车自动驾驶视觉方向C++岗

36814c5418baaf35b5c889accc20a136.png

一面:纯技术

一面的面试官是个带广东口音的小哥,性格比较开朗有趣,我们俩相谈甚欢。

我们首先聊了聊普通消费者对于自动驾驶的认知,L1~L5这些等级区别。然后他抛出一个问题说,你认为“小鹏汽车过去一年内自动驾驶的死亡率为0”这句话能否让你认为小鹏的自动驾驶是安全的?

我说当然不能,对我而言除了死亡,受伤也是不可接受的,要体现绝对安全的话应该说事故率为0或者无任何人员受到伤害。

当然如果目前的技术还不能做到绝对安全这一点的话,我们在广告语上可以着重去体现自动驾驶在高速上或者路况良好的路段带给驾驶员的方便和帮助。

他对我的回答不置可否。

1c23de56b8ee2be2a47111cb1400ecff.png

然后我们切入正题。

1-IIC协议和SPI协议的区别,如何选择用什么协议?

IIC协议只有CLK和DATA两根线,发送数据前需要先发送设备地址加读写操作选择,确定目标设备和数据传输方向。

SPI相对IIC协议有四根线,除CLK外还有片选信号和MOSI/MISO,并且是全双工模式,速率较高。

2-volatile关键字的作用,什么时候会用到?

volatile可以防止变量被编译器优化,每次读取变量时都直接从变量地址中读取数据。如果这个变量是多任务共享的,或者一些状态判断的寄存器的值需要用volatile修饰。

3-多态的实现原理

当类中声明虚函数时,类里会生成一个虚函数表Vtbl,表里存储了实际要执行的函数指针;类实例化的每个对象都会有一个指向虚函数表的虚表指针Vptr。

父类指针指向子类对象时,调用虚函数实际上调用的是子类对象的Vptr,指向子类的Vtbl,故而实现了多态。

4-多重继承时,多态如何实现?

多重继承时,对象的虚表指针用来指向自己所属类的虚表,虚表中的指针会指向其继承的最近的一个类的虚函数。

5-右值引用的作用

主要是移动语义,具体场景是移动构造、按值返回、对象存入容器可直接构造等。以及不太常用的完美转发的场景。

6-智能指针的作用

上次B站面试的时候提过,C++基础题了。用RAII的思想,将资源用对象的方式处理,在析构函数中释放资源。unique_ptr保证独占,没有拷贝构造函数,shared_ptr有引用计数,weak_ptr不参与引用计数,可以解决循环引用的问题。

7-如何不用中间变量,直接交换两个变量的值?

这个方法就多了,介绍一种异或的方法。

a = a^b;
b = a^b;
a = a^b;

除了对简历上我的项目经历过了一遍外,又对编译器开发和嵌入式开发做了一些细致提问,都在射程范围之内。

于是愉快的通过了一面。

ba8006dc50823cc7b1062a2b205accfb.png

二面:纯技术

二面的面试官是个美国人,说是刚从苹果跳槽到小鹏的,目前base在美国,所以我们面试还对了下时差,挑了上午11点面试。

1-什么时候用多态,什么时候用模板?

模板属于泛型编程,是在编译期实例化的,而多态是运行期确定的。在设计函数时,如果类型是同一层次的,并且类型不会影响函数内容,就用模板;反之如果类型有继承关系或类型会影响函数内容,那就用继承多态。

2-const比define应该尽量用哪个?

这个问题一出来我就笑了,前两天写《据说从未有人敢在简历上写精通C++》这篇文章的时候刚好把《Effective C++》这本书回顾了一下。于是我说这是《Effective C++》这本书的条款02所讲的内容。面试官也笑了说,是的我们都读过,那你把条款02讲讲吧。

c49d4ec8ebc185d02bd57abd46ef9d2a.png

我说条款02讲述的思想其实是“宁以编译器代替预处理器”。define是预处理器做的工作,只是单纯的字符替换;对于单纯变量来说,可用const代替,相比于define来说这样有类型检查,代码调试时也有这个变量;如果define定义了形似函数的函数的宏,则可改用inline内联。

3-移植linux系统时的步骤

这个看实际项目了,我拿我用cortex-A9芯片移植系统的步骤举例,先去官网下载uboot,kernel,去ubuntu官网下载最小系统制作fs。根据硬件部门给的原理图改设备树地址等等。

4-linux系统驱动分哪几种?网卡驱动属于哪一种?

字符设备驱动:led,key,显卡,串口等;

块设备驱动:U盘,SD卡,eMMC Flash等;

网络设备驱动,网卡驱动属于这类。

5-你做过哪些驱动的移植?他们之间有什么不同?

字符设备和块设备驱动居多,主要区别就是字符设备是以字符流形式访问的,块设备可以随机访问吧。

6-linux开发板从上电到启动系统的步骤?

这个流程也是面试的高频考点了,甚至可以单开一文详细讲讲工作这几年移植系统踩过的坑。面试的时候我大概是这么说的:

1.硬件同事一般会在板子上留个启动方式的切换,比如拨码开关或跳线帽,来决定是SD卡启动或Flash启动;

2.系统上电,执行第一阶段引导程序,IPL(Initial Program Loader)或者叫FSBL(First Stage Boot Loader),一般这部分程序是固化在芯片内部的BootROM里,寻找可以用来启动的设备。不过我之前用的一款xilinx的芯片也可以自己load这部分程序。

这段程序负责从第一步指定的设备中读取SPL(Secondary Program Loader)或者叫SSBL(Second Stage Boot Loader)到片内SRAM;

3.运行SPL,它完成CPU的初始化,DDR的初始化等,将真正的Uboot从存储设备搬到外部RAM中执行;

4.在Uboot中读取内核、根文件系统、设备树,加载到内存地址中;

5.将启动参数传递给内核,跳转到内核运行;

6.内核初始化,挂载根文件系统并启动。

7-在从SD卡往内存搬移系统时,谁初始化了内存?这个发生在什么阶段?

我理解里是SPL干了这件事。

8-一道编程题

至此聊天结束,开始动手了。面试官出了一道编程题,如下:

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。k≤n≤1000。

我面试的时候是这么做的:

int func(int k,int n){if(k>n||n>1000){return -1;    }std::vector<bool> leds;for(int i=0;i<n;i++){leds.push_back(false);}for(int j=1;j<=k;j++){for(int i=0;i<n;i++){if((i+1)%j==0){leds[i]=!leds[i];                            }}    }for(int i=0;i<n;i++){if(leds[i]){std::cout<<"num:"<<i+1<<std::endl;}    }return 0;
}

要不要尝试来个别的解法?

9-一道逻辑题

1d55dbb42b76629bba0d28a11d1a24e7.png

三面:就一道题

三面就一道题,真的相当有风格。不问来历,不看出身,不考技术,不用编程,不听故事,就一道智力题。答对就过,答不上来就凉,很有意思。

三面之前我还想着都第三轮了,这个团队负责人应该不问技术细节了吧,应该会考察行业知识和个人素质了吧。我还去看了看小鹏去年的财报,了解了下从创业至今推出的产品线以及产品定位,目标用户,市场反馈,结果全没用上。

人家就问怎么把1到9这9个数填入九宫格......

小鹏汽车的团队负责人貌似国外的比较多?二面和三面的主考官都是说人在美国,刚下飞机,熟人太多,利益相关....面试到后期也是都喜欢考逻辑题。

这些看起来像是小学奥数题或者某些杂志广告页的逻辑推理题,蒙对个答案其实不难,但人家也不只是要个答案,能逻辑严谨的证明,找出所有的规律才算过关。打算面试小鹏汽车技术岗的朋友去之前最好多刷点类似的题。

祝大家都能找到理想(理想如果去不了,小鹏和蔚来也不错)的工作。

SHOW.TIME 点击关注.

微信公众号 | 李纳克斯Linux

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Bezier)贝塞尔曲在路径规划的运用,机器运动控制常用

前言之前被安排了活&#xff0c;一个局部区域机器运动控制的工作&#xff0c;大致是一个机器位于一个极限区域时候&#xff0c;机器要进入一个特殊的机制&#xff0c;使得机器可以安全的走出来。其中用到了bezier曲线进行优化路径&#xff0c;今天写一下&#xff0c;正好也给大…

IT部门绩效考核:一本糊涂账?

IT部门绩效考核&#xff1a;一本糊涂账&#xff1f; 作者&#xff1a; 三人行  来源&#xff1a;赛迪网 http://www.csai.cn 2005年11月02日 AMT-企业资源管理研究中心 高级顾问 姚磊 北京新华信管理顾问有限公司 顾问 宋炜 光明乳业信息总监 赵春雨 明基逐鹿人力资源咨询…

Spark安装

1 Spark安装地址 运行环境:CentOS 6.8 Hadoop 2.7.2JDK 1.8Scala 2.11.8Spark 2.1.1 集群以3台机器模拟:hadoop202 hadoop203 hadoop204 1&#xff0e;官网地址 http://spark.apache.org/ 2&#xff0e;文档查看地址 https://spark.apache.org/docs/2.1.1/ 3&#xff0e;下载地…

mysql开启慢查询日志及查询--windows

转载地址&#xff1a;http://blog.csdn.net/ljasdf123/article/details/9713523 MySQL慢查询配置 1. 慢查询有什么用? 它能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化. 2. 如何开启慢查询? 首先我们先查看MYSQL服务器…

如何成为“10倍效率”开发者

导读&#xff1a;Brad Feld的一篇文章The Rise of Developeronomics中提到了“10倍效率的开发者&#xff08;10x developer&#xff09;”的概念&#xff08;伟大的开发者的效率往往比一般的开发者高很多&#xff0c;而不只是一点点&#xff09;&#xff0c;Adam Loving在读了之…

当然可以不努力

我刚开始觉得他说的不对&#xff0c;现在越看越觉得他说的有道理。我们这一代人&#xff0c;太容易被别人影响&#xff0c;小的时候&#xff0c;觉得要赶上别人家的孩子&#xff0c;所以就努力读书&#xff0c;努力干家务。长大了一些&#xff0c;要用功的工作&#xff0c;用功…

遇到问题了 .net项目发布到iis6,没有权限访问!?

系统环境&#xff1a;windows2003 sp1 iis6 .net 2 framework已经允许了asp.net 2.0的支持在vs2005中把自己的web项目发布到iis6中的虚拟目录&#xff0c; 可是无法访问呀您无权查看该网页 您可能没有权限用您提供的凭据查看此目录或网页。 如果您确信能够查看该目录或网页&am…

UNIX TCP回射服务器/客户端之使用epoll模型的服务器

程序简介&#xff1a;这是一个运用epoll系列函数进行IO复用的服务器模型。它是目前UNIX与LINUX平台上效率最高&#xff0c;最受欢迎的IO复用传输模型。 其他的不说了&#xff0c;直接粘贴代码吧&#xff01; 服务器端&#xff1a; #include "my_unp.h" int main(v…

枚举和结构

1&#xff0e; 枚举 a) 枚举类型是一种特殊的值类型&#xff0c;它用于声明一组具有相同性质的常量&#xff0c; b) 声明枚举 在C#中使用关键字enum类声明枚举&#xff0c;其形式如下。 enum 枚举名 { List1value1, List2value2, List3value3, …. …

_beginthreadex 一定要自己写 CloseHandle 可以不用 _endthreadex

_beginthreadex 一定要自己写 CloseHandle 可以不用 _endthreadex 天哪,好久不 写忘记了.一直记得线程的句柄只是 createthread 才需要关闭,可能是我用 AfxBeginThread 太多了. 以后直接这样好了 ::CloseHandle((HANDLE)_beginthreadex(NULL, 0,threadRun_client,(void *)tp, 0…

嵌入式界的顶流开源项目,RetroPie 是怎么设计的?

RetroPie 是啥&#xff1f;一个用于将树梅派等板子转变为游戏机的开源项目。树梅派上运行 RetroPieGithub:https://github.com/RetroPie/RetroPie-Setup第一感觉&#xff0c;基于 Shell&#xff0c;有啥牛逼的。但仔细想想&#xff0c;一个简单的项目能获得 9.4K 的 Star&#…

java线程池,信号量使用demo

直接上代码 package org.jimmy.threadtest20181121;import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit;public class TestThread20181128 {public Semaphore semaphore new Semaphore(2, true)…

使用epoll+时间堆实现高性能定时器

在开发Linux网络程序时&#xff0c;通常需要维护多个定时器&#xff0c;如维护客户端心跳时间、检查多个数据包的超时重传等。如果采用Linux的SIGALARM信号实现&#xff0c;则会带来较大的系统开销&#xff0c;且不便于管理。 本文在应用层实现了一个基于时间堆的高性能定时器&…

Spring JDBC最佳实践(2)

2019独角兽企业重金招聘Python工程师标准>>> 使用DataSourceUtils进行Connection的管理 由上节代码可知&#xff0c;JdbcTemplate在获取Connection的时候&#xff0c;并不是直接调用DataSource的getConnection(),而是调用了如下的代码&#xff1a; Connection con …

我所感受到的上海

大家好&#xff0c;文章转自张老师的公众号&#xff0c;文章的我不是小编本人&#xff0c;小编现居深圳&#xff0c;刚接受了一场大雨的洗礼。前两天公众号抽奖的书籍已经发货&#xff0c;中奖的朋友们注意查收。当格蠹园里的大灰反复犹豫到底应该在哪里生产的时候&#xff0c;…

时间操作(Java版)—获取给定日期N天后的日期

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。https://blog.csdn.net/wangshuxuncom/article/details/34896777 获取给定日期N天后的日期import java.util.Calendar;public class Test {public static void main(String[] args) {System.out.println(new Te…

设计模式学习笔记五——Prototype模式

动机&#xff1a;使用原型实例指定创建对象的种类&#xff0c;然后通过拷贝这些原型来创建新的对象。某些结构复杂对象面临着剧烈变化&#xff0c;但拥有比较稳定一致的接口&#xff0c;如何隔离出这些易变对象&#xff0c;使客户程序不随之改变&#xff1f;场景&#xff1a;Th…

2011年最佳代码

2019独角兽企业重金招聘Python工程师标准>>> 2011年最佳代码 try { if(you.bevieve(it) true || you.believe(it) false) { I.believe(it); } } catch(Exception ex) { throw new Exception("Its a miracle!"); } finally { it.justHappened(); } 转载于…

使用Epoll 在 Linux 上开发高性能应用服务器

epoll是Linux提供一种多路复用的技术&#xff0c;类似各个平台都支持的select&#xff0c;只是epoll在内核的实现做了更多地优化&#xff0c;可以支持比select更多的文件描述符&#xff0c;当然也支持 socket这种网络的文件描述符。Linux上的大并发的接入服务器&#xff0c;目前…

昨晚两点睡

深圳下雨两天&#xff0c;我们居家办公两天&#xff0c;不过奇怪的事情是&#xff0c;这两天我都到公司上班&#xff0c;昨天早上没有下雨&#xff0c;我想着应该要去公司&#xff0c;结果到了公司才知道原来今天可以居家办公。不过&#xff0c;在公司才有上班的感觉&#xff0…