1、int a[10]={1,2,3,4,5,6,7,8,9,0};
int *p=&a[1];
则p[6]等于_
答:8 ,考察数组和指针的基本用法;
2、整数数组清零的方法?
bzero(),memset()。
memset()
是C语言标准库中的一部分,用于将内存区域设置为特定的值。包括0;
bzero()用于将内存区域设置为零;
3、sizeof();测试变量所占地址的字节数
// 问sizeof(A) = ?
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};
【标准答案】8
// 求sizeof(name1)?
struct name1{
char str;
short x; int num;
};
【标准答案】8
// 求sizeof(name2)?
struct name2{
char str;
int num;
short x;
};
【标准答案】12
4、输出下方程序结果(考查数组偏移)
main() { char *str[]={"ab","cd","ef","gh","ij","kl"};
char *t;
t=(str+4)[-1];
printf("%s",t);
}则显示__
答:"gh"
5、小端:低位字节数据存储在低地址大端:高位字节数据存储在低地址
例如:int a=0x12345678;(a首地址为0x2000) 大端格式如下:
0x2000 0x2001 0x2002 0x2003
0x12 0x34 0x56 0x78
6、异步IO和同步IO区别
如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完,相反,异步IO操作在后台运行,
IO操作和应用程序可以同时运行,提高系统性能,提高IO流量; 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行,而异步文件IO中,
线程发送一个IO请求到内核,然后继续处理其他事情,内核完成IO请求后,将会通知线程IO操作完成了。
7、输出下方程序输出结果(强转)
int foo(void)
{
int i;
char c=0x80;
i=c;
if(i>0)
return 1;
return 2;
}返回值__
答:为2;因为i=c=-128;如果c=0x7f,则i=c=127。
8、 对下方的计算改为效率最高的算法
a=b*2; a=b/4; a=b%8 ; a=b/8*8+b%4; a=b*15;
答: a=b*2 -> a=b<<1;
a=b/4 -> a=b>>2;
a=b%8 -> a=b&7;
a=b/8*8+b%4 -> a=((b>>3)<<3)+(b&3)
a=b*15 -> a=(b<<4)-b
9、写出几个常用的c关键字(往往考应届生居多)
c的关键字共32个
*数据类型关键字(12)
char,short,int,long,float,double,unsigned,signed,union,enum,void,struct
*控制语句关键字(12)
if,else,switch,case,default,for,do,while,break,continue,goto,return
*存储类关键字(5)
auto,extern,register,static,const
*其他关键字(3)
sizeof,typedef,volatile
10、输出下方程序结果(考查赋值语法)
int main() {
int j=2;
int i=1;
if(i = 1) j=3;
if(i = 2) j=5;
printf("%d",j);
} 则 输出__
答: 输出为5;如果再加上if(i=3)j=6;则输出6。不是==号;if条件执行结果是非0
11、Norflash与Nandflash的区别
(1)、NAND闪存的容量比较大;NorFlash采用并行结构;每个存储单元都有一个独立的地址线,支持随机访问,适用于执行代码和数据存储。(Nor-音“nuo”-挪的快)
而NandFlash则采用串行结构,数据以页的形式进行读写,不支持随机访问,更适用于大规模存储和数据传输。(nand-音“难”-不支持随机访问-存储仓库-f'we的困难)
所以:
(2)在读写速度上,NorFlash的读取速度较快,可以快速执行代码和加载数据,适用于实时性要求较高的应用。而NandFlash的写入速度则相对较快,但读取速度略慢于NorFlash,因此更适合对实时性要求不高的大容量数据存储。
可靠性方面,NorFlash的擦写次数相对较低,为10万次,因此不适合频繁擦写。相比之下,NandFlash的擦写次数达到了100万次,表现出更高的耐用性。成本也更低
(3)、由于NandFlash没有挂接在地址总线上,所以如果想用NandFlash作为系统的启动盘,就需要CPU具备特殊的功能, 如s3c2410在被选择为NandFlash启动方式时会在上电时自动读取NandFlash的4k数据到地址0的SRAM中。
12、区分原码、反码、补码的区别
反码:对原码除符号位外的其余各位逐位取反就是反码
补码:负数的补码就是对反码加1
正数的原码、反码、补码都一样
13、pthread线程的相关函数,信号的函数。
我一个同行告诉我,他去顺某丰面试linux岗位的时候,有面到这个题目:
答:
pthread_t tid;
pthread_create(&tid,NULL,pthread_func,NULL);//创建线程
pthread_join(tid,NULL); //等待子线程结束,并回收资源
pthread_detach(tid); //与当前进程分离
pthread_exit(NULL);//退出调用线程
pthread_cancel(tid);//取消线程
pthread_mutex mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_init(&mutex,NULL);//初始化一个互斥锁
pthread_mutex_lock(&mutex);//对互斥锁上锁
pthread_mutex_unlock(&mutex);//对互斥锁解锁
sem_t sem;
sem_init(&sem,0,1);//创建信号量并初始化它的值
sem_wait(&sem);//信号量的值减1
sem_post(&sem);//信号量的值加1
14、内存管理MMU的作用
*内存分配和回收
*内存保护
*内存扩充
*地址映射
- 虚拟地址映射到物理地址:MMU负责将程序的逻辑地址(虚拟地址)转换为内存中的物理地址。这种地址映射机制使得程序能够在比实际物理内存大得多的虚拟内存空间中运行,从而提高了内存的利用率。
- 内存保护:MMU可以确保多个进程在各自分配到的内存区域内操作,互不干扰。这通过为每段特定的内存区块设置访问权限来实现,如只读、只写或可读写。这样的内存保护机制有助于防止一个进程破坏其他进程的信息,增强了系统的稳定性和安全性。
- 内存扩充:MMU通过提供比实际物理内存大得多的虚拟地址空间,实现了内存的扩充。这使得程序能够运行比处理器实际物理内存多很多的内存空间,提高了系统的整体性能。
- 物理地址访问权限管理(分配回收):MMU可以管理物理地址的访问权限,包括读、写等操作的权限设置。这有助于防止未授权的内存访问,从而保护系统的安全性。
- Cache缓存控制:MMU还负责cache缓存控制,例如决定物理页是否允许缓存等。这有助于优化内存访问的性能,提高系统的响应速度。
总的来说,MMU通过其地址映射、内存保护、内存扩充、物理地址访问权限管理和缓存控制等功能,为操作系统和处理器提供了强大的内存管理支持,使得系统能够更高效地利用内存资源,提高系统的稳定性和性能。