Java for Beginner
686 subscribers
588 photos
161 videos
12 files
905 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Что выведет код?

public class Task110625 {
public static void main(String[] args) {
int a = 5;
int b = 2;

double result = a / b;
System.out.println(result);
}
}


#Tasks
👍2
Что такое композиция и агрегация в ООП? 🤓

Ответ:

Композиция и агрегация — это отношения "часть-целое":

Композиция: объект-часть не существует без целого (например, двигатель в машине). Если машина уничтожается, двигатель тоже.

Агрегация: объект-часть может существовать отдельно (например, студент в университете).

Пример композиции:
class Car {
Engine engine = new Engine(); // Композиция
}

Пример агрегации:
class University {
List<Student> students; // Агрегация
}


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
📌 Факт дня:

А вы знали, что термин "бета-версия" появился в 1960-х?

IBM ввела термин "beta" для обозначения программ, находящихся на стадии тестирования перед релизом. Он заимствован из греческого алфавита, где "бета" — вторая буква, означающая вторую фазу разработки.


#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📌 Цитата дня: Виктор Глушков

"Цифровые машины — это не только вычисления, но и управление будущим."


Виктор Глушков, пионер кибернетики в СССР, сказал это в 1970 году на симпозиуме по автоматизации в Киеве, подчеркивая роль компьютеров в управлении экономикой.


Жизнь замечательных айтишников – Виктор Глушков

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
И пускай мы переживаем не лучшие времена, но я ВЕРЮ в свою страну ❤️

Всех с Днем России и выходными! 🏝
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2
Настройка и базовые команды Flyway

1. Конфигурация Flyway

1.1. Файл flyway.conf
Основной файл конфигурации Flyway. Располагается в корне проекта или в директории conf.

Пример содержимого:
# Подключение к БД
flyway.url=jdbc:postgresql://localhost:5432/mydb
flyway.user=admin
flyway.password=secret

# Директории с миграциями
flyway.locations=classpath:db/migration,filesystem:/opt/migrations

# Дополнительные настройки
flyway.schemas=public
flyway.baselineOnMigrate=true


Ключевые параметры:
flyway.url — JDBC-URL базы данных (формат зависит от СУБД).

flyway.locations — пути к миграциям:
classpath: — поиск в ресурсах проекта (например, src/main/resources/db/migration).
filesystem: — абсолютный путь на диске.
flyway.baselineOnMigrate — инициализация существующей БД (без таблицы flyway_schema_history).


1.2. Параметры командной строки

Настройки можно переопределять через аргументы:
flyway -url=jdbc:postgresql://localhost:5432/mydb \
-user=admin \
-password=secret \
-locations=classpath:db/migration \
migrate
Важно: Параметры из командной строки имеют приоритет над flyway.conf.


2. Основные CLI-команды

2.1. flyway migrate

Применяет все невыполненные миграции.

Процесс:
Проверяет таблицу flyway_schema_history.
Находит скрипты, которых нет в истории.
Выполняет их в порядке версий (например, V1__... перед V2__...).


Пример:
flyway migrate


2.2. flyway info

Показывает текущее состояние БД:
Какие миграции применены.
Какие ожидают выполнения.
Статус (Success, Pending, Failed).


Вывод:
+-----------+---------+---------------------+------+---------------------+---------+
| Version | Description | Installed on | State | Type | Checksum |
+-----------+---------+---------------------+------+---------------------+---------+
| 1 | Create users | 2024-03-15 10:00 | Done | SQL | 1234abcd |
| 2 | Add email | Pending | | SQL | 5678efgh |
+-----------+---------+---------------------+------+---------------------+---------+


2.3. flyway validate

Проверяет:
Целостность скриптов (не изменены ли уже примененные).
Корректность именования.


Ошибка:
Validation failed: Detected applied migration not resolved locally: 1
Причина: Локальный скрипт V1__... был изменен после применения к БД.


2.4. flyway clean

Удаляет все объекты БД (таблицы, процедуры), включая flyway_schema_history.
Опасность: Необратимая операция. Используется только в dev-среде.

flyway clean


3. Форматы миграций

3.1. SQL-миграции

Стандартный подход. Скрипты с расширением .sql в директории db/migration.

Пример (V1__Create_users.sql):
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);

INSERT INTO users (id, username) VALUES (1, 'admin');


3.2. Java-миграции

Для сложной логики (например, условные операции).


Шаги:
Создайте класс в проекте:
public class V2__InsertTestData implements JdbcMigration {
public void migrate(Connection connection) throws Exception {
try (Statement stmt = connection.createStatement()) {
stmt.execute("INSERT INTO users (username) VALUES ('test')");
}
}
}


Укажите путь к Java-классам в flyway.locations:
flyway.locations=classpath:db/migration,classpath:com/example/migrations


3.3. Callbacks (SQL-хуки)

Скрипты, выполняемые до/после событий Flyway.

Пример (beforeMigrate.sql):
-- Выполняется перед началом миграций
CREATE SCHEMA IF NOT EXISTS audit;


Поддерживаемые события:

beforeMigrate, afterMigrate.
beforeClean, afterClean.


Директория:
db/
migration/
V1__...sql
callback/
beforeMigrate.sql


4. Важные замечания

Именование файлов:
Регистрозависимо (V1__test.sql ≠ v1__test.sql).
Разделитель — двойное подчеркивание (__).


Порядок выполнения:
Сначала V1__..., затем V2__....
R__... выполняются после всех версионных.


Безопасность:

Никогда не изменяйте уже примененные скрипты.
Для отката создавайте новые миграции (например, V3__Drop_table.sql).


#Java #middle #Flyway
👍4
Что выведет код?

import java.util.stream.Stream;

public class Task120625 {
public static void main(String[] args) {
long count = Stream.of(1, 2, 3, 4)
.map(i -> {
System.out.print("m" + i + " ");
return i * 2;
})
.filter(i -> {
System.out.print("f" + i + " ");
return i > 3;
})
.count();

System.out.println("\ncount=" + count);
}
}


#Tasks
👍1
Что такое паттерн Singleton и как его реализовать? 🤓

Ответ:

Singleton — паттерн, гарантирующий, что у класса есть только один экземпляр. Реализация включает приватный конструктор, статическое поле и метод доступа:

class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() { return instance; }
}

Для потокобезопасности можно использовать ленивую инициализацию с synchronized или double-checked locking.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Forwarded from ChatRoom (Java for Beginner) (Первожрец)
А как вы поддерживаете себя в форме, программисты и программистки?💪
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Факт дня:

А вы знали, что первый "цифровой компас" в компьютерах появился в 1989 году?

Apple Macintosh Portable был первым компьютером с цифровым компасом, хотя он использовался в основном для навигации в интерфейсе. Это предвосхитило компасы в современных смартфонах.


#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📌 Цитата дня: Алексей Пажитнов

"Игра должна быть простой, чтобы стать вечной."


Алексей Пажитнов, создатель Tetris, сказал это в 1984 году в интервью о разработке игры в Москве. Цитата отражает философию гейм-дизайна.


Биография
хххАбр

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ссылочные типы в Java — строки (String)

Строки (String) в Java — это особый ссылочный тип данных, играющий ключевую роль практически в любом приложении. Несмотря на кажущуюся простоту, строки обладают рядом особенностей, таких как неизменяемость, пул строк, перегрузка операций и поведение ссылок. Глубокое понимание строк необходимо для написания безопасного, производительного и корректного Java-кода.


Создание строк

В Java строки можно создавать несколькими способами:
String s1 = "Hello";
String s2 = new String("Hello");


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


Также строки можно строить из массивов символов или байтов:
char[] chars = {'J', 'a', 'v', 'a'};
String s3 = new String(chars);


Ключевые особенности:
Строки в Java являются объектами класса java.lang.String.
Объекты String неизменяемы: после создания их содержимое нельзя изменить.
Неизменяемость позволяет безопасно использовать строки в многопоточном окружении и в качестве ключей в Map.



Существование и удаление строк

Как и любые объекты, строки существуют до тех пор, пока на них имеются активные ссылки. Когда все ссылки теряются, строка становится кандидатом на сборку мусора.
Однако строки, созданные как литералы (например, "Hello"), хранятся в строковом пуле, и удаление таких строк происходит только при завершении работы JVM или при агрессивной сборке мусора в редких случаях.


String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true — обе ссылаются на одну строку из пула


В случае создания строки через new, строки не участвуют в пуле по умолчанию:
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); // false


Метод intern() позволяет вручную добавить строку в пул:
String s1 = new String("abc").intern();
String s2 = "abc";
System.out.println(s1 == s2); // true



Использование строк

Строки активно используются при:
работе с вводом/выводом,
хранении текстовых данных,
построении логических выражений,
работе с шаблонами, логами и URL.


Java предоставляет множество удобных методов для работы со строками:
String s = "Hello, World!";
int length = s.length();
char ch = s.charAt(0);
String lower = s.toLowerCase();
boolean contains = s.contains("World");


Важно помнить, что методы класса String возвращают новые строки, поскольку String неизменяем:
String original = "Java";
String modified = original.replace("J", "K");
System.out.println(original); // Java
System.out.println(modified); // Kava


Сравнение строк:
String a = "hello";
String b = new String("hello");

System.out.println(a == b); // false — разные объекты
System.out.println(a.equals(b)); // true — одинаковое содержимое
Оператор == сравнивает ссылки, а метод equals() — содержимое.


#Java #для_новичков #beginner #reference_types #String
👍1
Трудности и подводные камни

1. Неизменяемость
Изменение строки всегда приводит к созданию нового объекта. Это важно учитывать при работе в циклах:

String result = "";
for (int i = 0; i < 1000; i++) {
result += "a"; // создается 1000 новых строк
}


Лучше использовать StringBuilder:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("a");
}
String result = sb.toString();


2. Сравнение с null

Обращение к методам строки без проверки может привести к NullPointerException:
String name = null;
if (name.equals("admin")) { // ошибка
}


Правильнее писать:
if ("admin".equals(name)) { // безопасно
}


3. Пул строк и производительность
Пул строк позволяет уменьшить использование памяти, но злоупотребление вручную созданными строками через new String(...) может привести к увеличению нагрузки на сборщик мусора.

4. Конкатенация и производительность
Строки, объединённые с помощью + в цикле, могут ухудшать производительность. Лучше использовать StringBuilder или StringBuffer (если требуется потокобезопасность).

5. Использование в Map и Set

Поскольку строки неизменяемы, их можно безопасно использовать в качестве ключей в HashMap, HashSet и других коллекциях. Однако важно корректно переопределять equals() и hashCode() для классов, в которых строки используются в качестве полей для сравнения.



Дополнительные нюансы

1. String vs StringBuilder vs StringBuffer
String — неизменяемый, потокобезопасный.
StringBuilder — изменяемый, не потокобезопасный, но самый быстрый.
StringBuffer — изменяемый, потокобезопасный, но медленнее.


2. Методы класса String

Строки обладают большим набором методов:
substring()
trim()
split()
replace()
matches() (регулярные выражения)
format() и другие


3. Регулярные выражения

Методы matches(), replaceAll() и split() поддерживают регулярные выражения, что делает String мощным инструментом для разбора и обработки текста.

4. Юникод и кодировка

Java строки используют UTF-16, где каждый символ — это один или два 16-битных элемента. Это важно при работе с Unicode-символами, особенно при подсчёте длины строки или извлечении символов.

5. Объекты String в коллекциях

Если строка используется как ключ в Map, важно помнить, что разные ссылки на строки с одинаковым содержимым будут считаться одинаковыми, если equals() и hashCode() совпадают — что работает корректно для String.

#Java #для_новичков #beginner #reference_types #String
👍2
Что выведет код?

public class Task130625 {
public static void main(String[] args) {
String s1 = "Java";
String s2 = new String("Java").intern();
String s3 = new StringBuilder("Ja").append("va").toString();
String s4 = s3.intern();

System.out.println((s1 == s2) + " " + (s1 == s3) + " " + (s1 == s4));
}
}


#Tasks
👍1
Что такое Map.Entry в Java? 🤓

Ответ:

Map.Entry — это интерфейс, представляющий пару ключ-значение в Map.

Используется для итерации по элементам HashMap или других реализаций Map.

Пример:


Map<String, Integer> map = new HashMap<>();

map.put("A", 1);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}

Методы getKey() и getValue() позволяют получить ключ и значение.

#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤓1
После проведенного голосования, определилась тема для рассмотрения в выходные - Stream Api

Но поскольку принято решение показать это все на видео, в рамках встречи, то перейдем к второму финалисту - Maven.
Тем более он давно напрашивается на цикл статей
😏

Ну читаем'с затравочную статейку


Введение в Apache Maven: автоматизация сборки и управления проектами

Apache Maven — это мощный инструмент для автоматизации сборки, управления зависимостями и проектной документации, широко используемый в экосистеме Java. Эта статья предназначена для тех, кто только начинает знакомство с Maven и хочет понять, зачем он нужен, как работает и какую роль может играть в разработке программного обеспечения.

Что такое Maven

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

По сути, Maven — это система сборки, основанная на декларативном описании проекта в файле pom.xml (Project Object Model). Вместо написания множества сценариев разработчик указывает, что именно нужно сделать, а Maven сам знает, как это реализовать.

Зачем нужен Maven

В проектах на Java быстро возникает необходимость управлять зависимостями, компиляцией, тестами и выпуском новых версий. Раньше всё это приходилось настраивать вручную — с помощью антипаттернов вроде «анархичной сборки» на Ant, bash-скриптах и слабо задокументированных процедурах.

Maven решает эти проблемы:
Централизованное управление зависимостями: подключение внешних библиотек через репозитории.
Повторяемая сборка: независимо от среды результат будет одинаков.
Стандартизация структуры проекта.
Интеграция с инструментами тестирования, анализа качества кода и CI/CD.
Простота подключения плагинов и расширение функциональности без переписывания логики сборки.


Как работает Maven

Maven использует модель жизненного цикла сборки, разбитую на фазы: compile, test, package, install, deploy и другие. Когда вы вызываете mvn install, Maven проходит через все фазы от начала до указанной, автоматически выполняя нужные действия. Плагины реализуют конкретные шаги на каждой фазе.

Файл pom.xml описывает проект: его артефакт, координаты, зависимости, плагины и профили. Maven загружает зависимости из центрального репозитория, при необходимости кешируя их в локальном.

Репозитории делятся на:
Локальный (на вашей машине)
Центральный (официальный репозиторий Maven)
Удалённые (частные, корпоративные и т. д.)


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

Одно из главных достоинств Maven — подход «конвенция важнее конфигурации». Он предполагает стандартную структуру каталогов и поведения, которую можно переопределить, но в большинстве случаев она устраивает по умолчанию. Это упрощает вхождение в проект новым разработчикам и снижает объем ручной настройки.

Maven обеспечивает:
Унифицированный подход к сборке.
Возможность многомодульной организации.
Расширяемость за счёт системы плагинов.
Широкую поддержку со стороны экосистемы (IDE, CI-систем, репозиториев).


Когда Maven может не подойти

Несмотря на свои преимущества, Maven не универсален. В проектах с сильно нестандартной логикой сборки или с большим количеством нестандартных шагов может потребоваться более гибкий инструмент, такой как Gradle. Также Maven изначально ориентирован на Java, и для других языков (например, JavaScript или Python) он не является естественным выбором.

#Java #middle #on_request #Maven
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Есть предложение встретиться завтра в 16:00 по МСК на лайвкодинг!

Тема будет: StreamApi и функциональные интерфейсы
Anonymous Poll
52%
Да, интересно я приду! 👌
20%
Блииин, хочу, но не могу 😭
24%
Посмотрю в записи ☺️
4%
Не, фигню рассматриваете, я ее знаю, не приду 🤫
👍2