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-канал доставки резюме, где можно искать вакансии и отправлять резюме: