Прошло два года,увидеть Короля Драконов. Прочитал очередной байт недавно.Перед интервью прочитал много отличных статей от Наггетс.После интервью дам отзыв.Хотя содержание моего интервью действительно слишком простое,может быть фейк,а ссылка не имеет смысла.
задний план
Я закончил учебу в 2018 году и до этого работал в экспортной компании, занимающейся электронной коммерцией. Когда я впервые приехал сюда, я планировал выйти и посмотреть его через два года.Хотя все говорили, что эпидемическая ситуация не очень хорошая, я все же решительно смирился.
Одно — выполнить обещание года (внутренний вкус есть), а другое — почувствовать, что в предыдущей компании нет места для улучшения, а из-за эпидемии случилось разное.
16 июля я уволился с работы, решая вопросы дома и играя в игры. 30 byte hr добавил меня в WeChat, я узнал об этом, сказал, подождите, пока я разберусь с моим резюме, я дал свое резюме 5 августа, а собеседование было назначено на 24-е после оценки в тот же день.
Скажи мне, почему вы выбрали 24. Во-первых, я посмотрел на Писание лапши на самородках, и я чувствовал, что я был хорошим блюдом. Я оставил немного времени подготовки. Байты могут составлять около 30 дней. Я думал об этом, и я не планирую быть слишком поздно , 17 дней всегда достаточно. Во-вторых, потому что у меня долгое время не было интервью, я планировал найти компанию для интервью в середине, но я все еще очень нервничал во время интервью.
Поговорим о личной встрече и подготовке к собеседованию.
Священные Писания
Одна сторона 50мин.
Раньше основным стеком технологий был Vue, а более поздний проект писали Reack + Mobx. После того, как интервьюер просит его представиться, он начинает со схемы:
- Расскажите о разнице между Vue и React?
- В чем разница между объектом Mobx и картой? основная реализация? (я не понимаю этого
- Крюки использовали его? (Раньше я говорил, а потом спускался
- Как Vue реализует двустороннюю привязку?
- Каковы недостатки defineProperty? Зачем использовать прокси и что вы знаете о прокси?
- Вопрос по программированию Реализовать модель публикации-подписки (дайте фреймворк, пусть конкретная реализация
- Как Websocket устанавливает соединение?
- Что вы понимаете под BFF? Почему Node поддерживает высокую степень параллелизма? Как многопоточность влияет на производительность помимо переключения контекста?
- Поговорите о том, как решить проблему, связанную с тем, что элементы-заполнители react-sticky не могут обновляться синхронно, читая исходный код.
- Алгоритм задачи K-й самый большой элемент в массиве (быстрый ряд, я сначала говорю об идее, а потом спрашиваю временную сложность, а потом пишу
- Программная проблема Ручное управление одновременными запросами fetchWithLimit
- Есть вопрос ко мне?
Это все, что я могу вспомнить.Кроме алгоритмов программирования, другие основные вопросы задаются из резюме, а ссылка не имеет смысла.
В то время была проблема с быстрой сортировкой. Интервьюер сказал, что не нужно сортировать на месте. Я объяснил это интервьюеру. Позже я узнал, что это было написано неправильно, но вариант использования на тот момент был правильным. . .
fetchWithLimit написал Promise.all, интервьюер сказал, что это не самая быстрая реализация, из-за нехватки времени писать не буду, дайте пять минут подождать следующего раунда
Две стороны 50мин
- Проблема программирования вручную контролировать одновременные запросы FetchwithLimit как можно быстрее
- Алгоритм массив в тяжелые, внедрение ES5, различать числа и строки
- Задача алгоритма определения наличия цикла в односвязном списке
- Какие трудности в рассказе о проекте IM?
- Почему бы не использовать фреймы для форматированного текста?
- Как получить событие вставки? Как понять, что картинка вставлена?
- Как сделать сжатие изображения?
- Почему Websocket инкапсулирован? Как делается сердцебиение?
- В чем разница между Коа и Экспресс?
- Вы знаете что-нибудь о модуляризации, говорите о модулях CommenJS и ES6?
- Расскажите о своем проекте с открытым исходным кодом и почему?
- Кроме этих, что еще хотите сказать, есть ли исследования в других направлениях?
- Вы видели исходный код Vue?
- Разговор о http1.0 http1.1 http2.0 http3? знать, как много сказать
- Говоря о кэшировании, как отключить сильное кэширование?
- Что еще вы хотели бы сказать?
- Есть вопрос ко мне?
На второй стороне три вопроса.Вопросы по программированию такие же как и на первой стороне,но по другому,я сначала обрадовался,и написал одну сторону челноком.Самый быстрый написать не смог , и немного объяснил, я сказал, что попробую. В итоге было написано как владелец карты.В то время я не думал как это выполнить в цикле(рекурсия) Я спросил идею и передал ее первым. Следующие два легко, а затем спросил проект.
Интервьюер на втором собеседовании дал мне много свободы и всегда давал поиграть, типа: рассказать об этом проекте, что я могу сказать, и что еще хочу сказать, кроме вышеперечисленного. В результате каждый раз мой разум был пуст и не знал, что сказать, а потом он улыбался: «Забудь об этом, позволь мне спросить».
Наконец, я спросил, есть ли у меня какие-либо комментарии или предложения для меня.Я сказал, что я вижу, что я прагматичный человек, но мне, возможно, потребуется более глубоко укрепить его. Относительно справедливо. Вечером hr назначил три встречи на 26-е.
Три стороны 40мин
Я был так взволнован тем, что первые две стороны были такими простыми, что я чувствовал себя брошенным. Но мне еще нужно подготовиться, я чувствую, что это в основном программирование и алгоритмы, поэтому я пошел в Niu Ke, чтобы собрать вопросы по программированию алгоритмов в фейсбуке и почистил их, а следующими вопросами я поделюсь позже.
Было пять часов дня с трех сторон. Интервьюер был немного серьезен, а я нервничал. В итоге большую часть времени мы говорили о нетехнических, технически только этих двух:
- Вернуть индексы двух чисел в массиве, сумма которых равна заданному числу?
- Как определить, был ли подделан https?
литкод первый вопрос. . Я быстро дописал, спросил про временную сложность, а потом сказал сумму трех чисел, что такое сложность и как это сделать? Просто расскажи об идее. Как выявить тамперинг в середине https я не знаю, поговорим о первом рукопожатии, а дальше симметрично шифруются следующие данные. Можно ли это изменить? Тогда сказать, что оно не расшифровано, значит уничтожить. Это значит, что я не понимаю. На самом деле, вы можете подумать о том, как с этим бороться, если столкнетесь с ним.
Нетехническая проблема заключается в том, чтобы увидеть, что вы за человек с разных сторон, можете ли вы выполнять работу Байта, ваши планы на будущее и так далее. Среди них я упомянул оценку второго интервьюера, он сказал, что глубина также зависит от проекта компании. В дальнейшем я говорил о том, о чем думал в последнее время. Позже он спросил: "Ты человек с настойчивостью? Многие говорят, что ты не можешь этого сделать". Я ничего не делаю, я играю в игры каждый день. Раньше я смотрел некоторые вещи для интервью, но теперь это может быть больше профессиональный подход.
Больше ничего не скажу.Во всяком случае, в этот период времени я чувствую, что я действительно хорош, и я намного лучше, чем я с точки зрения поступления в школу.Так в чем же мои преимущества? Может быть, только накоплен небольшой проектный опыт. .
Наконец заставил меня ждать 20 минут для следующего раунда.
ЧСС лицо 40мин
Менее чем через 20 минут я попросил HR о следующей встрече и сказал, что буду использовать Zoom, когда встречусь с HR. HR также будет задавать много вопросов. Результаты от трех до пяти рабочих дней.
подготовка к интервью
Структуры данных и алгоритмы
Алгоритм не чистил раньше, начал готовиться после увольнения, рекомендуетсяшпаргалка по алгоритму Лабуладонга, Говоря о структуре решения проблем различных типов тем, у всего есть методология, и очень быстро освоить метод. Читал не весь, прочитал часть, правила перемещения, откат, раздвижные окна, рюкзаки, запасы и т.д., то есть серия must-read почти закончена. Поначалу читать было медленно, но постепенно я перешел от замешательства, когда увидел вопрос об алгоритме, к размышлениям о том, в чем проблема, в первую очередь, когда я увидел вопрос об алгоритме.
Структура данных Рекомендуемое время разработки«Красота структур данных и алгоритмов»(Мои покупки по ссылкам будут иметь кэшбэк), яркие и простые для понимания, в сочетании с практическими приложениями, позволили мне понять многие вещи, которые я раньше не понимал.
Если вы хотите почистить напрямую, вот список заданных вопросов и вопросы, которые я собрал.Большинство из них легкие, а некоторые сложные.Также вы можете увидеть много предложений.Если у вас есть время,рекомендую вам указать на предложения... Закончила чистку (я только почистила 37). К тому времени, когда я дошел до 3, у меня было в общей сложности 123 гребка - 58 легких, 51, сложных 14. Вопрос интервью оказался таким простым. Однако я также чувствую, что алгоритм на самом деле довольно интересный, и я планирую делать это каждый день.
Также поймите сложность времени, интервью спросило меня, сколько сложность несколько раз.
Строка/массив
- Предложение мечника 39.Числа, встречающиеся в массиве более половины раз
- Предложение мечника 50.первый символ, который встречается только один раз
- Матрица печати 45°, матрица печати в мягкой обложке
связанный список
- Предложение мечника 24.обратно связанный список
- Предложение мечника 25.Объединить два отсортированных связанных списка
- Предложение мечника 52.Первый общий узел двух связанных списков
- Вопросы для интервью 02.07.Пересечение связанного списка
стек/очередь
- Предложение мечника 09.Реализация очереди с двумя стеками
бинарное дерево
- Предложение мечника 28.Симметричное бинарное дерево
- Предложение мечников 32 - I.Распечатайте бинарное дерево сверху вниз
- Предложение мечников 55 - I.глубина бинарного дерева
- Передний средний и задний порядок знают второе двоичное дерево сокращения
динамическое программирование
- Предложение мечника 19.соответствие регулярному выражению
отступление
- Предложение мечника 38.расположение струн
Перед тем, как самолет через школу завербовать в старшего брата, кистью взглянуть на эту проблему, глухи к мышлению, и до того, как столкнулись с dp [n], представляет собой n-ю позицию, это последнее значение диапазона этой темы, я делаю не знаю, я правильно делаю:
/**
* 给定一个正整数数列a, 对于其每个区间, 我们都可以计算一个X值;
* X值的定义如下: 对于任意区间, 其X值等于区间内最小的那个数乘上区间内所有数和;
* 现在需要你找出数列a的所有区间中, X值最大的那个区间;
* 如数列a为: 3 1 6 4 5 2; 则X值最大的区间为6, 4, 5, X = 4 * (6+4+5) = 60;
*
* 作者:甘先森
* 链接:https://juejin.cn/post/6844904088337907720
* 来源:掘金
* 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/
function getMaxX (array) {
let n = array.length
if (n === 0) return 0
let min = [array[0]]
let dp = [array[0] * array[0]]
let max = dp[0]
for (let i = 1; i < n; i++) {
let val = array[i]
let preMin = min[i - 1]
min[i] = Math.min(preMin, val)
let one = dp[i - 1] * min[i] / preMin + val * min[i]
let two = val * val
if (one > two) {
dp[i] = one
} else {
dp[i] = two
min[i] = val
}
max = Math.max(max, dp[i])
}
return max
}
console.log(getMaxX([3,1,6,4,5,2])) // 60
вопросы по программированию
Эта статья хороша,«Однажды и навсегда» отправит вам 21 высокочастотный рукописный вопрос JavaScript для интервью.. Вы должны написать его сами.Вышеупомянутое не без проблем, и это не обязательно метод реализации.На собеседовании вас могут спросить, есть ли у вас другие методы, такие как дросселирование, и акцент делается на идеях. fetchWithLimit, который я спросил в интервью, похож на тот, что внутриРеализовать функцию, позволяющую выполнять до n задач одновременно..
Кроме того, можно увидеть такие, как рукописный Promise, операции с числами с плавающей запятой, умножение больших чисел и т.д.
Затем поделитесь, чтобы увидеть письменный тестовый вопрос:Письменные тестовые вопросы интерфейса Toutiao — реализация асинхронного планировщика обещаний с ограничением параллелизма, Но ответ этого старика проблематичен, и заголовок был изменен.
/**
* JS实现一个带并发控制的异步调度器,保证同时运动的任务最多有两个,完善下面代码
*/
class Scheduler {
add (promiseCreator) { ... }
//...
}
const timeout = (time) => new Promise(resolve => setTimeout(resolve, time))
const scheduler = new Scheduler()
const addTask = (time, order) => {
scheduler.add(()=> timeout(time)).then(() => console.log(order))
}
addTask(1000,1)
addTask(500,2)
addTask(300,3)
addTask(400,4)
Моя реализация:
class Scheduler {
constructor (limit = 2) {
this.limit = limit
this.concurrent = 0
this.stack = []
}
add (promiseCreator) {
if (this.concurrent < this.limit) {
this.concurrent++
return promiseCreator().then(() => {
this.concurrent--
this.next()
})
} else {
let resolve
let p = new Promise(r => {
resolve = r
})
this.stack.push(() => {
promiseCreator().then(() => {
resolve()
this.concurrent--
this.next()
})
})
return p
}
}
next () {
if (this.stack.length > 0 && this.concurrent < this.limit) {
let p = this.stack.shift()
this.concurrent++
p()
}
}
}
Основы работы с компьютером, основы интерфейса и т. д.
Нельзя сказать, что «Наггетс» много искали. В этот раз я подготовил свою волну, их довольно много, и я могу позже организовать их в модули.
хороший текст
- 2-летнее мысленное путешествие Арт Мяу (ByteDance, YY, Huya, BIGO) | Nuggets Technical Papers
- Контрольный список самопроверки для [квалифицированного] фронтенд-инженера
- См. хороший проект с открытым исходным кодом для фронтенд-интервью.
Не "верьте в книгу", как этоБлокировка DOM, CSS, JS, парсинг порядка рендеринга
В красном поле есть проблема, которая заставила меня выглядеть смущенным, сказал, что хороший CSS не заблокирует парсинг DOM? Наконец, я сам написал демо и обнаружил, что консольная печать впереди.
Суммировать
Это интервью включало в себя несколько вещей, которые я чувствовал во время подготовки к интервью:
- я слишком разборчив
- Алгоритмы это интересно
- Играйте меньше в игры и узнавайте больше
Наконец, загадай желание ~
(Как решить проблему, из-за которой полная стековая синяя тема mdnice превышает лимит слов?