По итогам первого полугодия 2025 г. компании предлагали ИТ-специалистам 96 тыс. руб. (медиана по стране в целом), и это на 10% больше, чем в аналогичный период прошлого года.
Наиболее востребованными в ИТ остаются программисты и разработчики, но их популярность постепенно снижается. Если в 2022 г. было зарегистрировано 102,8 тыс. вакансий для этой категории специалистов, то к 2025 г. их количество сократилось до 62,5 тыс.
На фоне общего падения числа ИТ-вакансий (-12%) и роста резюме (+14%) спрос на ключевые, но широко распространенные технологии резко снизился. По сравнению с 2024 годом, количество вакансий, упоминающих SQL, упало на 30% (до 18 тыс.), Linux — на 20% (до 14 тыс.), Python — на 21% (до 12 тыс.), PostgreSQL — на 20% (до 10 тыс.), а разработку технических заданий (ТЗ) — на 39% (до 8.8 тыс.).
Знания, которые еще недавно были конкурентным преимуществом, такие как Git или ООП, все чаще считаются элементарной «технической грамотностью» и даже не выносятся как отдельные требования в вакансиях.
Работодатели все чаще используют практические тесты, архитектурные кейсы, код-ревью и проблемные собеседования для объективной проверки. Сертификации, особенно по облачным платформам (AWS, Azure, GCP), Agile, DevOps, становятся критически важными, особенно в крупных ИТ-компаниях и финансовом секторе.
Портрет успешного кандидата на высокооплачиваемую позицию — это междисциплинарный специалист-лидер, сочетающий глубокую техническую экспертизу с сильными коммуникативными и управленческими навыками, пониманием полного цикла разработки и бизнес-контекста. Активность в Open Source, содержательное GitHub-портфолио, участие в профессиональных сообществах и менторство становятся серьезными конкурентными преимуществами.
https://www.cnews.ru/news/top/2025-07-24_headhunter_74_it-kompanij_ne
Наиболее востребованными в ИТ остаются программисты и разработчики, но их популярность постепенно снижается. Если в 2022 г. было зарегистрировано 102,8 тыс. вакансий для этой категории специалистов, то к 2025 г. их количество сократилось до 62,5 тыс.
На фоне общего падения числа ИТ-вакансий (-12%) и роста резюме (+14%) спрос на ключевые, но широко распространенные технологии резко снизился. По сравнению с 2024 годом, количество вакансий, упоминающих SQL, упало на 30% (до 18 тыс.), Linux — на 20% (до 14 тыс.), Python — на 21% (до 12 тыс.), PostgreSQL — на 20% (до 10 тыс.), а разработку технических заданий (ТЗ) — на 39% (до 8.8 тыс.).
Знания, которые еще недавно были конкурентным преимуществом, такие как Git или ООП, все чаще считаются элементарной «технической грамотностью» и даже не выносятся как отдельные требования в вакансиях.
Работодатели все чаще используют практические тесты, архитектурные кейсы, код-ревью и проблемные собеседования для объективной проверки. Сертификации, особенно по облачным платформам (AWS, Azure, GCP), Agile, DevOps, становятся критически важными, особенно в крупных ИТ-компаниях и финансовом секторе.
Портрет успешного кандидата на высокооплачиваемую позицию — это междисциплинарный специалист-лидер, сочетающий глубокую техническую экспертизу с сильными коммуникативными и управленческими навыками, пониманием полного цикла разработки и бизнес-контекста. Активность в Open Source, содержательное GitHub-портфолио, участие в профессиональных сообществах и менторство становятся серьезными конкурентными преимуществами.
https://www.cnews.ru/news/top/2025-07-24_headhunter_74_it-kompanij_ne
CNews.ru
Названы самые высокооплачиваемые ИТ-вакансии недели. Зарплата до полумиллиона - CNews
Аналитики HeadHunter представили CNews самые высокооплачиваемые ИТ-вакансии недели. По данным исследования, чтобы устроиться...
🤔13❤4💩4🤓3👎2🏆2
8 концепций проектирования систем (продолжение к предыдущему посту):
1. Доступность с балансировкой нагрузки (Availability with Load Balancers):
- Распределяет запросы между несколькими экземплярами сервисов, что повышает доступность системы.
2. Латентность с использованием CDN (Latency with CDNs):
- CDN (Content Delivery Network) сокращает время отклика, кэшируя контент ближе к пользователям.
3. Масштабируемость с репликацией (Scalability with Replication):
- Репликация данных позволяет системе масштабироваться, обеспечивая высокую производительность и доступность.
4. Устойчивость с использованием журналов транзакций (Durability with Transaction Logs):
- Журналы транзакций помогают восстановить состояние системы после сбоя.
5. Согласованность с конечной согласованностью (Consistency with Eventual Consistency):
- Система может достичь согласованности данных со временем, даже если данные временно несогласованы.
6. Модульность с ослабленным связыванием и высокой связностью (Modularity with Loose Coupling and High Cohesion):
- Модульность и ослабленное связывание улучшают гибкость и устойчивость системы.
7. Конфигурируемость с использованием кода конфигурации (Configurability with Configuration-as-Code):
- Конфигурация позволяет динамически управлять инфраструктурой и настройками системы.
8. Устойчивость с использованием очереди сообщений (Resiliency with Message Queue):
- Очередь сообщений помогает системе справляться с отказами и перегрузками, балансируя нагрузку между потребителями.
1. Доступность с балансировкой нагрузки (Availability with Load Balancers):
- Распределяет запросы между несколькими экземплярами сервисов, что повышает доступность системы.
2. Латентность с использованием CDN (Latency with CDNs):
- CDN (Content Delivery Network) сокращает время отклика, кэшируя контент ближе к пользователям.
3. Масштабируемость с репликацией (Scalability with Replication):
- Репликация данных позволяет системе масштабироваться, обеспечивая высокую производительность и доступность.
4. Устойчивость с использованием журналов транзакций (Durability with Transaction Logs):
- Журналы транзакций помогают восстановить состояние системы после сбоя.
5. Согласованность с конечной согласованностью (Consistency with Eventual Consistency):
- Система может достичь согласованности данных со временем, даже если данные временно несогласованы.
6. Модульность с ослабленным связыванием и высокой связностью (Modularity with Loose Coupling and High Cohesion):
- Модульность и ослабленное связывание улучшают гибкость и устойчивость системы.
7. Конфигурируемость с использованием кода конфигурации (Configurability with Configuration-as-Code):
- Конфигурация позволяет динамически управлять инфраструктурой и настройками системы.
8. Устойчивость с использованием очереди сообщений (Resiliency with Message Queue):
- Очередь сообщений помогает системе справляться с отказами и перегрузками, балансируя нагрузку между потребителями.
🔥4❤1
Основные типы кибератак (описание инфографики из предыдущего поста):
- Фишинг:
- Китовый фишинг (Whale Phishing) — нацелен на высокопоставленных лиц
- Целевая атака (Spear Attack) — направлена на конкретных пользователей
- Фарминг (Pharming) — перенаправление пользователей на поддельные сайты
- SQL-инъекции:
- Атака, связанная с внедрением вредоносного кода в запросы к базе данных
- Межсайтовый скриптинг (XSS):
- Использование уязвимостей веб-приложений для внедрения вредоносного кода
- Атака «человек посередине» (Man-in-the-Middle):
- Перехват и изменение данных между двумя сторонами
- Включает:
- Перехват сессии (Session Hijacking)
- Спуфинг IP (IP Spoofing)
- Атака воспроизведения (Replay)
- DDoS:
- Направлена на перегрузку серверов или сетей, чтобы сделать их недоступными
- Атаки на пароли:
- Подбирают пароли методом перебора (Brute Force Guessing) или используют словари (Dictionary Attack)
- Атака на устройства:
- Автоматическое заражение устройства при посещении вредоносного сайта
- Ransomware:
- Заражение системы вредоносным ПО, которое блокирует доступ к данным и требует выкуп
- Атака прослушивания (Eavesdropping):
- Перехват данных, передаваемых по сети
- Атаки, управляемые ИИ (AI-Powered Attacks):
- Используют ИИ для автоматизации и усложнения атак
- Фишинг:
- Китовый фишинг (Whale Phishing) — нацелен на высокопоставленных лиц
- Целевая атака (Spear Attack) — направлена на конкретных пользователей
- Фарминг (Pharming) — перенаправление пользователей на поддельные сайты
- SQL-инъекции:
- Атака, связанная с внедрением вредоносного кода в запросы к базе данных
- Межсайтовый скриптинг (XSS):
- Использование уязвимостей веб-приложений для внедрения вредоносного кода
- Атака «человек посередине» (Man-in-the-Middle):
- Перехват и изменение данных между двумя сторонами
- Включает:
- Перехват сессии (Session Hijacking)
- Спуфинг IP (IP Spoofing)
- Атака воспроизведения (Replay)
- DDoS:
- Направлена на перегрузку серверов или сетей, чтобы сделать их недоступными
- Атаки на пароли:
- Подбирают пароли методом перебора (Brute Force Guessing) или используют словари (Dictionary Attack)
- Атака на устройства:
- Автоматическое заражение устройства при посещении вредоносного сайта
- Ransomware:
- Заражение системы вредоносным ПО, которое блокирует доступ к данным и требует выкуп
- Атака прослушивания (Eavesdropping):
- Перехват данных, передаваемых по сети
- Атаки, управляемые ИИ (AI-Powered Attacks):
- Используют ИИ для автоматизации и усложнения атак
❤12🔥2👏1
Различные алгоритмы и структуры данных, которые часто используются в интервью по программированию (описание к предыдущему посту):
1. Clone: Этот паттерн используется для создания точной копии графа. На изображении показано, как оригинальный граф преобразуется в клонированный граф с новыми узлами.
2. Serialize and Deserialize: Этот паттерн позволяет преобразовать структуру данных в последовательность байтов (сериализация) и восстановить её обратно (десериализация). На изображении показан пример сериализации и десериализации дерева.
3. Monotonic Queue: Используется для эффективного поиска минимального или максимального значения в скользящем окне. На изображении показаны гистограммы, иллюстрирующие работу очереди.
4. Segment Tree: Это структура данных, которая позволяет эффективно выполнять запросы на отрезках массива. На изображении показана структура дерева и его узлы.
5. Binary Index Tree: Также известная как дерево Фенвика, используется для эффективного вычисления префиксных сумм. На изображении показан пример дерева.
6. Meet in the Middle: Этот паттерн применяется для оптимизации поиска в больших наборах данных. На изображении показан процесс разделения и объединения данных.
7. Counting: Используется для подсчёта частоты элементов в массиве. На изображении представлена таблица, где ключи — это элементы массива, а значения — их частота.
8. Linear Sorting: Это алгоритмы сортировки, такие как сортировка подсчётом. На изображении показан процесс сортировки массива.
9. Simulation: Используется для моделирования различных процессов, таких как движение объектов. На изображении показаны координаты и направления движения.
1. Clone: Этот паттерн используется для создания точной копии графа. На изображении показано, как оригинальный граф преобразуется в клонированный граф с новыми узлами.
2. Serialize and Deserialize: Этот паттерн позволяет преобразовать структуру данных в последовательность байтов (сериализация) и восстановить её обратно (десериализация). На изображении показан пример сериализации и десериализации дерева.
3. Monotonic Queue: Используется для эффективного поиска минимального или максимального значения в скользящем окне. На изображении показаны гистограммы, иллюстрирующие работу очереди.
4. Segment Tree: Это структура данных, которая позволяет эффективно выполнять запросы на отрезках массива. На изображении показана структура дерева и его узлы.
5. Binary Index Tree: Также известная как дерево Фенвика, используется для эффективного вычисления префиксных сумм. На изображении показан пример дерева.
6. Meet in the Middle: Этот паттерн применяется для оптимизации поиска в больших наборах данных. На изображении показан процесс разделения и объединения данных.
7. Counting: Используется для подсчёта частоты элементов в массиве. На изображении представлена таблица, где ключи — это элементы массива, а значения — их частота.
8. Linear Sorting: Это алгоритмы сортировки, такие как сортировка подсчётом. На изображении показан процесс сортировки массива.
9. Simulation: Используется для моделирования различных процессов, таких как движение объектов. На изображении показаны координаты и направления движения.
👍12🎄3👏1
Почему Redis такой быстрый
🔹 Хранение в оперативной памяти
Redis хранит данные в RAM, где время доступа измеряется в наносекундах, а не в миллисекундах
🔹 Однопоточный цикл событий
Redis обрабатывает команды в одном потоке, позволяя избежать блокировок, гонок за ресурсы и переключений контекста. Благодаря мультиплексированию ввода-вывода он эффективно обрабатывает тысячи одновременных подключений с помощью цикла событий
🔹 Оптимизированные структуры данных
Redis использует специальные реализации списков, множеств и хэшей, оптимизированных как для производительности, так и для эффективного использования памяти
🔹 Эффективность ввода-вывода
Redis применяет легковесный текстовый протокол RESP для обработки сетевого ввода-вывода и поддерживает конвейерную обработку, позволяя отправлять несколько команд в одном запросе
🔹 Серверный скриптинг
Механизм скриптов Lua в Redis позволяет выполнять сложные многоэтапные операции атомарно на сервере, исключая необходимость в сетевых обращениях туда-обратно
🔹 Хранение в оперативной памяти
Redis хранит данные в RAM, где время доступа измеряется в наносекундах, а не в миллисекундах
🔹 Однопоточный цикл событий
Redis обрабатывает команды в одном потоке, позволяя избежать блокировок, гонок за ресурсы и переключений контекста. Благодаря мультиплексированию ввода-вывода он эффективно обрабатывает тысячи одновременных подключений с помощью цикла событий
🔹 Оптимизированные структуры данных
Redis использует специальные реализации списков, множеств и хэшей, оптимизированных как для производительности, так и для эффективного использования памяти
🔹 Эффективность ввода-вывода
Redis применяет легковесный текстовый протокол RESP для обработки сетевого ввода-вывода и поддерживает конвейерную обработку, позволяя отправлять несколько команд в одном запросе
🔹 Серверный скриптинг
Механизм скриптов Lua в Redis позволяет выполнять сложные многоэтапные операции атомарно на сервере, исключая необходимость в сетевых обращениях туда-обратно
❤10
Рекомендации по написанию модульного кода (продолжение к предыдущему посту)
Написание модульного кода — это не просто способ получить чистый код, это значительно упрощает совместную работу и масштабирование.
1) Дизайн
* Единственная ответственность
Каждый модуль/класс/функция должен выполнять только одну задачу. Это основа принципа единственной ответственности (SRP), одного из столпов SOLID-дизайна.
* Слабая связанность
Модули должны иметь минимальные зависимости. Это обеспечивает более простое повторное использование и снижает затраты на поддержку.
* Высокая связность
Связанная функциональность должна быть сгруппирована вместе для лучшей ясности и удобства поддержки.
2) Структура
* Небольшие функции
Функции должны выполнять одну задачу и делать это хорошо. Это улучшает читаемость и тестируемость.
* Четкие интерфейсы
Хорошо определенные API/интерфейсы обеспечивают простую интеграцию и замену.
* Согласованное именование
Использование согласованных, описательных имен помогает другим разработчикам быстро понимать код.
3) Повторное использование
* Библиотеки
Общая функциональность должна быть вынесена в библиотеки/модули.
* Универсальный код
Используйте параметризацию/обобщения/шаблоны там, где это уместно, чтобы максимально повысить возможность повторного использования.
* Конфигурация
Избегайте жесткого кодирования значений, используйте конфигурации для гибкости.
4) Тестирование
* Юнит-тесты
Необходимы для проверки небольших изолированных частей кода.
* Мокирование
Облегчает тестирование в изоляции, независимо от зависимостей.
* Покрытие
Стремитесь к высокому покрытию тестами для обеспечения надежности.
5) Документация
* Комментарии
Объясняйте, почему (а не только что) в коде.
* Readme
Каждый модуль/библиотека должен иметь четкие инструкции по использованию.
* Примеры
Примеры использования чрезвычайно полезны для адаптации и внедрения.
6) Поддерживаемость
* Регулярный рефакторинг
Устраняйте технический долг до того, как он вырастет.
* Код-ревью
Рецензии коллег помогают выявить проблемы и распространить знания.
* Следование стандартам
Согласованность (через руководства по стилю кода и соглашения) предотвращает путаницу.
Написание модульного кода — это не просто способ получить чистый код, это значительно упрощает совместную работу и масштабирование.
1) Дизайн
* Единственная ответственность
Каждый модуль/класс/функция должен выполнять только одну задачу. Это основа принципа единственной ответственности (SRP), одного из столпов SOLID-дизайна.
* Слабая связанность
Модули должны иметь минимальные зависимости. Это обеспечивает более простое повторное использование и снижает затраты на поддержку.
* Высокая связность
Связанная функциональность должна быть сгруппирована вместе для лучшей ясности и удобства поддержки.
2) Структура
* Небольшие функции
Функции должны выполнять одну задачу и делать это хорошо. Это улучшает читаемость и тестируемость.
* Четкие интерфейсы
Хорошо определенные API/интерфейсы обеспечивают простую интеграцию и замену.
* Согласованное именование
Использование согласованных, описательных имен помогает другим разработчикам быстро понимать код.
3) Повторное использование
* Библиотеки
Общая функциональность должна быть вынесена в библиотеки/модули.
* Универсальный код
Используйте параметризацию/обобщения/шаблоны там, где это уместно, чтобы максимально повысить возможность повторного использования.
* Конфигурация
Избегайте жесткого кодирования значений, используйте конфигурации для гибкости.
4) Тестирование
* Юнит-тесты
Необходимы для проверки небольших изолированных частей кода.
* Мокирование
Облегчает тестирование в изоляции, независимо от зависимостей.
* Покрытие
Стремитесь к высокому покрытию тестами для обеспечения надежности.
5) Документация
* Комментарии
Объясняйте, почему (а не только что) в коде.
* Readme
Каждый модуль/библиотека должен иметь четкие инструкции по использованию.
* Примеры
Примеры использования чрезвычайно полезны для адаптации и внедрения.
6) Поддерживаемость
* Регулярный рефакторинг
Устраняйте технический долг до того, как он вырастет.
* Код-ревью
Рецензии коллег помогают выявить проблемы и распространить знания.
* Следование стандартам
Согласованность (через руководства по стилю кода и соглашения) предотвращает путаницу.
👍16😢2👏1