热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

面试分享:专科半年经验面试阿里前端P6+总结(附面试真题及答案)

前言先介绍一下自己的情况吧成都青城山下某大学毕业,专科,软件测试专业毕业22岁,15年出来实习,工作经验接近三年,之前主要做后端写PHP,自己喜欢瞎折腾,从去年六月份开始研究前端

前言

先介绍一下自己的情况吧

成都青城山下某大学毕业,专科,软件测试专业毕业

22岁,15年出来实习,工作经验接近三年,之前主要做后端写PHP,自己喜欢瞎折腾,从去年六月份开始研究前端,算下来前端经验半年多

年底由于种种原因想换一份工作,但由于太忙,没认真搞简历,也没怎么复习基础,导致很多本来会的都没敢往简历上写。于是写了一个简版的简历挂在Boss直聘上,准备年过完再认真筹备这件事情。

令我意外的是,一周竟收到八条阿里的面试邀请,看了网上前辈的一些心得:阿里三个月内只能应聘一次,于是选了两个心仪的部门投了简历,其中一个内推完没下文,多半是学历没过

以下是阿里面试过程

<<<前端是我一辈子的信仰,写代码直到50岁>>>

关注微信公众号:web前端学习圈

回复关键词【CSDN】领取2020年最新web前端系统学习教程(视频+笔记+素材+源码+项目实战)全套整理约50G

另外公众号每天都会分享学习方法,知识干货,实战案例,面试技巧,经验分享等相关文章,关注web前端学习圈=关注5000+前端大牛


第一轮 电话面试

  1. 自我介绍

balabala....,好久没面试过,自我介绍居然显得很紧张,说了一些简历上没有的东西,比如之前写PHP、用Swoole做智能硬件通讯啊之类,以及为什么写前端啊,balabala...

会ES6吗,什么是解构赋值?

直接举了个例子

const { a, b, c } = { a: 'aa', b: 'bb', c: 'cc' }

说下React的生命周期


实例化getDefaultProps
getInitialState
componentWillMount
render
componentDidMount存在期componentWillReceiveProps
shouldComponentUpdate
componentWillUpdate
componentDidUpdate销毁时componentWillUnmount

React方法中,调用事件处理方法(里面要用到this)怎么调用

this.foo.bind(this)

接问题4,为什么需要bind(this)

作用域的问题,foo() {} 与 const foo = () => {}里面的this作用域不一样,foo() {}里面使用外部成员,需要bind(this),直接使用的this作用域仅在该方法内部

接问题4,能不能不使用bind(this)

可以使用箭头函数

可以使用lodash-decorators里面的Bind装饰器

装饰器的原理

语法糖,实则调用Object.defineProperty,可以添加、修改对象属性

自己实现一个通用方法,做到不需要使用bind与装饰器达到问题4的目的

柯里化 + apply,详细过程不赘述...

闭包里面的this作用域

内部函数的this指向外部包裹它的作用域

React render做了什么

主要分首次渲染与更新来说,说的比较多,不赘述,网上react源码分析一大堆...这期间顺带提到了利用redux-saga在shouldComponentUpdate时所做优化,以及自己的开源项目

说说xss与csrf,怎么防止


xss:跨站脚本攻击,如果不过滤执行了js代码,可能导致COOKIE泄露等。防止:过滤
csrf:跨站请求伪造,挟制用户在当前已登录的Web应用程序上执行非本意的操作。防止:设置token、写操作用post、JSON API禁用CORS、禁用跨域请求、检查referrer

Ajax的原理,你平常怎么发送网络请求的


通过XMLHttpRequest/ActiveXObject新建Ajax请求
通过onreadystatechange注册回调函数
使用open、setRequestHeader、send结合发送请求
平常发送网络请求:用next做同构应用时,使用isomorphic-fetch发送请求,如果只是客户端发送请求时,使用axios

有三个元素,第一个与第三个宽度都为100px,中间元素占用剩余空间,怎么做到中间元素随着浏览器宽度的变化而变化



讲讲box-sizing


标准模式:width与height指的是内容区域的宽高,增加padding、border、margin会影响总体尺寸
怪异模式:width与height指内容区+padding+border,增加padding、border不会影响总体尺寸

做项目有没有遇到什么坑

最近做的这些项目项目也没有遇到什么大坑,印象很深的是之前实习搭建EKL中央日志服务器的时候,被一个时间问题坑了一天,EKL收集的日志时间与服务器的时间(时区)不一致,导致收集不到日志

你觉得搭建EKL有那些难点

相关服务器搭建倒是没什么难点,我觉得使用EKL最麻烦的是写grok match正则,匹配不同的日志,需要不同的正则,不过写到后面也习惯了,还OK

讲讲印象比较深的后端项目

之前实习时,做智能硬件项目,是一个宠物智能项圈,能记录宠物的运动数据,硬件每隔一段时间会发送大量的陀螺仪与加速计数据到服务端,通过swoole建立tcp,接受二进制数据,然后将接受到的数据通过map reduce处理...

停一下,你讲到处理大数据用map reduce,那为什么不用redis之类的

我个人觉得应该是当时团队比较小,需要一个快速且简单的解决方案,所以map reduce正是我们所需要的,redis我也知道,可以使用zset,求和很方便

说说mysql的事务

BEGIN、事务回滚ROLLBACK、事务提交COMMIT

说说你最满意的业务项目

说了一个next.js的触屏版同构项目,项目中使用到了prefech预先加载,以及next的动态加载,体验相当的快,用nprogress展示滚动条,在next.js还没有发布5.0版本/解决style-jsx中使用less、sass问题的时候,自己用postcss解决了,整个项目使用flexible + rem做响应式,自己改写了video-react组件,兼容触屏版,还有一些自认为不错的业务思想不赘述...

说说rem与em的区别

rem是根据根的font-size变化,em是根据父级的font-size变化

一面总结

一面面试的时候时不时顺带表现一下自己,根据面试官的问题回答时顺带提了一下看过的开源项目,比如react(redner过程)、next(postcss解决style-jsx编写less、isomorphic-fetch的使用等)、ant pro(lodash-decorators的使用)等

第二轮 笔试


1.实现destructuringArray方法,达到如下效果
// destructuringArray( [1,[2,4],3], "[a,[b],c]" );
// result
// { a:1, b:2, c:3 }
2.需要通过threshold参数控制调用函数频率
const yourFunction = function(func, threshold) {// 请实现
}
const triggerSearch = yourFunction((val) => {const {onSearch} = this.propsonSearch(val)
}, 300)
triggerSearch(searchText)
我的答案(可以先不看,自己现实一下)
// 第一题
const targetArray = [1, [2, 3], 4];
const formater = "[a, [b], c]";
const formaterArray = ['a', ['b'], 'c'];const destructuringArray = (values, keys) => {try {const obj = {};if (typeof keys === 'string') {keys = JSON.parse(keys.replace(/\w+/g, '"$&"'));}const iterate = (values, keys) =>keys.forEach((key, i) => {if(Array.isArray(key)) iterate(values[i], key)else obj[key] = values[i]})iterate(values, keys)return obj;} catch (e) {console.error(e.message);}
}console.dir(destructuringArray(targetArray,formater));
console.dir(destructuringArray(targetArray,formaterArray));// 第二题
const yourFunction = function(func, threshold) {let timeOut;return function() {if (!timeOut) {timeOut = setTimeout(() => {timeOut = null;func.apply(this, arguments)}, threshold)}}
}const triggerSearch = yourFunction((val) => {const {onSearch} = this.propsonSearch(val)
}, 300)
triggerSearch(searchText)

欢迎小伙伴们在评论区贴上自己的答案哦

第三轮 电话面试

主要谈到自己所开源的两个前端项目,这当然是我最喜欢的地方,遇到自己喜欢的东西根本停不下来,balabala说了太多(生活中我的话很少,属于比较内向的那种,哈哈),还有一些职业发展啊、个人想法啊之类的...

遗憾的是三面挂了,给的反馈是话太多,说不到重点。其实现在回想起来,个人觉得三面应该是我表现最好的一面,当时面完觉得稳过了,哈哈。因为谈的全是我了解的东西,随便一个问题,我都可以说上几分钟,但也正是这个原因导致了面试失败,说的太多也不一定是好事,有时候需要简洁,直击重点。

结语

很幸运一个专科生以半年的前端经验能获得阿里的面试机会,结局虽挂了,但也不是因为技术原因,内心还是很欣慰的,还有阿里的面试官都很nice,面完也会及时的反馈,当你紧张的时候会给你留时间调整,结局没过到也会给建议与鼓励。最后各位程序猿看官,丰富技术的同时不要忘了提升自己的表达能力哦


推荐阅读
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • XMLhttpREquest_Ajax技术总结之XmlHttpRequest
    Ajax1、 什么是ajax   ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
author-avatar
紫色咖啡调
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有