我为什么我拒绝了那些不懂http协议的面试者?

Posted JPress海哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我为什么我拒绝了那些不懂http协议的面试者?相关的知识,希望对你有一定的参考价值。


我想,如果是你来当面试官,你也是拒绝的。


故事1

张小明是我之前一个同事,我们一起在开发一个电视的App,为了满足“极客”们的要求,我们开发了这样的一个小功能。

用电脑,通过浏览器,可以管理自己的电视。

实现这个功能的原理能简单,就是在电视上内置一个http服务器。智能电视都是android的系统,市场上没有可以运行在Android系统的http服务器,所以只能手动开发。

但是,张小明遇到了一个问题,当通过浏览器访问我们自己写的http服务器的时候,不能正确显示网页,大概只显示了如下图片的内容。


css始终无法渲染出来,但是通过电脑浏览器来加载,css确实又加载了,某些浏览器是好的,某些是这样。

刚开始我们以为是缓存的问题,换了一台电脑还是如此。

没有办法,只能让担任架构师的海哥出马,经过半小时的排查后,终于发现了问题的所在,发现问题后,1秒钟解决。

什么原因导致的呢?原因是浏览器去加载css的时候,css返回http的content-type不是 text/css 类型导致的。

虽然css文件能够正常加载,但是http response类型不是text/css的时候,很多浏览器是无法正常使用该css文件渲染的。


故事2

杨小明,是我之前的一个下属,我们用JFinal开发了一个直播系统。

例如,踢掉某个正在看直播的用户,API是这样的。

/api/v1/clients/{id}

但是,这个API有点特殊,需要用 delete 方法, curl 的命令如下(文档在:https://github.com/ossrs/srs/wiki/v2_CN_HTTPApi ):

curl -v -X DELETE http://127.0.0.1:1985/api/v1/clients/1 && echo ""

使用过JFinal的同学可能知道,JFinal内置了一个叫HttpKit的工具类,这个工具可以发送get请求和post请求,但是却没有delete请求的方法。

于是,杨小明非常聪明,自己写了一个,代码大概如下:

String command = "curl -v -X DELETE http://127.0.0.1:1985/api/v1/clients/1"
Runtime.getRuntime().exec(command)

测试人员本地进行黑盒测试的时候,竟然测试通过了。

部署到测试环境后,过几个小时,运维人员发现,测试服务器竟然多了几百个curl进程。


故事3

公司刚刚进来了一个不错的实习生,叫周小明。

由于是新人,没敢让他做核心的项目和功能,正好公司有个小项目让他去“练手”,没过多久就把项目的用户模块做完了,登录、注册、进入用户中心等基本功能堪称完美,项目经理简单看了下代码,代码风格也按照我们的文档编写,没有太多的问题。

由于项目要进行分布式部署,让他把用session记录信息的,缓存cookie,这个可以减少分布式项目带来的一些session问题。

没过多久周小明提交了代码。

但是,如何来做呢?

直接用cookie来记录登录用户的ID,没有任何的加密。

这样就导致了非常严重的安全问题。由于cookie是可以修改的,黑客可以修改自己的浏览器cookie,模拟任何人直接登录系统。


故事4

刘小明是公司的前端开发人员。

由于微信小程序开发所需技能,其实基本都是前端的知识,稍微不一样的是微信小程序不是通过cookie来记录用户信息。

所以我们打算让刘小明来负责开发公司的微信小程序。

既然微信小程序使用cookie不方便,怎么办呢?我们打算用 jwt 这种技术来代替cookie,记录当前的“用户”信息。

刚刚开会准备讨论 jwt 的时候,刘小明大发雷霆,说我不懂什么 jwt ,我只知道 js 怎么去获取cookie信息,不知道 jwt 这个玩意。

殊不知的是,Jwt和加密的cookie,其实没什么两样。

当公司招到合适的前端后,找个理由把刘小明开除。


后记

以上故事,全是海哥的亲身经历,为了避免尴尬,名字没有用真实的。故事的所有问题,都是不懂http协议造成的。

张小明,不懂 content-type 正在含义。
杨小明,不懂 get请求、post请求、delete...具体意义。
周小明,不同 cookie 的原理。
刘晓明,不懂 http 协议的基础。


经历了这些事情后,我要求公司的所有技术经理,在面试程序员的时候,无论是前端的职位还是后端的,无论是app的还是web的,都必须有一个要求:了解http协议。

在我离职出来后,我开源了JPress并成立了JPress School。很多同学在群里问的很多问题,其实也都是不懂 http 协议造成的。

例如:

  • Java后端调用 redirect 方法,可以当做代理使用吗?

  • 通过Jboot设置Jwt信息后,为什么前端请求的时候获取不到了?

  • 上传文件JFinal为什么先调用 getFile() 方法之后才能正常后去数据?

  • 上传文件时,html的form表单为什么需要添加属性 enctype="multipart/form-data"

  • 既然cookie可以代替session,那session还有什么用?

  • ...



问题真的是千奇百怪。


于是,为了让JPress School学员避免这样的小白问题,也为了让大家吃透http协议本身,在未来的职业生涯中不要出现像小明这样的错误。

我决定来一个直播,通过直播抓包、讲解原理、并和学员互动的方式,彻底把 http 协议讲透。


这个直播的开播时间是:本周五晚上8点开始,讲透结束。


这个直播的收费是49.9元(看完直播后,觉得没有收获,退款50),JPress School 会员免费。

要看直播,扫码以下二维码后,添加海哥的微信:wx198819880,拉你进直播交流群。



也可以直接扫码,加入JPress School,

加入JPress School一年内免费看所有JPress School的直播课程。


点击下方的阅读原文,可以查看直播预览。

以上是关于我为什么我拒绝了那些不懂http协议的面试者?的主要内容,如果未能解决你的问题,请参考以下文章

面试之-Https协议

培训班老师说可以用这个干掉一大批面试者

那些不懂hystrix的秘密

程序员面试被拒绝的趣事?

一个HTTP打趴80%面试者,你是否也被面试官”虐“?

一个HTTP打趴80%面试者,你是否也被面试官”虐“?