Библиотека Java разработчика
10.8K subscribers
1.14K photos
564 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
RestController

Аннотация RestController совмещает в себе аннотации Controller и ResponseBody. Первая указывает, что данный класс играет роль контроллера. Вторая указывает, что тип возврата должен быть записан прямо в тело ответа HTTP. RestController устраняет необходимость использования ResponseBody, так как запись в тело происходит автоматически.

Подписывайтесь на канал 👉@coddy_academy

#java
Lombok + JPA: Что может пойти не так?

Lombok — это отличный инструмент, с которым Java-код становится чище и лаконичнее. Однако есть несколько нюансов, которые надо учитывать при его использовании с JPA. В этой статье мы выясним, как неправильное применение Lombok может повлиять на производительность приложений или даже привести к ошибкам. Разберемся, как этого избежать не теряя преимуществ Lombok.

Подробнее
Способы хранения деревьев в реляционных базах данных c использованием ORM Hibernate

Здравствуйте! В этой статье, я постараюсь кратко рассказать о четырёх достаточно известных способах хранения деревьев с указанием преимуществ и недостатков.

Подробнее
💥Прими участие в онлайн-хакатоне «ТФ Альянс» с призовым фондом 500 000 рублей

С 11 по 13 марта 2022 платформа токенизации проектных ИТ-команд «ТФ Альянс» проведет онлайн-хакатон для студентов и молодых IT-специалистов. Участники мероприятия поборются за призовой фонд в размере 500 тысяч рублей, а также за 3-х дневное бесплатное проживание в HackerHome в Иннополисе, городе высоких технологий.

Командам предстоит за 48 часов решить одну из трех задач на выбор с применением Data Science, Python и Blockchain:
👉 разработать робота-ассистента на основе Telegram-бота для тематической буферизации сообщений;
👉 создать систему учета метрик для оценки эффективности работы специалистов и команд в проектных задачах;
👉 разработать инструмент для обеспечения взаимосвязи блокчейнов реестра транзакций и реестра состояний.

После разработки прототипа участники продемонстрируют его работоспособность перед членами жюри в рамках финальной питч-сессии.

🕛‼️Для участия нужно подать заявку до 23:59 9 марта 2022 года на сайте.


Результаты будут объявлены 13 марта.

Хакатон приурочен к вступлению «ТФ Альянс» в сообщество Инновационного научно-технологического центра МГУ «Воробьевы горы». Компания планирует работать над инновационными проектами в сфере ИТ-услуг.
👍1
О чем говорит ключевое слово final?

Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.

• Класс не может иметь наследников;
• Метод не может быть переопределен в классах наследниках;
• Поле не может изменить свое значение после инициализации;
• Параметры методов не могут изменять своё значение внутри метода;
• Локальные переменные не могут быть изменены после присвоения им значения.
👍3🤯2
Модификация ArrayList

Для добавления элементов используется add(). В скобочках указывается элемент, который мы хотим добавить. Чтобы удалить элемент, пишем remove(). В скобочках можно писать как сам элемент, который мы хотим удалить, так и его индекс.

#java

Подписывайтесь на канал 👉@coddy_academy
👍5👎2😁1🤯1
🔥 Senior Backend Hiring Week: оффер в EPAM за 24 часа и welcome-бонус!

Мы приглашаем опытных Java-разработчиков присоединиться к команде EPAM за 24 часа. Никаких многодневных интервью - мы ценим ваше и свое время, поэтому вы пообщаетесь только с теми, кто имеет непосредственное отношение к проектам. Если мы подходим друг другу, вы получите оффер в течение суток, а еще дополнительный welcome-бонус в размере оклада.

Преимущества работы в EPAM:
📌 Вы сможете поработать с крупными международными проектами из разных отраслей: медицины, финтеха, торговли, Life Sciences, Big Data.
📌 Мы помогаем пройти сертификацию (AWS, Azure, GCP) и предлагаем программы повышения квалификации – Delivery Management School и Solution Architecture School.
📌 Карьерный рост в треке Advanced Software Engineer, если вы любите писать код и не видите себя в роли менеджера.
📌 Гибкость в выборе проектов и задач, ориентированную на интересы и цели развития каждого разработчика.

Ждем вас в EPAM!

Зарегистрироваться: epa.ms/senior-backend-hiring-week-9
Что такое статическое и динамическое связывание?

Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).

В свою очередь, позднее связывание (late binding) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.

Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).
👍11
Как применить регулярное выражение в Java?

Регулярные выражения – мощный механизм работы со строками. Здесь мы не будем говорить о регулярных выражениях в целом, поговорим об их использовании в Java. Это становится возможно благодаря пакету java.util.regex стандартной библиотеки.

Работа с регулярными выражениями в Java начинается с класса Pattern. Это представление самого выражения, без привязки к целевому тексту. Создать его можно компиляцией строки, с помощью фабричного метода Pattern.compile(). Паттерн иммутабельный и потокобезопасный.

Matcher – регулярное выражение, примененное к конкретному тексту. Пораждается вызовом метода Pattern.matches(). Одним паттерном можно порождать несколько разных матчеров. В отличие от паттерна, матчер мутирует. Он не безопасен для многопоточной среды. Основные операции регулярных выражений – перебор совпадений, доступ к группам, замена – реализованы именно в этом классе.

Работа с экземпляром Matcher похожа на работу с итератором. Результат метода matches() просто скажет, соответствует ли строка шаблону. Но после его вызова матчер поменяет состояние. Теперь, из него можно получить группы, позицию совпадения в тексте, а также произвести замену.

В объекте шаблона Pattern реализованы несколько методов-сокращений, чтобы не использовать Matcher явно. Например, просто проверить строку на соответствие выражению можно одним методом Pattern.matches().
👍5
Как сделать скриншот на Java?

Вы можете испольщовать Robot().createScreenCapture() чтобы сделать скриншот экрана на Java.

Посмотреть пример в онлайн редакторе.

Подписывайтесь на канал 👉@coddy_academy

#java
👍11
Можно ли достать параметры метода рефлекшеном?

По умолчанию – нет. Рефлекшн-информация о параметрах метода представляется объектами класса Parameter. По умолчанию их свойство name синтетическое: "arg0", "arg1", и так далее. Метод isNamePresent при этом возвращает false, что значит что действительная информация об имени недоступна. Она не попадает даже в байт-код.

Начиная с Java 8 у компилятора (javac) появилась опция -parameters. В скомпилированный с этой опцией класс добавляются имена аргументов методов. Parameter#getName() тогда возвращает уже настоящее имя.

Классический пример, когда информация об именах может понадобиться – библиотека JSON сериализации Jackson. Параметры конструктора могут трактоваться ей как поля сериализационной формы.

До появления флага -parameters Jackson использовал для этого аннотации. Каждый параметр снабжался аннотацией @JsonProperty. Значением аннотации передавалась строка, которая повторяла имя параметра. Эти аннотации затем можно было получить, вызвав Method#getParameterAnnotations().
👍5
Platformer Tutorial - Java

A New Beginning - Episode #01
INPUTS - Episode #02
GAME LOOP - Episode #03
HOW TO MAKE A Game Loop in Java
IMAGES - Episode #04
ANIMATIONS - Episode #05
GAME LOOP 2.0 - Episode #06
PLAYER CLASS - Episode #07
Level Creation - Episode #08

https://www.youtube.com/playlist?list=PL4rzdwizLaxYmltJQRjq18a9gsSyEQQ-0
Дочерние классы в массивах

В Java полиморфизм позволяет нам помещать экземпляры разных классов, которые имеют общий родительский класс, вместе в массив или ArrayList. Например, если у нас есть родительский класс Animal с дочерними классами Cat, Dog и Pig, мы можем настроить массив с экземплярами каждого животного, а затем перебрать список животных, чтобы выполнить одно и то же действие над каждым.

Подписывайтесь на канал 👉@coddy_academy

#java
👍3
getClass

Возвращает класс этого экземпляра. То есть результатом вызова .getClass() переменной типа Foo может быть как Foo.class, так и .class любого из его подклассов. Компилятор страхуется от ClassCastException в рантайме подменой возвращаемого типа метода на Class<? extends Foo>.

Подробнее
👍7
Оптимизируем Java-приложения с помощью GraalVM

В этой статье я приведу простые и не очень простые примеры, чтобы наглядно показать преимущества и особенности GraalVM.

Подробнее
👏3👍2🤔1
Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?

Ключевое слово interface используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как public.

Начиная с Java 8 в интерфейсах разрешается размещать реализацию методов по умолчанию default и статических static методов.

Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными public, статическими static и неизменяемыми final.v
👍5🔥1
equals, hashCode

Эти два метода придуманы для использования в Java Collections Framework и связаны общим контрактом, для соблюдения которого переопределять их необходимо вместе. Методы обязательно нужно переопределить чтобы эффективно использовать экземпляры как ключи в HashMap или HashSet. HashMap работает тем эффективнее, чем «лучше» распределение хэшей.

Контракт:
1. Если объекты equals, у них должны быть одинаковые hashCode (не обязательно наоборот – коллизии допустимы!)
2. equals должен быть отношением эквивалентности
3. Ничто не может быть equals(null)
4. equals и hashCode должны возвращать одни и те же значения для одного и того же объекта при каждом последующем вызове, даже если состояние объекта изменилось. Это делает реализацию для изменяемых (mutable) объектов крайне сложной.

По умолчанию equals сравнивает на ==. С умолчательным hashCode дела обстоят интереснее: он зависит от реализации JVM, и может быть неожиданным. Например в OpenJDK 7 это случайное число.

Подробная инструкция по переопределению этих методов описана в Effective Java Item 9 (больше деталей о волшебном числе 31 здесь).
🔥4
Изучаем Java. Методы equals() и hashCode()

В этой статье мы рассмотрим два важных метода класса Object в Java - equals() и hashCode(), разберемся, зачем они нужны и расскажем об их использовании на конкретных примерах.

Подробнее
👍5