Java Guru 🤓 – Telegram
Java Guru 🤓
13.1K subscribers
916 photos
15 videos
791 links
Канал с вопросами и задачами с собеседований!

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

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

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Какой результат выведет следующая программа?
Anonymous Quiz
21%
A.print() is called
62%
B.print() is called
3%
Ошибку при выполнении
14%
Ошибку компиляции
👍22🎉3
В чем разница между композицией и агрегацией?

Агрегация
- процесс при котором мы не строго связываем объекты, то есть наш корневой объект может существовать и правильно функционировать и без инициализации объектов-полей.

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

Для полного понимания следует обратиться к примерам: наш корневой объект - машина(Car). У машины есть двигатель(Engine) и пассажиры(Passenger[]). Мы можем высадить всех пассажиров(стереть массив Passenger, либо самому массиву, либо каждому месту передать значение null) и машина будет функционировать и без них - это называют агрегацией. В то же время машина не может функционировать без двигателя и данный конкретный двигатель не может "обслуживать" другую машину - если наша CarНonda Сivic, то у нее двигатель может быть только 2л и на Honda Accord мы его уже не поставим - это называется композиция.
👍34😢1👌1
Что такое динамическое связывание?

Что бы ответить на этот вопрос, необходимо понимать что такое само по себе связывание. И так, связывание - это наличие связи между ссылкой и кодом. Пример: ссылка на которую Вы ссылаетесь привязана к коду в котором она определена. Так же и метод привязан к месту в коде в котором он определен.

Что же такое динамическое связывание? Динамическое связывание означает что метод привязывается к конкретному коду в момент вызова, на этапе выполнения программы, на этапе создания объектов, а не при компиляции программы в байт-код.
👍22🔥1😢1
Какой результат выведет следующая программа?
👍20😢2
👍18
Перечислите SOLID принципы

SOLID - это аббревиатура. Расшифровывается так:

S - Single Responsibility - означает что класс должен отвечать только за операции одного типа.

O - Open-Closed - описываемый класс должен быть открыт для расширения, но закрыт для изменений.

L - Liskov Substitution - если наш класс А является наследником класса В, то любой объект класса В может быть заменен объектом класса А без негативных последствий и нарушения функционала.

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

D - Dependency Inversion - зависимости самого низкого уровня не должны зависеть от зависимостей высшего уровня и наоборот - зависимости высшего уровня НЕ могут существовать без зависимостей низшего уровня.
👍46
Какой результат выведет следующая программа?
👍11
Какой результат выведет следующая программа?
Anonymous Quiz
27%
A.print() is called
56%
B.print() is called
3%
Ошибку при выполнении
13%
Ошибку компиляции
👍25
Что значит Liskov Substitution?

Рассмотрим ситуацию когда мы имеем класс А - пусть это будет класс грузовик(Truck) и его наследник прицепной грузовик(Trailer). Назначение что одного, что другого - перевозка грузов. Используя принцип подстановки Барбары Лисков мы можем заменить любой Truck на Trailerбез потери производительности, без негативных последствий и нарушений функционала в любом месте в программе.
👍23🤔8
Какой результат выведет следующая программа?
👍10
Какой результат выведет следующая программа?
Anonymous Quiz
30%
Equal
34%
Not equal
20%
Ошибку при выполнении
15%
Ошибку компиляции
👍14
Что такое IoC? Как это используется в Spring?

IoC
- один из принципов ООП. Расшифровывается как Inversion of Control и дает нам возможность просто описать класс, не заботясь о его инициализации. Иными словами - мы создаем классы, отдаем эти класс под управление системой, а система уже сама создает экземпляры этого класса и сама решает какой экземпляр и где его использовать.

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

Spring использует IoC-контейнер для инициализации классов, контроля за их использованием. Когда мы помечаем один из классов как
@Service мы "отдаем" этот самый класс под власть Spring и дальше сам Spring будет отвечать за создание экземпляра этого класса и внедрение этого самого экземпляра в нужном месте.
👍17🔥1
Какой результат выведет следующая программа?
👍19
Какой результат выведет следующая программа?
Anonymous Quiz
4%
10
29%
15
6%
20
62%
Ошибку компиляции
👍22😐15😢2🎉1
Что такое AOP? Как это используется в Spring?

АОР - аспектно-ориентированное программирование
, парадигма программирования, призванное решить те задачи для которого ООП кажется избыточным. В основе идеи лежит выделение сквозной функциональности. Грубо говоря - мы выносим наш функционал, не относящийся к бизнес логике в отдельное место и даем ему набор правил когда и с кем работать. Сумбурно? Пример: мы не можем писать код без логов. Но логи - это не часть бизнес логики, это вспомогательный функционал. Мы можем описать всю логику логов в отдельном классе и затем каждый раз инициализировать этот класс для выведения лога или же мы можем создать отдельный класс(аспект) и навесить набор правил когда и где использовать этот код. Имеем класс Service, метод method() внутри и аспект LogAspect. Используя аннотации мы можем указать методам внутри LogAspect что они должны быть вызваны перед, либо после вызова Service.method(). Так же мы можем указать выполнение после возврата результата либо после ошибки.

Spring использует АОР, например, при проверке security при доступе на тот или иной эндпоинт.
👍22
Какой результат выведет следующая программа?
👍13
Какой результат выведет следующая программа?
Anonymous Quiz
14%
0
18%
128
53%
-128
15%
Ошибку компиляции
👍26
Жизненный цикл Spring Beans?

Жизненным циклом бина в Spring управляет контейнер Spring. После запуска контейнера он начинает создавать необходимые бины(компоненты) и внедрять зависимости. Когда контейнер завершает свою работу уничтожаются и бины связанные с ним. Весь цикл жизни бина можно разделить на 6 этапов:

1. Инстанцирование объекта - технический старт жизни любого объекта, работа конструктора.

2. Установка свойств и внедрение зависимостей - выполнение конфигурационных свойств бина и внедрение необходимых ему зависимостей.

3. Уведомление aware-интерфейсов - если бин реализует Aware интерфейс, он будет вызываться путем передачи имени бина set*() метод.

4. Пре-инициализация - метод postProcessBeforeInitialization() интерфейса BeanPostProcessor.

5. Инициализация - сначала выполняется метод бина с аннотацией PostConstruct, затем метод afterPropertiesSet() в случае если бин реализует InitializingBean, метод init().

6. Пост-инициализация - метод postProcessAfterInitialization() интерфейса BeanPostProcessor.
👍19
Какой результат выведет следующая программа?
👍16
Какой результат выведет следующая программа?
Anonymous Quiz
34%
Hello world!
36%
Ошибку при выполнении
29%
Ошибку компиляции
👍18🤔4😢2
Какие есть scope Spring Beans?

Scope бинов - области видимости бинов. Spring включает в себя шесть областей видимости:

Singleton - область видимости установленная по умолчанию, в случае если не установлен никакая другая видимость. Работает как любой паттерн проектирования Singleton.

Prototype - означает что каждый раз при обращении к контейнеру будет возвращен разные объекты.

Request - создает бин для одного HTTP запроса.

Session - аналогичен Request, но работает на уровне сессии.

Application - жизненный цикл ServletContext.

Websocket - создает бин для сессии веб-сокета
👍18🔥1