Java Guru 🤓
13.3K subscribers
921 photos
16 videos
777 links
Канал с вопросами и задачами с собеседований!

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

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

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
☝️Конфликты — это не страшно. Главное — научиться ими управлять!

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

Приходи на бесплатный вебинар курса «Team Lead в IT» и узнай:
— Как не бояться конфликтов, а использовать их с пользой
— Конструктивные техники — вместо избегания или эмоциональных взрывов
— Как снижать напряжение и находить решения, которые устроят всех

Спикер: Алексей Кирсанов (Руководитель отдела продуктовой разработки Битрикс24) — знает, как работать с конфликтами без потерь для команды.

После вебинара сможешь записаться на курс со скидкой по промокоду TL_8 — не упусти возможность!

🔗 Регистрируйсяhttps://vk.cc/cOkW3M

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍2🔥2
Что будет результатом кода?
👍6🔥3
👍9🔥3
Что будет результатом кода?
👍21🔥1
Что будет результатом кода?
Anonymous Quiz
11%
5 10 15 20 30
9%
8 10 20 30
27%
5 8 10 15 20 30
9%
8 10 15 20 30
43%
10 15 20 30
👍11🔥4
Что будет результатом фрагмента кода?
👍3🔥2
👍10🔥3
Что можно импортировать статически?

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

Самое распространенное применение статического импорта – включение констант из константных интерфейсов и статических методов из утилитарных классов. Но также можно включать и изменяемые статические поля других классов.

Отдельно интересен случай nested-класса. Он одновременно является и классом, и статическим членом другого класса. Поэтому для него работает как обычный, так и статический импорт.

Языковая конструкция static import обязана располагаться там же, где и обычные импорты – обязательно между package и объявлением основного класса файла.


Java Guru🤓 #java
👍7🔥43
Для чего нужно ключевое слово super?

Как и многие другие ключевые слова, super имеет несколько разных значений в зависимости от контекста:

1. Задать нижнюю границу generic-типа: Consumer<? super Number>
2. Обратиться к члену класса-родителя, который перекрыт (shadowed) членами наследника или локальными переменными: int foo =
super.foo
3. Вызвать в конструкторе конструктор родителя: SubClass() { super("subclass param"); }
4. В случае неопределенности, уточнить родительский тип (на картинке)


Java Guru🤓 #java
👍14🔥71
Что будет результатом кода?
👍4🔥2
Можно ли переопределить статический метод?

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

На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.

Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.

Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию
@Override, в нём нельзя использовать ключевое слово super.

Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.


Java Guru🤓 #java
👍16🔥76
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.

Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.

Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа

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

Узнайте подробности и оставьте заявку.
6👍2🔥2🥴1
Как ведут себя конфликтующие импорты?

• Классы текущего пакета доступны без импорта. Если импортируется другой класс, совпадающий с классом-соседом по пакету – сосед перекрывается. Будет использован импортированный класс, без ошибки.

• Если в class-файле существует несколько разных классов с одинаковыми именами, объявленных здесь же или импортированных – это приводит к ошибке компиляции.

• Импортировать один и тот же класс несколько раз допускается. Будет всего лишь warning о неиспользуемом импорте.

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

• Чтобы применять несколько классов/констант с одинаковыми именами в одном файле, придется обойтись без импортов. Нужно будет обращаться по их полным именам, с указанием пакета.


Java Guru🤓 #java
👍64🔥4
Что делает @Qualifier("smsSender")?
👍2🔥2
Что делает @Qualifier("smsSender")?
Anonymous Quiz
3%
Позволяет создать бины динамически
5%
Заменяет @Autowired для внедрения зависимостей
1%
Изменяет поведение метода
90%
Выбирает конкретную реализацию MessageSender, если их несколько
2%
Используется только в тестах
👍4🔥2
В чем различие между приватным конструктором и финальным классом?

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

Если добавить объявлению класса модификатор final, это также запретит от него наследоваться, уже без излишнего ограничения на использование конструктора снаружи. Это основное применение этих двух подходов.

С точки зрения возможности наследования, ограничение через private конструктор более слабое. От такого класса, если он не финальный, можно наследовать внутренние и вложенные подклассы. Публичный вложенный класс может сработать как «паблик морозов» – дать внешним классам наследоваться через себя.


Java Guru🤓 #java
🔥84👍31
Когда нужно использовать raw types?

Сначала вспомним, что такое raw type. В Java так называют generic-типы без указания типа-параметра. Такая языковая конструкция валидна, но в большинстве случаев приводит к предупреждению компилятора.

Предупреждение связано с риском получения проблемы heap pollution. Ей мы уже посвящали публикации
ранее. Использование raw types никогда не оправдано – спецификация языка явно говорит: их поддержка остается только для обратной совместимости.

Есть всего три случая, когда использовать обобщенный тип без параметра правильно:
• Целевая версия Java < 5.0 (2002 год и ранее – вряд ли это ваш случай);
• В литерале класса. List<String>.class не сработает, нужно писать List.class;
• В операторе instanceof. Вместо instanceof Set<Integer> должно быть instanceof Set.


Java Guru🤓 #java
👍6🔥3
🚀 Хотите научиться интегрировать Apache Kafka и ClickHouse для эффективной обработки и анализа данных? 🚀

Присоединяйтесь к открытому уроку 20 августа в 20:00 МСК!

📚 Мы разберём, как настроить потоковую передачу данных, обеспечить надёжность и производительность, а также оптимизировать хранение и запросы. Вы узнаете, как использовать нативные коннекторы и Kafka Connect для интеграции этих двух мощных инструментов.

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

Присоединяйтесь и получите скидку на курс «Apache Kafka»:

https://vk.cc/cOFmQO

🎯 Не пропустите!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍2🔥2