4.4-4.5
一、语言基础
1.1C++的多态性是如何实现的?
https://www.jianshu.com/p/94a653059139
1.2纯虚函数和虚函数的区别
https://www.runoob.com/w3cnote/cpp-virtual-function.html
1.3指针跟引用的区别
(a)指针是一个变量,只不过这个变量存储的是一个地质,而引用跟原来的变量实质上是一个东西,只不过是原变量的一个别名
(b)引用不可以为空,当被创建的时候,必须初始化,而指针可以是空
(c)指针可以有多级,但是引用只有一级
(d)指针的值在初始化后可以改变,但是引用进行初始化后就不会再改变了
(e)sizeof引用得到的是指向变量的大小,而指针得到的是本身的大小
(f)如果返回动态分配的对象或内存,必须使用指针,否则可能引起内存泄漏
二、数据库
2.1truncate,delete,drop的区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP 放在一起比较:
TRUNCATE TABLE :删除内容、释放空间但不删除定义。
DELETE TABLE: 删除内容不删除定义,不释放空间。
DROP TABLE :删除内容和定义,释放空间。
2.2表的三大范式
第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上
2.3索引的作用是什么?
索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
三、计算机网络
3.1TCP三次握手及为什么不是两次呢?
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
为什么不是两次:
在服务端对客户端的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果客户端并没有收到服务端的回应呢?此时,客户端仍认为连接未建立,服务端会对已建立的连接保存必要的资源,如果大量的这种情况,服务端会崩溃。
3.2tcp http socket 区别 联系
tcp 传输层协议 http 应用层 socket 是 操作系统对 网络工具的抽象
支持 TCP/IP 协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示
https://blog.csdn.net/pashanhu6402/article/details/96428887
3.3time_wait发生在什么时候,有什么作用
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
3.4如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
四、Linux
4.1怎么查看当前进程?怎么执行退出?怎么查看当前路径?
查看当前进程: ps
执行退出: exit
查看当前路径: pwd
4.2删除文件 删除指定目录下文件
rm -f
find . -type f -delete ???
4.3查看磁盘
df/du
五、操作系统
5.1进程和线程以及它们的区别
(a)进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;
(b)线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;
(c)一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;
(d)进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。
5.2分页和分段有什么区别(内存管理)?
段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)
页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。
5.3局部性原理
(a). 时间上的局部性:最近被访问的页在不久的将来还会被访问;
(b). 空间上的局部性:内存中被访问的页周围的页也很可能被访问。