Frontend Interview - собеседования по Javascript / Html / Css
11.5K subscribers
2.1K photos
118 videos
319 files
530 links
Канал для подготовки к собеседованиям по фронтенду

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront

Купить рекламу: https://telega.in/c/frontendinterview

Канал в реестре РКН:
https://rknn.link/su
Download Telegram
Объясните, что делает приведенный выше код

Приведенный код использует генераторную функцию (function*) и ключевое слово yield для создания итератора, который будет возвращать значения в цикле.

Давайте разберем код по шагам:
1. Сначала определяется генераторная функция fn, которая принимает аргумент num. Генераторная функция отличается от обычной функции тем, что может приостанавливать свое выполнение и возобновлять его позднее.

2. Внутри генераторной функции есть цикл for, который итерирует от 0 до num - 1. В каждой итерации цикла выполняется следующая строка кода.

3. Ключевое слово yield используется для приостановки выполнения функции и возврата значения во время каждой итерации цикла. В данном случае, yield console.log(i) приостанавливает выполнение функции и выводит значение i в консоль. Затем yield возвращает undefined.

4. После выполнения каждой итерации цикла, выполнение генераторной функции приостанавливается, и управление передается обратно во внешний код.

5. Затем создается переменная loop, которая получает результат вызова генераторной функции fn(5). Это создает итератор, связанный с генераторной функцией.

6. Вызов loop.next() запускает выполнение генераторной функции до первого ключевого слова yield. В данном случае, это приведет к выполнению console.log(0) и возврату объекта {value: undefined, done: false}. Значение value равно undefined, потому что console.log() не возвращает никакого значения.

7. Затем вызов loop.next() возобновляет выполнение генераторной функции сразу после последнего ключевого слова yield. В данном случае, это приведет к выполнению console.log(1) и возврату объекта {value: undefined, done: false}.

Таким образом, код последовательно выводит числа от 0 до 1 в консоль.

👉 @frontendInterview
👍17
Что выведется в консоль?
Anonymous Quiz
36%
true true
11%
false true
15%
true false
38%
false false
🔥8👎3👍2
Объяснение:

При использовании флага "global" или "sticky" у RegExp появляется состояние. У него есть lastIndex полученный из предыдущего вызова регулярки. При первом вызове lastIndex'у присваивается 5 (индекс на котором регулярка остановилась) и при следующем он начинает поиск с этого индекса, но т. к. это конец строки - там ничего нет и он выдаёт false (и lastIndex, кстати, обратно устанавливается в 0).

👉 @frontendInterview
👍242👎2🔥1
Можете ли вы описать суть методологии git flow?

Git-flow — наиболее популярная методология разработки проектов с использованием git.

Зачем нам вообще нужны какие-то методологии для работы с git?
Дело в том, что сам git не привязывает нас к какому-либо определённому способу разработки, и каждый разработчик, в теории, может работать с контролем версий так, как он хочет. Чтобы в таких условиях не погрузить наш репозиторий в хаос, нам нужно придумать и донести до всех разработчиков некий единый стандарт для работы с контролем версий в проекте.

Всего в git-flow существует 5 типов веток, каждый из которых несёт определённую функциональную нагрузку.

 develop
Ветка существует на протяжении всего процесса разработки. В данную ветку попадает стабильный код новых фич и багфиксов.

 feature-*
Временные ветки, которые создаются для каждой нетривиальной фичи.
Каждая ветка feature отделяется от develop и мержится обратно в него. После завершения работы над фичей и финального мержа в develop, ветка удаляется.

 master
Ветка, куда поступают самые стабильные изменения, которые идут в релиз. Существует на протяжении всего процесса разработки.
В ветку master мержатся только изменения из веток release и hotfix. На каждый такой мерж создаётся тег с именем версии.

 release-*
Временные ветки, создаваемые для подготовки новой версии к релизу. В эти ветки попадают правки багов и настройки перед релизом.
Ветка выходит из develop и может мержится в develop по ходу подготовки версии. Как только работа над версией заканчивается, происходит финальный мерж ветки в master и develop, после чего ветка удаляется, а коммиту мержа в master присваивается тег новой версии.

 hotfix-*
Временные ветки создаются для правки критических проблем в релизной версии.
Ветка отходит от master и по завершению правок багов мержится обратно. Сама ветка после этого удаляется, а коммиту мержа в master присваивается тег новой версии.

👉 @frontendInterview
👍24
Как вырасти от junior до middle? Middle-специалист отличается не только опытом и уровнем владения технологиями, но и софт скилами. Курс Яндекс Практикума «Мидл фронтенд-разработчик» составлен так, чтобы вы могли освоить и то, и другое а ещё:

• разработать мессенджер, используя только JavaScript, Typescript, CSS и API браузера;
• познакомиться с теорией и отработать её на практике в больших проектах;
• научиться брать ответственность за решения и вкладываться в общий результат;
• самостоятельно декомпозировать задачи и распределять время;
• исследовать смежные сферы программирования, без которых невозможен фронтенд:
• информационную безопасность, прототипирование интерфейсов, командную работу, DevOps, ООП.

На всех этапах вас будут сопровождать опытные разработчики: мы не дадим просесть по учёбе и поможем выкроить время на образование. Вы будете практиковаться на реальных кейсах и положите в портфолио работающие проекты. А карьерные консультации подготовят вас к разговору о повышении или помогут с поиском новой работы.

Пройдите первый бесплатный урок
4
Какое значение примет result?
Anonymous Quiz
16%
ReferenceError
63%
1
20%
0
1%
10
От чего зависит успех собеседования?

Front End Team Lead BCS Денис Воронин отвечает на этот и другие вопросы о прохождении и проведении интервью на своем youtube-канале.

«Собесы. В чем смысл?» — это не рецепт успеха, а рефлексия разработчика с 10-летним опытом о том, что собеседования — это в первую очередь про человеческие отношения.
👍6
Может ли функция возвращать другую функцию в JS?
Anonymous Quiz
97%
Да
3%
Нет
👎14👍11
Что такое Shadow DOM?

Shadow DOM (Shadow Document Object Model) - это технология, которая позволяет создавать и изолировать компоненты веб-страницы. Она предоставляет возможность создавать и использовать собственные элементы и стили, которые не будут влиять на остальную часть страницы.

Когда вы используете Shadow DOM, вы создаете отдельное "теневое дерево" DOM для вашего компонента. Это означает, что структура и стили вашего компонента остаются скрытыми от остальной части страницы. Это полезно, когда вы хотите создать компоненты с собственным поведением и стилями, которые не должны быть доступными или изменяемыми извне.

Основные преимущества использования Shadow DOM:
1. Изоляция: Компоненты, созданные с использованием Shadow DOM, не могут быть непреднамеренно изменены или повреждены извне. Это позволяет разработчикам создавать надежные и независимые компоненты.

2. Локальные стили: Стили, заданные внутри Shadow DOM, применяются только к элементам внутри компонента. Это позволяет избежать конфликтов стилей с другими частями страницы.

3. Повторное использование: Компоненты, созданные с использованием Shadow DOM, могут быть повторно использованы на разных страницах или в разных проектах без влияния на другие части кода.

4. Инкапсуляция: Shadow DOM позволяет скрыть внутреннюю структуру и детали реализации вашего компонента, что способствует лучшей абстракции и модульности кода.

👉 @frontendInterview
👍4
JavaScript с нуля

JavaScript еще никогда не был так прост! Вы узнаете все возможности языка программирования без общих фраз и неясных терминов. Подробные примеры, иллюстрации и схемы будут понятны даже новичку. Легкая подача информации и живой юмор автора превратят нудное заучивание в занимательную практику по написанию кода. Дойдя до последней главы, вы настолько прокачаете свои навыки, что сможете решить практически любую задачу, будь то простое перемещение элементов на странице или даже собственная браузерная игра.

👉 @frontendInterview
👍4👎1
Recursive Replication

Создайте рекурсивную функцию replicate, которая принимает два аргумента: times и number и возвращает массив, состоящий из number, повторенного times раз.

Пример:
replicate(3, 5) вернёт [5,5,5]

👉 @frontendInterview
👍1👎1
Работали ли вы с мемоизоваными селекторами в React (memoized selectors)? Для чего их используют и какой принцип работы?

Мемоизованные селекторы используются для оптимизации производительности в React. Они позволяют кэшировать результаты вычислений селекторов и возвращать закэшированный результат, если входные данные не изменились. Это особенно полезно, когда селекторы выполняют сложные вычисления или обращаются к большим данным.

Принцип работы мемоизованных селекторов основан на использовании функции мемоизации, которая сохраняет предыдущие результаты вычислений и сверяет их с текущими входными данными. Если входные данные не изменились, мемоизированный селектор возвращает закэшированный результат, что позволяет избежать повторных вычислений и улучшить производительность.

Вот пример, как можно создать мемоизованный селектор с помощью библиотеки Reselect:
 import { createSelector } from 'reselect';

const getUsers = state => state.users;

const getActiveUsers = createSelector(
getUsers,
users => users.filter(user => user.isActive)
);

// Использование мемоизованного селектора
const activeUsers = getActiveUsers(state);


В этом примере createSelector создает мемоизованный селектор getActiveUsers, который фильтрует список пользователей и возвращает только активных пользователей. Если состояние users не изменилось, мемоизованный селектор вернет закэшированный результат без повторных вычислений.

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

👉 @frontendInterview
👍6🤔1
Хочешь получить оффер из-за границы?

• Как выбрать страну?
• Как составить CV?
• На что обращают внимание на каждом из этапов собеседования?
• Как нужно себя вести на собеседовании с инженерами (и какие лайфхаки можно применить)?

🧠 Канал Передаёт Австралия рассказывает как пройти все этапы трудоустройства в заграничную компанию - от отклика на вакансию до торга по зарплате.

Автор канала проходил интервью в десятках IT-компаний Австралии 🇦🇺, Сингапура 🇸🇬 и Европы 🇪🇺, получил обширный опыт трудоустройства и релокейтов, занимался наймом программистов, а теперь делится своим опытом и знаниями с читателями.

⚡️ Есть вопросы? Добро пожаловать: @australia_reporting
🔥5👎3👍1😁1
Клиент предлагает реализовать через CSS на сайте такую фишку: во время прокрутки страницы хедер будет прилипать к верхней части экрана и оставаться там до самого футера. Реализуемо?
Anonymous Quiz
6%
Не получится через CSS. Тут нужно писать код на JavaScript.
94%
Да, можно сделать через CSS, JavaScript использовать не обязательно.
8👎7👍2😁1
Как получить высоту блока? Его положение относительно границ документа?

Чтобы получить координаты относительно видимой части документа — .getBoundingClientRect(). Этот метод также возвращает ширину и высоту элемента.
Пример:
 document.querySelector('button').onclick = function() {
var c = this.getBoundingClientRect()
alert('top:' + c.top + ' left: ' + c.left +'');
}

Чтобы получить координаты относительно начала документа — значение .scrollTop / .scrollLeft + .getBoundingClientRect().top / .getBoundingClientRect().left

Пример:
document.querySelector('button').onclick = function() {
var c = this.getBoundingClientRect(),
scrolltop = document.body.scrollTop + c.top,
scrollleft = document.body.scrollLeft + c.left;
alert('top:' + scrolltop + ' left: ' + scrollleft + '');
}


👉 @frontendInterview
👍6🔥1