Java Guru 🤓
13.4K subscribers
938 photos
15 videos
793 links
Канал с вопросами и задачами с собеседований!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrSQZ

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Что выведет данный код?
👍3🔥2
👍10🔥2
Как оптимизировать код по памяти?
👍3🔥2🥱1
👩‍💻 Хотите стать востребованным Java-разработчиком, освоить Spring и выйти на новый уровень в карьере и доходе?

Обучение на курсе «Разработчик на Spring Framework» — ваш шанс прокачаться и выйти на более серьёзные проекты!

✔️ Вы освоите Spring Boot, Spring MVC, Spring Security и ещё большое количество технологий.
✔️ Оттачивайте навыки на практике — каждое домашнее задание превратится в полноценное приложение!
✔️ У нас практикующие эксперты, живые лекции и проектный подход — всё, что сделает из вас сильного специалиста.

Станьте профессионалом, который уверенно работает с микросервисной архитектурой, быстро доносит идеи до production-grade и владеет Spring на уровне, который ценят в топовых компаниях. Диплом OTUS откроет вам двери к новым возможностям и амбициозным проектам.

🎁 В "Черную пятницу", скидки на курс до 15%! Подробности у менеджеров.

➡️ Последний шанс попасть в этот набор! Пройдите короткий тест и получите скидку: https://vk.cc/cFv1wK

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥2🥴1
Что вставить вместо ... чтобы найти максимум в массиве arr?
🔥6👍2
Что вставить вместо ... чтобы найти максимум в массиве arr?
Anonymous Quiz
19%
int max = Arrays.stream(arr).max().orElse(-1);
23%
int max = Arrays.max(arr);
2%
int max = arr[arr.length - 4];
21%
int max = Collections.max(Arrays.asList(arr));
👍12🔥3🥴32
Какой основной задачей должен заниматься JwtAuthenticationFilter?
🔥5👍2
Что выведет данный фрагмент кода?
👍8🔥21
Что выведет данный фрагмент кода?
Anonymous Quiz
14%
true true
56%
false true
16%
true false
14%
false false
👍7🔥4
Создание микросервиса

Присоединяйтесь к нашему открытому уроку и погрузитесь в основы разработки микросервисов

🚀На вебинаре вы узнаете:

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

2. Способы интеграции микросервисов с помощью REST API, gRPC или очередей сообщений (RabbitMQ, Apache Kafka).

3. Подходы к тестированию, отладке и мониторингу микросервисов для обеспечения их корректной работы в продакшене.

Практика: Расскажем, как проектировать микросервисную архитектуру, выбирать технологии и инструменты для её реализации.

👉 Регистрация и подробности о курсе «Архитектура и шаблоны проектирования» https://vk.cc/cFFimJ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍32🔥2
Как следует объявить поле age при работе с JPA, чтобы оно HE отображалось в БД?
👍6🔥3
Как следует объявить поле age при работе с JPA, чтобы оно HE отображалось в БД?
Anonymous Quiz
3%
public int
24%
private transient int
6%
private volatile int
10%
private int + @Column(nullable = true)
👍13🔥5🎉2
🤔Проектирование распределённых систем и управление масштабируемостью

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

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

👉 Регистрация и подробности о курсе System Design
https://otus.pw/dcVy/?erid=LjN8KL8bM

#реклама
О рекламодателе
👍54🔥2
Что выведет следующий код?
👍6🔥2
👍17🔥4
Что делает volatile?

volatile
– ключевое слово для работы с многопоточностью. Не то же самое, что volatile в C++, не обязано делать что-либо с кэшем процессора. Оказывает на поле объекта ровно два эффекта.

Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для long и double, и не на всех платформах. Для остальных типов полей это верно и так.

Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.

Для полного понимания темы рекомендуется к просмотру доклад
Алексея Шипилёва и документация. Лучше всего эффект volatile иллюстрирует задача из этого доклада, которую часто и дают в качестве этого вопроса. Вопрос – что выведет данный код:

int a; int b;

// thread 1:
a = 1;
b = 2;

// thread 2:
System.out.print(b);
System.out.print(a);

Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора volatile к переменной b, неожиданный результат 20 будет исключен.

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


@javalib #java
👍173🔥3🤔1😐1
Зачем нужно ключевое слово default?

Изначально (с Java 1.5) это слово использовалось для объявления дефолтного значения элементов аннотации.

В Java 8 вместе с лямбдами и стримами появилась острая необходимость дополнить стандартные интерфейсы новыми методами. Никто естественно не собирался ломать обратную совместимость, и было предложено добавить методы по умолчанию.

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

В реализации такого метода его дефолтный вариант вызывается тем же синтаксисом, что и внешний класс из вложенного: InterfaceName.super.methodName().

Методы по умолчанию подошли еще на шаг к введению в Java беспроблемной версии множественного наследования – примесям (mixin). Интерфейс не может иметь состояния, поэтому полноценные примеси всё ещё недоступны.


@javatasks #java
🔥92👍1
В каком порядке указываются модификаторы?

Правила применения модификаторов поля описаны в JLS 8.3.1:
🔘 Нельзя указывать один модификатор дважды;
🔘 Нельзя использовать несколько модификаторов доступа одновременно.

Порядок указания вообще свободный, но обычно используется следующий:
@Аннотации, доступ,
static final transient volatile


Требования для модификаторов метода находятся в JLS 8.4.3:
🔘 Те же требования, что и к полю;
🔘 Совместно с abstract кроме аннотаций можно использовать только protected или public;
🔘 native метод не может использовать strictfp.

И так же не требуется, но рекомендуется использовать такой порядок:
@Аннотации, доступ,
abstract static final synchronized native strictfp

@javatasks #java
👍8🔥31👏1