Как пройти собеседование js junior разработчику? Что учить? Все здесь!
План:
Первая часть: без воды
Вторая часть (невозможно без воды)
Не забывайте, что в группе проводятся разборы тестовых заданий.
На вебинаре были слегка затронуты middle и team-lead, так же разобраны вопросы «из зала».
Вопросы скопированы из моего ответа на toster.ru
Ответы предоставлены для подписчиков vk группы — Обучение «Без воды». Приходите, научим. Имеется telegram канал.
Какую проблему решает react?
Самые «тяжелые» операции в web — работа с DOM. Реакт оптимизирует эту работу. Как? Virtual DOM + обновление страницы за минимум «телодвижений».
Мгновенно ли срабатывает
setState
? Если нет, то как выполнить код, который 100% выполнится после того, как новый state будет установлен?
setState (документация) — асинхронная функция. Чтобы выполнить, что-либо заведомо после обновления state, нужно использовать запись с callback’ом
this.setState({data: [1,2,3]}, () => {
console.log('здесь, уже точно state будет обновлен')
})
Так же, чтобы обновить состояние, основываясь на предыдущее, подойдет следующая запись:
this.setState((prevState, props) => {
return {counter: prevState.counter + props.step};
});
Совет: чтобы быть в курсе подобных вещей, нужно либо читать документацию, либо читать/смотреть какие-то последовательные курсы. Данные знания — фундаментальные, их должен осветить любой уважающий себя автор.
Зачем многие постоянно пишут в constructor:
this.FUNCTION_NAME = this.FUNCTION_NAME.bind(this)
и отсюда вопрос вытекает чему равноthis
в разных местах вашего компонента…
«Биндинг» чего-либо, это привязка к контексту. То есть, когда вы находитесь в конструкторе, this
ссылается на компонент. Следовательно, если какой-то из методов «прибиндить» (привязать) к this, то он всегда будет иметь внутри себя this ссылающийся на компонент. Так делается, в частности из-за того, чтобы не терять контекст this, когда идет запись не через «жирную arrow функцию».
Пример:
onInputChange(e) {
// если это обработчик с onChange инпута,
// то здесь обязательно this потеряется
// для этого вверху, в конструкторе записано
// this.onInputChange = this.onInputChange.bind(this)
// в таком случае, this ссылается на компонент
// и можно использовать
this.setState({ data: e.currentTarget.value })
}
Для решения через «жирную arrow функцию», требуется плагин transform-class-properties (входит по умолчанию в create-react-app)
onInputChange = (e) => {
// this не потеряется
this.setState({ data: e.currentTarget.value })
}
Про функцию bind
в каких методах жизненного цикла стоит выполнять
xhr
запросы? В каких стоит «обновлять state на основе props«?
Xhr (ajax, асинхронные запросы) — нужно выполнять в момент componentDidMount
Обновление state, на основе props:
Что будет если вызвать
this.setState
в render методе компонента?
Будут проблемы. Реакт перерисовывает компонент, если state изменился. setState === ситуации «стейт изменился», а «реакт перерисовывает компонент» === render метод. Получается, что будет циклическая перерисовка.
Зачем нужен
componenWIllUnmount
, приведите пример
CWU подходит для «приборки». Например, у вас есть компонент, который реагирует на onsize (изменение размеров) страницы. Затем вы планируете перейти куда-то, где этого компонента нет. Он будет (will) «размонтирован» (unmount), значит в этот момент нужно снять «слушателя» на ресайз, так как он вам более не нужен.
Контролируемые, не контролируемые компоненты
Не маленький вопрос. Суть: если input не имеет onChange
обработчика и value
, то он неконтролируемый. Можно сделать ссылку на него с помощью ref
. Таким образом, на сабмит формы, можно будет считать данные из инпутов, практически так же, как это делалось бы с нативным DOM. В чем смысл «неконтролируемого инпута»? Такое поведение может заметно сократить количество перерисовок компонента, куда этот input входит. Однако, если у вас обычная форма на несколько полей и более ничего в render тяжелого нет — все будет в порядке и с контролируемым инпутом (таким, в котором value смотрит на state/props и есть onChange)
Подробнее в документации: uncontrolled components, controlled components
Как организовать роутинг в реакт приложении?
Смотрим в window.location и на основе этого switch/case’ом выбираем какой компонент рисовать.
Так же можно посмотреть видео, как мы делали Route и Link компоненты на одном из вебинаров. Или почитать текстовую версию.
Зачем нужны
propTypes
? Что происходит с ними в production сборке?
Затем, чтобы быстро ориентироваться какие свойства и какого типа (строка, функция и т.д.) ожидает компонент. Проверка propTypes достаточно затратная, поэтому она полностью убрана из production сборки самим реактом.
Сегодня, в 2018м году, на больших проектах propTypes уступают место flow (где, через babel plugin они так же описываются, но строже) или TypeScript‘у.
Как можно удобно «отлаживать» чужой код приложения, написанного на react (намек в сторону React devtools)
Хороший и легкий вопрос на «поболтать». Отладка с помощью console.log, debugger, react devtools, выносом кода компонента на чистый проект и тд тп. Вариантов масса.
Какую проблему решает redux?
Управление состоянием (данными) всего вашего приложения.
Зачем многие создают типы действий NAME_REQUEST / NAME_SUCCESS ? А заодно, что такое «действие», а что такое «создатель действия»…
Для асинхронных действий многие используют подход, в котором есть «имядействия + request (запрос) _или + success (успех) или + failure (ошибка)». Таким образом удобно обрабатывать случившиеся ситуации в редьюсере (например, показать/скрыть прелоадер, показать ошибку или результат). Конечно, «показывает» — компонент, а в редьюсере мы лишь устанавливаем данные.
Действие (action) — это простой объект с обязательным полем type
и не обязательным payload
(либо любым другим). Есть соглашение standard flux action (flux, потому что redux переосмыслил/развил идею flux).
Создатель действия (action creator) — это функция, которая возвращает действие.
Пример создателя действия:
function addToto() {
return {
type: ADD_TODO,
payload: 'Пройти собеседование',
}
}
Пример действия (напоминаю, это простой объект):
{
type: ADD_TODO,
payload: 'Пройти собеседование',
}
Что такое редьюсер? Можете написать простой редьюсер без react/redux?
Редьюсер, слово производное от функции reduce. Это такая «штука», которая принимает прошлое состояние и возвращает следующее.
По ссылке выше, так же есть пример reduce функции для подсчета суммы чисел.
Для чего нужен redux-thunk? Как он работает? Напишите (можно псевдокод) асинхронный создатель действия (либо, если надоело говорить «терминами» — асинхронный aciton)
Redux-thunk нужен для того, чтобы внутри создателя действия у вас была функция dispatch
, чтобы с помощью нее «диспатчить» другие действия. Код redux-thunk’a состоит из 14 строк. Чтобы понимать как это работает, нужно знать как работают middleware.
Как компоненты приложения получают «пропсы» из «стора»?
Компоненты присоединены с помощью функции connect
. А на самом верху живет redux компонент <Provider />
. Provider умеет «прокидывать» пропсы вниз в потомков неявно. Используется старое API — context.
Можно ли (и считается ли это нормальным) использовать state, если используется Redux?
Разумеется да! Это нормально. Если изменяемое состояние компонента не нужно нигде, кроме него самого — это однозначно state.
Почему в reducer’ax мы возвращаем новые объекты? Приведите пример, когда вы возвращаете новый объект, а когда тот же самый.
Потому что redux использует простое сравнение: изменился объект или нет. А два объекта могут быть равны только в том случае, если они содержат ссылку на одно и тоже место в памяти. Следовательно, когда вы в старый объект записываете новое свойство, для redux это «тот же самый» объект и перерисовки не произойдет. Выше в вопросах про основы есть пункт «передача объектов по ссылке«, прочтите его если вам не понятен текст ответа.
Что возвращает функция connect (из react-redux)?
Connect возвращает новый компонент, обернутый в «приконекченный» компонент, в котором как раз и живут свойства, пришедшие из редьюсеров (которые туда любезно прокидывает Provider).
Вопросы в стиле: расскажите что это и для чего:
Если вы стажер/junior и работу необходимо получить любой ценой, то соответственно цель «получить работу«. Когда такое необходимо?
Советы:
Этот вариант грустный, и обычно он является следствием того, что человек, не верит в свои силы или находится в плену у лени. Веру в себя — это к психологу, а с ленью нужно бороться.
В остальных случаях, цель собеседования — вам получить то, что нужно от работодателя, а ему получить то, в чем есть необходимость у компании. Другими словами, договориться о таком сотрудничестве, которое устраивает обоих.
Не нужно:
Нужно:
Если так вышло, что по собеседованию видно, что на вопросы вы ответили слабо, попросите сразу подсказать что необходимо почитать/изучить/подтянуть и какие источники порекомендуют, спросите когда можно прийти еще раз. Одна только такая фраза может обеспечить вам испытательный срок с урезанной ЗП.
Почему можно приходить еще раз? А почему нет! Если снова удастся пройти через фильтр в виде кадрового специалиста и попасть в кабинет на тех.собеседование, то это же круто! Вы уже знаете, какие вопросы были, как минимум их можно обозначить лучше. Хороший специалист задаст и другие, но скорее всего, если вы реально готовились — получится. Да и можно снова спросить — когда зайти еще. Это не шутки, так как многие города, действительно, выдают очень малое количество привлекательных рабочих мест. Можно и побороться!)
Собеседование прошли, ТЗ сделали. Прошла неделя, в ответ ничего.
Что делать?
1) позвонить, поинтересоваться. Постараться получить обратную связь, это поможет стать лучше [1]
2) если обстоятельства позволяют, вычеркнуть контору из списка за неуважение.
[1] иногда, на такие назойливые вопросы могут ответить отпиской или еще хуже — вариантом не в тему. Нельзя верить этому на слово. Если объективно вам кажется, что все было неплохо, но вы получили: вы не подходите нам по уровню, то опять рекомендую уточнить — что именно не так. Ответа скорее всего не будет, но попытка зачтена.
Очень часто может быть так: позицию уже закрыли (пришел кто-то лучше или знакомый, или решили не искать кандидата временно), а с вами то что делать? HR, вообще, уже про вас забыла и с легкой подачи она пишет: «Вашего уровня недостаточно». Для неуверенного джуна это удар.
Совет:
Три собеседования — это абсолютный минимум для статистики.
Самый годный трюк. Представьте, что вы ищите работника. Кто вам нужен?
Харизма, знания, процесс собеседования и много других «случайных» факторов участвуют в уравнении успешного собеседования. Я повторюсь, адекватная заработная плата не будет сдерживающим фактором в адекватной компании.
Так же, вы должны представить себя «неопытным/ленивым» рекрутером или занятым начальником. Тогда вам будет ясно, почему никаких ответов на ваш почтовый адрес не приходит. Кто-то забил, кому-то лень, кто-то забегался. Взяли другого.
- Как говорите вас зовут?
- Такой-то
- А, спасибо, но вы нам не подходите {любая_причина}
лишь бы не тратить на вас время.
Нет смысла обижаться или переставать верить в свои силы. Это глупо.
Специально не обсуждал эту тему, так как все можно найти на hh.ru для своего региона. Однако, есть еще пара полезных ссылок:
Сказ о том, как Катя попала в Яндекс.деньги + сразу комментарий про зарплату
Главное в статье:
Ничего сверхестевственного не требовали:
умение взаимодействовать с сервером (транспорты, модель OSI и REST API);
понимание браузерных процессов (загрузка ресурсов, парсинг кода и рендеринг).
Мое мнение про зарплату в известных компаниях (основано в том числе и на давних разговорах в офисе):
Будут давить на вас, чтобы сократить издержки. Бренд привлекает внимание, это их сильная сторона в переговорах. Зачастую на таких собеседованиях пытаются показать кандидату, что у него мало знаний.
P.S. в свое время, на выставке E3 (про игры), у Half-Life 2 был очень скромный павильон, но народ, разумеется, шел туда толпами! Так же и с большими конторами: туда идут за опытом, за именем, но не за зарплатой (если речь про джуна/мидла).
Комментарий к статье про бестолковые задачи на собеседовании + сразу исправление опечатки от автора комментария
Краткая заметка о том, что многие программисты не могут написать метод сортировки пузырьком (и это нормально). Один из не знающих — создатель Ruby on rails.
Спорная статья на vc.ru (короткая, возможно реклама), но хорошо отражает следующие моменты:
В обоих случаях, как и в любой сфере, попасть на «специалиста» не просто. Результат не гарантирован.
Вопрос на тостере «Какие стратегии повышения зарплаты существуют» и ответ на него.
Стратегия проста — увеличивайте собственный профессиональный уровень на столько, чтобы свободно менять компанию, как только вас что-то перестало устраивать.
Фильтр «Топовые проекты на Github»
Про найм в Лабораторию Касперского (статья рекламная, но все же есть ответы на вопросы: что на собеседовании происходит и как. Речь про C++).
Интересные разделы:
Как всегда в комментариях присутствуют люди, которые либо хорошо в теме, либо «обиженные на жизнь», сказать кто есть кто — невозможно.
Авторский telegram канал «Пргрм с Козулей»
Блиц!
— Как вкатиться во фронтенд?
Научиться использовать поиск в гугле и Stack Oveflow. Остальное приложится с опытом. В интернете полно туторов, все уже разжевали по 100 раз и выплюнули для тех, кто умеет читать.
— Я уже какое-то время работаю, какой у меня уровень?
Универсального чек-листа на синиор-программиста на существует в природе. В каждой компании уровень меряют по себе. Точнее, даже в каждой отдельной команде. При этом естественно, что более опытному разработчику легче убедить окружающих в том, что он не верблюд.
— Реакт или ангуляр?
Реакт. Я начинал с первой версии ангуляра и вторая не сильно лучше.
— Тайпскрипт или джаваскрипт?
ActionScript 3.0, там есть настоящая типизация. Тайпскрипт можно использовать для того, чтобы подглядеть API библиотек, но заткнуть им все дыры все равно не получится.
Сегодня будем использовать parcel и IntelliJ IDEA Community Edition. Все инструменты бесплатные. Инициализация elm проекта…
На данном вебинаре мы знакомились с языком Elm проводя параллели между Elm и Redux, поэтому…
Richard Feldman рассказывает как масштабировать Elm приложение без боли. Показаны техники: extended records, подход narrow…
В данной заметке вы найдете конспект видео по Elm, которые я посмотрел в ноябре 2019.…
Итоги года 2019 // Max Frontend Покажи мне свой гитхаб, и я скажу работал ли…
Почему стоит изучать Elm? Потому что это интересный вызов, редкие (но вкусные) вакансии и хороший…
View Comments
:x :oops: :oops:
Странность статьи номер раз:
Про реакт
<>>
А в конце
<>
Доброго времяни суток, посоветуйте пожалуйста на какой cms лучше всего будет создать свой сообственый блог?
wordpress