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

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

@java_iibrary

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Subscribers
11.7K
Photos
1.6K
Videos
118
Links
1.6K

Showing posts older than #2429 · Back to latest

Older Posts 20 shown
Post #2428 1.68K
Почему многопоточность — это сложно?
Многопоточность объединяет сразу несколько непростых концепций.

▪️Concurrency (конкурентное выполнение)
Несколько задач выполняются одновременно или создают видимость одновременного выполнения. Из-за этого порядок выполнения становится непредсказуемым.
▪️Synchronization (синхронизация)
Нужна для защиты общих данных от одновременного изменения несколькими потоками. Без неё возникают race condition, повреждение данных и трудноуловимые баги.
▪️Coordination (координация)
Потоки часто зависят друг от друга. Нужно управлять порядком выполнения задач, ожиданием результатов и обменом данными между потоками.
▪️Visibility (видимость изменений)
Один поток должен видеть изменения, которые внесли другие потоки. Из-за кэшей процессора, оптимизаций компилятора и переупорядочивания инструкций это происходит не всегда автоматически.

Именно сочетание этих проблем делает многопоточность сложной. Программа может работать правильно тысячу раз подряд и сломаться на тысяча первом запуске из-за другого порядка выполнения потоков.

👉 Java Portal
  • ❤ 3
Post #2427 1.64K
Вот забавный ресурс для изучения HTTP-кодов через мемы: 200, 404, 500 и компании. Отличный способ запомнить коды без скучных таблиц.

https://github.com/keijeizei/httpmemes

👉 Java Portal
  • 😁 8
  • 💊 3
  • ❤ 1
Post #2426 1.68K
Java: Не делай поля публичными. Держи их private и используй геттеры/сеттеры для инкапсуляции. #Java #OOP

👉 Java Portal
  • 👍 6
Post #2425 1.78K
Команда «docker run -it»

Когда контейнеру Docker необходимо запустить интерактивное приложение, такое как оболочка, языковая REPL или текстовый редактор, команде «docker run» требуются два дополнительных флага: -i и -t.

👉 Java Portal
  • 👍 1
Post #2424 1.96K
Stream Gatherers официально стали финальной частью Java 24 (JEP 485).

Stream API существует ещё со времён Java 8, но набор промежуточных операций всегда был ограничен методами вроде filter(), map() и sorted().

Вместо того чтобы постоянно расширять стандартный API новыми операциями, Java теперь позволяет разработчикам создавать собственные.

Что дают Stream Gatherers:
• Используются через метод gather() для любого стрима
• Позволяют реализовать собственную логику через интерфейс Gatherer
• Работают как обычные промежуточные операции Stream API
• Были доступны в Preview в Java 22 и Java 23
• Стали финальными в Java 24 без изменений API

Например, теперь можно написать собственный gatherer для фильтрации строк по длине, оконной обработки данных, дедупликации или других сценариев, которые раньше требовали сложных цепочек операций или кастомных решений вне Stream API.

👉 Java Portal
  • 🔥 7
Post #2422 1.65K
В PostgreSQL 19 Beta 1 завезли ON CONFLICT DO SELECT.
Теперь можно попытаться вставить запись, а если она уже есть — сразу получить существующую.
Похоже, атомарный get-or-create наконец добрался до PostgreSQL.
#PostgreSQL #SQL

👉 Java Portal
  • ❤ 6
  • 👍 2
Post #2421 1.64K
Java: Используйте блоки try-catch только там, где это действительно необходимо. Не применяйте исключения для управления логикой выполнения программы. #Java #BestPractices

👉 Java Portal
  • ❤ 4
Post #2420 1.84K
Вышла статья о распространённых случаях, когда final-поля изменяются через рефлексию, и какие альтернативы можно использовать вместо этого.

Поскольку такие ситуации встречаются во фреймворках, библиотеках и обычных приложениях, материал будет полезен разработчикам всех этих типов проектов. 🤝

Разбираются причины использования рефлексии для изменения final-полей, связанные проблемы и варианты миграции на более безопасные решения.

https://inside.java/2026/04/27/avoiding-final-field-mutation/

👉 Java Portal
  • ❤ 4
Post #2419 1.58K
Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.

#Java #JavaDev

👉 Java Portal
  • 👍 7
Post #2417 1.74K
Список сетевых протоколов и портов, которые встречаются чаще всего:

👉 Java Portal
  • 👍 7
  • ❤ 1
Post #2416 1.82K
💡 Java: Используйте default-методы в интерфейсах для сохранения обратной совместимости (начиная с Java 8).

Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.

#Java #Interfaces

👉 Java Portal
  • 👍 4
  • ❤ 1
Post #2414 1.8K
Spring Boot 4.1 получит поддержку ленивого получения JDBC-соединений

DataSource будет оборачиваться в LazyConnectionDataSourceProxy, а физическое соединение из пула станет запрашиваться только в тот момент, когда приложению действительно потребуется выполнить JDBC-запрос. 🔥

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1.0-RC1-Release-Notes

👉 Java Portal
GitHub Spring Boot 4.1.0 RC1 Release Notes Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-boot
  • 🤯 4
Post #2413 1.7K
Два backend-разработчика решали одну и ту же задачу.

Вариант A:
SELECT *
FROM users
WHERE email = ?


Вариант B:
SELECT *
FROM users
WHERE LOWER(email) = LOWER(?)


Какой запрос отправится в прод?

Многие выбирают B, потому что он выглядит надёжнее. Пользователь может ввести John@Example.com, а в базе лежит john@example.com.

Но есть нюанс.

В большинстве СУБД вызов LOWER() над колонкой ломает использование обычного индекса. Вместо быстрого Index Seek база часто уходит в полный скан таблицы.
На 100 строках разницы не видно.
На 10 миллионах пользователей разница становится очень заметной.

Поэтому в проде обычно используют один из вариантов:
• хранить email в нормализованном виде (например, всегда lowercase);
• использовать case-insensitive collation;
• создать функциональный индекс на LOWER(email).

Самая опасная часть запроса часто выглядит как самая безобидная.

👉 Java Portal
  • 👍 14
  • ❤ 2
Post #2412 1.52K
В Docker можно поднять полноценный Android-эмулятор одной командой.

Без установки Android Studio, ручной настройки AVD и прочей возни.

Что есть из коробки:

• аппаратное ускорение через GPU
• поддержка KVM для более высокой производительности
• headless-режим для CI/CD и автоматизации
• запуск полностью внутри Docker-контейнера

Удобная штука для тестирования Android-приложений, мобильной автоматизации и агентных сценариев.

Бесплатно и с открытым исходным кодом

https://github.com/HQarroum/docker-android

👉 Java Portal
Post #2411 1.57K
Многие пишут SQL-запросы сверху вниз и думают, что СУБД выполняет их в том же порядке.

Но SQL работает иначе.

Фактический порядок выполнения выглядит так:

1. FROM
2. JOIN
3. WHERE
4. GROUP BY
5. HAVING
6. SELECT
7. ORDER BY
8. LIMIT

Именно поэтому алиасы из SELECT нельзя использовать в WHERE, а ошибки в агрегатах часто оказываются не там, где их ищут.

Понимание порядка выполнения помогает:

• быстрее отлаживать запросы;
• правильно использовать агрегации;
• избегать логических ошибок;
• писать более предсказуемый SQL.

Если запрос ведёт себя странно, проверь не то, как он написан, а то, как его выполняет движок базы данных.

👉 Java Portal
  • ❤ 7
  • 👍 4
Post #2410 1.52K
Паттерн Circuit Breaker не пытается бесконечно достучаться до упавшего сервиса. Он понимает, когда пора остановиться.

Closed → Open → Half-Open → Closed

Как работает:
Closed — запросы проходят нормально, ошибки отслеживаются.
Open — после достижения порога ошибок новые запросы сразу отклоняются без попытки обратиться к сервису.
Half-Open — через некоторое время пропускается несколько тестовых запросов.
Closed — если сервис восстановился, трафик возвращается в штатный режим.

Что это даёт:
• защищает систему от каскадных сбоев;
• снижает нагрузку на проблемный сервис;
• уменьшает задержки для клиентов;
• ускоряет восстановление после инцидентов.

Защищай. Быстро отказывай. Восстанавливайся. Повторяй.

#SystemDesign #SoftwareArchitecture #Microservices #DevOps #BackendDevelopment

👉 Java Portal
  • ❤ 1
  • 👍 1
Post #2409 1.55K
Большинство команд, которые делают data-агентов, городят целый зоопарк из роутеров, fine-tune моделей и RAG-пайплайнов поверх нескольких LLM.

OpenAI сделала иначе.

Их data-агент работает на одной модели и всего с 13 инструментами, при этом умеет ориентироваться в 1,5 эксабайта данных и 90 000 таблиц.

По словам команды, архитектура получилась на удивление простой.

Недавно OpenAI рассказала, как всё устроено под капотом:

• архитектура data-агента
• 6 уровней контекста, которые позволяют одной LLM уверенно работать с 90 000 таблиц
• 3 реальных сценария использования Codex внутри OpenAI
• 5 практических выводов для тех, кто строит собственных агентов под конкретную предметную область
• куда будет развиваться дата-платформа OpenAI дальше

Интересно, что главный вывод не про очередной сложный агентный фреймворк, а скорее про то, как далеко можно зайти с одной моделью, если правильно организовать контекст и инструменты.

👉 Java Portal
Post #2408 1.53K
Совет по Java: используйте StringBuilder вместо String для конкатенации строк в циклах.

String является неизменяемым (immutable), поэтому его использование в циклах, особенно больших, работает неэффективно.
StringBuilder является изменяемым (mutable) и оптимизирован для многократного добавления строк.

#SoftwareDevelopment

👉 Java Portal
Post #2406 1.55K
Java-совет: старайтесь избегать статических переменных, если они не хранят действительно глобальные значения.

Они усложняют тестирование, поскольку общий изменяемый state затрудняет изоляцию классов и делает тесты более зависимыми друг от друга.

👉 Java Portal
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →