阿里盒马前端校招面试,你要的答案来了

最近有一篇阿里盒马前端面试题被各大社区转载,而且据称这是阿里校招面试题,我看完以后,简直惊呆了,打死都不信。今天特意针对他们发的一面,把对应的答案整理了一些。

请先做个自我介绍

我是河畔一角,11年毕业,毕业后先从事JAVA方向开发,后在13年转为前端。13年主要从事XXX,经过3年的时间磨练,让我对前端有了全新的认识。16年进入到乐视,从事XXX,17年进入到松果出行,从事XXX,并从0搭建前端团队,并主导各个前端一线项目研发。

提交表单,常用的方法有哪些?应用层,通信层发生了哪些过程?

  • 提交表单方法

    • 通过form配置action和method实现

    • 通过ajax实现

  • 应用层、通信层发生了哪些过程?

    • 浏览器发送请求后,通过DNS解析域名查找IP地址

    • 经过应用层HTTP

    • 通信层(TCP/IP)经过三次握手和四次挥手

实际上可能考察输入url后请求响应过程

POST和GET的区别,列举一下

  • 大小方面

    • GET传输一般2kb,POST没有大小限制

  • 安全方面

    • GET通过url明文传输,POST通过body传输,本身都不安全,因为HTTP就是明文传输。

  • 浏览器记录

    • GET请求浏览器会记录,POST不会

  • 浏览器后退

    • GET无害,POST会再次提交

  • 浏览器收藏

    • GET可以收藏,POST不可以

  • 浏览器缓存

    • GET可以缓存,POST不会

  • 编码方式

    • GET通过url编码,POST支持多种编码

  • TCP数据包

    • GET产生一个数据包,POST产生2个数据包

  • 使用方式(习惯上讲)

    • GET主要拉取数据,POST主要提交保存数据

HTTP请求Content-Type值:application/json、application/x-www-form-urlencoded、multipart/form-data

http常见的响应码,拒绝服务资源是哪个?

状态码作用
1.x已接收请求,正在处理
2.x请求成功
3.x重定向,需要进一步处理
4.x客户端错误
5.x服务端错误

常见状态码:

  • 200 请求成功

  • 301 永久重定向,一般是地址发生变化

  • 302 临时重定向

  • 304 Not Modified(通常是在协商缓存中表示本次内容未修改)

  • 400 Bad Request - 前端请求错误

  • 401 Unauthorized - 未授权

  • 403 Forbidden - 请求被拒绝(本题答案)

  • 404 Not Found - 资源不存在

  • 500 Inter Server Error - 服务端异常

  • 503 Server Unavailable - 服务不可用

前端鉴权了解过吗?

鉴权主要分为四种:

  • HTTP Basic Authentication (HTTP基本认证)

  • session-cookie

  • Token 验证(包括JWT,SSO)

  • OAuth(开放授权)

我们普通网站常用的认证就是session-cookie的方式,用户向服务端发生请求,服务端会创建session并保存相关身份信息,并向客户端下发一个sessionId,大家如果用心的话,会发现跟JAVA交互的时候,浏览器会有一个JSESSION_ID,跟PHP交互的时候,会有一个PHPSESSION_ID;后面的每次请求,客户端都会自动带上这个cookie跟服务端通信。

实际上大家要明白每一种方式的作用;SSO主要用来做单点登录;OAuth主要用来做第三方网站授权;JWT就是一种便于扩展的跨域认证解决方案,通常会考察这个。

关于JWT我这儿不展开讲,给大家推荐阮一峰的讲解:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

OAuth2.0原理

讲原理主要是让你对这个过程做梳理,并不要求对源码过程做剖析,所以可以通过一个简单的流程来进行回答。我通过微信的授权登录来给大家做讲解:OAuth2.0是一个开源的授权认证方案。当我们登录一个网站时,如果想要通过微信做授权登录,从而获取微信的用户信息,正常情况肯定是不允许,通过微信开放的OAuth2.0我们可以做授权认证。我们点击自己网站的微信按钮,跳转一个链接,这个链接比如是:https://open.weixin.qq.com/connect/oauth2/authorize?会跳转到微信那边去让用户同意授权,用户同意以后,会重定向回来并携带一个code,此code是微信下发的临时凭证。开发者拿到此code以后,就可以获取access_token,根据下发的token,我们才能有权限获取其它接口信息。

  • 点击按钮,跳转第三方授权网站

  • 用户同意授权,重定向回来携带code

  • 开发者根据code获取微信access_token

  • 拿到token拉取用户资料

回答的时候,能够把这个过程描述清楚就好,不要过多解析源码。更进一步了解OAuth2.0可参考阮一峰教程:http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

说说https的内在原理,ssl握手过程

https实际上是在应用层(http)和传输层(tcp)之间加了一层安全套接层(ssl).

  • https原理

    • 客户端发送Https请求

    • 服务端配置CA证书(包含公钥和私钥)

    • 服务端发送证书给客户端(包含颁发机构、过期时间)

    • 客户端解析证书(由TLS验证证书有效性)

    • 验证无问题后,生成随机数并加密,传回给服务端

    • 服务端解密随机值,把响应内容通过私钥进行对称加密,传输给客户端

    • 客户端通过证书解密,获取服务端响应内容

  • ssl握手过程

    • 客户端发送随机数1,支持的加密方法(如RSA公钥加密)

    • 服务端发送随机数2,和服务器公钥,并确认加密方法

    • 客户端发送用服务器公钥加密的随机数3

    • 服务器用私钥解密这个随机数3,用加密方法计算生成对称加密的密钥给客户端

    • 接下来的报文都用双方协定好的加密方法和密钥,进行加密

大家如果要了解更多ssl详细过程,可参考阮一峰教程http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

为什么要用非对称密钥,pms呢?公钥怎么了?

非对称加密相对更安全,通过公钥解密后,只有私钥才能解密,而对称加密只需要一个密钥就能加密和解密。

PMS(pre master secret),SSL协议并不信任每个主机生成的随机数,因此PMS也有可能被推测出来,所以需要客户端、服务端和PMS三个随机数一同生成密钥才更安全。

关于SSL和HTTPS大家可能看不懂,我建议直接回答不知道。

说一说响应式布局吧?

响应式布局是指同一个网站在不同屏幕尺寸下显示不同的布局。它跟自适应不同,自适应是同一个网站在不同设备上自适应(比如自适应不同的Android和iPhone设备)。传统的做法会针对PC、移动端各做一套项目,而响应式会同时支持PC和H5。响应式方案:

  • 媒体查询

    • css媒体查询根据尺寸来定义不同样式,比如600/900/1200/1600

  • 百分比

  • rem

    • rem是根据html的根元素来决定元素大小的,在自适应布局中应用非常广泛。

  • 视窗(vw/vh)

    • c3中新增视窗,1vw代表1%的宽度,通常结合rem一起使用。

Bootstrap/Antd/ElementUI中的栅格布局,本身也是一种响应式。

响应式背后的浏览器原理你知道吗?

根据浏览器或设备的分辨率可以计算获取到相应的尺寸,通过不同的尺寸可以动态的修改html元素或者盒子在浏览器中的大小,从而实现响应式。

旋转动画css,怎么去做?

  • transition+transform

  transition:all 1s linear;
  transform:rotate(360deg);
  • animation

animation:rotate 5s infinite;
@keyframes rotate
{
 from {transform:rotate(0deg);}
 to {transform:rotate(360deg);}
}

dom树和cssom树原理也说一下吧

大家可以参考我这篇文章,应该能找到答案! 从输入URL后前端的知识爆炸,你懂多少?

为什么link要在前,script标签要在后面呢?原理

link标签并不会阻塞DOM解析,只会阻塞DOM渲染,而script加载js过程会阻塞DOM渲染和CSS加载,所以为了更好的用户体验和更优的前端性能,我们通常把link放前面,script放后面。js之所以阻塞DOM渲染是因为JS本身是单线程,在执行的过程中只能从上到下依次运行,异步任务除外。

script前加async和defer也不会阻塞。

场景题:保证浏览器不受脚本的恶意攻击

主要考察前端漏洞:XSS攻击和CSRF攻击

XSS主要指跨站脚本攻击,一般会伪造网站,窃取cookie,也包括一些sql注入和html注入等;防御方法:

  • 后端对请求数据做标签过滤和检查。

  • 服务端可设置cookie为httponly,前端无法读取,只有服务端可读取

CSRF主要指跨站请求伪造,通过向A中注入链接,使用户跳转到B中并获取A站的cookie,通过cookie向A发送请求,以达到攻击目的。防御方法:

  • 使用POST代替GET

  • 设置cookie为httponly

  • 增加token

  • 通过Referer识别网站

EventLoop理解

此处并非一两句话能讲清楚,建议大家到掘金看完整版https://juejin.im/post/5c72307551882562e74812dc

场景题:这里有cat和animal子类和父类,如何进行es5继承,至少说出5种

  • 原型继承

Cat.prototype = new Animal()
  • 构造继承

function Cat(){
    Animal.call(this);
} 
  • 组合继承(原型+构造)

function Cat(){
    Animal.call(this);
} 
Cat.prototype = new Animal()
  • Call/Apply继承

function Cat(name){
    Animal.call(this,name);
} 
function Cat(name){
    Animal.apply(this,[name]);
} 

说说你项目做的Vue spa首屏优化吧

  • Vue-Router路由懒加载(import/require)

  • 使用CDN加速

  • Nginx的gzip压缩

  • Vue异步组件

  • 服务端渲染SSR

  • 如果使用了UI库,采用按需加载(babel-plugin-component/import)

  • 线上关闭sourcemap

  • 如果首屏为登录页,可以做成多入口

  • Service Worker缓存文件处理

  • 使用link标签的rel属性设置 prefetch(这段资源将会在未来某个导航或者功能要用到,但是本资源的下载顺序权重比较低,prefetch通常用于加速下一次导航)、preload(preload将会把资源的下载顺序权重提高,使得关键数据提前下载好,优化页面打开速度)

后面还有两道暂时忽略。

以上是阿里盒马前端面试的题目和我整理出来的答案,应该对正在找工作的有帮助。

当然后面还有二面、三面、四面题目,后面有时间会继续给大家整理答案出来!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值