JavaStart
910 subscribers
911 photos
28 videos
621 links
Учи Java вместе с нами!
Наша платформа с курсом - https://javastart.tech
Ютуб с обучающими видео - https://www.youtube.com/@javastart_tech
Download Telegram
😁8🤯1
Метод hashCode()

public int hashCode();

Метод hashCode() позволяет задать некоторое числовое значение, которое будет соответствовать данному объекту или, другими словами, его хэш-код. По данному числу, например, можно сравнивать объекты в Java.

Выведем представление ниже определенного объекта:

Person tom = new Person("Tom");
System.out.println(tom.hashCode()); // 2036368507

Метод .hashCode(), определенный классом Object, возвращает разные целые числа для разных объектов.
👍4👨‍💻3
Метод equals()

public boolean equals(Object obj);

Указывает, равны ли между собой два объекта.
Обратите внимание, что обычно необходимо переопределять метод hashCode() всякий раз, когда метод equals() переопределяется, чтобы поддерживать общий контракт для метода hashCode(), в котором говорится, что равные объекты должны иметь одинаковые хэш-коды.

Person person1 = new Person("Петров Иван Иванович", 56);
Person person2 = new Person("Петров Иван Иванович", 56);
person1.equals(person2);  // true
👍3🤩2🤔1👌1
Метод toString()

Метод toString(), вызванный на объекте, возвращает строку, которая является "текстовым представлением" этого объекта.
Результатом будет краткое и информативное представление, которое легко читается человеком. 

На выходе метода toString(), который отработал на каком-либо объекте класса возвращается строка, состоящая из имени класса, экземпляром которого является объект + символ знака "@" + шестнадцатеричное представление без знака хэш-кода объекта. Другими словами, этот метод возвращает строку, равную значения:

getClass().getName() + '@' + Integer.toHexString(hashCode());
👍4💯2😱1
Метод clone()

protected Object clone() throws CloneNotSupportedException;

Цель этого метода – клонировать объект, т.е. создать его клон/копию/дубликат.
Но дело в том, что Java-машина не знает, какие объекты можно клонировать, а какие нет. Файлы, например, клонировать нельзя. Как и поток System.in.

Существует интерфейс Cloneable – это так называемый интерфейс-маркер, который не содержит никаких методов. Он используется, чтобы маркировать (помечать) некоторые классы.
При вызове метода clone(), Java проверяет, был ли у объекта интерфейс Cloneable. Если да — клонирует объект методом clone(), если нет — выкидывает исключение CloneNotSupportedException.

Мы можем сами реализовать (переопределить) метод .clone() как показано на картинке.
👍41🫡1
😁7🤓3🫡1
Методы wait(), notify() и notifyAll() в Java используются в многопоточности.

Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.

Иногда при взаимодействии потоков встает вопрос о извещении одних потоков о действиях других. Например, действия одного потока зависят от результата действий другого потока, и надо как-то известить один поток, что второй поток произвел некую работу.

wait() освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify();

notify() продолжает работу потока, у которого ранее был вызван метод wait();

notifyAll() возобновляет работу всех потоков, у которых ранее был вызван метод wait().
👨‍💻3👍2🫡21
Что такое сервер и для чего он нужен?

Давайте вместе разберемся, откуда происходит слово «сервер». В его основе английский глагол to serve, который переводится как «служить». Итак, server, говоря простыми словами – это мощный компьютер, предназначенный для хранения информации и обеспечения доступа к ней с удалённых клиентских устройств.

Тип данных, которые хранятся на сервере, зависит от его вида и назначения.

С термином «сервер» неразрывно связан другой — «клиент». Так называется персональный компьютер, мобильное или другое устройство, находящееся в одной сети с сервером, направляющее на него те или иные запросы и получающее от него необходимую информацию.
В существовании сервера не было бы никакого смысла без связанных с ним клиентских устройств.
👍3🔥2🫡21
Как устроена память в Java?

Для оптимальной работы приложения JVM делит память на область Stack (стек) и область Heap (куча). Всякий раз, когда мы объявляем новые переменные, создаем объекты или вызываем новый метод, JVM выделяет память для этих операций в стеке или в куче.

Подробнее об этих областях памяти поговорим в следующих постах.
🔥3👌3👍2👨‍💻1
Область памяти Stack в Java

Стек работает по схеме LIFO (последним вошел, первым вышел). Всякий раз, когда вызывается новый метод, содержащий примитивные значения или ссылки на объекты, то на вершине стека под них выделяется блок памяти. Из этого можно сделать вывод, что Стек хранит значения примитивных переменных, создаваемых в методах, а также ссылки на объекты в Куче, на которые ссылается метод.

Основные особенности Стека:

Stack заполняется и освобождается по мере вызова и завершения новых методов

– Переменные в стеке существуют до тех пор, пока выполняется метод, в котором они были созданы

– Если память стека будет заполнена, Java бросит исключение java.lang.StackOverFlowError

– Доступ к этой области памяти осуществляется быстрее, чем к куче

– Является потокобезопасным, поскольку для каждого потока создается свой отдельный стек
👍3🔥2👨‍💻2
Область памяти Heap в Java

Эта область памяти используется для динамического выделения памяти для объектов и классов JRE во время выполнения. Новые объекты всегда создаются в Heap (куча), а ссылки на них хранятся в стеке.
Эти объекты имеют глобальный доступ и могут быть получены из любого места программы.

Эта область памяти разбита на несколько более мелких частей:

Young Generation – область где размещаются недавно созданные объекты. Когда она заполняется, происходит быстрая сборка мусора. Эта область еще делится на Eden и Survivor Space, в которые попадают объекты по мере времени их жизни в программе.

Old (Tenured) Generation – здесь хранятся долгоживущие объекты. Когда объекты из Young Generation достигают определенного порога «возраста», они перемещаются в Old Generation.

Permanent Generation – эта область содержит метаинформацию о классах и методах приложения, но начиная с Java 8 данная область памяти была упразднена.

Про основные особенности Heap поговорим в следующем посте.
👍5🔥21🤔1
Основные особенности Heap:

– Когда эта область памяти полностью заполняется, Java бросает java.lang.OutOfMemoryError;

–Доступ к ней медленнее, чем к стеку;

– Эта память, в отличие от стека, автоматически не освобождается. Для сбора неиспользуемых объектов используется сборщик мусора;

– В отличие от стека, куча не является потокобезопасной и ее необходимо контролировать, правильно синхронизируя код.
👍4👨‍💻31
😁711
Что такое пул строк в Java?

Очень часто этот вопрос задают джунам и интернам на собеседованиях.

Пул строк (String Pool) – это множество строк в кучи (Java Heap memory). Мы знаем, что String – особый класс в java, с помощью которого мы можем создавать строковые объекты. Строковый пул возможен только потому, что строки в Java неизменные.

На картинке мы видим как именно строковый пул расположен в памяти Java Heap. И как разные способы создания строк влияют на расположение их в памяти.
🔥5👍311
Конструктор в Java

Конструктор – это специальный метод, который используется при создании экземпляра класса.
Конструктор создает своеобразный “каркас” класса, которому каждый новый объект класса должен соответствовать.

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

Для примера возьмем класс Car (машина) с двумя полями (модель, например, "Bugatti Veyron" и максимальная скорость). Тогда объект класса Car можно создать при помощи конструктора:
👍5🔥2👌1🤓1
Конструктор по умолчанию в Java

Конструктор по умолчанию (default constructor) – это конструктор, который не имеет параметров. Конструктор по умолчанию может объявляться в классе явным образом или генерироваться автоматически.

Если в классе не объявить ни одного конструктора, то будет генерироваться конструктор по умолчанию. То есть конструктор по умолчанию генерируется в классе автоматически только в том случае, если класс не содержит реализации других конструкторов. Если класс содержит реализацию хотя бы одного конструктора с параметрами, то чтобы объявить конструктор по умолчанию, его нужно объявлять в классе явным образом.
👍3🔥21🥰1👌1🫡1
Что такое SCRUM?

SCRUM – это гибкая (Agile) методология организации совместного рабочего процесса, в основе которой – поэтапная разработка и совершенствование продукта небольшой командой специалистов различного профиля.

Одна из основных составляющих SCRUM это Sprint. Спринт – период, в течение которого команда создает и совершенствует отдельную часть продукта, чтобы быть готовым к изменениям и исключить глобальную доработку.
Каждый спринт начинается с планирования. Команда оценивает предстоящую работу, подбирает продолжительность цикла (около двух недель).
Задачи помещаются в Sprint Backlog.

Ежедневно вся команда собирается на 15 минут (daily stand up) для того, чтобы узнать, кто что делал вчера и чем занимается сейчас, а также что мешает выполнению задачи.

В конце цикла вся команда, включая владельца продукта и Scrum–мастера, собирается для демонстрации (demo) результатов работы.

На Sprint Retrospective команда обсуждает проблемы, с которыми столкнулась во время работы, а также пути их решения.
👍51❤‍🔥1🔥1👨‍💻1
Для чего используется Jira?

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

Приложение Atlassian построено по принципам канбан / скрам–досок.

Канбан – это методика планирования задач, разработанная в сороковых годах. Суть канбан–доски заключается в наглядном расположении задач в соответствии с их статусом. Типичная доска делится на 3 колонки:

– Задачи, которые необходимо выполнить (обычный TODO–лист);

– Задачи, которые в текущий момент находятся в работе;

– Задачи, которые уже выполнены и висят на доске исключительно для отслеживания прогресса.

Но доску можно дополнить и своими колонками. Например, в отдельный блок вынести реализованные функции, проходящие стадию проверки. Сценариев масса: можно приспособить канбан под что угодно, вплоть до семейного списка покупок на холодильнике.
2❤‍🔥2👍21🔥1🫡1