2024年安卓最全深入浅出Android网络优化之网络筑基(后篇)(2),字节跳动面试官说身体没问题了吧是不是凉了

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

「本地回环地址(Loopback Address):127.0.0.1,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会废弃的接口。在 Windwos 操作系统中也有相似的定义,所以一般在安装网卡前就可以 ping 通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否是正常的」。代码如下所示:

quchao@quchaodeMacBook-Pro EMC-MBANK-ANDROID % ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.068 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.103 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.081 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.081 ms

分类地址的补充
  • D 类地址:1110…
  • E 类地址:1111…

它们都仅用作特殊用途。

划分子网

某公司拥有256名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?

分配 B 类地址,但是一个 B 类地址所能容纳的主机数量为 2^16-2,这会造成极大的浪费。为了解决这个问题,需要划分子网。

例如:将 193.10.10.0 这个 IP 划分为 193.10.10.0 ~ 193.10.10.127 与 193.10.10.128 ~ 193.10.10. 255。

子网这么多,如何判断某个 IP 的网络号?

子网掩码

「快速地判断某一个 IP 属于哪一个子网号,通过 IP & 子网掩码 = 该 IP 对应的子网号」。子网掩码的组成特点如下所示:

  • 1)、「与 IP 地址一样,都是32位」
  • 2)、「由连续的1和连续的0组成」
  • 3)、「某一个子网的子网掩码具备网络号位数个连续的1」

例如 A、B、C 类的子网掩码地址:A类:255.0.0.0,B类:255.255.0.0,C类:255.255.255.0

无分类编址 CIDR
  • 1)、「CIDR 中没有 A、B、C 类网络号 和 子网划分的概念」
  • 2)、「CIDR 将 网络前缀 相同的 IP 地址称为一个 CIDR 地址块」
  • 3)、「网络前缀是任意位数的」
  • 4)、「相比原来子网划分更加灵活」

「CIDR 使用了斜线记法,例如:193.10.10.129/25 表示网络号为 25 位,主机号为 7位」。一般家里都是使用 /24 的 CIDR,此时整个网络里面的第一个地址为 192.168.0.1,往往就是私网的出口地址。例如:家里面的电脑连接 WIFI,WIFI 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是广播地址。

loopback 是什么?

「即环回接口,通常会被分配到 127.0.0.1 这个地址,它用于本机内部通信,经过内核处理后直接返回,不会再任何网络中出现」

某公司总共有 200 名员工,需要拆分成两个部分,每个部分使用一个小型网络,如何使用 CIDR 进行划分?

可以使用一个 /24 作为一个中型网络(在 CIDR 中被称为超网),旗下有两个 /25 作为一个小型网络(在 CIDR 中被称为子网)。

3、ARP 协议与 RARP 协议

在 IP 数据的转发过程中,A 将 IP 数据报交给数据链路层,并告知其目的 MAC 地址是 E。这里 A 是如何知道目的 MAC 地址是 E 的呢?

1)、ARP(Address Resolution Protocol)地址解析协议

「ARP 协议将网络层 IP 32位地址转换为数据链路层 MAC 48位地址」

ARP 缓存池表

「缓存了 IP 地址到硬件地址之间的映射关系。有缓存时直接从缓存中取出即可,没有缓存时则会和 MAC 地址表获取地址时使用的广播形式类似」,即

  • 1)、「E 检查 MAC 地址表,发现没有 C 的信息」
  • 2)、「E 将广播 A 的数据包到除 A 以外的端口」
  • 3)、「E 将收到来自 B、C 的回应,并将地址记录」

「ARP 缓存是 ARP 协议和 RARP 协议运行的关键。此外,ARP 缓存表中的记录并不是永久有效的,有一定的期限」

查看 ARP 缓存表

使用 arp -a 命令,如下所示:

quchao@quchaodeMacBook-Pro EMC-MBANK-ANDROID % arp -a
? (22.1.253.254) at 0:10:db:ff:10:0 on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]

ARP 协议

「ARP 协议被直接封装在了数据链路层中的数据帧里面的」

既然 ARP 协议是直接被封装在数据链路层中的数据帧里面的,那么为什么它是属于网络层的内容?

主要是因为 「ARP 协议使用到了网络层的 IP 地址」

ARP 协议内容

2)、RARP(Reverse Address Resolutioni Protocol)逆地址解析协议

  • 1)、「将数据链路层 MAC 48位地址转换为网络层 IP 32位地址」
  • 2)、「除了类型 8035 标识为 RARP 协议,其它内容与 ARP 协议类似」

3)、小结

  • RARP 协议与 ARP 协议是 TCP/IP 协议栈里面的基础协议,它们的操作对程序员是透明的。
  • 理解它们有助于我们理解网络分层的细节。
  • 「它们是协调数据链路层和网络层配合工作的重要协议」

4、网络地址转换 NAT(Network Address Translationn) 技术

「不改变 IP 地址的网关,我们称为转发网关;改变 IP 地址的网关,我们称为 NAT 网关」

为什么要使用 NAT?

  • 1)、「IPv4 最多只有40+亿个 IP 地址」
  • 2)、「早期 IP 地址的不合理规划导致 IP 号浪费」

1)、内网地址

特点
  • 1)、内部机构使用。
  • 2)、避免与外网地址重复。
三类内网地址
  • 「A 类:10.0.0.0~10.255.255.255(支持千万数量级设备)」
  • 「B 类:172.16.0.0~172.31.255.255(支持百万数据级设备)」
  • 「C 类:192.168.0.0~192.168.255.255(支持万数量级设备)」

对于公司,它可以在外部使用全球唯一的外网 IP 地址,通常在内部使用一个 B 类内网地址即可。

同理,对于家庭可以在外部使用全球唯一的外网 IP 地址,通常在内部使用一个 C 类内网地址即可。

问题:内网的多个设备使用同一个外网 IP 请求外网服务,外部是怎么样才能知道是哪一个内网设备请求的呢?

「使用 NAT ,它用于多个主机通过一个公有 IP 访问互联网的私有网络,并减缓了 IP 地址的消耗,但是增加了网络通信的复杂度」

2)、外网地址

  • 全球范围使用。
  • 全球公网唯一。

3)、端口映射

例如如下两个 NAT 转换过程:发送数据时,A 设备内网地址和端口号 => 外网地址与端口号:192.168.2.11:6666 => 173.21.59.10:16666,B 设备内网地址和端口号 => 外网地址与端口号:192.168.2.10:7777 => 173.21.59.10:17777。

「由于同时转换了 Port ,即进行了 端口映射,NAT 也可称为 NA§T」

5、ICMP(Internet Control Message Protocol)协议

1)、ICMP 协议拆解

功能

ICMP 协议主要是用于 「辅助 IP 协议发送与接收数据的,它可以报告错误信息或异常情况」

ICMP 报文结构

「ICMP 协议被封装在 IP 数据报的数据之中,其也分为 报文首部与报文数据。如果需要使用 ICMP 协议,则需要在 IP 协议首部的8位协议中写入1,以表明 IP 数据所携带的具体数据是 ICMP 协议的」

类型
1、差错报告报文

差错报告报文具体分为 「七种类型」,而 「大部分的报文类型是由类型的值和具体代码组成的」。具体如下图所示:

2、询问报文

询问报文具体分为 「两类」,它仅仅是由 「类型的值」 决定的。具体如下图所示:

常用的 ping 就是查询报文,是一种主动请求并且获得主动应答的 ICMP 查询报文,如下:

  • ICMP ECHO REQUESTZ「对 ping 的主动请求进行网络抓包」
  • ICMP ECHO REPLY「主动请求的回复」

所以,ping 发的包也是符合 ICMP 格式的,仅仅增加了一些自己的格式。如下所示:

  • 1)、「标识符:派出去两队侦察兵,一队是侦查战况的,一队是去查找水源的,要有个标识才能区分」
  • 2)、「序号:派出去的侦察兵,都要进行编号,便于知道前线的战况」
  • 3)、「发送请求时间值:存放在选项数据中,用来计算往返时间和路程的长短」

ping 命令执行时,源主机会构建一个 ICMP 请求数据包,其中有两个最重要的字段,如下:

  • 1)、「类型:对于请求数据包,此值为8」
  • 2)、「顺序号:区分连续 ping 时发出的多个请求数据包。每发出一个请求数据包,顺序号会自动加1」

2)、ICMP 报文的应用

Ping 应用

例如 ping www.wanandorid.com 网站,如下所示:

quchao@quchaodeMacBook-Pro cmmp-core-client-android % ping www.wanandroid.com
PING www.wanandroid.com (47.104.74.169): 56 data bytes
64 bytes from 47.104.74.169: icmp_seq=0 ttl=51 time=51.877 ms
64 bytes from 47.104.74.169: icmp_seq=1 ttl=51 time=52.416 ms
64 bytes from 47.104.74.169: icmp_seq=2 ttl=51 time=48.942 ms
64 bytes from 47.104.74.169: icmp_seq=3 ttl=51 time=45.816 ms
64 bytes from 47.104.74.169: icmp_seq=4 ttl=51 time=48.336 ms
64 bytes from 47.104.74.169: icmp_seq=5 ttl=51 time=42.358 ms
ç64 bytes from 47.104.74.169: icmp_seq=6 ttl=51 time=49.428 ms
64 bytes from 47.104.74.169: icmp_seq=7 ttl=51 time=41.963 ms

使用 Ping 命令对网络故障进行排查

遇到网络不通的问题时,除了直接 ping 目标 IP 地址,头脑中年还应该有一个清晰的网络拓扑图,并且需要清楚地知道一个包从源地址传到目标地址要经过哪些设备,然后逐个 ping 中间的这些设备或机器,通常的排查步骤如下所示:

  • 1)、「ping 回环地址 127.0.0.1,不通,说明计算机使用的协议栈有问题,需要重装系统或协议栈」
  • 2)、「Ping 网关地址(路由地址),内网 ping 192.168.0.1/ 192.168.1.1,通,说明本机到路由器的地址是通的。不通,则说明 WIFI、网线是有问题的」
  • 3)、「Ping 远端地址 ping www.wanandroid.com,不通,则说明家中到 ISP 的网络之间是有故障的。这个时候就要从电信、联通、移动等 ISP 来排查问题了」

此外,除了 ping 之外,我们还可以通过 tcpdump -i eth0 icmp「查看发出的包有没有到达某个点,以及回复的包到达了哪个点,以便更容易推断出错的位置」

ping 不同一定就代表网络不通吗?

不是,如果不在我们的控制范围内,很多中间设备都是禁止 ping 的,但是 ping 不通不代表网络不通。这个时候就要使用 Telnet,通过其他协议来测试网络是否畅通。

Traceoute 应用

「用于探测 IP 数据报在网络中走过的路径」

在 IP 数据报的首部中,有一个8位的生存时间 TTL,它表示了 IP 数据报文在网络中的寿命,每经过一个设备,TTL 减1,「当 TTL = 0时,网络设备必须丢弃该报文,并会发送 ICMP 终点不可达差错报文」

而 Traceoute 则巧妙地应用了 ICMP 终点不可达差错报文与 TTL 机制,为了探测 IP 数据报文走过的路径,它会发送一个 UDP 数据包。将 TTL 设置为1,一旦遇到一个路由器,它就会牺牲了。接着返回一个 ICMP 包,就是网络差错包,类型是时间超时,这样就能知道一个路由器有多远。具体机制如下所示:

  • 1)、「首先,会封装一个 TTL 为1的数据报文,当到达第一个网络之后,TTL 会减为0,第一个网络会发现 TTL 减为0了,此时就会往源主机发送 ICMP 终点不可达的差错报文。这个时候源主机就会把第一个网络的 IP 地址记录下来」
  • 2)、「然后,会封装一个 TTL 为2的数据报文,当到达第二个网络之后,TTL 会减为0,第二个网络会发现 TTL 减为0了,此时就会往源主机发送 ICMP 终点不可达的差错报文。这个时候源主机就会把第二个网络的 IP 地址记录下来」
  • 3)、「后面按 TTL + 1,到达的网络次序 + 1的规律进行,直到到达目的主机,最后得到目的主机的 IP 地址」

这样,源主机就接收到了所有的路径信息,就可以输出该数据报在网络中的路径了。traceroute 命令的使用示例如下所示:

tracert github.com (Windows 为 tracert github.com)
quchao@quchaodeMacBook-Pro cmmp-core-client-android % traceroute github.com
traceroute to github.com (13.250.177.223), 64 hops max, 52 byte packets
1 22.4.93.254 (22.4.93.254) 11.676 ms 7.331 ms 9.620 ms
2 59.40.180.129 (59.40.180.129) 977.679 ms 440.943 ms 10.672 ms
3 49.186.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.186.49) 9.207 ms 12.436 ms 10.636 ms
4 125.176.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.176.125) 13.202 ms 10.292 ms 28.478 ms
5 183.56.65.6 (183.56.65.6) 11.763 ms 9.236 ms
183.56.65.18 (183.56.65.18) 11.392 ms
6 202.97.94.134 (202.97.94.134) 18.357 ms
202.97.94.150 (202.97.94.150) 18.175 ms
202.97.94.134 (202.97.94.134) 36.600 ms
7 202.97.94.98 (202.97.94.98) 245.161 ms
202.97.12.29 (202.97.12.29) 19.504 ms
202.97.12.41 (202.97.12.41) 22.256 ms

为什么查找一个 IP 地址时可能会看不到中间有些路由器的信息?

因为有的路由器根本不会返回这个 ICMP 包。

6、路由

1)、路由简介

路由表包括了 「目的 IP 地址与下一跳 IP 地址的映射关系」

自治系统(Autonomous System)
  • 一个自治系统 AS 是处于一个管理机构下的网络设备群。
  • AS 内部网络自行管理,并提供一个或多个出入口。

「从网络的分级层级来看,每一个主干 ISP 都可以认为是一个主干 AS,每一个地区 ISP 都可以认为是一个地区 AS,而每一个公司、校园、家庭都可以认为是一个小的 AS」

2)、路由协议

  • 自治系统内部路由的协议:内部网关协议(RIP、OSP)
  • 自治系统外部路由的协议:外部网关协议(BGP)

例如家庭 AS1 与公司 AS2 它们直接使用的网关协议示意图如下所示:

我们可以把网络拓扑图转换为图,其中

  • 「每一个顶点表示一个网络、路由器或计算机」
  • 「每一条边表示一条网络路径」

「路由算法的本质即图论的算法,但由于复杂的网络环境,所以路由算法比图论算法要更加复杂」

如何设计一个好的路由算法?

  • 1)、正确、完整:算法是正确与完整的。
  • 2)、计算简单:算法在计算上应该尽可能地简单。
  • 3)、适应变化:算法可以适应网络中的各种变化。
  • 4)、稳定、公平:算法是稳定与公布的。
1、内部网关路由协议之 RIP(Routing Information Protocol) 协议
距离矢量(DV)算法
  • 1)、「每一个节点使用两个向量 Di 和 Si」
  • 2)、「Di 描述的是当前节点到别的节点的距离」
  • 3)、「Si 描述的是当前节点到别的节点的下一节点」
  • 4)、「首先,每一个节点会与相邻的节点交换向量 Di 和 Si 的信息」
  • 5)、「每一个节点根据交换的信息更新自己的节点信息:首先运算,然后把当前计算的结果和距离矢量进行比较,如果距离更小的话,则更新自己的距离矢量」
RIP 协议的特点
  • 1)、「RIP 协议是使用 DV 算法的一种路由协议」
  • 2)、「把网络条数(hop)作为 DV 算法的距离」
  • 3)、「RIP 协议每隔30s交换一次路由信息」
  • 4)、「RIP 协议认为跳数 > 15 的路由则为不可达路由」
RIP 协议的过程
  • 1、「路由器初始化路由信息(两个向量 Di 和 Si)」

  • 2、「对相邻路由器 X 发过来的信息,对信息的内容进行修改」

  • 1)、「检索本地路由,将信息中新的路由插入到路由表里面」

  • 2)、「检索本地路由,对于下一跳为 X 的,更新为修改后的信息」

  • 3)、「检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新路由表」

  • 3、「如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)」

RIP 协议的优势

「实现简单,开销很小」

RIP 协议的弊端

假设有一个 A-B-C 的链路,假如 A 路由节点出现问题无法使用,那么 B、C 就会互相询问,知道它们各自的跳数一直累加到超过 15 跳。

  • 1)、「随便相信相邻节点」
  • 2)、「自己不思考,视野局限,导致故障信息传递慢」
  • 3)、「限制了网络的规模,只能在较小的网络中使用,因为它把跳数大于15的认为不可达」
2、内部网关路由协议之 OSPF 协议
链路状态(LS)协议

与 RIP 协议的不同:

  • 1)、「向所有的路由器发送消息」
  • 2)、「消息描述该路由器与相邻路由器的链路状态」
  • 3)、「只有链路状态发送变化时,才发送更新消息」

因此,可以看到 「LS 协议解决了 RIP 协议 随便相信隔壁路由、视野不够的问题」

Dijkstra 算法

特点:

  • 1)、「Dijistra 算法是著名的图算法,它解决的是计算最短路径的问题」
  • 2)、「解决有权图从一个节点到其它节点的最短路径问题」
  • 3)、「以起始点为中心,向外层层扩展」

过程:

  • 1、「初始化两个集合(S,U)(S 为只有初始顶点点 A 的集合,U 为其它顶点集合)」

  • 2、「如果 U 不为空,对 U 集合顶点进行距离的排序,并取出距离 A 最近的一个顶点 D」

  • 1)、「将顶点 D 纳入 S 集合」

  • 2)、「更新通过顶点 D 到达 U 集合所有点的距离(如果距离更小则更新,否则不更新)」

  • 3)、「重复2步骤」

  • 3、「直到 U 集合为空,算法完成」

OSPF(Open Shortest Path First) 开放最短路径优先协议的过程

核心是 Dijkstra 算法。

  • 1)、「向所有的路由器发送消息,因此每一个路由器都可以获得网络中的所有信息,并因此得到完整的网络拓扑(链路状态数据库)。而且,每一个路由器都可以使用 Dijikstra 算法找到自己到达某一个顶点的最短路径」
  • 2)、「消息描述该路由器与相邻路由器的链路状态(即距离、时延、带宽),因此 OSPF 协议比 RIP 协议更加客观与先进」
  • 3)、「只有链路状态发生变化时,才发送更新信息,这使得路由器减少了数据的交换,能够更快地收敛」

然后,我们再来回顾一下 「完整过程」

  • 首先,「路由器接入网络」
  • 然后,「路由器向邻居发出问候信息,以此来确认可达性」
  • 确认后,「就会与邻居交流链路状态数据库,并将链路状态数据库都同步为最新的」
  • 最后,「路由器会广播和更新未知路由」
五种消息类型
  • 1)、「问候消息(Hello):测试自身与相邻路由器的可达性」
  • 2)「、链路状态数据库描述信息:用于向隔壁路由器发送自己的链路状态的一些简单的描述信息」
  • 3)、「链路状态请求信息:用于向隔壁路由器请求链路状态数据」
  • 4)、「链路状态更新信息:使用最频繁也是最重要的信息」
  • 5)、「链路状态确认信息:用于对链路更新的一个确认」
RIP 协议 与 OSPF 协议的对比
RIPOSPF
从邻居看网络整个网络的拓扑
在路由器之间累加距离Dijkstra 算法计算最短路径
频繁、周期更新,收敛很慢状态变化更新,收敛很快
路由间拷贝路由信息路由间传递链路状态,自行计算路径
OSPF 的缺点

虽然 OSPF 协议解决了 RIP 协议的问题,对整个网络有了一定的全局观,但是 「OSPF 协议本身较为复杂,实现开销较大」

3)、外部网关路由协议之 BGP(Border Gateway protocol) 边际网关协议(很复杂、了解即可)
  • BGP 协议是运行在 AS(自治系统)之间的一种协议。
  • BGP 协议是因为计算机网络中人为因素的复杂性而提出的,在实际的网络环境中,数据的传输还受整治、安全等因素的影响。

为什么要在 AS 之间使用 BGP 协议呢?

  • 1)、「互联网的规模很大,这使得在 AS 之间选择路由非常困难,如果我们在 AS 之间选择链路状态协议,每个路由器都需要存储很多链路状态的数据,并且如果使用 Dijikstra 算法,运行会很慢,因此需要使用 BGP 协议」
  • 2)、「AS 内部使用不同的路由协议,例如在一个 AS 中使用了 RIP 协议,而另一个 AS 中则使用了 OSPF 协议。对于使用不同的协议的路由器,在它们之间是无法通信的,因此它们之间便需要借助 BGP 协议来进行协调」
  • 3)、「AS 之间需要考虑除网络特性之外的一些因素,例如 政治、安全」

「由于各个 AS (国家、地区)之间政策、安全等原因,BGP 仅能够找到一个到底目的地的比较好的路由。而 AS 之间是通过 BGP 发言人来进行路由信息的交换的」

九、数据链路层

1、主要功能

1)、封装成帧

什么是数据帧?

  • 「帧是数据链路层数据的基本单位」
  • 「发送端在网络层的一段数据前后添加特定标记形成帧」
  • 「接收端根据前后特定标记识别出帧」
数据帧结构
  • 「网络层将 IP 数据报 传送到 数据链路层时,在数据链路层会给 IP 数据报 的前后添加 帧首部与帧尾部」
  • 「帧首部与尾部都是特定的控制字符,即一些特定的比特流,例如帧首部的 SOH:00000001,帧尾部的EOT:00000100」

如果数据里面刚好有这些比特流怎么办?

2)、透明传输

透明传输是什么?

  • 1)、「计算机领域中非常重要的一个术语。例如对于数据链路层来说,物理层所做的工作就是透明的,物理层只需向外暴露接口即可」
  • 2)、「一种实际存在的事物但是看起来像不存在一样」
  • 3)、「即使控制字符在帧数据中,但是要当做不存在一样去处理」
透明传输的应用

如果数据里面刚好有这些控制字符该怎么办?

在该控制字符前面加上一个 ESC 转义字符,如果数据中也包含有 ESC 转义字符时,则可以在前面再加一个 ESC 转义字符。而数据链路层的转义字符可以类比与编程语言中的转义字符。

3)、差错监测

为什么要进行差错监测?

「因此物理层只管传输比特流,无法控制是否出错。所以数据链路层需要负责 差错监测 的工作」

差错监测的方式
1、奇偶校验码

「在比特流的后面加上 奇偶校验码(1/0).例如:00110100 => 所有位数和为3,是基数,在该比特流后面加1。(偶数加0)」

它的局限性在于 「当比特流中出错两位时,无法检测出错误」

2、CRC(循环冗余校验码)
  • 1)、「一种根据传输或保存的数据而产生固定位数校验码的方式」
  • 2)、「检测数据传输或保存后可能出现的错误」
  • 3)、「生成的数字计算出来并且附加到数据后面」

CRC 使用了 「模 2 除法」,即:「当最高位为0时,则认为余数不够除,取商为0」

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

[外链图片转存中…(img-2wnaBEvP-1715760507892)]

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-Qh2wxzk9-1715760507892)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。 曲线积分和曲面积分都是数学中的重要概念,常用于物理、工程等领域的计算和分析。 首先,让我们来了解一下曲线积分。 曲线积分是沿着一条曲线对某个向量场进行积分的过程。具体来,设曲线C为参数方程r(t)=(x(t), y(t), z(t)), t∈[a,b],向量场F为F=(P, Q, R),则曲线积分的形式为: ∫C F·dr = ∫ab F(r(t))·r'(t) dt 其中,·表示向量的点积,r'(t)表示曲线在t时刻的切向量。 接下来,让我们了解一下曲面积分。 曲面积分是沿着一个曲面对某个向量场进行积分的过程。具体来,设曲面S为参数方程r(u,v)=(x(u,v), y(u,v), z(u,v)),向量场F为F=(P, Q, R),则曲面积分的形式为: ∫S F·dS = ∫∫S F(r(u,v))·n(u,v) dS 其中,·表示向量的点积,n(u,v)表示曲面在(u,v)处的法向量,dS表示曲面上面积元素。 在曲面积分中,常常会用到高斯公式和斯托克斯公式。 高斯公式是指对于任何一个有向光滑闭合曲面S和向量场F=(P,Q,R),都有: ∫S F·dS = ∫∫∫V div F dV 其中,div F表示向量场F的散度,V表示曲面S所围成的区域。 斯托克斯公式是指对于任何一个有向光滑曲面S和向量场F=(P,Q,R),都有: ∫S F·dr = ∫∫C curl F·n ds 其中,curl F表示向量场F的旋度,C表示曲面S的边界,n表示C的法向量,ds表示C上的弧长元素。 希望这些内容能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值