😶🌫️😶🌫️ Изоляция в тестах с Kafka
Опыт запуска Kafka в тестовых сценариях достиг высокого уровня удобства благодаря использованию Testcontainers и улучшенной поддержке в Spring Boot 3.1 с помощью аннотации @ServiceConnection. Однако написание и поддержка интеграционных тестов с Kafka по-прежнему представляют собой вызов.
В статье описывается подход, который значительно упрощает процесс тестирования, обеспечивая изоляцию тестов и предоставляя набор инструментов для достижения этой цели. При успешной реализации изоляции, тесты с Kafka могут быть организованы так, что на этапе проверки результатов обеспечивается полный доступ ко всем сообщениям, возникшим в ходе теста, избегая при этом необходимости в использовании методов принудительного ожидания, таких как Thread.sleep()
Читать статью
#туториал
Опыт запуска Kafka в тестовых сценариях достиг высокого уровня удобства благодаря использованию Testcontainers и улучшенной поддержке в Spring Boot 3.1 с помощью аннотации @ServiceConnection. Однако написание и поддержка интеграционных тестов с Kafka по-прежнему представляют собой вызов.
В статье описывается подход, который значительно упрощает процесс тестирования, обеспечивая изоляцию тестов и предоставляя набор инструментов для достижения этой цели. При успешной реализации изоляции, тесты с Kafka могут быть организованы так, что на этапе проверки результатов обеспечивается полный доступ ко всем сообщениям, возникшим в ходе теста, избегая при этом необходимости в использовании методов принудительного ожидания, таких как Thread.sleep()
Читать статью
#туториал
ServletContext
Интерфейс, предоставляющий методы для взаимодействия с контекстом сервлета. Контекст сервлета — это область, в которой работает сервлет, и предоставляет средства для обмена данными между сервлетами, а также для доступа к различным ресурсам, таким как файлы, базы данных и другие.
Некоторые из основных методов ServletContext:
getInitParameter(String name): возвращает значение инициализационного параметра сервлета, указанного по имени.
getInitParameterNames(): возвращает имена всех инициализационных параметров сервлета.
getAttribute(String name): возвращает значение атрибута, сохраненного в контексте сервлета по имени.
setAttribute(String name, Object object): устанавливает значение атрибута в контексте сервлета.
getRequestDispatcher(String path): возвращает объект RequestDispatcher, который используется для включения другого ресурса (например, другого сервлета или JSP-страницы) в текущий запрос.
getRealPath(String path): преобразует виртуальный путь в абсолютный путь на сервере.
Интерфейс, предоставляющий методы для взаимодействия с контекстом сервлета. Контекст сервлета — это область, в которой работает сервлет, и предоставляет средства для обмена данными между сервлетами, а также для доступа к различным ресурсам, таким как файлы, базы данных и другие.
Некоторые из основных методов ServletContext:
getInitParameter(String name): возвращает значение инициализационного параметра сервлета, указанного по имени.
getInitParameterNames(): возвращает имена всех инициализационных параметров сервлета.
getAttribute(String name): возвращает значение атрибута, сохраненного в контексте сервлета по имени.
setAttribute(String name, Object object): устанавливает значение атрибута в контексте сервлета.
getRequestDispatcher(String path): возвращает объект RequestDispatcher, который используется для включения другого ресурса (например, другого сервлета или JSP-страницы) в текущий запрос.
getRealPath(String path): преобразует виртуальный путь в абсолютный путь на сервере.
🍍Подборка лучших статей «Библиотеки программиста» за февраль: сохраняй в заметки, чтобы не пропустить #самыйсок
😈 Даркнет: как устроен теневой рынок труда
🚀🏢 Стартапы vs IT-гиганты: куда лучше устроиться Junior-разработчику
🗄️ Базовые запросы SQL: получение записей из БД
🥇 Спортивная мотивация и мотивация в IT, что общего?
😺🐙💡 Как сделать креативный профиль на GitHub
🎮👨💻 15 игр, которые научат программированию
🧑🏻🏫 Менторство в IT: как стать айтишником, найти работу мечты и облегчить себе жизнь
⛩️ 6 способов нестандартно войти в Айти
📈 5 трендов в подборе ИТ-специалистов на 2024 год
🐍⛓️ Цепи Маркова: генерирование читабельной бессмыслицы за 20 строк на Python
☕📦 10 Java-библиотек, которые изменят твой код навсегда
🐱🎨🙏🤖 10 самых странных языков программирования, о которых вы никогда не слышали
😈 Даркнет: как устроен теневой рынок труда
🚀🏢 Стартапы vs IT-гиганты: куда лучше устроиться Junior-разработчику
🗄️ Базовые запросы SQL: получение записей из БД
🥇 Спортивная мотивация и мотивация в IT, что общего?
😺🐙💡 Как сделать креативный профиль на GitHub
🎮👨💻 15 игр, которые научат программированию
🧑🏻🏫 Менторство в IT: как стать айтишником, найти работу мечты и облегчить себе жизнь
⛩️ 6 способов нестандартно войти в Айти
📈 5 трендов в подборе ИТ-специалистов на 2024 год
🐍⛓️ Цепи Маркова: генерирование читабельной бессмыслицы за 20 строк на Python
☕📦 10 Java-библиотек, которые изменят твой код навсегда
🐱🎨🙏🤖 10 самых странных языков программирования, о которых вы никогда не слышали
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Агрегация
Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.
Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.
Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
Forwarded from Книги для джавистов | Java
📚Quick Functional Programming (2023)
✍️Автор: David Matuszek
📃Страниц: 128
Функциональное программирование - это мощный инструмент, который вы можете использовать в дополнение ко всем своим обычным инструментам, в той мере, в какой ваш текущий основной язык поддерживает его. Большинство языков имеют хотя бы базовую поддержку.
Попробуйте функциональное программирование. Вы можете быть удивлены, насколько сильно один инструмент может помочь вам в повседневном программировании.
Скачать книгу
✍️Автор: David Matuszek
📃Страниц: 128
Функциональное программирование - это мощный инструмент, который вы можете использовать в дополнение ко всем своим обычным инструментам, в той мере, в какой ваш текущий основной язык поддерживает его. Большинство языков имеют хотя бы базовую поддержку.
Попробуйте функциональное программирование. Вы можете быть удивлены, насколько сильно один инструмент может помочь вам в повседневном программировании.
Скачать книгу
Forwarded from Книги для джавистов | Java
📚Pro Jakarta EE 10: Open Source Enterprise Java-based Cloud-native Applications Development (2023)
✍️Автор: Peter Späth
📃Страниц: 512
Эта книга поможет вам создавать более сложные корпоративные облачные и другие приложения на базе Java, которые могут работать в корпоративных и других критически важных средах.
Что внутри:
🔸Создавайте сложные приложения Jakarta EE
🔸Создайте рабочий процесс профессиональной разработки с помощью Jakarta EE
🔸Создавайте более продвинутые приложения для веб-разработки
🔸Работайте с более продвинутыми вспомогательными технологиями для повышения зрелости и стабильности приложений в корпоративной среде
Скачать книгу
✍️Автор: Peter Späth
📃Страниц: 512
Эта книга поможет вам создавать более сложные корпоративные облачные и другие приложения на базе Java, которые могут работать в корпоративных и других критически важных средах.
Что внутри:
🔸Создавайте сложные приложения Jakarta EE
🔸Создайте рабочий процесс профессиональной разработки с помощью Jakarta EE
🔸Создавайте более продвинутые приложения для веб-разработки
🔸Работайте с более продвинутыми вспомогательными технологиями для повышения зрелости и стабильности приложений в корпоративной среде
Скачать книгу
Очередной #дайджест по Java
✅ Обязательные знания для тимлида — в помощь всем текущим и будущим руководителям
✅ Асинхронная работа с файловой системой в Vert.x — узнаем больше про экосистему для создания реактивных приложений на JVM
✅ Программирую, учусь и работаю 24/7 но этого все еще мало — история о вредном трудоголизме
✅ Изоляция в тестах с Kafka — опыт запуска Kafka в тестовых сценариях
✅ Создание REST API с использованием Spring WebFlux и Security — рассмотрен пример создания REST API с использованием следующих технологий: Spring Boot 3, Spring Security (JWT), Spring WebFlux, Spring Data R2DBC
✅ Обязательные знания для тимлида — в помощь всем текущим и будущим руководителям
✅ Асинхронная работа с файловой системой в Vert.x — узнаем больше про экосистему для создания реактивных приложений на JVM
✅ Программирую, учусь и работаю 24/7 но этого все еще мало — история о вредном трудоголизме
✅ Изоляция в тестах с Kafka — опыт запуска Kafka в тестовых сценариях
✅ Создание REST API с использованием Spring WebFlux и Security — рассмотрен пример создания REST API с использованием следующих технологий: Spring Boot 3, Spring Security (JWT), Spring WebFlux, Spring Data R2DBC
PreferencesFactory
Интерфейс PreferencesFactory используется для создания объектов Preferences.
Он предоставляет два метода:
systemRoot(): возвращает корневой узел предпочтений системы.
userRoot(): возвращает корневой узел предпочтений пользователя, вызвавшего метод.
Поставщики новых реализаций Preferences должны предоставлять соответствующие реализации PreferencesFactory, чтобы их можно было установить вместо реализации по умолчанию, зависящей от платформы.
Интерфейс PreferencesFactory используется для создания объектов Preferences.
Он предоставляет два метода:
systemRoot(): возвращает корневой узел предпочтений системы.
userRoot(): возвращает корневой узел предпочтений пользователя, вызвавшего метод.
Поставщики новых реализаций Preferences должны предоставлять соответствующие реализации PreferencesFactory, чтобы их можно было установить вместо реализации по умолчанию, зависящей от платформы.
🗺️ Где составить дорожную карту: ТОП-10 сервисов
Сервисы, которые подойдут для составления карьерной карты и не только.
Подборка материалов по теме:
🧪 Дорожная карта тестировщика в 2023 году
🛣️ Дорожная карта: что это, как ее составить и почему она обязательно нужна разработчику
☕ Дорожная карта Java-разработчика в 2023 году
Читать статью
#гайд
Сервисы, которые подойдут для составления карьерной карты и не только.
Подборка материалов по теме:
🧪 Дорожная карта тестировщика в 2023 году
🛣️ Дорожная карта: что это, как ее составить и почему она обязательно нужна разработчику
☕ Дорожная карта Java-разработчика в 2023 году
Читать статью
#гайд
Мёртвая нить
Мёртвая нить (deadlock) означает ситуацию, когда две или более нити (потока исполнения) блокируются и ожидают ресурсы, которые удерживают друг друга, что приводит к тому, что ни одна из них не может продолжить свою работу. В итоге программа оказывается в застойном состоянии, так как нити блокируют друг друга и не могут разблокироваться без внешнего вмешательства.
Чтобы избежать мёртвой нити, следует стремиться к тому, чтобы нити блокировали ресурсы в одном и том же порядке. Если это невозможно, можно использовать техники, такие как использование метода tryLock() из java.util.concurrent.locks.Lock, которые позволяют более гибко управлять блокировками и избегать мёртвой нити.
Мёртвая нить (deadlock) означает ситуацию, когда две или более нити (потока исполнения) блокируются и ожидают ресурсы, которые удерживают друг друга, что приводит к тому, что ни одна из них не может продолжить свою работу. В итоге программа оказывается в застойном состоянии, так как нити блокируют друг друга и не могут разблокироваться без внешнего вмешательства.
Чтобы избежать мёртвой нити, следует стремиться к тому, чтобы нити блокировали ресурсы в одном и том же порядке. Если это невозможно, можно использовать техники, такие как использование метода tryLock() из java.util.concurrent.locks.Lock, которые позволяют более гибко управлять блокировками и избегать мёртвой нити.
Какой будет Output?
Anonymous Quiz
19%
static1A
17%
123staticA
19%
static123A
22%
1
6%
1staticA
18%
staticA
Очередной #дайджест для джавистов
👩💻 Spring Cloud Config и Git — хранение и распространение конфигураций приложений
👩💻 Динамическое создание слушателей в Kafka — как создать слушатель в Kafka на лету в процессе работы приложения
👩💻 Java NIO(New I/O) против IO — рассказ о блокирующем/неблокирующем чтении из потоков данных
👩💻 Введение в Java NIO Selector — о том, как работает механизм для мониторинга одного или нескольких каналов NIO и распознавания, когда один или несколько становятся доступными для передачи данных
👩💻 Engineering director — разговор о карьерной лестнице технических менеджеров, представляемую исключительно через количественный рост в зоне ответственности
👩💻 Spring Cloud Config и Git — хранение и распространение конфигураций приложений
👩💻 Динамическое создание слушателей в Kafka — как создать слушатель в Kafka на лету в процессе работы приложения
👩💻 Java NIO(New I/O) против IO — рассказ о блокирующем/неблокирующем чтении из потоков данных
👩💻 Введение в Java NIO Selector — о том, как работает механизм для мониторинга одного или нескольких каналов NIO и распознавания, когда один или несколько становятся доступными для передачи данных
👩💻 Engineering director — разговор о карьерной лестнице технических менеджеров, представляемую исключительно через количественный рост в зоне ответственности
🏗️📄 ТОП-10 онлайн-конструкторов резюме
Эта статья для тех, кто устал скидывать работодателям шаблонное резюме, сделанное на Хедхантере, и хочет попробовать что-нибудь новое.
👉 Читать статью
👉 Зеркало
Эта статья для тех, кто устал скидывать работодателям шаблонное резюме, сделанное на Хедхантере, и хочет попробовать что-нибудь новое.
👉 Читать статью
👉 Зеркало