Готовь телегу зимой: какие технологии и фреймворки будут актуальны в IT 2025 году
В ИТ-индустрии всё скоротечно: технологии постоянно совершенствуются, меняются, выходят новые релизы, а мы ежегодно продолжаем бороться с легаси, выкатывать изменения и переезжать на новые версии языков и инструментов. Мы расспросили членов ПК конференции Merge 2024 о том, чего айтишникам ждать в 2025 году. Итак, поехали.
👉 @frontendInterview
В ИТ-индустрии всё скоротечно: технологии постоянно совершенствуются, меняются, выходят новые релизы, а мы ежегодно продолжаем бороться с легаси, выкатывать изменения и переезжать на новые версии языков и инструментов. Мы расспросили членов ПК конференции Merge 2024 о том, чего айтишникам ждать в 2025 году. Итак, поехали.
👉 @frontendInterview
Поговорим про деньги в IT?
Приглашаем опытных IT-специалистов пройти небольшой опрос про зарплаты и бенефиты в технологических компаниях. Это займёт не более 7 минут — а ваше мнение поможет одному крупному российскому работодателю делать актуальные оферы.
Пройти опрос можно здесь
Приглашаем опытных IT-специалистов пройти небольшой опрос про зарплаты и бенефиты в технологических компаниях. Это займёт не более 7 минут — а ваше мнение поможет одному крупному российскому работодателю делать актуальные оферы.
Пройти опрос можно здесь
👎3
Для чего используется свойство text-wrap в CSS?
Anonymous Quiz
4%
Для управления размером текста
1%
Для управления цветом текста
93%
Для управления переносом текста по строкам
2%
Для управления шрифтом текста
👍7
Что такое мемоизация ?
Это оптимизационная техника, используемая для ускорения выполнения программ путём сохранения результатов дорогостоящих функций и повторного использования этих результатов, когда снова возникают одинаковые входные данные, вместо того чтобы повторно выполнять функцию.
Как это работает
При первом вызове функции с определённым набором аргументов результат выполнения функции сохраняется в каком-либо хранилище (чаще всего в виде объекта или карты). При последующих вызовах функции с теми же аргументами, вместо выполнения функции, возвращается сохранённый результат. Это значительно сокращает время выполнения, особенно если исходная функция требует значительных вычислительных ресурсов.
Применение:
Мемоизация часто применяется для оптимизации производительности в различных областях, включая:
- Рекурсивные вычисления, например, вычисление чисел Фибоначчи.
- Дорогостоящие вычисления, которые часто повторяются с одними и теми же аргументами.
- Оптимизация производительности веб-приложений, например, в React, где меморизация помогает избежать ненужных перерисовок компонентов.
👉 @frontendInterview
Это оптимизационная техника, используемая для ускорения выполнения программ путём сохранения результатов дорогостоящих функций и повторного использования этих результатов, когда снова возникают одинаковые входные данные, вместо того чтобы повторно выполнять функцию.
Как это работает
При первом вызове функции с определённым набором аргументов результат выполнения функции сохраняется в каком-либо хранилище (чаще всего в виде объекта или карты). При последующих вызовах функции с теми же аргументами, вместо выполнения функции, возвращается сохранённый результат. Это значительно сокращает время выполнения, особенно если исходная функция требует значительных вычислительных ресурсов.
Применение:
Мемоизация часто применяется для оптимизации производительности в различных областях, включая:
- Рекурсивные вычисления, например, вычисление чисел Фибоначчи.
- Дорогостоящие вычисления, которые часто повторяются с одними и теми же аргументами.
- Оптимизация производительности веб-приложений, например, в React, где меморизация помогает избежать ненужных перерисовок компонентов.
function memoize(fn) {
const cache = {};
return function(...args) {
const key = args.toString();
if (cache[key]) {
return cache[key];
} else {
const result = fn.apply(this, args);
cache[key] = result;
return result;
}
};
}
// Пример использования меморизации для функции вычисления факториала
const factorial = memoize(function(n) {
if (n === 0) {
return 1;
} else {
return n * factorial(n - 1);
}
});
console.log(factorial(5)); // Вычисляется и сохраняется в кэше
console.log(factorial(5)); // Возвращается результат из кэша, вычислений не происходит
👉 @frontendInterview
👍4🔥1
Наглядный CSS
На 1 июня 2018 года CSS содержал 415 уникальных свойств, относящихся к объекту style в любом элементе браузера Chrome. Сколько свойств доступно в вашем браузере на сегодняшний день? Наверняка уже почти шесть сотен. Наиболее важные из них мы и рассмотрим.
Грег Сидельников упорядочил свойства по основной категории (положение, размерность, макеты, CSS-анимация и т. д.) и визуализировал их работу.
Вместо бесконечных томов документации – две с половиной сотни иллюстраций помогут вам разобраться во всех тонкостях работы CSS. Эта книга станет вашим настольным справочником, позволяя мгновенно перевести пожелания заказчика и собственное видение в компьютерный код!
👉 @frontendInterview
На 1 июня 2018 года CSS содержал 415 уникальных свойств, относящихся к объекту style в любом элементе браузера Chrome. Сколько свойств доступно в вашем браузере на сегодняшний день? Наверняка уже почти шесть сотен. Наиболее важные из них мы и рассмотрим.
Грег Сидельников упорядочил свойства по основной категории (положение, размерность, макеты, CSS-анимация и т. д.) и визуализировал их работу.
Вместо бесконечных томов документации – две с половиной сотни иллюстраций помогут вам разобраться во всех тонкостях работы CSS. Эта книга станет вашим настольным справочником, позволяя мгновенно перевести пожелания заказчика и собственное видение в компьютерный код!
👉 @frontendInterview
❤5
Millipede of words
Дан массив из 3-7 слов произвольной длины. Без заглавных букв. Слова объединяются, если последняя буква одного слова и первая буква другого слова одинаковы. Возвращается true, если все слова из набора могут быть объединены в одно слово. Каждое слово может и должно быть использовано только один раз. В противном случае возвращается false.
Пример:
👉 @frontendInterview
Дан массив из 3-7 слов произвольной длины. Без заглавных букв. Слова объединяются, если последняя буква одного слова и первая буква другого слова одинаковы. Возвращается true, если все слова из набора могут быть объединены в одно слово. Каждое слово может и должно быть использовано только один раз. В противном случае возвращается false.
Пример:
solution(["no", "dog", "on", "good"]) => false
solution(["engine", "endure", "elite"]) => true
👉 @frontendInterview
🔥6
За что отвечает z-index?
Это CSS-свойство, которое определяет порядок расположения элементов по оси z (перпендикулярно экрану). Это свойство используется для управления тем, какие элементы будут отображаться поверх других, когда они перекрываются.
Как он работает?
Контекст наложения (stacking context): Чтобы
Числовое значение:
Пример
В этом примере у нас есть два элемента, которые перекрываются. Красный квадрат имеет
Почему это важно?
Управление перекрытиями: Важен для создания сложных интерфейсов, где элементы могут перекрываться. Это часто встречается в модальных окнах, всплывающих подсказках, выпадающих меню и т.д.
Визуальная иерархия: Он позволяет разработчикам управлять визуальной иерархией, гарантируя, что более важные элементы остаются видимыми и доступны пользователям.
👉 @frontendInterview
Это CSS-свойство, которое определяет порядок расположения элементов по оси z (перпендикулярно экрану). Это свойство используется для управления тем, какие элементы будут отображаться поверх других, когда они перекрываются.
Как он работает?
Контекст наложения (stacking context): Чтобы
z-index
работал, элемент должен иметь установленное значение position
, отличное от static
(например, relative
, absolute
, fixed
или sticky
). Без этого z-index
не будет применяться.Числовое значение:
z-index
принимает целые числа, включая отрицательные. Элементы с более высоким значением z-index
будут отображаться поверх элементов с более низким значением.Пример
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Пример z-index</title>
<style>
.box {
position: absolute;
width: 100px;
height: 100px;
}
.box1 {
background-color: red;
z-index: 1;
top: 50px;
left: 50px;
}
.box2 {
background-color: blue;
z-index: 2;
top: 80px;
left: 80px;
}
</style>
</head>
<body>
<div class="box box1"></div>
<div class="box box2"></div>
</body>
</html>
В этом примере у нас есть два элемента, которые перекрываются. Красный квадрат имеет
z-index: 1
, а синий квадрат — z-index: 2
. Поскольку значение z-index
у синего квадрата выше, он будет отображаться поверх красного.Почему это важно?
Управление перекрытиями: Важен для создания сложных интерфейсов, где элементы могут перекрываться. Это часто встречается в модальных окнах, всплывающих подсказках, выпадающих меню и т.д.
Визуальная иерархия: Он позволяет разработчикам управлять визуальной иерархией, гарантируя, что более важные элементы остаются видимыми и доступны пользователям.
👉 @frontendInterview
👍7❤1
Какое значение примет переменная arr?
Anonymous Quiz
6%
['a', 'b', 'c']
23%
[10, 20, 30]
69%
[NaN, NaN, NaN]
3%
undefined
Как сделать превью проекта на собственном сервере
Почти всегда в проекте существует задача смотреть на текущие сборки из неосновной ветки репозитория. В крупных проектах есть инженеры, которые занимаются такими задачами. А что, если вы один на проекте? А что, если вы работаете в опенсорс? А что, если у вас совсем маленькая команда и нет возможности нанимать инженеров с нужным опытом?
Есть несколько готовых сервисов. Если вы работаете над статическим сайтом, можно использовать GitHub Pages, Netlify или Surge. Но это не всегда удобно по целому ряду причин. А вот если есть свой выделенный сервер, возможности резко увеличиваются. Почему бы и не использовать уже имеющийся у вас ресурс?
Моё решение основано на использовании веб-сервера Nginx, зато кроме него ничего не понадобится. С другой стороны, вы всегда сможете приспособить моё решение под свои нужды.
👉 @frontendInterview
Почти всегда в проекте существует задача смотреть на текущие сборки из неосновной ветки репозитория. В крупных проектах есть инженеры, которые занимаются такими задачами. А что, если вы один на проекте? А что, если вы работаете в опенсорс? А что, если у вас совсем маленькая команда и нет возможности нанимать инженеров с нужным опытом?
Есть несколько готовых сервисов. Если вы работаете над статическим сайтом, можно использовать GitHub Pages, Netlify или Surge. Но это не всегда удобно по целому ряду причин. А вот если есть свой выделенный сервер, возможности резко увеличиваются. Почему бы и не использовать уже имеющийся у вас ресурс?
Моё решение основано на использовании веб-сервера Nginx, зато кроме него ничего не понадобится. С другой стороны, вы всегда сможете приспособить моё решение под свои нужды.
👉 @frontendInterview
А о техническом долге я скажу…
Бывало у вас такое, что приходилось вставлять не самое лучшее решение в код, только чтоб успеть сдать задачу перед условной выставкой? Или идет работа над проектом в течение уже пары месяцев, а документация откладывается на потом, когда все устаканится? Поздравляю, вы “счастливый” обладатель технического долга. Не стоит расстраиваться, это часть жизни, которую следует принять и проработать как на сеансе у психолога для комфортной жизни в будущем.
👉 @frontendInterview
Бывало у вас такое, что приходилось вставлять не самое лучшее решение в код, только чтоб успеть сдать задачу перед условной выставкой? Или идет работа над проектом в течение уже пары месяцев, а документация откладывается на потом, когда все устаканится? Поздравляю, вы “счастливый” обладатель технического долга. Не стоит расстраиваться, это часть жизни, которую следует принять и проработать как на сеансе у психолога для комфортной жизни в будущем.
👉 @frontendInterview
❤4
Что такое "предварительный запрос" (Preflight Request) в контексте CORS?
Anonymous Quiz
75%
Запрос, отправляемый браузером перед основным, чтобы проверить разрешение кросс-доменного доступа
6%
Запрос, отправляемый сервером в ответ на основной запрос, чтобы подтвердить разрешение
16%
Запрос, отправляемый браузером, чтобы проверить доступность ресурса
2%
Запрос, отправляемый сервером, чтобы проверить авторизацию пользователя
Расскажите про приоритет селекторов
Приоритет селекторов (также известный как специфичность селекторов) определяет, какие стили будут применяться к элементу, если на него действуют несколько правил с различными селекторами. Специфичность основана на типах селекторов и их количественном присутствии в одном CSS-правиле.
Как она вычисляется?
Специфичность выражается четырьмя уровнями: A, B, C, D. Чем выше значения, тем более специфичный селектор.
A: Инлайновые стили (например,
B: Количество ID-селекторов в селекторе (например,
C: Количество классов, атрибутов и псевдоклассов (например,
D: Количество тегов и псевдоэлементов (например,
Рассмотрим несколько примеров и определим их специфичность:
1.
2.
3.
4.
Чем выше значения специфичности, тем выше приоритет стиля. Если два селектора имеют одинаковую специфичность, то стиль, который объявлен позже, будет применён.
Пример
В этом примере на
Поскольку
Почему это важно?
- Управление конфликтами стилей: Знание специфичности помогает правильно управлять стилями и избегать конфликтов.
- Чтение и поддержка кода: Более специфичные селекторы позволяют писать CSS, который легко поддерживать и расширять.
- Эффективность разработки: Понимание специфичности позволяет создавать более предсказуемый и стабильный код.
👉 @frontendInterview
Приоритет селекторов (также известный как специфичность селекторов) определяет, какие стили будут применяться к элементу, если на него действуют несколько правил с различными селекторами. Специфичность основана на типах селекторов и их количественном присутствии в одном CSS-правиле.
Как она вычисляется?
Специфичность выражается четырьмя уровнями: A, B, C, D. Чем выше значения, тем более специфичный селектор.
A: Инлайновые стили (например,
style="color: red;"
) имеют самую высокую специфичность.B: Количество ID-селекторов в селекторе (например,
#header
).C: Количество классов, атрибутов и псевдоклассов (например,
.class
, [type="text"]
, :hover
).D: Количество тегов и псевдоэлементов (например,
div
, h1
, ::before
).Рассмотрим несколько примеров и определим их специфичность:
1.
#main-content
— (0, 1, 0, 0)2.
.article p
— (0, 0, 1, 1)3.
header h1 span
— (0, 0, 0, 3)4.
div#main .content .text
— (0, 1, 2, 1)Чем выше значения специфичности, тем выше приоритет стиля. Если два селектора имеют одинаковую специфичность, то стиль, который объявлен позже, будет применён.
Пример
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Пример специфичности</title>
<style>
p {
color: black; /* (0, 0, 0, 1) */
}
.text {
color: blue; /* (0, 0, 1, 0) */
}
#highlight {
color: red; /* (0, 1, 0, 0) */
}
p#highlight {
color: green; /* (0, 1, 0, 1) */
}
</style>
</head>
<body>
<p class="text" id="highlight">Этот текст будет зелёным.</p>
</body>
</html>
В этом примере на
<p>
элемент действует несколько селекторов с разной специфичностью:p
имеет специфичность (0, 0, 0, 1).text
имеет специфичность (0, 0, 1, 0)#highlight
имеет специфичность (0, 1, 0, 0)p#highlight
имеет специфичность (0, 1, 0, 1)Поскольку
p#highlight
имеет наивысшую специфичность (0, 1, 0, 1), он применяет стиль цвета зелёный.Почему это важно?
- Управление конфликтами стилей: Знание специфичности помогает правильно управлять стилями и избегать конфликтов.
- Чтение и поддержка кода: Более специфичные селекторы позволяют писать CSS, который легко поддерживать и расширять.
- Эффективность разработки: Понимание специфичности позволяет создавать более предсказуемый и стабильный код.
👉 @frontendInterview
👍4
Шпаргалки для начинающего верстальщика HTML/CSS
Книга отлично подходит тем, кто только начинает учить верстку. Здесь вы найдете универсальный код и полезные советы, крутые эффективные ресурсы, применяя которые можно быстро и легко научиться верстать реальные проекты. Вы откроете новые фишки, лайфхаки для своей верстки...
👉 @frontendInterview
Книга отлично подходит тем, кто только начинает учить верстку. Здесь вы найдете универсальный код и полезные советы, крутые эффективные ресурсы, применяя которые можно быстро и легко научиться верстать реальные проекты. Вы откроете новые фишки, лайфхаки для своей верстки...
👉 @frontendInterview
Find the unique string
Есть массив строк. Все строки содержат одинаковые буквы, кроме одной. Попробуйте найти его!
Пример:
Строки могут содержать пробелы. Пробелы не имеют значения, имеют значение только символы, не являющиеся пробелами. Например, строка, содержащая только пробелы, аналогична пустой строке
Гарантируется, что массив содержит более двух строк
👉 @frontendInterview
Есть массив строк. Все строки содержат одинаковые буквы, кроме одной. Попробуйте найти его!
Пример:
findUniq([ 'Aa', 'aaa', 'aaaaa', 'BbBb', 'Aaaa', 'AaAaAa', 'a' ]) // => 'BbBb'
findUniq([ 'abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba' ]) // => 'foo'
Строки могут содержать пробелы. Пробелы не имеют значения, имеют значение только символы, не являющиеся пробелами. Например, строка, содержащая только пробелы, аналогична пустой строке
Гарантируется, что массив содержит более двух строк
👉 @frontendInterview
🤔2👍1
Как можно оптимизировать перерисовки ?
Оптимизация перерисовок (или "repaints" и "reflows") в веб-приложениях является важной задачей для обеспечения высокой производительности и плавности интерфейса. Вот несколько методов и стратегий, которые можно использовать для оптимизации перерисовок:
Используйте Document Fragments:
Вместо многократного добавления элементов в DOM, добавляйте их в
Избегайте синхронных изменений стилей и компоновки:
Вместо изменения нескольких отдельных стилей, измените один класс.
Вместо этого используйте класс:
Избегайте чтения свойств, вызывающих перерисовку:
Чтение некоторых свойств, таких как
CSS анимации и трансформации:
Используйте CSS для анимаций и трансформаций, так как они могут выполняться на уровне GPU, что снижает нагрузку на основной поток.
Debouncing и Throttling:
Используйте дебаунс и троттлинг для событий, которые происходят часто (например,
Использование библиотек с виртуальным DOM:
Библиотеки, такие как React, используют виртуальный DOM, чтобы минимизировать количество изменений в реальном DOM, что значительно улучшает производительность.
Избегайте использования layout thrashing
Это происходит, когда чередуются операции записи и чтения из DOM, что вызывает множественные перерисовки.
Сгруппируйте чтения и записи отдельно:
Избегайте глубоких вложенностей в DOM
Старайтесь минимизировать глубину вложенности элементов, так как это может усложнить перерисовку и компоновку.
Уменьшите количество правил и селекторов:
Сложные CSS-селекторы могут замедлить работу браузера. Используйте более простые селекторы и старайтесь избегать вложенных правил.
Использование will-change
Используйте свойство will-change, чтобы заранее сообщить браузеру о планируемых изменениях, что позволяет оптимизировать рендеринг.
👉 @frontendInterview
Оптимизация перерисовок (или "repaints" и "reflows") в веб-приложениях является важной задачей для обеспечения высокой производительности и плавности интерфейса. Вот несколько методов и стратегий, которые можно использовать для оптимизации перерисовок:
Используйте Document Fragments:
Вместо многократного добавления элементов в DOM, добавляйте их в
DocumentFragment
, а затем добавьте фрагмент в DOM одним действием.const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
const div = document.createElement('div');
div.textContent = `Item ${i}`;
fragment.appendChild(div);
}
document.body.appendChild(fragment);
Избегайте синхронных изменений стилей и компоновки:
Вместо изменения нескольких отдельных стилей, измените один класс.
element.style.width = '100px';
element.style.height = '100px';
element.style.backgroundColor = 'red';
Вместо этого используйте класс:
.new-style {
width: 100px;
height: 100px;
background-color: red;
}
Избегайте чтения свойств, вызывающих перерисовку:
Чтение некоторых свойств, таких как
offsetHeight
или offsetWidth
, после изменения стилей, заставляет браузер выполнять немедленную перерисовку. Избегайте таких действий.CSS анимации и трансформации:
Используйте CSS для анимаций и трансформаций, так как они могут выполняться на уровне GPU, что снижает нагрузку на основной поток.
.animated {
transition: transform 0.3s;
transform: translateX(100px);
}
Debouncing и Throttling:
Используйте дебаунс и троттлинг для событий, которые происходят часто (например,
resize
или scroll
), чтобы уменьшить количество вызовов обработчиков событий.function debounce(func, wait) {
let timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), wait);
};
}
window.addEventListener('resize', debounce(() => {
console.log('Resized!');
}, 200));
Использование библиотек с виртуальным DOM:
Библиотеки, такие как React, используют виртуальный DOM, чтобы минимизировать количество изменений в реальном DOM, что значительно улучшает производительность.
Избегайте использования layout thrashing
Это происходит, когда чередуются операции записи и чтения из DOM, что вызывает множественные перерисовки.
const height = element.offsetHeight;
element.style.height = out;
Сгруппируйте чтения и записи отдельно:
const height = element.offsetHeight;
element.style.height = ${height + 10}px;
Избегайте глубоких вложенностей в DOM
Старайтесь минимизировать глубину вложенности элементов, так как это может усложнить перерисовку и компоновку.
Уменьшите количество правил и селекторов:
Сложные CSS-селекторы могут замедлить работу браузера. Используйте более простые селекторы и старайтесь избегать вложенных правил.
Использование will-change
Используйте свойство will-change, чтобы заранее сообщить браузеру о планируемых изменениях, что позволяет оптимизировать рендеринг.
.will-change-transform {
will-change: transform;
}
👉 @frontendInterview
👍8
Какое максимальное одновременое количество значений может быть у свойства border-radius?
Anonymous Quiz
15%
1
6%
2
67%
4
13%
8
🤔13