seniorjavist | Unsorted

Telegram-канал seniorjavist - Senior Java Developer

-

Изучаем Java. По вопросам сотрудничества: @seniorvladislav

Subscribe to a channel

Senior Java Developer

LinkedHashSet

LinkedHashSet представляет собой структуру данных, которая хранит элементы в порядке их добавления, а также не допускает дублирования элементов
, как и HashSet.

Однако, в отличие от HashSet, LinkedHashSet сохраняет порядок добавления элементов, что может быть полезно в некоторых случаях.

Как видно из примера, элементы были добавлены в множество в порядке их добавления, а дубликат элемента "Java" не был добавлен в множество.

Читать полностью…

Senior Java Developer

Изучите основы Java и разработайте приложение, даже если никогда прежде не программировали

Java — один из самых востребованных и доступных для освоения языков программирования. Его используют для создания сайтов, мобильных и десктоп-приложений, даже игр.

На бесплатном онлайн-курсе «Основы разработки на Java» за 4 занятия вы изучите основы синтаксиса языка Java и поймёте, подходит ли он вам, а в качестве практики разработаете приложение для публикации фото из NASA, а после сделаете на основе этого приложения Telegram-бота.

Зарегистрироваться → https://netolo.gy/bJKk

Реклама. ООО «Нетология» LatgBgyq1

Читать полностью…

Senior Java Developer

SingleThreadPoolExecutor

SingleThreadPoolExecutor — это реализация интерфейса ThreadPoolExecutor, которая выполняет задачи в одном потоке.
Она гарантирует, что только одна задача будет выполнена в любое время. Если в очереди имеется несколько задач, они будут исполняться последовательно, начиная с первой.

В результате работы данного кода мы получим вывод в консоль, где вначале будут выводиться сообщения о начале выполнения задач, а затем их завершения. Обратите внимание, что задачи выполняются последовательно и только одна задача выполняется в любой момент времени.

Читать полностью…

Senior Java Developer

Hashtable

Hashtable в Java - это реализация коллекции Map, которая была добавлена в Java в версии 1.0.

В этом примере мы создали объект Hashtable, добавили в него три элемента с ключами "A", "B" и "C" и значениями 1, 2 и 3 соответственно. Затем мы вывели на консоль все элементы таблицы, получили значение элемента с ключом "B" и удалили элемент с ключом "C".

Также мы проверили, содержится ли в таблице определенный ключ или значение, а также вывели на консоль размер таблицы.

*Hashtable не рекомендуется к использованию в новых приложениях, вместо нее следует использовать более современную реализацию HashMap или ConcurrentHashMap.

Читать полностью…

Senior Java Developer

Spring Transactions

Spring Transactions - это механизм, предоставляемый Spring Framework, который позволяет управлять транзакциями в Java-приложениях.
Он предоставляет абстракцию уровня транзакций, которая скрывает детали управления транзакциями в низкоуровневых API базы данных, и упрощает создание транзакционных приложений.

В коде на первом изображении мы используем аннотацию @Transactional для указания того, что метод createUser() должен выполняться в контексте транзакции. Все операции с базой данных, включая вставку новой записи, будут обернуты в транзакцию.

На втором изображении представлен пример использования первого кода, мы создаем двух пользователей и пытаемся сохранить их в базе данных. Затем мы генерируем исключение RuntimeException.

В результате выполнения данного кода, изменения в базе данных будут отменены, так как выполнявшиеся операции были выполнены в контексте транзакции, которая была отменена после генерации исключения.

Читать полностью…

Senior Java Developer

flatMap

flatMap - это метод, который принимает функцию в качестве параметра, применяет ее ко всем элементам потока, а затем объединяет результаты в один поток.
Обычно используется для работы с потоками, содержащими другие потоки или коллекции.

В этом примере мы используем flatMap для преобразования потока сотрудников в поток проектов, используя лямбда-выражение, которое возвращает поток проектов сотрудника. Затем мы собираем все проекты в один поток при помощи метода collect.

Таким образом, flatMap очень полезен в случаях, когда нужно преобразовать поток, содержащий другие потоки или коллекции, в один плоский поток.

Читать полностью…

Senior Java Developer

IoC (Inversion of Control)

Это модель программного проектирования, в которой управление жизненным циклом объекта переходит от самого объекта к внешним компонентам. Например, вместо того, чтобы объект сам создавал свои зависимости, он получает их извне.

В Java IoC реализуется с помощью DI (Dependency Injection) - механизма внедрения зависимостей.

В этом примере мы создали объект User в одном месте нашего приложения, а затем передали его как зависимость в объект UserController, который в свою очередь воспользовался этой зависимостью для выполнения своей работы. Это и есть пример IoC и DI в Java.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Каковы особенности многопоточности в Java EE и Spring?

Одной из особенностей многопоточности в Java EE и Spring является использование синхронизации и примитивов синхронизации, таких как блокировки и семафоры, для предотвращения конфликтов между потоками.

Ещё одна важная особенность - использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.

Также в Spring есть возможность использования асинхронных методов, что позволяет не блокировать основной поток выполнения и ускорять обработку запросов.

Читать полностью…

Senior Java Developer

WeakHashMap

WeakHashMap - это подкласс java.util.HashMap, который используется для хранения пар "ключ-значение"
. Основное отличие WeakHashMap заключается в том, что он хранит ключи в виде "слабых ссылок" (weak reference), что означает их уничтожение при отсутствии сильной ссылки на объект.

Это позволяет использовать WeakHashMap для кэширования объектов, которые могут быть уничтожены сборщиком мусора в случае, если на них не осталось сильных ссылок. Это может подойти для объектов, созданных на основе потребительских запросов, которые не будут использоваться долгое время и не нужно хранить их в памяти постоянно.

В примере мы создаем объект и добавляем его в WeakHashMap. Затем мы обнуляем ссылку на этот объект и запускаем сборщик мусора. После этого мы пытаемся получить значение по ключу и должны получить null, так как ключ был удален из WeakHashMap.

Читать полностью…

Senior Java Developer

serialVersionUID

serialVersionUID является статическим полем, которое используется для контроля версий сериализуемых классов.
Оно используется для определения уникальной идентификации класса при сериализации и десериализации объектов. serialVersionUID помогает обеспечить совместимость между классами при изменении их структуры.

Когда класс сериализуется, serialVersionUID записывается в поток данных вместе с объектом. При десериализации объекта Java сравнивает serialVersionUID, прочитанный из потока данных, со значением текущего serialVersionUID в классе:
- Если они совпадают, то класс считается совместимым и процесс десериализации может продолжаться.
- Если значения serialVersionUID отличаются, будет сгенерировано исключение InvalidClassException, указывающее на несовместимость версий класса.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что означает CAP-теорема?

CAP-теорема, также известная как теорема Брюэра, является концептуальной основой для понимания распределенных систем.


Она была предложена в 2000 году Эриком Брюэром и формулирует три фундаментальных свойства, которые невозможно обеспечить одновременно в распределенной системе данных:
- Согласованность (Consistency);
- Доступность (Availability);
- Устойчивость к разделению (Partition tolerance).

Согласно CAP-теореме, в распределенной системе данных можно гарантировать только два из трех свойств:
- Согласованность и доступность (CA);
- Согласованность и устойчивость к разделению (CP);
- Доступность и устойчивость к разделению (AP).
Выбор между этими свойствами зависит от требований и характеристик конкретной системы и ее целей.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Какие возможности Spring предоставляет для коммуникации с базой данных?

Spring предоставляет мощный набор инструментов для работы с базами данных
. Ниже перечислены некоторые из них:

- Spring JDBC: Абстракции над JDBC (Java Database Connectivity), что упрощает взаимодействие с базой данных через простые API.

- Spring Data JPA: Spring абстракция над JPA (Java Persistence API) и упрощает взаимодействие с объектно-реляционными базами данных (ORM).

- Spring ORM: Spring ORM интегрирует ORM-фреймворки, такие как Hibernate, с Spring Framework. Он обеспечивает удобную интеграцию между Spring и ORM-фреймворками, предоставляя возможности управления транзакциями, упрощенный доступ к данным и возможности кэширования.

- Spring Data JDBC: Альтернативный подход к доступу к данным с использованием JDBC. В отличие от ORM, Spring Data JDBC предлагает простую и прямолинейную модель доступа к данным без использования объектно-реляционного отображения (ORM).

- Spring Transactions: Spring предоставляет механизм управления транзакциями для работы с базами данных. Он позволяет объявлять транзакции с помощью аннотаций или XML-конфигурации.

- Spring Batch: Spring Batch предоставляет возможности для пакетной обработки данных, включая чтение, обработку и запись данных в базу данных.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Когда лучше использовать наследование, а не агрегацию?

Использование наследования целесообразно, когда существует отношение "является" (is-a) между классами.
То есть, если один класс является специализацией или расширением другого класса.
Наследование позволяет унаследовать свойства и методы родительского класса, а также добавить или изменить их в производном классе. Это способствует повторному использованию кода и созданию иерархий классов.

Агрегацию следует использовать, когда существует отношение "имеет" (has-a) между классами. Это означает, что один класс содержит экземпляр другого класса в качестве своего члена.
Агрегация позволяет создавать более сложные объекты, состоящие из других объектов, и устанавливать между ними отношения. В отличие от наследования, агрегация не создает иерархических связей между классами.

Читать полностью…

Senior Java Developer

POJO

Термин POJO означает Plain Old Java Object, что переводится как "простой старый Java-объект". POJO - это обычный Java-класс, который не зависит от каких-либо фреймворков или библиотек и не имеет особых ограничений или требований к своей структуре.

POJO классы часто используются в различных контекстах, таких как модель данных, передача данных или DTO (Data Transfer Object). Они служат для хранения данных и обеспечивают доступ к этим данным через геттеры и сеттеры.

В этом примере класс Person имеет два приватных поля name и age, а также соответствующие геттеры и сеттеры для доступа к этим полям. Геттеры используются для получения значений полей, а сеттеры - для установки новых значений.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что такое optimistic и pessimistic locking?

Это две стратегии управления параллельным доступом к данным в многопоточной или распределенной среде.

Optimistic locking — это подход, основанный на предположении, что конфликты при доступе к данным происходят редко.
При оптимистической блокировке ресурс не блокируется для других потоков во время чтения. Когда поток пытается изменить ресурс, происходит проверка наличия конфликтов. Обычно используются механизмы версионирования (например, с помощью временных меток или счетчиков) для обнаружения изменений.

Pessimistic locking — это подход, при котором ресурс блокируется для других потоков во время чтения или записи.
При пессимистической блокировке поток, запрашивающий доступ к ресурсу, получает эксклюзивное право на его использование до тех пор, пока не освободит его. Pessimistic locking обеспечивает более жесткую синхронизацию и может быть полезен в случаях, когда конфликты доступа к данным возникают часто.

Для реализации блокировки можно использовать различные механизмы, такие как synchronized блоки, ключевое слово volatile, Lock или ReadWriteLock интерфейсы.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Как хранятся соотношения one-to-one, one-to-many и many-to-many в виде таблиц?

Соотношения one-to-one, one-to-many и many-to-many в таблицах баз данных хранятся следующим образом:

- Соотношение one-to-one — в одном primary key одной таблицы хранятся значения, связанные с другой одиночной таблицей во внешнем ключе (foreign key).

- Соотношение one-to-many — в таблице, которая "one", в качестве primary key используется идентификатор объекта, который распространяется на все связанные объекты в таблице, которая "many". Так, одно значение может ссылаться на несколько значений в другой таблице.

- Соотношение many-to-many — необходимо создать дополнительную таблицу, которая связывает связанные таблицы. Так, в этой дополнительной таблице устанавливается соответствие между primary key одной таблицы и primary key другой таблицы.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Какие виды Garbage Collector есть в HotSpot?

В HotSpot JVM имеется несколько видов Garbage Collector:

1. Serial
: однопоточный сборщик мусора, обрабатывает один поток в куче, который блокирует все приложение на этапе сборки мусора;

2. Parallel: многопоточный сборщик мусора, работает по тому же принципу, что и Serial, но использует несколько потоков для устройства сборки мусора, что сокращает время блокировки приложения;

3. CMS (Concurrent Mark-Sweep): сборщик мусора для больших куч, работает параллельно со стоп-временем, когда сборка мусора производится мгновенно, а приложение продолжает работу во время сборки мусора;

4. G1 (Garbage First): сборщик мусора нового поколения с выделенной кучей на основе регионов, который был разработан с целью улучшения показателей быстродействия и уменьшения времени блокировки. G1 собирает мусор в регионах, где около 25% от общего числа объектов имеют самую высокую степень задействованности и блокирует только те регионы, где собран мусор.

Читать полностью…

Senior Java Developer

IdentityHashMap

Класс IdentityHashMap в Java является реализацией интерфейса Map и работает на основе проверки на равенство ссылок объектов, а не на основе метода equals.

Это означает, что если два объекта, хранящихся в IdentityHashMap, содержат одинаковые значения полей, но разные ссылки, то они будут считаться разными ключами.

IdentityHashMap может быть полезной альтернативой для HashMap в тех случаях, когда ключом является объект, и необходимо учесть различие между ссылками на объект.

Читать полностью…

Senior Java Developer

Spring JDBC

Spring JDBC - это фреймворк Spring, который предоставляет удобный и гибкий доступ к базам данных через JDBC API в Java.

В данном примере создается класс JdbcTemplateExample, в конструктор которого передается Datasource. JdbcTemplate используется для выполнения запросов к базе данных.

Метод getAllNames использует метод query для выполнения запроса SELECT и получения имени всех пользователей из таблицы users, обрабатывая результаты через интерфейс RowMapper.

Метод addUser использует метод update для выполнения запроса INSERT и добавления нового пользователя в таблицу users.

Результатом метода getAllNames будет список всех имен пользователей, а метод addUser добавит нового пользователя в таблицу users.

*Чтобы полностью понимать, как работает Spring JDBC, необходимо также разобраться в различных методах и классах, которые используются при работе с ним.

Читать полностью…

Senior Java Developer

⌨️Изучать Java с нуля гораздо интереснее, если сразу начать делать игры!

При работе на Java вы вряд ли столкнетесь с разработкой игр, однако так вы сможете увидеть, как изменение кода приводит к изменению поведения программ.

📆Приглашаем 8 июня в 20:00 на открытый урок «Создание игры на Java и LibGDX с нуля». Вебинар приурочен к старту специализации «Java Developer».

На вебинаре создадим небольшую двумерную игру на Java с нуля, изучим принципы кодирования и разработаем логику игры на ходу.

Урок будет полезен тем, кто хочет:
— Начать изучать Java с нуля.
— Посмотреть, как на практике создаются Java-приложения на примере 2D игры.
— Создать свою игру и уже имеет базовые навыки программирования.

В результате урока вы:
— Увидите, как пишется код и создаются программы на языке Java.
— Узнаете, из каких базовых блоков строятся программы.

После вебинара онлайн-курс можно приобрести в рассрочку.

➡️Для участия зарегистрируйтесь: https://otus.pw/NAKO/

Нативная интеграция. Информация о продукте www.otus.ru

Читать полностью…

Senior Java Developer

TreeMap

TreeMap - это класс, который реализует интерфейс Map и представляет отображение, где ключи хранятся в отсортированном порядке.
TreeMap хранит элементы в красно-черном дереве, что обеспечивает быстрый доступ и эффективный поиск элемента по ключу.

Элементы в TreeMap автоматически сортируются по ключу. Также можно использовать методы get(key), remove(key) и др., чтобы получить, удалить или изменить элементы в TreeMap.

В этом примере мы создаем TreeMap, добавляем в нее несколько элементов и выводим все элементы. При запуске программы в консоли вы увидите следующий вывод:

1 - один
2 - два
3 - три
4 - четыре
5 - пять

Читать полностью…

Senior Java Developer

✏️ 6 июня в 19:00 по МСК пройдёт бесплатный вебинар «Spring. Ошибки и решения»

Что будет на трансляции:

— Spring Initz, шаблон приложения
— Архитектура базового микросервиса
— ControllerAdvice — обработка ошибок в контроллерах
— JPA генерация

Ведущий: Сергей Полухин, Senior Java Developer, старший разработчик и руководитель разработки на проектах Infobip, Сбера, Evento, суперкассы, основатель PDev Studio.

🚀 Бесплатная регистрация: https://clck.ru/34asdN

Читать полностью…

Senior Java Developer

Middle/Senior Node.JS Developer [МТС еСпортс]

Привет, мы команда МТС Digital. И у нас в разработке крутой продукт для стриминга, а именно мы создаем инструменты для работы с видео, которые помогут блогерам получить охваты с новых рынков и всегда оставаться в топе:)
Сейчас мы ищем Backend node.js Developer-а, который будет:
· Разрабатывать backend-логику WEB-продуктов
· Участвовать в разработке архитектуры проекта, в создании продукта «с нуля» и самостоятельно выбирать техническое решение поставленных задач
· Подключать сторонние API

Скорее переходи по ссылке и присылай свой отклик

Читать полностью…

Senior Java Developer

Cartesian product

Это операция, которая создает все возможные пары элементов, взятых из двух наборов
. В Java это реализуется с помощью оператора foreach, который работает с коллекциями.

Например, если у нас есть две коллекции: A = {1, 2, 3} и B = {a, b}, то произведение A и B будет выглядеть следующим образом:

{(1, a), (1, b), (2, a), (2, b), (3, a), (3, b)}
. Таким образом, мы получаем шесть возможных пар элементов из коллекций A и B.

В этом примере мы создаем две коллекции и используем два вложенных цикла для создания cartesian product. Созданное произведение сохраняется в коллекцию cartesianProduct типа List<List<Object>> и результат выводится на экран.

Читать полностью…

Senior Java Developer

👨🏻‍💻 Работаете удалённо и мечтаете переехать за рубеж?

Ваша мечта может стать реальностью с визой цифровых кочевников Digital Nomad Испании.

Данный путь подходит:
- удалённым работникам в найме,
- фрилансерам, которые оказывают услуги юрлицам в качестве ИП.

Это иммиграционная виза не просто ВНЖ Испании, это ПМЖ уже через 5 лет и паспорт через 10. С возможностью переезда всей семьёй.

👉🏻 Переходите в Telegram-канал и узнайте подробнее о релокации в Испанию и другие страны: /channel/+5obEnY4li843ZmJi

Читать полностью…

Senior Java Developer

ACID (Atomicity, Consistency, Isolation, Durability)

Это набор свойств, которые обеспечивают надежность и целостность транзакций в базах данных.
Хотя ACID является широко применяемым концептом в области баз данных, в Java есть различные способы обеспечения ACID-транзакций в приложениях, работающих с базами данных.

Одним из распространенных способов работы с ACID-транзакциями в Java является использование JDBC (Java Database Connectivity), который предоставляет стандартный способ взаимодействия с базами данных в Java. В JDBC есть возможность создания транзакций, используя методы commit() и rollback().

ACID-транзакции можно использовать с различными базами данных, такими как MySQL, PostgreSQL, Oracle и другими, поддерживающими JDBC.

Читать полностью…

Senior Java Developer

ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor является реализацией интерфейса ScheduledExecutorService и представляет собой пул потоков, который позволяет выполнять задачи по расписанию.
Он предоставляет механизм для запуска задач через определенные интервалы времени или с определенной задержкой.

В этом примере создается ScheduledThreadPoolExecutor с двумя рабочими потоками. Затем мы запускаем задачу delayedTask с задержкой в 5 секунд с помощью метода schedule. Затем мы запускаем периодическую задачу periodicTask, которая будет выполняться каждую секунду, начиная сразу же, используя метод scheduleAtFixedRate.

После запуска задач мы ждем 10 секунд, чтобы дать им выполняться. Затем мы вызываем shutdown() для остановки пула потоков.

Читать полностью…

Senior Java Developer

Prototype

В Java паттерн Prototype используется для создания новых объектов путем клонирования существующих объектов
, вместо создания новых объектов с помощью конструкторов. Prototype позволяет создавать копии объектов с минимальными затратами и избегать сложной логики инициализации объектов.

Для реализации этого паттерна необходимо, чтобы классы имели возможность клонирования, что достигается реализацией интерфейса Cloneable и переопределением метода clone().

В этом примере класс Sheep имеет два приватных поля name и color, а также соответствующие геттеры и сеттеры. Класс также имплементирует интерфейс Cloneable и переопределяет метод clone() для создания копии объекта.

В main мы создаем оригинальный объект, клонируем его с помощью метода clone() и получаем клонированный объект clonedSheep. Затем мы изменяем его параметры и выводим результат.

Читать полностью…

Senior Java Developer

Java Bean

JavaBeans - это стандартный подход к созданию переносимых и повторно используемых компонентов.
Они представляют собой классы, которые следуют определенным соглашениям и обеспечивают удобный способ управления состоянием и поведением объектов.

Основные характеристики JavaBeans:

1. Класс должен быть публичным и иметь открытый конструктор без аргументов.
2. Приватные поля класса должны быть доступны с помощью геттеров и сеттеров (getter и setter методы).
3. Класс должен быть сериализуемым, то есть должен реализовывать интерфейс Serializable.

JavaBeans также могут иметь дополнительные свойства, такие как события и методы уведомления, которые позволяют другим компонентам реагировать на изменения состояния.

Читать полностью…

Senior Java Developer

synchronized

Ключевое слово synchronized используется для обозначения синхронизированных блоков кода или методов.
Оно обеспечивает монопольный доступ к определенному коду, чтобы только один поток исполнения мог выполнять этот код в данный момент времени.

Синхронизация помогает предотвратить состояние гонки (race condition), когда несколько потоков пытаются одновременно изменить общие ресурсы.

Важно отметить, что синхронизация может повлечь за собой ухудшение производительности, поэтому следует использовать ее только там, где это необходимо для правильной работы с общими ресурсами и избегать излишней синхронизации.

Читать полностью…
Subscribe to a channel