📜  亚马逊面试经历 |设置 332(校外)(1)

📅  最后修改于: 2023-12-03 15:36:06.039000             🧑  作者: Mango

亚马逊面试经历 |设置 332(校外)

简介

此次面试是亚马逊校外招聘的前端开发岗位面试,共分为两轮,第一轮为在线代码测试,第二轮为线上视频面试。

第一轮

第一轮采用在线代码测试的形式,主要考察对前端知识的掌握以及对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);
总结

此次面试考察了前端基础知识和实际工作经验,挑战性适中,对于有一定工作/实习经验的前端开发人员而言是一次不错的机会。