Изучаем Java. По вопросам сотрудничества: @seniorvladislav
Обработка изображений
Думаем, каждый согласится, что подавать информацию в виде изображения лучше всего для восприятия. Однако сначала нужно сгенерировать такое изображение, и на этот случай в 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
, которая использует только один поток для выполнения задач. Она может быть полезной, если вы хотите, чтобы задачи выполнялись последовательно в заданном порядке.
#для_начинающих
ConcurrentHashMapConcurrentHashMap
— это класс из пакета java.util.concurrent
, который представляет собой реализацию хэш-таблицы, спроектированную для поддержки параллельных операций чтения и записи без необходимости блокировки всей структуры данных.
#для_начинающих
Что такое «thread-safe»?
«Thread-safe» (безопасность в многопоточной среде) означает, что определенный код или объект может корректно и безопасно использоваться в многопоточной среде, где несколько потоков одновременно могут обращаться к этому коду или объекту.
Основная проблема, с которой сталкиваются в многопоточной среде, — это состояние гонки (race condition), когда несколько потоков могут изменять общие данные и конфликтовать между собой, что может привести к непредсказуемому и некорректному поведению программы.
#для_продвинутых
Работа с датами 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
, который сам управляет пулом потоков и выполняет эти задачи.
#для_начинающих
ThreadPool
ThreadPool (пул потоков) представляет собой механизм, который позволяет эффективно управлять и переиспользовать потоки для выполнения задач в многозадачных приложениях. Он позволяет создавать и управлять пулом потоков, избегая накладных расходов на создание и уничтожение потоков при выполнении задач.
#для_начинающих
Что нового в GitVerse
На онлайн-презентации «GitVerse: открой вселенную кода» СберТех рассказал об обновлениях платформы. Cреди них – CI/CD-инструменты, которые позволят ускорить и упростить разработку. Делимся подробностями:
▪️ Инструменты помогут автоматизировать сборку кода и процессы поставки. Можно воспользоваться уже написанными скриптами сборки и перенести свои проекты с Git-репозиториев в один клик.
▪️ Технология оповещения о новых событиях на сервере (вебхуки) позволит реализовать еще больше сценариев автоматизации.
▪️ Появилась возможность вызывать сторонние сервисы через API по событиям в GitVerse. Например, при определенных событиях в репозитории можно запустить сторонний сборочный конвейер или отправить уведомление в мессенджер.
Регистрируйтесь на GitVerse и протестируйте сами 😉