📅  最后修改于: 2023-12-03 15:36:06.039000             🧑  作者: Mango
此次面试是亚马逊校外招聘的前端开发岗位面试,共分为两轮,第一轮为在线代码测试,第二轮为线上视频面试。
第一轮采用在线代码测试的形式,主要考察对前端知识的掌握以及对JavaScript语言的理解。考试时间为60分钟,题目数量为5道,分值分别为10、20、20、25、25分。题目难度适中,需要掌握基本的HTML、CSS、JavaScript以及DOM操作知识。
以下是第一轮测试的一道题目,要求实现一个函数,将一个数字转换为对应的罗马数字字符串。
var intToRoman = function(num) {
const ROMAN_MAP = [
{ value: 1000, symbol: 'M' },
{ value: 900, symbol: 'CM' },
{ value: 500, symbol: 'D' },
{ value: 400, symbol: 'CD' },
{ value: 100, symbol: 'C' },
{ value: 90, symbol: 'XC' },
{ value: 50, symbol: 'L' },
{ value: 40, symbol: 'XL' },
{ value: 10, symbol: 'X' },
{ value: 9, symbol: 'IX' },
{ value: 5, symbol: 'V' },
{ value: 4, symbol: 'IV' },
{ value: 1, symbol: 'I' },
];
let result = '';
for (const pair of ROMAN_MAP) {
const count = Math.floor(num / pair.value);
result += pair.symbol.repeat(count);
num -= count * pair.value;
}
return result;
};
第二轮采用线上视频面试的形式,主要考察对具体工作流程的理解以及处理问题的能力。面试时间为45分钟,分为自我介绍、项目经历介绍、技术问题等环节。
以下是第二轮面试中的一道需求题目,要求实现一个Gallery组件,在页面上呈现一个图片轮转效果。
class Gallery {
constructor(galleryElement) {
this.galleryElement = galleryElement;
this.currentIndex = 0;
this.showImage(this.currentIndex);
this.intervalId = setInterval(() => {
this.currentIndex = (this.currentIndex + 1) % this.getNumImages();
this.showImage(this.currentIndex);
}, 3000);
this.playButtonElement = galleryElement.querySelector('.play-button');
this.playButtonElement.addEventListener('click', () => {
clearInterval(this.intervalId);
this.showImage(this.currentIndex);
this.intervalId = setInterval(() => {
this.currentIndex = (this.currentIndex + 1) % this.getNumImages();
this.showImage(this.currentIndex);
}, 3000);
});
this.prevButtonElement = galleryElement.querySelector('.prev-button');
this.prevButtonElement.addEventListener('click', () => {
this.currentIndex = (this.currentIndex - 1 + this.getNumImages()) % this.getNumImages();
this.showImage(this.currentIndex);
});
this.nextButtonElement = galleryElement.querySelector('.next-button');
this.nextButtonElement.addEventListener('click', () => {
this.currentIndex = (this.currentIndex + 1) % this.getNumImages();
this.showImage(this.currentIndex);
});
}
getNumImages() {
return this.galleryElement.querySelectorAll('img').length;
}
showImage(index) {
this.galleryElement.querySelector('.current-image').classList.remove('current-image');
const image = this.galleryElement.querySelectorAll('img')[index];
image.classList.add('current-image');
}
}
const galleryElement = document.querySelector('.gallery');
new Gallery(galleryElement);
此次面试考察了前端基础知识和实际工作经验,挑战性适中,对于有一定工作/实习经验的前端开发人员而言是一次不错的机会。