Опыт прохождения собеседования через Byte

интервью

2020 год — это не только зима Интернета, но и зима всей экономики.После того, как эпидемия пошла на убыль, я присоединился к армии ищущих работу, надеясь найти работу получше, чтобы поддерживать свою жизнь o(╥﹏╥)o.

Поскольку сейчас эпидемия — это все видеоинтервью, Byte использует Niuke.com, который поддерживает онлайн-видео и синхронное кодирование.

Фокус интервью

Представление себя — это основа интервью, и многие вопросы интервьюера исходят из вашего представления себя. Поэтому не забудьте рассказать о том, что вы знаете, когда представляете себя.

вопросы интервью

Всего за три раунда интервью было задано четыре вопроса.

Реализовать запрос захвата пакетов

В начале я не совсем понял требования интервьюера, а потом спросил конкретно, и наконец понял, что нужно реализовать функцию ограничения параллелизма.

function asyncPool(poolLimit, array, iteratorFn) {
  let i = 0;
  const ret = [];
  const executing = [];
  const enqueue = function () {
    if (i === array.length) {
      return Promise.resolve();
    }
    const item = array[i++];
    const p = Promise.resolve().then(() => iteratorFn(item, array));
    ret.push(p);
    const e = p.then(() => executing.splice(executing.indexOf(e), 1));
    executing.push(e);
    let r = Promise.resolve();
    if (executing.length >= poolLimit) {
      r = Promise.race(executing);
    }
    return r.then(() => enqueue());
  };
  return enqueue().then(() => Promise.all(ret));
}

Реализовать функцию защиты от тряски

так легко! Это должно быть у всех.

function debounce(fn, wait) {
  let timeout = null;
  return function () {
    if (timeout !== null) clearTimeout(timeout);
    timeout = setTimeout(fn, wait);
  };
}

Расширение: теперь есть поле ввода поиска с добавленной функцией защиты от сотрясений, но что происходит, когда последний запрос возвращается первым?

Предложите простую идею: скопируйте каждый запрос в идентификатор, а затем оцените, является ли идентификатор последним каждый раз, когда возвращается запрос.

Реализовать ленивую загрузку изображений

Это не будет реализовано здесь. Обеспечьте способ мышления. Самый важный шаг в ленивой загрузке изображений — это определить, что изображение вот-вот появится в окне, когда страница прокручивается.

Можем судить, что картинка за кадром, а потом инвертировать, вот и все.

Реализовать асинхронную функцию суммирования

Предоставьте метод асинхронного добавления следующим образом: вам нужно реализовать функцию await sum(...args);

function asyncAdd(a, b, callback) {
  setTimeout(function () {
    callback(null, a + b);
  }, 1000);
}

Реализация выглядит следующим образом:

async function sum(...args) {
  if (args.length > 1) {
    const result = await new Promise((resolve) => {
      asyncAdd(args[0], args[1], (err, result) => {
        if (!err) {
          resolve(result);
        }
      });
    });
    return sum(result, ...args.splice(2));
  }
  return args[0];
}

Серьезные студенты должны уметь обнаружить, что в текущей версии есть точка оптимизации, и время расчета можно сократить. Оптимизированная версия выглядит следующим образом:

function createAdd(a, b = 0) {
  return new Promise((resolve) => {
    asyncAdd(a, b, (err, result) => {
      if (!err) {
        resolve(result);
      }
    });
  });
}

async function sum(...args) {
  if (args.length > 1) {
    const result = [];
    for (let i = 0; i < args.length; i = i + 2) {
      result.push(createAdd(args[i], args[i + 1]));
    }
    return sum(...(await Promise.all(result)));
  }
  return args[0];
}

Резюме интервью

Вот копия, составленная другимиРуководство по собеседованию, очень полный, охватывающий все аспекты.

результат

Дальше волнительное время, собеседование пройдено, вакансия успешно принята,(^▽^).

Затем укажите адрес электронной почты.Студенты, которым нужны внутренние рекомендации, могут отправить мне свои резюме: jiangjiyun@bytedance.com

Кстати, предусмотрен внутренний push-канал доставки резюме, где можно искать вакансии и отправлять резюме: