Java Books
14.3K subscribers
218 photos
13 videos
269 files
270 links
Java Библиотека

По всем вопросам- @notxxx1

@ai_machinelearning_big_data - machine learning

@pythonl - Python

@itchannels_telegram - 🔥 best it channels

@ArtificialIntelligencedl - AI

@pythonlbooks-📚

@programming_books_it -it 📚

№ 5032728887
Download Telegram
🔥 Полезная подборка каналов только код, практика и самые передовые инструменты, которые используют разработчики прямо сейчас.👇

🖥 ИИ: t.me/ai_machinelearning_big_data

🖥 Python: t.me/pythonl

🖥 Linux: t.me/linuxacademiya

🖥 C++ t.me/cpluspluc

🖥 Docker: t.me/DevopsDocker

🖥 Хакинг: t.me/linuxkalii

🖥 Devops: t.me/DevOPSitsec

👣 Golang: t.me/Golang_google

🖥 Аналитика: t.me/data_analysis_ml

🖥 Javascript: t.me/javascriptv

🖥 C#: t.me/csharp_ci

🖥 Java: t.me/javatg

🖥 Базы данных: t.me/sqlhub

👣 Rust: t.me/rust_code

🤖 Технологии: t.me/vistehno

💰 Экономика и инвестиции в ИИ t.me/financeStable

💼 Актуальные вакансии: t.me/addlist/_zyy_jQ_QUsyM2Vi


🖥Подборка по Golang: https://xn--r1a.website/addlist/MUtJEeJSxeY2YTFi
⚡️ Лучшие ИИ ресурсы: https://xn--r1a.website/addlist/2Ls-snqEeytkMDgy

Max ИИ: https://max.ru/ai_machinelearning_big_data
Max Ml: https://max.ru/vistehno
Max python: https://max.ru/pythonl
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Max Java: https://max.ru/javatg
Max Sql: https://max.ru/sqlhub
Max Devops: https://max.ru/DevOPSitsec
Анализ данных: https://max.ru/data_analysis_ml
C++ : https://max.ru/cpluspluc
C#: https://max.ru/csharp_ci

🖥 Chatgpt бот в тг: t.me/Chatgpturbobot
📚 Бесплатные ит-книги: https://xn--r1a.website/addlist/HwywK4fErd8wYzQy
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2😁1
Forwarded from Java
🚀 Java 26 стала умнее — особенно в pattern matching

Теперь работа с pattern matching выражениями стала заметно стабильнее и предсказуемее

Что улучшили:

🟢 Более надёжный type inference
компилятор лучше понимает типы в сложных условиях

🟢 Меньше edge-case ошибок
меньше неожиданных падений и предупреждений

🟢 Консистентное поведение
одинаковая логика в if и switch

Что это даёт на практике:

раньше при усложнении условий
компилятор мог “теряться”

теперь:
- анализ потока стал умнее
- переменные из pattern matching корректно распознаются
- код становится чище и безопаснее

Java становится всё ближе к современным языкам
с удобным и предсказуемым контролем типов

#Java #JavaDev

⚡️ Полезные ресурсы по Java 🚀 Max

@javatg
5👍2🔥1😁1
🚀 Spring Boot: не делай эту ошибку с filters / interceptors

Многие используют фильтры и интерцепторы неправильно 👇

👉 Они должны быть только для cross-cutting задач
(то, что применяется ко ВСЕМ запросам)

Примеры нормального использования:

🟢 Filters:
- CORS
- Encoding

🟢 Interceptors:
- аутентификация / авторизация
- метрики / логирование
- locale
- общие headers

Главная ошибка:

кладут туда бизнес-логику

Например:
- запрос в БД
- проверка подписки
- сложная логика

Почему это плохо:

- выполняется на КАЖДЫЙ запрос
- создаёт лишнюю нагрузку
- ломает архитектуру
- усложняет тестирование

📉 Итог:

interceptor превращается в «мусорный слой»

💡 Как правильно:

- бизнес-логика → в сервисах
- контроллеры → orchestration

⚡️ Полезные ресурсы по Java 🚀 Max
7👍6🔥4
🧠 Можно ли переопределить getClass() в Java?

Нет, нельзя.
Метод getClass() в java.lang.Object объявлен так:


public final native Class<?> getClass();


📌 Почему:

- final — запрещает переопределение в наследниках.
- native — реализован в JVM, а не на Java.
- Гарантирует, что при вызове obj.getClass() всегда вернётся реальный класс объекта, без подмен и сюрпризов.

💡 Если хотите вернуть “свой” тип, делайте отдельный метод:


class MyClass {
public String getTypeName() {
return "CustomType";
}
}


⚠️ Переопределяемый getClass() сломал бы рефлексию, сериализацию и кучу системных механизмов. Именно поэтому Java защищает его.

⚡️ Полезные ресурсы по Java 🚀 Max
9👍6🔥2
🔥 Лучшие БЕСПЛАТНЫЕ ресурсы по Linux в 2026 году

1. Linux Foundation Training
https://training.linuxfoundation.org/training/introduction-to-linux/

2. Linux Journey
https://linuxjourney.com

3. Ubuntu Tutorials
https://ubuntu.com/tutorials

4. Red Hat Training Resources
https://developers.redhat.com/learn

5. Документация GNU
https://gnu.org/manual

6. OverTheWire Bandit (Linux-варгеймы)
https://overthewire.org/wargames

7. Книга The Linux Command Line
https://linuxcommand.org/tlcl.php

8. MIT Missing Semester (Linux и CLI)

https://missing.csail.mit.edu

9. Туториалы по Linux от DigitalOcean
https://digitalocean.com/community/tutorials

10. Linux From Scratch
https://linuxfromscratch.org

11. Arch Linux Wiki
https://wiki.archlinux.org

12. Курс по Linux от freeCodeCamp
https://freecodecamp.org/news/tag/linux

13. Linux Survival (интерактивное обучение)
https://linuxsurvival.com

14. NDG Linux Essentials
https://netacad.com/courses/os-it/ndg-linux-essentials

15. Bash Guide (руководство по Bash)
https://tldp.org/LDP/Bash-Beginners-Guide/html
6
🚀 Java - regex без боли

Нашли интересную библиотеку - Sift. Она заменяет весь этот ад с регулярками на нормальный fluent API.

Теперь вместо нечитаемых строк вида:
^[0-9a-fA-F]{6}$

Пишешь код, который реально понимаешь:
.char('#')
.then()
.exactly(6)
.hexDigits()

📌 Что это дает:
- Читаемый и понятный код
- Меньше ошибок в regex
- Быстрее разработка и поддержка

По сути — это как “переводчик” с языка регулярных выражений на человеческий Java-код.

Если когда-нибудь ломал голову над regex -это прям must-have.

#Java #JavaDev
9👍5🤔2
⚡️ Java лайфхак: не убивай производительность боксингом

Многие даже не замечают, как теряют скорость из-за автoboxing в Stream API.

Плохо (создаются объекты Integer):
Stream<Integer> boxed = Stream.of(1, 2, 3, 4, 5);
int sum = boxed.reduce(0, Integer::sum);

Каждое число → объект → лишняя память + нагрузка на GC

Хорошо (работа с примитивами):
int sum = IntStream.of(1, 2, 3, 4, 5).sum();

Без лишних объектов. Быстрее. Чище.

Запомни:
- IntStream → для int
- LongStream → для long
- DoubleStream → для double

Если работаешь с числами — всегда используй primitive streams.

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

Сохрани, чтобы не писать медленный код.
7👍5🔥2
📌 Нашли 15 сайтов с миллионами бесплатных книг

Это не просто подборка, а реально огромные библиотеки
от художки до научных статей, диссертаций и учебников.

И главное
базы постоянно обновляются

planetebook.com
oceanofpdf.com
freecomputerbooks.com
zlibrary.to
bookboon.com
gutenberg.org
manybooks.net
pdfdrive.com
digilibraries.com
openlibrary.org
standardebooks.org
librivox.org
getfreeebooks.com
authorama.com

Если читаешь и прокачиваешься
сохрани, пригодится
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
Spring Boot может уронить API из-за одного лишнего поля в JSON

Классика: приходит запрос с дополнительным полем, которого нет в DTO и ты ловишь UnrecognizedPropertyException. Клиент добавил поле, ты не обновил модель - всё падает.

Решение в одну строку:


@JsonIgnoreProperties(ignoreUnknown = true)
public class UserDTO {
private String name;
private int age;
}


Теперь Jackson просто игнорирует лишние поля вместо того, чтобы ломать приложение.

Полезно, когда API живёт долго, клиенты обновляются быстрее бэка, а ломать совместимость нельзя.
6👍6🔥1😁1
🚀 Ты всё ещё называешь обёртку над ChatGPT «AI-продуктом»?

Пока ты пишешь промпты - рынок уже ушёл дальше.

Сейчас выигрывают не те, кто умеет красиво формулировать запросы, а те, кто строит агентные системы:
- принимают решения сами
- ходят в API
- работают с Postgres и Redis
- управляют браузером через Playwright
- доводят задачи до результата без человека

И вот правда, о которой мало говорят:

90% таких систем умирают между ноутбуком и продом.

Работает локально. Ломается в реальности.
Нет архитектуры. Нет устойчивости. Нет деплоя.

AI Agents Engineering - курс со Stepik, который закрывает этот разрыв.

- LangGraph, AutoGen, Computer Use
- архитектура агентов, а не «скрипты на коленке»
- LLMOps, логирование, стабильность
- деплой в Docker и работа в проде

8 модулей, 120+ шагов, всё через практику.

На выходе не «сертификат ради галочки», а:
- рабочий production-агент
- понимание, как строить такие системы с нуля
- навыки, за которые уже платят

Сейчас самое окно входа.
Через полгода это станет базой, а не преимуществом.

Скидка 55% действует ещё 48 часов: https://stepik.org/a/276971/
5👍1🔥1
⚡️ Перестаём писать методы с 7+ параметрами

Если сигнатура выглядит как:

createUser(firstName, lastName, email, phone, address, city, country)

Это уже сигнал, что модель данных развалилась.

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

Нормальный вариант - собрать связанные данные в объект:

UserInfo userInfo

Получаем:

- чище API
- проще добавлять поля
- меньше ошибок при передаче параметров
- код начинает отражать доменную модель, а не список строк

Это базовый приём, но именно на нём чаще всего экономят, а потом платят сложностью.
11👎3👍21🔥1
👣 На Stepik обновили курс «Rust: полный курс разработчика. С нуля до профи»

Представьте: через три месяца вы открываете чужой Rust-код и читаете его как книгу.

Arc<Mutex<T>> не вызывает панику. impl Future не пугает. Вы точно знаете, почему компилятор ругается и как это починить за 10 секунд.

Это не фантазия. Это результат 50 уроков, в которых каждая концепция объясняется через код и закрепляется практикой.

Ownership, traits, generics, async, unsafe - всё, что казалось магией, станет рабочим инструментом.

А бонусом - портфолио проектов: от CLI-утилит до REST API и WebAssembly.

Вы и так знаете, что Rust - ваш следующий язык. Этот курс просто сделает это реальностью.

Сегодня - 55% процентов от цены, торопись: https://stepik.org/a/269250/
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1
⚡️ CORS в Spring Boot: не лечите это костылями на фронте

Если frontend и backend живут на разных доменах или портах, браузер начнет резать запросы по CORS. Это не баг Spring Boot и не проблема React. Это нормальный механизм безопасности браузера.

Правильный способ - настроить CORS на стороне backend.

В Spring Boot это можно сделать глобально через WebMvcConfigurer: указать маршруты, разрешенные origins, HTTP-методы, заголовки и работу с credentials.

Главное - не ставить бездумно * везде подряд, особенно если используете cookies, токены или allowCredentials(true). В проде лучше явно перечислять доверенные домены, например frontend-домен приложения.

Такой подход дает централизованный контроль: вы один раз задаете политику CORS и не размазываете настройки по каждому контроллеру.

Для Java backend-разработчика это базовая, но важная вещь: CORS должен быть частью архитектуры API, а не случайной правкой перед деплоем.
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥1
Небольшой, но полезный совет для Spring Boot.

Если у вас есть scheduled task, не стоит хардкодить интервал прямо в аннотации:


`@Scheduled(fixedRate = 5000)`


Лучше вынести значение в конфиг:


`@Scheduled(fixedRateString = "${task.interval}")`


А в application.properties указать:


`task.interval=5000`


Почему так лучше:

• интервал можно менять без правки кода;
• настройки проще различать для dev, staging и production;
• меньше магических чисел в бизнес-логике;
• конфигурация становится прозрачнее.

Мелочь, но именно из таких мелочей и складывается нормальная поддерживаемость Spring Boot-проекта.
👍107
🔴 Завтра тестовое собеседование с Java-разработчиком

13 мая(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Виктор Анохин, старший разработчик из WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Виктор будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Виктору

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир →
@shortcut_sh_bot

Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
4
N+1 в Spring Boot выглядит безобидно, пока прод не начинает молиться на базу данных.

Классический сценарий:

Вы грузите список заказов:

orderRepository.findAll()

А потом в цикле обращаетесь к order.getItems().

Hibernate сначала делает один запрос за заказами, а потом ещё по одному запросу на каждый заказ, чтобы достать items.

100 заказов = 101 SQL-запрос.

И вот здесь спасает @EntityGraph.

Он позволяет явно сказать репозиторию, какие связи нужно подтянуть сразу:

@EntityGraph(attributePaths = {"items"})

В итоге Hibernate может сгенерировать один запрос с JOIN, вместо десятков лишних походов в базу.

Что получаем:

- меньше SQL-запросов
- меньше нагрузки на БД
- чище код репозитория
- без ручного JPQL
- fetch-стратегия управляется точечно под конкретный кейс

LAZY сам по себе не зло. Зло - когда вы не контролируете, где и как он срабатывает.

@EntityGraph - один из самых простых способов держать N+1 под контролем в Spring Boot.
12👍4
Spring Boot: уберите try/catch из контроллеров

В Spring Boot не нужно размазывать обработку ошибок по каждому endpoint через бесконечные try/catch.

Для этого есть @RestControllerAdvice.

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

Например:


@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<?> handleNotFound(ResourceNotFoundException ex) {
return ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse("NOT_FOUND", ex.getMessage()));
}

@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<?> handleBadRequest(IllegalArgumentException ex) {
return ResponseEntity
.badRequest()
.body(new ErrorResponse("BAD_REQUEST", ex.getMessage()));
}

@ExceptionHandler(Exception.class)
public ResponseEntity<?> handleGeneric(Exception ex) {
return ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("INTERNAL_ERROR", "Something went wrong"));
}
}


После этого контроллер может выглядеть спокойно:


@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}


Если пользователь не найден - сервис кидает ResourceNotFoundException, а Spring сам отправит нормальный 404.

Что это даёт:

• меньше мусора в контроллерах
• единый формат ошибок
• проще поддерживать API
• легче логировать исключения
• меньше копипасты в endpoint-ах

Контроллер должен описывать сценарий запроса, а не превращаться в свалку обработки ошибок.
5👍2🥰1
Твой код — в сердце мощного ИИ! 💚

Команда GigaChat зовёт на One Day Offer амбициозных Java-разработчиков, которые готовы создавать AI‑продукты уровня BigTech и стать частью крупнейшего AI-комьюнити.

Если ты дружишь с Java (версии 8–25), ладишь со Spring и Hibernate, а PostgreSQL и ClickHouse для тебя — не просто слова, переходи по ссылке и занимай слот на One Day Offer.

Встречаемся 23 мая — очень ждём именно тебя!
3
Forwarded from Java
N+1 в Spring Boot выглядит безобидно, пока прод не начинает молиться на базу данных.

Классический сценарий:

Вы грузите список заказов:

orderRepository.findAll()

А потом в цикле обращаетесь к order.getItems().

Hibernate сначала делает один запрос за заказами, а потом ещё по одному запросу на каждый заказ, чтобы достать items.

100 заказов = 101 SQL-запрос.

И вот здесь спасает @EntityGraph.

Он позволяет явно сказать репозиторию, какие связи нужно подтянуть сразу:

@EntityGraph(attributePaths = {"items"})

В итоге Hibernate может сгенерировать один запрос с JOIN, вместо десятков лишних походов в базу.

Что получаем:

- меньше SQL-запросов
- меньше нагрузки на БД
- чище код репозитория
- без ручного JPQL
- fetch-стратегия управляется точечно под конкретный кейс

LAZY сам по себе не зло. Зло - когда вы не контролируете, где и как он срабатывает.

@EntityGraph - один из самых простых способов держать N+1 под контролем в Spring Boot.
2