Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
33 photos
2 videos
1.13K links
Download Telegram
Является ли коллекция HashMap потоком безопасной ?
Спросят с вероятностью 12%

Коллекция HashMap не является потокобезопасной. Это означает, что при одновременном доступе к нему из нескольких потоков без должной синхронизации могут возникнуть проблемы, такие как потеря данных, гонки за данные и другие виды состояний гонки. Если один поток изменяет ее структуру (например, добавляя или удаляя элементы), в то время как другой поток итерирует по ней или также пытается внести изменения, результаты могут быть непредсказуемыми.

Для работы в многопоточной среде рекомендуется использовать потокобезопасные альтернативы, такие как:

1️⃣Collections.synchronizedMap(Map): Оборачивает ее (или любую другую карту) в потокобезопасную обёртку, гарантируя безопасность при доступе из разных потоков. Однако при использовании этого метода важно помнить, что если итерация по коллекции происходит в многопоточной среде, необходимо синхронизировать весь блок итерации на возвращённой карте для предотвращения конкурентных модификаций.
        Map<String, String> map = Collections.synchronizedMap(new HashMap<>());


2️⃣ConcurrentHashMap: Предоставляет потокобезопасную реализацию карты без блокировки всей карты. ConcurrentHashMap разработан для высокой конкуренции и эффективности при доступе из множества потоков, обеспечивая лучшую производительность по сравнению с synchronizedMap. ConcurrentHashMap позволяет одновременно читать данные из карты несколькими потоками без блокировки и записывать данные при минимальной блокировке.
        Map<String, String> concurrentMap = new ConcurrentHashMap<>();


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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33😁32
Какой метод из класса Object будет вызван по умолчанию, если объект используется в строковой конкатенации?
Anonymous Quiz
3%
finalize()
3%
getClass ( )
4%
hashCode ()
90%
toString()
😁12👍65
Что такое mock ?
Спросят с вероятностью 12%

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

Ключевые аспекты:

Изоляция тестируемого компонента: Объекты позволяют изолировать тестируемый компонент от его зависимостей, что обеспечивает точность тестирования и помогает точно определить причины возникновения ошибок.
Контроль взаимодействий: С помощью него объектов можно точно определить, как тестируемый компонент взаимодействует с его зависимостями, включая проверку вызовов методов, передачу аргументов и возвращаемые значения.
Тестирование в различных сценариях: Объекты позволяют легко настраивать различные условия тестирования, например, имитируя различные ситуации ошибок или исключительных состояний, которые могут быть трудно воспроизвести с реальными объектами.
Ускорение тестирования: Поскольку такие объекты имитируют только необходимые аспекты реальных объектов, они могут существенно ускорить выполнение тестов по сравнению с использованием реальных компонентов, особенно если последние медленно работают или требуют сложной настройки.

Пример:
import static org.mockito.Mockito.*;

public class SomeTest {
@Test
public void testSomeMethod() {
// Создание mock объекта
MyDependency myMock = mock(MyDependency.class);

// Настройка поведения mock объекта
when(myMock.someMethod()).thenReturn("expected value");

// Создание экземпляра тестируемого класса с mock зависимостью
MyClass myClass = new MyClass(myMock);

// Вызов тестируемого метода
String result = myClass.useDependency();

// Проверка результата
assertEquals("expected value", result);

// Проверка взаимодействия с mock объектом
verify(myMock).someMethod();
}
}


В этом примере используется mock объект для зависимости MyDependency класса MyClass, что позволяет тестировать поведение MyClass в изоляции от реализации MyDependency, предоставляя при этом контролируемое окружение для проверки взаимодействий и результатов выполнения.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Что такое коллекции и зачем они нужны ?
Спросят с вероятностью 12%

Коллекции — это структуры данных, предназначенные для хранения группы объектов. Они представлены Java Collection Framework (JCF), который включает в себя различные интерфейсы и классы, такие как списки (List), множества (Set), очереди (Queue) и карты (Map). Эти структуры данных позволяют эффективно управлять наборами данных, обеспечивая удобный доступ к элементам, их хранение и манипулирование ими.

Зачем они нужны:

1️⃣Гибкое управление данными: Позволяют хранить объекты динамически, в отличие от массивов, размер которых фиксирован. Это означает, что вы можете добавлять, удалять и изменять элементы в коллекции в любое время.

2️⃣Поддержка различных структур данных: Каждая структура данных имеет свои особенности и предназначена для решения определённых задач. Например, List поддерживает упорядоченную коллекцию с дубликатами, Set — набор уникальных элементов, Map — хранение пар ключ-значение.

3️⃣Улучшение производительности: Многие реализации коллекций оптимизированы для быстрого выполнения часто используемых операций, таких как поиск, сортировка и вставка элементов.

4️⃣Повышение читаемости и упрощение кода: Использование их и их методов помогает сделать код более понятным и сократить количество написанного кода за счёт использования готовых абстракций.

5️⃣Облегчение выполнения сложных операций: Они в сочетании с Stream API и более новых версиях предоставляют мощные инструменты для обработки данных, включая фильтрацию, преобразование, сортировку и агрегацию.

Пример:
import java.util.ArrayList;
import java.util.List;

public class CollectionExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");

for (String fruit : fruits) {
System.out.println(fruit);
}
}
}


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

Коллекции необходимы для эффективного управления наборами данных. Они предоставляют гибкие и мощные средства для хранения, доступа и манипулирования объектами, делая код более чистым, понятным и эффективным.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍262🤯1
В чем разница Spring Boot и Spring ?
Спросят с вероятностью 12%

Spring и Spring Boot являются частью экосистемы, которая предоставляет широкий спектр инструментов для разработки современных Java-приложений. Несмотря на тесную связь, между ними есть ключевые отличия.

Spring Framework

Это мощный и широко используемый фреймворк для разработки приложений на Java. Он предоставляет обширный набор функциональностей, включая инверсию управления (IoC) и внедрение зависимостей (DI), абстракции для работы с транзакциями, обработку исключений, поддержку аспектно-ориентированного программирования (AOP) и многое другое. Он предназначен для упрощения Java EE разработки, обеспечивая легкость создания масштабируемых и легко поддерживаемых приложений.

Основные характеристики:
1️⃣ Повышение производительности и упрощение управления транзакциями.
2️⃣ Облегчение интеграции с другими Java фреймворками и библиотеками.
3️⃣ Поддержка модульного программирования через разделение приложения на отдельные компоненты.

Spring Boot

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

Основные характеристики:
1️⃣ Автоматическая конфигурация Spring-приложений в соответствии с "лучшими практиками".
2️⃣ Встроенные серверы приложений, такие как Tomcat, Jetty, чтобы можно было запускать веб-приложения без внешнего сервера.
3️⃣ Обширная поддержка стартеров, которые автоматически добавляют зависимости и автоконфигурацию для различных модулей Spring (например, Spring MVC, Spring Data JPA).
4️⃣ Упрощение управления зависимостями и версиями.
5️⃣ Поддержка быстрого создания исполняемых JAR- и WAR-файлов для упрощения развертывания.

Различия

- Цель: Spring Framework предоставляет основу для создания приложений на Java, в то время как Spring Boot предлагает конвенции и автоматическую конфигурацию для быстрого старта и развертывания приложений.
- Конфигурация: В Spring для настройки приложения часто требуется детальная конфигурация, включая XML-файлы или аннотации. Spring Boot стремится уменьшить эту сложность, автоматически конфигурируя компоненты на основе добавленных в проект зависимостей.
- Встроенный сервер: Spring Boot по умолчанию включает в себя встроенный сервер приложений, что упрощает развертывание и тестирование веб-приложений.

Spring Boot не заменяет Spring Framework, а дополняет его, предоставляя более простой и быстрый способ для создания готовых к развертыванию приложений, оптимизируя и автоматизируя многие процессы конфигурации.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35
Какой интерфейс в иерархии коллекций
Java не наследуется ни от одного другого интерфейса коллекций?
Anonymous Quiz
4%
List
9%
Set
14%
Queue
73%
Collection
7
В чем разница между ArrayList и Вектором ?
Спросят с вероятностью 12%

ArrayList и Vector оба реализуют интерфейс List и используются для хранения динамических массивов объектов, но между ними существуют важные различия, которые делают их подходящими для разных сценариев использования.

Основные различия:

1️⃣Синхронизация:
Vector: Все методы Vector синхронизированы. Это означает, что они потокобезопасны и могут использоваться без дополнительных мер предосторожности в многопоточных средах. Однако из-за этого Vector может работать медленнее, чем ArrayList, в однопоточных приложениях из-за накладных расходов на синхронизацию.
ArrayList: Методы ArrayList не синхронизированы. Это делает ArrayList более быстрым, чем Vector, в средах, где потокобезопасность не является требованием. Для использования в многопоточных средах необходимо обеспечить внешнюю синхронизацию или использовать Collections.synchronizedList() для оборачивания ArrayList.

2️⃣Рост:
Vector: По умолчанию увеличивает свою емкость на 100% (удваивается), когда требуется расширение, если не указан иной коэффициент расширения.
ArrayList: Увеличивает свою емкость примерно на 50% при необходимости расширения.

3️⃣Производительность:
Из-за синхронизированных методов Vector может быть менее производительным в сравнении с ArrayList, особенно в приложениях, где требуется высокая скорость работы с коллекциями в однопоточном режиме.

4️⃣Использование:
Vector считается немного устаревшим и рекомендуется к использованию в особых случаях, когда требуется встроенная потокобезопасность без внешней синхронизации.
ArrayList является предпочтительным выбором для новых разработок из-за его производительности в большинстве сценариев.

Пример:
import java.util.*;

public class ListExample {
public static void main(String[] args) {
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");

List<String> vector = new Vector<>();
vector.add("C++");
vector.add("JavaScript");
}
}


Выбор между ArrayList и Vector зависит от конкретных требований к приложению. Если потокобезопасность является ключевым требованием и вы готовы пожертвовать некоторой производительностью, то Vector может быть подходящим выбором. В большинстве других случаев предпочтительнее использовать ArrayList из-за его лучшей производительности и широкой распространённости в современном коде.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114😁2
Какие состояния объекта есть в Hibernate ?
Спросят с вероятностью 12%

В Hibernate, фреймворке для отображения объектно-реляционных данных, объект может находиться в одном из трёх основных состояний:

1️⃣Transient (Временное)

Объект только что создан с использованием оператора new и ещё не связан с сессией Hibernate.
Объект ещё не сохранён в базе данных, и у него нет представления в базе данных.
Объект во временном состоянии не управляется Hibernate, и изменения, сделанные в объекте, не отслеживаются.
Чтобы сохранить объект в базе данных, его необходимо явно передать в сессию Hibernate с использованием методов save(), persist() или аналогичных.

2️⃣Persistent (Постоянное)

Объект связан с уникальной сессией Hibernate и имеет соответствующую запись в базе данных.
Любые изменения, внесённые в объект в состоянии Persistent, автоматически синхронизируются с базой данных при фиксации транзакции или закрытии сессии (если включено автоматическое применение изменений).
Объекты в состоянии Persistent могут быть извлечены из базы данных с помощью запросов или методов get(), load().

3️⃣Detached (Отсоединённое)

Объект был в состоянии Persistent, но его сессия была закрыта.
Объект всё ещё имеет соответствующую запись в базе данных, но любые изменения, внесённые в объект после закрытия сессии, не отслеживаются и не синхронизируются с базой данных автоматически.
Чтобы снова синхронизировать состояние объекта с базой данных, его необходимо повторно связать с новой сессией Hibernate с использованием методов update(), merge() или saveOrUpdate().

4️⃣Removed (Удалённое)

Это неформальное состояние, когда объект был в состоянии Persistent, но затем был удалён из базы данных с использованием метода delete().
После удаления объект по-прежнему существует в памяти, но больше не имеет соответствующей записи в базе данных и не связан с сессией Hibernate.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍392🔥2😁1
Какие есть коллекции ?
Спросят с вероятностью 12%

Коллекции — это структуры данных, которые используются для хранения групп объектов. Java Collection Framework предоставляет разнообразный набор классов и интерфейсов для работы с ними, позволяя хранить, извлекать, манипулировать и агрегировать данные. Вот основные интерфейсы и некоторые их реализации:

Основные интерфейсы:

1️⃣Collection: Корневой интерфейс для всех коллекций, кроме карт (maps). Определяет базовые операции (например, добавление, удаление, проверка размера).

2️⃣List: Определяет упорядоченную коллекцию, которая может содержать дублирующиеся элементы. Элементы можно доступать по индексу.
ArrayList: Реализация на основе динамического массива. Предоставляет быстрый доступ к элементам по индексу.
LinkedList: Связный список, обеспечивающий быстрое вставку и удаление элементов.

3️⃣Set: Коллекция, не содержащая дублирующихся элементов.
HashSet: Хэш-таблица, предоставляющая быстрые операции вставки, удаления и поиска.
LinkedHashSet: Хэш-таблица с сохранением порядка добавления элементов.
TreeSet: Отсортированное множество на основе красно-чёрного дерева.

4️⃣Queue: Коллекция для хранения элементов в порядке обработки. Поддерживает операции вставки, извлечения и инспекции.
LinkedList: Может также использоваться как реализация Queue.
PriorityQueue: Очередь, организующая элементы согласно их приоритетам.

5️⃣Deque: Двусторонняя очередь, позволяющая вставку и удаление элементов с обоих концов.
ArrayDeque: Реализация на основе динамического массива.

Карты (Maps):

1️⃣Map: Объект, который хранит пары ключ-значение. Ключи уникальны, а значения могут дублироваться.
HashMap: Хэш-таблица для хранения пар ключ-значение. Не гарантирует порядок элементов.
LinkedHashMap: Хэш-таблица с сохранением порядка добавления элементов.
TreeMap: Отсортированная мапа на основе красно-чёрного дерева.
Hashtable: Потокобезопасная реализация Map (устаревшая, использование ConcurrentHashMap предпочтительнее).

Специализированные коллекции:

EnumSet: Высокоэффективная реализация интерфейса Set для использования с перечислениями (enums).
EnumMap: Реализация интерфейса Map, предназначенная для использования с ключами типа enum.

Java Collection Framework обеспечивает мощные абстракции для работы с коллекциями данных, позволяя разработчикам выбирать структуры данных, наиболее подходящие под конкретные задачи, учитывая их производительность и особенности работы с данными.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🤔2
Что такое Vector ?
Спросят с вероятностью 12%

Vector — это класс, который реализует динамический массив для хранения объектов. Он является частью Java Collection Framework и находится в пакете java.util. Он очень похож на ArrayList, но с несколькими ключевыми отличиями:

1️⃣Синхронизация: В отличие от ArrayList, большинство методов в нем синхронизированы, что означает, что они потокобезопасны. Это означает, что объект Vector можно безопасно использовать в многопоточных средах без внешней синхронизации. Однако эта потокобезопасность идёт за счёт производительности, поэтому Vector может работать медленнее ArrayList в однопоточных приложениях.

2️⃣Расширение: Как и ArrayList, он автоматически увеличивает свой размер, когда в него добавляются новые элементы. Однако Vector позволяет указать размер инкремента — значение, на которое будет увеличиваться емкость вектора при необходимости расширения. Если размер инкремента не задан, то по умолчанию он удваивает свой размер.

Основные методы:

add(Object element): добавляет элемент в конец вектора.
get(int index): возвращает элемент по указанному индексу.
remove(int index): удаляет элемент по указанному индексу.
size(): возвращает количество элементов в векторе.
isEmpty(): возвращает true, если вектор не содержит элементов.

Пример:
import java.util.Vector;

public class VectorExample {
public static void main(String[] args) {
Vector<String> vector = new Vector<>();
vector.add("Java");
vector.add("Python");
vector.add("C++");

System.out.println("Первый элемент вектора: " + vector.get(0));

for(String lang : vector) {
System.out.println(lang);
}
}
}


Хотя Vector и является довольно старым классом, в современном коде он используется реже в пользу более новых классов коллекций, таких как ArrayList или CopyOnWriteArrayList, особенно в однопоточных приложениях или там, где потокобезопасность обеспечивается другими средствами. Основной сценарий использования Vector сегодня — это ситуации, когда требуется встроенная синхронизация доступа к коллекции из разных потоков.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Для чего используется Spring MVC ?
Спросят с вероятностью 12%

Spring MVC (Model-View-Controller) — это модуль фреймворка Spring, предназначенный для разработки веб-приложений со стороны сервера с использованием модели MVC. Spring MVC обеспечивает гибкую архитектуру для создания легко тестируемых и масштабируемых веб-приложений, поддерживая при этом разделение ответственности между компонентами модели, представления и контроллера. Вот основные аспекты и преимущества использования:

Разделение ответственности

Модель (Model) представляет структуру данных приложения, бизнес-логику и функции управления состоянием (например, получение данных из базы данных).
Представление (View) отвечает за отображение данных, полученных от модели, пользователю. В Spring MVC для этой цели могут использоваться различные технологии, такие как JSP, Thymeleaf, FreeMarker и другие.
Контроллер (Controller) обрабатывает входящие запросы от пользователя, взаимодействует с моделью для получения необходимых данных и определяет, какое представление должно быть отображено пользователю.

Гибкость и мощь

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

Простота интеграции

Легко интегрируется с другими модулями Spring, такими как Spring Security для аутентификации и авторизации, Spring Data для работы с базами данных и Spring Boot для упрощения конфигурации и развертывания приложений.

Поддержка REST

Поддерживает создание как традиционных веб-сайтов, так и RESTful веб-сервисов, предоставляя аннотации и утилиты для удобной работы с HTTP-запросами и ответами, форматирования данных в JSON или XML и обработки HTTP-методов (GET, POST, DELETE и т.д.).

Легкость тестирования

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

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
В чём основное различие между RestController и Controller ?
Спросят с вероятностью 12%

Основное различие между аннотациями @RestController и @Controller заключается в способе обработки HTTP-запросов и возвращаемых ими ответов, а также в предназначении этих аннотаций.

@Controller

Используется для определения классов в Spring MVC, которые работают как контроллеры в модели MVC (Model-View-Controller). Классы, аннотированные как @Controller, обычно возвращают имя представления (view), и Spring использует ViewResolver для определения, какое представление должно быть отображено в ответ на запрос. Также, при необходимости возвращать данные напрямую в теле ответа, в методах контроллера, аннотированных @Controller, используется @ResponseBody.

Пример:
@Controller
public class MyController {

@RequestMapping("/greeting")
public String greet(Model model) {
model.addAttribute("message", "Hello World");
return "greeting"; // Имя представления, которое нужно отрендерить
}
}

@RestController

Это специализированная версия аннотации @Controller, которая предназначена для создания RESTful веб-сервисов. Она объединяет в себе @Controller и @ResponseBody, благодаря чему все методы в классе, аннотированном @RestController, автоматически считаются имеющими аннотацию @ResponseBody. Это означает, что данные, возвращаемые методами, автоматически сериализуются в JSON или XML и возвращаются в теле HTTP-ответа.

Пример:
@RestController
public class MyRestController {

@RequestMapping("/data")
public Map<String, String> getData() {
Map<String, String> data = new HashMap<>();
data.put("message", "Hello World");
return data; // Данные автоматически сериализуются в JSON и возвращаются в теле ответа
}
}


Основное различие

@Controller используется для веб-приложений с серверной генерацией HTML-страниц (представлений). Для возврата данных в теле ответа необходимо явно использовать @ResponseBody.
@RestController предназначен для создания RESTful веб-сервисов, где все методы автоматически возвращают данные в теле ответа, обычно в формате JSON или XML, что делает его идеальным выбором для API-бэкендов.

Выбор между @Controller и @RestController зависит от конкретных требований к приложению и предпочтительного способа взаимодействия с клиентом или потребителем API.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍322
Какой принцип ООП наиболее тесно связан с уменьшением зависимости между различными частями программы?
Anonymous Quiz
34%
Инкапсуляция
6%
Наследование
21%
Полиморфизм
39%
Абстракция
🤔30👍8👾32🤯1