1.linux命令下,如何快速的删除代码中的某一行,
10G dd
sed '2d' jason.c
sed -i 's/原字符串/替换字符串/g' filename ####替换文件中的所有匹配项
示例,在代码中,把printf换成了printk
2.如何在代码中使用shell命令替换所有的字符串
sed -i 's/jason/smh/'g filename(不得不说,小厂的面试官就很喜欢面这些东西)
3.c语言中const的作用
修饰成员变量:定义成常量,将对于宏常量,可以进行类型检查,节省内存空间,提高了内存效率
修饰函数参数:
修饰成员函数:修饰成员函数使得任何类型的成员函数都无法修改成员变量。
4.结构体中为什么要内存对齐
某些硬件设备只能读取内存对齐的数据,读取非对齐的数据会抛出异常,读取非对齐的数据时,cpu会抛出异常,
内存对齐的优点:便于在不同的平台间移植,提升cpu的访问效率,因为cpu读内存是一块一块读取的。
5.哪些变量不受内存对齐的规则束缚
static静态变量
string 的字节大小是32个bit的。
结构体里面的数组或者结构体?
6.说一下僵尸进程的出现
用wait或waitpid进行回收
7.读写锁,自旋锁,互斥锁
自旋锁
当一个线程在获取锁的时候,如果该锁已经被其他线程获取的时候,那么这个线程就会一直在那里循环检测,,不断的判断那个锁是否被获取 ,直到获取那个锁为止。
保护的临界区必须非常小。
读写锁
读操作是共享的,写操作是排他的,可以允许多个线程进行读,但是只允许一个线程写
只允许进程间进行操作。
8,进程间通信方式(信号量)
信号量是一个原子操作,用户对其操作都是原子操作,只能进行p操作或者v操作,如果sv的值大于0,那么就把-1,如果sv==0就把他挂起来。
举个例子,两个进程间刚享信号量,如果一个进程执行了p操作,那么它就可以进入临界区,使sv-1;那个如果第二个进程试图进入临界区,就会被挂起,除非等到第一个线程释放v(sv),使其恢复操作。
9.共享内存为什么是最快的进程间通信方式
1.先举个管道的例子
如果是管道的话,那么服务器端必须先写入数据到缓冲区,再把缓冲区的内容复制到管道,管道再把内容复制到接收缓冲区,之后再把缓冲区的内容读到客户端
而共享内存
不需要任何的拷贝,调用系统调用mmap()把普通文件映射到内存空间,这样就可以向对普通文件操作那样,对内存操作。
注意mmap的映射大小,不能超过文件大小。有人实验过的。如果超过了,写是照写,但是文件中没有,另外的进程读不出来。
10.字符设备,块设备,网络设备的区别与联系
字符设备:只能一个字符一个字符的读,不能随机读取内存设备,读数据必须按照先后顺序去进行,字符设备是面向流的设备,键盘,串口,控制台,鼠标,led.
块设备:从设备的任意位置读取一定长度的文件,比如硬盘,磁盘,sd卡