seniorjavist | Unsorted

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

-

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

Subscribe to a channel

Senior Java Developer

#вопросы_с_собеседований
Расскажите о механизме работы autoboxing в Java.

Autoboxing — это процесс, при котором примитивные типы данных автоматически преобразуются в соответствующие объекты их обертывающих классов. Это было введено в Java 5 для упрощения работы с примитивными типами и их обертывающими классами.

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

List<Integer> list = new ArrayList<>();
list.add(10);
Например, в этом случае число 10 — это примитивный тип int. Однако метод add() ArrayList ожидает объект Integer. Здесь происходит autoboxing: Java автоматически преобразует примитивный тип int в объект Integer перед добавлением его в список.

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

Senior Java Developer

Освойте базовые инструменты и возможности Java на бесплатном онлайн-интенсиве с 22 по 24 июня в 19:00 по московскому времени. На практических занятиях вы изучите синтаксис языка и попробуете написать Telegram-бота на Java.

Подробная программа и регистрация: 👉https://goo.su/Nc9u6c

📌Java в своих продуктах используют Twitter, Spotify, Netflix и другие сервисы. Игры Minecraft и Assassin’s Creed тоже написаны на Java. Согласно исследованиям, разработчики из России высоко ценятся на международных рынках.

☝️Никакой скучной теории — только самый интересный материал и мощная практика. За 3 дня вы примерите на себя профессию Java-разработчика и поймёте, в каком направлении двигаться дальше.

🎁 Всех ждут подарки. Участвуйте, задавайте вопросы и получите сертификат на скидку 10 000 рублей на любой курс Skillbox.

Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880

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

Senior Java Developer

LazyInitializationException

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

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

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

Существует несколько способов обработки LazyInitializationException:

1. Использование EAGER загрузки
2. Использование JOIN FETCH в запросах
3. Использование Hibernate.initialize()
4. Использование @Transactional

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

Senior Java Developer

SortedMap

SortedMap является интерфейсом, который расширяет Map и предоставляет гарантию порядка элементов на основе сортировки ключей.

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

В этом примере мы используем методы firstKey и lastKey для получения первого и последнего ключа в отсортированном порядке. А также создаем подмножество элементов с помощью метода subMap, указывая диапазон ключей.

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

Senior Java Developer

Метод interrupt()

interrupt() используется для прерывания потока исполнения. Этот метод является частью класса Thread и позволяет прервать поток, вызывая исключение InterruptedException, если поток находится в состоянии ожидания или блокировки. Если поток не находится в таком состоянии, метод interrupt() устанавливает флаг прерывания, который можно проверить с помощью метода isInterrupted().

Метод interrupt() может применяться в различных ситуациях, например, когда необходимо остановить поток по запросу пользователя или когда поток должен завершиться по достижении определенного условия.

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

Senior Java Developer

CompletableFuture

CompletableFuture в пакете java.util.concurrent является классом, который предоставляет мощный и гибкий подход к асинхронному программированию.
Он позволяет выполнять асинхронные операции и обрабатывать их результаты, комбинировать несколько операций и управлять зависимостями между ними.

Помимо операций, представленных на изображении, CompletableFuture также предоставляет множество других методов для работы с асинхронными операциями, таких как thenApply(), thenCompose(), thenCombine(), exceptionally() и другие, которые позволяют обрабатывать результаты, комбинировать операции, обрабатывать исключения и многое другое. Это делает CompletableFuture мощным инструментом для асинхронного программирования.

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

Senior Java Developer

Ключевое слово super

Ключевое слово super используется для вызова конструктора или метода родительского класса.

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

В этом примере у нас есть два класса: Animal и Dog. В конструкторе класса Dog используется ключевое слово super для вызова конструктора родительского класса Animal.
Также в методе makeSound() класса Dog используется super для вызова метода makeSound() родительского класса Animal.

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

Senior Java Developer

Spring Web MVC

Spring Web MVC является ключевым компонентом Spring Framework, который предоставляет модель-представление-контроллер (MVC) архитектуру для разработки веб-приложений на Java.
Он предлагает гибкую и мощную инфраструктуру для разработки веб-приложений с упором на простоту использования и расширяемость.

Spring Web MVC предоставляет множество возможностей, таких как обработка исключений, валидация данных, поддержка различных представлений (например: Thymeleaf, JSP) и многое другое.

В этом примере мы создали простое веб-приложение с использованием Spring Web MVC. Контроллер обрабатывает HTTP-запросы и возвращает строку в качестве ответа.
Перейдя по адресу http://localhost:8080/hello мы увидим сообщение "Hello, World!". Добавив параметр name в URL мы увидим сообщение "Hello, [значение, присвоенное параметру name]!".

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

Senior Java Developer

Spring AOP

Spring AOP (Aspect-Oriented Programming) — это подход, используемый в Spring Framework для реализации аспектов в приложении.

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

Spring AOP позволяет разработчикам определить аспекты, советы (advice) и точки соединения (join points) для перехвата и изменения поведения методов без изменения исходного кода.

В данном примере Spring AOP используется для логирования вызова метода exampleMethod() без изменения исходного кода сервиса. Аспект LoggingAspect перехватывает вызов метода и выполняет совет logBefore() перед выполнением метода.

Результатом работы кода будет вывод:
Method exampleMethod is called
Executing exampleMethod

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

Senior Java Developer

Как получить работу в IT?

IT — сфера с чудовищной конкуренцией, где каждый месяц прибавляется огромное количество людей, желающих занять ту или иную должность: начиная от стажера и тестировщика, и заканчивая Senior Developer. К Джунам требования растут каждый год, и пробиться на позицию с приличным оффером очень трудно.

Ищут работу, как правило, один из двух типов IT-специалистов:

🔸 Начинающие, кто в поиске хорошего предложения со старта;
🔸 Кодеры с опытом, кто хочет получать больше, чем есть сейчас.

И тем и другим подойдет семинар «Как найти работу в IT?».

👉На семинаре мы расскажем:

☑️С чего начать подготовку базы для собеседований;
☑️Как подготовиться к интервью, и на что смотрят рекрутеры;
☑️Как проходят поведенческое и техническое интервью;
☑️ На какие моменты стоит обратить особое внимание.

Семинар проводят:

Ведущий. Опытный разработчик, с 6+ опыта разработки на Java, прошедший более 30 собеседований в топовые IT-компании уровня FAANG, сейчас работа в Uber в Амстердаме;
Тайный IT-рекрутер. Более 2-х лет опыта работы по найму разработчиков разного уровня: от Junior до Senior, IT-архитекторов и т.д. Начинала с работы в Yandex, и уже помогла найти отличные позиции для более чем 200+ инженеров.

Семинар полностью БЕСПЛАТНЫЙ. Регистрация по ссылке внизу:

ХОЧУ НА СЕМИНАР

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

Senior Java Developer

Требуются парни и девушки в возрасте 19–40 лет, желающие работать в сфере IT. Опыт в программировании не нужен.

С 13 по 19 июня проводим бесплатный онлайн-интенсив по Frontend-разработке, где будем учить, как разрабатывать сайты и веб-приложения.

За эти 7 дней обучения ты:

1. Создашь полноценный веб-сайт на HTML и CSS;
2. Оживишь страницу с помощью JavaScript;
3. Используешь фронтенд-фреймворк Angular;
4. Подключишь Backend и загрузишь сайт на хостинг;
5. Получишь советы по доработке своего проекта;
6. Узнаешь сколько можно зарабатывать и как работать;
7. Получишь в подарок чек-лист «45 мест для поиска работы».

А главное, ты увидишь, что разрабатывать сайты и приложения не так сложно, как кажется. И поймёшь, как тебе развиваться в этой профессии, чтобы уже в следующем году зарабатывать от 1000$ на вёрстке сайтов.

👉 Проскочить на интенсив бесплатно

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

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

WeakReference

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

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

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

Senior Java Developer

JUnit.Assert

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

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

В этом примере мы имеем три тестовых случая:
testAddition(): проверяет, что результат сложения 2 и 3 равен 5.
testObjectEquality(): проверяет, что две строки "test" ссылаются на один и тот же объект.
testCondition(): проверяет, что условие "2 меньше 3" истинно.

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

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

Senior Java Developer

Ключевое слово native

Ключевое слово native используется для объявления метода, который реализован на другом языке программирования, обычно на C или C++.

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

Когда метод помечен как native, он не может иметь тела и должен заканчиваться точкой с запятой. Спецификация Java Native Interface (JNI) определяет правила и руководство по реализации нативных методов, таких как преобразование типов данных между Java и нативным приложением.

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

Senior Java Developer

NavigableMap

NavigableMap является интерфейсом, который расширяет SortedMap и предоставляет дополнительные методы для навигации по отсортированной коллекции.

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

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

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

Senior Java Developer

#вопросы_с_собеседований
Почему нежелательно использовать Thread.stop()?

Thread.stop() считается нежелательным для использования, потому что он не является безопасным. Остановка потока приводит к разблокированию всех мониторов, которые он заблокировал. Если какие-либо объекты, ранее защищенные этими мониторами, находились в несогласованном состоянии, другие потоки могут видеть эти объекты в несогласованном состоянии. Такие объекты называются поврежденными. Когда потоки работают с поврежденными объектами, может возникнуть произвольное поведение.

Вместо использования Thread.stop() рекомендуется использовать согласованный механизм, такой как interrupt.

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

Senior Java Developer

#вопросы_с_собеседований
Чем отличается Lambda от анонимного класса?

Хотя в некоторых случаях они и могут быть использованы взаимозаменяемо, Lambda-выражения и анонимные классы имеют различия.

Разберем основные из них:

1. Синтаксис: Lambda-выражения имеют более краткий и лаконичный синтаксис по сравнению с анонимными классами.

2. Область применения: Lambda-выражения могут быть использованы только для функциональных интерфейсов, в то время как анонимные классы могут быть использованы для любых интерфейсов и абстрактных классов.

3. Ключевое слово this: В анонимных классах ключевое слово this ссылается на сам анонимный класс, в то время как в lambda-выражениях this ссылается на объемлющий.

4. Производительность: Lambda-выражения обычно имеют лучшую производительность по сравнению с анонимными классами, так как они компилируются в приватные методы и используют инструкцию invokedynamic.

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

Senior Java Developer

Ключевое слово this

Ключевое слово this используется для ссылки на текущий объект внутри метода или конструктора.

В этом примере у нас есть класс Student с приватной переменной name. В конструкторе и методе setName используется ключевое слово this для разрешения конфликта имен между переменной экземпляра name и аргументом name.

Благодаря использованию this, мы можем ясно указать, что имеем в виду переменную экземпляра класса, а не аргумент метода или конструктора.

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

Senior Java Developer

Spring ORM

Spring ORM (Object-Relational Mapping) — это модуль Spring Framework, который предоставляет интеграцию с популярными ORM-фреймворками, такими как Hibernate, JPA и JDO
. Spring ORM предоставляет удобные шаблоны и интеграцию с Spring Transaction Management для упрощения работы с базами данных.

В этом примере мы будем использовать Spring ORM с Hibernate и H2 in-memory базой данных для создания простого приложения, которое сохраняет и извлекает объекты из базы данных:

1. Добавляем зависимости в наш build.gradle файл:

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.h2database:h2'
2. Создаем сущность Person.
3. Создаем репозиторий PersonRepository.
4. Создаем сервис PersonService.
5. Создаем главный класс для запуска приложения.

Результатом работы этого кода будет следующий вывод:
Saved person: John Doe
All persons:
John Doe

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

Senior Java Developer

ApplicationContext

ApplicationContext — это центральный интерфейс в Spring Framework для предоставления конфигурации приложения.
Он управляет созданием и связыванием объектов (bean'ов) во время выполнения приложения.

ApplicationContext предоставляет функции, такие как управление жизненным циклом bean'ов, внедрение зависимостей.

В данном примере мы использовали Java-конфигурацию для создания настройки ApplicationContext. Spring также поддерживает другие способы конфигурации, такие как XML-конфигурация и аннотации на основе компонентов.
Результатом работы этого кода будет вывод сообщения "Hello, World!".

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

Senior Java Developer

Узнаем точную дату с помощью Java

Здесь мы сначала получаем текущую дату через метод LocalDate.now(), затем вычитаем из нее заданное количество дней методом minusDays(), получая дату в прошлом.

Затем создаем объект класса DateTimeFormatter, который позволяет задать формат выводимой даты (в данном случае "dd.MM.yyyy"). И наконец, форматируем дату методом format() и выводим результат на экран.

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

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(), чтобы выполнить операции над элементами потока данных и получить результат.

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