Запишите интервью стажировки по фронтенд-разработке ByteDance Data.
одна сторона
Потому что первоначальный интервьюер провел временное совещание, а через некоторое время сменился новый интервьюер. Атмосфера интервью по-прежнему очень гармоничная, и каждая часть контента освещена и будет подробной. Вероятно, есть основы JavaScript, алгоритмы, компьютерные сети и шаблоны проектирования.
-
Самостоятельное введение
-
это обсуждение
-
Скажи мне, как изменить точку этого
Это определяется средой выполнения. Существуют методы вызова, применения и связывания. Это также изменяется при создании нового объекта.
-
прочитать код сказать результат
От основ к сложным есть много тем, наверное помните эти
function a() { console.log(this.name); } a();var name = 1; a();a.prototype.name = 2; a()function b() { this.value = this.name; } b();let c = {name: 3}; c.say = a; let d = c.say; c.say(); d();
-
-
привязать реализацию
-
Если вы хотите быть совместимым с IE, просто реализуйте привязку (яма, вырытая вами в приведенном выше вопросе)
// 当时写的代码,没考虑参数 Function.prototype.bind = function (obj) { return () => { this.call(obj); } } -
Зачем здесь использовать стрелочную функцию?Можно ли вышеприведенную функцию заменить стрелочной функцией?
Поскольку у самой стрелочной функции this нет, привяжите внешний this. Вышеупомянутая функция не может быть заменена функцией стрелки
-
-
Вы читали исходный код Vue? Простая реализация модели публикации-подписки
Я невнимательно прочитал исходный код😀, но не все понял.
Я подумал о включении, испускании, выключении и однажды в моей голове, я остановился на полпути к письму, и это было трудно найти легким. . .
class EventHelper { construct() { this._eventMap = {} } on(fn, cb) { this._eventMap[fn] ? this._eventMap.push(cb) : this._eventMap[fn] = [cb]; } emit(fn, ...args) { if (this._eventMap[fn]) { this._eventMap[fn].forEach((cb) => cb.apply(this, args)) } } off(fn) { if (this._eventMap[fn]) { delete (this._eventMap[fn]) } } once(fn, cb) { this.on(fn, () => { cb(); setTimeout(() => { this.off(fn); }) }) } } -
UDP & TCP
-
Скажи разницу между двумя
-
Как определить, является ли пакет UDP или TCP
Так жестоко, я не думал об этом какое-то время. В начале я ответил на трехстороннее рукопожатие TCP, а потом спокойно подумал, что вроде бы есть эта отметка в IP-сегменте.
-
-
HTTPS
-
скажи принцип
Давайте поговорим о TLS, асимметричном шифровании, симметричном шифровании. . .
-
атака «человек посередине»
О процессе
-
Возможно ли изменить данные, или после того, как данные изменены, принимающая сторона не распознает их?
О цифровых подписях
-
-
кеш браузера
-
Подскажите какие методы
Cache-control, ETag, Last-modify
-
Скажите, когда вы должны использовать ETag
Я не додумался до всего сразу, поэтому сказал, когда мне нужно использовать last-modify (к счастью, интервьюер меня отпустил😝)
Отмечено: last-modified не распознает модификацию в s (втором) блоке, поэтому, если ресурс изменен в s (втором) блоке, last-modified не изменится.
-
-
левое представление бинарного дерева
Моя идея заключается в обходе уровня дерева. Интервьюер сказал, что идея похожа, то есть использование null в качестве идентификатора может быть не очень элегантным.
1 2 3 4 5 6 7 8 => 1248 // 当时大概的代码 function leftSee(node) { const arr = []; arr.push(null) arr.push(node); while (arr.length > 0) { let t = arr.shift(); if (t === null) { arr.push(null); t = arr.shift(); if (t == null) return; console.log(t.value); } if (t.left) { arr.push(t.left) } if (t.right) { arr.push(t.right) } } }
две стороны
Интервьюер со второй стороны вызывал у людей более «непринужденное» ощущение, и все интервью напоминало беседу. Но содержание вопроса очень разное, и вопрос может включать в себя много точек знаний.
Я не чувствую, что ответил очень хорошо, и основные пункты были достигнуты, но многие из них не ответили на все из них.После интервью я думал, что провалюсь. Я чувствую, что мне нужно больше думать, когда я обычно пишу проект: в чем преимущества написания таким образом, в чем преимущества, почему это хорошо, а в чем недостатки.
-
Самостоятельное введение
-
Расскажите о новых возможностях Vue3
Настоящий, настоящий!
В то время я в основном говорил о двух моментах: 1. Прокси заменил Object.defineProperty, потому что Object.defineProperty не может отслеживать вложенные свойства, ему нужна рекурсия, и он не может отслеживать массивы, поэтому ему нужно переопределять методы. 2. Поддерживает пользовательский рендеринг.В настоящее время базовый API рендеринга Vue2 не предоставляется разработчикам.Например, mpvue разветвляет весь исходный код Vue, а затем изменяет базовый рендеринг. Другие также упомянули TypeScript, объявление объекта и размер пакета среды выполнения. .
-
виртуальный DOM
-
Расскажите о преимуществах и недостатках виртуального DOM по сравнению с оригинальным DOM.
Упомянуты только преимущества: 1. Используйте вычисления JS в обмен на операции DOM для повышения производительности. 2. Нет необходимости напрямую манипулировать DOM. 3. Кроссплатформенная разработка, weex
-
По svelte framework какие еще минусы можно сказать по аналогии?
Я не слышал о svelte, и интервьюер кратко рассказал о преимуществах этого фреймворка.
懵 懵 脸 🙃
-
-
BFC
-
что
Контекст форматирования на уровне блока, а также IFC, FFC, GFC
-
когда использовать
Сворачивание полей, очистка внутренних дочерних элементов от плавающих
-
как вызвать
......Я не думал обо всем этом 😐, я вспомнил, что поплавок - это не никто
-
-
мобильный
-
Адаптация мобильного терминала
Медиа-запросы @media загружают различные макеты css, flex, float. .
-
разница между рем и эм
Я не думаю, что ответ хороший.Говорят, что rem определяется на основе размера шрифта HTML-элемента.
-
-
Vuex использовал модули, давайте поговорим о том, как действия в файле A изменяют состояние файла B.
- Непосредственно импортируйте файл B в файл A и вызывайте действия B😁. 2. Третий параметр отправки — {root: true}
-
TypeScript
-
Что означает восклицательный знак после переменной?
Забыл 🙃, это должно быть ненулевое утверждение
-
Методы утверждения типа
-
Преимущества и недостатки
-
-
Node
Спросите меня, как освоить узел, я сказал, что буду использовать только его, и основная часть все еще изучается. . . Б/у экспресс и яйцо
-
асинхронный
-
см. код
async function test() { return 1 } async function call() { const a = test(); const b = await test(); console.log(a, b); } call(); -
Каков результат этого письма, и что можно улучшить?
async function test() { const resp1 = await getApi1(); const resp2 = await getApi2(); console.log(resp1, resp2); return 1 }Поскольку await будет блокироваться, getApi2 не сработает, пока getApi1 не вернет результат, вы можете использовать Promise.all для запуска одновременно.
-
-
Promise.all
Наверно напишу принцип Promise.all
Не видел, могу только на месте поиграть (я сам выкопал, когда плачу 😭)
Я общался с интервьюером во время написания, потом сказал, что общая идея похожа, но я хотел вернуться и посмотреть. . .
Promise.prototype.all = function(promiseArr) { const len = promiseArr.length; const result = new Array(len); let flag = 0; return new Promise((resolve, reject) => { promiseArr.forEach((cb, index) => { Promise.resolve(cb).then( res => { result[index] = res; // 注意数组中的顺序,当时直接写了push🙃 if (++flag === len) { resolve(result); } }, error => { reject(error) }) }) }) }
Три стороны
Интервьюер с трех сторон должен быть супервайзером.Он очень добрый.Как только подошел,спросил,поел ли я.Собеседую уже давно.Хочешь сделать перерыв😊
Я лично считаю, что все три стороны относительно просты. Это не включает в себя реализацию конкретного API. В основном изучается, как дать практическое решение проблемы. У него сильное дивергентное мышление. Интервьюер будет направлять вас шаг за шагом. дать относительно комплексное решение. В период упоминалось, что для управления данными используется Vuex, и интервьюер прямо сказал, что к Vuex это не имеет никакого отношения. Потребности, выраженные интервьюером, очень ясны, пока потребности практически решены в соответствии с предложенными потребностями, все будет в порядке.
к счастью, три собеседования позади, интервьюер сказал, что впереди еще собеседование с HR, но уже немного поздно, так что я проведу его завтра.
-
Самостоятельное введение
-
Представление ключевых проектов, сложные задачи
В основном я говорил об итерации версии проекта, управлении разрешениями промежуточной платформы и модульности. . .
-
Схема контроля разрешений, как она реализована и какова общая идея?
-
Как разделяется модуляризация и что конкретно сделано
-
Предложена функция подсказки удаленного поиска в поле ввода
-
Расскажите о своих идеях
Упомянул общую идею, анти-шейк, Барабара
-
Что делать, если вы вводите одно и то же несколько раз
Можно кэшировать в localStorage, проверяйте локально, прежде чем делать запрос
-
Таким образом, вам нужно каждый раз заходить в localStorage.Есть ли лучшее решение?
Когда страница загружается, она извлекается из localStronge и сохраняется в карте, а когда страница уходит, новая карта сохраняется в localStronge.
-
Как синхронизировать данные в localStorage, если данные на сервере обновляются
Вы можете узнать из кеша браузера и добавить идентификаторы, чтобы разделить данные на две части: использовать «сильный кеш» для тех, которые не будут изменяться в течение определенного периода времени; использовать «кеш согласования» для часто изменяемых данных и проверять сервер. каждый раз, когда вы используете его. Есть ли какие-либо модификации
-
-
Подскажите, как версия итерируется
-
Когда приходить на стажировку
мой вопрос
-
одна сторона:
-
За это время я изучил Flutter и React, Как вы думаете, я буду использовать больше фреймворков за ограниченное время или какое-то углубленное изучение?
-
Стек байтовых технологий
-
-
Вторая сторона:
Что-то стояло за интервьюером и не давало мне возможности задать вопросы😥
-
Три стороны:
- Есть ли у байта способ обучать новых людей?
- Основано ли это на исследованиях и разработках или на бизнесе?
Ссылки
благодарныйPanJiaChen(vue-element-admin) боссаpush-код