Веб-версияОткрыть в Telegram
JJava Portal | Программирование

Java Portal | Программирование

@Java_Iibrary · канал · Технологии · в индексе с 2026-04-15
11 602подписчиков−18 за неделю
1 081средний охват поста
9.3%ER — охват к подписчикам
66постов за 30 дней
J
Java Portal | Программирование
Фотография
нажмите — покажем
Каждый Java-разработчик использует HashMap. Но задумывались ли вы… Почему его ёмкость всегда равна степени двойки? Почему не 10? Почему не 100? Почему Java увеличивает её именно так? 16 → 32 → 64 → 128 → 256 Что сломается или станет работать медленнее, если ёмкость будет равна 15, 30 или 100? 👉 Java Portal
2 · 1.2K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Java: используйте Deque вместо Stack для работы по принципу LIFO («последним пришёл — первым вышел»). Stack — устаревший класс, который наследуется от Vector и синхронизирует каждый вызов. Deque предоставляет те же методы push, pop и peek. Используйте ArrayDeque: он быстрее и рекомендуется начиная с Java 6. #Java #Collections 👉 Java Portal
4 · 1.2K ·
J
Фотография
нажмите — покажем
Во многих приложениях есть такой эндпоинт. Фронтенд удаляет JWT после того, как пользователь нажимает «Выйти». Но вот вопрос… Действительно ли пользователь вышел из системы? Что, если: • JWT скопировали до выхода? • Срок действия токена ещё не истёк? • Другое устройство всё ещё использует тот же токен? Будет ли ваш бэкенд по-прежнему принимать этот JWT? Как вы реализуете выход из системы в архитектуре со stateless JWT? 👉 Java Portal
4 · 1.2K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Java-разработчики, ConcurrentHashMap потокобезопасен. Но он не блокирует всю коллекцию при каждом обновлении. Что же происходит, когда несколько потоков изменяют её одновременно? До Java 8 → блокировки на уровне сегментов. Java 8+ → CAS + синхронизация на уровне корзин. Как это улучшает работу с конкурентным доступом? И когда ConcurrentHashMap всё ещё нужны блокировки? 👉 Java Portal
5 · 1.2K ·
J
Фотография
нажмите — покажем
Java-разработчики, CopyOnWriteArrayList создаёт копию всего внутреннего массива при каждом изменении. Звучит затратно, правда? И всё же в некоторых продакшен-системах он может работать быстрее синхронизированных коллекций. Почему? 👉 Java Portal
3 · 1.2K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Проблема в продакшене. Приложение зависло. Вы запускаете: jstack <pid> Через несколько секунд получаете: Found one Java-level deadlock Но главный вопрос… Как JVM обнаружила взаимную блокировку? Что происходит внутри? 👉 Java Portal
7 · 1.2K ·
J
Фотография
нажмите — покажем
💡 Java: не создавайте ресурсоёмкие объекты, пока они действительно не понадобятся. ✅ Инициализация полей заранее тратит время и память впустую, если код, который их использует, так и не выполнится. ✅ Используйте ленивую инициализацию при первом обращении, Supplier или паттерн Holder. ✅ Подходит для кэшей, клиентов и тяжёлых конфигураций. 👉 Java Portal
3 · 1.1K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Большинство Java-разработчиков используют эти термины каждый день. Удивительно, но многие до сих пор их путают. Вот простой способ запомнить разницу. JDK (Java Development Kit) • Всё необходимое для разработки Java-приложений: • Компилятор javac • Инструменты отладки • Инструменты упаковки • Среда выполнения JRE JRE (Java Runtime Environment) • Всё необходимое для запуска Java-приложений: • Основные библиотеки • Вспомогательные файлы • Виртуальная машина JVM JVM (Java Virtual Machine) • Движок, который выполняет Java-байткод: • Загружает классы • Проверяет байткод • JIT-компилирует часто выполняемый код • Управляет памятью и сборкой мусора Как запомнить: JDK = JRE + инструменты разработки JRE = JVM + библиотеки JVM = выполнение байткода Представьте приготовление кофе • JDK — кофемашина, зёрна, кофемолка и всё необходимое для приготовления кофе. • JRE — готовый к употреблению кофе. • JVM — нагреватель, благодаря которому кофе заваривается. Если вы пишете код, устанавливайте JDK. Если только запускаете Java-приложение, достаточно JRE, хотя современные дистрибутивы JDK обычно уже включают необходимую среду выполнения. 👉 Java Portal
11 · 1.1K ·
J
Фотография
нажмите — покажем
Эволюция языков программирования 1940-е → Машинный код ⬇️ 1950-е → Ассемблер ⬇️ 1960-е → FORTRAN • COBOL • BASIC ⬇️ 1970-е → C • Pascal ⬇️ 1980-е → C++ • Objective-C ⬇️ 1990-е → Java • JavaScript • PHP ⬇️ 2000-е → C# • Ruby • Scala ⬇️ 2010-е → Go • Rust • Kotlin • Swift ⬇️ 2020-е → Программирование с помощью ИИ Каждое поколение решало свои задачи: • Машинный код → прямое управление оборудованием. • Ассемблер → инструкции, понятные человеку. • C и Pascal → переносимость программ и структурное программирование. • Java и JavaScript → корпоративное ПО и современный веб. • C#, Ruby и Scala → продуктивность разработчиков и масштабируемые приложения. • Go, Rust, Kotlin и Swift → облачные системы, безопасность памяти и современные платформы. • Программирование с помощью ИИ → ускорение разработки, при котором архитектурные решения по-прежнему принимают люди. Что самое интересное? Языки развивались не потому, что старые становились бесполезными. Каждое новое поколение ПО приносило новые задачи. И вот подтверждение: • На C по-прежнему пишут операционные системы. • На Java работают миллионы корпоративных приложений. • JavaScript по-прежнему доминирует в вебе. • Python остаётся ведущим языком в ИИ и анализе данных. Новое не заменяет старое. Оно расширяет возможности. На каком языке вы написали свой первый Hello, World!? 👉 Java Portal
4 · 1K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Docker прост, пока всё работает. Но что делать, если контейнер постоянно перезапускается, логи пропали, а приложение теряет данные после перезапуска? Тут уже недостаточно одного docker run. Команды Docker, которые стоит знать каждому разработчику: • docker logs -f → следить за логами приложения. • docker exec -it → выполнять команды внутри работающего контейнера для диагностики. • docker inspect → изучать конфигурацию контейнера. • docker stats → проверять потребление CPU и памяти. • docker network → управлять сетями и разбираться с соединениями между сервисами. • docker volume → управлять томами для хранения данных вне жизненного цикла контейнера. • docker compose → запускать несколько сервисов вместе. • docker system df → проверять, сколько места на диске занимает Docker. В продакшене не забывайте: • Использовать небольшие базовые образы из доверенных источников. • Запускать приложение от пользователя без прав root. • Настраивать проверки работоспособности и ограничения ресурсов. • Не хранить секреты в Docker-образах. • Использовать тома для постоянного хранения данных. Подготовили шпаргалку по Docker для продакшена: архитектура, команды, примеры, сети, тома, Compose и советы по диагностике проблем. 👉 Java Portal
29 · 1.1K ·
J
Фотография
нажмите — покажем
Почему один и тот же Java-файл .class запускается на Windows, Linux и macOS без перекомпиляции? Секрет не в самом языке Java, а в JVM. Вот какой путь проходит программа: Hello.java → javac → Hello.class (байткод) → JVM → машинный код → выполнение программы Именно этот дополнительный уровень абстракции даёт Java её знаменитую возможность: «Написал один раз — запускай где угодно». Когда понимаешь эту цепочку, разобраться в JIT-компиляции, сборке мусора и настройке JVM становится гораздо проще. Как думаете, почему Java использует промежуточный байткод, а не компилируется сразу в машинный код? 👉 Java Portal
10 · 1.1K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Spring Boot 4: приближение срока истечения SSL-сертификатов больше не меняет статус health-проверки на специальный. ✅ Статус WILL_EXPIRE_SOON удалён. ✅ Статус остаётся UP; проверяйте details.expiringChains. ✅ Порог предупреждения настраивается параметром: management.health.ssl.certificate-validity-warning-threshold 👉 Java Portal
3 · 1.1K ·
J
Фотография
нажмите — покажем
Когда Java-стектрейс оказался длиннее контекста ИИ 👀 👉 Java Portal
5 · 1K ·
Java Portal | Программирование
Фотография
нажмите — покажем
Процесс ≠ Поток ≠ Виртуальный поток. Эти понятия часто путают, хотя они решают разные задачи. Процесс — экземпляр запущенной программы с собственным адресным пространством. Поток — единица выполнения внутри процесса. Потоки одного процесса разделяют память. Виртуальный поток — легковесный поток под управлением JVM, который позволяет обрабатывать множество конкурентных задач с небольшими накладными расходами. Когда что использовать? Процесс: • Нужна строгая изоляция. • Требуется отдельное адресное пространство. • Подходит для запуска независимых приложений. Поток: • Разделяет память с другими потоками процесса. • Подходит для параллельной работы внутри приложения. • Используется в традиционных многопоточных программах. Виртуальный поток — Java 21+: • Создаётся и управляется JVM. • Требует мало ресурсов при создании. • Хорошо подходит для задач с ожиданием ввода-вывода: запросов к БД, HTTP-вызовов и обработки сетевых соединений. • Позволяет выполнять тысячи и даже миллионы конкурентных задач без отдельного потока ОС для каждой. Примеры из практики • Запущенные Chrome и VS Code → несколько процессов. • Обработка запросов в Spring Boot → работа потоков внутри приложения. • Java-сервис с большим количеством блокирующих обращений к БД или HTTP API → сценарий для виртуальных потоков. Важно: виртуальные потоки полезны для задач с ожиданием ввода-вывода. Вычисления, интенсивно использующие CPU, сами по себе быстрее от них не станут. 👉 Java Portal
24 · 978 ·
J
Фотография
нажмите — покажем
🚀 Spring Boot 4: переименовано свойство преобразования исключений ✅ Было: spring.dao.exceptiontranslation.enabled ✅ Стало: spring.persistence.exceptiontranslation.enabled ✅ Используйте spring-boot-properties-migrator, чтобы обнаружить устаревшее свойство при миграции. 👉 Java Portal
3 · 921 ·
Java Portal | Программирование
Фотография
нажмите — покажем
💡 Предпочитайте делегирование наследованию: отношение «является» тесно связывает ваш класс с суперклассом. ✅ Подкласс наследует весь доступный API родителя, поэтому изменения в родительском классе могут сломать ваш код. 👉 Java Portal
4 · 854 ·
J
Видео
TWMate.com-2bdcca561e273f112d94b39101389dfa.mp4 · 4.9 МБ · нажмите — покажем
😂 👉 Java Portal
11 · 891 ·
Java Portal | Программирование
Фотография
нажмите — покажем
💡 Тестируйте крайние случаи: null, пустые значения и границы часто скрывают баги ✅ Проверки только успешного сценария могут пропустить NullPointerException. ✅ Пустые списки и списки из одного элемента могут выявить ошибки, незаметные на обычных данных. ✅ Тесты крайних случаев также документируют ожидаемое поведение кода. 👉 Java Portal
2 · 785 ·
J
Фотография
нажмите — покажем
План изучения Java за 6–12 месяцев в эпоху ИИ Этап 1. Java и основы программирования • Что такое Java и где она применяется. • Установка JDK и настройка IDE. • Синтаксис и структура программы. • Переменные, типы данных и операторы. • Условия, switch и циклы. • Использование ИИ для объяснения концепций Java и ошибок. Этап 2. Объектно-ориентированное программирование • Классы и объекты. • Инкапсуляция. • Наследование. • Полиморфизм. • Абстракция. • Интерфейсы. • Визуализация связей между классами с помощью ИИ. Этап 3. Основные возможности Java • Массивы и коллекции: List, Set, Map. • Дженерики. • Обработка исключений. • Работа с файлами и вводом-выводом. • API даты и времени. • Лямбда-выражения и Stream API. • Рефакторинг с помощью ИИ. Этап 4. Память и основы производительности • Архитектура JVM. • Heap и stack. • Основы сборки мусора. • Утечки памяти. • Основы профилирования. • Анализ проблем производительности с помощью ИИ. Этап 5. Многопоточность и конкурентность • Потоки и Runnable. • Executor Framework. • Синхронизация. • Блокировки и конкурентные коллекции. • CompletableFuture. • Предотвращение гонок данных и взаимных блокировок. Этап 6. Базы данных и хранение данных • Основы JDBC и SQL. • Hibernate и JPA. • Связи между сущностями. • Транзакции. • Основы кеширования. • Оптимизация запросов с помощью ИИ. Этап 7. Бэкенд-разработка на Java • Основы Spring Boot. • Разработка REST API. • Контроллеры и сервисы. • Внедрение зависимостей. • Валидация. • Управление конфигурацией. • Документирование API: Swagger/OpenAPI. • Генерация API с помощью ИИ. Этап 8. Безопасность и аутентификация • Основы Spring Security. • Аутентификация с JWT. • Концепции OAuth 2.0. • Управление доступом на основе ролей. • Хеширование паролей. • Безопасная работа с конфигурацией. Этап 9. Тестирование, DevOps и развёртывание • Unit-тесты: JUnit и Mockito. • Интеграционные тесты. • Maven и Gradle. • Контейнеризация Java-приложений с Docker. • CI/CD. • Основы развёртывания в облаке. • Гене
78 · 735 ·
Java Portal | Программирование
Фотография
нажмите — покажем
🚀 Spring Boot 4: EnvironmentPostProcessor сменил пакет ✅ Новый: org.springframework.boot.EnvironmentPostProcessor ✅ Старый пакет временно сохранён, но помечен как устаревший. ✅ Обновите импорты в коде и регистрацию в spring.factories. 👉 Java Portal
3 · 707 ·
J
Фотография
нажмите — покажем
Prompt Engineering и Context Engineering Prompt Engineering — проектирование инструкций для LLM, чтобы получать более качественные ответы. Главная задача — понять, как инструкции влияют на поведение модели. 1. Структура промпта: Роль + Контекст + Ограничения + Формат ответа. Пример: «Ты опытный Java-архитектор. Объясни JWT-аутентификацию простым языком для начинающих. Оформи ответ списком». 2. Типы промптов: • Zero-shot — задача без примеров. • Few-shot — задача с примерами. • Chain-of-thought — побуждение модели решать задачу пошагово. • Structured prompting — запрос ответа в заданном формате, например JSON по определённой схеме. 3. Context Engineering: Качество работы AI зависит не только от формулировки запроса, но и от того, какую информацию и возможности получает модель: • Поиск и извлечение релевантных данных — retrieval. • Память. • Организация рабочего процесса — workflows. • Инструменты. • Системные инструкции. Что важно для реальных проектов: Одних удачных промптов недостаточно для масштабирования AI-систем. В продакшене нужны продуманная архитектура, качественный retrieval, управление памятью и проверка результатов. 👉 Java Portal
14 · 555 ·
Java Portal | Программирование
Фотография
нажмите — покажем
💡 Измеряйте покрытие кода тестами, но не гонитесь за 100%. ✅ Покрытие показывает, какие строки выполнились, а не то, что они работают правильно. ✅ Даже при полном покрытии реальные баги могут остаться незамеченными. ✅ Содержательные проверки наиболее рискованных сценариев важнее идеального показателя. 👉 Java Portal
2 · 257 ·
J
Фотография
нажмите — покажем
Виртуальные потоки в Java 21+ хорошо подходят для задач, которые большую часть времени проводят в ожидании. Общий Semaphore ограничивает число одновременных обращений к зависимому сервису: каждая задача получает собственный виртуальный поток, но одновременно выполнять вызов API могут не более 10 задач. 👉 Java Portal
9 · 468 ·
Java Portal | Программирование
Фотография
нажмите — покажем
💡 Spring Boot 4: DevTools больше не запускает сервер LiveReload по умолчанию ✅ Автоматический перезапуск приложения при изменениях в classpath работает как раньше. ✅ Для включения LiveReload задайте spring.devtools.livereload.enabled=true. ✅ Порт 35729 больше не занимается автоматически — удобно, когда на одной машине запущено несколько приложений. 👉 Java Portal
2 · 648 ·
J
Фотография
нажмите — покажем
Многопоточность в Java: volatile, Atomic и synchronized Все три механизма применяются при работе с общими данными из нескольких потоков, но дают разные гарантии. Неправильный выбор может привести к багам, которые сложно воспроизвести. Коротко: • volatile — видимость изменений и гарантии порядка. • Atomic — атомарные операции над отдельной переменной. • synchronized — взаимное исключение и видимость изменений. volatile: когда важна видимость Подходит, например, для флага остановки: private volatile boolean running = true; // Один поток: running = false; // Другой поток: while (running) { // Работа } Изменение флага будет видно при последующих чтениях из другого потока. Но volatile не делает составные операции атомарными: volatile int count; count++; Инкремент состоит из чтения, увеличения и записи. Между этими шагами другой поток может изменить значение — и одно из обновлений потеряется. Atomic: когда нужна атомарная операция В Java есть AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference и другие классы: private final AtomicInteger counter = new AtomicInteger(); counter.incrementAndGet(); Здесь увеличение счётчика выполняется атомарно, без явного блока synchronized. Типичные задачи: счётчики, последовательные номера, условное обновление флагов и ссылок. При этом несколько отдельных вызовов Atomic не становятся одной атомарной операцией автоматически. synchronized: когда нужно защитить несколько действий public synchronized void updateState() { checkState(); changeState(); updateCounter(); } Только один поток может выполнять код, защищённый одним и тем же монитором, в конкретный момент. Для согласованности все обращения к защищаемому состоянию должны соблюдать ту же схему синхронизации. synchronized обеспечивает взаимное исключение и видимость изменений. При этом он не откатывает уже выполненные действия при исключении и не заменяет транзакцию базы данных. Конкуренция за блокировку может приводить к ожиданию, а неправи
15 · 430 ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем