计算机网络

基础篇

OSI七层协议:

  • 应用层
  • 表示层
  • 会话层
  • 运输层
  • 网络层
  • 数据链路层
  • 物理层

TCP/IP的四层协议:

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层

五层协议:

  • 应用层(报文)
  • 运输层(报文段-TCP或用户数据报-UDP)
  • 网络层(数据报、分组)
  • 数据链路层(帧)
  • 物理层(比特)

应用层:

协议:

TCP UDP
SMTP DNS
POP3(或IMAP) TFTP
TELNET RIP
HTTP DHCP
FTP SNMP
NFS
IGMP

应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。

HTTP状态码:

1xx表示通知信息,如请求收到了或正在进行处理
2xx表示成功,如接受或知道了。
3xx表示重定向,如要完成请求还必须采取进一步的行动。
4xx表示客户的差错,如请求中有错误的语法或不能完成。
5xX表示服务器的差错,如服务器失效无法完成请求。

传输层:

传输层有两个传输协议,分别是

  • TCP
    • 面向连接的
    • 点对点的(一对一)
    • 可靠交付
    • 全双工通信
    • 面向字节流
  • UDP
    • 无连接的
    • 尽最大努力交付,即不保证可靠交付
    • 面向报文的
    • 没有拥塞控制
    • 支持一对一、一对多、多对一和多对多的交互通信
    • 首部开销小

TCP:

MSS:TCP 最大报文段长度。

当传输层的数据包大小超过MSS,就要将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在 TCP 协议中,我们把每个分块称为一个 TCP 段

端口:

应用 常见端口
FTP 21
TELNET 23
SMTP 25
DNS 53
TFTP 69
HTTP 80
SNMP 161
SNMP(trap) 162
HTTPS 443

网络层:

相关协议:

  • ICMP(网际控制(Control)报文协议):应用PING
  • IGMP(网际组(Group)管理协议):多播
  • IP
  • ARP(地址解析协议):知道IP地址,解析MAC地址,RARP协议则相反

IP协议要经常使用ARP协议,而ICMP和IGMP协议要使用IP协议。

IP协议:IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文。

数据链路层(即下面的网络接口层)中规定了所能传送的帧的数据部分长度上限——最大传送单元MTU。

IP地址:

配合子网掩码才能算出 IP 地址 的网络号和主机号。

  • 一个是网络号,负责标识该 IP 地址是属于哪个「子网」的;
  • 一个是主机号,负责标识同一「子网」下的不同主机;

IPv4协议:32位

除了寻址能力, IP 协议还有另一个重要的能力就是路由。实际场景中,两台设备并不是用一条网线连接起来的,而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。

IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘。

互联网的路由选择协议:

  • 内部网关协议IGP
    • RIP
    • OSPF:开放最短路径优先,使用Dijkstra最短路径算法
  • 外部网关协议EGP
    • BGP

网络接口层:(对应着数据链路层和物理层)

生成了 IP 头部之后,接下来要交给网络接口层Link Layer)在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上。

面试题

Java基础面试篇

概念

说一下Java的特点

Java的优势和劣势是什么?

Java为什么是跨平台的?

JVM、JDK、JRE二者关系?

为什么Java解释和编译都有?

jvm是什么?

编译型语言和解释型语言的区别?

Python和java区别是什么?

数据类型

八种基本的数据类型

int和long是多少位,多少字节的?

long和int可以互转吗?

数据类型转换方式你知道哪些?

类型互转会出现什么问题吗?

为什么用bigDecimal不用double?

装箱和拆箱是什么?

Java为什么要有Integer?

Integer相比int有什么优点?

那为什么还要保留int类型?

说一下integer的缓存

面向对象

怎么理解面向对象?简单说说封装继承多态

多态体现在哪几个方面?

多态解决了什么问题?

面向对象的设计原则你知道有哪些吗

重载与重写有什么区别?

抽象类和普通类区别?

Java抽象类和接口的区别是什么?

抽象类能加final修饰吗?

接口里面可以定义哪些方法?

抽象类可以被实例化吗?

接口可以包含构造函数吗?

解释java中的静态变量和静态方法

非静态内部类和静态内部类的区别?

非静态内部类可以直接访问外部方法,编译器是怎么做到的?

关键字

Java中final作用是什么?

深拷贝和浅拷贝

深拷贝和浅拷贝的区别?

实现深拷贝的三种方法是什么?

泛型

什么是泛型?

对象

java创建对象有哪些方式?

Java创建对象除了new还有别的什么方式?

New出的对象什么时候回收?

如何获取私有对象?

反射

什么是反射?

反射在你平时写代码或者框架中的应用场景有哪些?

注解

能讲一讲Java注解的原理吗?

对注解解析的底层实现了解吗?

Java注解的作用域呢?

异常

介绍一下Java异常

Java异常处理有哪些?

抛出异常为什么不用throws?

try catch中的语句运行情况

try{return “a”} fianlly{return”b”}这条语句返回啥

object

==与equals有什么区别?

hashcode和equals方法有什么关系?

String、StringBuffer、StringBuilder的区别和联系

Java新特性

Java8你知道有什么新特性?

Lambda表达式了解吗?

Java中stream的APl介绍一下

Stream流的并行API是什么?

completableFuture怎么用的?
Java21新特性知道哪些?

序列化

怎么把一个对象从一个jvm转移到另一个jvm?

序列化和反序列化让你自己实现你会怎么做?

将对象转为二进制字节流具体怎么实现?

设计模式

volatile和sychronized如何实现单例模式

代理模式和适配器模式有什么区别?