METANIT.COM
6.24K subscribers
1.79K photos
86 videos
10 files
1.26K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
- Независимость шардов: каждый шард работает автономно, запросы к одному шарду не влияют на производительность других.
- Распределение нагрузки: данные распределены между серверами, что снижает нагрузку на отдельные серверы и ускоряет обработку запросов.
- Масштабируемость: горизонтальное масштабирование позволяет добавлять новые шарды по мере роста объёма данных.
- Высокая доступность: сбой одного шарда не приводит к потере всей базы данных — недоступны будут только данные этого шарда.
👍63🔥2
Распространенные команды для анализа логов на Linux
👍9💯42🤔2🌚1
Роб Пайк (один из ключевых создателей языка Go, один из разработчиков Unix, в частности, создал первую граф. систему окон для Unix) в своём канале в bluesky в ответ на сообщение, отправленное от лица LLM-модели Claude Opus, эмоционально выразил своё отношение к ИИ и их роли в современной мире:

«Идите [к чёрту], ребята. Вы насилуете нашу планету, тратите триллионы на токсичное, неперерабатываемое оборудование, разрушая при этом основы общества, но ещё находите время, чтобы заставить свои злобные машины поблагодарить меня за моё стремление к более простым программам.

И к тому же вы обучаете вашего монстра на данных, которые произвёл в том числе и я, своими руками, без отсылки или компенсации.

Просто валите [к чёрту]. Проваливайте все.

Не помню, когда я последний раз был так зол.

У всех остальных же я прошу прощения за своё, пусть ненамеренное и скорее незначительное, участие в реализации этого насилия против человечества.»

https://bsky.app/profile/robpike.io/post/3matwg6w3ic2s
👏579👍8🤔2
Как работает NAT (Network Address Translation)
(продолжение в следующем посте)
4🔥3🫡2
Как работает NAT (Network Address Translation)
(продолжение предыдущего поста)

1. Основная задача NAT

NAT — это технология, позволяющая нескольким устройствам в локальной сети (LAN) использовать один публичный IP-адрес. Это достигается путём изменения IP-адресов в заголовках пакетов данных при их передаче через маршрутизатор (NAT-шлюз).

2. Компоненты, показанные на изображении

На схеме представлены:
* Локальные устройства с частными IP-адресами (например, 192.168.0.13, 192.168.0.25, 192.168.0.30) — устройства внутри локальной сети.
* NAT-шлюз (роутер) — устройство, выполняющее преобразование адресов. Ему присвоен публичный IP-адрес (184.28.207.5).
* Публичный IP-адрес (184.28.207.5) — адрес, видимый в интернете.
* Таблица NAT — хранит соответствие между частными IP-адресами и портами локальных устройств и преобразованными публичными адресами и портами.
* Внешний ресурс (например, DNS-сервер 8.8.8.8) — цель запроса из локальной сети.

3. Процесс работы NAT по шагам

Шаг 1. Исходный пакет (до трансляции)

Когда устройство в локальной сети (например, с IP 192.168.0.13) отправляет запрос в интернет (например, к DNS-серверу 8.8.8.8:53), пакет имеет:
* Source IP & Port (исходный IP и порт): 192.168.0.13:1000 (локальный адрес и порт устройства).
* Destination IP & Port (целевой IP и порт): 8.8.8.8:53 (адрес и порт сервера в интернете).

Шаг 2. Преобразование адреса NAT-шлюзом

NAT-шлюз перехватывает пакет и изменяет его заголовки:
* Заменяет локальный IP-адрес (192.168.0.13) на свой публичный IP-адрес (184.28.207.5).
* Заменяет локальный порт (1000) на уникальный публичный порт (например, 10000), чтобы различать соединения от разных устройств.
* Сохраняет соответствие «локальный IP:порт → публичный IP:порт» в таблице NAT.

Шаг 3. Пакет после трансляции

После преобразования пакет выглядит так:
* Source IP & Port: 184.28.207.5:10000 (публичный IP и порт NAT-шлюза).
* Destination IP & Port: 8.8.8.8:53 (не изменяется — это адрес цели).

Шаг 4. Ответ от сервера

Когда сервер (8.8.8.8) отвечает, он отправляет данные на публичный IP и порт (184.28.207.5:10000).

Шаг 5. Обратная трансляция

NAT-шлюз:
* Проверяет таблицу NAT и находит запись: «184.28.207.5:10000192.168.0.13:1000».
* Преобразует публичный IP и порт обратно в локальные.
* Передаёт ответ устройству с IP 192.168.0.13.

4. Таблица NAT

Таблица NAT хранит соответствия для всех активных соединений, например:
* 192.168.0.13:1000 ↔️ 184.28.207.5:10000;
* 192.168.0.25:2000 ↔️ 184.28.207.5:20000;
* 192.168.0.30:3000 ↔️ 184.28.207.5:30000.

5. Итог

Благодаря NAT:
* Несколько устройств используют один публичный IP-адрес.
* Локальные IP-адреса скрыты от интернета — это повышает безопасность сети.
* Маршрутизатор управляет трафиком, преобразуя адреса «на лету».

Таким образом, NAT обеспечивает экономию IP-адресов и защиту локальной сети.
👍95🔥2💋2😱1
Расспространенные алгоритмы криптографии/шифрования

Hashing Algorithms (используются для контрольных сумм, обеспечения целостности данных и хранения паролей):
1. MD5 — быстрая функция хеширования, но небезопасна из-за коллизий.
2. SHA-1 — более безопасна, чем MD5, но сейчас взломана (не использовать в новых системах).
3. SHA-256 — часть семейства SHA-2, широко используется и безопасна.
4. SHA-512 — более длинная версия SHA-256, обеспечивает повышенную безопасность.
5. BLAKE2 — быстрее и безопаснее SHA-2, современная альтернатива.
6. RIPEMD-160 — альтернатива SHA, используется для генерации адресов в Bitcoin.
7. CRC32 — лёгкий алгоритм хеширования для обнаружения ошибок, но не криптографически безопасен.

Алгоритмы хеширования паролей и вывода ключей (используются для безопасного хранения или получения ключей из паролей):
8. bcrypt — алгоритм хеширования паролей, специально замедленный для защиты от перебора.
9. scrypt — хеширование паролей с высокой нагрузкой на память, лучше защищён от ASIC-устройств по сравнению с bcrypt.
10. Argon2 — современный рекомендуемый стандарт хеширования паролей (победитель конкурса PHC).
11. PBKDF2 — итеративная функция вывода ключей, используется во многих защищённых системах.
12. HKDF — функция вывода ключей на основе HMAC, используется в TLS, Signal.

Алгоритмы симметричного шифрования (один и тот же ключ используется для шифрования и дешифрования):
13. AES (Advanced Encryption Standard) — промышленный стандарт симметричного шифрования (128, 192, 256 бит).
14. ChaCha20 — быстрый и безопасный потоковый шифр, используется в мобильных и ограниченных устройствах.
15. 3DES — тройной стандарт шифрования данных, устарел и небезопасен.
16. Blowfish — блочный шифр старого образца, заменён более безопасными вариантами, такими как AES.
17. Twofish — преемник Blowfish, был кандидатом на роль AES, но не был выбран.
18. RC4 — небезопасный потоковый шифр, не использовать в новых системах.

Алгоритмы асимметричного (с открытым ключом) шифрования (используют пару открытый/закрытый ключ для шифрования и дешифрования):
19. RSA — классический алгоритм шифрования с открытым ключом, широко используется в TLS и для подписей.
20. DSA (Digital Signature Algorithm) — алгоритм цифровой подписи, в основном заменён более новыми вариантами.
21. Diffie-Hellman — алгоритм обмена ключами, позволяет обмениваться секретами без их раскрытия.
22. Elliptic Curve Cryptography (ECC) — более безопасен при использовании меньших ключей, применяется в современных системах.
23. Ed25519 — высокопроизводительный алгоритм цифровых подписей на эллиптических кривых.
24. ECDSA — вариант DSA на эллиптических кривых, используется в Bitcoin, Ethereum и TLS.
25. X25519 — быстрый алгоритм обмена ключами Diffie-Hellman на эллиптических кривых.

Цифровые подписи и обеспечение целостности:
26. HMAC (Hash-based Message Authentication Code) — объединяет хеш с секретным ключом для обеспечения целостности.
27. RSA Signatures — подписывание данных с помощью закрытого ключа, чтобы другие могли проверить с помощью открытого ключа.
28. EdDSA — схема подписи, использующая скрученные кривые Эдвардса (например, Ed25519).
29. MAC (Message Authentication Code) — подтверждает, что данные не были изменены, аналогично HMAC.

Режимы работы (для блочных шифров, таких как AES) (определяют, как блочные шифры обрабатывают данные, превышающие размер блока):
30. ECB (Electronic Codebook) — небезопасен; одинаковые блоки открытого текста дают одинаковый шифротекст.
31. CBC (Cipher Block Chaining) — использует вектор инициализации (IV) для добавления случайности к блокам.
32. CTR (Counter Mode) — преобразует блочный шифр в потоковый шифр.
33. GCM (Galois/Counter Mode) — режим AES с встроенной аутентификацией (используется в TLS).
34. CFB (Cipher Feedback Mode) — преобразует блочный шифр в самосинхронизирующийся потоковый шифр.
35. OFB (Output Feedback Mode) — преобразует блочный шифр в синхронный потоковый шифр.
👍24🔥85
Масштабирование чтения и записи в веб-приложении
(продолжение в следующем посте)
Масштабирование чтения и записи в веб-приложении
(продолжение предыдущего поста)

Масштабирование операций чтения и записи являются частыми задачами в веб-приложении по мере увеличения нагрузки. Рассмотрим распространенные стратегии масштабирования операций чтения и записи.

1) Стратегии масштабирования чтений (проще)

Цель: Эффективно обрабатывать большой объём запросов на чтение.

Внутренний кэш (уровень приложения)
* кэш в оперативной памяти (например, локальный словарь, кэш LRU внутри экземпляра приложения);
* предотвращает повторные вычисления, но не распределяется между экземплярами.

Кэш в оперативной памяти (Redis, Memcached)
* хранит часто запрашиваемые данные в ОЗУ для сверхбыстрого доступа;
* сокращает количество запросов к базе данных, улучшая время отклика;
* оптимален для нагрузок с большим объёмом чтений (например, пользовательские сессии, предварительно вычисленные данные).

Копии для чтения (Read Replicas)
* множественные копии основной базы данных обрабатывают запросы на чтение;
* распределяет нагрузку от чтения по нескольким узлам;
* подходит для аналитических панелей и приложений с большим объёмом контента.

Сеть доставки контента (CDN — Content Delivery Network)
* кэширует статические ресурсы (изображения, видео, HTML) на периферийных узлах;
* сокращает задержки за счёт предоставления данных с ближайшего узла.

2) Стратегии масштабирования записей (сложнее)

Цель: Распределить нагрузку от записи и сохранить согласованность данных.

Шардинг (сегментация)
* разделяет данные по нескольким базам данных на основе ключа (например, ID пользователя);
* предотвращает перегрузку одной базы данных;
* требует тщательного проектирования запросов, чтобы избежать обращений к нескольким сегментам.

CQRS (разделение ответственности за команды и запросы — Command Query Responsibility Segregation)
* разделяет модели чтения и записи по разным базам данных или сервисам;
* позволяет оптимизировать нагрузки с большим объёмом записи и чтения отдельно.

Архитектура, управляемая событиями (Event-Driven Architecture)
* вместо прямых записей в БД публикуются события, которые обрабатываются асинхронно;
* помогает разделить сервисы и распределить нагрузку от записи;
* пример: сервис заказов отправляет событие «Заказ создан» → сервис инвентаризации асинхронно обновляет остатки.

Базы данных, оптимизированные для записи (Write-Optimized Databases)
* используют механизмы хранения с логической структурой (например, LSM-деревья в Cassandra, RocksDB) для нагрузок с большим объёмом записи;
* полезны в случаях высокочастотных операций (например, торговые системы, системы журналирования).

Что в итоге:
* Масштабирование чтений проще добавить позже.
* Масштабирование записей нужно проектировать на раннем этапе, чтобы избежать сложностей с рефакторингом.
8👍3🔥2
Жизненный цикл разработки программного обеспечения
(продолжение в следующем посте)
👍42🤝2👎1
Жизненный цикл разработки программного обеспечения
(продолжение предыдущего поста)

Жизненный цикл разработки ПО включает несколько моделей, каждая из которых предлагает свой подход к этапам создания продукта. Каждая модель жизненного цикла разработки ПО имеет свои преимущества и недостатки, выбор зависит от:
* сложности и масштаба проекта;
* гибкости требований;
* сроков разработки;
* вовлечённости заказчика;
* доступных ресурсов.

Рассмотрим основные модели:

1. Waterfall (Каскадная модель):
* Последовательность этапов: анализ → проектирование (design) → разработка (build) → тестирование (test) → развёртывание (deploy).
* Особенности: строгая последовательность, переход к следующему этапу только после завершения предыдущего. Подходит для проектов с чётко определёнными требованиями (например, электронная коммерция).
* Итог: структурированный и предсказуемый процесс, но менее гибкий к изменениям.

2. Spiral (Спиральная модель):
* Структура: комбинация каскадного и итеративного подходов. Этапы повторяются в виде спирали: оценка → планирование → разработка → тестирование.
* Ключевые элементы: оценка рисков, поэтапная разработка, тестирование на каждом витке спирали.
* Применение: проекты с высоким уровнем неопределённости и риска, длительные циклы разработки.
* Итог: баланс между гибкостью и контролем рисков.

3. Agile (Гибкая модель):
* Основа: итеративные циклы (спринты), быстрая адаптация к изменениям.
* Этапы: серия спринтов, в каждом из которых разрабатывается часть функционала.
* Фокус: сотрудничество с клиентом, быстрая обратная связь, поэтапная поставка рабочих версий ПО.
* Применение: динамичные рынки, стартапы, проекты с неясными требованиями.
* Итог: высокая адаптивность, но требует активного участия заказчика.

4. Iterative (Итеративная модель):
* Принцип: разработка через последовательные итерации (циклы), каждая из которых улучшает предыдущий прототип.
* Этапы: требования → анализ → проектирование → тестирование → реализация → обзор → повтор.
* Применение: сложные проекты, где конечная цель не определена чётко.
* Итог: постепенное приближение к финальному продукту с учётом обратной связи.

5. V-Model (V-образная модель):
* Структура: усовершенствованная каскадная модель с акцентом на тестирование. Этапы разработки «зеркальны» этапам тестирования.
* Этапы разработки: бизнес-требования → системные требования → высокоуровневый дизайн → низкоуровневый дизайн → кодирование.
* Этапы тестирования: приёмочное тестирование → системная интеграция → компонентное тестирование → модульное тестирование.
* Применение: проекты с жёсткими требованиями к качеству (аэрокосмическая отрасль, здравоохранение).
* Итог: тщательная проверка на каждом этапе, минимизация ошибок.

6. Incremental (Инкрементальная модель):
* Принцип: разработка ПО частями (инкрементами), каждый из которых добавляет новый функционал.
* Этапы: анализ → проектирование → кодирование → тестирование → развёртывание (повторяется для каждого инкремента).
* Применение: проекты с ограниченными ресурсами, когда нужно быстро предоставить рабочую версию ПО.
* Итог: поэтапная поставка функционала, гибкость в управлении требованиями.

7. Big Bang (Модель «Большого взрыва»):
* Суть: отсутствие чёткого планирования, разработка начинается с накопления ресурсов и идей, затем происходит «взрыв» активности.
* Этапы: накопление ресурсов → разработка → тестирование → продукт.
* Применение: небольшие проекты с креативным подходом, когда требования не определены заранее.
* Риски: высокий риск срыва сроков и бюджета из-за отсутствия структуры.
9🤷‍♂1🤮1
8. RAD (Rapid Application Development — быстрая разработка приложений):
* Основа: итеративный и инкрементальный подход с акцентом на быстрое создание прототипов.
* Этапы: анализ и быстрый дизайн → разработка прототипа → демонстрация → доработка → тестирование → развёртывание.
* Применение: проекты с быстро меняющимися требованиями, необходимость быстрого выхода на рынок.
* Итог: ускоренная разработка за счёт активного вовлечения заказчика и использования прототипов.
2👍2💯2🤷‍♂1
This media is not supported in your browser
VIEW IN TELEGRAM
Наглядно, что такое интеграл
👍21🤓13🆒63
Выполнение программы
(продолжение в следующем посте)
❤‍🔥4👍2🤝2
Выполнение программы
(продолжение предыдущего поста)

Программа проходит путь от исходного кода до исполняемого файла, загружается в память, взаимодействует с ОС через системные вызовы, использует ресурсы компьютера (CPU, память, устройства) и завершается с очисткой всех задействованных ресурсов. Рассмотрим пошагово.

1. Компиляция и загрузка программы (Program Compilation and Loading)

- Исходный код (например, Enter.c) передаётся компилятору.
- Компилятор преобразует исходный код в объектный файл (Enter.obj), проверяя синтаксис и семантику.
- Используются библиотеки (например, cw32.lib), из которых извлекаются необходимые функции (например, sprintf()).
- Происходит статическая компоновка — связывание объектного файла с библиотеками для создания промежуточного кода.
- Далее подключается динамическая компоновка — связывание с динамическими библиотеками (user32.dll и др.), используемыми для функций вроде MessageBox().
- В итоге формируется исполняемый файл (Enter.exe), готовый к запуску.

2. Взаимодействие пользователя и распределение памяти (User Interaction and Memory Allocation)

- Пользователь запускает программу через графический интерфейс (например, клик по иконке).
- Операционная система (ОС) получает запрос и инициирует загрузку исполняемого файла.
- ОС выделяет память для программы, используя структуру памяти:
- Memory pool (пул памяти) — общее пространство для распределения.
- Stack (стек) — для хранения локальных переменных и вызовов функций.
- Heap (куча) — для динамического выделения памяти (malloc, free).
- Сегменты: BSS (неинициализированные данные), Data (инициализированные данные), Code (исполняемый код).
- Программа загружается в выделенную область памяти.

3. Системные вызовы (System Calls)

- Программа взаимодействует с ОС через системные вызовы (system call), которые обеспечивают доступ к ресурсам (файлам, сети, устройствам).
- Процесс вызова:
1. Программа делает системный вызов (например, открытие файла).
2. Управление передаётся ядру ОС (kernel model), которое проверяет права доступа и параметры вызова.
3. Ядро выполняет операцию через сервисные программы (например, чтение данных с диска).
4. Результат возвращается программе, которая продолжает выполнение.
- Таблица системных вызовов (Sys_call_table) хранит адреса функций ядра.

4. Состояние ЦП и структура памяти (CPU Status and Memory Structure)

- Программа выполняется на центральном процессоре (CPU), который работает в двух режимах:
- Пользовательский режим (user model) — выполнение прикладного кода.
- Режим ядра (kernel model) — выполнение системных вызовов и привилегированных операций.
- Кэширование: CPU использует кэши (L1, L2, L3) для ускорения доступа к данным.
- RAM хранит исполняемый код и данные программы во время работы.
- Регистры программ (Program register) сохраняют состояние выполнения (адрес следующей инструкции).

5. Архитектура фон Неймана (Von Neumann Architecture)

- Программа и данные хранятся в единой памяти (принцип фон Неймана).
- Центральный процессор (CPU) состоит из:
- Control Unit (CU) — управляет выполнением инструкций.
- Arithmetic/Logic Unit (ALU) — выполняет арифметические и логические операции.
- Данные поступают с устройств ввода (Input Device), обрабатываются процессором и выводятся на устройства вывода (Output Device).
- Memory Unit хранит промежуточные результаты и инструкции.

6. Завершение программы и освобождение ресурсов (Program Termination and Resource Recovery)

- Программа завершается по команде exit() или по инициативе пользователя.
- ОС выполняет очистку ресурсов:
- Освобождение файловых ресурсов (закрытие дескрипторов файлов).
- Освобождение сетевых ресурсов (разрыв соединений).
- Возврат памяти (освобождение стека, кучи, сегментов).
- Все ресурсы возвращаются в пул ОС, программа завершается, и её состояние удаляется из памяти.
🔥8❤‍🔥54
В Думу внесли законопроект о подтверждении для сайтов значимых действий

Правительство внесло в Госдуму законопроект № 1110676-8, который с 1 сентября 2026 года вводит для российских сайтов обязательное подтверждение значимых действий в интернете кодами из СМС и одновременно сообщениями с использованием мессенджера Max. Перечень таких действий утвердит правительство.
В банковской и иных сферах финансового рынка перечень значимых действий будет дополнительно согласовываться с Банком России.
https://www.interfax.ru/russia/1065345
🤡37👎3💊2🤷2🖕1
Спрос на ИИ-специалистов в России растет быстрее предложения. Опубликовано почти 200 тысяч вакансий

Потребность российской экономики в кадрах в сфере искусственного интеллекта в 2025 г. увеличилась примерно на 18% по сравнению с 2024 г. За год на российских рекрутинговых ИТ-платформах было опубликовано почти 200 тыс. вакансий для специалистов, а в 2024 г. их было около 170 тыс. К кадрам по искусственному интеллекту работодатели относит ИТ-инженеров, ИТ-разработчиков, системных архитекторов и аналитиков и иных инженерно-научных и прикладных специалистов, которые создают и интегрируют ИТ-решения на основе этой технологии.

Число таких вакансий растет в среднем на 5 под пункта быстрее, чем количество ИИ-специалистов с нужными компетенциями. По примерным оценкам J’son Partners Consulting, сейчас в России 100 тыс. - 120 тыс. ИИ-кадров (+15% к 2024 г., следует из аналитики компании), из которых обучением моделей занимается около 1 тыс.-3 тыс. инженеров в сфере Machine Learning (ML), остальное приходится на специалистов по данным т.е. data science.

Согласно совместному исследованию HeadHunter и Skillaz, с 2022 г. спрос на специалистов данного профиля вырос в два раза. Абсолютные значения количества вакансий и резюме в исследовании не раскрываются.

https://www.cnews.ru/news/top/2025-12-30_v_2025_godu_spros_na_ii-spetsialistov
🤔11🤡9😁5👍32🕊1
В 2025 году произошло множество значимых событий в мире программирования. Помянем основные из них:

### Укрепление позиций Rust
На конференции Maintainers Summit в декабре 2025 года разработчики ядра Linux решили перевести поддержку языка Rust из экспериментального статуса в категорию основных возможностей. Эксперимент по добавлению в ядро возможности разработки компонентов на Rust начался три года назад с версии 6.1.
За это время в состав ядра были включены абстракции для разработки на Rust драйверов для GPU, файловых систем, блочных устройств, сетевых адаптеров и USB-устройств. Например, развиваются драйверы Nova для видеокарт NVIDIA, asahi для GPU Apple AGX, Tyr для GPU ARM Mali, а также реализация IPC Binder.
Поддержка Rust неактивна по умолчанию и не приводит к включению этого языка в число обязательных сборочных зависимостей ядра. Однако сторонники продвижения Rust считают, что этот язык помогает избежать многих ошибок, связанных с особенностями C, и позволяет сократить время разработки за счёт снижения трудозатрат на отладку.
Параллельно Microsoft активно внедряет поддержку Rust в Windows, даже были высказывания, что компания планирует к 2030 году полностью заменить весь код на C/C++ на Rust. Однако позднее компания дезавуировала подобные высказывания.
Google также продвигает Rust в Android, но менее агрессивно

### Выход .NET 10:
Выпуск с долгосрочной поддержкой (Long Term Support, LTS), что гарантирует стабильность и актуальность вплоть до конца 2028 года, и знаменует собой качественный прогресс в эволюции платформы, делая её более привлекательной для широкого круга разработчиков и предприятий
Новые оптимизации повышают производительность приложений и уменьшают потребление ресурсов. Повышение эффективности работы с многопоточностью и параллельной обработкой данных. Оптимизирован JIT-компилятор, ускоряющий выполнение кода путем уменьшения нагрузки на процессор и улучшение обработки аргументов структур. Добавлена поддержка инструкций AVX10.2 для Intel и ARM64 SVE, позволяющая эффективнее использовать аппаратные возможности современных процессоров.
Значительно улучшено быстродействие NativeAOT (ранней компиляции) за счёт снижения размера исполняемых файлов и ускорения старта приложений.
Возможность стековой аллокации небольших массивов фиксированного размера, что уменьшает нагрузку на динамическое выделение памяти.
Сопровождается обновленнием языка C# - C# 14 со многими нововведениями, из которых следует отметить прежде всего расширенные возможности расширения классов (extension blocks), позволяющие элегантно дополнять базовые классы методами и свойствами.
Добавлена поддержка выполнения кода в виде скриптов без создания проекта.

### Java 25
Плановый выпуск тем не менее знаменует собой важную веху в развитии языка программирования Java. Из нововведенией прежде всего следует отметить возможность создавать более компактные исходные файлы и метод main, что упрощает процесс для начинающих и для разработчиков скриптов, позволяя создавать Java-программы с меньшим количеством шаблонного кода
Также следует отметить развитие Structured Concurrency, которая предоставляет высокоуровневый API для управления параллельными задачами, обеспечивая четкую организацию и обработку исключений, и Scoped Values, которая предоставляет безопасную передачу неизменяемых данных между потоками, что обеспечивает лучшую интеграцию с виртуальными потоками и устраняет необходимость использования ThreadLocal.​
Кроме того, добавлена возможность массового подключения всех пакетов модуля одной строкой, что упрощает работу с крупными проектами и снижает сложность импорта, и упрощённое разрешение зависимостей и автоматический импорт пакетов, что ускоряет разработку и уменьшает когнитивную нагрузку
И, как обычно, все это сопровождается оптимизацией работы с памятью. В частности, функциональность Compact Object Headers позволяет сократить размер заголовков объектов в Java-куче и снижает потребление памяти, улучшает плотность кучи и общую производительность, особенно в приложениях с большим количеством объектов
8👍4❤‍🔥2🤮2👎1
### Python 3.14
Выход Python 3.14 в октябре 2025 года ознаменовал важные изменения и улучшения, направленные на повышение производительности, улучшение поддержки многопоточности и предоставление новых возможностей для разработчиков.
Интерпретатор Python 3.14 получил значительные улучшения, включающие оптимизацию обработки команд CPython и увеличение производительности на уровне байт-кода. Результаты тестов показывают, что средний прирост производительности составляет около 30%, что достигается без необходимости внесения изменений в существующий код.​
Важнейшим изменением является удаление механизма GIL, который препятствовал эффективному использованию многопроцессорных систем. Теперь Python позволяет эффективно распределять задачи между несколькими потоками, значительно увеличивая производительность в многопоточных приложениях. Это открывает путь к новому уровню производительности для интенсивных вычислительных задач и многопоточности.​
Python 3.14 отличается значительным увеличением производительности за счет оптимизации внутренней работы интерпретатора. Испытания показывают, что новое решение позволяет выполнять задачи быстрее и использовать меньше памяти, что особенно важно для больших проектов и интенсивных вычислений

### Swift для Android
Компания Apple открыла возможность разработки приложений на языке Swift для операционной системы Android, что ранее было ограничено экосистемой Apple. Хотя поддержка пока неполная, но в перспективе Swift может стать альтернативой инструментам для кросс-платформенной разработке, как Kotlin Multiplatform, Flutter (Dart), .NET MAUI (C#), React Native (JS/TS)

### Искусственный интеллект и инструменты для разработчиков
В 2025 году продолжил развиваться подход, при котором ИИ выступает не просто помощником, а полноценным соавтором разработчика. Примерно 60% специалистов среднего уровня активно использовали ИИ-ассистентов в работе.
Появился термин «вайбкодинг» (vibe coding), который описывает ситуацию, когда разработчик задаёт направление желаемого результата, а реализацию берёт на себя ИИ. В России этот подход стал стандартным инструментом для быстрого прототипирования и создания MVP, особенно в стартапах и продуктовых командах.
Однако эксперты предупреждают, что код, созданный с помощью вайбкодинга, часто оказывается хрупким: его сложно поддерживать и масштабировать. В индустрии даже появился термин «вайб-похмелье» для описания ситуации, когда проект приходится переписывать с нуля, потому что никто уже не понимает, как он устроен.

### Развитие рынка труда для разработчиков
В 2025 году рынок труда для программистов в России и мире претерпевал значительные изменения, связанные с экономическими факторами, технологическим прогрессом и структурными сдвигами в отрасли.

Увеличилось количество вакансий в сферах машинного обучения, AI, кибербезопасности, разработки приложений виртуальной реальности, операционной инженерии.

В России наблюдался дисбаланс между количеством соискателей и спросом на определённые категории специалистов. По данным hh_ru, на одну ИТ-вакансию в 2025 году приходилось около 14 резюме, что почти вдвое выше «комфортного» уровня. При этом конкуренция была максимальной среди начинающих специалистов (джунов) — 18,6 резюме на одну вакансию, тогда как на позиции сеньоров приходилось всего 3 резюме, и не все из них соответствовали требованиям.
Рынок труда характеризуется избытком джунов. Многие недавние выпускники онлайн-курсов и вузов не обладали достаточными практическими навыками для выполнения коммерческих задач. У них часто были завышенные зарплатные ожидания.
И в то же время наблюдается дефицит middle- и senior-специалистов. Компании остро нуждались в опытных разработчиках, способных быстро включаться в сложные проекты и принимать ключевые решения.
5❤‍🔥2👎1👏1
На российский рынок труда также оказали влияние некоторые локальные особенности. Например, влияние импортозамещения: переход на отечественные решения (например, замену Oracle на PostgreSQL, SAP на 1С) создал спрос на специалистов, знакомых с российскими продуктами
В то де время экономические факторы, в частности, высокая ключевая ставка ЦБ и замедление экономики, а также оптимизация расходов привели к снижению количества вакансий, произошло сокращение бюджетов и проектов.
Тем не менее также стоит отметить и гос. поддержку в этой сфере: действовали программы льготной ипотеки для IT-специалистов (до 2030 года), отсрочка от призыва для сотрудников аккредитованных компаний, образовательные инициативы (увеличение бюджетных мест в вузах, корпоративные университеты).

Мировой рынок IT в 2025 году столкнулся с заметным охлаждением. По данным компании ZipRecruiter, в США количество IT-вакансий за последний год сократилось на 56%. Крупные технологические компании (Microsoft, Intel, Tata Consultancy Services) проводили масштабные сокращения.
ИИ начал массово внедряться в процессы разработки, что привело к сокращению спроса на специалистов, выполняющих рутинные задачи. По некоторым оценкам, доля кода, создаваемого с помощью ИИ, достигла около 50%. Однако это повысило спрос на сеньоров для ревью кода, постановки требований и работы с аналитикой.
В США и Индии и в ряде других стран (как и в России) фиксировалось сокращение позиций для начинающих специалистов и рост спроса на узкопрофильных экспертов. Компании искали специалистов с опытом в конкретных сферах: финансы, e-commerce, кибербезопасность, машинное обучение.
👍14🔥42👎2❤‍🔥1🤬1
Список базовых команд Linux для повседневного использования
(продолжение в следующем посте)
🔥10👍2👏1
Список базовых команд Linux для повседневного использования
(продолжение предыдущего поста)

1. Bash Commands (базовые команды Bash):
- uname -a — показать систему и ядро;
- head -n1 /etc/issue — показать дистрибутив;
- mount — показать смонтированные файловые системы;
- date — показать системную дату;
- uptime — показать время работы системы;
- whoami — показать имя пользователя;
- man command — показать руководство по команде.

2. File commands (команды работы с файлами и директориями):
- ls — список директории;
- ls -a — показать всё (включая скрытые файлы);
- ls -R — рекурсивный список;
- ls -r — обратный порядок;
- ls -t — сортировка по времени последнего изменения;
- ls -S — сортировка по размеру файла;
- ls -l — длинный формат списка;
- ls -1 — по одному файлу в строке;
- ls -m — вывод через запятую;
- ls -Q — вывод в кавычках;
- cd — перейти в домашнюю директорию;
- pwd — показать текущую директорию;
- mkdir dir — создать директорию dir;
- cd dir — перейти в директорию dir;
- rm file — удалить файл;
- rm -r dir — удалить директорию dir (рекурсивно);
- rm -f file — принудительно удалить файл;
- rm -rf dir — удалить директорию dir (рекурсивно, без подтверждения);
- cp file1 file2 — скопировать file1 в file2;
- mv file1 file2 — переименовать file1 в file2;
- ln -s file link — создать символьную ссылку «link» на файл;
- touch file — создать или обновить файл;
- cat > file — поместить стандартный ввод в файл;
- more file — вывести содержимое файла;
- less file — вывести содержимое файла (с постраничным просмотром);
- head file — вывести первые 10 строк файла;
- tail file — вывести последние 10 строк файла.

3. File permissions (команды управления правами доступа к файлам):
- chmod 775 file — изменить права доступа файла на 775;
- chmod -R 600 folder — рекурсивно изменить права доступа папки на 600;
- chown user.group file — изменить владельца файла на user и группу на group.

4. Process management (управление процессами):
- ps — показать снимок процессов;
- top — показать процессы в реальном времени;
- kill pid — завершить процесс с ID pid;
- pkill name — завершить процесс по имени name;
- killall name — завершить все процессы, имена которых начинаются с name.

5. Searching (поиск):
- grep pattern files — поиск шаблона в файлах;
- grep -i — поиск без учёта регистра;
- grep -r — рекурсивный поиск;
- grep -v — инвертированный поиск (показать строки, где шаблон не найден);
- grep -o — показать только совпадающую часть файла;
- find /dir/ -name name* — найти файлы, начинающиеся с name в директории /dir/.

6. Network (сетевые команды):
- ping host — отправить пинг на хост host;
- dig domain — получить DNS для домена;
- dig -x host — обратный поиск по хосту;
- wget file — скачать файл;
- wget -c file — продолжить прерванную загрузку;
- wget -r url — рекурсивно скачать файлы с URL.

7. SSH (команды SSH):
- ssh user@host — подключиться к хосту как пользователь user;
- ssh -p port user@host — подключиться, используя порт p;
- ssh -D port user@host — подключиться и использовать бинд-порт.

8. Installation (команды установки):
- ./configure — настройка перед компиляцией;
- make — компиляция программы;
- make install — установка скомпилированной программы.
❤‍🔥11🎄7👏1