计算机网络
分层协议?各个层是做什么的
自底向上:物理层、 数据链路层、网络层、运输层、应用层
物理层:屏蔽传输媒体和通信手段的差异;
数据链路层:接收网络层交下来的数据表,组装成帧进行传输
网络层:提供IP通信
运输层:负责进程通信(TCP/UDP)
应用层:通过应用进程之间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。(DNS/FTP/HTTP/SMTP)
网络层的协议?
IP、ARP、ICMP。
IP:IP地址32位
ARP:根据IP地址解析出相应的硬件地址
ICMP:Ping
TCP和UPD的区别
TCP:面向连接、点对点交互通信、提供可靠交付、 全双工通信、面向字节流
UDP:无连接,支持一对一、一对多、多对多、多对一的交互通信,尽最大努力交付,面向报文
TCP是如何实现可靠传输的?
滑动窗口+超时重传+选择确认ACK
TCP三次握手四次挥手?
三次握手:防止已失效的连接请求报文段突然传送到服务机,产生错误,导致资源浪费。
四次挥手:防止已经失效的连接请求报文出现在本次连接中,导致资源浪费。
HTTP的报文格式?
请求报文:请求行(方法、版本、url)、请求头(浏览器信息)、请求体(实体数据)
响应报文:状态行、首部行、响应体(实体数据)
HTTP请求类型?
Get、Post、Put、Delete、Trace、Option、Head、Connect
Get和Post的区别?
GET 用于获取资源,而 POST 用于传输实体主体;
GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中,因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码;
GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变;
GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是;
常见的状态码有哪些?
2xx:200ok、
3xx:301永久重定向、302临时重定向、304条件不满足
4xx:400报文语法错误、401认证失败、403拒绝、404NotFound
5xx:500服务器错误、503无法处理请求
从网页上数据一个URL到产生渲染效果,其中发生了什么?
1、DNS域名解析
2、请求和响应数据
3、浏览器加载渲染
操作系统
进程和线程的区别
首先是对进程的定义,为什么会出现进程:
在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性,以及其运行结果不可再现性的特征。由此决定的通常的程序是不能参与并发执行的,否则,程序的运行也就失去了意义。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,引入了进程的概念。
接着是线程的定义,为什么有了进程还会出现线程:
如果说引入进程的目的是为了使程序能够并发执行,以提高资源利用率和系统吞吐量,那么,在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性。
那么进程和线程的本质区别是?
在传统OS中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位。但是在引入线程的OS中,已把线程作为调度和分派的基本单位,进程则作为资源分配单位,因而线程是能独立运行的基本单位。
进程直接的通信方式有哪些?
从进程是否在同一个操作系统环境下去考虑,主要两种情况:两个进程在同一个操作系统、两个进程在不同的操作系统
①共享存储,如磁盘、内存
②管道通信(Linux的管道符)
③消息传递机制(直接、间接通信)
④Client-Server通信(Socket、RPC)
线程的实现方式?
①内核级线程
②用户级线程
③组合方式
什么是死锁?
一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
死锁产生的条件?
①互斥(一段时间内,某资源只能被一个进程占用)
②请求与保持(获得资源的进程可以发起新的资源请求,若新的资源被占用,进程被阻塞,但是原本占有的资源不会释放)
③不可抢占(进程已经获得的资源在未使用完成之前不能被其他进程抢占,只能自己释放)
④循环等待(发生死锁时,必然有个进程——资源的循环链)
怎么处理死锁?
分为两种情况:死锁产生前、死锁产生时。
死锁产生前:预防死锁(破坏请求保持、不可抢占、循环等待条件)、避免死锁(银行家算法)、检测死锁(资源分配图);
死锁产生时:解除死锁(抢占资源、终止进程)