Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣3🤯1 1
Что такое методы по умолчанию (default methods) в интерфейсах? 🤓
Ответ:
Начиная с Java 8, методы интерфейсов могут иметь реализацию с ключевым словом default.
Это позволяет добавлять новые методы в интерфейсы, не ломая существующие классы, которые этот интерфейс реализуют.
Класс может переопределить default-метод. Если класс реализует два интерфейса с одинаковыми default-методами, компилятор требует явно переопределить метод в классе (или вызвать конкретную реализацию через InterfaceName.super.method())..
#собеседование
Ответ:
Это позволяет добавлять новые методы в интерфейсы, не ломая существующие классы, которые этот интерфейс реализуют.
Класс может переопределить default-метод. Если класс реализует два интерфейса с одинаковыми default-методами, компилятор требует явно переопределить метод в классе (или вызвать конкретную реализацию через InterfaceName.super.method())..
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 28 марта
ℹ️ Кто родился в этот день
Джером Айзек Фри́дман (англ. Jerome Isaac Friedman; род. 28 марта 1930, Чикаго) — американский физик еврейского происхождения, лауреат Нобелевской премии по физике в 1990 году за основополагающие исследования, подтверждающие существование кварков («за пионерские исследования глубоконеупругого рассеяния электронов на протонах и связанных нейтронах, существенно важных для разработки кварковой модели в физике частиц»).
🌐 Знаковые события
1993 — вспышка сверхновой звезды SN 1993J в галактике M81. В то время она была второй по яркости сверхновой, наблюдаемой в XX веке. Первой сверхновой была SN 1987A, которая взорвалась в соседней галактике Большое Магелланово Облако в 1987 году.
#Biography #Birth_Date #Events #28марта
Джером Айзек Фри́дман (англ. Jerome Isaac Friedman; род. 28 марта 1930, Чикаго) — американский физик еврейского происхождения, лауреат Нобелевской премии по физике в 1990 году за основополагающие исследования, подтверждающие существование кварков («за пионерские исследования глубоконеупругого рассеяния электронов на протонах и связанных нейтронах, существенно важных для разработки кварковой модели в физике частиц»).
1993 — вспышка сверхновой звезды SN 1993J в галактике M81. В то время она была второй по яркости сверхновой, наблюдаемой в XX веке. Первой сверхновой была SN 1987A, которая взорвалась в соседней галактике Большое Магелланово Облако в 1987 году.
#Biography #Birth_Date #Events #28марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
С 21.03 по 27.03
Предыдущий пост(с 14.03 по 20.03)
Воскресный мотивационный пост:
Не было мотивации, а вообще нужна?) (Признался что только один читает... Напишу ему в личку)
Запись встреч/видео:
Retry vs Circuit Breaker: кто спасёт ваши сервисы от каскадных падений?
Обучающие статьи:
Раздел 8. Stream API и функциональный стиль
Глава 6: Parallel Stream
Гонка параллельных stream в «Библиотеке»
Глава 7: Stream API в экосистеме Java. Интеграционные паттерны
Примитивные стримы (IntStream, LongStream)
Optional и Stream — братья по духу
[Совет по Java #018]
Тема: Анонимные классы и лямбды захватывают переменные.
[Совет по Java #019]
Тема: switch по enum без обработки всех значений — бомба замедленного действия.
Полезные статьи и видео:
10 ошибок API
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
Предыдущий пост(с 14.03 по 20.03)
Воскресный мотивационный пост:
Не было мотивации, а вообще нужна?)
Запись встреч/видео:
Retry vs Circuit Breaker: кто спасёт ваши сервисы от каскадных падений?
Обучающие статьи:
Раздел 8. Stream API и функциональный стиль
Глава 6: Parallel Stream
Гонка параллельных stream в «Библиотеке»
Глава 7: Stream API в экосистеме Java. Интеграционные паттерны
Примитивные стримы (IntStream, LongStream)
Optional и Stream — братья по духу
[Совет по Java #018]
Тема: Анонимные классы и лямбды захватывают переменные.
[Совет по Java #019]
Тема: switch по enum без обработки всех значений — бомба замедленного действия.
Полезные статьи и видео:
10 ошибок API
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
👍4🔥1
История технологий сегодня — 29 марта
ℹ️ Кто родился в этот день
Николай Аполлонович Анфимов (29 марта 1935, Москва — 29 октября 2019, там же) — советский и российский учёный-механик, специалист в области аэродинамики, теплотехники (аэромеханики, аэрогазодинамики, теплообмена, теплозащиты, наземных испытаний ракет и космических аппаратов, системного проектирования космических транспортных систем), доктор технических наук (1972), профессор, академик РАН (1997).
🌐 Знаковые события
1999 — промышленный индекс Доу Джонса впервые превысил отметку в 10 000 пунктов во время роста «пузыря доткомов».
#Biography #Birth_Date #Events #29марта
Николай Аполлонович Анфимов (29 марта 1935, Москва — 29 октября 2019, там же) — советский и российский учёный-механик, специалист в области аэродинамики, теплотехники (аэромеханики, аэрогазодинамики, теплообмена, теплозащиты, наземных испытаний ракет и космических аппаратов, системного проектирования космических транспортных систем), доктор технических наук (1972), профессор, академик РАН (1997).
1999 — промышленный индекс Доу Джонса впервые превысил отметку в 10 000 пунктов во время роста «пузыря доткомов».
#Biography #Birth_Date #Events #29марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Java for Beginner
https://devforge.ru/ Маленький анонс... Первый шаг к самостоятельности сделан 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологий сегодня — 31 марта
ℹ️ Кто родился в этот день
Серге́й Влади́мирович Илью́шин (18 (30) марта 1894, Дилялево, Вологодский уезд, Вологодская губерния, Российская империя — 9 февраля 1977, Москва, СССР) — советский авиаконструктор, разработчик самого массового боевого самолёта в истории — штурмовика Ил-2. Трижды Герой Социалистического Труда (1941, 1957, 1974), единственный лауреат семи Сталинских премий (1941, 1941, 1943, 1946, 1947, 1950, 1951), лауреат Ленинской премии (1960), Государственной премии СССР (1971). Кавалер восьми орденов Ленина (1936, 1941, 1945, 1945, 1954, 1964, 1971, 1974). Генерал-полковник инженерно-технической службы (1967; с 1971 года — Генерал-полковник-инженер). Академик АН СССР (1968).
🌐 Знаковые события
1791 — Национальное собрание Франции ввело определение метра: одна сорокамиллионная часть длины парижского меридиана.
1950 — изобретённый фототранзистор представляется в Murray Hill, Нью-Джерси.
2017 — первый в истории успешный повторный запуск первой ступени ракеты Falcon 9 FT.
#Biography #Birth_Date #Events #31марта
Серге́й Влади́мирович Илью́шин (18 (30) марта 1894, Дилялево, Вологодский уезд, Вологодская губерния, Российская империя — 9 февраля 1977, Москва, СССР) — советский авиаконструктор, разработчик самого массового боевого самолёта в истории — штурмовика Ил-2. Трижды Герой Социалистического Труда (1941, 1957, 1974), единственный лауреат семи Сталинских премий (1941, 1941, 1943, 1946, 1947, 1950, 1951), лауреат Ленинской премии (1960), Государственной премии СССР (1971). Кавалер восьми орденов Ленина (1936, 1941, 1945, 1945, 1954, 1964, 1971, 1974). Генерал-полковник инженерно-технической службы (1967; с 1971 года — Генерал-полковник-инженер). Академик АН СССР (1968).
1791 — Национальное собрание Франции ввело определение метра: одна сорокамиллионная часть длины парижского меридиана.
1950 — изобретённый фототранзистор представляется в Murray Hill, Нью-Джерси.
2017 — первый в истории успешный повторный запуск первой ступени ракеты Falcon 9 FT.
#Biography #Birth_Date #Events #31марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
[Совет по Java #020]
Тема: HashSet с изменяемыми объектами ломает контракт.
Проблема: Контракт HashSet (и любой хэш-коллекции) основан на неизменности хэш-кода объекта во время его нахождения в коллекции.
Если объект, хранящийся в HashSet, изменяет свои поля, которые участвуют в вычислении hashCode() и equals(), то его хэш-код меняется. При этом объект остается в корзине (bucket), соответствующей старому хэшу, а поиск (contains, remove) выполняется по новому хэшу.
В результате объект становится недоступным для операций коллекции, хотя формально остается в ней. Это приводит к утечке памяти, дублированию (невозможности удалить), и нарушению ожидаемого поведения множества.
Решение: Никогда не используйте изменяемые объекты в качестве ключей HashMap или элементов HashSet.
Если это необходимо, либо не изменяйте их после добавления, либо удаляйте перед изменением и добавляйте заново.
Предпочтительно использовать неизменяемые (immutable) объекты или явно контролировать жизненный цикл.
Объяснение: При добавлении объекта в HashSet его хэш-код определяет корзину. Внутри корзины объект хранится по ссылке. При изменении полей, участвующих в hashCode(), объект физически остается в старой корзине, но его новый хэш-код указывает на другую корзину. Методы contains и remove вычисляют новый хэш и ищут в другой корзине, где объект не найден.
Это классический пример нарушения инварианта коллекции. Даже если вы переопределите hashCode и equals правильно, проблема останется.
Единственное надежное решение — использовать неизменяемые объекты (например, record в Java 16+, или класс с final полями). Если изменяемость необходима, обеспечьте явное управление: удаляйте объект из коллекции перед мутацией и добавляйте обратно.
#Java #советы
Тема: HashSet с изменяемыми объектами ломает контракт.
Проблема: Контракт HashSet (и любой хэш-коллекции) основан на неизменности хэш-кода объекта во время его нахождения в коллекции.
Если объект, хранящийся в HashSet, изменяет свои поля, которые участвуют в вычислении hashCode() и equals(), то его хэш-код меняется. При этом объект остается в корзине (bucket), соответствующей старому хэшу, а поиск (contains, remove) выполняется по новому хэшу.
В результате объект становится недоступным для операций коллекции, хотя формально остается в ней. Это приводит к утечке памяти, дублированию (невозможности удалить), и нарушению ожидаемого поведения множества.
Решение: Никогда не используйте изменяемые объекты в качестве ключей HashMap или элементов HashSet.
Если это необходимо, либо не изменяйте их после добавления, либо удаляйте перед изменением и добавляйте заново.
Предпочтительно использовать неизменяемые (immutable) объекты или явно контролировать жизненный цикл.
import java.util.*;
public class HashSetMutation {
static class MutablePoint {
private int x;
private int y;
public MutablePoint(int x, int y) {
this.x = x;
this.y = y;
}
public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
@Override
public boolean equals(Object o) {
if (!(o instanceof MutablePoint)) return false;
MutablePoint p = (MutablePoint) o;
return x == p.x && y == p.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
public static void main(String[] args) {
Set<MutablePoint> points = new HashSet<>();
MutablePoint p = new MutablePoint(1, 2);
points.add(p);
System.out.println("Contains (1,2): " + points.contains(p)); // true
//Антипаттерн: изменение после добавления
p.setX(5);
System.out.println("Contains (5,2): " + points.contains(p)); // false — объект потерян!
System.out.println("Set size: " + points.size()); // 1, но внутри лежит объект (1,2) в другой корзине
// Объект невозможно удалить
points.remove(p); // false
System.out.println("Size after remove: " + points.size()); // всё ещё 1
//Правильно: удалить перед изменением, потом добавить заново
MutablePoint p2 = new MutablePoint(10, 20);
points.add(p2);
points.remove(p2);
p2.setX(30);
points.add(p2);
System.out.println("Contains (30,20): " + points.contains(p2)); // true
//Лучшее решение: неизменяемые объекты
record ImmutablePoint(int x, int y) {}
Set<ImmutablePoint> immutableSet = new HashSet<>();
ImmutablePoint ip = new ImmutablePoint(1, 2);
immutableSet.add(ip);
// ip.x нельзя изменить — компилятор запретит
immutableSet.contains(ip); // всегда корректно
}
}
Объяснение: При добавлении объекта в HashSet его хэш-код определяет корзину. Внутри корзины объект хранится по ссылке. При изменении полей, участвующих в hashCode(), объект физически остается в старой корзине, но его новый хэш-код указывает на другую корзину. Методы contains и remove вычисляют новый хэш и ищут в другой корзине, где объект не найден.
Это классический пример нарушения инварианта коллекции. Даже если вы переопределите hashCode и equals правильно, проблема останется.
Единственное надежное решение — использовать неизменяемые объекты (например, record в Java 16+, или класс с final полями). Если изменяемость необходима, обеспечьте явное управление: удаляйте объект из коллекции перед мутацией и добавляйте обратно.
#Java #советы
👍6
Что выведет код?
#Tasks
import java.util.HashSet;
public class Task300326 {
static class Item300326 {
int id;
Item300326(int id) { this.id = id; }
public boolean equals(Object o) {
return o instanceof Item300326 && ((Item300326) o).id == id;
}
public int hashCode() {
return id;
}
}
public static void main(String[] args) {
HashSet<Item300326> set = new HashSet<>();
Item300326 a = new Item300326(1);
Item300326 b = new Item300326(2);
set.add(a);
set.add(b);
a.id = 2; // изменяем объект, уже находящийся в множестве
System.out.print(set.contains(a) + " ");
System.out.print(set.contains(b) + " ");
System.out.print(set.remove(a) + " ");
System.out.print(set.size());
}
}
#Tasks
👍2
Варианты ответа:
Anonymous Quiz
38%
true true true 1
25%
false true false 2
13%
false true true 1
25%
true false false 2
👍2
Что такое this и super? 🤓
Ответ:
this — это ссылка на текущий объект.
Используется для разрешения конфликтов имен (параметр метода с тем же именем, что и поле класса: this.field = field), для вызова одного конструктора из другого (this()), или передачи текущего объекта в другой метод.
super — это ссылка на объект родительского класса.
Используется для доступа к полям и методам родителя, скрытым переопределением, и для вызова конструктора родителя (super()) — это должен быть первый оператор в конструкторе потомка.
#собеседование
Ответ:
this
Используется для разрешения конфликтов имен (параметр метода с тем же именем, что и поле класса: this.field = field), для вызова одного конструктора из другого (this()), или передачи текущего объекта в другой метод.
super — это ссылка на объект родительского класса.
Используется для доступа к полям и методам родителя, скрытым переопределением, и для вызова конструктора родителя (super()) — это должен быть первый оператор в конструкторе потомка.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологий сегодня — 31 марта
ℹ️ Кто родился в этот день
Ка́рло Ру́ббиа (итал. Carlo Rubbia; род. 31 марта 1934, Гориция, Италия) — итальянский физик, лауреат Нобелевской премии по физике в 1984 году, совместно с Симоном ван дер Мером, «за решающий вклад в большой проект, осуществление которого привело к открытию квантов поля W и Z — переносчиков слабого взаимодействия».
Синъити́ро Томона́га (яп. 朝永 振一郎 Томонага Синъитиро:, 31 марта 1906, Токио — 8 июля 1979, там же) — японский физик-теоретик, известный разработкой базовых положений квантовой электродинамики, лауреат Нобелевской премии по физике 1965 года. Президент Научного совета Японии (1963—1969). Член Японской академии наук (1951), иностранный член Национальной академии наук США (1965)[4], Академии наук СССР (1971).
🌐 Знаковые события
1901 — выпуск первого автомобиля с названием Mercedes.
2005 — группой астрономов во главе с профессором Майклом Брауном была открыта карликовая планета Макемаке.
#Biography #Birth_Date #Events #31марта
Ка́рло Ру́ббиа (итал. Carlo Rubbia; род. 31 марта 1934, Гориция, Италия) — итальянский физик, лауреат Нобелевской премии по физике в 1984 году, совместно с Симоном ван дер Мером, «за решающий вклад в большой проект, осуществление которого привело к открытию квантов поля W и Z — переносчиков слабого взаимодействия».
Синъити́ро Томона́га (яп. 朝永 振一郎 Томонага Синъитиро:, 31 марта 1906, Токио — 8 июля 1979, там же) — японский физик-теоретик, известный разработкой базовых положений квантовой электродинамики, лауреат Нобелевской премии по физике 1965 года. Президент Научного совета Японии (1963—1969). Член Японской академии наук (1951), иностранный член Национальной академии наук США (1965)[4], Академии наук СССР (1971).
1901 — выпуск первого автомобиля с названием Mercedes.
2005 — группой астрономов во главе с профессором Майклом Брауном была открыта карликовая планета Макемаке.
#Biography #Birth_Date #Events #31марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3