Ce36869113647186df1dce32b9be04a3
重学安卓:当面试官问 HTTP 时,到底是在问什么

往期回顾专栏目录更新动态优惠政策版权须知

温馨提示:如果这是第一次接触《重学安卓》,可通过上述链接来访问和快速了解《重学安卓》专栏、获取它的目录、试读内容,以及了解它的最新动态 和 发展状况。

截至目前,专栏已对 体系化文章 做了 1970 余次修订,数十位群友告诉我 受专栏的启发 他们也开启了写作之路。群里不定期会有小伙伴讨论适配问题、分享原创的开源库 和 提供内推机会,订阅后可随时进群交流。

前言

自从 2007 年起 iPhone 和 Android 手机的相继问世,以及 2013 年 4G 网络的正式商用,使得在全球范围内催生了全新的 “移动互联网” 时代。

这个时代打从一开始就与互联网产生紧密联系,通过移动互联网,我们得以尝试许多不同以往在 PC 端上做的事,例如

上街买菜时,我们可以扫码解锁共享单车,可以给摆摊的老板扫码支付;

工作生活中,可以在通勤路上刷短视频、可以在午餐时间点外卖;

外出旅游时,可以通过社交软件分享一路上拍摄的美景等等。

图例截自 “高德地图、抖音、酷安” 客户端

图例截自 “高德地图、抖音、酷安” 客户端

与此同时,通过上一期我们在《存储访问适配》篇分享的关于当下 “中国移动互联网流量接入” 的统计图可知,近几年随着 4G 网络的普及,人们对移动互联网的需求呈指数级攀升,

所以 对客户端开发来说,对网络请求乃至 HTTP 的掌握是重中之重,许多面试也经常会将此类技术作为考察的重点

然而通过过去一年的交流发现,有不少小伙伴存在 “框架会用,玩的贼 6,但基础知识一问三不知” 的情况:

“感觉自己会用啊,好像 HTTP 也没什么可学的呀,好像也感觉不到自己哪不会啊”,但当面试时面试官一问 “谈谈对 HTTP 的理解”,瞬间就懵了,毫无头绪,只得默默吃暗亏 ——

用是会用,答却答不上来,那到底是会还是不会呢?怎么才能让对方 “心领神会” 呢?

所以在遭遇类似情况时,我们不妨首先跳出来想一想:面试官问这类问题的时候,究竟是在问什么?到底怎么回答,才能四两拨千斤地通过面试?

比起技术点,更多的是对思维模式的考察

事实上,比起具体的技术点,面试官更关心的是借对技术点的考察,来间接评估你惯用的思维模式,从而判断你是否为 面试官乃至部门发展所需 的目标人选。

其实 换位思考 —— 站在面试官乃至企业的角度想一想 就不难理解,面试官也是人,他的一天也是 24 小时,精力十分有限,所以就是面试官,也不可能面面俱到,不可能什么技术都通晓,因而在有限的面试时间里,他的主要任务就是 透过应试者的表述,来瞬间判断表述背后所隐含的思维模式,从而判断值不值得继续交流乃至招纳 ——

企业需要的是 “不可替代的可替代人才”,啥意思呢?所谓 “不可替代” 就是指 你能提供稀缺价值:例如来了一个新任务,涉及全新的技术栈,普通人一脸懵逼找不到头绪切入,你却因为已具备 经过面试官认证的 “通用学习能力”,而能够 拎清问题的边界 从而快速掌握和出成果,这就是你的 “不可替代” 之处。

与此同时,企业又希望你是个 “可替代” 的人才,也即你能 快速抓住技术的本质,并分享给其他人,于是这能够 帮助企业降低风险,例如当你生病时,企业可以派几个你带出来的实习生暂时顶一顶。

所以显而易见的,这都是很现实的问题,“会 HTTP” 很重要,与此同时, 对 “无论学什么都有机会抓住本质” 的思维模式的训练和掌握 同样不容忽视。

所以这一期,我们继续借着 “深度思考原则” 追根溯源,以便形成 精炼的、可复述给别人听的 “关于 xxx 技术的理解”

考虑到 “授人以鱼不如授人以渔”,因而就算不去 hold 住面试官,也请务必跟随本文的脚步,将 网络请求乃至 HTTP 的本质及边界 无痛地过一遍!

文章目录一览

  • 前言
  • 比起技术点,更多的是对思维模式的考察
  • 网络及网络请求的本质是什么
    • 网络的发展史
    • 网络体系结构的由来
    • 所以为什么要设计为分层结构
    • 网络结构中每一层的作用
  • 互联网的本质是什么
  • HTTP 的本质是什么
    • HTTP 问世前的混沌世界
    • HTTP 解决了什么问题
  • HTTP 的发展都经历了什么
    • 截至目前,HTTP 都能做什么
  • 客户端开发主要需要掌握关于 HTTP 的哪些
    • 常用的场景和头部属性
  • 综上
    • “谈谈你对 HTTP 的理解”

网络及网络请求的本质是什么

要分析这个问题,我们可以分别 从 “生活经验” 以及 “技术点的发展史” 入手

从当下生活经验的角度出发,轻易地我们可以得知,网络请求的本质不过就是 “数据的收发”,例如 打开朋友圈,加载信息流列表,这个过程中首先发生的是,客户端向服务端 发送 了对 “信息流列表数据” 的请求,从而有机会 收到 来自服务端处理和响应的结果。

网络的发展史

从发展史的角度出发,我们得知,计算机乃至计算机网络,是 “军用技术转民用” 的科技产品之一,计算机及其网络的存在和发展,都与时代背景有着密不可分的联系。

众所周知,1946 年问世了第一台电子计算机,其存在缘由是美国军方用于 辅助完成弹道的测算。这个时期的计算机都是单机运行。

到了上世纪 60 年代,由于苏联 “古巴导弹危机” 的压力,使得美军迫切需要一种方式,使能够维持全国多地 作战指挥所 “两两之间” 的通信和信息共享(也即要求例如指挥所 A 被炸了,其他指挥所之间仍能相互通信)。

计算机网络应运而生。

网络体系结构的由来

同任何一门经久不衰的技术一样,计算机网络的存在并非一蹴而就。随着计算机网络概念设计的流出,美国的一些商业公司 和世界上其他国家的组织 都纷纷效仿,试图制定标准和抢占市场。

所以这种 能够满足人类需求的科技产品 一旦流入市场,就不再单纯的只是学术用途,多多少少会 被卷入商业的演化进程中,最终谁制定的标准更容易被行业广泛接受,谁便延续了下来

因而,当我们这一代人接触互联网时,我们便已经是在使用 延续下来了的 基于 “TCP/IP 4 层体系” 设计的计算机网络

注意它是一种商业标准,与之对应的是学术界的 “OSI 7 层体系设计”。我们客户端开发既然是民用,显然使用的是商业标准。

所以为什么要设计为分层结构

这个问题很好解答,分层在本质上涉及了 “封装”,也即 “对调用者屏蔽细节 / 对调用者透明”,类似于对 设计模式原则中 “最小知道原则” + “依赖倒置原则” 的应用,

在网络体系的分层结构我们看到,它们的关系是上层调用下层,用 Java 来描述,即 “上层无需知道下层的实现,上层只需调用下层的接口,下层的实现可以根据实际需要来替换”。

如此设计的好处是什么呢?

正如我们在《MVP、MVVM 关系精讲》篇文末关于 “依赖倒置” 的加餐中解析到,“调用抽象而非实现,可以使具体实现被替换时,调用者本身一行代码也不用改”,

类推到 “网络体系结构” 即,上层调用下层的抽象,使得下层的具体实现被替换时,TCP/IP 结构本身及上层协议本身都不受牵连

(例如现如今我们开始推广的 5G 通信网络,实际动刀的就是最底层的 “网络接口层”,然而整个 TCP/IP 结构和上层的协议都不因此受影响。)

这就是 “封装” 乃至 “分层” 的存在意义。

划重点 👆 👆 👆

网络结构中每一层的作用

所以在有了 TCP/IP 网络分层结构后,人们对每一层的作用有了如下的约定:

1.应用层:用于约定通信双方构造和解析元信息(MetaData)及主体数据,通俗来说就是,将数据存放在信封中,信封上填写接收方赖以解析的注意事项,从而接收方的机器在收到信封时,能自动根据 “彼此预先约定好的程序” 来读取注意事项从而将数据解析还原。

2.传输层:用于在信封上填写目标机器的端口,和标注通信双方 连接和传输控制方式

3.网络层:用于在信封上填写目标机器的网络地址,以便于在网络上寻址和路由转发

4.网络接口层:用于在信封上填写附近邮局的硬件地址,以便信件首先被送往邮局中转。

互联网的本质是什么

至此,我们知道了,互联网的本质是 “分布式的通信网络”,诞生于冷战背景下 “指挥所” 对通信时容灾的需要

并且,为了方便修改特定层的内容而不影响其他层,而引入并最终确立了分层结构。

top Created with Sketch.