Java Learning
18.7K subscribers
1.62K photos
1 video
3 files
998 links
№ 5079899194

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

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

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

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Простыми словами об InlineKeyboard в Телеграмм ботах на java

Смотреть статью
👍11
LinkedHashSet

LinkedHashSet представляет собой структуру данных, которая хранит элементы в порядке их добавления, а также не допускает дублирования элементов
, как и HashSet.

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

Как видно из примера, элементы были добавлены в множество в порядке их добавления, а дубликат элемента "Java" не был добавлен в множество.
👍11
#Вопросы_с_собеседования

🎙️ Как объединить два списка в Java?

Ответ на картинке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27
Прожарка java.lang.String

Давайте абьюзить баг в java.lang.String, который позволит делать очень странные строки. Мы сделаем "Hello World", который не начинается с "Hello" и покажем, что не все пустые строки равны между собой. Научимся прожаривать строки в чужих классах.

Смотреть статью
👍41
#Вопросы_с_собеседования

Что такое Java Virtual Machine (JVM)? Как она работает?

Java Virtual Machine (JVM) - это среда выполнения, которая позволяет выполнять Java-приложения на любой платформе, где установлена JVM. Она является ключевым компонентом технологии Java, так как обеспечивает портативность и независимость Java-кода от конкретной операционной системы.

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

Когда Java-приложение выполняется на JVM, оно получает доступ к богатому набору библиотек Java, которые предоставляют множество готовых классов и методов для решения различных задач. Благодаря JVM Java считается одним из самых надежных и масштабируемых языков программирования.
👍211
Hashset

HashSet - это одна из основных структур данных в Java Collections API.
Он представляет собой набор элементов, где каждый элемент уникален, и порядок элементов не гарантируется.

HashSet основан на HashMap, и его производительность во многом зависит от начальной емкости и коэффициента загрузки.

В этом примере мы создаем HashSet с типом String и добавляем в него несколько элементов. Обратите внимание, что мы добавляем "Apple" дважды. Затем мы выводим все элементы HashSet с помощью цикла for-each.

Элемент "Apple" добавлен только один раз, хотя мы пытались добавить его дважды. Это происходит потому, что HashSet автоматически удаляет дубликаты.
👍12
#Вопросы_с_собеседования

🎧 Что произойдет со сборщиком мусора, если выполнение метода finalize() требует ощутимо много времени, или в процессе выполнения будет выброшено исключение?

Непосредственно вызов finalize() происходит в отдельном потоке Finalizer (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины (в статической секции при загрузке класса Finalizer). Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, он подвесит поток Finalizer, но не сборщик мусора. Это в частности означает, что объекты, не имеющие метода finalize(), будут исправно удаляться, а вот имеющие будут добавляться в очередь, пока поток Finalizer не освободится, не завершится приложение или не кончится память.

То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Hashtable

Hashtable в Java - это реализация коллекции Map, которая была добавлена в Java в версии 1.0.

В этом примере мы создали объект Hashtable, добавили в него три элемента с ключами "A", "B" и "C" и значениями 1, 2 и 3 соответственно. Затем мы вывели на консоль все элементы таблицы, получили значение элемента с ключом "B" и удалили элемент с ключом "C".

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

*Hashtable не рекомендуется к использованию в новых приложениях, вместо нее следует использовать более современную реализацию HashMap или ConcurrentHashMap.
👍12
Каков результат выполнения кода на картинке?
Anonymous Quiz
3%
abc
33%
ac
20%
ace
40%
Ошибка компиляции
4%
Узнать ответ
👍201
Узнаем разницу между 2 датами, представленными в виде строк

Для вычисления разницы между двумя датами, представленными в виде строк, можно использовать классы java.time.LocalDate и java.time.temporal.ChronoUnit из пакета java.time.

В этом примере мы используем метод LocalDate.parse() для преобразования строковых значений в объекты типа LocalDate. Затем мы используем метод ChronoUnit.between() для вычисления разницы между двумя датами в днях, месяцах и годах.

Обратите внимание, что вы должны использовать формат даты "yyyy-MM-dd" для парсинга строковых значений даты. Если ваши строки даты имеют другой формат, вам может потребоваться использовать другой метод для преобразования их в объекты LocalDate.
👍13
#Вопросы_с_собеседования

Что такое double checked locking Singleton?

double checked locking Singleton - это один из способов создания потокобезопасного класса реализующего шаблон Одиночка. Данный метод пытается оптимизировать производительность, блокируясь только случае, когда экземпляр одиночки создаётся впервые.

Следует заметить, что требование volatile обязательно. Проблема Double Checked Lock заключается в модели памяти Java, точнее в порядке создания объектов, когда возможна ситуация, при которой другой поток может получить и начать использовать (на основании условия, что указатель не нулевой) не полностью сконструированный объект. Хотя эта проблема была частично решена в JDK 1.5, однако рекомендация использовать volatile для Double Cheсked Lock остаётся в силе.
👍13😱1
Что такое статическое и динамическое связывание?

Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).

В свою очередь, позднее связывание (late binding) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.

Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
👍11
Реализации исключения при делении на ноль

В этом примере мы создаем собственное исключение DivideByZeroException, которое наследуется от класса Exception. Затем, в блоке try мы проверяем, если делитель равен нулю, то мы бросаем это исключение с соответствующим сообщением. В блоке catch мы перехватываем исключение и выводим его сообщение об ошибке.

Обратите внимание, что если вы пытаетесь поделить ноль на ноль, будет брошено исключение типа ArithmeticException, которое уже предусмотрено в Java для обработки ситуаций деления на ноль.
👍6
#Вопросы_с_собеседования

Каким будет результат выполнения следующего кода?

Объяснение: В этом коде мы вызываем метод divide, который выполняет деление двух чисел. При делении на ноль возникает исключение ArithmeticException, которое перехватывается в блоке catch. В блоке finally всегда выполняется инструкция return 0, поэтому в итоге результатом будет значение -1.

Этот вопрос проверяет понимание исключений, блоков try-catch-finally и порядка выполнения кода в Java.
👍10😢4
Может ли статический метод быть переопределён или перегружен?

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

Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - это вполне корректная языковая конструкция.

В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.
👍9
Функциональное тестирование в SpringBoot

Смотреть статью
👍8
Что будет, если скомпилировать и запустить этот код?
Anonymous Quiz
40%
Ошибка во время компиляции
18%
NullPointerException
9%
StackOverflowException
33%
Код отработает успешно
👍10