Java Learning
19.4K subscribers
1.58K photos
1 video
3 files
957 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
#Вопросы_с_собеседования

Какова роль equals() и hashCode() в HashMap?

hashCode позволяет определить корзину для поиска элемента, а equals используется для сравнения ключей элементов в списке корзины и искомого ключа.
👍27
#Вопросы_с_собеседования

В чём заключается разница между методами start() и run()?

Несмотря на то, что start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит, в случае, когда вы вызываете метод start().
👍25
Guava

Guava — это сборник множества библиотек от Google. Он включает в себя:

☕️ несколько новых типов коллекций, неизменяемые коллекции;
☕️ библиотеку, реализующую работу с графами;
☕️ работу с вводом\выводом, хешированием, кэшированием, строками и многим другим.

Например, часто в коде можно встретить повторяющиеся блоки, реализующие низкоуровневую конкатенацию строк (см. пример кода). Согласитесь, код с Guava выглядит лаконичнее, понятнее, а главное, выполняет эту операцию самым оптимальным образом.

На эту библиотеку определённо стоит обратить внимание как минимум по причинам. Во-первых, она разработана спецами из Google. Во-вторых, эти же спецы из Google сами её используют. Репозиторий с документацией и инструкцией к установке тут.
👍21
#Вопросы_с_собеседования
Можно ли из конструктора бросить исключение?

С исключениями конструкторы работают точно так же, как и методы.

И если методы позволяют нам пробрасывать исключения, прописывая в заголовке метода throws <ТипИсключения>, то и конструктор позволяет нам это делать, и так же при наследовании и определении конструктора наследника мы можем расширять тип исключения. Например, IOException -> Exception (но не наоборот).

В качестве примера для пробрасывания конструктором исключения возьмем класс Cat. Допустим, при его создании мы хотим вводить имя и возраст с консоли(см картинку).

Так как reader.readLine() бросает исключение IOException, в заголовке мы его прописываем как возможное выбрасываемое исключение.
👍19
#Вопросы_с_собеседования

Что такое пакет? Перечислите различные преимущества пакетов.

Пакеты – это набор связанных классов и интерфейсов, которые связаны вместе. Используя пакеты, разработчики могут легко модулировать код и оптимизировать его повторное использование. Кроме того, код внутри пакетов может быть импортирован другими классами и использован повторно. Несколько его преимуществ:
• Пакеты на Java помогают избежать конфликтов имен.
• Они обеспечивают более легкий контроль доступа к коду.
• Пакеты также могут содержать скрытые классы, которые не видны внешним классам и используются только внутри пакета..
• Создает правильную иерархическую структуру, которая упрощает поиск связанных классов.
👍22
Примитивные типы

Компьютеры работают в основном с числами, поэтому были придуманы несколько ключевых слов, которые обозначают разные типы данных, по-другому их называют примитивные типы данных. Так как компьютеры развивались постепенно, то на разных этапах своей жизни они могли хранить число, которое не выше разряда процессора, на котором они работают. Поэтому появилась такая битовая таблица различных чисел.
👍26👎1
Проверка подключения к Интернету с помощью Java

В нашем случае программа выводит 0, если Интернет подключен, и 1, если Интернет не подключен.

Подробнее можно ознакомиться здесь.
👍26👎12
#Вопросы_с_собеседования

Существуют ли ситуации, когда блок finally не будет выполнен?

Ответ:
Например, когда JVM «умирает» - в такой ситуации finally недостижим и не будет выполнен, так как происходит принудительный системный выход из программы.
👍32👎2
👎3👍1
👍28😱3👎2
#Вопросы_с_собеседования

Где разрешена инициализация статических/нестатических полей?

• Статические поля можно инициализировать при объявлении, в статическом или нестатическом блоке инициализации.
• Нестатические поля можно инициализировать при объявлении, в нестатическом блоке инициализации или в конструкторе.
👍16
Collection.removeIf

Метод перебирает коллекцию, и удаляет те элементы, которые соответствуют filter.

В нашем примере мы в одну строку удаляем из списка все числа больше 5.
👍49
java8-tutorial

Подробный гайд по Java 8, шаг за шагом описывающий все возможности и особенности Java. Короткие примеры грамотно иллюстрируют основные концепции: минимум текста, максимум наглядности. Данный репозиторий может быть как справочником, так и учебником.

https://github.com/winterbe/java8-tutorial
👍18
Map.putIfAbsent

Раньше чтобы добавить пару в Map, если ее там нет, необходимо было делать следующее(см 1 часть на картинке).

Теперь все стало куда проще(см 2 часть на картинке).
👍46
#Вопросы_с_собеседования

Где и как вы можете использовать приватный конструктор?

Приватный (помеченный ключевым словом private, скрытый) конструктор может использоваться публичным статическим методом генерации объектов данного класса. Также доступ к нему разрешён вложенным классам и может использоваться для их нужд.
👍17
📌 Lombok — библиотека, генерирующая за вас бойлерплейт (шаблонный) код. Даёт возможность создавать классы ускоренно, так как не надо вручную прописывать, например, геттеры и сеттеры, всё делается с помощью аннотаций.

Вы можете создавать неизменяемые классы вместе с типовыми методами и геттерами к ним — с помощью @Value. Все поля класса будут финализированы и сделаны приватными.

Ознакомиться с проектом подробнее можно с помощью документации: https://projectlombok.org/
👍18
#Вопросы_с_собеседования

Как устроен HashMap?

HashMap состоит из «корзин» (bucket). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент.

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