jj同学 level
获赞
28
粉丝
13
关注
0
看过 TA
117
北京化工大学
2016
嵌入式软件开发
IP属地:广东
暂未填写个人简介
私信
关注
总体感觉-个别问题考的特别的深(回答的不太顺畅-略有担忧)。rtos/linux操作系统,c++;0.自我介绍+简历拷打1.智能指针说一下?(说了下 三种指针和不同的应用场景独占-适用于只对该资源保持唯一的所有权。共享-适用于-多个指针对该资源都享有所有权的情况。弱weak_ptr主要是用在共享指针出现循环引用的场景)又问了下shered_ptr的引用计数是保存在堆上还是栈上?(我说是堆上,他反问确定吗)问:那说一下shered_ptr的这个指针的实现原理?(本质就是每个共享指针都会关联一个控制块(这个控制块是在堆上分配的),控制快上带有引用计数和弱引用计数.通过引用计数来管理所指向对象的生命周期,说了一下他的逻辑:引用计数就是记录当前有多少个对象指向了这同一个对象。每次创建新的,这个引用计数就递增,当销毁时引用计数就会递减!)2.volatile的作用。(大概:防止变量被编译器优化实现对寄存器的实时读写多线程或者中断情况下,都读取变量是会读取变量值,这保持了数据一致性)3.实时操作系统是如何保证它的实时性的?(抢占式的任务调度,优先级的设置,中断的快速相应。查了ai:可能还得加上--一些避免死锁的机制,一下同步的机制-比如互斥量信号索、、)4.实时操作系统在做任务切换的时候会做哪些事情?(保存当前任务的上下文-比如寄存器和堆栈指针;调度器--根据调度算法选出一个要执行的就绪任务。同时更新调度信息。选出后-就加载新任务的上下文信息--涉及寄存器的恢复和堆栈指针的设置做上下文的切换并启动新任务。。。)5.ucos有哪些调度方式?(基于优先级的抢占式调度,时间片轮转调度)6.linux上的init进程会做哪些事情?(系统初始化工作:主要是挂载文件系统,初始化设备的驱动;启动系统的服务:运行启动脚本和相关的管理服务进程的管理:比如自动收养孤儿进程。。。)7.僵尸进程是怎么产生的?(子进程先于父进程结束运行,但是父进程没有进行正确处理子进程的终止-即没有及时收尸,就会产生僵尸进程)8.linux的进程间通信有哪些方式?(提起有速记:队内管s信,毫无压力消息队列,共享内存,管道,socket,信号量)问了下进程间的共享内存是否可以使用互斥锁?(互斥锁一般是用在线程间的,但进程间资源竞争理论上是可以的,比如你在某个共享内存放置一个互斥锁标志位,大家访问前都去获取锁)那么这种方式可能会引发什么问题?(死锁,频繁竞争增加开销-导致性能下降,可能导致优先级反转或者饥饿--这些都是会导致cpu效率下降)9.说一说tcp和udp的差别(速记-可怜应用船-可连应拥传可靠性,面向连接行,拥塞处理,传输效率,应用场景)10.socket的read函数返回值的解释?(大于0,是表示是实际读到的字节数=0,读到文件的末尾或者流的末尾,tcp的话-通常意味对方已经关闭连接<0,表示读取出错了,通过errno可以查看是具体哪些错误。)11.反问:团队的规模如何-该岗位的定位-加班情况如何?
查看15道真题和解析
0 点赞 评论 收藏
分享
小鹏汽车-c++ 自动驾驶岗位的面试(jd在最后)(原本会议45min,干到了70min+)0.15min分钟的手撕代码deleteDuplicates(ListNode* head),删除所有重复数字的节点问下复杂度是多少-n^2?如何降下来复杂度?(用c有点蒙蔽,他提了下c++容器,恍然-set和map是可以的自动排序的,可以降低,很尴尬用c为主c++为辅)1.敲打简历。做了哪些工作?问是代码框架是怎么样的?(实话实话)问问是如何实现消息队列的?(尴尬,用的现成的ucos接口)换了一个问题,用来什么技术栈(我常用c的,对这个表示陌生。我说我描述下是如何实现的吧)2.内核裁剪是这么做的?(大致说了些,根据内核打印,移除一些模块驱动。精简网络-比如去掉一些ssh,把一些服务往后移动)3.linux的文件系统说一下,说一下底层原理?比如yaffs的这个管理吧?(我说我用他们多一点,比如用过哪些类型的fs,这个底层确实接触的不多。有点慌....,不知道怎么回答)4.调用read函数读取数据,到得到数据,中间过程发生了什么?(说了个大概:应用层调用read,引发一个系统调用,cpu从用户模式切换到内核模式,想要参数将会传递给内核内核会调用参数进行验证内核验证通过会找到对应文件结构体(file文件)进行查找和定位,通过file文件可以找到节点inode,闪传驱动读取数据和ecc校验数据接下里就是数据从内核到用户空间的复制,返回用户空间?)5.用什么方案去实现状态机机制(我说了下:通过状态机标志位+轮询方式)6.说下linux内核的内存管理,他们是怎么管理的?为何要引入虚拟我提到了进程隔离(内存空间的隔离),访问权限的控制,图片物理内存显示,实现内存扩展给开发提供了一个同一的、连续的地址空间,我们不需要关注物理内存的布局和碎片,检查程序开发和内存管理7.GDB常用哪些指令?如何用GDB调试查找死锁问题?我讲了lrbsqdp(提前速记了:冷若冰霜驱动盘)这个几个指令的使用l-list显示10行代码,r-run运行代码,b-break设置断点,s-step单步运行,q-quit推出,d-del删除断点,p-print打印变量。如何查找:结合top和ps。通过info threads打印出所有线程的信息,包括id和状态通过thread id 切换到某一个线程进行栈回溯,了解栈在做什么然后用print打印锁信息,查看依赖关系和锁状态8.智能指针有哪些,哪些使用场景?三种unique_ptr,shared_ptr,weak_ptr场景:第一个是希望对资源拥有唯一所有权的时候用;第二个是希望多个指针共享同一块资源的所有权时,第三个主要时用于解决第二个可能产生的循环引用问题时用。9.拷贝构造函数的传入参数,如果不加引用符号会怎么样?会导致无线递归,最后引发栈溢出10.多态是怎么实现的?主要是通过虚函数和指针来实现的。讲了有编译多态和运行时动态多态(主要讲一下运行多态?)主要讲了虚函数表和虚函数指针的逻辑11.出了这个虚函数,还有通过哪些方式实现这个动态多态的过程呢?function,bind,策略模式。知道,但是记得不多了。12.反问阶段.日常用的,主要是用c为主,c++为辅总体感觉:给自己打个7分吧,听天由命等通知。。---------------------------------------------------------------------------职位描述自动驾驶软件开发高级/资深工程师/专家(Linux/C++方向)岗位职责:1、负责自动驾驶相关的新产品软件设计和开发;2、负责自动驾驶相关的应用和算法软件在新软硬件平台上/新车型上的移植和调优;3、与各相关团队协作,共同完成自动驾驶产品工程化落地,负责分析和解决遇到的相关软硬件问题;4、负责现有平台/车型的迭代开发维护。岗位要求:1、本科及以上学历,计算机/软件专业,至少3年以上软件开发经验;2、熟练使用现代C++语言开发(C++11及其以上),熟悉STL并了解其实现原理,能进行多线程编程、网络编程、通信中间件开发;3、熟悉Linux/QNX,并具备在其上的工程构建、开发、问题定位及解决能力;4、责任心强,具备优秀的学习能力、独立分析问题和良好的团队沟通协作能力;5、有基于嵌入式平台的大型应用软件开发经验优先,有自动驾驶产品开发和落地经验优先。
0 点赞 评论 收藏
分享
1.简历自我介绍2.技术面(面试官全程1h问的都是实操经验,没有八股文,问题比较开放-因人而异)●离职原因?为何没有骑驴找马?(行业低迷下寻求个人进一步发展+家人生病的时机)●iic协议时序是怎么样的?是如何启动的,如何结束,如何确定ACK和NACK?(scl高时,sda由高变低; scl高时 sda由低变高;第九个时钟-拉低sda即为ACK,拉高则为NACK)●是如何仲裁的?(比如多个从机的仲裁)--这个我说不出来--慌的一批!!(现在想是不是线与逻辑?)●在linux操作系统和MCU上,如何查找内存故障相关的问题?(MCU讲了如何JLINK调试工具+寄存器打印和保存+栈回溯,LINUX上讲了如何gdb+coredump,后面也提及了strace工具)(他问了gdb如何去执行和调试coredump和使用过程?我记不起来了...顿时感觉药丸了)●用过哪些操作系统(UCOS,LINUX,NUTTX,RTT),在实时操作系统上用过或者做过哪些工具?(我说到了单片机上用示波器去拉低拉高io查看耗时情况,然后自己对应的位置设立flag查看调用情况,第三方工具没用过---感觉不是对方想听到的答案)●阅读过内核哪一部分的代码?(我说我-以前看内核视频的适合,每个部分都看过源码,现在有点久远了)●如何解决程序瓶颈问题?(我讲到了top,free指令,还有perf工具)●如何解决内存溢出类似的内存问题(我提到了人工检查--释放和申请成对,mcu利用调试工具和栈回溯,然后Linux上的valgrind工具);●描述下最有印象的一次项目经历?(讲了一下给别人解决bug的一次项目经历)●自己感觉比较擅长或希望哪一个方向?(我说-按照公司方向走,反说公司开发得看看自己怎么选择?我mcu或者linux方向的应用开发皆可-如果两者还有选择的话,我选linux方向-希望在这方面更加深入成长--后来感觉给自己埋了一个雷)说一下内核那几个子系统--内存管理,进程管理,网络管理,文件系统,进程间通信,驱动等对哪个比较熟悉?(我选了网络--因为开发的时候有用到了●有无linux开机优化的经验-讲一讲?(我说有过将47s开机启动完善到20内的经历:说了几个比如ssh的优化,rcS内复位的优化,将很多内核操作后置的行为-●比如加载文件系统、ko模块,启动UI的优化等等)●如何优化开机启动-比如给任务优化到5s--给思路!(属实没有研究过内核启动的必要条件,说不太出来---面试官安慰说-没关系。)●网络传输如果发生丢帧或者延时和卡顿,怎么办--给解决思路?(我提及了这个接入交换机或者路由器-通过抓包工具来查,提及了两个工具wireshark和tcpdump,来分析到底是网络风暴/拥塞,发送方发出数据帧慢了还是错了,还是接收方收的慢还是收错了还是他应答的慢了,来定位)●网络的可调参数有哪些?(这真的到了盲区了,我一开始说的是TCP的socket,bind,listen函数里面的参数,他说不是这个,我有点懵,后来反应了--应该是TCP流程的那一套参数:比如建立连接的参数-SYN Retry(SYN 重传次数)、SYN Timeout(SYN 超时时间)数据传输参数:TCP Window Size(TCP 窗口大小)、Max Segment Size(MSS,最大段大小)、TCP Congestion Control Algorithm(TCP 拥塞控制算法)连接关闭参数:FIN Wait Time(FIN 等待时间)、Time - Wait State Duration(TIME - WAIT 状态持续时间)、Keepalive Time(保活时间)只有这个收发缓存是我用过的:Receive Buffer Size(接收缓冲区大小) 和 Send Buffer Size(发送缓冲区大小)我后来AI查的,但是没想到。。。药丸的感觉越来越重)●最后问了下:MTU的含义?即最大传输单元(Maximum Transmission Unit)●●反问阶段:我想问下这个岗位的定位是怎么样的?说是给其他团队兜底的存在!其他团队解决不了的他们来解决!所以不需要懂得太广,要懂得深刻!沉默了--没其他问题了!上述应该是80%+的问题,可能有个别遗漏,全程一个小时,语速和节奏中等偏快!●--面完总体感觉:我回答的不够深入,感觉不够完美,难过!--
豁达的小鲸鱼反对画饼:太强了佬
查看19道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务