JavaRocks
2.36K subscribers
145 photos
14 videos
312 links
Базовый канал для изучения языка Java.

Наш сайт: javarocks.ru

Все необходимые туториалы и материалы.

Тесты для проверки знаний. Лучшие практики и паттерны проектирования.

@viktorreh
@anothertechrock
Download Telegram
👍4
10 лучших Java-проектов для начинающих 2024 года с исходным кодом

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

Ссылка: тык

👉 Java Rocks | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
public class Quest {
public static void main(String[] args) {
int x = 1;
System.out.println("x+1 = " + x+1);
}
}
Что выведет код?
Anonymous Quiz
29%
x+1 = 2
31%
x+1 = 2
40%
Ошибка компиляции
👎5😁4
ℹ️ Метод-референсы

В Java 8 появился новый способ улучшить читаемость кода — ссылки на методы. Это позволяет ссылаться на существующие методы без их вызова, делая код более кратким и понятным.

🔍 Типы метод-референсов:

1️⃣ Статические методы: Позволяют ссылаться на статические методы класса.
Пример: Integer::parseInt

2️⃣ Методы экземпляра: Ссылки на методы конкретного объекта.
Пример: myObject::toString

3️⃣ Методы любого объекта типа: Для методов любого экземпляра заданного класса.
Пример: String::toUpperCase

4️⃣ Конструкторы: Ссылки на конструкторы для создания новых объектов.
Пример: ArrayList::new

⚡️ Пример использования:

Вместо стандартной лямбды:

list.forEach(item -> System.out.println(item));


Можно использовать ссылку на метод:

list.forEach(System.out::println);


А Вы используете ссылки на методы в своих проектах?👇

👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Инкапсуляция

Инкапсуляция — это принцип ООП, который заключается в сокрытии внутреннего представления класса от внешнего мира. Для этого используются модификаторы доступа: private, protected, public.

Обычно поля класса делаются private или protected, а методы — public. Это позволяет скрыть реализацию класса и предоставить к ней контролируемый доступ через public методы.

При запуске этой программы на выходе мы получим:
John 0


👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
⌨️ Срезы в стримах. Метод dropWhile

Операция dropWhile служит дополнением к операции takeWhile. Она отбрасывает первые элементы, для которых предикат возвращает true. Как только результат вычисления предиката становится ложным, она прекращает работу и возвращает все оставшиеся элементы, причем работает даже в том случае, если число оставшихся элементов бесконечно!


List<Integer> ints = List.of(1,2,3,4,5,6,7,8,9);
ints.stream()
.dropWhile(i -> i < 5)
.forEach(System.out::println);
// 5 6 7 8 9


👉 Java Rocks | #java #stream #dropWhile
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔥Полный гайд по алгоритмам сортировки на Java

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

✍️ Особенно актуально для собеседующихся

Ссылка: тык

👉 Java Rocks | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
public class Quest {
public static void main(String[] args) {
int x = 5;
int y = 8;

if (x++ > 5 && ++y > 8) {
x++;
}

System.out.println("x = " + x + ", y = " + y);
}
}
👍3🤨1
🕯 Паттерн Command (Команда)

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

Использование:

🔹 Для отделения отправителя запроса от объекта, который выполняет действие, чтобы упростить изменение или отмену команд.
🔹 Для реализации очередей команд или их многоуровневой отмены.
🔹 Для логирования команд с возможностью их повторного выполнения.

Преимущества:


1️⃣ Инкапсуляция операций в отдельные объекты упрощает расширение системы. Это позволяет легко добавлять новые команды, не изменяя существующий код.
2️⃣ Command предоставляет гибкость в управлении действиями: их можно откладывать, отменять или хранить для последующего выполнения, что делает его полезным в сценариях с очередями задач или транзакциями.
3️⃣ Команды можно комбинировать, создавая макрокоманды для выполнения последовательностей операций, что упрощает выполнение сложных сценариев.
4️⃣ Реализует принцип открытости-закрытости: можно добавлять новые команды без изменения существующего кода.

Недостатки:

1️⃣ Необходимость хранения истории команд для их отмены может потребовать значительных ресурсов, что делает паттерн менее эффективным в системах с ограниченной памятью.
2️⃣ Добавление новых команд требует создания новых классов, что увеличивает объем работы и поддерживает сложность системы.

👉 Java Rocks | #паттерны
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Spring Scheduler: Управление расписанием задач на Java

Spring Scheduler — это часть Spring Framework, которая позволяет планировать и выполнять задачи в заданное время или по расписанию. Он избавляет от необходимости интеграции сторонних библиотек, предлагая встроенные решения для управления задачами.

Виды задач:

- @Scheduled — аннотация для запуска методов по расписанию.
- TaskScheduler — интерфейс для более гибкого управления задачами.
- Cron-выражения — для сложных расписаний.

✔️ Преимущества:

- Простота использования за счёт минимальной конфигурации.
- Интеграция с другими частями Spring.
- Поддержка CRON-выражений для гибкости.

Недостатки:

- Ограниченная поддержка в распределённых системах.
- Возможные сложности с тестированием задач.

👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
⌨️ Какие побитовые операции вы знаете?

~ Побитовый унарный оператор NOT;

& Побитовый AND;

&= Побитовый AND с присваиванием;

| Побитовый OR;

|= Побитовый OR с присваиванием;

^ Побитовый исключающее XOR;

^= Побитовый исключающее XOR с присваиванием;

>> Сдвиг вправо (деление на 2 в степени сдвига);

>>= Сдвиг вправо с присваиванием;

>>> Сдвиг вправо без учёта знака;

>>>= Сдвиг вправо без учёта знака с присваиванием;

<< Сдвиг влево (умножение на 2 в степени сдвига);

<<= Сдвиг влево с присваиванием.

👉 Java Rocks | #java #bitwise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Microservices Project using Spring Boot

Подробный гайд по созданию микросервисов с использованием Spring Boot.

В этом учебном пособии показано как создавать микросервис с использованием Spring Boot 3, Spring Cloud и базы данных PostgreSQL.

В этом микросервисном проекте вы изучите такие важные понятия, как API Gateway, Config Server, Discovery Server, и практически реализуете два реальных микросервиса - Student и School.

Ссылка: тык

👉 Java Rocks | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
class Person {
Long id;
String name;

public Person(Long id, String name) {
this.id = id;
this.name = name;
}

@Override
public boolean equals(Object obj) {
System.out.print(1);
if (obj == this) {
return true;
}
if (obj instanceof Person person) {
return id.equals(person.id);
}
return false;
}
}

public class Quest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person(1L, "Leo"));
list.add(new Person(2L, "Raph"));
list.add(new Person(3L, "Donnie"));
list.add(new Person(4L, "Mikey"));

list.contains(new Person(3L, "Shredder"));
}
}
💯4
ℹ️ Паттерны для тех, кто уже покорил Singleton

— Порождающие паттерны:

🔹Abstract Factory: Family Creator — Создает группы взаимосвязанных объектов.
🔹Builder: Lego Master — Пошагово создает объекты.
🔹Prototype: Clone Maker — Создает копии полностью подготовленных объектов.
🔹Singleton: One and Only — Создаёт объект, который существует в единственном экземпляре.

— Структурные паттерны:

🔹Adapter: Universal Plug — Соединяет объекты с разными интерфейсами.
🔹Bridge: Function Connector — Связывает то, как объект работает, с тем, что он делает.
🔹Composite: Tree Builder — Формирует древовидные структуры из простых и сложных частей.
🔹Decorator: Customizer — Добавляет новые возможности объектам, не изменяя их основную структуру.
🔹Facade: One-Stop-Shop — Представляет всю систему через один упрощенный интерфейс.
🔹Flyweight: Space Saver — Эффективно использует небольшие, многократно используемые объекты.
🔹Proxy: Stand-In Actor — Представляет другой объект, управляя доступом или действиями.

— Поведенческие паттерны:

🔹Chain of Responsibility: Request Relay — Передает запросы через цепочку объектов до тех пор, пока он не будет обработан.
🔹Command: Task Wrapper — Превращает запрос в объект, готовый к выполнению.
🔹Iterator: Collection Explorer — Доступ к элементам коллекции по одному.
🔹Mediator: Communication Hub — Упрощает взаимодействие между различными классами.
🔹Memento: Time Capsule — Сохраняет и восстанавливает состояние объекта.
🔹Observer: News Broadcaster — Уведомляет классы о изменениях в других объектах.
🔹Visitor: Skillful Guest — Добавляет новые операции в класс, не изменяя его.

💬 Какие паттерны вы использовали в реальных кейсах?

👉 Java Rocks | #паттерны
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
⌨️ Срезы в стримах. Метод takeWhile

В Java 9 появилось два новых метода, полезных для выбора элементов потока с хорошей производительностью: takeWhile и dropWhile.

Допустим, у нас есть следующий список блюд:

List<Dish> specialMenu = Arrays.asList(
new Dish("seasonal fruit", 120),
new Dish("prawns", 300),
new Dish("rice", 350),
new Dish("chicken", 400),
new Dish("french fries", 530));


Для получения блюд с калорийностью меньше 320, можно воспользоваться операцией filter. Недостаток операции filter в том, что она требует прохода в цикле по всему потоку данных с применением предиката ко всем элементам.

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

Поможет нам в этом операция takeWhile! Она позволяет выполнить срез любого потока данных (даже бесконечного) с помощью предиката. И, к счастью, она прекращает работу сразу же по обнаружении неподходящего элемента. Вот как ее следует использовать:

List<Dish> sliceMenu1
= specialMenu.stream()
.takeWhile(dish -> dish.getCalories() < 320)
.collect(toList());


👉 Java Rocks | #java #stream #takeWhile
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
FastЕxcel

FastExcel — это легкая и производительная библиотека Java для работы с файлами Excel. Она позволяет читать, создавать и модифицировать электронные таблицы XLSX, используя простой и понятный API.

Ссылка: тык

👉 Java Rocks | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
public class Quest {
public static void main(String[] args) {
int b = oper2() | oper3() & oper4();
System.out.println("-" + b);
}
private static byte oper2() {
System.out.print(2);
return 2;
}
private static byte oper3() {
System.out.print(3);
return 3;
}
private static byte oper4() {
System.out.print(4);
return 4;
}
}