Заглушка
Заглушка (stub) — это маленький кусок кода, который используется в тестировании для замены реального объекта или метода. Заглушки создаются, чтобы имитировать поведение реальных объектов или методов в контролируемой среде тестирования. Это позволяет изолировать код, который вы хотите протестировать, от внешних зависимостей, таких как базы данных или внешние службы.
В Java заглушки часто создаются с использованием фреймворков для тестирования, таких как JUnit или Mockito.
#для_продвинутых
doGet() doGet()
— это метод, который используется в Java для обработки HTTP GET-запросов в рамках сервлетов. Сервлеты — это Java-классы, которые используются для создания динамических веб-приложений на платформе Java EE (Enterprise Edition).
Метод doGet()
является одним из методов, предоставляемых интерфейсом javax.servlet.http.HttpServlet
. Он вызывается контейнером сервлетов (например, Apache Tomcat) при получении HTTP GET-запроса от клиента (браузера или другого клиентского приложения).
#для_продвинутых
Обработка изображений
Думаем, каждый согласится, что подавать информацию в виде изображения лучше всего для восприятия. Однако сначала нужно сгенерировать такое изображение, и на этот случай в Java есть множество инструментов.
К примеру, класс java.awt.BufferedImage который позволяет обрабатывать изображения каким угодно способом, хоть попиксельно.
Чтобы загрузить изображение из файла используют ImageIO::read, для записи — ImageIO::write.
#для_продвинутых
16–17 мая ВСК проводит One Day Offer.
Если ты разработчик или системный аналитик уровня middle и выше, регистрируйся https://onedayoffer.vsk.ru до 15:00 15 мая.
Пройди онлайн-собеседование в компании из золотого рейтинга Forbes и получи офер в тот же день. Выбирай сам формат будущей работы и пользуйся ДМС с первого дня.
Создавай лучшие InsurTech-продукты страны в одной из наших Agile-команд.
Приглашаем на Vertis Java Meetup
Обсудим Java-разработку в Яндекс Путешествиях и Недвижимости:
🔸 Михаил Черноскутов, старший разработчик платформенных сервисов в Путешествиях. Покажет внутренности связки Java + gRPC + Netty, а ещё разберёт грабли, которые можно собрать, если неправильно готовить gRPC
🔸 Роман Косарев, руководитель направления разработки в Недвижимости. Расскажет, как синхронное API Недвижимости прошло эволюцию от REST до GraphQL Federation
🔸 Екатерина Рыбалка, разработчик счастья путешественников в Путешествиях. Объяснит, как ребята пришли к Agile-методикам, чтобы итеративно декомпозировать и реализовывать фичи и задачи, и что из этого получилось
Vertis Java Meetup пройдёт в Екатеринбурге 25 мая, будет онлайн-трансляция. Зарегистрироваться можно здесь.
Яндекс приглашает студентов и начинающих разработчиков на Young Con — фестиваль для тех, кто интересуется карьерой в IT
• 6000 участников
• Свыше 10 часов нетворкинга и активностей
• 30 топ-менеджеров расскажут о внутренней кухне больших IT-компаний и дадут советы, как начать карьеру в одной из команд
• Знакомство с технологиями Яндекса
• 9 тематических «миров» — интерактивных стендов, где участники смогут узнать про сервисы и карьерные возможности, которые дает работа в IT-компании.
У участников будет возможность в будущем попасть на стажировку в Яндекс, ведь прямо на фестивале пройдут экспресс-собеседования.
На фестивале также пройдет «Баттл вузов» — финал турнира по спортивному программированию между студентами. Команда-победитель разделит между собой призовой фонд в размере 1 млн рублей. Завершится мероприятие концертом музыкальных групп The Hatters и ХЛЕБ.
Фестиваль пройдет 27 июня в Live Arena. Принять участие в нем можно очно или онлайн — для этого необходимо заполнить форму на сайте.
Хочешь практиковать Java на реальных задачах? В поисках оригинального контента, а не копипаста из других источников?
👉 Заходи на новый канал 👈
Топовые задачи:
— Много вопросов по concurrency и jvm
— Разбираем стандартные ошибки и их решения
— Оптимизируем код
— Best practices
— Задачи с реальных собеседований
— Разный уровень сложности
— Подробный разбор каждого решения
Достойный материал для подготовки к собеседованиям, а также сложные и интересные задачи из реальной практики.
Автор канала – Java-эксперт, более 10 лет в разработке. Опытный Lead dev и тимлид группы девелоперов. Работал с различными базами данных – Relational databases, NoSQL databases, Caching systems, Full-Text Search engines, Big Data systems
👉 Подписывайся и попробуй решить последнюю задачу! /channel/java_interview_tasks
Экземплярный инициализатор
Экземплярный инициализатор — это блок кода внутри класса, который выполняется каждый раз при создании нового экземпляра класса. Он используется для инициализации экземплярных переменных.
#для_продвинутых
Сериализация объектов
Сериализация объектов - это процесс преобразования объекта в поток байтов, который может быть сохранен на диске или передан по сети, а затем восстановлен в исходный объект. Для того, чтобы класс можно было сериализовать, необходимо реализовать интерфейс Serializable
.
Как можно видеть из примера, объекты, реализующие интерфейс Serializable, могут быть сериализованы в файл и затем десериализованы обратно в исходный объект.
#для_продвинутых
Паттерн проектирования Observer
Паттерн Observer является одним из популярных поведенческих паттернов проектирования. Он используется для реализации механизма, при котором объекты (наблюдатели) могут автоматически получать уведомления об изменениях в другом объекте (субъекте). Это особенно полезно, когда одни объекты зависят от состояния других и должны реагировать на его изменения.
#для_продвинутых
🔥 Это база с 1700 вопросами с собеседований на Java разработчика. Фишка в том, что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏
Читать полностью…Прокси-объект
Прокси-объект (Proxy Object) — это объект, который действует как промежуточный слой между клиентским кодом и реальным объектом. Прокси-объект позволяет выполнять дополнительные действия перед или после вызовов методов реального объекта, а также контролировать доступ к этим методам.
Прокси-объекты в Java реализуются с помощью интерфейсов и динамического создания классов во время выполнения. Для создания прокси-объекта в Java существует два основных способа: с использованием JDK Proxy и с использованием библиотеки CGLIB.
#для_продвинутых
Конкатенация
Конкатенация — это операция объединения или склеивания двух или более строк или последовательностей символов для создания новой строки. В общем смысле, это означает соединение элементов в одну последовательность. Этот термин применяется не только к строкам, но и к другим типам данных, которые могут быть объединены.
#для_начинающих
Что такое «IS-A» отношение?
«IS-A» отношение относится к понятию наследования и полиморфизма в объектно-ориентированном программировании. Оно также называется «является типом» или «является подтипом». Это отношение указывает на то, что один класс является подклассом другого класса.
Наследование позволяет создавать новый класс на основе существующего класса. Подкласс наследует поля и методы суперкласса, что позволяет расширять функциональность и переиспользовать код. «IS-A» отношение означает, что объекты подкласса могут быть рассматриваемыми как объекты суперкласса, так как они наследуют его свойства и методы.
#для_продвинутых
ScheduledExecutorServiceScheduledExecutorService
— это интерфейс в Java из пакета java.util.concurrent, который предоставляет возможность планирования и выполнения задач с задержкой или периодически.
Основные реализации ScheduledExecutorService
:ScheduledThreadPoolExecutor
— это конкретная реализация ScheduledExecutorService
, предоставляемая в стандартной библиотеке Java. Она является потокобезопасной реализацией и использует пул потоков для выполнения задач.SingleThreadScheduledExecutor
— это реализация ScheduledExecutorService
, которая использует только один поток для выполнения задач. Она может быть полезной, если вы хотите, чтобы задачи выполнялись последовательно в заданном порядке.
#для_начинающих
🧠 Хотите упростить создание тестовой отчетности?
Ждём вас на открытом практическом уроке «Организовываем отчетность по автотестам на Allure» от OTUS.
💪 На вебинаре разберем:
- интеграцию Allure с Groovy pipeline на Jenkins;
- разницу между TestResult и TestResultContainer;
- интеграцию allure артефактов с Allure TestOps.
☝️Все это позволит вам оптимизировать работу и сэкономить время на рутинных задачах.
👉 Зарегистрируйтесь, чтобы посетить бесплатный урок: https://otus.pw/ue4iW/?erid=LjN8KAhVf
⏰ Встречаемся 15 мая в 20:00 мск в преддверии старта курса «Java QA Engineer. Professional». Все участники вебинара получат специальную цену на обучение и персональную консультацию от менеджеров OTUS!
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Ростов-на-Дону, приглашаем 23 мая на митап IT Talk by Sber 👨💻
Обещаем интересную программу и много нетворкинга. Будем слушать доклады на тему soft skills, проектирования ПО и роли AI в тестировании.
Спикеры и темы:
👉 Виталий Куценко — руководитель направления дивизиона «Кредитные продукты и процессы» — «Послание к самому себе: "…про архитектуру приложений"».
👉 Ирина Коровина — главный инженер по разработке управления технологий маркетинга — «Искусственный интеллект: новый помощник тестировщика. Как мы попробовали применить AI в Медиа».
👉 Михаил Новотарский — руководитель направления, QA-лид внутреннего сервиса «СберДруг» — «Управление гневом в работе ИТ-команд».
Локация: Ростов-на-Дону, Лофт «РУБИН» Театральный просп., 85 (этаж 4)
Ждём вас 23 мая в 18:00!
Регистрируйтесь по ссылке 😉
Работа с датами LocalDateTime
Класс LocalDateTime из пакета java.time позволяет создавать даты и изменять их, добавляя и отнимая необходимое количество часов, дней, месяцев, лет и даже эпох.
Чтобы получить текущую дату на вашем устройстве достаточно вызвать метод LocalDateTime::now.
Зеркалом этого класса в JDBC является класс TimeStamp, в который можно перевести методом of().
#для_продвинутых
В чём разница между >> и >>>?
Операторы >> и >>> используются для выполнения побитовых сдвигов над числами.
Оператор >> выполняет арифметический сдвиг вправо. При этом, если число положительное, то сдвиг вправо на n битов эквивалентен делению числа на 2^n. Однако при работе с отрицательными числами, оператор >> выполняет расширение знака, то есть заполняет старшие биты таким же значением, как старший бит исходного числа.
Оператор >>> также выполняет сдвиг вправо, но в отличие от >>, он всегда заполняет старшие биты нулями, даже при отрицательных числах. Этот оператор полезен при работе с беззнаковыми числами или при необходимости получения значения без знакового расширения.
#для_начинающих
ExecutorService
ExecutorService — это интерфейс в Java, который предоставляет высокоуровневый способ управления выполнением задач (потоков) в фоновом режиме. Он является частью пакета java.util.concurrent
и предоставляет абстракцию над управлением потоками выполнения, что облегчает создание и управление потоками в многозадачных приложениях.ExecutorService
позволяет разработчикам создавать пулы потоков, которые автоматически управляются пулом, а не создаются и уничтожаются каждый раз вручную. Это снижает накладные расходы на создание и уничтожение потоков, что может быть дорогостоящей операцией.
#для_продвинутых
Интерфейс Enumeration
Интерфейс Enumeration
— определяет методы, с помощью которых вы можете перечислить (получить по одному) элементы в коллекции объектов.
Этот устаревший интерфейс был заменён Iterator
. Хоть и не совсем, но Enumeration
считается устаревшим для нового кода. Однако он используется некоторыми методами, определёнными такими устаревшими классами, как Vector
и Properties
, используется другими API классами и сейчас широко используется в коде приложений.
Инициализаторы
Инициализаторы — это блоки кода, которые выполняются при создании объекта класса, перед вызовом конструктора. Они позволяют выполнять дополнительную инициализацию объекта, которая не может быть выполнена внутри конструктора или требует какой-то логики до вызова конструктора.
В Java есть два типа инициализаторов: инициализатор экземпляра и статический инициализатор.
Оба типа инициализаторов позволяют выполнять код при создании объектов класса или загрузке класса, что может быть полезно для настройки и инициализации переменных и других ресурсов до начала использования объектов.
#для_продвинутых
Статический инициализатор
Статический инициализатор — блок кода, который выполняется при первой загрузке класса или при первом обращении к статическому члену класса (переменной или методу). Статический инициализатор обычно используется для инициализации статических переменных или выполнения других действий, которые требуются только один раз, при загрузке класса.
#для_продвинутых
Агрегация
Агрегация — это отношение между классами, когда один класс содержит ссылки на объекты другого класса. Это также называется «композицией» или «составным объектом». Важно отметить, что агрегация является одним из способов управления отношениями между классами в ООП.
Примером агрегации может быть, например, класс «Университет», который содержит коллекцию объектов класса «Студент». В этом случае, «Университет» агрегирует (содержит) множество объектов «Студент». Важно, чтобы объекты «Студент» оставались независимыми и могли существовать отдельно от объекта «Университет».
#для_продвинутых
Метод ordinal() в Enum
Метод ordinal()
является частью класса Enum
. Класс Enum
используется для создания типов данных, представляющих ограниченное множество значений, таких как перечисления (enumerations). Метод ordinal()
возвращает порядковый номер (индекс) конкретного элемента перечисления в объявленном порядке.
#для_начинающих
Фундаментальное руководство по пакетам в Java
Java-пакеты реализуют так называемое пространство имен (namespace), позволяющее использовать в проекте файлы с одинаковыми именами.
Смотреть статью
serialVersionUIDserialVersionUID
— это статическое поле, которое используется для версионирования сериализованных объектов. Когда объекты сериализуются, serialVersionUID
указывает версию класса, используемую при сериализации и десериализации.
Проблема, которую serialVersionUID
решает, связана с обеспечением совместимости при сериализации. Если класс был сериализован с определенной версией serialVersionUID
, то при десериализации Java будет проверять, соответствует ли текущая версия класса версии, сохраненной в сериализованных данных. Если версии не совпадают, может быть брошено исключение InvalidClassException
, указывающее на несовместимость версий.
#для_продвинутых
Что такое ThreadGroup?ThreadGroup
представляет собой класс, предоставляемый Java для создания и управления группами потоков. Он может содержать другие подгруппы потоков, образуя иерархию. Основной целью ThreadGroup
является обеспечение единого механизма управления и мониторинга для всех потоков внутри группы.ThreadGroup
предоставляет некоторый уровень организации и управления, но в большинстве современных приложений управление потоками осуществляется с использованием более высокоуровневых конструкций, таких как классы из пакета java.util.concurrent
, которые предоставляют более гибкие и безопасные средства для работы с параллельным исполнением.
#для_продвинутых
Декартово произведение
Декартово произведение (cartesian product) в математике означает комбинацию всех возможных пар элементов из двух множеств. В Java это понятие может использоваться для описания ситуации, когда необходимо создать все возможные комбинации элементов из двух или более наборов данных.
Например, представьте, что у вас есть два множества: A = {1, 2} и B = {a, b}. Декартово произведение этих множеств будет: {(1, a), (1, b), (2, a), (2, b)}.
Проблема декартова произведения может возникнуть, когда вам нужно сгенерировать или обработать все возможные комбинации элементов из двух или более коллекций.
Для решения проблемы декартова произведения можно использовать вложенные циклы, рекурсию или специализированные библиотеки, такие как Apache Commons Collections или Stream API, чтобы более эффективно генерировать и обрабатывать комбинации элементов из разных множеств.
#для_продвинутых
Что такое Executor?
Понятие Executor
относится к части библиотеки java.util.concurrent
, которая предоставляет управление и выполнение задач в многопоточных приложениях. Этот интерфейс и связанные с ним классы предоставляют абстракцию для управления выполнением потоковых задач.
Основной целью интерфейса Executor
является разделение задачи выполнения задач от деталей управления потоками. Вместо того чтобы явно создавать и управлять потоками для выполнения задач, вы можете передать задачи в Executor
, который сам управляет пулом потоков и выполняет эти задачи.
#для_начинающих