一、先简单介绍下 makefile 的作用是什么?
作用:管理工程文件。通过工程文件 makefile 的编写,对工程下不同目录
中的文件的编译、链接的方式、顺序进行描述。
在编写 makefile 后,编译工程只要求输入 make 命令,极大地提高了编译效率
二、数据库 与 文件进行数据存储 有哪些区别?
数据库 属于结构化管理的存取数据模式, 而文件属于 自定义结构 的存取数据模式
区别:
1、文件系统用文件将数据长期保存在外存上,数据库系统用数据库统一存取数据
2、文件系统中的程序和数据有一定的联系,数据库系统中的程序和数据分离
3、文件系统用操作系统中的存取方法对数据进行管理,数据库系统用 DBMS 统一管理和控制数据
4、文件系统实现以文件为单位的数据共享,数据库系统实现以记录和字段为单位的数据共享
三、为什么数据库选择 sqlite ? 还有哪些嵌入式数据库?特点是什么?
1、sqlite:支持事件,不需要配置,不需要安装,也不需要管理员;支持大部分 sql92;
文件保存,文件可在不同字节序的机器上使用,支持内存大;
系统精简,内存占用少(少于 250 kb),大部分应用比目前常见的客户端/服务端的数据快,没有其它依赖源代码开放
2、eXtremeDB:实时数据库,开销小,可用于资源紧凑型系统,不基于任何文件系统
3、Firebird嵌入服务器版:单文件型小型数据库,支持事件,支持存储过程、触发器
4、mSQL:单用户数据库管理系统,小型的关系数据库,对 SQL 支持不完全,运行简单操作较快
四、TCP 与 UDP 区别?
TCP:面向连接、可靠的通信方式,适用于传输大量数据、对可靠性要求高的场合
UDP:无连接、不可靠的通行方式,但由于无连接,传送速度较快,适用于对可靠性
要求不高、数据量较小、速度要求较快的场合
TCP 与 UDP 基本区别?
1、基于连接与无连接
2、TCP要求系统资源较多,UDP较少
3、UDP程序结构较简单
4、流模式(TCP)与 数据报模式(UDP)
5、TCP保证数据正确性,UDP可能丢包
6、TCP保证数据顺序,UDP不保证
TCP 与 UDP 区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的、即发送数据之前不需要建立连接
2、TCP提供可靠的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送频率降低(对实时应用很有用,如 IP 电话,实时视频会议等)
4、每一条 TCP 连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节(开销大);UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
五、什么时候选择 TCP ,什么时候选择 UDP?
TCP:传输大量数据、可靠性要求较高的场合;
UDP:传输少量数据、对可靠性要求不高、速度要求较快的场合
UDP应用场景:
面向数据报方式、网络数据大多为短消息、拥有大量客户端、对数据安全性无特殊要求、
网络负担非常重,但对响应速度要求高
六、TCP是如何保证可靠数据传输的?
通过三次握手确认连接;通过序列化应答和必要的重发机制提供可靠的传输流控制;
使用数据窗口机制协商队列大小实现数据队列传输
七、端口号与ip、网关的作用?
端口号:指计算机与外界通讯的接口,分为逻辑端口与物理端口,端口号为 0~65535
IP:是网络之间互连的协议
网关:又称为网间连接器、协议转换器。用于在网络层上实现网络互联,对收到的信息
重新打包以适应目的系统的要求。
八、进程间通信方式有哪些?各自的优缺点及应用选择?
1、管道(无名):只能单向传递,且只能在有亲缘关系的进程中使用
有名管道:也是单向传递,但可以在非亲缘进程中使用
2、信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
3、消息队列:消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点
4、共享内存:由一个进程创建,但多个进程都可以访问。往往与其他通信机制,如信号量配合使用,来实现进程间的同步和通信
5、信号量:可以用来控制多个进程对共享资源的访问(用于线程同步)
6、套接字:套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
九、进程与线程
1、进程是指在系统中运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说
进程是指程序执行的一个实例,即它是程序已经执行到某种程度的数据结构的汇集。
从内核的观点来看,进程的目的就是担当分配系统资源(CPU时间,内存等)的基本单位。
2、线程是系统分配处理器时间资源的基本单位,或者说进程之内独立执行的一个单元执行流。
3、进程——资源分配的最小单位 线程——程序执行的最小单位(CPU调度和分派的最小基本单位)
线程是比进程更小的能独立运行的基本单位;一个进程由几个线程组成(拥有很多相对独立的执行流
的用户程序共享应用程序的大部分数据结构);线程与同属一个进程的其他的线程共享进程所拥有的全部资源
十、进程与线程的区别?
1、进程——资源分配的最小单位,线程——程序执行的最小单位
2、进程拥有独立的堆栈空间和数据段,每启动一个进程必须分配给它独立的地址空间
线程只是进程中独立执行的一个单元执行流,有独立的堆栈段但是共享数据段,没有独立的地址空间
3、多进程的程序要比多进程的程序健壮 (进程有独立的地址空间,一个进程崩溃,在保护模式下
不会对其它进程产生影响,而线程只是一个进程中的不同执行路径,一个线程死掉就等于整个进程死掉)
4、进程切换时,消耗资源大,效率要差一些。
5、对于一些要求同时进行并且又要共享变量的并发操作,只能用线程,不能用进程
线程的优点:
1、线程是一种非常"节俭"的多任务操作。(启动一个新的进程必须分配给它独立的地址空间,
建立众多的数据表来代码段、堆栈段和数据段)
2、线程开销小、切换速度快,效率高
3、线程间方便的通信机制。(进程有独立的数据空间,数据传递只能通过复杂的通信机制,而线程的
数据可以直接为其他线程所用,这不仅快捷而且方便)
4、使 CPU 系统更加有效 (因为操作系统会保证当线程数不大于CPU数目,不同的线程运行于不同的CPU上)
5、改善程序结构 (举例:使用进程会不由自主使用if else 来判断 pid ,使程序结构繁琐,但使用线程,基本可以甩掉它
当然程序内部执行功能单元需要使用的时候还是要使用,所以线程对程序结构的改善有很大帮助)
十一、进程与线程如何选择
1、需要频繁创建销毁的优先使用线程;因为对于进程来讲创建和销毁一个进程代价是很大的
2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可
提高应用程序的响应
3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分步的用进程,多核分步
用线程
4、并行操作使用线程,如C/S架构的服务器端并发线程响应用户的请求
5、需要更稳定安全时,适合选择进程;需要速度时,选择线程