JAVA面试核心知识点(一):计算机网络
一·计算机网络
1.1 网络基础知识
OSI 七层协议(制定标准使用的标准概念框架):
物理层(传递比特流0101)->数据链路层(将比特流转换为逻辑传输线路)->网络层(逻辑编址,分组传输,路由选择)->传输层(传输协议同时进行流量控制)->会话层(自动寻址,建立不同用户之间的会话)->展示层(加密解密,转换翻译,缩解压缩)->应用层
应用层,表示层,会话层(数据),传输层(分段),网络层(分组,数据包),数据链路层(帧),物理层(比特)
OSI实现的TCP/IP的主流协议:
应用层(应用层,表示层,会话层),传输层,网络层,链路层(数据链路层,物理层)
1.2 tcp三次握手
传输控制协议TCP简介:
面向连接的,可靠的,基于字节流的传输层通信协议
将应用层的数据流分割成报文段并发送给目标节点的TCP层
数据包都有序号,对方收到则发送ACK确认,未收到则重传
使用校验和来检验数据再传输过程中谁否有误
TCP flags:
URG:紧急指针
ACK:确认标识
PSH:push
RST:重置链接
SYN:同步序号,建立链接
FIN:finsh标识,释放链接
额外:
单工通信:指消息只能单方向传输的工作方式,只占用一个信道。
半双工通信:指通信双方都能收发信息,但不能同时进行收和发的工作方式
全双工通信:指通信双方可同时进行收发消息的工作方式
tcp三次握手流程:
第一次握手: 建立连接时,客户端发送SYN包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
1.3 tcp四次挥手
tcp四次挥手流程:
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送
Client进入FIN_WAIT_1状态
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为
收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,
Server进入LAST_ACK状态
第四次挥手:Client收到FIN后,Clinet进入TIME_WAIT状态,接着发送一个ACK给
Server,确认序号为收到序号+1,Server进入CLOSE状态,完成四次挥手。
为什么需要四次挥手呢?
因为全双工通信,发送方和接受放都需要确认FIN报文和ACK报文。
1.4 tcp和udp的区别(传输层协议)
传输控制协议UDP简介:
面向非链接
不维护链接状态,支持同时向多个客户端传输相同的消息
数据包报头只有8个字节,额外开销较小
吞吐率只受限于数据生成速率,传输速率以及机器性能
尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
面向报文,不对应用程序提交的报文信息进行拆分或者合并
区别:
面向链接 vs 无连接
可靠性
有序性
速度
量级
1.5 tcp的滑动窗口
RTT和RTO
RTT:发送一个数据包到收到对应的ACK所花费的时间
RTO:重传时间间隔
TCP使用滑动窗口做流量控制与乱序冲重排
保证TCP的可靠性
保证TCP的流控特性
1.5 http相关(应用层协议)
超文本传输协议HTTP主要特点:
支持客户/服务器模式
简单快速
灵活(允许传输任何类型的数据对象)
无连接
无状态
请求/响应步骤
客户端连接到web服务器
发送HTTP请求
服务器接受请求并返回HTTP响应
释放链接TCP链接
客户端浏览器解析HTML内容
相关面试题:
1.在浏览器地址键入URL,按下回车之后经历的流程
DNS解析
TCP链接
发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束
2.HTTP状态码
1xx:指示信息--表示请求已接受,继续处理
2xx:成功--标识请求已被成功接收,理解,接受
3xx:重定向--要完成请求必须进项更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务端未能实现合法的请求
3.常见的状态码
200 OK:正常返回信息
400 Bad Request:客户端请求由于发错误,不能被服务器理解
401 Unauthorized:请求未授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在,eg,输入了错误的URL
500 Internal Server Error:服务器发生了不可预期的错误
503 Server Unavaliable:服务器当前不能处理客户端请求,一段时间后可能恢复正常
4.GET请求和POST请求的区别
HTTP报文层面:GET将请求信息放在URL,POST放在报文体中
数据库层面:GET符合幂等性和安全性,POST不符合
其他层面:GET可以被缓存,被储存,POST不行
5.Cookie和Session的区别
Cookie简介:
是由服务器发给客户端的特殊信息,以文本的形式存放在客户端
客户端再次请求的时候,会把Cookie回发
服务器接收到后,会解析Cookie生成与客户端相对应的内容
Cookie的设置以及发送
1. Client发动一个HHTP Request到Server
2. Server发送一个HTTP Response + Set-Cookie到Client
3. Client发送一个HTTP Requset + Cookie到server
4. Servre发送一个HHTP Response到Client
Session简介
服务器端的机制,在服务器上保存的信息
解析客户端请求并操作session id,按需保存状态信息
Session的实现方式
使用Cookie来实现
使用URL回写来实现
Cookie和Session的区别
Cookie数据存放在客户的浏览器上,Session数据放在服务器上
Session相对于Cookie更安全
若考虑减轻服务器负担,应当使用Cookie
1.6 http和https的区别
SSL(Security Sockets Layer,安全套接层)
为网络通信提供安全及数据完整性的一种安全协议
是操作系统对外的API,SSL3.0后更名为TLS
采用身份验证和数据加密保证网络通信的安全和数据的完整性
HTTPS数据传输流程
浏览器将支持的加密算法信息发送给服务器
服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
浏览器解密响应消息,并对消息进行验真,之后进行加密交互数据
HTTP和HTTPS的区别
HHTPS需要到CA申请证书,HTTP不需要
HTTPS密文传输,HTTP明文传输
连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
HTTPS=HTTP+加密+认证+完整性保护,比HTTP更加安全
1.7 socket相关
Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口。
JAVA面试核心知识点(一):计算机网络的更多相关文章
- JAVA面试核心教程|Java面试基础知识点总结
Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? byte——1 byte——Byte short——2 bytes——Short int——4 bytes——Integer lon ...
- java面试欠缺知识点总结
针对最近面试被问到的问题,总结自己欠缺的知识点,并要在接下来的1年内加强这些知识: Java方面:反射.线程concurrent包: Spring方面:Ioc和Aop.事务: 持久化框架:设计并实现分 ...
- 两年经验拿到蚂蚁金服,字节offer,附上金九银十BAT面试核心知识点整理
前言 我自己是本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找 ...
- Java面试常见知识点总结(一)
1.sleep()和wait(): Java中的多线程是一种抢占式的机制,而不是分时机制.抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行. ● 共同点: (1) 他们都是在多 ...
- Java 生态核心知识点整理
又到了求职的金三银四的黄金月份,我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作. 就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句 ...
- Java面试常见知识点总结(三)
21.volatile关键字: 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: (1) 保证了不同线程对这个变量进行操作时的可见性,即一个线程 ...
- Java面试常见知识点总结(二)
11.构造方法(构造器): 构造方法是一种特殊的方法,具有以下特点. (1) 构造方法的方法名必须与类名相同. (2) 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类 ...
- java面试核心基础(1)
1.以下代码的执行结果 String s1 = "helloworld"; String s2 = "hello" + new Stirng("wor ...
- 高级 Java 面试通关知识点整理!
1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式:动态代理和静态代理,什么时候使用动态代理. ...
随机推荐
- short URL 短网址实现原理剖析
short URL 短网址实现原理剖析 意义,简短便于分享,避免出现超长 URL 的字符长度限制问题 原理分析, 使用 HashMap 存储对应的映射关系 (长度不超过7的字符串,由大小写字母加数字共 ...
- 使用 js 实现十大排序算法: 计数排序
使用 js 实现十大排序算法: 计数排序 计数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- node.js module.exports & exports & module.export all in one
node.js module.exports & exports & module.export all in one cjs const log = console.log; log ...
- Flutter 创建透明的路由页面
原文 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends St ...
- np.mean(img, axis=(0, 1))
np.mean(img, axis=(0, 1)) img 是shape为(H,W,3)的图片 np.mean(img, axis=(0, 1)) 是求出各个通道的平均值,shape是 (3, ) ...
- 教你吃透CSS的盒子模型(Box Model)
CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...
- CPU使用率原理及计算方式
本文转载自CPU使用率原理及计算方式 CPU:超线程和多核 超线程(Hyper-Threading ) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上.单个采用超线程的C ...
- 对Map进行复合操作(读写)且并发执行时,无法保证业务的行为是正确的,对读写操作进行同步则可以解决。
ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如 Hashtable和Collections.synchronizedMap.线程安全的容器, ...
- 将springboot项目部署到服务器的tomcat中无法访问
第一步:让启动类继承SpringBootServletInitializer,并重写configure方法,关键代码如下 @SpringBootApplication public class MyS ...
- Docker 搭建nexus私服
一.概述 有三种专门的Maven仓库管理软件可以用来帮助大家建立私服:Apache基金会的Archiva.JFrog的Artifactory和Sonatype的Nexus.而Nexus是当前最流行的M ...