Что делает аннотация @Transactional в Spring?
Anonymous Quiz
17%
Определяет транзакцию на уровне базы данных для всех методов
8%
Создает транзакцию на уровне пользовательского интерфейса
72%
Управляет транзакциями на уровне метода или класса
4%
Управляет сессией пользователя
#дайджест перед выходными
👩💻 Spring Boot 3.3: повышение производительности, безопасности и observability — Статья рассказывает о новых возможностях Spring Boot 3.3, включая улучшения производительности, безопасности и наблюдаемости. Обновление включает поддержку Class Data Sharing для быстрого запуска приложений, улучшенные настройки безопасности с JWT, поддержку Docker Compose и многое другое.
👩💻 Не используйте Lombok с JPA, пока не прочтете эту статью — Статья объясняет, почему использование библиотеки Lombok вместе с JPA может привести к различным проблемам, таким как некорректное сравнение сущностей, снижение производительности и даже ошибки выполнения. Автор делится конкретными примерами и рекомендациями, как правильно использовать Lombok с JPA, чтобы избежать этих проблем.
👩💻 Настройка почтового сервера Yandex spring boot — Статья подробно рассказывает, как настроить отправку электронной почты через Yandex с использованием Spring Boot. Автор описывает весь процесс — от создания пароля приложения до реализации класса для отправки писем.
👩💻 И опыт, сын ошибок трудных: обрабатываем ошибки в Spring Boot — Статья рассматривает способы обработки ошибок в Spring Boot, делая акцент на создании информативных ответов для пользовательских интерфейсов и интеграций. Автор делится своим опытом, подробно описывая различные подходы и инструменты, такие как исключения, аннотации и аспекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, друзья! 👋
Мы готовим статью о том, что делать, если вы наврали в резюме, и нам нужна ваша помощь! 🤔 Поделитесь своим опытом и мнением, а самые интересные и полезные советы мы обязательно включим в нашу статью.
❓ Сталкивались ли вы когда-нибудь с ситуацией, когда пришлось преувеличить свои навыки в резюме? Как вы с этим справились?
❓ Какой, по вашему мнению, самый эффективный способ исправить ситуацию, если вы немного приукрасили свое резюме?
❓ Как вы думаете, какая «ложь» в резюме может быть простительной, а какая — абсолютно недопустимой?
Не стесняйтесь делиться своими историями и мнениями в комментариях! 💬 Ваш опыт может помочь другим избежать подобных ситуаций или найти выход, если они уже в них оказались. Спасибо за участие!
Мы готовим статью о том, что делать, если вы наврали в резюме, и нам нужна ваша помощь! 🤔 Поделитесь своим опытом и мнением, а самые интересные и полезные советы мы обязательно включим в нашу статью.
❓ Сталкивались ли вы когда-нибудь с ситуацией, когда пришлось преувеличить свои навыки в резюме? Как вы с этим справились?
❓ Какой, по вашему мнению, самый эффективный способ исправить ситуацию, если вы немного приукрасили свое резюме?
❓ Как вы думаете, какая «ложь» в резюме может быть простительной, а какая — абсолютно недопустимой?
Не стесняйтесь делиться своими историями и мнениями в комментариях! 💬 Ваш опыт может помочь другим избежать подобных ситуаций или найти выход, если они уже в них оказались. Спасибо за участие!
Статья подробно объясняет, как использовать CompletableFuture в Java для создания асинхронного и параллельного кода. В ней рассматриваются ключевые аспекты, такие как создание, объединение задач, обработка исключений и жизненный цикл CompletableFuture. Если собираетесь освоить передовые техники работы с асинхронными операциями в Java и значительно улучшить производительность своего кода, эта статья будет полезна.
Читать статью.
Please open Telegram to view this post
VIEW IN TELEGRAM
Concurrency Deep Dives
A Guide to CompletableFuture - Concurrency Deep Dives
An in-depth practical guide to Java's CompletableFuture, covering all its concepts. Also contains insights on how it works internally.
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
💪🛠️ Прокачай свой бэкенд: 9 инструментов, которые стоит знать
От браузерной ИИ-песочницы PostgreSQL до суперскоростного валидатора email — обзор новейших инструментов, которые упростят вашу работу и повысят продуктивность.
Читать статью
От браузерной ИИ-песочницы PostgreSQL до суперскоростного валидатора email — обзор новейших инструментов, которые упростят вашу работу и повысят продуктивность.
Читать статью
Forwarded from Java jobs — вакансии для java-разработчиков
#дайджест #javadevjob
Вакансии Java разработчиков уровня Junior
▪️Java developer
Самара. Тим — системный интегратор полного цикла
Подробнее
▪️Java-разработчик
Москва. Gridnine Systems — IT решения, повышающие эффективность бизнеса наших клиентов
Подробнее
Вакансии Java разработчиков уровня Middle
▪️Java разработчик
Москва. DIGINETICA — разработка сфере искусственного интеллекта
Подробнее
▪️Backend-разработчик
Екатеринбург. Русофт — разработка, системная интеграция, инфраструктурных решений
Подробнее
Вакансии Java разработчиков уровня Senior
▪️Java-разработчик
Санкт-Петербург. НПП ТЕЛДА — разработка индивидуальных бизнес-решений
Подробнее
▪️Java Developer
Удаленка. TIQUM — разработка и внедрение ПО
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии Java разработчиков уровня Junior
▪️Java developer
Самара. Тим — системный интегратор полного цикла
Подробнее
▪️Java-разработчик
Москва. Gridnine Systems — IT решения, повышающие эффективность бизнеса наших клиентов
Подробнее
Вакансии Java разработчиков уровня Middle
▪️Java разработчик
Москва. DIGINETICA — разработка сфере искусственного интеллекта
Подробнее
▪️Backend-разработчик
Екатеринбург. Русофт — разработка, системная интеграция, инфраструктурных решений
Подробнее
Вакансии Java разработчиков уровня Senior
▪️Java-разработчик
Санкт-Петербург. НПП ТЕЛДА — разработка индивидуальных бизнес-решений
Подробнее
▪️Java Developer
Удаленка. TIQUM — разработка и внедрение ПО
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
samara.hh.ru
Вакансия Junior Java developer в Самаре, работа в компании TEAMSCORE (вакансия в архиве c 29 августа 2024)
Зарплата: не указана. Самара. Требуемый опыт: не требуется. Полная занятость. Дата публикации: 26.08.2024.
Эта статья представляет 10 Java-библиотек, которые могут кардинально изменить ваш подход к программированию. Вы узнаете, как такие инструменты, как Lombok, Jackson и Apache Commons, могут существенно упростить ваш код, улучшить его производительность и сделать разработку более эффективной. Если вы хотите узнать, как сделать свой код чище и функциональнее, эта статья станет отличным гидом в мир передовых Java-библиотек.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека программиста
☕📦 10 Java-библиотек, которые изменят твой код навсегда
Из этой статьи вы узнаете о ключевых возможностях 10 популярных библиотек для Java: работа с коллекциями, строками, JSON, логами, датами и временем и многое другое.
Используете ли вы VPN?
Anonymous Poll
14%
Нет, мне лень
29%
Очень редко по особым случаям
40%
Регулярно
17%
Почти не выключаю/каждый день
🔍 Что такое ElasticSearch
ElasticSearch — это распределенная поисковая система с открытым исходным кодом, которая позволяет быстро и эффективно обрабатывать и анализировать большие объемы данных. Она идеально подходит для приложений, требующих гибкости в поиске и высокой скорости обработки запросов. Благодаря интеграции с Kibana и Logstash, ElasticSearch становится мощным инструментом для мониторинга и анализа данных в реальном времени.
📌 Use cases:
▪️ Мгновенный поиск по большим объемам данных
▪️ Гибкая схема индексации и поиска
▪️ Легкость в масштабировании и интеграции
ElasticSearch — это распределенная поисковая система с открытым исходным кодом, которая позволяет быстро и эффективно обрабатывать и анализировать большие объемы данных. Она идеально подходит для приложений, требующих гибкости в поиске и высокой скорости обработки запросов. Благодаря интеграции с Kibana и Logstash, ElasticSearch становится мощным инструментом для мониторинга и анализа данных в реальном времени.
▪️ Мгновенный поиск по большим объемам данных
▪️ Гибкая схема индексации и поиска
▪️ Легкость в масштабировании и интеграции
Please open Telegram to view this post
VIEW IN TELEGRAM
Укажите верный порядок дефолтных портов для программ: Tomcat, PostgreSQL, Redis, Kafka
Anonymous Quiz
5%
5432, 9092, 8080, 6379
9%
8080, 6379, 5432, 9092
3%
9092, 6379, 8080, 5432
82%
8080, 5432, 6379, 9092
2%
6379, 9092, 8080, 5432
📶 Паттерны коммуникации в распределенных системах
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
👨💻 Подробнее читайте в статье.
📨 Материал взят из нашей еженедельной email-рассылки, посвященной бэкенду. Подпишитесь, чтобы быть в числе первых, кто получит дайджест.
Распределенные системы состоят из многих отдельных частей/узлов, работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое.
Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.
☑️ Запрос-ответ с HTTP
Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.
☑️ Общие данные
Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.
Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.
☑️ Асинхронный запрос-ответ
В отличие от синхронного подхода, запрос-ответ может быть реализован асинхронно и без блокировки. В этом случае получающий сервис должен явно знать место назначения для отправки ответа. Для реализации этого паттерна идеально подходят очереди сообщений, которые позволяют буферизовать несколько запросов.
Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.
☑️ Коммуникация на основе событий
В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.
Этот паттерн идеально подходит для создания слабосвязанных взаимодействий между сервисами. Однако брокер сообщений должен обеспечивать надежную доставку событий, их упорядочивание и согласованность. Кроме того, добавляется дополнительный компонент в систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Вам наверняка понравится этот инструмент, если работаете с JSON 👇
Вложенные JSON-файлы часто сложно читать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML.
Вложенные JSON-файлы часто сложно читать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML.
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Что такое абстрактные классы?
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
Какое значение propagation позволяет выполнить метод в новом контексте транзакции, независимо от того, была ли начата транзакция ранее?
Anonymous Quiz
4%
SUPPORTS
73%
REQUIRES_NEW
12%
MANDATORY
11%
REQUIRED
Ситуация, когда несколько потоков пытаются одновременно читать и записывать общие данные, что приводит к непредсказуемым результатам.
Пример: Представьте, что два человека пытаются одновременно снять деньги с одного банковского счета. Без должной координации они могут снять больше денег, чем доступно на счете.
Ситуация, когда два или более потока застревают в ожидании друг друга для освобождения ресурсов, что приводит к тупиковой ситуации.
Пример: Два человека держат предметы, которые нужны друг другу, и оба ждут, пока другой первый отдаст свой предмет.
Ошибки, возникающие из-за неправильной обработки взаимодействия потоков, часто проявляющиеся как случайные проблемы.
Пример: Если два работника пишут в один и тот же файл без координации, их работа может перемешаться.
Основная проблема заключается в том, что сигнал на прерывание лишь уведомляет поток о необходимости остановки, но сам поток должен обработать этот сигнал и завершить свою работу самостоятельно.
Пример: Если вам нужно, чтобы рабочий остановился, вы посылаете ему сигнал "стоп". Но нет гарантий, что это случится.
Ситуация, когда разные потоки имеют устаревшее или несогласованное представление о разделяемой памяти.
Пример: Если один человек обновляет общий документ, а другие видят старую версию, они могут работать с неверной информацией.
Ситуация, когда несколько потоков конкурируют за один и тот же ограниченный ресурс, что приводит к задержкам.
Пример: Если несколько работников одновременно пытаются воспользоваться одним принтером, им приходится ждать своей очереди.
Ситуация, когда потоку постоянно отказывают в доступе к ресурсам из-за приоритета других потоков.
Пример: Если одного работника постоянно обходят вниманием в пользу других, он никогда не сможет выполнить свою работу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение через equals() и ==
▪️ "==" используется для сравнения примитивных типов данных (например, int, char, boolean), проверяя, равны ли их значения. Однако, когда речь идет об объектах, "==" сравнивает их ссылки, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.
▪️ Метод equals(), в свою очередь, предназначен для сравнения содержимого объектов. Это значит, что equals() проверяет, эквивалентны ли сами данные, хранящиеся в двух объектах, а не то, ссылаются ли они на одно и то же место в памяти.
Используйте == для сравнения примитивов и ссылок на объекты, когда вам важно знать, являются ли они одной и той же сущностью. Для сравнения содержимого объектов всегда применяйте equals().
▪️ "==" используется для сравнения примитивных типов данных (например, int, char, boolean), проверяя, равны ли их значения. Однако, когда речь идет об объектах, "==" сравнивает их ссылки, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.
▪️ Метод equals(), в свою очередь, предназначен для сравнения содержимого объектов. Это значит, что equals() проверяет, эквивалентны ли сами данные, хранящиеся в двух объектах, а не то, ссылаются ли они на одно и то же место в памяти.
Используйте == для сравнения примитивов и ссылок на объекты, когда вам важно знать, являются ли они одной и той же сущностью. Для сравнения содержимого объектов всегда применяйте equals().