seniorjavist | Unsorted

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

-

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

Subscribe to a channel

Senior Java Developer

Low Coupling

Low Coupling (низкая связанность) — это принцип проектирования программного обеспечения, который подразумевает, что модули или классы должны быть максимально независимы друг от друга.


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

В этом примере у нас есть интерфейс DataSource, который определяет контракт для получения данных. У нас также есть два класса, реализующих этот интерфейс: DatabaseDataSource и ApiDataSource. Класс DataProcessor обрабатывает данные, полученные из разных источников, но взаимодействует с ними только через интерфейс DataSource. Это обеспечивает низкую связанность между классами, так как DataProcessor не зависит от конкретных реализаций источников данных.

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

Senior Java Developer

Java-разработка: где найти и сравнить лучшие курсы?

Tutortop
— образовательный маркетплейс №1, где представлено свыше 5000 курсов от более чем 300 школ и все их можно сравнить по рейтингу, цене и отзывам, а еще купить дешевле, чем напрямую 🔥

Собрали для вас подборку из топовых курсов для Java-разработчиков по мнению их пользователей:

Профессия «Java-разработчик» от Skypro Рейтинг 4.9 из 5.

Онлай-курс «Java-разработчик» от Бруноям. Рейтинг 4.9 из 5.

Профессия «Java-разработчик с гарантией трудоустройства» от Product Star. Рейтинг 4.8 из 5.

Десятки других курсов по программированию на любом языке можно найти и сравнить на tutortop!⚡️

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

Senior Java Developer

ScheduledExecutorService

ScheduledExecutorService — это интерфейс, предоставляющий возможность планирования задач на выполнение в будущем в Java.
Он является частью библиотеки java.util.concurrent, которая предоставляет классы и интерфейсы для обработки многопоточности и параллельности.

В данном примере мы создаем ScheduledExecutorService с одним потоком и создаем задачу - отображение строкового сообщения. Задача будет выполняться каждую секунду начиная с 2-ой секунды после запуска. Затем мы ждем 10 секунд и останавливаем задачу, используя метод cancel(). Наконец, мы закрываем ScheduledExecutorService.

Результатом работы данного кода будет вывод в консоли строки "Строка вывода из задачи" каждую секунду, начиная с 2-ой секунды после запуска. После 10 секунд работы задача будет остановлена.

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

Senior Java Developer

Hashset

HashSet - это одна из основных структур данных в Java Collections API.
Он представляет собой набор элементов, где каждый элемент уникален, и порядок элементов не гарантируется.

HashSet основан на HashMap, и его производительность во многом зависит от начальной емкости и коэффициента загрузки.

В этом примере мы создаем HashSet с типом String и добавляем в него несколько элементов. Обратите внимание, что мы добавляем "Apple" дважды. Затем мы выводим все элементы HashSet с помощью цикла for-each.

Элемент "Apple" добавлен только один раз, хотя мы пытались добавить его дважды. Это происходит потому, что HashSet автоматически удаляет дубликаты.

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

Senior Java Developer

#вопросы_с_собеседований
Какие основные принципы Stream API?

Stream API - это функциональный интерфейс в Java 8, который позволяет работать с коллекциями объектов с помощью функциональных операций.


Основные принципы Stream API включают в себя:

- Stream API не выполняет операции над элементами коллекции до тех пор, пока не будет вызван терминальный метод.

- Stream API представляет собой поток данных, который можно обрабатывать с помощью функциональных операций.

- Stream API предоставляет множество функциональных операций, таких как filter(), map(), reduce() и т. д., которые позволяют обрабатывать элементы потока данных.

- Stream API не изменяет исходную коллекцию, а создает новый поток данных на основе исходной коллекции.

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

- Stream API требует вызова терминальной операции, такой как forEach(), collect() или reduce(), чтобы выполнить операции над элементами потока данных и получить результат.

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

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

High Cohesion

High Cohesion (высокая связность) — это принцип проектирования программного обеспечения, который подразумевает, что каждый модуль или класс должен иметь четко определенную ответственность и выполнять только одну задачу.
Это упрощает понимание, тестирование и поддержку кода, а также улучшает его модульность и масштабируемость.

В контексте Java, высокая связанность означает, что каждый класс должен иметь только одну причину для изменения. Это соответствует принципу единственной ответственности (Single Responsibility Principle, SRP) из принципов SOLID.

В этом примере у нас есть два класса: Calculator и Printer. Класс Calculator отвечает за выполнение арифметических операций, таких как сложение и вычитание, в то время как класс Printer отвечает за вывод сообщений на экран. Оба класса имеют высокую связность, так как каждый из них выполняет только одну задачу.

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

Senior Java Developer

PriorityBlockingQueue

Это реализация BlockingQueue, которая хранит элементы в естественном порядке (если они реализуют Comparable), или в порядке, определенном Comparatorm.
Это означает, что предметы, с наибольшим приоритетом, будут находиться в голове очереди и поэтому, будут выбираться для извлечения перед предметами с более низким приоритетом.

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

В этом примере мы создали 4 задачи, каждая с заданым имением и приоритетом. Затем мы добавили все задачи в PriorityBlockingQueue используя метод put(). После этого мы извлекаем все элементы из очереди используя метод take().

Поскольку очередь PriorityBlockingQueue гарантирует, что элементы будут храниться в порядке убывания приоритета, мы ожидаем, что во время выполнения кода задача с именем "JobC" будет выбрана первой, затем задача с именем "JobD" и т. д. Ответ был точно таким, как и ожидалось.

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

Senior Java Developer

Многие компании уже перешли на микросервисную архитектуру. Хотите оставаться востребованным на рынке IT? Тогда самое время пополнять свой багаж знаний! Приходите 🗓 13 июня в 20:00 на открытый урок «DDD и модульные монолиты», который приурочен к старту онлайн-курса «Microservice Architecture» в OTUS.

На занятии мы рассмотрим:
— Основы domain-driven design
— Применение DDD к предметно-ориентированному проектированию
— Поймем, как DDD помогает в построении архитектуры.

👨‍💻 Спикер — Станислав Щетинников, директор разработки с 10-летним опытом. Архитектурой систем занимается уже больше 8 лет.

👉 Пройдите вступительный тест, чтобы записаться на урок — https://otus.pw/3L6r/

Вебинар приурочен к старту онлайн-курса «Microservice Architecture» в OTUS. После урока полный курс вы сможете приобрести удобным для вас способом.

Реклама. Информация о рекламодателе на сайте
www.otus.ru

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

Senior Java Developer

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

Ближайшие мероприятия:

• 17-18 июня — Fast Track для С++ и Python разработчиков, офер за 2 дня в команды Поискового портала.
• 24-25 июня — Fast Track для Java разработчиков, офер за 2 дня в команды Яндекс Маркета.

Зарегистрироваться

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

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).
Выбор между этими свойствами зависит от требований и характеристик конкретной системы и ее целей.

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