> 秋招投递公司23家,简历被刷1家。笔试/测评挂掉3家。至今无消息的8家。获得Offer的公司有小米,兆易创新,全志科技,浙江大华,海格通信,京信通信,景嘉微电子,广州朗国电子,北京华大电子,中国长科技集团。已签约浙江大华。
@[toc]
友情提示:公司名字后面的日期代表投递日期,面试批次后面的时间代表面试时长和面试日期。
20200805接到通知,0806早上九点半面试。邮件中写的是用Webex Meet,之前都没听过的一个软件,网上找了半天才找到,而且软件没有简体,只好调成繁体了。邮件中写的是等待通知后再连入,大概9.40的时候接到了电话,要我加入会议中。
面试官是个女的,首先让我自我介绍下,然后开始看我的简历。介绍完了直接问项目。
> 你自己做了那部分?是不是在师兄师姐基础上做的?
不是,师兄师姐之前主要做的是理论研究。我本人所做的是硬件的设计和软件代码的移植。
> 移植的开源代码,做了那些修改?如何修改的?
主要修改的是硬件的管脚,时钟的配置,SPI总线的调试,芯片通信过程的调试。
> 上位机部分你说用了卡尔曼滤波,有没有调研过其他的滤波方式?
没有考虑,当时请教了也做这个方向的一些人,他们给的建议就是用卡尔曼就可以。没有考虑其他方式。(其实最主要的是解决问题,能解决问题就可以)
复盘:当时想到的第一个就是卡尔曼,因为卡尔曼在实际工程中应用比较广泛且成熟,效果也不错。当时就拿来试了下,定位精度得到了很好的提升。(定位漂移和抖动40cm左右。漂移和抖动的主要原因就是每次接收到的不止是多个信号叠加的结果,卡尔曼滤波主要是滤除除了首径信号以外的其他信号)
> 做的东西效果怎么样?和其他人做的对标了吗?
定位效果还可以,每秒钟可以定位64个标签。
复盘:业界的评判标准主要有几个方面。
> 整个工程文件有多少行代码?
具体多少行不清楚,最后编译的hex文件为112k
> 代码移植过程中遇到什么问题,如何解决的?
巴拉巴拉,通信过程有点复杂,估计面试官没听懂,就没往下问了(其实应该边画图边讲的)。
复盘:解决的整个过程应该描述的再详细一些,重点突出关键部分,这个问题的三个部分都要讲清楚!
> 项目中实际写的代码量有多少
没多少,主要是硬件的设计和调试,软件的移植,解决问题,修改。
复盘:显然面试官嫌弃代码写少了,这个时候可以说微信小程序的代码自己写了很多,70%以上。从0到1.
> 项目代码中多线程,多进程是如何运行的
没有用到多线程,多进程。
> 汇编,C++掌握怎么样?
汇编自学过,可以看懂。C++基本没用过。
复盘:汇编是自学的,C++和C的语法差不多,都可以看懂。
> 重写strcpy函数?
写完了给面试官解释了下。写对了
> 将一个寄存器的第三位的值从0改成1
写完了给解释下。写对了
> 你有什么想问我的?
如果我有幸能进入贵公司,驱动主要负责那部分?
> 主要还是看你分到那个部门,camera,音视频,IO驱动都有在做的。
什么时候能给到面试结果的答复?
> 不确定,要先把面试过程的记录交给HR。
1.我项目上做的是软件+硬件的一个实现,面试官全程在问软件,硬件一点没问。
2.在简历中写了自己在写博客,放了一个链接,不知道面试官看没看。
3.面试的岗位是Linux驱动开发,全程没有问一点像bootloader,Linux内核的输入子系统,总线设备驱动模型等偏底层的东西。
4.女面试官可能都不太懂硬件?全程都是软件,而且自己的项目中写的代码不是太多,主要是修改。面试官还是侧重实际的写代码能力吧。感觉凉了。
5.全程35分钟吧。
6.总结下,项目考虑再深化下,如何讲解?
无领导小组讨论。没有标准答案,上网搜索下无领导小组讨论的注意事项,想好自己要扮演什么角色。但是一定不要不说话,要有逻辑的表达自己的观点。
HR面,主要问了家庭情况,有没有女朋友,工作地点的问题,能不能接受加班,HR也很坦白的说,公司处在上升期。我们是标准的996。
> 项目
主要针对简历上写的内容来问,项目画原理图,流程图讲清楚,并进行公式推导。
> 什么是内核空间?什么是用户空间
> 内核空间和用户空间通信方式
> 为什么需要uboot?不用行不行?
用uboot的目的是引导内核启动。
我理解的,理论是可以的。把uboot中所做的一些工作写进内核里,板子也能启动。但是很少有人这么做,毕竟内核很庞大,大面积修改难度比较大。
> volatile关键字
9.25号发来邮件,要先签两方协议。这家公司做Smart TV之类的显示设备的,安卓驱动和Linux驱动都有,也有嵌入式应用层的。零食甜点下午茶,10点以后打车报销,每个季度有奖金(0.5-1个月月薪),年终还有年终奖(据说可以拿到18薪),就是加班太多(据说996是标配,忙的时候9107),怕受不了。最后还是拒绝了。
2020.9.8号做完笔试,9.10下午突然打电话来问是否方便,做个电话面试。
> 自我介绍
> 笔试题的建议
笔试题好多关于C++的部分,个人是做嵌入式软件部分的(偏底层)。做起来C++部分有些吃力。希望笔试题可以分嵌入式上层和底层的部分。
> 项目
问了好久,面试官对我做的项目很感兴趣。
> static关键字
修饰变量的话,这个变量的作用域只是本函数,而且如果多次调用函数的话,这个变量只会被初始化一次。修饰函数的话,函数的作用域只是在本文件内。
> Arm有几个寄存器?什么是CPSR,SPSR?什么时候用到?
37个寄存器。CPSR是当前程序状态寄存器,存储的是当前程序的状态,比如上下文的一些寄存器内容,程序运行的话就要用到CPSR。SPSR为备份的程序状态寄存器,主要是中断发生时用来存储CPSR的值的。
> 字符设备有哪些?和块设备有什么区别?如何写一个字符设备驱动?
字符设备有键盘,鼠标等。字符设备和块设备的区别主要是访问方式不同,访问字符设备是以字符流的方式访问的,访问块设备是以块为单位,并且可以随机访问。
以一个LED驱动为例,先定义一个file_operations结构体,接着编写init函数,在init函数中完成对管脚的映射,register_chrdev字符设备的注册,class_create类的注册,class_device_create在类下面注册一个设备。exit函数中完成字符设备的卸载,类的卸载,内存空间的释放。在open函数中完成硬件管脚的初始化,在write函数中完成点灯操作。
> Uboot启动过程说下?
没有难度。
> 堆和栈的区别?
1.申请方式,栈的空间由操作系统自动分配,释放,堆上的空间手动分配,释放。2.申请大小,堆的可用空间比较大,栈的可用空间比较小,一般是2M。3.申请效率,栈申请速度比较慢,堆的申请速度比较快。
> 为什么栈的空间不连续
不知道。
> 通用学科,你喜欢那个,学得好的。
数学,英语。
> 数学的那个分支比较感兴趣
矩阵理论。因为在许多问题的深入研究中,基本上50%以上的问题都会转化成矩阵来解决。所以这部分看的比较多。
> 除了课本学的数学之外,自己私下有没有看其他的关于数学的内容
没有,自己看的比较多的是专业方面的书籍。
> 专业课中,那个课学的比较好
C语言,操作系统,计算机组成原理,Arm体系和架构
> 除了课堂上学的之外,某个领域有没有深耕,自己研究过,私下看过
Linux内核的源码,操作系统,计算机组成原理,私下都会去花时间去了解,学习
> 如何学习的?以什么样的方式
我在学习Linux驱动的过程中,会想到一些问题,比如UBOOT的启动过程中为什么会关闭中断,关闭DCACHE,关闭MMU,关闭TLC等。遇到这些疑问我就会去查,解决问题的过程中会想到其他的一些问题,把这些问题记录下来,一一解决。
像Linux内核的话我最近再看一本书,赵炯老师写的Linux0.12源码剖析,这个书以Linux0.12内核为基础,详细介绍了内核的各个部分,虽然看起来比较吃力,但是我也在坚持阅读。
复盘:有条理更好。学习的形式主要分为两种:一种是在学习的过程中解决疑问,以解决问题为导向。比如,在移植UBOOT的过程中,我会想到为什么要关闭ICACHE,DCACHE等,关闭中断等(这里可以抛出这些问题,以防后面会问),遇到这些问题我就会记录下来,然后上网去查资料。在解决这些问题的过程中,可能会遇到其他的问题,继续查找相关资料,直到最后都搞清了。第二就是系统的学习,如果有比较充足的时间,我会去拿着像Arm体系和架构,操作系统,Linux源码剖析这些书去一点一点的读。去理解这些内容。以上就是我平时的一个学习方式。
> C/C++那个更熟悉?做过开发吗?
C更熟悉,做过开发,3000行代码的经验。
> Linux操作系统熟悉吗?
熟悉,常用的使用都是没问题的。
> 平时有空了做什么
我会去学习一些新的知识,研究一些底层的东西,比如操作系统,计算机组成原理等。我到现在一直坚持的一个事情就是写博客。每周的话我都会把这周的疑问,这周学习的新的知识去做一个总结,每周都会要求自己去发布一篇博客,对本周的内容做一个总结。
复盘:有空的话我更多的时间还是投入到对于技术的学习中,在学习的过程中我会通过写博客的方式来输出自己的想法。每周我都会去坚持写一篇博客,博客的主要内容就是这周的学习的新知识以及遗留的疑问的解决。
> 反问
这个算第一次面试吗?什么时候会得到这次面试的结果?下次面试是否会提前通知?
算第一次面试。结果的话这最近两三天会给到。因为人比较多,面试不会提前通知。
面试时间35min吧,整个面试过程还是很顺利的,问的问题基本都答了上来,唯一 一个关于栈的空间不连续的问题,确实是自己的知识盲区了,后面也补上了。
回想起来。有些问题应该想好再说,注意条理性,问你什么答什么,不要有废话。
> 自我介绍
> 进程和线程的区别
1.进程是系统进行资源分配和调度的一个基本单位,线程是CPU调度和分配的基本单位。2.进程有自己的独立地址空间,线程是共享进程的内存空间的。3.进程切换的开销大,线程切换开销小。4.多线程程序只要有一个线程死掉,整个进程也跟着死掉了,多进程程序中的一个进程死掉并不会对另外一个进程造成影响。
> 死循环有几种方式来写
for(;1;){},while(1){},do {} while(1);
> 看你写的熟悉内核的总线设备驱动模型,讲解下。总线设备驱动模型和字符设备有什么区别?
总线设备驱动模型和字符设备驱动并不是一个平行的概念,总线设备驱动模型是在字符设备驱动模型的基础上套一个外壳,其实内部的驱动编写方式仍然和常规的字符设备驱动基本是一样的,这样做的目的为了隔离BSP和驱动,使得驱动具有更好的可扩展性。
> Uboot如何引导内核启动的?
uboot引导内核启动主要向内核传递三个参数R0,R1,R2,第一个参数R0,默认为0。第二个参数,R1,CPU ID,告诉内核板载CPU的型号。第三个参数R2,告诉内核映像文件存在什么地方,板子还剩多少内存空间。这些参数的传递都是以tag_list的方式传递的。
> 主要擅长的开发语言
C语言最擅长
> 左值和右值
左值可写,右值可读。通常,左值可以作为右值,但是右值不一定是左值。
> 数组名和指针区别
数组名对应的是一块内存的地址,指针是指向一块内存地址。数组名对应的内存地址不可以修改,指针指向的内存地址可以修改,更加灵活。数组存放的是数据内容,指针存储的是地址。
> 平常像C++,python这种语言有涉及吗
C++能看懂,会改。自己独立写一个大程序的话不太行。汇编的话是自己学过的,能看懂,会改。python语言没有涉及到。JS/HTML/CSS这些前端的语言是自己在项目中实际用过的,使用没问题。
复盘:先抛出结论,C++ 汇编 JS/HTML/CSS这是我会的语言。然后再描述。
> 之前做的项目都是偏底层的实现,对吧。
不是。能称得上是底层的就是第二个项目吧,移植uboot2012到2440的开发板。第一个项目的话是硬件软件的一个设计开发,没有涉及到底层的东西。
复盘:如何清晰的描述第一个项目。第一个项目主要做的就是硬件的设计,软件代码的移植,是偏上层的,没有和底层相关的技术。
> 你自己考虑的话以后自己是偏向底层的开发对吧
对的
> 是偏向系统呢,驱动呢,内核呢?
我目前考虑的是做驱动开发
> 为什么是驱动开发呢
我觉得做底层这一块比较有意思吧,像做驱动开发的话,我们知道像安卓的camera驱动,音视频驱动这些,都是独立的一块,每一块拿出来都值得研究,我个人也比较倾向于从事有挑战性的工作。目前考虑的是先做Linux驱动,以后如果有可能的话会去做安卓的驱动,再慢慢的到camera驱动,音视频驱动这些。这也算是我的一个职业规划吧
复盘:回答的有点跑偏了,不过不要紧,还是向面试官表达出了自己做这个行业的一个规划。
下次这样回答:因为我觉得做底层的话,可以更清楚的知道我们的程序是如何运行的,程序编译完成后是如何在内存里面排布的,我个人对于技术好奇心很重,经常会想一些问题,比如在uboot启动过程中可以把dcache,icache都关掉吗,Linux内核是如何知道我现在所处的环境(运行于那个cpu上,其实就是uboot和内核参数传递方式,故意说的不清楚,让面试官问你)等等。对于这些问题,我喜欢刨根问底都搞明白。因此我喜欢做驱动开发。
> 除了上课外,你会看一些什么样的内容呢?
我最近在看的两本书是Linux内核源代码情景分析,赵炯老师的Linux0.12内核完全注释。昨晚我在看的是Linux内核的源代码情景分析中的数据结构部分,包括链表,队列,二叉树等是如何实现的。(很巧了,正好昨晚看了这部分)。此外,每周的话,我都会去学习一些新的知识,把自己的感悟和其他人对于这个问题的看法记录在博客里面。大概就在些把,做的最多的就是写博客,从输入到输出的一个反馈把。
复盘:先抛出结论。先说,做的最多的就是写博客了,从输入到输出的反馈,巴拉巴拉。
我每周做的最多的事情主要有两个。第一个是学习新的知识,学习一些自己感兴趣的内容,比如我最近在看的书。第二就是写博客,每周我都会写一篇博客,这篇博客的内容主要就是本周学习的知识的总结,或者是之前遗留的疑问的解决。
> 除了知识学习外,平常还有什么爱好
每周都会跑步3次左右,每周最少打一次篮球。
> 看你写的博客,11个月,104篇,相当于每个月差不多10篇左右吧。
这104篇中有好多是我在自学Linux驱动开发过程中的一些笔记,随笔。在学习的过程中就顺手记录下来了。其实到后面慢慢发现,一个月内想要产出一篇不错的文章的话,还是要花一点时间的。所以说,我现在对于我自己的一个要求就是每周一篇,保证质量。不像之前那样,以一种记笔记的形式。
> 这些文章中那些是访问量比较高的
单链表的增删改查反转等操作,单链表的冒泡,快排,归并等排序,线索二叉树等。
> 数据结构也是自学的吗?对树熟悉吗?说下那些树,有什么特点
满二叉树,所有根节点都会有两个子节点。平衡二叉树,根节点的左孩子比根节点的值要小,右孩子比根节点的值要大
复盘:平衡二叉树都回答错了。
> 做驱动过程中,有没有针对某一个点的优化和改善?
犹豫了半天,没有想起来。尴尬!
复盘:最基本的按键驱动啊,由查询方式改为中断方式。Uboot的启动过程中,将重定位的程序靠前存放(链接脚本),保证在4K以内的代码能完成后面程序的复制。
> 反问
我什么时候能得到二面的结果呢?
> 一周之内。后面会有HR联系你的。
接下来还有几轮面试
> 应该还有一轮面试。HR面完了之后会综合评估,给出offer。
总体还行吧。70分。面试问的技术问题都是自己在资料中总结到的,二叉树的说错了,不知道面试官发觉没有。面试中很大一部分时间都在聊博客的事情,也算自己擅长的方向。
最后一个问题 回答的不好,实在没想起来,现在想想,举一个差不多的例子就可以了。直接回答不会有点不好。
> 面试完了有什么收获
有些问题本可以回答的很好,但是由于没什么经验,答得不太好。
> 目前投了那些公司
就投了两家,一家是XX,另一家就是大华,大华是面试进度最快的。(其实已经投了几家了)
> 家庭成员的情况。对工作地点有没有要求?
如实回答就可以。
> 期望的工资
我说,公司应该都有个统一的标准,按照标准来就好了。HR说你最好还是说一个吧,我说了XXX。
> 目前有那些OFFER
当时怕压价,就说了有了XX和XXX的offer(实际上都没有啊)。其实这里说漏嘴了,之前说只投递了两家,哪里来的offer?不知道HR有没有意识到。(如果大华的同事看到了,不要打我啊,哈哈。)
> 反问
什么时候有结果?
> 一周之内。
今天已经是9.21了。仍然没有结果。明天问下吧。
最终的offer发出是在9.30号,看了下也比较满意!
> 项目问了很久
30min
> 字符设备如何写,框架
资料总结的驱动框架里面有。很容易答了上来。
> LCD驱动框架
资料总结的驱动框架里面有。很容易答了上来。
> uboot启动流程
资料总结的驱动框架里面有。很容易答了上来。
> SDRAM接口地址
具体地址忘了,但是我知道他是接在bank6的
> 你是北方人,对工作地点有要求吗。
我:没有。我主要看重我在公司做什么。
> 向你介绍下我们部门吧。巴拉巴拉说了很多工作内容后(当面试官说这个的时候,我觉得就有戏了),主要是做指纹芯片的,工作内容大多集中在在Android底层和hal层,给客户解决问题要占50%的时间。
其实个人不太喜欢这个工作,主要是有点FAE的感觉。但是当时没说出来。
> 如何了解到兆易创新的
很多比赛都是兆易创新赞助或者以兆易创新的名字命名的,我也参加了兆易创新今年举办的研电赛,我们在研电赛中获得了全国三等奖。
> 目前手上的offer?给你开了多少?
大华,全志。还没谈。(当时也是为了怕压价,说了手上有两个offer)
> 何时发三方?先拉进群
10月底,11月初。
> 工作地点去深圳还是上海?
再考虑下。
> 父母对于工作地点的要求
没有。
> 打算在上海,深圳落户吗
没有。
直接拉进offer群里了,200+人,群里好多电科大,西电的,西交,西工大的,我在群里都不敢发言。
个人还是不太喜欢这个工作,主要是做Android底层和Hal层,还给客户解决问题,占用了50%的时间。其实30%的时间是可以接受的,50%有点多了。感谢兆易创新对我的认可,不好意思!
景嘉微的面试还是专业的。一天之内三面。每次面试都是两个面试官,二面还是一轮压力面。
> 项目
问的不详细,基本都是原理之类的,解释清楚就好。
> 看你学过数据结构,自学的吗?刷了多少题?问个简单的吧
自己学的。具体多少没算过吗,大概有200道左右吧。
如何判断一个数是不是质数??真不会,忘了质数的概念,想了半天,面试官说,估计你对质数概念不了解,算了。
> 自旋锁和信号量说下
答对了。
> 二叉树什么时候会退化?什么是平衡二叉树?
不知道什么时候会退化。平衡二叉树就是左右子树度的差值小于1.
> uboot启动流程
说了很多遍了。
> Cache一致性
不知道这个概念。但是我具体说了下读写Cache的一些注意问题,比如初始化的时候一定要清空Cache之类的。
> 如何写一个字符设备驱动
init函数,exit函数,file_operation结构体之类的东西
> uboot启动为什么要关闭中断,MMU,DCACHE之类的
非必须关闭吧。uboot的目的就是引导内核启动,而且uboot启动的话只是把需要的打开了,其他非必须的都可以关闭。当然也可以打开。DCACHE之类的必须要关闭,因为SDRAM没有初始化,可能会取到错误的数据。
> bin文件和elf文件区别
不清楚。后来在自己总结的面试知识点中增加了这个内容。
> 什么时候用哈希?哈希冲突如何解决?
对时间要求比较高,对占用内存空间大小要求不高。开放地址法,再哈希法。
> 项目原理的介绍
> 写博客的目的
之前也考虑过这个问题,当时说了4点。1.随笔的形式,方便自己回顾。2.好的学习习惯 3.认识了很多业内前辈。4.习惯之后,坚持每周输出。
> 看你写了很多奖项,好多是校级的,有其他的吗?
有一个国家级的,研电赛全国三等奖。
> 项目难点
巴拉巴拉。
> 还有各种针对本人的问题,总之就是压力面,一直否定你这个人
你简历上写了这么多奖学金,你觉得你是你们周围最优秀的吗?为什么?你和别人差在哪?为什么本科毕业不直接参加工作?为什么考研?本科期间都做了哪些事情了?有什么收获?你觉得你是最努力的吗?以前是不是没有努力?为什么在看C primer plus?是基础不好吗?等等这类的问题。(这种问题沉着冷静的如实回答就可以。不要让面试官觉得你人有问题)
> 印象最深刻的人
> 自我介绍
> 介绍项目
> 最成功的项目
> 项目难点
> 如何克服和学习项目的难点
> 如果一笔订单需要你的上级审核,但是上级很忙,你会怎么办?
如果这个客户是和我们第一次交易并且时间又很紧急,那么可以考虑找上上一级领导。如果这个客户已经和我们有过多次交易并且上级领导实在没时间,那么我也可以审核。
复盘;反思了下,这里其实不该回答“自己也可以审核“这些话的。一般来讲,公司肯定有应对措施的。按照公司的流程走就好了。
9.25发来Offer,国庆节后给答复。公司是在长沙,做显卡的,主要客户是部队。不是很想去,国庆节后上班第一天就给了景嘉微答复说不去。
> 项目简单介绍
> 进程和线程区别
问了很多遍了。
> 编程题:指针函数,函数的参数为int,返回值为字符指针
char *((*p)(int))
> 宏定义求最大数
#define MAX(a,b) (a)>(b)?a:b
> uboot启动流程
问了很多遍了。
一个酒店,和研发部总经理聊了聊受益匪浅。
> 为什么写博客?
之前也考虑过这个问题,当时说了4点。1.随笔的形式,方便自己回顾。2.好的学习习惯 。3.认识了很多业内前辈。4.习惯之后,坚持每周输出。
> 项目原理,五分钟给我讲明白
边画图边讲。
> 为什么学Linux?用的什么开发板?啥时候买的?多少钱买的?自学的吗?有人引导吗?学了多久?
> 周围搞Linux的多不多?
> 操作系统会吗?计算机组成原理了解多少?
了解一点,没有时间去完整的看。
> 为什么没有时间完整的看?
白天忙导师安排的事情,还要写论文,改论文,写专利等等,晚上才有时间学习一些内容。当时紧接着又说虽然没时间完整的看,但是操作系统说基本的概念还是都理解的。
> 说下MMU。什么是MMU?为什么需要MMU?来龙去脉讲清楚
大概讲的是这个里面的一些内容:
S3C2410 MMU(存储器管理单元)详述
物理地址到虚拟地址的映射,为了跑大型程序,操作更多的地址
> 是虚拟地址到物理地址的映射,你搞反了。
> 紧接着又说,我最看重的是操作系统和计算机组成原理的掌握程度,这些都是嵌入式的基础中的基础。
这些都是放在我计划之中,不过我目前在看源码的框架。
> 先不要看源码,不懂操作系统和计算机组成原理,看源码会累死。我们之前一个项目要修改内核中的关于调度的程序,我研究进程调度这部分,研究了两周多才修改完。所以,有时间还是补下计算机基础。源码的内容别急着看。
面试官确实很厉害。也和自己说了很多。所以接下来调整下战略思路,先看操作系统和计算机组成原理
> 在校期间,就要把基础打牢,好好看书。
之前面试其他公司,面试官问的关于操作系统的一些内容能答上来,这里我有点膨胀了,居然和面试官说操作系统的基本概念都理解。一下就被面试官问倒了。所以,如果不是特别熟悉,不要和面试官说我精通XXX之类的话,否则,肯定会被面试官问到不会为止。吸取教训!
最后去另一个房间和HR聊了聊待遇和薪资,待遇一般,而且工资组成里面还有20%的绩效,上下浮动。不打算去。而且,因为之前全志也闹过裁员风波,所以试探性问了下HR试用期会裁多少人?HR回答的是我们并不规定具体的指标。我接着又补充说到,那么我是否可以理解为没有上限也没有下限呢?HR说是的。所以,直接拒了。
和HR聊完了,顺便问了下面试官的名字,HR说这是他们XX部门的研发总监。和这个面试官聊天,确实学到了很多,受益匪浅!
> 自我介绍
首先是自我介绍,本来准备的是三分钟的自我介绍,但是中途被面试官打断了,说面试时间有限,简短一点,要不后面没有时间写代码了。就介绍了下自己写博客的事情。接着面试官也很直接,上来就基础知识开始问。
> 进程和线程的区别
答对了。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、IO设备等,然后该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其他相关资源,该进程就被运行起来。
线程是进程的一个实体,是CPU调度和分配的基本单位,线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是,它可以与同属一个进程的其他的线程共享进程所拥有的全部资源。
在没有实现线程的操作系统中,进程既是资源分配的基本单位,又是调度的基本单位,它是系统中并发执行的单元。而在实现了线程的操作系统中,进程是资源分配的基本单位而线程是调度的基本单位,是系统中并发执行的单元。
不全。面试官又提醒了。进程间通信方式有那些,也回答上了。管道,FIFO,信号,信号量,消息队列,共享内存(最快),套接字。
> 僵尸进程听过吗
没有。
> static 和 volatile
答对了。
static主要是改变函数和变量的作用域。volatile防止对寄存器进行优化,使得每条指令都要按照我们写的进行运行
> 两个Linux操作系统之间使用什么命令进行文件的传递?
我不知道是什么命令,但是我可以说下我的想法,我觉得利用HTTPS协议可以进行传输。
> 不是命令,这是协议。
> 数据结构学过吗?说下你知道的排序算法?
在校没有学过,但是我自己私下学过。排序算法:快排,选择排序,冒泡排序,插入排序,堆排序。
> 说下快排的过程,快排的时间复杂度
巴拉巴拉,也答对了。
> 手撕代码
反转字符串中的单词 I am a teacher -> rehcaet a ma I
很基础的问题,A了出来。
> 最后反问
什么时候有结果?
> 不确定,一周以后吧。
有好多基础知识没打上来。主要集中在操作系统相关的概念上。确实不知道,接下来要好好补充了!
> 项目问的很细
20min,原理和流程图
> typedef和 define有什么区别
1.typedef在编译时处理,具有类型检查的功能;define在预编译时展开,不会进行错误的检查,只是字符的替换。2.define没有作用域的限制,typedef有自己的作用域。3.typedef定义指针的别名时,别名可以连续定义两个指针变量。define定义指针的别名时,使用这个别名连续定义两个指针变量会报错。
> 数组下标可以为负数吗
没见过,应该可以吧。
> 不能用 sizeof()函数,如何判断操作系统是16位,还是32位
16位系统中,int变量的范围-32768到+32767,32767+1变为-32768。可以利用这个特性来判断。
> IIC如何发送一个数据?IIC时序图画下。IIC芯片有哪些?
回答的还可以。
> 用户栈和内核栈是同一个区域吗?有什么区别?
不是。用户栈和内核栈是两个独立的区域。内核栈保存的是内核态程序运行的时候相关寄存器信息,用户栈保存的是用户态的内容。
> 用户空间和内核空间的通信方式?
1.API函数,Copy_from_user,get_user等。2.proc文件系统 3.mmap系统调用 4.使用文件
> 中断的响应执行流程?听过顶半部和底半部吗?讲讲
cpu接受中断->保存中断上下文跳转到中断处理历程->执行中断上半部->执行中断下半部->恢复中断上下文。
顶半部执行一般都是比较紧急的任务,比如清中断。下半部执行的是一些不太紧急的任务,可以节省中断处理的时间。
> 写过那些驱动?讲下LCD驱动如何编写?
巴拉巴拉,问了很多遍了。
> 手撕代码
给定一个数组,找出和为s的数字。二分查找,A了。
> 反问
如果有幸进公司,主要负责那些方面?
> IO驱动,音视频驱动,内核的优化移植都有。看个人兴趣和过往经历的匹配程度。
多久出结果呢?
> 月底前应该会给
> 家庭情况
> 期望薪资
> 有没有女朋友?工作地点是北京还是深圳?
北京。
发下offer已经是10.20号了,太晚了,三方早已经寄走了,综合考虑,感觉性价比不是很高。如果冲着小米的平台去,确实还不错。其实心里有点小后悔。不过也就这样了,注定与小米无缘。
> 项目
15min。
> 你知道的Linux指令有那些
ls,ps,rm,cat,mv。
> busybox是什么?
缩小版的unix系统常用命令工具箱。主要包含了一些常用的Linux指令,环境等。
> 什么是根文件系统
根文件系统上是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中。
> 为什么写博客?
之前回答过了,四点。
> 反问
这个岗位主要负责什么?
> 你的岗位是Linux系统工程师,主要是负责操作系统的优化和移植。
9.25号微信告诉我面试通过了,问我是否签约,综合考虑了下,拒绝了,抱歉!公司其实还不错,在长沙,一年保底16薪,包食宿,长沙人去蛮适合的。
面试官是两个人,一个HR,一个40多岁的主管。没问很深的技术问题,主要问了项目和写博客的事情。他们主要做WIFI芯片和SOC的,更多的可能是应用层的开发任务。待遇给的还可以,但是觉得平台小了,拒了,抱歉!
具体问了什么忘记了。但是都不难,很基础的。(有史以来最短面试,10分钟就完了)
早上九点半进入腾讯会议,发现还不止一个人。几个面试者就随便聊了几句。大家都不知道接下来是技术面还是群面,还是HR面?提前也没有通知面试的内容。后来进来一个女的说,大家可以耐心等待,有兴趣可以一起听下,我们挨个面。每个人大概20min左右。
第一个人面试完,HR让第二个人来,我看大家都没反应,我就第二个了。
> 自我介绍
> 你做决定的过程是怎么样的?
> offer情况?期望薪资?工作地点?
> 反问
大概多久会发offer?多久之后会谈薪?
> 一周之内
感觉面试不是很正规,电话面面试官迟到20min,而且也没问几个技术问题,10min就完了;一面和二面战线拉的太长了,不知道其他人有没有,反正我是这样。也可能是太菜了,后面才被捞起来的。10.23HR打电话确认是否接受offer,拒绝了,抱歉!
群面,五人一组围一圈,每个人做自我介绍,HR会单独提问,大概内容就是关于哪里人,家庭,父母工作,对海格了解有多少等等。
> 项目
> 你知道的常用Linux命令
mv,ls,cat,ps,mkdir,touch,find。
> IO多路复用
不知道,但是我知道IO管脚的复用,巴拉巴拉解释了下。
> 在Linux上编写过那些程序
基本的外设驱动都写过,led,按键,lcd,Nand Flash等。
> 程序的编译过程分为几部分
预处理,编译,汇编,链接
> 什么是4字节对齐?为什么需要对齐?
资料总结的有。
> 如何求一个结构体成员变量的地址
正好前几天写了一个博客。
内核中container_of宏的详细解释
> 函数指针和指针函数
资料总结的有。
> 什么是野指针?如何避免?
资料总结的有。
> sizeof和strlen区别?
sizeof是运算符,在程序编译时就已经确定了;strlen是函数,程序运行时才能计算。
> int a[5] = {1,2,3,4,5},sizeof(a) = ?
20。
> 快速排序的思想?时间复杂度?
理解为打扑克整理牌,O(nlogn)。
> 哈希表是什么?如何使用?
答对了。
> 反问
如果有幸进入贵公司,主要负责哪方面?
> 负责调试和维护基本的外设驱动,配合硬件工程师进行新平台的开发。
什么时候可以得到这轮面试的结果?
> 明天。
党委副书记面试,全程很放松,就是普通的聊天,自我介绍,哪里人?为什么选择来南方读书?对于海格了解多少?如何看待加班?能接受加班吗?职业规划等?
大boss面试,好像是个总经理,自我介绍,介绍下项目,项目几个人?你负责那部分?除了这个项目研究生期间还有那些团队合作的项目?你是扮演什么角色?你导师研究那个方向的?为什么你和导师的研究方向不一样?你觉得研究生期间导师对你的帮助大不大?女朋友哪里的?做什么工作的?有考虑过在广州定居吗?为什么?等等吧,还有些想不起来了。
整个面试感觉浓浓的国企风味,很看重人的综合素质,对技术要求感觉不是很高。9.29约去谈薪,与其说是谈薪,不如说是直接告诉你。没有argue的余地。统一打包价。拒绝了,抱歉!。
不得不说,oppo的简历卡的是真的严格。全是人工筛选。不止要看你的学校,还要看你的项目经历是否匹配。我这被刷了也很正常。
测评居然挂了,很可惜。
之前乐鑫的HR说,提前批投递不影响秋招。所以很早就投递了乐鑫科技。乐鑫是我第一家笔试的公司。当时笔试题目是三道编程题。巨难!比华为的笔试题难度都大。而且,第一次用牛客的笔试系统,最基本的如何读取输入输出都不会,于是笔试直接挂了。
9.8号找HR确认说,提前批挂掉的会自动推到正式批。但是我等到9.19号也没有收到笔试。后来HR让我去官网看自己的简历的状态,结果显示人才池!正式批都没有笔试就直接人才池了?什么操作啊。。说不影响有点假,其实还是有影响的。可能提前批笔试挂掉的是不会有机会参加正式批的。(自己猜测)
C厂的笔试挂的就很玄学了。当时对C厂还是抱有很大期望的。笔试题目中规中矩,大题也都A了出来。选择填空做的正确率应该有80%。但是最后笔试莫名其妙挂了。我同学投研发岗的无一例外笔试也都挂了。难道100分的题目,90分及格线?以后做C厂笔试题,大家要格外小心,尽量还是要高正确率!
12.9号,接到CVTE HR打来的电话,说在补录,约个时间面试。手上没有三方了,拒绝了。
9.16号笔试之后就没消息了。三个大题,A了1.5个。(其实这个公司也不太了解,看到了有岗位就投了,据说是AI四小龙的老大)
8月份华为在线上做专场宣讲,当时的宣讲会每个部门都做了介绍,给了微信群,我也加了几个群。加到群里后HR会主动加你好友,直接打语音电话解决你关于投递岗位的疑问,很是热情。每个部门的HR都会说我们这里有很多HC,建议投递我们部门。
在选择部门时,主要考虑以下几个方面。鉴于今年的情况,华为的消费BG是不考虑了,毕竟芯片断供,手机业务也大打折扣,很大可能是缩招的。无线部门,也不考虑了。神终端,圣无线的名号不是吹的。而且,华为的无线部门成绩要求也比较高,10%左右?(别的部门的HR说的)。最后考虑智能车BU是新成立的,而且智能车BU的HR也极力推荐我们投递。于是就投递了智能车BU。
投递之后,在网上搜索关于这个部门的情况,看到了一条消息,大概意思就是说,这个部门的人数不会太多,要小而精。瞬间感觉到有点被车BU的HR坑了。
9.14笔试,大题A了第一道。后面两个没做。9.16发的测评链接。9.19问所投递部门的负责人说,第一批面试暂时截止了,后面还可能会有HC,名额不会太多,但是到了十月以后了。十月份再给HR发消息,HR已经不回复消息了。相反,投递其他部门的同学,在9.19-9.24这周都安排了面试。
怎么说呢,怪自己投递晚了吧,而且加上华为今年形势紧张。当时主要考虑,还没有准备好,而且华为基本是一天结束三面。没有准备好过去当炮灰也不值。所以投递有点晚。现在准备好了,但是已经错过了时间节点,有点可惜。
> 华为技术面试的准备和经验分享【完全攻略,已签约】 精
> 各位大佬,求华为面试手撕代码
> 华为这波操作以后,中兴可能成了最大赢家
> 大半夜的睡不着谈谈华为秋招的看法。。
>
> 更多关于华为招聘的内容,可以去牛客网搜索下。
11.30号,12.3号下午,分别接到了华为Cloud&AI和消费者BG的HR打来的电话,问了下我的基本情况,让我继续投递简历,考虑到已经没有三方了,就拒绝了。而且华为的人才池海了去了,这个时间节点还在拉人面试,猜测可能是HR的KPI还没完成吧。
很奇怪,提前批投了没消息,正式批也不给笔试。太难了。
听说只招211/985?
挺想去这个公司的,但是也没消息。
主要是投递晚了。而且,很搞笑,只发了笔试短信通知笔试,在笔试当天却没有收到笔试链接。后来问了HR说:不好意思,这是我们第一次全网招聘,系统BUG了,后面我们会统一处理的。后面又发邮件问了几次HR什么时候安排笔试,回复也是很官方。太难了,错过了九月的最后一批笔试。
11.1号晚上12点发短信让11.2号下午直接参加面试,考虑到已经没有三方协议了,拒绝了。
投递晚了啊,联发科成都那边可能是不缺人了,一直没消息。
随便投的,后来才知道这个公司基本只招985。
整个秋招还算是比较顺利的,虽然九月初的时候有段时间心态有点崩,但是及时调整过来了。感觉秋招也很戏剧性,六分运气,四分实力。运气好,和面试官聊的顺利,说不定还能拿到sp,ssp。但是,也不能一味的去靠运气。机会总是留给有准备的人,机会没有到来时,要认真准备。当机会来临,我们要好好把握。
最后祝所有看到这篇文章的小伙伴,在秋招中都可以拿到心仪的offer。
** 养成习惯,先赞后看!如果觉得写的不错,欢迎关注,点赞,在看,转发,谢谢!**