Когда тестовое задание делать точно не стоит? 🚩
Замечаю, что сегодня чаще, чем когда-либо просят делать тестовые задания при отклике на вакансию, но несмотря на это, вот когда сразу стоит сказать НЕТ:
Полноценный продукт с нуля
Один раз мне прислали тестовое, сделать многопользовательскую игру тапалку. Надо было сделать по сути ВСЁ: авторизация, комнаты, игровой движок и бэкенд под него.
Очевидно, что хотели получить MVP за бесплатно.
Работы больше, чем на 1 день
Если тестовое выглядит так, будто придётся сидеть над ним вечерами всю неделю, как в предыдущем пунтке, то сразу отказ.
Макимально оторванные задачи из ада
Был случай: почти 4 года назад прислали 20 каких-то хардкорных алко задач на релизации сортировок, поиска путей и тд. GPT тогда не был так популярен, про него я вообще не знал и в итоге 3 дня жизни просто в никуда 😅
Подозрительно “реальная” фича
Если задание выглядит как кусок их продукта, почти наверняка так и есть.
Вы делаете бесплатный функционал под видом тестового.
🫤 Так что же делать?
Если отликнуться хочется, но сидеть 3 дня над тестовым нет, то можно ответить: “Спасибо, но объём задания не соответствует моим ожиданиям от тестового. Могу ли я предоставить другие доказательства моих навыков? Например, репозиторий на GitHub/портфолио/личный сайт”
Замечаю, что сегодня чаще, чем когда-либо просят делать тестовые задания при отклике на вакансию, но несмотря на это, вот когда сразу стоит сказать НЕТ:
Полноценный продукт с нуля
Один раз мне прислали тестовое, сделать многопользовательскую игру тапалку. Надо было сделать по сути ВСЁ: авторизация, комнаты, игровой движок и бэкенд под него.
Очевидно, что хотели получить MVP за бесплатно.
Работы больше, чем на 1 день
Если тестовое выглядит так, будто придётся сидеть над ним вечерами всю неделю, как в предыдущем пунтке, то сразу отказ.
Макимально оторванные задачи из ада
Был случай: почти 4 года назад прислали 20 каких-то хардкорных алко задач на релизации сортировок, поиска путей и тд. GPT тогда не был так популярен, про него я вообще не знал и в итоге 3 дня жизни просто в никуда 😅
Подозрительно “реальная” фича
Если задание выглядит как кусок их продукта, почти наверняка так и есть.
Вы делаете бесплатный функционал под видом тестового.
🫤 Так что же делать?
Если отликнуться хочется, но сидеть 3 дня над тестовым нет, то можно ответить: “Спасибо, но объём задания не соответствует моим ожиданиям от тестового. Могу ли я предоставить другие доказательства моих навыков? Например, репозиторий на GitHub/портфолио/личный сайт”
🔥5🐳2🌚2❤1
Непривычно работать по субботам, да?
Сегодня тот самый день, когда 70% делают вид, что работают, а остальные 30% даже не открывали ноутбук😁
В любом случае, лучше это время потратить на прокачку своих навыков, поэтому параллельно с контентом готовлю вам жоский роадмап по тому, как пройти путь Middle → Middle+ → Senior💪
Сам знаю и понимаю, как неприятно топтаться на одном месте и как порой тяжело пробить этот потолок, поэтому надеюсь, что данный roadmap сильно поможет вам
Сегодня тот самый день, когда 70% делают вид, что работают, а остальные 30% даже не открывали ноутбук😁
В любом случае, лучше это время потратить на прокачку своих навыков, поэтому параллельно с контентом готовлю вам жоский роадмап по тому, как пройти путь Middle → Middle+ → Senior
Сам знаю и понимаю, как неприятно топтаться на одном месте и как порой тяжело пробить этот потолок, поэтому надеюсь, что данный roadmap сильно поможет вам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2🍾2🤩1
⚛️ Что будут спрашивать на собесах про React в 2025/2026?
❄️ До нового года осталось всего ничего, а это значит, что пробиться на перегретом рынке frontend вакансий будет ещё чуть тяжелее. Поэтому чтобы не тратить кучу времени перед собесами и не учить всё подряд, собрал небольшой список актуальных тем.
ЧТО ТОЧНО СПРОСЯТ:
Основы и философия React
- Virtual DOM и reconciliation
- Что вызывает ререндер компонента
- Что такое key и зачем нужен при рендере списков
- Контролируемые и неконтролируемые компоненты
- Порталы
- Синтетические события в React
- Архитектура Fiber и роль render/commit фаз
Хуки🪝
- useState и batching: почему несколько setState могут объединяться
- useEffect: зависимости, очистка, как избежать бесконечных циклов
- useLayoutEffect: когда использовать
- useMemo и useCallback
- useRef: хранение между рендерами, доступ к DOM
- Про React.memo и useMemo спрашивают почти в каждой второй компании
- Как сделать свой useDebounce
Работа с состоянием и данными ♻️
- Когда хватает локального стейта, когда нужен глобальный
- Context: когда уместен, когда нет
- Как избежать prop drilling
- Redux Toolkit / Zustand / MobX: ключевые различия
- Оптимизация ререндеров при работе с глобальным стейтом
Производительность и структура 🏭
- Suspense и lazy: как реально использовать
- Error boundaries: зачем нужны
- Почему нельзя делать тяжелые вычисления прямо в компоненте
- Что такое React Server Components и зачем они нужны (попадался только 1 раз)
- Как работает concurrent rendering и чем он полезен
❌ ЧТО МОЖНО ПРОПУСТИТЬ:
Классовые компоненты, lifecycle-методы, connect() и всё из эпохи pre-hooks
ЧТО ТОЧНО СПРОСЯТ:
Основы и философия React
- Virtual DOM и reconciliation
- Что вызывает ререндер компонента
- Что такое key и зачем нужен при рендере списков
- Контролируемые и неконтролируемые компоненты
- Порталы
- Синтетические события в React
- Архитектура Fiber и роль render/commit фаз
Хуки🪝
- useState и batching: почему несколько setState могут объединяться
- useEffect: зависимости, очистка, как избежать бесконечных циклов
- useLayoutEffect: когда использовать
- useMemo и useCallback
- useRef: хранение между рендерами, доступ к DOM
- Про React.memo и useMemo спрашивают почти в каждой второй компании
- Как сделать свой useDebounce
Работа с состоянием и данными ♻️
- Когда хватает локального стейта, когда нужен глобальный
- Context: когда уместен, когда нет
- Как избежать prop drilling
- Redux Toolkit / Zustand / MobX: ключевые различия
- Оптимизация ререндеров при работе с глобальным стейтом
Производительность и структура 🏭
- Suspense и lazy: как реально использовать
- Error boundaries: зачем нужны
- Почему нельзя делать тяжелые вычисления прямо в компоненте
- Что такое React Server Components и зачем они нужны (попадался только 1 раз)
- Как работает concurrent rendering и чем он полезен
❌ ЧТО МОЖНО ПРОПУСТИТЬ:
Классовые компоненты, lifecycle-методы, connect() и всё из эпохи pre-hooks
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3💯2😨2🔥1
Ваш браузер сдаёт вас с потрохами
✈️ Решил я значит зайти, посмотреть билеты на сайте Аэрофлота. Захожу на сайт, а там: “Проверка браузера...”
Сижу, жду. Перезахожу. И снова жду. И так каждый раз!
А что именно они там проверяют и как это вообще работает?
💅 Browser Fingerprinting
При загрузке страницы выполняется скрипт, который собирает целый “портрет” вашего браузера: userAgent, язык, платформа, разрешение экрана, часовой пояс, список плагинов, поддержка WebGL и Canvas
По сути, браузеру присваивают уникальный отпечаток, по которому потом можно вас узнать даже без cookies😎
📊 Анализ поведения
Боты двигают мышь идеально ровно, кликают с одинаковыми интервалами.
Реальный человек двигает хаотично, печатает неровно.
Поэтому сайт отслеживает события mousemove, scroll, keydown, даже тайминги между кликами.
Если всё идёт “слишком идеально”, то система подозревает автоматизацию🤖
🔍 Проверка окружения
Также проверяют, не запускается ли браузер в headless-режиме, например, через Selenium.
Зачем всё это?
- Защита от автоматических бронирований и фрода
- Проверка, что вы не робот, скупающий билеты пачками
✈️ Решил я значит зайти, посмотреть билеты на сайте Аэрофлота. Захожу на сайт, а там: “Проверка браузера...”
Сижу, жду. Перезахожу. И снова жду. И так каждый раз!
А что именно они там проверяют и как это вообще работает?
При загрузке страницы выполняется скрипт, который собирает целый “портрет” вашего браузера: userAgent, язык, платформа, разрешение экрана, часовой пояс, список плагинов, поддержка WebGL и Canvas
По сути, браузеру присваивают уникальный отпечаток, по которому потом можно вас узнать даже без cookies
📊 Анализ поведения
Боты двигают мышь идеально ровно, кликают с одинаковыми интервалами.
Реальный человек двигает хаотично, печатает неровно.
Поэтому сайт отслеживает события mousemove, scroll, keydown, даже тайминги между кликами.
Если всё идёт “слишком идеально”, то система подозревает автоматизацию
Также проверяют, не запускается ли браузер в headless-режиме, например, через Selenium.
if (navigator.webdriver) {
console.log('Обнаружен WebDriver!');
// Блокируем или показываем капчу
}
Зачем всё это?
- Защита от автоматических бронирований и фрода
- Проверка, что вы не робот, скупающий билеты пачками
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤔2☃1🔥1😱1💯1
Так как на канал постепенно приходят новые люди, то пора бы сделать пост-закреп с ссылками на все полезные посты/видео.
Данный закреп будет постоянно обновляться.
- FRONTEND SYSTEM DESIGN СОБЕСЕДОВАНИЕ В ЯНДЕКС
- Разбираем FRONTEND АРХИТЕКТУРУ новостной ленты ВК
- FRONTEND АРХИТЕКТУРА ПОИСКА
- AI инструменты в frontend разработке 🤖
- Небольшая сводка с рынка frontend вакансий
- Про tailwind
- Когда стоит делать тестовое? + Когда не стоит?
- Вопросы на React собесах в 2026
🧭 Roadmap для Middle React Frontend разработчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🥰2🎄1
Эмиль Караев | EMKA pinned «😏 Полезные посты/видео Так как на канал постепенно приходят новые люди, то пора бы сделать пост-закреп с ссылками на все полезные посты/видео. Данный закреп будет постоянно обновляться. 📱 Мои видео на YouTube: - FRONTEND SYSTEM DESIGN СОБЕСЕДОВАНИЕ В ЯНДЕКС…»
Вроде не джун, но всё ещё непонятно куда двигаться дальше? 😫
Расти после middle уровня зачастую трудно, потому что нет понятной структуры, поэтому я решил собрать roadmap для развития Middle Frontend разработчиков до уровней Middle+ и Senior.
🧭 Что внутри:
👨💻 Инженерное мышление: декомпозиция задач, чтение чужого кода, error-driven подход, UX
🏗️ Архитектура фронтенда: FSD, state model, состояние сервера, error, logging
🌐 Сеть и сервер: REST, WebSockets, JWT, аутентификация
🧪 Тестирование: Unit, UI, E2E, mocking, культура тестов
⚙️ DX: CI/CD, монорепо, Storybook, bundle insight
💬 Софт скилы: коммуникация, ownership, code review, документация
Для Senior там ещё продвинутые штуки: system design, state machines, advanced TS, перфоманс и безопасность.
Собрал roadmap так, чтобы каждый пункт можно было изучить через понятные объяснения и ссылки на реальные материалы, скорее открывай roadmap по ссылке ниже 👇
Расти после middle уровня зачастую трудно, потому что нет понятной структуры, поэтому я решил собрать roadmap для развития Middle Frontend разработчиков до уровней Middle+ и Senior.
🧭 Что внутри:
🏗️ Архитектура фронтенда: FSD, state model, состояние сервера, error, logging
⚙️ DX: CI/CD, монорепо, Storybook, bundle insight
💬 Софт скилы: коммуникация, ownership, code review, документация
Для Senior там ещё продвинутые штуки: system design, state machines, advanced TS, перфоманс и безопасность.
Собрал roadmap так, чтобы каждый пункт можно было изучить через понятные объяснения и ссылки на реальные материалы, скорее открывай roadmap по ссылке ниже 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3👏2⚡1🆒1
Коротко обо мне
- Действующий senior разработчик. Также как и ты: хожу на созвоны, пилю таски, фикшу баги, ревьюю код
- Работал в стартапах, финтехе, бигтехе, AI проектах как фронтом, так и фулстеком
- Максимальный оффер в РФ: 460 000₽
- Сейчас в основном пишу на React и Go
- Сам проходил сотни собесов
- Сам нанимал разработчиков в команду
- Знаю, что реально ищут рекрутеры и тех.лиды
- Понимаю, как торговаться за лучшие офферы
- Какие навыки нужны senior инженеру
- Как выжить на тяжелом рынке труда в 2025
- Как фронтендеру правильно проходить собесы и продавать свой опыт
- Почему софт скиллы решают всё
- Как проходить frontend system design интервью
Мое личное менторство для Middle Frontend разработчиков:
- новое резюме, поиск работы на мертвом рынке 2025
- база по frontend техничке, мок собесы
- поведенческие собесы для frontend
- база по frontend system design
- выход на рынок, поддержка на испыталке
- личная консультация
- технический frontend мок собес
- frontend system design мок собес
- поведенческий мок собес для frontend
По всем вопросам пиши в личку
Подробнее об услугах и отзывы: frontend-mentor.com
🧭 Roadmap для Middle Frontend разработчиков
Узнай, что должен знать senior frontend разработчик прямо сейчас
Иногда разрабатываю мини SaaS для души.
Например, месяц назад выпустил Google Chrome расширение с уже 300+ активными пользователями
Собрал всё в одном месте специально для тебя здесь
- Хочешь качать и доход и знания
- Понимаешь, что быть мидлом - не предел мечтаний и можно больше: стать senior, свитч в другую область
- Хочется дорасти до зарплатного потолка
- Хочешь понять, как вести себя на современном турбулентом рынке труда 2025
Погнали ломать потолок вместе!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥3👏3🤡1💅1
Эмиль Караев | EMKA pinned «👋 Привет! Я Эмиль, frontend ментор Коротко обо мне - Действующий senior разработчик. Также как и ты: хожу на созвоны, пилю таски, фикшу баги, ревьюю код 💻 - Работал в стартапах, финтехе, бигтехе, AI проектах как фронтом, так и фулстеком - Максимальный оффер…»
Понедельник, 11 утра, а это значит, что самое время для
В этом небольшом видео разберем, что такое виртуализация во фронтенде (не путать с виртуализацией в ОС). Зачем она нужна и как работают виртуальные списки на самом деле.
Рассмотрим, как под капотом просходит логика отрисовки элементов с применением виртуализации, чтобы понимать, как устроены virtualized библиотеки изнутри, и чтобы дать понять на собеседовании, что вы крепкий орешек и шарите, что это не магия, а понятный механизм.
👉 Смотреть тут: клик
Лайк, подписка, комментарий
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2🤩1
1. причины появления такого феномена как виртуализация
2. какие есть подходы к её реализации (спойлер их несколько)
3. как обрабатывать корнер кейсы
4. настоящие примеры кода
5. как измерять эфективность виртуализации по метрикам (полезно для резюме)
6. какие ошибки чаще всего допускают при работе с виртуальными списками
7. вопросы на собеседованиях по виртуализации
👉 Материалы доступны по этой ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🎄2👍1
Решил провести эксперимент и создать резюме с 8 годами опыта. Зарплату в резюме не указывал. Откликался на всё подряд: на вакансии без опыта, с 1-3 годами, 3-6 годами и 6+
И тут на самом деле может быть несколько причин:
- Самое простое: HR банально нажал на "фильтр по 3-6 годам" и твое резюме с 8 годами улетело
- Overqualified. Рекрутеры боятся, что ты быстро устанешь от роли обычного разработчика. Они думают, что тебе нужны постоянные вызовы и сложные задачи
- Слишком высокие ожидания по зп. Так как я не указал желаемую зп, то может показаться, что с 8 годами я ожидаю не меньше 500к
- Может показаться, что такой опытный разраб просто ищет временную компанию, например, после увольнения, чтобы потом параллельно искать более высокооплачеваемое место и уйти
- Да и вообще, все любят искать странности и несостыковки. И странно видеть разработчика с 8 годами, который откликается на вакансию 1-3 года. Это все равно что продавать новую машину с салона за четверть от ее стоимости. Странно, не правда ли?
Поэтому и возникает такой парадокс, как
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3☃2😈1
Стоит ли перекатываться из Frontend в Go? 💪
💻 Go Go Go Go Go - в последние годы все больше можно услышать про то, что пора перекатываться из Java, JS, C# или из любого другого X в Go
А так ли все гладко и просто при переходе на другой язык? Потому что одно дело, когда ты последние 2-3 года занимался бекендом и просто меняшь свой стек на Go и другое дело, когда ты всё время работал в роле фронта.
Но по-любому хоть один раз и вы задумывались, а стоит ли перекатываться из JS в Go. У каждого могут быть свои причины на это:
💻 Кто-то думает, что на фронте он/она занимается ненастоящим программированием и вот при переходе на бек на Go всё заиграет новыми красками и жизнь станет ярче (спойлер: скорее всего нет)
🤖 Одни могут думать, что AI заменит именно работу фронтов, а работа для бекендеров на Go будет существовать всегда
🤑 Кто-то сравнивает вакансии и зарплаты и делает выводы, что нужно срочно уволняться и менять направление
😢 А другие наоборот могут бояться, что придется заново много учиться, делать пет проекты, готовиться к алгосам и system design сессиям. А затем снова конкурировать на не менее перегретом рынке Go разработчиков, ведь Go сегодня - это Python 5 лет назад, и многие новички поголовно выбирают его
В общем может показаться, что все очень непонятно и запутанно, поэтому на этой неделе будет видос на канале
📱 Стоит ли перекатываться из фронтенда в Go
Ну а если ты не посмотрел прошлый видос на канале, то welcome по ссылочке
А так ли все гладко и просто при переходе на другой язык? Потому что одно дело, когда ты последние 2-3 года занимался бекендом и просто меняшь свой стек на Go и другое дело, когда ты всё время работал в роле фронта.
Но по-любому хоть один раз и вы задумывались, а стоит ли перекатываться из JS в Go. У каждого могут быть свои причины на это:
🤖 Одни могут думать, что AI заменит именно работу фронтов, а работа для бекендеров на Go будет существовать всегда
В общем может показаться, что все очень непонятно и запутанно, поэтому на этой неделе будет видос на канале
Ну а если ты не посмотрел прошлый видос на канале, то welcome по ссылочке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3🤝2🐳1
Новое видео на канале! И так совпало, что сегодня четверг, а как мы знаем, четверг - это небольшая пятница. Это значит, что можно немного расслабиться и посмотреть новый видос о том, стоит ли перекатываться из фронтенда в Go или нет?
Разберем плюсы и минусы переката в Go и с чем придется столкнуться, если ты всё-таки решишь это сделать. Спойлер: всё не так однозначно.
👉 Смотреть тут: клик
Лайк, подписка, комментарий
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😱3🔥2🎄2
Мы все разные: у нас у всех разные возможности, интересы, желания и конечные цели.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5✍2🔥2☃1⚡1
Это про то, что обычно спрашивают на HR скринингах, ну или в переписках на HH (сегодня в 99% случаев это боты).
В общем у каждой компании свои вопросы и желаемые ответы на них: у стартапов одно, у бигтехов второе, у каких-нибудь web3 вообще может быть десятое.
Но попадаются и такие вопросы, как на скрине. И чё, как отвечать на такие вопросы, чтобы показать себя с лучшей стороны?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8🤣4❤2👍2🤔1
На одном system design собеседовании в желтом банке попросили спроектировать веб-клон телеграма. Один из нюансов был таким: пользователь должен уметь писать и редактировать сообщения без сети, ставить реакции, а все эти действия отправляются на сервер уже потом, когда интернет появится. То есть нужен полноценный оффлайн режим.
Как такое устроить на клиенте?
Так что нужен другой подход.
Почему бы не сделать небольшой локальный снимок базы на клиенте? Локальная БД, в которой лежит история, статусы сообщений, черновики и очередь pending изменений. Если сети нет, мы просто продолжаем писать в эту БД. Сеть появилась синхронизируем изменения с сервером.
Пример:
Для такого сценария можно использовать ElectricSQL это sync-engine, который делает локальный слепок нужных таблиц, позволяет работать оффлайн и синхронизирует состояние с бекендом, включая разбор конфликтов. Но бек тоже нужно под это готовить.
Снять разбор такого собеса на примере мессенджера?
Да 🔥
Нет 🐳
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28❤3🐳2
ВОПРОС С ДЕКАБРЬСКОГО СОБЕСА НА 360К 🤑
Есть проект на React и TypeScript. Сборка через Webpack, при этом в tsconfig указан "target": "es6".
Вопрос: достаточно ли этого, чтобы код, написанный с использованием фич уровня примерно ES2024, был корректно преобразован в ES6?
Ответ:NO! 👎
TypeScript понижает только часть синтаксиса. Он сумеет разобрать и трансформировать конструкции вроде опциональной цепочки или async/await, наверняка вы видели что-то такое:
Но современные возможности языка, которые требуют специальных полифилов или которые TS просто не способен превратить в старый синтаксис, останутся нетронутыми. Webpack этот код тоже не изменит, если вы специально не добавите Babel.
Если ты используешь в коде Array.fromAsync, Promise.withResolvers, новые методы Map, Set, то TS их не перепишет под ES6. Он просто оставит их в итоговом бандле. В старых браузерах у пользователей они вызовут ошибку.
Поэтому для реального снижения уровня JavaScript под старые окружения одной записи "target": "es6" в tsconfig недостаточно. Нужен Babel с preset-env и набором полифилов вроде core-js, который сможет действительно преобразовать весь современный код и обеспечить совместимость с выбранными таргетами.
Кстати, в одном из моих видео затрагивалась тема поддержки старых браузеров и полифилов: таймкод.
👉 Записаться на менторство | Мои услуги
Есть проект на React и TypeScript. Сборка через Webpack, при этом в tsconfig указан "target": "es6".
Вопрос: достаточно ли этого, чтобы код, написанный с использованием фич уровня примерно ES2024, был корректно преобразован в ES6?
Ответ:
TypeScript понижает только часть синтаксиса. Он сумеет разобрать и трансформировать конструкции вроде опциональной цепочки или async/await, наверняка вы видели что-то такое:
const a = obj?.x ?? 1; // было
var a = (obj == null ? void 0 : obj.x) ?? 1; // стало
Если ты используешь в коде Array.fromAsync, Promise.withResolvers, новые методы Map, Set, то TS их не перепишет под ES6. Он просто оставит их в итоговом бандле. В старых браузерах у пользователей они вызовут ошибку.
Поэтому для реального снижения уровня JavaScript под старые окружения одной записи "target": "es6" в tsconfig недостаточно. Нужен Babel с preset-env и набором полифилов вроде core-js, который сможет действительно преобразовать весь современный код и обеспечить совместимость с выбранными таргетами.
Кстати, в одном из моих видео затрагивалась тема поддержки старых браузеров и полифилов: таймкод.
👉 Записаться на менторство | Мои услуги
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥8⚡2👍2☃1
Спроектируй фильтрацию по квартирам или ещё одна задача с предновогодних собесов на ведущего frontend разработчика 🩰
Если вы хоть раз пользовались площадками по типу Авито, Циан и прочих, то наверняка видели такие RangeFilter, в которых можно выбрать не только нужный диапазон, например, по стоимости, но еще и увидеть объем (те самые серые столбики - гистограмма) доступных предложений. Такой фильтр сразу показывает, где вообще есть варианты, а где ползунок тянуть бессмысленно.
🤔 Как это реализовать?
Бекенд🔵
У нас есть БД, например Postgres, и таблица apartments: floor, square, price. Хранить отдельно гистограммы не нужно. Они считаются на лету из реальных данных. Для этого используются бины (это диапазон значений, например: цена от 20 до 40 млн, от 40 до 60 млн и тд). В каждом бине мы считаем количество квартир.
Пример SQL для цены: width_bucket разбивает диапазон min_price → max_price на 20 равных бинов и кладет каждую квартиру в свой сегмент
Очень важно считать гистограммы с учетом остальных активных фильтров. То есть, если меняем цену, значит нужно пересчитать этаж и площадь. Иначе столбики будут показывать ложную картину.
По итогу наша ручка с фильтрами будет возвращать что-то типо такого:
Фронт 💅
По сути это обычный input type="range" (чаще два: от и до). Также важно переписать стили для track и thumb через CSS. track и thumb это как раз сам ползунок и дорожка, по которой перемещается ползунок. Не забываем отрисовать гистограмму отдельным слоем с помощью position: absolute и набора div для столбиков (высота столбика пропорциональна maxCount/count).
Лейблы "от 20,93 млн" и "до 8,09 млрд" внутри инпута тоже реализуем через абсолютное позиционирование.
Ещё при перемещении ползунка считаем его же относительное положение относительно ширины инпута, далее зная min/max значения переводим из относительных значений в конкретные from и to. При каждом изменении любого фильтра: обновляем локальный state, с debounce дергаем ручку, перерисовываем все остальные фильтры, чтобы обновить гистограммы
👉 Записаться на менторство | Мои услуги
Если вы хоть раз пользовались площадками по типу Авито, Циан и прочих, то наверняка видели такие RangeFilter, в которых можно выбрать не только нужный диапазон, например, по стоимости, но еще и увидеть объем (те самые серые столбики - гистограмма) доступных предложений. Такой фильтр сразу показывает, где вообще есть варианты, а где ползунок тянуть бессмысленно.
Бекенд
У нас есть БД, например Postgres, и таблица apartments: floor, square, price. Хранить отдельно гистограммы не нужно. Они считаются на лету из реальных данных. Для этого используются бины (это диапазон значений, например: цена от 20 до 40 млн, от 40 до 60 млн и тд). В каждом бине мы считаем количество квартир.
Пример SQL для цены: width_bucket разбивает диапазон min_price → max_price на 20 равных бинов и кладет каждую квартиру в свой сегмент
SELECT
width_bucket(price, :min_price, :max_price, 20) AS bin,
COUNT(*) AS count
FROM apartments
WHERE
floor BETWEEN :floor_from AND :floor_to
AND square BETWEEN :square_from AND :square_to
GROUP BY bin
ORDER BY bin;
Очень важно считать гистограммы с учетом остальных активных фильтров. То есть, если меняем цену, значит нужно пересчитать этаж и площадь. Иначе столбики будут показывать ложную картину.
По итогу наша ручка с фильтрами будет возвращать что-то типо такого:
{
"price": {
"min": 100k,
"max": 80m,
"bins": [
{ "from": 100k, "to": 5m, "count": 124 },
{ "from": 5m, "to": 9m, "count": 98 }, ...
]
}
}
Фронт 💅
По сути это обычный input type="range" (чаще два: от и до). Также важно переписать стили для track и thumb через CSS. track и thumb это как раз сам ползунок и дорожка, по которой перемещается ползунок. Не забываем отрисовать гистограмму отдельным слоем с помощью position: absolute и набора div для столбиков (высота столбика пропорциональна maxCount/count).
Лейблы "от 20,93 млн" и "до 8,09 млрд" внутри инпута тоже реализуем через абсолютное позиционирование.
Ещё при перемещении ползунка считаем его же относительное положение относительно ширины инпута, далее зная min/max значения переводим из относительных значений в конкретные from и to. При каждом изменении любого фильтра: обновляем локальный state, с debounce дергаем ручку, перерисовываем все остальные фильтры, чтобы обновить гистограммы
👉 Записаться на менторство | Мои услуги
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2🐳2🥰1
Собеседование на frontend разработчика в М.Видео - Эльдорадо на 330к
Поговорили немного про FSD, обсудили его плюсы и минусы. Также поболтали о работе браузера, о работе сетей, о том, как браузер отрисовывает страницы.
Помучали React, пошатали его внутренности, прошлись по теории: JavaScript, CSS, HTML. Успели пописать код, решили алгоритмическую задачу и две задачи на JS.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2🤯2⚡1🎄1