上周我面了个三年 Javaer,这几个问题都没答出来(上)

简介: 上周我面了个三年 Javaer,这几个问题都没答出来(上)

身为 Java Web 开发我发现很多人一些 Web 基础问题都答不上来。

上周我面试了一个三年经验的小伙子,他简历写着写着对操作系统、计算机网络、算法都比较熟悉。

我心里想,这个小伙子看起来胸有成竹好像有点东西,我就问:你挑个你最有自信的我先问问。

这是想找个他最有自信的看看他到底有多强。

一开始我问他 HTTP/1、HTTP/2 相关的他到是能答点东西出来。

就是 HTTP1.1什么特性,哪里哪里不好。

然后 HTTP2 什么特性,比 HTTP1.1 好在哪里哪里这样。

但是他的一些措辞让我感觉是把 HTTP 作为一个“运输通道”。

所以后来我问他:你怎么理解 HTTP 的,它的本质是什么,有什么用?

面试者愣一会儿,我接着问:就是说 HTTP 的作用,为什么客户端和服务端要用 HTTP 这个协议来通信。

他说是提供了一个通道来传输数据。

我说 HTTP 是一个协议。

我接着问那你知道什么是 HTTP 和 RPC 的关系吗?

为什么要有 RPC?

他眼睛盯着桌上的水,额了半天。

行那我再来问问你项目相关的吧。

后来关于项目细节、整体架构和一些场景的处理都问了,小伙子都答不好,最后我跟他说回家等通知吧。

面完试之后我回去问了同事相同的问题,我发现答的也不够好,有些地方有点混淆。

当然我同事也经常问我问题,我也答不好,就共同进步,走向人生巅峰,迎娶那啥啥的

所以今儿我就整理一波来说说这类问题,相信看完文章之后你会有进一步的认识。


image.png

image.png


HTTP 的本质


首先你要明确 HTTP 是一个协议,是一个超文本传输协议。

它基于 TCP/IP 来传输文本、图片、视频、音频等。

重点来了

HTTP 不提供数据包的传输功能,也就是数据包从浏览器到服务端再来回的传输和它没关系。

这是 TCP/IP 干的。

那 HTTP 有啥用?我们来分析一波。

我们上网要么就是获取一些信息来看,要么就是修改一些信息。

比如你用浏览器刷微博就是获取信息,发微博就是修改信息。

所以说浏览器需要告知服务器它需要什么,这次的请求是要获取哪些信息?发怎么样的微博。

这就涉及到浏览器和服务器之间的通信交互。

交互就需要一种格式

像你我之间的谈话就用中文,你要突然换成俄语我听不懂那不就 GG 了。

所以说 HTTP 它规定了一种格式,一种通信格式,大家都用这个格式来交谈。

这样不论你是什么服务器、什么浏览器都能顺利的交流,减少交互的成本

就像全世界如果都讲中文,那我们不就不需要学英文了,那不就较少交互的成本了。

不像现在我们还得学英文,不然就看不懂文档等等。

万一之后俄语又起来了,咱还得对接俄文,这交互成本是不是就上来了。

而网络世界还好,咱们现在的 Web 交互基本上就是 HTTP 了。

其实 HTTP 协议的格式很像我们信封,有个固定的格式。

image.png

左上角写邮编,右上角贴邮票,然后地址姓名啥的依次来。

因为计算机是很死板的,不像我们人一样有一种立体扫描感,所以要规定先写头、再写尾。

你要是先写尾,再写头计算机就认不出来了。

所以 HTTP 就规定了请求先搞请求行、再搞请求报头、再搞请求体。

响应就状态行、响应报头、响应体。


image.png

所以 HTTP 的本质是什么?

就是客户端和服务端约定好的一种通信格式

对 HTTP 想有多的认识可以看我之前的文章 从 1950 年开始说起,带你看 HTTP 的演进之路


HTTP 和 RPC 的关系


HTTP 和 RPC 其实是两个维度的东西, HTTP 指的是通信协议。

而 RPC 则是远程调用,其对应的是本地调用。


RPC 的通信可以用 HTTP 协议,也可以自定义协议,是不做约束的。


像之前的单体时代,我们的 service 调用就是自己实现的方法,是本地进程内的调用。

public User getUserById(Long id) {
       return userDao.getUserById(id); // 这叫本地调用
    }

现在都是微服务了,根据业务模块做了不同的拆分,像用户的服务不用我这个小组负责,我这小组只要写订单服务就行了。


但是我们服务需要用到用户的信息,于是我们需要调用用户小组的服务,于是代码变成了以下这种


public User getUserById(Long id) {
       return userConsumer.getUserById(id); // 这是远程调用,逻辑是用户小组的服务实现的。
    }


相关文章
|
4月前
|
前端开发 NoSQL Java
985毕业,半路出家28岁进军Java,坚持奋斗了三年现如今年薪36W+
26岁985研究生毕业,学的土木工程相关的专业。工作半年,存款3000,半年后调到深圳总部(公司央企),工作一年差不多也就几万存款,感觉生活无望,就直接决定转行。 说实在的,转行就是奔着挣钱去的。最开始想到的是金融,入坑了后,发现原来还有金融农民工一说,二成人暴富,八成人shishi……万念俱灰。 后来,觉得自己好歹过了计算机二级,也会些matlab,也听说IT工资高,就直接放弃金融农民工,转行IT。转行的时候有两点支撑着我:一是相信我读那么多书,学习能力绝对没问题,二是以我读书的经验,本科毕业也顶多学了两年的专业课,我学一年应该能赶上。刚好自己有几万存款,觉得起码能撑过一年。
|
10月前
|
关系型数据库 MySQL 数据库
新星计划一周体验!教你上榜技巧
新星计划一周体验!教你上榜技巧
|
Cloud Native 安全 .NET
.NET 诞生 20 周年纪念日!微软发文庆祝
.NET 诞生 20 周年纪念日!微软发文庆祝
.NET 诞生 20 周年纪念日!微软发文庆祝
|
机器学习/深度学习 人工智能 算法
DayDayUp:1024节日快乐!程序猿界的颁奖典礼《年度十大程序员极客》正式公布!
DayDayUp:1024节日快乐!程序猿界的颁奖典礼《年度十大程序员极客》正式公布!
DayDayUp:1024节日快乐!程序猿界的颁奖典礼《年度十大程序员极客》正式公布!
上周我面了个三年 Javaer,这几个问题都没答出来(下)
上周我面了个三年 Javaer,这几个问题都没答出来(下)
上周我面了个三年 Javaer,这几个问题都没答出来(下)
|
JavaScript 算法 Python
本周上市新书
异步社区本周上市新书
1459 0
|
机器人 持续交付 Python
本周预售新书
《数据科学实战手册(第2版)》   [印度]普拉罕•塔塔(Prabhanjan Tattar) [美]托尼•奥赫达(Tony Ojeda) 肖恩•帕特里克•墨菲(Sean Patrick Murphy) 本杰明•本福特(Benjamin Bengfort) 阿比吉特•达斯古普塔(Abhijit Dasgupta) 著 本书的主要内容有:学习数据科学项目的流程,并使用它来获取、清洗、分析和可视化数据;在多个实战项目中理解数据科学的关键概念;通过一步一步的代码实例来掌握R和Python强大的数据编程能力。
1532 0
|
Web App开发 测试技术 Linux
|
安全 网络安全 数据安全/隐私保护
独坐高台,仰望皓月,五年光阴亦如昨日往昔。
五年如今晚,五年前,我接触了网络安全这个在外人看来神秘的世界,五年后的今夜,我又好像回到了最初的那个夜晚,可是我知道,一切都已经不在了,我也已经回不去了。此文只谈我和网络安全的故事。 初三的时候,我姐当时才毕业没几年,我去玩她的笔记本,当时没有连网,也没有游戏,但是我除了笔记本别无其他可以玩的,我...
1646 0
|
开发者
Get到这些, 明年你也能参加谷歌开发者大会。
本次我们分享一下,申请本次谷歌开发者大会的前后的过程。
4115 0