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

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

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

Канал в реестре РКН:
https://rknn.link/su
Download Telegram
Как оптимизировать React-приложение?

- избавиться от причин лишних ререндеров
- вынести тяжелые вычисления в отдельный поток (Web Workers)
- использовать useMemo, useCallback, React.memo для мемоизации вычислений
- избавиться от утечек памяти
- использовать атрибут key в списках
- кэшировать негорячие вычисления
- кэшировать ответы запросов сервера на N минут/секунд (применимо не всегда)

👉 @frontendInterview
👍4
Какая ширина у элемента span?
Anonymous Quiz
32%
150px
18%
250px
31%
100px
19%
225px
😱1310👍8
Как тестировать React-приложение?

- Использовать фреймворк для тестирования, такой как Jest, для запуска и организации тестов.
- Использовать библиотеку для моков, такую как Sinon.js, для мокирования зависимостей в тестах.
- Написать модульные тесты для отдельных компонентов, чтобы убедиться, что они работают правильно изолированно.
- Написать интеграционные тесты, чтобы проверить взаимодействие между компонентами.
- Использовать snapshot-тестирование, чтобы гарантировать результат отрисовки компонента.
- Использовать разработку через тестирование (TDD) для написания тестов перед реализацией функций.
- Написать e2e тесты для тестирования приложения в целом, имитируя взаимодействие пользователя в реальном браузере.

👉 @frontendInterview
👎6👍2
Проектирование гибких программ. Как не загнать себя в угол

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

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

👉 @frontendInterview
2👍1
Alternating Loops

Создайте функцию, которая принимает некоторое количество массивов. Из каждого массива поочередно берутся элементы и записываются в новый массив.

Примеры:
combine(['a', 'b', 'c'], [1, 2, 3])
// ['a', 1, 'b', 2, 'c', 3]

combine(['a', 'b', 'c'], [1, 2, 3, 4, 5])
// ['a', 1, 'b', 2, 'c', 3, 4, 5]

combine(['a', 'b', 'c'], [1, 2, 3, 4, 5], [6, 7], [8])
// ['a', 1, 6, 8, 'b', 2, 7, 'c', 3, 4, 5]


👉 @frontendInterview
👍5
В чем разница между interface и type в TypeScript?

interface X {
a: number
b: string
}

type X = {
a: number
b: string
};


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

В целом, можно сказать, что ключевое слово type больше подходит для типизации примитивных значений или объектных значений, не являющихся звеньями сложной цепочки. interface же необходим и удобен при осознанном построении объектно-ориентированной архитектуры.

👉 @frontendInterview
👍25🔥21🤔1
У button font-size: 16px. Как можно установить значение 8px для свойства padding в единицах измерения em?
Anonymous Quiz
10%
1 em
10%
50%
5%
8 em
76%
0.5 em
1👍1
Что такое ErrorBoundary в React?

Error boundaries- это компоненты, которые отлавливают ошибки JavaScript, возникающие в любом дочернем компоненте, сообщают об этих ошибках и отображают резервный UI.

Классовый компонент становится предохранителем при определении в нем нового метода жизненного цикла componentDidCatch(error, info) или static getDerivedStateFromError() :

 class ErrorBoundary extends React.Component {
constructor(props) {
super(props)
this.state = { hasError: false }
}

componentDidCatch(error, info) {
// Вы также можете отправлять ошибки в специальный сервис по их обработке
logErrorToMyService(error, info)
}

static getDerivedStateFromError(error) {
// Обновляем состояние, чтобы при следующем рендеринге использовался запасной UI
return { hasError: true };
}

render() {
if (this.state.hasError) {
// Вы можете рендерить любой резервный интерфейс
return <h1>{'Что-то пошло не так.'}</h1>
}
return this.props.children
}
}
После этого, предохранитель используется как обычный компонент:
<ErrorBoundary>
<MyWidget />
</ErrorBoundary>


👉 @frontendInterview
👍10
Какие размеры у элемента span в следующем примере?
Anonymous Quiz
55%
0
45%
300x300
👍3
Селекты, инпуты, батоны и прочие обитатели форм

Зачем они нужны, если есть куча библиотек с красивыми кастомными элементами?

Нужны! и важно уметь с ними работать

✔️ С нативным элементом можно предсказуемо взаимодействовать клавиатурой

✔️ Не возникает косяков с положением выпадающих элементов на экране

✔️ Элемент соответствует настройкам операционной системы

✔️ Контролы доступны скринридерам

✔️ Элемент будет доступен пользователям с ограниченными возможностями

Чтобы разобраться во всех тонкостях создания нативных форм, рекомендую эти тренажеры

Тренажер «Погружение в формы»

Проходить можно прямо в браузере, подача - огонь 🔥
👎5🔥1
Почему этот код нестабилен?

Поскольку setState() является асинхронным, установка нового состояния на основе предыдущего состояния иногда может пойти не так. В таких сценариях нужно использовать синтаксис функции обратного вызова для установки состояния. Тогда в prevState будет актуальное значение.

const [state, setState] = useState(0);
setState((prevState) => prevState + 1);


👉 @frontendInterview
🔥22👎2👍1👏1
React. Сборник рецептов. Практические приемы работы с фреймворком React

Книга посвящена практическому применению фреймворка React. Описано создание простых приложений и приложений со сложным интерфейсом, рассмотрены вопросы маршрутизации в приложениях и управление их состоянием. Даны примеры реализации интерактивного взаимодействия с пользователем, подключения к различным службам бэкенда, таким как REST и GraphQL, описана работа с библиотеками компонентов. Подробно рассматривается безопасность приложений, процесс их тестирования, даны советы по обеспечению доступности. Приводятся практические рекомендации по повышению производительности и созданию прогрессивных веб-приложений.

👉 @frontendInterview
7👍4
Merged String Checker

Создайте функцию, которая проверит, можно ли составить строку s из символов двух других строк - part1 и part2. При этом символы в part1 и part2 нельзя менять местами.

Пример:
'codewars' is a merge from 'cdw' and 'oears':

s: c o d e w a r s = codewars
part1: c d w = cdw
part2: o e a r s = oears


👉 @frontendInterview