22241
Изучаем Frontend. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/senior_front https://gosuslugi.ru/snet/67a461dcdc130259d5a631b8
#вопросы_с_собеседований
Что такое Cross-Origin Resource Sharing (CORS)?
Cross-Origin Resource Sharing (CORS) — механизм, использующий дополнительные HTTP-заголовки, чтобы дать возможность агенту пользователя получать разрешения на доступ к выбранным ресурсам с сервера на источнике (домене), отличном от того, что сайт использует в данный момент. Говорят, что агент пользователя делает запрос с другого источника (cross-origin HTTP request), если источник текущего документа отличается от запрашиваемого ресурса доменом, протоколом или портом.
В целях безопасности браузеры ограничивают cross-origin запросы, инициируемые скриптами. Например, XMLHttpRequest и Fetch API следуют политике одного источника (same-origin policy). Это значит, что web-приложения, использующие такие API, могут запрашивать HTTP-ресурсы только с того домена, с которого были загружены, пока не будут использованы CORS-заголовки.
#вопросы_с_собеседований
В чём разница между объектами Map и WeakMap?
Эти объекты ведут себя по-разному в том случае, если переменная, содержащая ссылку на объект, являющийся ключом одной из пар ключ/значение, оказывается недоступной.
После того, как завершается выполнение IIFE, у нас уже не будет доступа к объектам a и b. Поэтому сборщик мусора удаляет ключ b из weakmap и очищает память. А вот содержимое map остаётся при этом неизменным.
В результате оказывается, что объекты WeakMap позволяют сборщику мусора избавляться от тех своих записей, на ключи которых нет ссылок во внешних переменных. Объекты map хранят пары ключ/значение вне зависимости от наличия или отсутствия внешних ссылок на ключи. То же самое можно сказать и о реализации структуры данных Map с использованием обычных массивов. В WeakMap используются «слабые» ссылки на ключи. Они не препятствуют работе сборщика мусора в том случае, если на объект, используемый в роли ключа, нет других ссылок.
#вопросы_с_собеседования
Что выведет на экран следующий код?
Ответ:
10
Пояснение: В функции b 3 аргумента, индексы которых начинаются с [0]. Таким образом, аргумент с индексом [2] — это a. В первой строке функции третьему аргументу функции присваивается значение 10.
JavaScript. Что будет выведено в консоль?
Ответ
Steam inspired game card hover effect
Эффект блика в стиле Steam при наведении на игровую карточку, реализованный на чистом CSS.
https://codepen.io/andrewhawkes/pen/RwwOJrO
Работа с API сторонних сервисов в веб-приложении: Пример интеграции с OpenWeatherMap API
Интеграция с API сторонних сервисов позволяет получать актуальные данные и расширять функциональность вашего веб-приложения. В данном примере мы рассмотрим интеграцию с OpenWeatherMap API, чтобы получать данные о погоде и отображать их на веб-странице.
📝 Пример кода:
1. Получение API ключа:
Для работы с OpenWeatherMap API необходимо получить API ключ, который будет использоваться для авторизации запросов. Вы можете зарегистрироваться на сайте OpenWeatherMap, чтобы получить свой ключ API.
2. Создание функции для выполнения запросов к API, обработка данных и отображение на странице(Рисунок 1):
3. HTML-разметка и стили(Рисунок 2 и 3)
В примере мы создали функцию fetchWeatherData, которая выполняет запрос к OpenWeatherMap API с указанием города и ключа API. Затем мы обрабатываем полученные данные и отображаем их на странице при помощи функции displayWeatherData. При нажатии кнопки "Search" происходит выполнение запроса и отображение данных о погоде для указанного города.
Этот пример демонстрирует базовую интеграцию с API стороннего сервиса и может быть расширен для более сложной обработки данных или отображения.
JavaScript. Что будет выведено в консоль?
Ответ
#вопросы_с_собеседований
Как добавить в строку пробелы или другие символы?
padStart добавляет в начало строки символы, пока она не достигнет длины, заданной первым параметром. Вторым параметром можно указать любой символ. padEnd работает аналогично, добавляя символы в конец.
#вопросы_с_собеседований
Что такое Веб-компоненты и какие технологии в них используются?
Веб-компоненты — технология, которая позволяет создавать многократно используемые компоненты в веб-документах и веб-приложениях. Веб-компоненты поддерживаются веб-браузерами напрямую и не требуют дополнительных библиотек для работы.
Веб-компоненты включают четыре технологии, каждая из которых может использоваться отдельно от других:
Custom Elements — API для создания собственных HTML элементов.
HTML Templates — тег позволяет реализовывать изолированные DOM-элементы.
Shadow DOM — изолирует DOM и стили в разных элементах.
HTML Imports — импорт HTML документов.
JavaScript. Что будет выведено в консоль?
Ответ
3D Globe
Этот код представляет собой веб-приложение, которое отображает интерактивный 3D глобус с кликабельными точками, при клике на которые показываются соответствующие координаты широты и долготы во всплывающем окне.
Используемые фреймворки и библиотеки:
1. Three.js:
2. GSAP
3. OrbitControls из Three.js: Расширение Three.js для добавления интерактивных элементов управления орбитой в 3D-сцене.
HTML-структура:
Код начинается с HTML-структуры, которая содержит обертывающий div с классом "page". Внутри div "page" находится div "title" с классом "title", чтобы отображать сообщение. Основные элементы 3D-глобуса помещены внутрь div с классом "globe-wrapper". Включает два элемента canvas с идентификаторами "globe-3d" и "globe-2d-overlay" для рендеринга 3D и 2D графики соответственно. Кроме того, есть div с идентификатором "globe-popup-overlay" для отображения содержимого всплывающего окна.
Логика JavaScript:
JavaScript-код использует Three.js для создания 3D-сцены и отображения глобуса на canvas "globe-3d". Также используется GSAP для анимаций и отображения всплывающих окон.
Ключевые компоненты и функциональность:
◾️ Начальная настройка: Код инициализирует Three.js рендерер, сцену, камеру, элементы управления орбитой и другие переменные, необходимые для 3D-рендеринга. Загружается текстура глобуса и создаются 3D-точки на глобусе с использованием шейдерного материала.
◾️Слушатели событий: Код прикрепляет слушатели событий к событиям "mousemove" и "click" на элементе контейнера. Эти события используются для обновления положения указателя мыши и обработки кликов на глобусе.
◾️3D-рендеринг: Глобус отрисовывается на canvas "globe-3d" с помощью Three.js. Для кастомного эффекта рендеринга предоставлены вершинный и фрагментный шейдеры.
◾️Анимация всплывающего окна: Создается анимация всплывающего окна с использованием временных шкал GSAP для плавного отображения и скрытия всплывающего окна.
🌐Ссылка на код
❓Что будет на выходе?
Ответ: "object"
#вопросы_с_собеседований
Как передать изображение размером 10мб с помощью GET-запроса?
Перевести в строку, разбить её на куски и отправить разными запросами. На самом деле на вопрос нет верного ответа, ибо правильный ответ — не отправляйте файлы методом GET. В вопрос можно было бы поставить дополнительные требования, например, об огромном размере файлов и необходимости догрузки при потере соединения. То есть если интервьюер хочет услышать от вас ответ про возможность нарезки файлов на клиенте, он может уточнить задачу.
👩💻 Поиск по ключевым словам всё чаще проигрывает реальным пользовательским запросам.
Фразы-ключи требуют уже не совпадения слов, а понимания смысла.
На открытом уроке:
разберём, как построить современную систему семантического поиска для реального e-commerce проекта.
Без абстрактной теории — только практическая работа с базой данных, SQL-запросами, генерацией эмбеддингов и интеграцией ИИ-инфраструктуры.
покажем настройку PostgreSQL и pgvector, работу с Supabase, интеграцию фронтенда на React/Vite и бэкенда на Python, а также подключение ИИ-агента через MCP для интеллектуального анализа данных.
После урока вы сможете проектировать базы данных с поддержкой векторного поиска, работать с текстовыми эмбеддингами и интегрировать современные ИИ-сценарии в реальные продукты.
🗓 Открытый урок пройдёт 4 июня в 20:00 МСК в преддверии старта курса «ИИ для разработчиков». Участие бесплатное.
Подробности и регистрация: https://otus.pw/QIkH/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
#вопросы_с_собеседований
Идентичный алфавит
Напишите функцию, принимающую две строки и возвращающую true в случае если строки состоят из одинаковых букв (порядок не важен). Иначе верните false.isEqualSymbols('кит', 'тик'); // => trueРешение на картинке. Для ускорения мы сразу отбрасываем вариант, когда строки не равны по длине, далее делаем из строк массивы и сортируем по символам, затем склеиваем обратно и проверяем готовые строки на равенство.
isEqualSymbols('мда', 'да я'); // => false
Обзор 10 приемов JavaScript для эффективного программирования
1. Объект Intl
Объект Intl позволяет форматировать числа, даты и валюту с учетом разных локалей и параметров.
Он предоставляется с множеством свойств, которые обеспечивают быстрое и безупречное форматирование данных.
Рассмотрим пример форматирования валюты: let num = 100;₹
let RupeeFormatter = new Intl.NumberFormat("en-IN",
{style: "currency", currency: "INR"})
let RupeeFormatted = RupeeFormatter.format(num);
console.log(RupeeFormatted)
// 100
let USDFormatter = new Intl.NumberFormat("en-IN",
{style: "currency", currency: "USD"})
let USDFormatted = USDFormatter.format(num)
console.log(USDFormatted)
// $100
2. Оператор ??
Оператор ?? присваивает переменной значение по умолчанию, если она null или undefined.
Используйте данный оператор, если сомневаетесь в существовании у объекта того или иного свойства. Если свойство отсутствует, переменной присваивается значение по умолчанию.
Пример:let user = {}
let name = user.name ?? "Anonymous"
console.log(name)
// "Anonymous"
3. Object.fromEntries()
Метод Object.fromEntries() преобразует массив пар “ключ-значение” в объект.
Возьмем следующий массив и создадим из него объект, как показано ниже: let arr = [["name", "Alice"], ["age", 25]]
let obj = Object.fromEntries(arr);
console.log(obj)
// {name: "Alice", age: 25}
4. Array.flat()
Метод Array.flat() преобразует вложенный массив в один единственный.
Поскольку вложенными массивами сложно управлять, то данный метод помогает уменьшать их вложенность.
Пример:let arr = [1, [2, [3, [4]]]];
let flat = arr.flat(Infinity)
console.log(flat)
// [1, 2, 3, 4]
5. Оператор ?
Оператор ?. обеспечивает доступ к свойствам объекта без проверки, является ли он null или undefined.
Используйте его, когда не знаете, существует ли объект или нет.
Пример:let user = null
let age = user?.age
console.log(age)
// undefined
6. Array.reduce()
Метод Array.reduce() применяет функцию к каждому элементу массива и суммирует результат в одно значение.
Пример сложения всех чисел массива: let arr = [1, 2, 3, 4, 5]
let sum = arr.reduce((a, b) => a + b)
console.log(sum)
// 15
7. String.repeat()
Метод String.repeat() создает новую строку, повторяя заданную строку указанное количество раз.
Пример:let str = "js".repeat(10)
console.log(str)
// 'jsjsjsjsjsjsjsjsjsjs'
8. Array.from()
Метод Array.from() создает новый массив из массивоподобного или итерируемого объекта.
Пример:let str = "Hello"
let arr = Array.from(str)
console.log(arr)
// ["H", "e", "l", "l", "o"]
9. Math.hypot()
Метод Math.hypot() находит квадратный корень из суммы квадратов его аргументов.
Так, сумма квадратов 3 и 4 равна 25, а квадратный корень из 25 равен 5. Следовательно, Math.hypot(3, 4) возвращает 5.
Пример:let hyp = Math.hypot(3, 4);
console.log(hyp)
// 5
10. Object.assign()
Метод Object.assign() копирует значения всех перечисляемых собственных свойств из одного или нескольких исходных объектов в целевой объект.
Пример:let obj1 = {a: 1, b: 2};
let obj2 = {c: 3, d: 4};
let obj3 = Object.assign(obj1, obj2)
console.log(obj3)
// {a: 1, b: 2, c: 3, d: 4}
JavaScript. Что будет выведено в консоль?
Ответ
Тестовое собеседование с руководителем Frontend-разработки в этот четверг
25 июня(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика.
Как это будет:
📂 Виталий Черков, руководитель группы Frontend разработки с опытом 8+ лет, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Виталий будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Виталию
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot
Реклама.
О рекламодателе.
JavaScript. Задача
Дано игровое поле, которое задано матрицей m x n, где каждая ячейка представляет собой клетку корабля «X» или пустую клетку «.».
Необходимо найти количество всех кораблей на игровом поле.
Примечания:
- Корабли можно размещать на игровом поле только горизонтально или вертикально
- Два корабля разделяет по крайней мере 1 горизонтальная или вертикальная клетка.
Входные данные: board — символьная матрица, содержащая символы ‘.’, ‘X’. Размер сторон матрицы от 1 до 100.
Вывод: количество всех кораблей.
Пример:
board = [
[‘X’, ‘.’, ‘.’, ‘X’],
[‘.’, ‘.’, ‘.’, ‘X’],
[‘.’, ‘.’, ‘.’, ‘X’]]
Output: 2
День сурка frontend-разработчика
Зарплата стоит, скучные задачи день за днем, календарь забит созвонами, которые не влияют вообще ни на что.
Откликаешься на вакансии, а в ответ тишина либо какие-то мутные конторы. На собесах вместо нормальной оценки навыков цирк с алгоритмами на скорость, как будто ты на олимпиаде, а не работу ищешь.
И самое неприятное, пока ты варишься в этом болоте, кто-то спокойно проходит собесы и уходит в Яндекс, VK или на хорошую Валютную удаленку без лишней драмы.
Есть классные проекты и сильные команды, где разработчиков действительно ценят, дают расти, поддерживают развитие и платят достойно и ты можешь туда попасть!
Интерактивный кубик 3D
В примере код создает интерфейс, который позволяет вращать 3D-кубик, нажимая на разные оси. Он использует CSS и Pug для создания графики и взаимодействия. CSS отвечает за стилизацию и анимацию кубика, а Pug - за генерацию HTML-кода. Pug - это шаблонизатор, который позволяет писать HTML с меньшим количеством символов и более читабельным синтаксисом.
🌐Ссылка на код
#вопросы_с_собеседований
Как проверить, является ли значение массивом?
Для этого следует использовать метод Array.isArray.
#вопросы_с_собеседований
Почему функции в JS называют объектами первого класса (First-class Objects)?
Функции называют объектами первого класса, так как они обрабатываются также, как и любое другое значение в JS. Они могут:
1) Присваиваться переменным
2) Быть свойством объекта, т. е. методом
3) Быть значением, возвращаемым функцией
4) Быть элементом массива
5) Быть аргументом другой функции
Отличием функции от других значений является то, что функция может быть выполнена или вызвана.
Как работает прототипное наследование в JavaScript? Можете ли вы объяснить разницу между классическим наследованием и прототипным?
Прототипное наследование в JavaScript означает, что объекты наследуют свойства и методы от другого объекта, известного как прототип. В отличие от классического наследования, где классы являются схемами для создания объектов, в JavaScript объект может наследовать непосредственно от другого объекта.
Ключевой особенностью прототипного наследования является то, что оно позволяет объектам делиться свойствами и методами, что упрощает повторное использование кода. Например, если у вас есть объект animal, и вы создаете объект dog, который наследует от animal, dog будет иметь доступ ко всем свойствам и методам animal.
Классическое наследование, часто встречающееся в языках, таких как Java или C++, включает в себя иерархию классов, где классы наследуются от других классов. В JavaScript прототипное наследование позволяет объектам наследовать напрямую друг от друга, что делает его более гибким, но также может быть более запутанным для понимания без тщательного изучения.
#вопросы_с_собеседований
Как следует оформлять страницу, содержимое которой может быть на разных языках?
Вопрос немного расплывчатый. Полагаю, что речь о наиболее частом случае: как показывать страницу, где содержимое доступно на нескольких языках, но отображается на одном определенном.
Когда к серверу делается HTTP-запрос, то браузер пользователя обычно отсылает информацию о предпочитаемом языке в заголовке Accept-Language. Сервер может использовать эту информацию, чтобы вернуть версию документа на подходящем языке, если такая возможность есть. В возвращённом HTML-документе обязательно должен быть указан атрибут lang у тега <html>, к примеру <html lang="en">...</html>.
На бэкенде HTML-разметка будет содержать плейсхолдер i18n, а контент для конкретного языка будет храниться в YAML- или JSON-формате. Сервер динамически формирует HTML-страницу с контентом на конкретном языке, чаще всего при помощи бэкенд-фреймворка.
CSS is dead
Сцена состоит из следующих элементов:
◾️ <div role="img" aria-label="Animated cartoon: Death...">: Обертка, представляющая мультфильм.
◾️<section>: Контейнер, в котором происходит анимация.
◾️<a href="https://comicss.art" target="_blank">comiCSS</a>: Ссылка на веб-сайт.
◾️<div class="ring"></div>: Элемент с анимацией появления колокольчика (ring).
◾️<div class="phone"></div>: Элемент с анимацией появления телефона.
◾️<div class="death">: Элемент, представляющий смерть, имеющий анимации появления (walkin), движения плеч (shouldersmove) и исчезновения (walkout).
◾️<div class="eyebrow"></div>: Элемент с анимацией движения глаз брови.
◾️<div class="bubble" role="group" aria-label="Text message from JavaScript: CSS is dead">: Элемент представляющий всплывающую речевую пузырьковую анимацию с текстом "CSS is dead!".
◾️<div class="js">JS</div>: Элемент с анимацией подъёма и исчезновения с надписью "JS".
◾️<span>CSS is dead!</span>: Текстовый элемент внутри пузырька с сообщением.
◾️<div class="sigh">: Элемент с анимацией появления и исчезновения текста "That guy is so annoying... Maybe it's time I take another of its frameworks away..." (Этот парень такой раздражающий... Может, пришло время отнять у него ещё один его фреймворк...).
Анимации включают анимацию появления, движения и исчезновения элементов, которые вместе создают впечатляющий эффект анимированного мультфильма.
🌐Ссылка на код
#вопросы_с_собеседований
Объясните разницу между cookie, sessionStorage и localStorage.
Все вышеупомянутые технологии являются механизмами хранения типа ключ-значение на клиентской стороне. Они могут хранить данные только как строки.
Уникализация значений в массиве
Задача — написать функцию, принимающую в аргументах массив целых чисел и возвращающую новый массив, состоящий только из уникальных значений первого массива. Эту задачу можно решить в одну строчку. Пример:unique([1, 1, 2, 2, 2, 1, 3, 7, 3]); // => [1, 2, 3, 7]
Решение — на картинке. В нем используются практически все возможности метода filter — необязательные аргументы index и self. Первый является индексом текущего элемента, а self — это сам обрабатываемый массив.
JavaScript Promises: серия статей для фронтенд-разработчика с подробным объяснением.
🗄 How promises work
🗄 How to get current promise status and build your own promise queue?
🗄 Garbage collection and memory leaks
Найти ближайшее значение в бинарном дереве
Напишите функцию, которая принимает два аргумента — бинарное дерево и значение в виде числа, а возвращает ближайшее значение, найденное в бинарном дереве.
Node = { value: number | null, left: Node | null, right: Node | null }
Решение доступно на картинке. Зная свойство сбалансированного бинарного дерева, где слева находятся все значения нод меньше текущей, а справа равные или больше по значению, мы можем в лучшем случае откидывать каждый раз половину дерева.