2018阿里前端测评

栏目: jQuery · 发布时间: 5年前

内容简介:一时心血来潮,投了阿里的前端工程师,结果才刚开始投就被一道测评题搞焉了。▍写在前面先是在【校园招】看到阿里巴巴的校园招聘,查看了一下它的岗位要求。

一时心血来潮,投了阿里的前端工程师,结果才刚开始投就被一道测评题搞焉了。

▍写在前面

先是在【校园招】看到阿里巴巴的校园招聘,查看了一下它的岗位要求。

2018阿里前端测评

虽然我的能力不是全部都符合要求,但是自觉勉强还能够得上,就抱着试试看的心理去填了资料。

大公司不愧是大公司,阿里的招聘过程还是很复杂的:

2018阿里前端测评

和大部分科技公司网申流程差不多,填完了资料之后,就是一个测评。

▍测评

刚投了网易,也做了一次测评,两个公司都是在ceping.com上进行测评。测评大致分为两个大部分:第一个大部分是测评应聘者的语文能力、计算能力和逻辑能力,这一部分是限时的,超过规定时间没有完成题目就会跳出测评;第二大部分是自我测评,这一部分是让应聘者通过选择一些关键词来完成自我评价,这一部分是不限时的。

这也是一个郑重认识自己的过程。

▍编程测验

在开始测评之前,我看到后面还会有笔试,以为这个测验就是小试牛刀而已,然而我想错了。

/**
 * 题目:实现mergePromise函数,把传进去的数组顺序先后执行,并且把返回的数据先后放到数组data中。
 */

const timeout = ms => new Promise((resolve, reject) => {
	setTimeout(() => {
		resolve();
	}, ms);
});

const ajax1 = () => timeout(2000).then(() => {
	console.log('1');
	return 1;
});

const ajax2 = () => timeout(1000).then(() => {
	console.log('2');
	return 2;
});

const ajax3 = () => timeout(2000).then(() => {
	console.log('3');
	return 3;
});

const mergePromise = ajaxArray => {
	// 在这里实现你的代码

}

mergePromise([ajax1, ajax2, ajax3]).then(data => {

	console.log('done');
	console.log(data); // data 为 [1, 2, 3]
});

// 分别输出
// 1
// 2
// 3
// done
// [1, 2, 3]

看到题目的那一刻,我懵逼了,这是什么鬼……

题目倒是不难理解,大致应该是这样:

ajax1、ajax2、ajax3分别被定了时2s、1s、2s,那么照这个算法,最先执行的ajax2,那么先输出的就是2,而不是1。而题目的要求就是要先输出1,然后依次输出2、3,最后还要把1、2、3放到一个数组中输出。

从开始接触前端到现在也有一年时间了,但是这代码的书写方法我是真的看不懂,虽然我之前在学JS的时候也有见过“=>”这种写法,但是我从来没有用过,所以觉得这种表达方式很生僻,因此我一度怀疑这到底是不是Javascript代码,给我出这种题目,明摆着是不给我过咯??

这次既然碰上了就得去查查,我复制了题目的其中一段去百度了一下(从没想过要抄答案作弊,最后交的也几乎是白卷),搜索的前几条结果都是说这道题的。

首先我了解到了“=>”是个什么意思:

(x) => x + 6
 
相当于
 
function(x){
    return x + 6;
};

但是即使知道了“=>”是什么意思,我还是做不出这道题。。。

无奈之下,我去看了别人的答案,虽然看不懂,但是还是拿去亲自测试了一下,有以下两种版本,我注意测试了一下:

1、代码:

var data = [];
var sequence = Promise.resolve();
ajaxArray.forEach(function(item) {
	sequence = sequence.then(item).then(function(res) {
		data.push(res);
		return data;
	});
})
return sequence;

效果:

2018阿里前端测评

2、代码:

var _result = [];
var _exec = "(data) => {_result.push(data); resolve(_result);}";
for(var i = ajaxArray.length - 1; i >= 0; i--) {
	if(i != 0) {
		_exec = "(data) => {_result.push(data);ajaxArray[" + i + "]().then(" + _exec + ")}";
	} else {
		_exec = "ajaxArray[0]().then(" + _exec + ")";
	}
}
return Promise.all([new Promise((resolve, reject) => {
	eval(_exec)
}).then(data => {
	return data;
})]).then(data => {
	return data[0]
})

效果:

2018阿里前端测评

经过测试,两种方案都成功达到了效果。仅就代码量和可读性而言,个人认为是第一种方案更好。(我对异步编程这方面的知识没有了解,所以我也没办法从其他方面来比)

由于对这方面的知识一点都没有了解过,又不想作弊,就写了个解题思路和几句简单的代码就交卷了。

这一次的测验提醒了我:还有很多我不知道的知识,不能停下继续学习的脚步。

▍参考链接

阿里的一道测评题 - CSDN博客阿里前端测试题 - 博客园


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web开发敏捷之道

Web开发敏捷之道

Sam Ruby、Dave Thomas、David Heineme Hansson / 慕尼黑Isar工作组、骆古道 / 机械工业出版社 / 2012-3-15 / 59.00元

本书第1版曾荣获Jolt大奖“最佳技术图书”奖。在前3版的内容架构基础上,第4版增加了关于Rails中新特性和最佳实践的内容。本书从逐步创建一个真正的应用程序开始,然后介绍Rails的内置功能。全书分为3部分,第一部分介绍Rails的安装、应用程序验证、Rails框架的体系结构,以及Ruby语言的知识;第二部分用迭代方式创建应用程序,然后依据敏捷开发模式搭建测试案例,最终用Capistrano完成......一起来看看 《Web开发敏捷之道》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具