记录面试准备和面试过程中的学习(一) 计网

314 阅读7分钟

最近实习面试很多,虽然大都失败,也有不少到了终面最终挂掉,凡是过往,皆为序章,从今天开始,认识自己的不足,开始新的学习之旅。

计算机网络

网络连接过程

计算机网络的关键在于抓住一个核心部分,一个数据包是如何从本地的程序上发到对方的程序的,或者最常见的问法就是浏览器打开到渲染的过程。

浏览器首先需要使用DNS解析域名,流程如下:先查找浏览器缓存和系统缓存(hosts),未命中则向本地DNS(网关DNS)发送DNS查询报文,如果有则直接返回,否则向根域名服务器发送解析请求,根域名服务器返回低一级域名服务器的地址,本地DNS服务器则向更低一级发送解析请求,重复直到查询到域名的地址,然后本地DNS缓存该地址,主机浏览器缓存该地址。(中间会有ARP)

获得ip地址后浏览器建立一个tcp socket,进行三次握手与目的端建立连接,(路由转发),目的主机取出 TCP SYN报文,发送到80/443端口的欢迎套接字,回应SYNACK,双方建立连接,浏览器发送一个HTTP的get报文,目的主机发送响应报文,浏览器读取http响应,显示网页。

http

上面提到了http,对http协议也做一下总结

首先是http协议的格式:请求报文由请求行,请求头部,请求体组成

  1. 请求行包含着URL(附加参数),请求方法,版本号等信息
  2. 请求头部包含着客户端的一些属性,以key-value方式描述
  3. 请求体包含着传输的实体信息 响应报文相似的由响应行,响应头,响应体构成
  4. 响应行包含着响应协议及版本,状态码:1xx收到请求,2xx处理成功,3xx重定向,4xx错误(客户端),5xx错误(服务端)。200成功,303重定向到URL,404无资源,500错误
  5. 响应头,服务端属性
  6. 传输实体

http的方法,最常用的为get和post

  1. get,请求指定url的资源
  2. post,发送数据
  3. head,同get,但是不要响应实体
  4. put,请求建立资源
  5. delete,请求删除资源
  6. options,服务端支持的选项

最重要的一点需要说明,http协议只是规定了数据的规范格式,实际上你也可以发送一个报文,post方法,数据放在url,只是需要服务器知道怎么处理而已。

http版本

  1. http 0.9 只能get方法,只能获取html
  2. http 1.0 增加post,head,格式改变,需要头部描述数据,支持各种数据格式(通过Content-Type),但是一次tcp连接仍然只支持一次请求响应,有keep-alive字段控制tcp连接不断的方法,但是仍然有很多问题,需要每次报文都使用keep-alive,响应报文需要发送content-length来区分响应(速度慢可能会出问题),使用代理时可能会有问题等诸多问题。
  3. http 1.1 增加了put等方法,增加了持久连接,TCP连接默认不关闭,使用connection:close主动关闭,使用trunk编码(长度加数据)发送数据。管道机制允许不等到响应发送下一次请求,响应按照请求发送顺序发送。
  4. http 2.0 变为二进制协议(和文本协议的区别为二进制协议只能哪部分二进制代表什么意思,文本协议则解码为文本后再按照文本部分解读),加上头部信息压缩(发送索引),减少了信息长度。允许不按顺序的发送发送多个请求和响应(通过数据流编号)。服务端主动推送。
  5. http 3.0 基于udp

cookie和session

一、Cookie Cookie的特性:会话数据保存在浏览器客户端

Cookie的底层实现原理:

 1)服务器创建cookie对象,把会话数据存储到cookie对象中。

      new Cookie("name","value");

 2)服务器发送cookie信息到浏览器

      response.addCookie(cookie);

 3)浏览器从响应头中得到服务器发送的Cookie然后保存到浏览器本地。

原理图如下所示:

服务器怎样获取Cookie?

浏览器在下次访问服务器时,会将本地存放的Cookie信息通过请求头的方式发送给服务器

 

 

Cookie易错点:

1)Cookie不能跨浏览器

2)Cookie默认关闭浏览器失效。如果不想让Cookie默认关闭浏览器失效,可以使用setMaxAge(int expiry) 来设置有效时间

      正整数:表示保存的时间,以秒为单位

     负整数:表示浏览器关闭cookie就失效了!

     零:表示删除同名的cookie数据

3)Cookie数据类型只能保存非中文字符串类型。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

4)Cookie的不可跨域名性

 

二、Session Session的特性:会话数据保存在服务器端

Session底层实现原理:

服务器创建一个session之后,会在响应头里面将sessionId返回给浏览器。浏览器从响应头中获取sessionId,然后保存在浏览器本地。

具体步骤如下:

1)服务器创建session对象

      HttpSession session=req.getSession();

      默认是true,表示如果没有session,就会创建一个session

      如果是false,表示如果没有找到session,不会创建一个session

2)设置session对象

      void setMaxInactiveInterval(int interval)  : 设置session的有效时间

3)保存会话数据到session对象

     void setAttribute(java.lang.String name, java.lang.Object value)  

4)服务器通过响应头将sessionId返回给浏览器

5)浏览器从响应头中获取sessionId保存到本地硬盘

原理图如下所示:

 

服务器怎样获取session?

浏览器在下次访问服务器的时候,会将本地存放的sessionId通过请求头的方式发送给服务器

 

 

 Session易错点:

1)两个getSession方法:

    getSession(true) / getSession()  : 创建或得到session对象,如果没有匹配的sessionId,自动创建新的session对象。

    getSession(false): 得到session对象,如果没有匹配的sessionId,不创建

2)session默认情况下30分钟服务器自动回收。如果想要修改session回收时间可以用setMaxInactiveInterval(int interval)

3)关闭浏览器session不会失效(因为session保存在服务器端),但是sessionId会失效(因为sessionId保存在浏览器端)

TCP/UDP

TCP:三次握手,四次挥手,TIME_WAIT,(序列号,滑动窗口,流量控制),拥塞控制,快速重传。粘包问题。过于经典,不多赘述。

UDP:不可靠

区别::UDP特点:无连接;尽最大努力交付;面向报文;无拥塞控制;支持一对一、一对多、多对一和多对多;首部开销小(只有8字节);不可靠的;时延小;实时性强.

TCP特点:面向连接;面向字节流;提供流量控制&拥塞控制;点对点(一对一);首部开销大(固定首部20字节);提供可靠交付服务。

UDP适应于对实时要求较高、不允许有较大时延的情况,如航空信息应用。UDP数据报和TCP 报文段首部相同部分:源端口、目的端口、检验和.

RESTful

一种通用规范的API响应结构:

  1. URL+方法格式,所有资源统一URL
  2. 不要返回纯文本,返回JSON

https/ssl