2018阿里前端测评

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

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

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

▍写在前面

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

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博客阿里前端测试题 - 博客园


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

查看所有标签

猜你喜欢:

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

支持向量机

支持向量机

邓乃扬、田英杰 / 科学出版社 / 2009-8 / 48.00元

《支持向量机:理论、算法与拓展》以分类问题(模式识别、判别分析)和回归问题为背景,介绍支持向量机的基本理论、方法和应用。特别强调对所讨论的问题和处理方法的实质进行直观的解释和说明,因此具有很强的可读性。为使具有一般高等数学知识的读者能够顺利阅读,书中首先介绍了最优化的基础知识。《支持向量机:理论、算法与拓展》可作为理工类、管理学等专业的高年级本科生、研究生和教师的教材或教学参考书,也可供相关领域的......一起来看看 《支持向量机》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具