Frontend Interview - собеседования по Javascript / Html / Css
11.9K subscribers
2.06K photos
109 videos
311 files
506 links
Канал для подготовки к собеседованиям по фронтенду

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

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

Канал в реестре РКН:
https://rknn.link/su
Download Telegram
Что такое useСontext в React ?

Это один из встроенных хуков, который позволяет компонентам подписываться на контекст и получать доступ к данным контекста. Используется для передачи данных через дерево компонентов без необходимости передавать пропсы на каждом уровне. Это особенно полезно для глобальных данных, таких как текущий авторизованный пользователь, тема (светлая/темная) или настройки локализации.

Как он работает?

- Создание контекста
Для создания контекста используется функция createContext. Она возвращает объект контекста, который содержит два компонента: Provider и Consumer.
   import React, { createContext, useState } from 'react';

const MyContext = createContext();



- Provider

Компонент Provider используется для предоставления значения контекста всем дочерним компонентам. Все компоненты внутри Provider могут получить доступ к значениям, переданным в value.
    const MyProvider = ({ children }) => {
const [state, setState] = useState('Hello World');

return (
<MyContext.Provider value={{ state, setState }}>
{children}
</MyContext.Provider>
);
};


- useContext

Используется для подписки на контекст в функциональных компонентах. Он принимает объект контекста, возвращаемый из createContext, и возвращает текущее значение контекста.
import React, { useContext } from 'react';

const MyComponent = () => {
const { state, setState } = useContext(MyContext);

return (
<div>
<p>{state}</p>
<button onClick={() => setState('New Value')}>Change Value</button>
</div>
);
};


👉 @frontendInterview
👍72
Алгоритмы: разработка и применение

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

👉 @frontendInterview
2
List Filtering

Вам дан массив, состоящий из чисел и строк. Создайте функцию, которая отфильтрует все строки и вернет массив с числами.

Примеры:
filter_list([1,2,'a','b']) == [1,2]
filter_list([1,'a','b',0,15]) == [1,0,15]
filter_list([1,2,'aasf','1','123',123]) == [1,2,123]


👉 @frontendInterview
Какие минусы у React?

Несмотря на множество преимуществ, у React есть и недостатки, которые могут повлиять на выбор этой библиотеки для проекта. Вот основные из них:

Крутая кривая обучения
Для новых разработчиков React может показаться сложным из-за концепций, таких как JSX, компоненты, хуки и управление состоянием. Требуется время и усилия для освоения всех особенностей и возможностей библиотеки.

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

Неисчерпывающая документация для продвинутых тем
Хотя базовая документация у React хорошая, для более сложных или специфичных задач может не хватать примеров и объяснений. Разработчики могут столкнуться с трудностями при поиске решений для нестандартных проблем.

Ограниченные возможности для SEO
Приложения на чистом React рендерятся на стороне клиента, что может ухудшить индексацию страниц поисковыми системами. Требуется дополнительная настройка, например, использование серверного рендеринга (Next.js), для улучшения SEO.

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

Производительность при большом количестве компонентов
При большом количестве компонентов и частых обновлениях состояния могут возникнуть проблемы с производительностью.Требуется оптимизация кода и использование таких инструментов, как мемоизация (React.iss.onemo, хуки useMemo и useCallback), чтобы избежать ненужных перерисовок.

Пример проблемы с производительностью:

import React, { useState, useMemo } from 'react';

function ExpensiveComponent({ num }) {
const computedValue = useMemo(() => {
let sum = 0;
for (let i = 0; i < num * 1000; i++) {
sum += i;
}
return sum;
}, [num]);

return <div>Computed Value: {computedValue}</div>;
}

function App() {
const [num, setNum] = useState(1);

return (
<div>
<button onClick={() => setNum(num + 1)}>Increase</button>
<ExpensiveComponent num={num} />
</div>
);
}

export default App;


В этом примере показана оптимизация вычислений с использованием useMemo.

👉 @frontendInterview
👍2
Каково значение свойства line-height у элемента section?
Anonymous Quiz
7%
60px
15%
40px
5%
120px
20%
80px
52%
20px
👍8
Как отобразить теги на веб-странице?

Любые теги (вроде <p>) никак не показываются в браузере, поскольку воспринимаются браузером как команды для вставки элементов и изменения их свойств. Но иногда требуется на веб-странице вывести теги, например, для демонстрации HTML-кода. В этом случае используйте спецсимволы &lt; и &gt; для замены угловых скобок < и >. При этом <p> будет выглядеть как &lt;p&gt;

👉 @frontendInterview
5👎1
Ваши git и там и тут передают: как синхронизировать репозитории на мастере и репликах

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

Автор - ведущий ИТ‑инженер в отделе RnD и готовых решений Управления развития продукта. В статье расскажет о том, как они синхронизируют Git‑репозитории на двух узлах, какие существуют альтернативы и зачем это вообще нужно.

👉 @frontendInterview
👍1
Что такое PWA?

PWA — это сокращение от словосочетания Progressive Web Applications, которое переводится на русский язык как «прогрессивные веб-приложения».
Есть 3 подхода к определению прогрессивных веб-приложений.

Обывательское
Это определение можно использовать, когда нужно объяснить, что такое прогрессивные веб-приложения, человеку, который не является веб-разработчиком.
PWA — это такие сайты, которые можно добавить в виде иконки на главный экран или рабочий стол, и при запуске их с этой иконки они будут выглядеть и работать неотличимо от нативных приложений, то есть запускаться в автономном режиме (standalone mode), в котором нет адресной строки и других элементов интерфейса браузера, работать без доступа к интернету, получать push-уведомления и т. д.

Официальное
PWA — это веб-приложения, которые применяют стратегию прогрессивного улучшения (progressive enhancement), то есть проверяют, поддерживает ли браузер те или иные Web API, и если да, то могут их использовать, чтобы обеспечить опыт взаимодействия (user experience) наравне с нативными приложениями. Отсюда и название — прогрессивные веб-приложения.

Техническое
PWA — это сайты, формально удовлетворяющие определённым техническим критериям.

Критерии у каждого браузера на каждой платформе могут быть различны и меняться со временем.

У браузеров на основе Chromium это:

- использование защищённого соединения HTTPS или локального хоста;
- наличие манифеста веб-приложения (JSON-файла, в котором указаны название приложения, описание приложения, ссылка хотя бы на одну растровую иконку с разрешением не ниже 512 x 512 px или векторную иконку в формате SVG).

Ранее браузеры на основе Chromium требовали также наличия Service Worker (JavaScript-кода, который работает в фоновом режиме независимо от веб-страницы, даже если вкладка или браузер закрыты). Service Worker позволяет получать push-уведомлений, синхронизировать данные в фоне, перехватывать и обрабатывать сетевые запросы, что позволяет реализовать кеширование и работу без доступа к интернету, и выполнять другие задачи.

Если сайт удовлетворяет этим критериям, то при его открытии в браузерах на основе Chromium появится предложение установить этот сайт как приложение

👉 @frontendInterview
Html, Css & Javascript in easy steps Special Edition

Книга в простых шагах инструктируют читателя по каждому из трех аспектов веб разработки, которые используются для создания современных веб-страниц:
- Теги языка разметки гипертекста (HTML)
- Правила каскадных таблиц стилей (CSS)
- Функции JavaScript

Вы узнаете, как создавать веб-страницы для отображения текста, изображений, списков, таблиц, гиперссылок, форм, аудио и видео. Каждая глава, для укрепления знаний, содержит контрольные вопросы

👉 @frontendInterview
3👍3
Last

Найдите последний элемент из данных аргументов Если передан один аргумент, который представляет собой список/массив или строку, верните его последний элемент. Гарантируется, что будет хотя бы один аргумент и что массивы/списки/строки с одним аргументом не будут пустыми.

Примеры:
last(5)               ==> 5
last([1, 2, 3, 4]) ==> 4
last("xyz") ==> "z"
last(1, 2, 3, 4) ==> 4
last([1, 2], [3, 4]) ==> [3, 4]
last([[1, 2], [3, 4]]) ==> [3, 4]


👉 @frontendInterview
Какие есть примеры микрозадач ?

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

1. Промисы используют механизм таких задач для своих колбэков then, catch, и finally. Когда промис переходит в состояние выполнено (fulfilled) или отклонено (rejected), соответствующие колбэки планируются как микрозадачи. Это означает, что они будут выполнены сразу после текущего стека вызовов, но до того, как движок возьмется за выполнение следующей макрозадачи, например, обработку событий или таймеров.
console.log('Начало');

Promise.resolve().then(() => {
console.log('Обработан промис');
});

console.log('Конец');


Вывод будет следующим:
Начало
Конец
Обработан промис



Сначала выполняется синхронный код (Начало и Конец), и только после его завершения, но до того как браузер перейдет к другим задачам, выполняются микрозадачи, связанные с промисами (Обработан промис).

2. Функция queueMicrotask позволяет явно добавить микрозадачу в очередь микрозадач. Это может быть полезно для разделения вычислений на более мелкие асинхронные операции, не блокируя поток выполнения и интерфейс.
console.log('Перед queueMicrotask');

queueMicrotask(() => {
console.log('Выполнено в микрозадаче');
});

console.log('После queueMicrotask');


Вывод будет аналогичным:
Перед queueMicrotask
После queueMicrotask
Выполнено в микрозадаче



Сначала выполняется основной поток кода, затем микрозадача, добавленная через queueMicrotask.

👉 @frontendInterview
4
Как визуально выровнять текст с маркерами?

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

Такое происходит всегда, когда используется CSS свойство lift-style-position: indise, которое помещает буллеты внутрь блока, где располагается список. Если же этого не сделать, то маркеры будут выходить за границу блока списка. Это хорошо видно на прилагающейся картинке.

На ней так же хорошо видно, что когда к правому списку было применено свойство lift-style-position: indise весь переносимый текст стал выезжать за визуальные границы размещения маркеров, что выглядит некрасиво. Для того, что исправить данную ситуацию необходимо воспользоваться небольшой хитростью.

li {text-indent:-1em;padding:0 0 0 1em;}


👉 @frontendInterview
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
Станьте AI-разработчиком на Python и зарабатывайте от 150.000₽ в месяц 🔥🔥🔥

Мы научим вас создавать и тренировать нейронные сети, и вы сможете:

1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тыс. ₽ в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тыс. ₽ за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате

На интенсиве будет много практики: создадим 9 нейросетей за 1 вечер:

🧬 Прогноз стоимости золота
🧬 Сегментация изображения для робота доставщика
🧬 Трекинг людей на видео

Ведущий интенсива - Senior AI-разработчик и основатель Университета искусственного интеллекта

🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайшую среду
👎1
Истории и боли frontend-разработчика

В этой статье опытный frontend-разработчик рассказывает интересные истории из своей практики.

👉 @frontendInterview