计算机网络


一网打尽天下。

计算机网络

  • 蚂蚁金服 2019.8.30
    • hashmap
    • mapreduce原理
    • 如何分发java包
    • B+树和红黑树
    • 反问
      • 国际化有专门的业务部门
      • 支付场景/支付手段

百度真题

  • 一面:-
    • 项目-
    • 讲一下AOP吧-
    • 动态代理和静态代理有什么区别-
    • TCP和IP报文是否会分片,分别在什么情况下会分片。
      • TCP分包之后是否还会进行ip分片,不会,TCP分段只有1460个字节,而ip分片有1500个字节
    • 做个题- 无限长轨道。两辆车同方向开,车会滴水,怎么让他们相遇。这题简直像脑筋急转弯。
    • 写一个斐波那契数列 递归式,要求改进 dp方式,要求优化空间 用三个变量代替数组进行dp,要求改进 我说数学公式,OK。
    • 讲一下Linux的内存结构,我说只会JVM的,他让我说一下。
    • 两者的内存如何映射,是什么关系,不会。 二面:
    • 项目讲一下,10多分钟去了。
    • 排序算法,复杂度,比较。快排的空间复杂度是logn
    • 讲一下OSI七层模型,我说了5层模型,然后他让我再补充一下,问了每层的作用,问了wifi属于哪一层。
    • 线程间的同步用什么方式,说了object方法。
    • 问我使用hashmap时重写哪两个方法,为什么要重写,巴拉巴拉,什么场景下重写。
    • 平时用过什么数据结构,list用哪些有啥区别。
    • Spring中的ioc和aop。ioc的注解有哪些。
    • autowired和resource有什么区别,作用域有哪些。
    • autowired如何配置两个类中的一个吗
    • 写一个单例模式,有点忘却了,巴拉巴拉搞出一个双重检测的,中间改了多次。
    • Java会有内存泄漏吗,三个区分别什么情况下会产生内存泄漏

概述

  • ISP
  • 主机之间的通信方式
    • 客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方。
    • 对等(P2P):不区分客户和服务器。
  • 电路交换与分组交换
    • 电路交换 - 电路交换对线路的利用率很低,往往不到 10%。
    • 分组交换 存储转发过程 - 每个分组都有首部和尾部,包含了源地址和目的地址等控制信息
  • 排队时延 + 处理时延 + 传输时延 + 传播时延
  • 计算机网络体系结构
    • 五层 - 应用层 - 传输层 - 网络层 - 数据链路层 - 物理层
      • 运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
    • OSI
      • 表示层 - 会话层
    • TCP/IP 在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。
    • 路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。
  • 物理层
    • 通信方式 - 单工通信 - 半双工通信 - 全双工通信
    • 带通调制把数字信号转换为模拟信号
  • 链路层
    • 封装成帧 - 透明传输 - 差错检测
    • 信道分类
      • 广播信道 一个是使用信道复用技术,一是使用 CSMA/CD 协议
      • 点对点信道 - PPP 协议
    • 信道复用技术 - 频分复用 - 时分复用 - 统计时分复用 - 波分复用 - 码分复用 - 码分复用需要发送的数据量为原先的 m 倍
    • CSMA/CD 协议
      • CSMA/CD 表示载波监听多点接入 / 碰撞检测 - 2τ 为 争用期 - 截断二进制指数退避算法
    • PPP 协议
    • MAC 地址
      • MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。
      • 一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。
    • 局域网
      • 主要有以太网、令牌环网、FDDI 和 ATM 等局域网技术,目前以太网占领着有线局域网市场。
  • 网络层
    • 地址解析协议 ARP - 网际控制报文协议 ICMP - 网际组管理协议 IGMP
    • IP 地址编址方式 - 分类 - 子网划分 - 无分类(无分类编址 CIDR)
    • 地址解析协议 ARP - ARP 实现由 IP 地址得到 MAC 地址。
    • 网际控制报文协议 ICMP - ICMP 报文分为差错报告报文和询问报文。
      • Ping ICMP Echo 请求报文 - Traceroute UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
    • 虚拟专用网 VPN - 有三个专用地址块
    • 网络地址转换 NAT
    • 路由器的结构
      • 路由选择和分组转发(交换结构、一组输入端口和一组输出端口)
    • 路由选择协议
      • 自治系统内部的路由选择:RIP 和 OSPF
      • 外部网关协议 BGP , BGP 只能寻找一条比较好的路由,而不是最佳路由。
  • 传输层
    • 传输层提供了进程间的逻辑通信
    • 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
    • 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。
    • TCP 的三次握手
      • 第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。 客户端发送的连接请求如果在网络中滞留
    • TCP 的四次挥手
      • 客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
    • TCP 可靠传输
      • TCP 如何保证可靠传输:
        • 确认和超时重传
        • 数据合理分片和排序
        • 流量控制
        • 拥塞控制
        • 数据校验
      • TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
    • TCP 滑动窗口
    • TCP 流量控制
    • TCP 拥塞控制 - TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
  • 应用层
    • 域名系统
    • 文件传送协议 - FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
    • 动态主机配置协议
    • 远程登录协议
    • 电子邮件协议 - SMTP - POP3 - IMAP
    • Web 页面请求过程
      • DHCP 配置主机信息
  • HTTP
    • Cookie
      • Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。由于之后每次请求都会需要携带 Cookie 数据,因此会带来额外的性能开销(尤其是在移动环境下)。
    • Session
      • 除了可以将用户信息通过 Cookie 存储在用户浏览器中,也可以利用 Session 存储在服务器端,存储在服务器端的信息更加安全。Session 可以存储在服务器上的文件、数据库或者内存中。也可以将 Session 存储在 Redis 这种内存型数据库中,效率会更高。
    • Cookie 与 Session 选择
      • Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;
      • Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
      • 对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。
  • socket
    • I/O 模型
      • 阻塞式 I/O
      • 非阻塞式 I/O
        • 应用进程执行系统调用之后,内核返回一个错误码。应用进程可以继续执行,但是需要不断的执行系统调用来获知 I/O 是否完成,这种方式称为轮询(polling)。
      • I/O 复用
      • 信号驱动 I/O
      • 异步 I/O
        • 异步 I/O 与信号驱动 I/O 的区别在于,异步 I/O 的信号是通知应用进程 I/O 完成,而信号驱动 I/O 的信号是通知应用进程可以开始 I/O。
    • I/O 复用
      • select/poll/epoll 都是 I/O 多路复用的具体实现,select 出现的最早,之后是 poll,再是 epoll。
    • 应用场景
      • select 的 timeout 参数精度为 1ns,而 poll 和 epoll 为 1ms,因此 select 更加适用于实时性要求比较高的场景,比如核反应堆的控制。
      • poll 没有最大描述符数量的限制,如果平台支持并且对实时性要求不高,应该使用 poll 而不是 select。
      • epoll 应用场景–只需要运行在 Linux 平台上,有大量的描述符需要同时轮询,并且这些连接最好是长连接。