Java Learning
19.8K subscribers
1.58K photos
1 video
3 files
952 links
№ 5079899194

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

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

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

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Решение

За счёт переполнения. Integer.MAX_VALUE — максимальное значение, которое int может хранить в Java. Если вы достигаете Integer.MAX_VALUE и инкрементируете это значение, то скатываетесь к Integer.MIN_VALUE, то есть, к минимальному значению Integer. Таким образом, для решения этой Java-задачи нам достаточно присвоить переменной start значение на 1 меньшее, чем максимальное для типа данных int.

Что получается? Мы начинаем со start=2147483645 (Integer.MAX_VALUE-1), на следующей итерации значение становится 2147483645, потом 2147483646, затем -2147483648, -2147483647… и так далее.
👍38🤩10
NullPointer Exception

Исключения нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта.

Возьмем для примера следующую строчку кода:
int noOfStudents = school.listStudents().count;

Если объект school окажется равен Null или его метод listStudents вернет Null, вы получите исключение NullPointerException.

Хорошей практикой разработки на Java является предварительная проверка на Null в методах.
🔥11👍1
+ vs append

Никогда не используйте операции конкатенации (оператор +) строки в цикле, особенно если таких операций у вас много, это может очень существенно снизить производительность.

Все это происходит потому, что в приведенном выше примере «s = s + fileds[i]» выполняется целых 3 операции: создается StringBuilder на основе строки s, вызывается метод конкатенации append, после конкатенации вызывается метод toString (выглядит так: s = new StringBuilder(s).append(fields[i]).toString();). Целых 3 операции вместо одной!

Помимо этого каждый результат s + fileds[i] будет занимать память в куче, как отдельная строка.
😱21👍61🎉1
Пирамидальная сортировка

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

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

Общее время сортировки расчитывается по O(N logN) для N элементов.
🔥12👍1
👍5
🎉6👍3
Google-json (GSON)

Google-json, как понятно из названия, ещё одна разработка прямиком из Google. Библиотека реализует механизмы работы с форматом JSON, а именно приведение Java-объектов в этот формат и обратно.

Примерно вот так выглядит сериализация и десериализация с помощью GSON(см картинку).

Как видно, перевод объекта проходит с помощью минимального количества легкочитаемого и понимаемого кода. Особенно эта библиотека пригодится при работе с RESTful приложениями, которые общаются преимущественно с помощью json.
11👍3
Что выведет код сверху?
Anonymous Quiz
25%
Не скомпилируется
34%
2 1
25%
2 2
16%
2 + Исключение
👍8
iluwatar/java-design-patterns

Самый популярный Java-репозиторий на GitHub – коллекция паттернов проектирования всех видов и мастей.

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

Каждый паттерн в репозитории, будь он моно или нет, содержит подробное описание и примеры реализации на Java.
🔥14
👍2
Что выведет код сверху?
Anonymous Quiz
36%
6
22%
3
6%
1
36%
Error
👍33👎1
winterbe/java8-tutorial

Подробное руководство по Java 8, шаг за шагом описывающее все возможности и особенности языка. Короткие демонстрационные примеры отлично показывают основные концепции. Минимум текста, максимум наглядности. Репозиторий может служить и учебником, и справочником.
😱6🔥2
👍1
Метод matches()

Возвращает значение true, если, и только в том случае, если эта строка соответствует заданному регулярному выражению.
🔥12👍2👎1
#Вопросы_с_собеседования

Какой результат выведет вызов метода foo()?

Ответ:
“HelloHello”

Разберем решение детально: С первым выводом Hello вопросов быть не должно, далее в метод bar передаем копию ссылки на строку, теперь на данную строку ссылаются две переменные: m из метода foo и m из метода bar. Так как строки в Java являются immutable, при попытке присоединить к уже существующей строке дополнительное значение World!, в методе bar произойдет создание новой строки и локальная переменная m этого метода будет ссылаться на новую строку со значением Hello World!, при этом в методе foo в результат будет выведено значение переменной m которая по прежнему ссылается на строку Hello.
👍34
#Вопросы_с_собеседования

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

Ответ:
s1 == s2 ? true

s1 == s3 ? false

s1 equals s3 ? true

Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
👍18
TheAlgorithms/Java

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

Не все из этих алгоритмов удобны и оптимальны, иногда можно найти в стандартной библиотеке Java примеры получше. Однако для демонстрационных и образовательных целей этот репозиторий подходит замечательно.
👍111
ReactiveX/RxJava

Второй по звездности на GitHub Java-репозиторий – библиотека RxJava, основанная на API ReactiveX. Она позволяет писать асинхронные событийно-управляемые программы для виртуальной Java машины, поддерживает последовательности событий и их комбинации. В основе работы лежит классический паттерн Наблюдатель, только вместо одного объекта используется целый поток данных.

C RxJava можно больше не беспокоиться о низкоуровневом распараллеливании, синхронизации, потокобезопасности и обработке ошибок.
👍4