Forwarded from Java с нуля до middle
Перейдем к классу Object.
Все классы которые мы создаем и которые уже есть наследуются от него.
Создадим еще один обьект класса classOne.
У него есть методы .hashcode .equals
Вызовем и сравним hashcode у наших обьектов.
Они разные. Это из-за того, что сейчас hashcode определяется в зависимости от String.
Нам нужно перееопределить hashcode и equals.
Они будут считаться по полям и сравниваться тоже. Если не перееопределить hascode по полям сравнение будет одинаково, а hashcode будет разным и обьекты будут не равны.
Перееопределили и теперь все ровно.
Все классы которые мы создаем и которые уже есть наследуются от него.
Создадим еще один обьект класса classOne.
У него есть методы .hashcode .equals
Вызовем и сравним hashcode у наших обьектов.
Они разные. Это из-за того, что сейчас hashcode определяется в зависимости от String.
Нам нужно перееопределить hashcode и equals.
Они будут считаться по полям и сравниваться тоже. Если не перееопределить hascode по полям сравнение будет одинаково, а hashcode будет разным и обьекты будут не равны.
Перееопределили и теперь все ровно.
👍1
В коде есть проблема
Поле int в ClassOne public, это значит оно доступно из любого класса и может быть изменено.
Проверим. Получается любой человек может изменить значение этого поля, это не правильно.
Мы должны скрывать реализацию. Это называется инкапсуляцией.
Сделаем поле private.
Обьявим конструктор.
Теперь каждый раз создавая обьект мы передаем туда значение. Поле int у этого обьекта будет стабильным.
Это важно если мы не хотим изменять больше этот обьект и давать это делать другим.
Если же мы хотим передать другое число, то просто создаем новый обьект.
Поле int в ClassOne public, это значит оно доступно из любого класса и может быть изменено.
Проверим. Получается любой человек может изменить значение этого поля, это не правильно.
Мы должны скрывать реализацию. Это называется инкапсуляцией.
Сделаем поле private.
Обьявим конструктор.
Теперь каждый раз создавая обьект мы передаем туда значение. Поле int у этого обьекта будет стабильным.
Это важно если мы не хотим изменять больше этот обьект и давать это делать другим.
Если же мы хотим передать другое число, то просто создаем новый обьект.
Java с нуля до middle pinned «Всем привет, я java developer. Последнее место работы было в Лиге, хоть работа была удаленной, но работать можно только из рф. Начинаю с сегодняшнего дня готовиться к собесам. Опыт прохождения есть, поэтому представляю, что и как примерно спрашивают. Предлагаю…»
Почему join это не пересечение?
Если вы не знали, что join, причем любой — это скорее декартово произведение, чем пересечение. Вот вам отличная статья.
https://habr.com/ru/post/450528/
Если вы не знали, что join, причем любой — это скорее декартово произведение, чем пересечение. Вот вам отличная статья.
https://habr.com/ru/post/450528/
Хабр
Понимание джойнов сломано. Продолжение. Попытка альтернативной визуализации
Многие из вас читали предыдущую статью про то, как неправильная визуализация для объяснения работы JOIN-ов в некоторых случаях может запутать. Круги Венна не мог...
Как работает сборщик мусора?
Мы знаем, что для очистки heap’a java использует сборщик мусора.
На данный момент используется G1, его включили в работу с Java 9
Принцип работы
Память разбивается на множество регионов одинакового размера. Размер этих регионов зависит от общего размера кучи и по умолчанию выбирается так, чтобы их было не больше 2048, обычно получается от 1 до 32 МБ. Исключение составляют только так называемые громадные регионы.
Продолжение в статье:
https://telegra.ph/Garbage-collector-11-03
Мы знаем, что для очистки heap’a java использует сборщик мусора.
На данный момент используется G1, его включили в работу с Java 9
Принцип работы
Память разбивается на множество регионов одинакового размера. Размер этих регионов зависит от общего размера кучи и по умолчанию выбирается так, чтобы их было не больше 2048, обычно получается от 1 до 32 МБ. Исключение составляют только так называемые громадные регионы.
Продолжение в статье:
https://telegra.ph/Garbage-collector-11-03
Задача на собесе
Написать код, который выводит числа от 0 до 1000, которые делятся на 3, но не делятся на 5, и сумма цифр меньше десяти
Решение в комментах
Написать код, который выводит числа от 0 до 1000, которые делятся на 3, но не делятся на 5, и сумма цифр меньше десяти
Решение в комментах
Утечка памяти раз
Продолжая вчерашнюю темы про память,
В примере утечка возникает из-за того, что list static,
статические переменные освобождаются только после завершения программы.
То есть после выхода из метода populateList(), garbage collector не сработает.
Если static уберем gc будет работать и проблем с памятью не будет.
Продолжая вчерашнюю темы про память,
В примере утечка возникает из-за того, что list static,
статические переменные освобождаются только после завершения программы.
То есть после выхода из метода populateList(), garbage collector не сработает.
Если static уберем gc будет работать и проблем с памятью не будет.
Когда бакет в HashMap начинает хранить дерево, а не связанный список?
Когда в HashMap у нас возникает коллизия, элементы начинают складывать в один бакет. И в нем образуется связанный список. Поиск ключа в связанном списке это O(n). В java8, сделали хранение с помощью дерева, где скорость уже O(log n).
Мы должны правильно реализовать интерфейс Comparable и hashcode, тогда дерево будет строиться. Иначе мы будем иметь связанный список.
Вопрос сколько элементов должно храниться в одном бакете, чтобы построилось дерево? (Опрос в комментариях)
Когда в HashMap у нас возникает коллизия, элементы начинают складывать в один бакет. И в нем образуется связанный список. Поиск ключа в связанном списке это O(n). В java8, сделали хранение с помощью дерева, где скорость уже O(log n).
Мы должны правильно реализовать интерфейс Comparable и hashcode, тогда дерево будет строиться. Иначе мы будем иметь связанный список.
Вопрос сколько элементов должно храниться в одном бакете, чтобы построилось дерево? (Опрос в комментариях)
Свойства, которым должен удовлетворять equals
Рефлексивность: a==a
Симметричность: a==b, b==a
Транзитивность: a==b, b==c, a==c
Консистентность: Множественные вызовы equals должны возвращать один и тот же результат
Рефлексивность: a==a
Симметричность: a==b, b==a
Транзитивность: a==b, b==c, a==c
Консистентность: Множественные вызовы equals должны возвращать один и тот же результат
Когда finally не будет выполнен?
В основном в работе я пользовался вот такой конструкцией try with resources. Если у ресурсов есть AutoCloseable то все норм и париться не нужно.
Но бывает, что ресурсы мы закрываем сами и пишем это в finallly.
До блока finally не дойдет если:
Бесконечный цикл
Сбой JVM
Выходим из апп System.exit()
В основном в работе я пользовался вот такой конструкцией try with resources. Если у ресурсов есть AutoCloseable то все норм и париться не нужно.
Но бывает, что ресурсы мы закрываем сами и пишем это в finallly.
До блока finally не дойдет если:
Бесконечный цикл
Сбой JVM
Выходим из апп System.exit()
Красно-чёрное дерево в чем смысл?
Двоичное дерево поиска, в котором каждый узел имеет атрибут цвета.
При этом:
Узел может быть либо красным, либо чёрным и имеет двух потомков;
Корень — как правило чёрный.
Все листья, не содержащие данных — чёрные.
Оба потомка каждого красного узла — чёрные.
Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов
Благодаря этому достигается балансировка и быстрая скорость O(log n)
Путь от корня до самого дальнего листа не более чем вдвое длиннее, чем до самого ближнего.
В java это коллекции TreeMap и TreeSet
Код в комментах
Двоичное дерево поиска, в котором каждый узел имеет атрибут цвета.
При этом:
Узел может быть либо красным, либо чёрным и имеет двух потомков;
Корень — как правило чёрный.
Все листья, не содержащие данных — чёрные.
Оба потомка каждого красного узла — чёрные.
Любой простой путь от узла-предка до листового узла-потомка содержит одинаковое число чёрных узлов
Благодаря этому достигается балансировка и быстрая скорость O(log n)
Путь от корня до самого дальнего листа не более чем вдвое длиннее, чем до самого ближнего.
В java это коллекции TreeMap и TreeSet
Код в комментах
Людей стало чуть больше, в связи с этим вопрос, что вы еще не поняли?
Anonymous Poll
16%
Java Core
16%
Коллекции
35%
Многопоточка
5%
Исключения
62%
Spring
35%
Не хватает задач, теория есть на youtube