METANIT.COM – Telegram
METANIT.COM
5.77K subscribers
1.64K photos
79 videos
9 files
981 links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Как JVM в Java исполняет байт‑код
(продолжение в следующем посте)
❤‍🔥62👍2
Как JVM в Java исполняет байт‑код
(продолжение предыдущего поста)

Вы пишете исходный код Java в файле с расширением .java.
Компилятор Java (javac) преобразует ваш код в платформонезависимый байт‑код, который сохраняется в файлах с расширением .class.
Затем виртуальная машина Java (JVM) загружает эти файлы с байт‑кодом в память для исполнения.

Во время выполнения программы:

→ Загрузчик классов (Class Loader) загружает байт‑код в JVM и обеспечивает доступность классов, когда они требуются.
→ Проверяющий байт‑код (Bytecode Verifier) анализирует код на соответствие требованиям безопасности и типовой корректности перед исполнением.
→ Интерпретатор начинает выполнять инструкции байт‑кода построчно.
→ Компилятор «точно в срок» (Just‑In‑Time, JIT) выявляет часто исполняемые участки кода (горячие точки) и компилирует их в оптимизированный машинный код для повышения производительности.
→ Сборщик мусора (Garbage Collector, GC) автоматически управляет памятью, удаляя из кучи неиспользуемые объекты.
→ Среда выполнения (Runtime Environment) предоставляет необходимые библиотеки, управление потоками и обработку исключений для бесперебойного исполнения программы.

Результат: ваша Java‑программа эффективно работает на всех платформах с использованием JVM, сочетая переносимость с оптимизацией во время выполнения и автоматическим управлением памятью.
7👍4❤‍🔥3👎1
Vim editor cheatsheet.jpeg
2.5 MB
Большая супершпаргалка по редактору Vim
👍12🔥4❤‍🔥31👎1
Управление процессами в Linux
(продолжение в следующем посте)
4❤‍🔥3👏1
Управление процессами в Linux
(продолжение предыдущего поста)

1. Введение

→ Процесс — это экземпляр запущенной программы в Linux.
→ Каждый процесс имеет собственное пространство памяти, контекст выполнения и системные ресурсы.
→ Управление процессами включает создание, планирование, мониторинг и завершение процессов.

2. Жизненный цикл процесса

→ Типичный жизненный цикл процесса включает:
 → Создание — инициируется другим процессом (обычно оболочкой).
 → Выполнение — процесс работает и выполняет задачи.
 → Ожидание — процесс может ожидать ресурсы или события.
 → Завершение — процесс завершается или принудительно останавливается.

→ Ядро управляет всеми переходами между этими состояниями.

3. Типы процессов

→ Процесс переднего плана:
 → Работает в интерактивном режиме и занимает терминал.
 → Пример: vim file.txt

→ Процесс фонового режима:
 → Работает без взаимодействия с терминалом.
 → Пример: ./noscript.sh &

→ Демон‑процесс:
 → Постоянно работает в фоновом режиме, предоставляя сервисы.
 → Примеры: sshd, cron, systemd.

4. Идентификация процессов

→ Каждый процесс идентифицируется PID (идентификатором процесса).
→ PPID (идентификатор родительского процесса) указывает на процесс, который его создал.
→ Процесс init/systemd — предок всех процессов, всегда имеет PID 1.

→ Для просмотра идентификаторов процессов:
 → ps
 → top
 → pgrep process_name

5. Создание процессов

→ В Linux для создания новых процессов используются системные вызовы fork() и exec().

fork()
 → Создаёт дубликат текущего процесса.
 → У дочернего процесса присваивается уникальный PID.

exec()
 → Заменяет память текущего процесса новой программой.
 → Используется для запуска новых исполняемых файлов.

→ Вместе fork() и exec() составляют основу создания процессов в Linux.

6. Состояния процессов

→ Процессы в Linux могут находиться в нескольких состояниях:
 → R (Running): Выполняется или готов к выполнению.
 → S (Sleeping): Ожидает события или ресурса.
 → D (Uninterruptible Sleep): Ожидает операций ввода‑вывода.
 → T (Stopped): Приостановлен сигналом.
 → Z (Zombie): Завершил выполнение, но ожидает подтверждения от родительского процесса.

→ Используйте ps -aux для просмотра состояний процессов.

7. Планирование процессов

→ Планировщик Linux решает, какой процесс будет выполняться следующим на CPU.
→ Используются алгоритмы планирования, такие как CFS (Completely Fair Scheduler).
→ Приоритеты определяются значениями nice в диапазоне от −20 (наивысший) до +19 (наинизший).

→ Команды:
 → nice -n 10 process_name — запустить процесс с пониженным приоритетом.
 → renice -n -5 PID — изменить приоритет запущенного процесса.

8. Мониторинг процессов

→ Команды для мониторинга активных процессов:
 → ps — снимок запущенных процессов.
 → top — отображение процессов в реальном времени.
 → htop — расширенная интерактивная версия top.
 → pidof — найти PID процесса.
 → pstree — просмотреть иерархию процессов.

9. Управление процессами

→ Управление запущенными процессами с помощью команд оболочки:
 → & — запустить процесс в фоновом режиме.
 → Ctrl + Z — приостановить процесс.
 → bg — возобновить процесс в фоновом режиме.
 → fg — вывести процесс на передний план.
 → kill PID — завершить процесс.
 → kill -9 PID — принудительно завершить процесс.

10. Зомби‑процессы и осиротевшие процессы

→ Зомби‑процесс:
 → Процесс завершил работу, но родительский процесс не прочитал его статус завершения.
 → Существует как запись в таблице процессов.

→ Осиротевший процесс:
 → Родительский процесс завершился до дочернего.
 → Автоматически принимается init/systemd.

→ Оба типа можно отслеживать и управлять ими с помощью ps или top.

11. Демоны и сервисы

→ Демоны — это специальные фоновые процессы, управляемые systemd.
→ Конфигурационные файлы хранятся в /etc/systemd/system/.
→ Команды:
 → systemctl start service_name
 → systemctl stop service_name
 → systemctl status service_name
 → systemctl enable service_name

12. Межпроцессное взаимодействие (IPC)
8❤‍🔥3👍3
→ Процессы взаимодействуют с помощью механизмов IPC, таких как:
 → Каналы — для взаимодействия «родитель‑потомок».
 → Очереди сообщений — для обмена сообщениями.
 → Общая память — для совместного использования данных.
 → Семафоры — для синхронизации.
 → Сигналы — для уведомлений (например, SIGKILL, SIGTERM).
6👍5❤‍🔥3
Краткая шпаргалка по матрицам и операциям с ними
166👍5👏4
Что происходит, когда вы добавляете строку в Postgres?
(продолжение в следующем посте)
6👍2👏1
Что происходит, когда вы добавляете строку в Postgres?
(продолжение предыдущего поста)

Postgres должен гарантировать сохранность данных, обеспечивая при этом высокую производительность записи и возможность восстановления после сбоев. Ключ к решению этой задачи — журнал упреждающей записи (Write‑Ahead Log, WAL).

(1) Postgres получает запрос и определяет, на какую страницу данных его разместить. Эта страница может уже находиться в памяти (в буферном пуле), либо её придётся загрузить с диска, либо даже создать новую.

(2) Новая запись помещается только в эту страницу в памяти. Страница помечается как «грязная» (*dirty*), что означает: её нужно будет в будущем записать на диск — но не немедленно.

(3) Новая запись добавляется в буфер памяти для WAL. Она содержит всю информацию, необходимую для восстановления операции вставки.

(4) WAL записывается на диск (с помощью fsync или аналогичного механизма), чтобы гарантировать сохранение данных в надёжном хранилище. После успешного выполнения этого шага Postgres возвращает клиенту подтверждение об успешном выполнении.

Когда клиент получает подтверждение об успехе, данные гарантированно записаны в последовательный WAL (что обеспечивает высокую производительность записи), но не обязательно — в файл данных таблицы (где шаблоны операций ввода‑вывода менее предсказуемы). Последнее происходит позже — посредством контрольных точек, фоновых заданий или принудительной записи из‑за вытеснения страниц памяти. Если сбой сервера произойдёт до того, как данные будут записаны на диск, журнал будет воспроизведён для восстановления подтверждённых данных.

WAL — это основа всего процесса! Он обеспечивает высокопроизводительный ввод‑вывод и возможность восстановления после сбоев.

#sql #database #postgresql
👍104👏1
Диграмма микросервисной архитектуры и связанных с ней паттернов
12👍5👏1
3 основных типа машинного обучения
(продолжение в следующем посте)
👍62👏1
3 основных типа машинного обучения
(продолжение предыдущего поста)

1. Supervised Learning (обучение с учителем)
- Суть: обучение модели на размеченных данных (data with labelled data).
- Подразделяется на два типа задач:
- Classification (классификация): прогнозирование дискретных значений (например, «да/нет», категории). Визуализировано с помощью кругов с точками разных цветов.
- Regression (регрессия): прогнозирование непрерывных значений (например, стоимость дома, температура). Показано графиком с линией тренда.
- Примеры алгоритмов:
- Логистическая регрессия (Logistic Regression);
- Деревья решений (Decision Trees);
- Случайный лес (Random Forest);
- XGBoost;
- K-ближайших соседей (K-Nearest Neighbors);
- Метод опорных векторов (Support Vector Machines) и др.

2. Unsupervised Learning (обучение без учителя)
- Суть: обучение модели на неразмеченных данных (data with unlabelled data), поиск скрытых закономерностей.
- Основная задача: Clustering (кластеризация) — группировка данных по сходству. Визуализировано разделением точек на кластеры.
- Примеры алгоритмов кластеризации:
- K-Means Clustering;
- DBSCAN;
- Иерархическая кластеризация (Hierarchical Clustering).
- Другие методы обучения без учителя:
- Метод главных компонент (PCA);
- Анализ ассоциативных правил (Association).

3. Reinforcement Learning (обучение с подкреплением)
- Суть: модель совершает действия в среде (environment), получает обратную связь (feedback) и обновляет своё состояние (state) на основе вознаграждений или штрафов.
- Визуализация: представлена в виде цикла между средой (Environment), действием (action), обратной связью (feedback) и агентом модели (Model Agent).
- Примеры алгоритмов:
- Q-Learning;
- R-Learning;
- TD-Learning.
👍32👏1
Стили установки отступов
😱20🤪20👍73
Завтра состоится главное событие года в мире .NET - релиз .NET 10 (с C# 14 и F#10 и сопутствующими технологиями типа ASP NET Core, MAUI .NET и т.д). Главное отличие .NET 10 состоит в том, что это LTS-выпуск с продленной поддержкой

Вместе с этим начнется главная ежегодная конференция для разработчиков на платформе .NET - DotNetConf 2025, где расскажут о последних нововведениях на платформе.

Кроме того, ожидается выход новой версии среды разработки - Visual Studio 2026

Прямая трансляция конференции как обычно будет доступна на "замедленном" youtube
https://www.youtube.com/watch?v=YDhJ953D6-U
Программа конференции доступна на офсайте - https://www.dotnetconf.net/agenda
🔥16😁32👍2🤣1
Тем временем в ноябрьском рейтинге языков программирования TIOBE C# сильно прибавил и может стать языком года. Как отмечают в TIOBE:
"
до недавнего времени никто не мог превзойти темпы роста Python. Но сейчас, похоже, рост Python остановился. Вместо Python самым быстрорастущим языком программирования стал C#. Если C# сможет сохранить этот темп, он может даже стать языком программирования TIOBE 2025 года. Как C# добился этого? Java и C# уже давно борются за одни и те же позиции. Сейчас, похоже, C# устранил все причины не использовать C# вместо Java: теперь он кроссплатформенный, с открытым исходным кодом и содержит все новые языковые функции, необходимые разработчику. Хотя в финансовом мире Java по-прежнему доминирует, во всех других областях доли Java и C# равны. Кроме того, Microsoft набирает обороты, а C# по-прежнему остаётся их самым поддерживаемым языком программирования. Интересное замечание: C# никогда не поднимался выше Java в индексе TIOBE. Сейчас разница между двумя конкурентами составляет менее 1%

."
https://www.tiobe.com/tiobe-index/
🔥32👍85🤡5🗿1
Как отладить медленное API. Схема
(продолжение в следующем посте)
4👍2🔥2
Как отладить медленное API?
(продолжение предыдущего поста)

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

Начните с сети:
* Высокая задержка? Разместите CDN перед статическими ресурсами.
* Большие объёмы данных? Сжимайте ответы для отправки клиенту.

Это быстрые решения, которые не требуют правки кода.

Затем проверьте код бэкенда: именно здесь чаще всего скрываются проблемы с производительностью.
* Операции, нагружающие процессор, должны выполняться в фоновом режиме.
* Сложную бизнес‑логику нужно упростить.
* Блокирующие синхронные вызовы следует заменить на асинхронные.

Профилируйте код, найдите «горячие» участки и исправьте их.

Проверьте базу данных:
* Отсутствие индексов — классическая причина замедления.
* Следите за запросами типа N+1: когда вы обращаетесь к базе данных сотни раз, хотя можно было бы выполнить один пакетный запрос.

Не забывайте про внешние API: вызовы Stripe, запросы к Google Maps — всё это вне вашего контроля.
* Выполняйте параллельные вызовы, где это возможно.
* Устанавливайте жёсткие таймауты и повторные попытки: так один медленный сторонний сервис не «повалит» весь ваш ответ.

Наконец, проверьте инфраструктуру:
* Серверы, работающие на пределе, нуждаются в автомасштабировании.
* Нужно настроить лимиты пула соединений.

Иногда проблема вовсе не в коде: вы пытаетесь обработать 10 000 запросов с ресурсами, рассчитанными на 100.

Главное — действовать методично. Не бросайтесь решать проблемы наугад. Сначала измерьте, выявите реальное узкое место, а затем устраните его.
8🔥3👍2
Министерство Великобритании завершило обновление своего парка ПК до Windows 10 после прекращения поддержки ОС

Министерство окружающей среды, продовольствия и сельского хозяйства Великобритании (Defra) потратило £312 млн на модернизацию своей IT-инфраструктуры, включая обновление с Windows 7 до Windows 10 на десятках тысяч ноутбуков. Microsoft прекратила официальную поддержку Windows 10 в середине октября этого года.

https://habr.com/ru/news/965366/
🤣40👍6😢2💯2
Microsoft выпустил новую версию своей платформы .NET - .NET 10 вместе с новой версией языка C# - C# 14, а также F# 10 и обновления для платформ на базе .NET - ASP NET Core 10, Entity Framework Core 10, .NET MAUI и т.д.
Новая версия, как обычно, включает различные улучшения, оптимизации, некоторые нововведения и т.д. Отмечу только некоторые из них.

Прежде всего это возможность запускать отдельный *.cs-файл с кодом C# как обычный скрипт без файлов решения/проекта (файлы sln / csproj), как это происходит в Python, например.
Кроме того, в C# добавлены такие фичи как
- Extension Members (члены расширений),
- Null-Conditional Assignment (присвоение, если выражение не null - a?.b = M())
- ключевое слово field
- для параметров лямбда-выражение теперь можно использовать модификаторы
- частичные конструкторы и события
- возможность переопределения составных операторов присваивания

Стоит отметить, что .NET 10 - это LTS-выпуск с продленным сроком выпуска обновлений: окончание поддержки - 14 ноября 2028 года

Загрузить пакеты для различных платформ и ОС можно с офсайта со страницы https://dotnet.microsoft.com/en-us/download/dotnet/10.0
32😍12👍5🤮4🥰2👏2
Также вышла новая версия среды разработки Visual Studio - Visual Studio 2026
Среди нововведений следует отметить главным образом большое внедрение и интеграция AI, поддержка визуализации с помощью диаграмм Mermaid сложных структур данных, рабочих процессов и взаимосвязей между разными компонентами, а также большие возможности для отладки приложений на .NET MAUI и C++, большая интеграция с Git и т.д.

Загрузить можно с оф сайта со страницы:
https://visualstudio.microsoft.com/downloads/

Полный список изменений: https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-notes
28😍8🔥4🤮3👎1