基础知识2020-4-8

计算机网络

1简单介绍下HTTP的长连接和短连接
2简述计算机网络中的七层模型
3常见的额HTTP状态码有哪些
4TCP的三次握手过程?为什么会采用三次握手?
5简述TCP协议的四次挥手协议

答案

1 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议。TCP短连接:客户端向服务器发起请求,服务器接到请求,然后双方建立连接。客户端向服务器发送消息,服务器向客户端发送回应,这时一次读写就完成了。此时双方都可以发起close操作。短连接一般只会在客户端和服务器端传递一次读写操作。TCP长连接:在客户端和服务器端建立连接完成一次读写操作后连接不会主动关闭,后续的读写操作会继续使用这个连接。
2 七层:物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
物理层 通过媒介传输比特,确定机械及电气规范(bit)
数据链路层 将比特组装成帧和点对点的传递(帧 frame)
网络层 负责数据包从源到宿的传递和网际互连(包 packet )
传输层 提供端到端的可靠报文传输和错误回复(段 segment)
会话层 建立、管理和终止会话(会话协议数据单元SPDU)
表示层 对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层
五层:物理层 数据链路层 网络层 运输层 应用层
四层:网际接口层 网际层 运输层 应用层
3 2开头 表示请求成功
3开头 表示请求被重定向
4开头 表示请求错误
5开头 表示服务器错误
4 TCP的三次握手过程:主机A向主机B发送连接请求,主机B对主机A的报文段进行确认,主机A再次对主机B的确认进行确认。
1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
采用三次握手是为了防止失效的连接请求报文段突然又传送到B。失效的情况如下:A向B发送连接请求acp1,因为网络延迟导致晚些到达B。A长时间收不到确认会再次发送连接请求acp2,B接收到第二次的请求后发送确认ack2,A针对确认ack2发送确认ack3,此时连接建立。连接断开后,此时acp1到达B,B发送确认ack1,r如果采用二次握手,则由于A的忽视B迟迟收不到确认,导致B资源浪费。
5 (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

操作系统:

1 简单介绍进程和线程以及他们的区别
2进程有哪几种状态
3进程的通信方式有哪些
4线程同步的方式有那些
5操作系统中进程调度策略有哪几种

答案:

1 进程是系统资源调度和分配的一个独立单位。线程是进程的实体,是CPU调度和分配的基本单位。一个进程可以有多个线程,多个线程可以并行开发。进程作为资源分配的基本的单位,其下属的线程可以共享进程被分配到的资源。
1、一个程序至少有一个进程,一个进程至少有一个线程
2、线程的划分度小于进程,使得多线程程序的并发性高
3、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有把多个线程看成多个独立的应用。
2 就绪状态 等待获得cpu资源,等待分配处理机资源
运行状态 占用处理机资源运行,处于此状态的进程数小于等于CPU数
阻塞状态 进程等地某种条件,在条件满足之前无法执行。
3进程之间无法共享资源,进程之间的通信必须通过进程间通信(IPC)完成。主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、SOCKET。
管道主要分为:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)
1、管道是一种半双工的通信方式,数据只能单项流动,并且只能在具有亲缘关系的进程间流动,进程的亲缘关系通常是父子进程
2、命名管道也是半双工的通信方式,它允许无亲缘关系的进程间进行通信
3、信号量是一个计数器,用来控制多个进程对资源的访问,它通常作为一种锁机制。
4、消息队列是消息的链表,存放在内核中并由消息队列标识符标识。
5、信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
6、共享内存就是映射一段能被其它进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。
4 1、互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
2、信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
3、事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。
5 FCFS(先来先服务)、优先级、时间片轮转、多级反馈

Linux

1绝对路径用什么符号表示 当前目录 上层目录用什么表示 主目录用什么表示 切换目录用什么表示
2怎么查看当前进程 怎么退出终端 怎么查看你当前工作路径
3怎么清屏 怎么退出当前命令 怎么执行睡眠 怎么查看当前用户的id 查看指定帮助指令
4 ls命令执行什么功能 可以带那些参数 有什么区别
5 建立软链接 和 硬链接的指令

答案

1 绝对路径 : /etc//init.d
当前目录 ./ 上层目录 …/
主目录 ~/ 切换目录 cd 指令
2 查看当前进程 ps
退出终端 exit
查看当前路径 pwd
3清屏 clear
彻底退出命令 ctrl + C
执行睡眠 ctrl + Z fg回复后台
执行 id 指令查看登录账户的uid gid和所属分组及用户名
查看指定帮助 man adduser
4 ls 查看指定目录下的文件
ls -a 列出所有文件
ls -l 列出文件的详细信息 包括大小字节数 执行权限
5 ln -s slink source
硬链接 ln link source

java知识点

1JDK和JRE有什么区别
2 == 和equals 的区别是什么
3两个对象的hashCode()相同,则equals()也为true吗
4final在Java中有什么作用
5java中Math.round(-1.5)结果输出多少

答案

1 JDK Java Development Kit ,java工具包,提供了java的开发环境和运行环境
JRE Java Runtime Environment,java运行环境,为Java的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。
2 查看区别
3两个对象的哈希值相同并不代表这两个键值相同
4final 修饰的类叫最终类,该类不能被继承
final修饰的方法不能被重写
final修饰的变量叫常量,常量必须初始化
5 Mrth.round(x)的运算规则 x+0.5 向下取整
Math.round(-1.5) = -1

python

1一行d代码实现1-100求和
2如何在一个函数内部修改全局变量
3列出5个python标准库
4字典如何删除键和合并两个字典
5简述python的GIL

答案

1 sum(range(1,101))
2 利用global在函数声明中修改全局变量
a =5
def fn():
global a
a = 40
fn()
print(a)
3
os 提供与操作系统相关的函数
math 数学运算
sys 用于命令行参数
datatime 处理日期时间
re 正则匹配
4 del 和 updte方法
基础知识2020-4-8_第1张图片
5GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
点击查看GIL

你可能感兴趣的:(java面试知识积累)