秋招结束 感谢牛客

秋招结束,特别感谢牛客网上热心网友的分享,现回馈我的笔面经~
●笔试
◆DJI 嵌入式开发岗
  1. const
char str[]=”chen”;
char* const name =str;
const char * const name =”chen”;

三者区别
2.DDR

Double SRAM,速度为SRAM的两倍

3.存储器的掉电易失特性

掉电非易失存储器:ROM类,包括ROM/EEPROM/HDD/FLASH

掉电易失存储器:RAM类。

4.结构体内存对齐

struct student

{    char name;

int id;

} __attribute__ ((packed));

求结构体大小

5.***概念

6.数组指针 指针数组 函数指针 函数指针数组

7.RTOS

硬实时典型代表:VxWorks

软实时典型代表:Linux

8.中断过程

9.实时系统和非实时系统的优缺点及应用场景

10.为什么mmap读速度快于fread

11.unsigned int减法

unsigned int a=5;

unsigned int b=10;

判断a-b和0的关系

●面试


招银网络科技 软件开发岗

电话面试:
1.如何理解面向对象
2.堆栈的区别
3.子类可不可以继承多个父类,为什么
4. 项目中有没有遇到内存泄漏
面试
1.C++四种强制类型转换
2.单核如何处理并发
3.100G文件 4G内存 如何找到出现频率最高的数,手写代码
4.大数的加减法,手写代码
5.介绍项目
6.TCP连接的状态,TIME_WAIT状态持续的时长

华为
两面技术面基本上都是介绍项目

旷视face++ 测试开发岗

1.对岗位的理解

2.设计测试场景

测试一瓶矿泉水的功能。注意要用物理量,这样显得专业一些。

外观是否好看,握力需要多少牛顿,拧瓶盖时需要多少力矩,容量多少毫升,PH值标准多少等等。

场景类似于用多少牛顿的力能把矿泉水瓶身压破。

3.做题

构造函数

类似于这样的一道题:

class base1{

private: int a,b;

public:

base1 ( int i ) : b(i+1),a(b){}

base1():b(0),a(b){}

int get_a(){return a;}

int get_b(){return b;}

};

int main()

{

base1 obj1(11);

cout<<obj1.get_a()<<endl<<obj1.get_b()<<endl;

return 0;

}

程序输出结果
4.手写冒泡排序


面试官2

1.手写代码

反转int型数字(正负数)

程序可以通过大部分测试用例,还有部分情况未考虑到:

由于int能表示的范围为:-2147483648~21474836471000000009经过翻转后为9000000001超出了int所能表示的范围。

所以要检测结果是否超出了范围:

2.设计测试场景

自动贩卖机。

小米 软件开发岗

1.printf变参实现

printf(“%d%d”,a,b);

检测”%d%d”%的个数为需要输出的参数的个数,相邻两个%之间为参数的类型。

2 .内存分配情况

静态区

代码区

常量区

3.TCP慢启动算法

4. 层序遍历二叉树 每一行层输出换行符

关键在于记录当前行的最后一个结点,和根据当前行得到下一行的最后一个结点。在遍历当前行结点的时候,做两件事情:①判断当前结点是否为当前行的最后一个结点,如果为当前行的最后一个结点,则输出换行符,变为下一行,即将当前行的最后一个结点更新为当前行结点②不断更新下一行的最后一个结点。

void LevelDFS (BiTree *pRoot)

{

if(!pRoot)

return ;

queue< BiTree *>q_temp;

queue .push(pRoot);

BiTree *pTemp,last= pRoot,nextlast= pRoot;

while(queue.size())

{

pTemp= queue.front();

printf(“%d”, pTemp->val);

queue.pop();

if(pTemp->left)

{

queue .push(pTemp ->left);

nextlast= pTemp ->left;

}

if(pTemp->right)

{

queue .push(pTemp->right);

nextlast= pTemp ->right

}

if(pTemp== last)

{

printf(“\n”);

last=nextlast;

}

}

}

5.二分查找旋转的有序数组

利用二分,将数组分为(left,mid)及(mid+1,right)两部分,根据旋转有序数组的特点,这两部分肯定有一部分是有序的。如果(left,mid)有序,若data[left]<=key<=[mid],则在(left,mid)中继续二分查找,否则在(mid+1,right)中继续查找。对于(mid+1,right)亦如此。

特殊输入:数组长度为0 1 2

int RotateSearch(int * data , int length ,int key)

{

if(data==NULL||length==0)

return -1;

int low=0,high=length-1;

int mid=(low+high)/2;

while(low<=high)

{

mid=(low+high)/2;

if(data[mid]==key)

return mid;

if(data[mid]<data[high])//后半段有序

{

if(data[mid]<key)

low=mid+1;

else

high=mid-1;

}

else //前半段有序

{

if(data[mid]>key)

high=mid-1;

else

low=mid+1;

}

}

return -1;//未找到

}

◆地平线 嵌入式开发岗

面试官1

1.static用法 与extern区别 在文件中的定义

2.i++++i的区别

3.输出二叉树每层的最右结点

4.排序:10M内存容量排100M内存的数据

先将100M内存划分为1010M的内存,对每个10M的内存进行排序,使得每一个10M内存内部有序。接着定义10个指针指向划分10个内存的起始位置,取出当前10个指针中指向元素最小的那个放入输出文件中,并且指向最小元素的那个指针++,继续重复上述过程,直到10个指针每一个都指向内存末尾。

面试官2

1.简单介绍SPI总线、I2C总线

2.判断int数中1的个数

简单方法:将二进制数1011101会把其最右边为1的位的右边变为1,最右为1的位变为0,最右为1的为的左边保持不变,即可得到101101。将二者数相与,即可得到101100,此时数中1的个数就减少了1。通过累计上述过程的次数,直到二进制数变为0。可得到时间复杂度为结果的代码。

3. char型数转换成int

面试官3

1.TCP的三次握手 socket程序设计

2.构建二完全叉树使得其中序遍历是输入数组序列

◆百度

前两面基础知识跟前文问得差不多,手写代码是找序列中第K大的数,实现加减乘除的四则运算。第三面问的是项目以及在项目中如何团队合作的问题。

◆HR面
1.自己的优缺点
2.未来职业规划
3.如何看待加班

大致信息就是这样,还有些我认为重复的及记不太清的就没往上写。
在找工作中也遇见过被面试官diss过的情况,也有很疲惫的时候。我感觉当我们认定做一件事情的时候,就已经创造了一个小小的奇迹。
希望对大家有点参考作用吧,再次谢谢牛客上的网友,大家都加油~


#秋招##面经##嵌入式工程师##大疆##华为##地平线##百度#
全部评论
恭喜恭喜!
点赞 回复 分享
发布于 2018-11-21 11:16
lz能发一下大疆嵌入式开发岗的面经么,万分感谢
点赞 回复 分享
发布于 2019-08-19 16:52

相关推荐

点赞 评论 收藏
分享
评论
8
80
分享
牛客网
牛客企业服务