1、简述memcpy和strcpy的区别
-
memcpy可以拷贝多种数据类型,strcpy只能拷贝字串
-
memcpy拷贝数据是可以控制拷贝的数据长度
-
strcpy拷贝数据时如果被拷贝的数据长度比要存放数据的空间大,则会导致内存溢出。
2、信号量与互斥锁的区别?
信号量用于线程的同步,互斥锁用于线程的互斥。
- 同步:表示第一个线程执行返回后,第二个线程才能执行,按顺序执行。
- 互斥:一般用于访问共享资源,同一时刻只能有一个线程访问共享资源。
3、简述程序编译的过程?
- 预处理
- 编译
- 汇编
- 链接
4、static的用法?
- 修饰局部变量,局部变量只初始化一次
- 修饰全局变量,全局变量只能在本文件中使用
- 修饰函数,函数只能在本文件中调用
5、const的用法?
- const修饰变量,代表整个变量的值不可被修改。
6、关键字volatile有什么含意?并给出三个不同的例子。
volatile一般会修饰一些并行设备的状态寄存器,以免在优化时,读到的时备份寄存器里的值,没有读到真正的寄存器值
-
并发设备的状态寄存器。
-
多线程中的共享变量。
7、 一个参数既可以是const还可以是volatile吗?解释为什么?
可以,只读的状态寄存器就会用const和volatile去修饰。const代表这个状态寄存器只读,volatile代表这个寄存器不会被意外的改变。
8、一个指针可以是volatile 吗?解释为什么?
可以,表示指针指向的对象不能被优化,比如中断子程序中执行buffer的指针
9、位操作:定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变?
a | = 1<<3
a & = ~(1<<3)
10、中断(Interrupts)
中断是打断正在执行的任务去执行另一个任务,另一个任务返回后,接着执行原来的任务。中断一般分为硬中断和软中断
硬中断是硬件设备产生的中断。
软中断是由指令产生的中断,
中断上文:
中断下文:
11、结构体(struct)和联合体(union)的区别?
联合体内的所有变量共用一段内存空间,而结构体的内存大小是所有成员变量的内存总和,
12.什么是预处理,何时需要预编译?
- 包含头文件
- 宏定义
- 条件编译
13.一个32位的机器,该机器的指针是多少位?
32位机器时4bit,64位机器是8bit.
14.局部变量能否和全局变量重名?
可以,局部变量可以屏蔽全局变量
15.引用与指针有什么区别?
- 引用是别名,在定义时就需要初始化。
- 指针指向的是地址,可以在定义时不用初始化。
- 指针指向的是地址,引用是别名。
16. 线程是否具有相同的堆栈?
- 每个线程都有自己的堆栈
17、TCP与UDP有啥区别?
- TCP是面向连接的,UDP是无连接的。
- TCP提供可靠的数据传输。
- TCP提供端对端的流量控制。
- TCP数据传输时按序进行的。
18、TCP使用socket编程实现客户端服务器端通信。
服务器端:
- 创建socket
- bind绑定ip和端口号。
- listion监听
- accept接收连接。
- recv接收数据
- close socket.
客户端:
- 创建socket。
- connect连接
- send发送数据
- close socket.
19、gdb用法,怎么显示某个变量具体值,如何查看崩溃时的异常信息。
-
b :打断点
- l:查看代码
- n:执行下一句
- set 设置变量的值
- p查看变量的值
20、线程有没有用过,有几种同步方式。
- 互斥量
- 临界资源
- 信号量
- 事件对象
21、数组和指针各自有什么优缺点?
- 数组在定义时要指定空间大小,静态分配,局部分配,局部释放
- 指针,动态分配空间,手动释放。
22、windows消息机制?
消息队列
23、多进程、多线程的优缺点?
- 多进程切换时,效率不高,消耗的资源大
- 多线程切换时效率高,消耗的资源小。
- 多线程中一个线程崩溃了,其他线程也就崩溃了
- 多进程不会出现这样问题,健壮性高。
24、什么时候用进程,什么时候用线程。
25、多进程、多线程同步(通讯)的方法。
26、进程的空间模型。
内核区
用户区:
- 数据区:存放一下全局变量,静态变量
- 代码段:只读的
- 堆:
- 栈:
27、进程线程的状态转换图 什么时候阻塞,什么时候就绪?
28、父进程、子进程的关系以及区别?
- 第一次执行程序,先创建父进程,然后创建子进程
- 子进程拷贝父进程的堆栈空间、数据空间
29、什么是进程上下文、中断上下文?
进程上文:从用户空间切换内核空间需要保存的cpu状态、堆栈等
进程下文:在内核空间执行的程序。
中断上文:触发中断后,硬件的一些参数和数据需要传到内核空间,这就是中断上文。
中断下文:内核空间执行的中断处理函数
30、一个进程可以创建多少线程,和什么有关?
31、并发,并行、同步,异步,互斥,阻塞,非阻塞的理解?
32、什么是线程同步和互斥?
33、线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
34、孤儿进程、僵尸进程、守护进程的概念?
35、如何创建守护进程?
36、正确处理僵尸进程的方法?
37、new和malloc的区别
38、malloc的底层实现?
39、在1G内存的计算机中能否malloc(1.2G)?为什么?
40、C语言检索内存情况 内存分配的方式?
41、extern”C” 的作用?
42、数组到底存放在哪里?
43、struct和class的区别?
44、char和int之间的转换?
45、TCP UDP适用场景?
46、TCP为什么是可靠连接?
47、典型网络模型,简单说说有哪些?
48、URI(统一资源标识符)和URL(统一资源定位符)之间的区别?
49、常见的排序算法?
50、Linux内核的组成?
51、用户空间与内核通信方式有哪些?
52、系统调用read()/write(),内核具体做了哪些事情?
53、内核态,用户态的区别?
54、linux的内核是由bootloader装载到内存中的?
55、为什么需要BootLoader?
56、 Linux内核同步方式总结?
57、为什么自旋锁不能睡眠 而在拥有信号量时就可以?
58、linux下检查内存状态的命令?
59、大小端的区别以及各自的优点,哪种时候用?
60、一个程序从开始运行到结束的完整过程(四个过程)?
61、什么是堆,栈,内存泄漏和内存溢出?
62、堆和栈的区别?
63、死锁的原因、条件 创建一个死锁,以及如何预防?
64、硬链接与软链接的区别?
65、虚拟内存,虚拟地址与物理地址的转换?
66、计算机中,32bit与64bit有什么区别?
67、中断和异常的区别?
68、中断怎么发生(中断的触发方式),中断处理大概流程?
69、 Linux 操作系统挂起、休眠、关机相关命令
70、数据库为什么要建立索引,以及索引的缺点?
71、CPU 内存 虚拟内存 磁盘/硬盘 的关系?
72、CPU内部结构?