从2月底工作至今已经有半年,好手算不上,老手更不敢当,但是终归算是入行了。
自从在boss上多登录了几次之后,发现有一些公司开始给自己发消息。推测可能是boss无良的使用了自己的登录频率做了状态更新和推荐。
上周四约了昨天也就是周一晚7点的面试,但是无奈昨天雨下的太大了,所以改到了今天,同样是晚7点。
连续两天早8点半上班,感觉确实有些劳累。
下午六点,匆匆下班后,骑上了小摩单车,骑行半小时后,到达了公司。
前台人事给了两张A4纸,4页笔试题。
前半部分基本是各大刷题网站的题目,基本是以下几类:
指针的应用:指向数组的指针,指向函数的指针等等。
内存对齐:给定结构体,求结构体大小,注意可能会在一个结构体中包含另一个结构体。
定义变量时指定位:这个确实没有用过
二叉树的深度优先搜索:这个题目感觉不如换做链表操作,对于嵌入式来讲
后半部分的话,就是内核相关的问题。
现在回忆题目如下:
1、写出如下c语句
①定义一个指向整型数据的指针数组,包含5个指针。
int *p[5];分析,[]优先级比*高,所以p先与[5]结合,int * 修饰的是数组的内容,所以每个数组的成员都是一个指向整型数据的指针
②定义一个指向整型数据的指针
int * p,没啥说的
③定义一个函数指针,该函数有一个整型参数
int *func (int n)
④我忘了,应该是函数指针相关
2、计算结构体的大小
typedef strucnt data
{
int a;
int a[5];
char aa;
}
struct data2
{
int aaa;
data ss;
double aaaa;
}
求sizeof(data) 和 sizeof(data2)
如果是32位的话,int 占用4字节,char 占用1 字节,int数组占用20字节,但是由于内存按照4字节,也就是最大int对齐,所以占用28字节。即最后补出3字节
对于data2,由于其中最大的是double。占据8字节,所以最终是要按照8字节对齐,
int占据4字节,无需补足,
data占据28字节,无需补足,double占用8字节,共计40字节,是8 的倍数,无需补足,应该是记忆有误。不该是这样的
总结:内存对其三原则。
1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。
2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐。
感觉这块有问题**********************************
3、位域结构体的大小
应注意,如果前一个变量剩下的位数不足以存放下一个,那么下一个从下个字节开始存放。
4、几条简单的汇编指令,ldr mov add
MSR MRS
5、二叉树的深度优先搜索
以后的题目就记不清顺序了
1、内核怎么通过虚拟地址访问到物理地址
2、简述platform机制
3、i2c总线的框架
4、irq和fiq的区别
5、中断和轮询效率,并举例各自的内核应用
6、i2c的总线锁死怎么解决
7、PCIe的原理
8、内核进程的调度
9、多线程相关的,不记得了,因为不懂
其余的题目实在记不得了。明天解答