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

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

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

Канал в реестре РКН:
https://rknn.link/su
Download Telegram
Перед тем, как выбрать оффер, пойми себя

Представьте, что вам нужно решить, сменить работу или остаться. Какую компанию выберете? Ту, где платят больше?

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

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

👉 @frontendInterview
2👎1
📚 Здесь собраны все вопросы, которые могут спросить на собеседовании. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам. Просто выбери своё направление:

1. Frontend / JavaScript
2. Python
3. Java
4. Тестировщик QA
5. Data Science
6. DevOps
7. C#
8. С/C++
9. Golang
10. PHP
11. Kotlin
12. Swift
Почему вместо кириллического текста выводятся ромбики?

Иногда при отображении в браузере веб-страницы вместо текста можно наблюдать ромбики или другие символы. Но совсем не тот текст, который мы ожидаем

Такое происходит при сохранении файла в неверной кодировке, например, в ANSI. Недостаточно добавить <meta charset="utf-8"> в код, нужно чтобы и сам HTML-файл был сохранён в кодировке UTF-8. Для этого следует использовать редакторы, которые поддерживают разные кодировки и могут преобразовать текст из одной кодировки в другую. К примеру, в популярном редакторе Notepad++ под Windows для нужной кодировки следует выбрать меню Кодировки > Преобразовать в UTF-8

👉 @frontendInterview
👍7
Блистательный Agile. Гибкое управление проектами с помощью Agile, Scrum и Kanban

Что такое гибкое управление проектами? Нужно ли оно вашему проекту? Будет ли от этого выгода? Хотите разобраться, как работает гибкое управление проектами и воспользоваться этим мощным подходом? Тогда вы выбрали правильную книгу. «Блистательный Agile» – это не очередной рассказ о методах и процессах, основное внимание уделено реальным примерам использования Agile в бизнес-средах.

👉 @frontendInterview
Calculate age in years

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

Примеры:
getAge(new Date('1913/01/01'), new Date('2013/01/01') === 100
getAge(new Date('2008/02/29'), new Date('2032/03/01')) === 24
getAge(new Date('2008/01/01'), new Date('2000/01/01')) === -8


👉 @frontendInterview
Как найти работу за рубежом?

Международные стартапы с русскоговорящими командами – один из эффективных способов получить оффер.

Вакансии именно в таких компаниях собирают ребята в канале Dev & ML Connectable Jobs.
Как результат – уже десятки читателей получили офферы в Neon, InDrive, 1inch, Wheely и в PLATA.

Несколько актуальных вакансий:
Senior Frontend Engineer в Activeloop (remote)
Senior Frontend Developer в JetBrains (Германия, Кипр, Армения, Чехия, Сербия)
Senior Frontend Developer в Playkot (remote или помогают с релокацией в Сербию / на Кипр)
Frontend Engineer в BostonGene (Ереван, помогают с релокацией)

Подписывайтесь и развивайте карьеру в будущем единороге!💙
👎21👍1🔥1
Делегирование событий

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

На примере меню
Делегирование событий позволяет удобно организовывать деревья и вложенные меню.
 <ul id="menu">
<li><a href="/php">PHP</a></li>
<li><a href="/html">HTML</a></li>
<li><a href="/javascript">JavaScript</a></li>
<li><a href="/flash">Flash</a></li>
</ul>

Клики по пунктам меню будем обрабатывать при помощи JavaScript. Пунктов меню в примере всего несколько, но может быть и много. Конечно, можно назначить каждому пункту свой персональный onclick-обработчик, но что если пунктов 50, 100, или больше? Неужели нужно создавать столько обработчиков? Конечно же, нет!

Применим делегирование: назначим один обработчик для всего меню, а в нём уже разберёмся, где именно был клик и обработаем его:
// 1. вешаем обработчик
document.getElementById('menu').onclick = function(e) {

// 2. получаем event.target
var event = e || window.event;
var target = event.target || event.srcElement;

// 3. проверим, интересует ли нас этот клик?
// если клик был не на ссылке, то нет
if (target.tagName != 'A') return;

// обработать клик по ссылке
var href = target.getAttribute('href');
alert(href); // в данном примере просто выводим
return false;
};


👉 @frontendInterview
👍7
Какое значение примет result?
Anonymous Quiz
7%
0
42%
-1
2%
2
50%
1
This media is not supported in your browser
VIEW IN TELEGRAM
Как размыть текст?

Для размытия содержимого элемента, включая текст, применяется стилевое свойство filter с функцией blur(). Внутри функции указываем степень размытия (например, 5px) — чем больше значение, тем сильнее будет размытие.
div { filter: blur(5px); }

Ещё один способ размытия текста — это использование свойства text-shadow, добавляющее к тексту тень. В параметрах свойства можно регулировать степень размытия тени (здесь это третий параметр), добиваясь нужного эффекта.
div { text-shadow: 0 0 5px #000; color: transparent; }
Поскольку тень располагается за текстом, сам текст не меняется при наложении тени и сохраняет свою читаемость. Поэтому текст следует спрятать, задав ему прозрачный цвет через значение transparent.

👉 @frontendInterview
👍5
Почему умение дебажить один из самых важных навыков для разработчика

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

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

👉 @frontendInterview
👍5🔥1
Какое свойство CSS используется для масштабирования картинки, ограниченной заданными размерами, при сохранении пропорций?
Anonymous Quiz
57%
object-fit
15%
background-size
4%
resize
24%
scale
This media is not supported in your browser
VIEW IN TELEGRAM
А потом он все доделал и закрыл таск, но это уже совсем другая история...

👉 @frontendInterview
👍4👎1🤔1
toSpliced()

Метод toSpliced() возвращает новый массив, удаляя определённое количество элементов и/или добавляя новые элементы, начиная с указанного индекса в исходном массиве.

Пример
Создадим массив, удаляя из исходного массива 2 элемента, начиная с элемента с индексом 3:
const months = [
'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь'
]
const newMonths = months.toSpliced(3, 2)

console.log(newMonths)
// ['Май', 'Июнь', 'Июль', 'Октябрь']


В отличие от метода splice(), toSpliced() не меняет исходный массив и не возвращает удаляемые элементы:
const numbers = [10, 20, 30, 40]
const newNumbers = numbers.toSpliced(1, 2)
console.log(newNumbers, numbers)
// [10, 40] [10, 20, 30, 40]

// А вот как работает splice()
const deletedNumbers = numbers.splice(1, 2)
console.log(deletedNumbers, numbers)
// [20, 30] [10, 40]


👉 @frontendInterview
👍13
Грокаем функциональное программирование

Вам кажется, что функциональное программирование – это нечто сложное, доступное только гуру программирования? Эта книга развенчает миф об элитарности и позволит любому программисту с легкостью разобраться в хитросплетениях кода.

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

👉 @frontendInterview
👍2
COFFEE

Вам дана строка, которая может содержать слово coffee. Некоторые буквы слова могут быть заглавными. Сделайте все буквы этого слова заглавными и верните строку.

Пример:
Input: "Coffee! Buy me a COFFEE!"
Output: "COFFEE! Buy me a COFFEE!"

👉 @frontendInterview
👎3👍1
Для чего используется WebSocket? В чем принцип его работы?

Протокол WebSocket («веб-сокет»), описанный в спецификации RFC 6455, обеспечивает возможность обмена данными между браузером и сервером через постоянное соединение. Данные передаются по нему в обоих направлениях в виде «пакетов», без разрыва соединения и дополнительных HTTP-запросов.

Чтобы открыть веб-сокет-соединение, нам нужно создать объект new WebSocket, указав в url-адресе специальный протокол ws:
let socket = new WebSocket("ws://javascript.info");


Как только объект WebSocket создан, мы должны слушать его события. Их всего 4:
- open – соединение установлено,
- message – получены данные,
- error – ошибка,
- close – соединение закрыто.

Вот пример:
  let socket = new WebSocket("wss://javascript.info/article/websocket/demo/hello");

socket.onopen = function(e) {
alert("[open] Соединение установлено");
alert("Отправляем данные на сервер");
socket.send("Меня зовут Джон");
};

socket.onmessage = function(event) {
alert(`[message] Данные получены с сервера: ${event.data}`);
};

socket.onclose = function(event) {
if (event.wasClean) {
alert(`[close] Соединение закрыто чисто, код=${event.code} причина=${event.reason}`);
} else {
// например, сервер убил процесс или сеть недоступна
// обычно в этом случае event.code 1006
alert('[close] Соединение прервано');
}
};

socket.onerror = function(error) {
alert(`[error] ${error.message}`);
};

Вызов socket.send(body) принимает body в виде строки или любом бинарном формате включая Blob, ArrayBuffer и другие. Дополнительных настроек не требуется, просто отправляем в любом формате. При получении данных, текст всегда поступает в виде строки. А для бинарных данных мы можем выбрать один из двух форматов: Blob или ArrayBuffer.

👉 @frontendInterview
13👍3👎1