Java: fill the gaps
Привет! Меня зовут Диана, и я занимаюсь разработкой с 2013. Здесь пишу просто и понятно про джава бэк 🔥Тот самый курс по многопочке🔥 https://fillthegaps.ru/mt Комплименты, вопросы, предложения: @utki_letyat
Показати більше📈 Аналітичний огляд Telegram-каналу Java: fill the gaps
Канал Java: fill the gaps (@java_fillthegaps) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 12 548 підписників, посідаючи 10 113 місце в категорії Технології та додатки та 52 819 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 12 548 підписників.
За останніми даними від 08 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -43, а за останні 24 години на -3, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 34.73%. Протягом перших 24 годин після публікації контент зазвичай збирає N/A% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 0 переглядів. Протягом першої доби публікація в середньому набирає 0 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 0.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як redis, hashmap, linkedhashmap, индекс, фича.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Привет! Меня зовут Диана, и я занимаюсь разработкой с 2013. Здесь пишу просто и понятно про джава бэк
🔥Тот самый курс по многопочке🔥
https://fillthegaps.ru/mt
Комплименты, вопросы, предложения: @utki_letyat”
Завдяки високій частоті оновлень (останні дані отримано 09 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
A service = new A();
A service = new B();
//всё ок
Зачем это нужно: чёткое соблюдение контракта помогает приостановить хаос и предупредить трудноуловимые ошибки. Наследующий класс должен дополнять, а не замещать поведение базового класса.
5 признаков того, что подкласс реализован правильно:
Синтаксические (для методов)
1️⃣ тип результата в переопределённом методе такой же, либо расширенный
Было: public Info getInfo()
✅ public BigInfo getInfo()
❌ public Object getInfo()
2️⃣ Подклассы не бросают дополнительных исключений, но могут уменьшить их список:
Было: public void save() throws FileNotFoundException
✅ public void save()
❌ public void save() throws InterruptedException
Java — типизированный язык, поэтому нарушения пунктов 1 и 2 контролируются компилятором.
3️⃣ типы параметров функций те же или менее строгие. Для Java это неприменимо, просто для справки:
Было: public void add(Account acc)
✅ public void add(Object acc)
❌ public void add(AdminAccount acc)
Поведенческие признаки:
4️⃣ метод подкласса делает то же, что и метод базового класса:
▪️если базовый метод countVisitors() только считает пользователей, то метод подкласса тоже должен просто считать пользователей, а не обновлять статистику и сохранять результат в БД.
5️⃣ метод подкласса взаимодействует с теми же сущностями, что и базовый
▪️ если в базовом методе увеличивается счётчик, то и в подклассе он увеличивается.
▪️ если в базовом классе есть переменная, которую базовый метод не меняет, то переопределённый метод тоже не должен её менять.
▪️ сценарии работы — если базовый класс предусматривает определённый порядок вызова методов, то подкласс тоже соблюдает этот протокол.
Как снизить вероятность ошибок: здравый смысл, чёткое описание контрактов и хорошее тестовое покрытие базового и производного классов.
Вообще наследование — очень сильная связь между сущностями. Её ограничения могут перевесить преимущества по ходу развития проекта. Нарушения принципа подстановки — повод пересмотреть иерархию наследования или же вовсе от неё отказаться.int a = 500;
int b = 500;
System.out.println(a == b);
// true
2️⃣ ссылочные типы — Integer, Long, String и тд. Где-то в памяти лежит объект, а в этой переменной хранится указатель на него. При использовании оператора == сравниваются только ссылки, а не сами объекты. Поэтому даже если они по сути одинаковые, операция == вернёт false:
Integer a = 500;
Integer b = 500;
System.out.println(a == b);
// false
В рабочих проектах мы чаще работаем с объектами. А ещё часто используем небольшие числа, например, в циклах и счётчиках. Чтобы сократить количество создаваемых объектов, в java есть кэш для чисел от -128 до 127. Поэтому следующий код вернёт true:
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
// true
Это правильный ответ на вопрос из предыдущего поста.
❗Примечание: это верно только при такой форме записи. Если использовать оператор new, то будет создан отдельный объект в памяти. Сравнение ссылок на два разных объекта всегда возвращает false:
Integer a = new Integer(50);
Integer b = 50;
System.out.println(a == b);
// false
Это базовая теоретическая часть, знакомая многим. Но на собеседовании нужно показать себя во всей красе, поэтому обязательно упомяните следующие 3 факта. Они серьёзно повысят Ваш рейтинг среди других кандидатов.
1️⃣ Для сравнения ссылочных типов по значению используется метод equals.
2️⃣ Механизм кэширования есть для Integer, Long, Byte, Short, Boolean и Character.
❌Нет для Float и Double.
3️⃣ Только для Integer — можно выставить значение верхнего диапазона кэширования с помощью опции VM. Если написать
-XX:AutoBoxCacheMax=2000
то закэшируются все Integer в диапазоне от -127 до 2000:
Integer a = 500;
Integer b = 500;
System.out.println(a == b);
// true
Вернёмся к исходному вопросу из предыдущего поста. Правильный ответ – true, но знание факта №3 даёт право отвечать на него «когда как»..java
2️⃣ IDE или утилита javac компилирует их в байткод — файлы с расширением .class
3️⃣ JVM интерпретирует байткод в системные вызовы конкретной платформы.
Эта терминология не совсем точная. JVM — всего лишь спецификация, она предоставляет интерфейс для работы с классами, потоками, памятью, сборщиком мусора и тд. Это абстрактная сущность, физически её не существует.
Многие компании реализуют JVM - HotSpot, Azul, Excelsior и тд. Их продукт позволяет запускать программы и называется JRE (Java Runtime Environment). Помимо указанных в JVM методов JRE содержит библиотеки основных классов(rt.jar) и JIT(Just-in-time)-компилятор.
JVM функции обычно интерпретируются - просто исполняются строка за строкой. JIT-компилятор оптимизирует байткод для конкретной платформы и подставляет машинные команды прямо во время работы. Это сильно увеличивает производительность.
JDK(Java Development Kit) позволяет создавать и запускать программы. Он состоит из JRE и инструментов разработки, таких как компилятор javac, дебаггер jdb, генератор документации javadoc, архиватор jar и тд.
Кратко отношения между сущностями выглядят так:
JVM = спецификация
JRE = реализация JVM + JIT-compiler + библиотеки
JDK = JRE + инструменты разработки
JDK нужны только программистам, а тестовому окружению и продакшену для запуска программ хватает JRE. Поэтому на сайте вендоров JVM обычно представлены оба этих варианта - JDK и JRE для разных платформ.
Но всё изменилось после выхода Java 11. Теперь для скачивания доступна только JDK, а JRE отдельно не поставляется. Чтобы создать среду исполнения используется специальная утилита jlink, в ней указываются необходимые для приложения модули. Редко какой программе нужны все 75 модулей, поэтому полученная JRE занимает гораздо меньше памяти, не содержит лишних библиотек и работает быстрее.
Решение ориентировано на модульную архитектуру, тренд на которую начался в java 9. Второй фактор - популярность использования java на устройствах IoT. Здесь ключевую роль играет компактность JRE и ограниченность функций для повышения безопасности.
Cписок используемых модулей помогает получить утилита jdeps. К счастью, все популярные IDE уже поддерживают java 9, поэтому Вам вряд ли придётся самостоятельно формировать module-info.
#теорияXX:-UseBiasedLocking
Время включения после старта регулируется флажком
-XX:BiasedLockingStartupDelay=500
По умолчанию это значение равно четырём секундам.
Для большинства приложений вам не потребуется использовать эти опции. Но для специфичных случаев флажки JVM могут поднять производительность в разы.
#теорияString html = """
select *
from users
""";
То, ради чего многие перешли на котлин, теперь есть и в java.
Удобно для чтения и написания частей HTML, XML, SQL, JSON.
2️⃣ Изменения в switch.
✅ появился способ не писать break. Если использовать вместо двоеточия стрелочку
то выполнится только код этого кейса.
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
Напомню, что если в обычной форме не написать в конце блока break, то поиск соответствий после выхода из блока продолжится. В примере напечатаются обе строки:
case 1: System.out.println("1");
default: System.out.println("0");
✅ switch теперь возвращает значение. Если строк много, то используется слово yield.
int j = switch (day) {
case MONDAY -> 0;
case TUESDAY -> 1;
default -> {
int res = f(k);
yield res;
}
};
3️⃣ Сокращение размера кода при сужении типа. Каждому, кто переопределял метод equals, знаком этот паттерн:
if(o instanceof String) {
String s = (String) o;
// use s
}
Теперь проверка и приведение типа объединены:
if(o instanceof String str) {
// can use str here
}
Если в if несколько условий, то область видимости переменной зависит от типа их связи. В условиях, соединённых через И, переменную можно использовать:
if(o instanceof String s && s.length() > 5)
В условиях, соединённых через ИЛИ, переменная не будет видна:
❌ if(o instanceof String s || s.length() > 5)
4️⃣ Больше информации в NullPointerException.
Теперь при возникновении исключения будет доступна не только строка, где это произошло, но и описание ситуации.
Exception in thread "main" java.lang.NullPointerException:
Cannot read field "j" because "b" is null
at Pr.main(Pr.java:5)
По умолчанию эта фича не работает, для её включения нужно установить флаг:
-XX:+ShowCodeDetailsInExceptionMessages
#core
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
