Как работает сборщик мусора?
Мы знаем, что для очистки 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
Задача с leetcode
Дан массив чисел и какое-то число, если оно есть в этом массиве удалить и посчитать количество чисел массива.
Не выделять память под новый массив.
Решение в комментах
Задание:
Решите задачу выделяя память под новый массив и пришлите мне, я сделаю ревью
Дан массив чисел и какое-то число, если оно есть в этом массиве удалить и посчитать количество чисел массива.
Не выделять память под новый массив.
Решение в комментах
Задание:
Решите задачу выделяя память под новый массив и пришлите мне, я сделаю ревью
Как создавать бины в спринг и доставать их из контекста?
Сделал короткое видео:
развернул в проекте спринг, создал два бина, один заинжектил в другой.
Достал из контекста бины, вызвал у них методы, вывел в консоль.
Задание: (присылайте мне, я сделаю ревью)
Создать класс Comp, Mouse, Screen.
Создать их бины.
Заинжектить Mouse, Screen в Comp.
Mouse - умеет кликать
Screen - имеет поле разрешение и его можно включать и выключать
Comp - имеет метод включить и отображает подключенные устройства
https://www.youtube.com/watch?v=2OklKn94CIA
https://github.com/IvanKorni/springDemo
Сори за щелчки мышкой, исправлюсь 🫠
Сделал короткое видео:
развернул в проекте спринг, создал два бина, один заинжектил в другой.
Достал из контекста бины, вызвал у них методы, вывел в консоль.
Задание: (присылайте мне, я сделаю ревью)
Создать класс Comp, Mouse, Screen.
Создать их бины.
Заинжектить Mouse, Screen в Comp.
Mouse - умеет кликать
Screen - имеет поле разрешение и его можно включать и выключать
Comp - имеет метод включить и отображает подключенные устройства
https://www.youtube.com/watch?v=2OklKn94CIA
https://github.com/IvanKorni/springDemo
Сори за щелчки мышкой, исправлюсь 🫠
YouTube
Java для новичков: cоздаем бины в Spring
❤2
Разбираем SOLID по одному.
Про solid всегда спрашивают на собесах.
Когда ты пишешь код в энтерпрайсе, нужно всегда держать в уме эти принципы.
Про S
Single Responsibility Principle (Принцип единственной ответственности)
Не должно быть больше одной причины изменить класс.
Что это значит на практике? Весь класс целиком должен быть направлен на обеспечение одной логики. Если в классе в разных методах мы исполняем разную логику, класс нужно разделять и в именах новых классов прописывать, что он делает.
Конечно в реальных проектах, очень часто классы жирные, но никогда в одном классе не собирают логику какой то части приложения, всегда разделяют.
Про solid всегда спрашивают на собесах.
Когда ты пишешь код в энтерпрайсе, нужно всегда держать в уме эти принципы.
Про S
Single Responsibility Principle (Принцип единственной ответственности)
Не должно быть больше одной причины изменить класс.
Что это значит на практике? Весь класс целиком должен быть направлен на обеспечение одной логики. Если в классе в разных методах мы исполняем разную логику, класс нужно разделять и в именах новых классов прописывать, что он делает.
Конечно в реальных проектах, очень часто классы жирные, но никогда в одном классе не собирают логику какой то части приложения, всегда разделяют.
🙏1
https://vc.ru/hr/537368-a-nuzhno-li-vam-byt-programmistom
Написал мотивационную статью! Главное не сдаваться и по немногу закрывать пробелы в знаниях)
Написал мотивационную статью! Главное не сдаваться и по немногу закрывать пробелы в знаниях)
vc.ru
А нужно ли вам быть программистом? — Карьера на vc.ru
Все мы знаем что программистам хорошо платят, даже джунам, что можно выучится за 1-2 года. А через два года работы зарплата будет в два раза больше изначальной.
SOLID про O
Open Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты к расширению, но закрыты для изменения.
Что это значит на практике?
Добавляя какую-то новую функциональность к классу, в лучшем случае мы должны создать новый класс, переопределить у него методы и добавить функциональность туда.
Исходя из этого изначально наши классы должны быть спроектированы так, что бы их можно было расширять.
Open Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты к расширению, но закрыты для изменения.
Что это значит на практике?
Добавляя какую-то новую функциональность к классу, в лучшем случае мы должны создать новый класс, переопределить у него методы и добавить функциональность туда.
Исходя из этого изначально наши классы должны быть спроектированы так, что бы их можно было расширять.
👍2
SOLID про L
Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков)
Расширяя класс, разработчик должен сохранять его функциональность.
Что это означает на практике?
Переопределяя методы родительского класса мы должны сохранять поведение класса, неверно переопределять метод и писать туда совершенно другую логику.
Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков)
Расширяя класс, разработчик должен сохранять его функциональность.
Что это означает на практике?
Переопределяя методы родительского класса мы должны сохранять поведение класса, неверно переопределять метод и писать туда совершенно другую логику.
👍2🔥2