Forwarded from Библиотека собеса по Java | вопросы с собеседований
Serial GC — это
🔹 Как работает
🔹 Когда использовать
—
—
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Кто-то считает, что вежливость — базовый навык общения даже с машиной. Кто-то уверен, что железяке безразличны ваши манеры.
Пишете ли вы "Спасибо" и "Пожалуйста" AI? Что в целом думаете на этот счёт?
Please open Telegram to view this post
VIEW IN TELEGRAM
Java захватывает территорию Python на поле искусственного интеллекта — и в корпоративном секторе сопротивление может оказаться бесполезным, считают опрошенные порталом The New Stack эксперты.
Саймон Риттер, заместитель технического директора компании Azul Systems, утверждает, что 2025-й может стать последним годом господства Python в сфере ИИ. По его словам, исследования показывают, что в течение ближайших 18 месяцев Java может обогнать Python в разработке ИИ-приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотация @Transactional — мощный инструмент, но ее неправильное использование может привести к незаметным, но критическим ошибкам: потерянные данные, неожиданные откаты или вовсе отсутствие транзакции. Разбираем частые ошибки и их решения.
Если вызываете транзакционный метод внутри того же класса (this.method()), Spring-прокси не срабатывает, и транзакция не создается.
@Service
public class OrderService {
@Transactional
public void createOrder() {
saveOrder(); // Вызов внутреннего метода - транзакция НЕ создается!
}
private void saveOrder() {
// Сохранение заказа
}
}
— Решение: вынести метод в другой Spring-бин.
Spring AOP работает через прокси, а прокси не видит private-методы. В результате @Transactional в таких методах просто игнорируется.
@Transactional
private void saveData() { // Транзакция НЕ будет работать!
repository.save(entity);
}
— Решение: метод должен быть public и вызываться через другой Spring-бин
Уровень распространения (propagation) определяет, как транзакция будет вести себя относительно уже существующих транзакций. Выбор значения по умолчанию (REQUIRED) подходит в большинстве случаев, но в сложных сценариях важно понимать, как работают другие варианты:
— REQUIRED использует текущую транзакцию, если она есть, иначе создаёт новую.
— REQUIRES_NEW всегда создаёт новую транзакцию, независимо от текущей (может привести к неожиданным коммитам).
— NESTED создаёт вложенную транзакцию, которая откатывается отдельно от родительской.
— SUPPORTS использует существующую транзакцию, но не требует её (если транзакции нет, работает без неё).
— NOT_SUPPORTED выполняет код вне транзакции, даже если она уже существует.
— NEVER гарантирует, что код выполняется только вне транзакции, иначе выбрасывает исключение.
— MANDATORY требует, чтобы код выполнялся внутри уже существующей транзакции, иначе выбрасывает исключение.
Spring по умолчанию откатывает транзакции только при RuntimeException, а CheckedException (например, SQLException) его не прерывает. Однако изменение этого поведения требует осторожности.
@Transactional
public void updateUser() throws IOException { // CheckedException не откатит транзакцию!
userRepository.save(user);
throw new IOException("Ошибка ввода-вывода");
}
— Решение: указать rollbackFor = Exception.class, если хотите откатывать и CheckedException.
Spring сначала коммитит транзакцию, а потом отправляет HTTP-ответ. Если после коммита возникнет ошибка (например, сеть упала), клиент может получить 500, но изменения уже сохранены.
— Решение: транзакции должны быть в сервисах, а не в контроллерах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека питониста | Python, Django, Flask
📝 Структуры данных: ТОП-30 вопросов и ответов для собеседований в 2025 году
Техническое собеседование на позицию разработчика, дата-сайентиста и ML-инженера часто включает вопросы по структурам данных и связанным с ними алгоритмами.
В нашей статье мы рассмотрим базовые и продвинутые темы, разберем типичные задачи и обсудим оптимальные способы их решения.
📄 Прочитайте статью и укрепите свои знания — https://proglib.io/sh/1uYAygzIxr
Библиотека питониста
Техническое собеседование на позицию разработчика, дата-сайентиста и ML-инженера часто включает вопросы по структурам данных и связанным с ними алгоритмами.
В нашей статье мы рассмотрим базовые и продвинутые темы, разберем типичные задачи и обсудим оптимальные способы их решения.
📄 Прочитайте статью и укрепите свои знания — https://proglib.io/sh/1uYAygzIxr
Библиотека питониста
Все знают
Ctrl + Alt + L
(форматирование кода), но мало кто знает это сочетание:—
Ctrl + Alt + Shift + L
→ Гибкое форматирование🔹 Зачем это нужно
— Позволяет выбрать, что именно форматировать: весь файл, выделенный код или даже только измененные строки.
— Можно отключить автоформатирование аннотаций, импортов или пробелов, если не хотите, чтобы IDEA ломала ваш стиль.
— Полезно, если работаете в команде с жесткими code style правилами, можно форматировать только нужные части, не трогая остальной код.
🔹 Дополнительные трюки
— Выделите код, затем
Ctrl + Alt + Shift + L
, чтобы форматировать только его.— Используйте Settings → Editor → Code Style, чтобы настроить форматирование под себя.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите под рукой этот чек-лист, чтобы избежать проблем с многопоточностью и повысить производительность кода:
🔹 Синхронизация
✓ Избегайте synchronized для долгих операций
✓ Используйте ReentrantLock для гибкой блокировки
✓ Следите за возможностью deadlock
🔹 Исполнители (Executors)
✓ FixedThreadPool подходит, когда количество потоков заранее известно и ограничено
✓ CachedThreadPool динамически создает потоки, но может привести к их неконтролируемому росту
✓ ForkJoinPool для задач, разбиваемых на подзадачи
🔹 Коллекции и очереди
✓ ConcurrentHashMap потокобезопасная альтернатива HashMap, но не подходит для сценариев с частыми изменениями
✓ BlockingQueue для потокобезопасных очередей
✓ CopyOnWriteArrayList хорош при редких изменениях списка, но ⚠️ медленный при частых модификациях (из-за копирования)
🔹 Работа с Future & CompletableFuture
✓ Используйте CompletableFuture для асинхронных операций вместо Future
✓ thenApply() и thenCompose() позволяют строить цепочки вызовов без блокировки
✓ exceptionally() для обработка ошибок без использования try-catch в коде
Автоматизируйте проверку кода с помощью FindBugs, SonarQube и Checkstyle.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите узнать, какие фичи принесёт релиз Java 24 и как они повлияют на вашу разработку? Тогда это видео — must-watch 🎥
Никола Поллок, разработчик Java в Oracle, рассказывает о самых свежих изменениях в экосистеме Java:
— AOT-компиляция
— Виртуальные потоки
— Новые API для работы с байт-кодом и потоками
— GGC и ZGC
Лекция поможет быть в курсе последних трендов и нововведений Java, которые помогут оптимизировать код, улучшить производительность и использовать новые инструменты на полную.
Please open Telegram to view this post
VIEW IN TELEGRAM
🐧 Пингвин, покоривший мир: история взлета Linux – ОС, управляющей 96% серверов
В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.
➡️ Читать статью
➡️ Зеркало
В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.
➡️ Читать статью
➡️ Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
— Убирает тонны шаблонного кода (геттеры, сеттеры, toString(), equals(), hashCode()).
— Делает код компактнее и читабельнее.
— Ускоряет разработку, снижает когнитивную нагрузку.
— Скрывает важную логику, что усложняет отладку и поддержку.
— Добавляет магию и делает код зависимым от нестандартных аннотаций.
— Может вызывать проблемы с сериализацией и совместимостью при обновлениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 JEP-ы в фокусе:
— JEP 450: компактные заголовки объектов
JEP направлен на уменьшение размера заголовков объектов с 96–128 до 64 бит на 64-битных платформах, перешел в статус Proposed to Target. Это изменение обещает снизить объем используемой кучи и повысить эффективность работы приложений.
— JEP 484: API для файлов классов
В JDK 24 планируется внедрение JEP 484, который предоставит стандартный API для обработки файлов классов.
🔹 Релизы:
— Выпуск IntelliJ IDEA 2024.3 EAP 5: gоддержка функций Kotlin 2.1, улучшенная подсветка выделенных слов во всем файле, новые иконки и другое.
— Kora 1.1.20: улучшения и исправления способов настройки компонентов gRPC, ошибок обработки Cassandra UDT типа для списков, работа дискриминаторов моделей в OpenAPI-генераторе
— Native Build Tools 0.10.5: поддержка единого reachability-metadata.json, исправление ошибки Gradle-плагина.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 @Transactional — оборачивает метод в транзакцию
@Transactional
public void saveData(Entity entity) {
repository.save(entity);
}
Автооткат при исключениях, но не ловит checked-исключения без rollbackFor = Exception.class.
🔹 @Async — делает метод асинхронным
@Async
public CompletableFuture<String> fetchData() {
return CompletableFuture.completedFuture("Hello");
}
Использует TaskExecutor, но не забываем про конфиг @EnableAsync.
🔹 @RestControllerAdvice — глобальный хендлер ошибок
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleException(RuntimeException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
Вместо тонны try-catch обрабатываем ошибки централизованно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Java | тесты, код, задания
Как Spring обрабатывает исключения в @Transactional методе?
Anonymous Quiz
46%
Любое исключение приводит к откату транзакции
8%
Транзакция не откатывается автоматически, если не вызвать TransactionStatus.setRollbackOnly()
40%
Транзакция откатывается только при возникновении RuntimeException или Error
3%
Spring создаёт новую транзакцию при каждом исключении, чтобы попытаться выполнить операцию повторно.
4%
Если метод @Transactional выбрасывает исключение, Spring закрывает весь контекст приложения.
❗️Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩💊 Алгоритмическая самоуспокоенность: как мы разучились думать своей головой
Каждый день мы сталкиваемся с бесконечным потоком информации, которая не просто наполняет наш день, а управляет нашими мыслями. Социальные сети, алгоритмы и вечная гонка за вниманием приводят к тому, что мы забываем, как думать собственной головой.
Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.
Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.
🔗 Подробнее в статье
🐸 Библиотека джависта
Каждый день мы сталкиваемся с бесконечным потоком информации, которая не просто наполняет наш день, а управляет нашими мыслями. Социальные сети, алгоритмы и вечная гонка за вниманием приводят к тому, что мы забываем, как думать собственной головой.
Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.
Если вы хотите вернуться к осознанному подходу в восприятии мира и научиться фильтровать контент, то эта тема точно для вас.
Please open Telegram to view this post
VIEW IN TELEGRAM