秋招结束 感谢牛客
- const
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;
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;
}
面试官2
1.手写代码
反转int型数字(正负数)
程序可以通过大部分测试用例,还有部分情况未考虑到:
由于int能表示的范围为:-2147483648~2147483647。1000000009经过翻转后为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内存划分为10个10M的内存,对每个10M的内存进行排序,使得每一个10M内存内部有序。接着定义10个指针指向划分10个内存的起始位置,取出当前10个指针中指向元素最小的那个放入输出文件中,并且指向最小元素的那个指针++,继续重复上述过程,直到10个指针每一个都指向内存末尾。
面试官2
1.简单介绍SPI总线、I2C总线
2.判断int数中1的个数
简单方法:将二进制数101110减1会把其最右边为1的位的右边变为1,最右为1的位变为0,最右为1的为的左边保持不变,即可得到101101。将二者数相与,即可得到101100,此时数中1的个数就减少了1。通过累计上述过程的次数,直到二进制数变为0。可得到时间复杂度为结果的代码。
3. 将char型数转换成int型
面试官3
1.TCP的三次握手 socket程序设计
2.构建二完全叉树使得其中序遍历是输入数组序列
◆百度