Java for Beginner
716 subscribers
660 photos
174 videos
12 files
1.03K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Java for Beginner
Вновь создаем встречу, обсуждаем Java, заходите, поговорим.
Всем спасибо кто пришел🫡
Классно поговорили и обменялись мнениями👍
Думаю надо повторить🤝
👍6
🗓 История IT сегодня — 17 августа


ℹ️ Кто родился в этот день

Ло́уренс Джо́зеф «Ла́рри» Э́ллисон (англ. Lawrence Joseph «Larry» Ellison; род. 17 августа 1944 года, Бронкс, Нью-Йорк, США) сооснователь и долгосрочный руководитель Oracle Corporation; ключевая фигура в развитии коммерческих СУБД и корпоративного программного обеспечения.


🌐 Знаковые события


1958 — Pioneer 0 (Thor-Able) — первая американская попытка отправить аппарат к Луне; запуск 17 августа, авария на взлёте.

1970 программа «Венера»: запуск аппарата Венера-7, первого успешно передавшего данные с поверхности другой планеты — Венеры.

1982 — Германия/Япония: на заводе Philips (Ганновер) начинают серийно прессовать первые компакт-диски (CD); коммерческий старт CD-эры — осень 1982.


#Biography #Birth_Date #Events #17Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Если твой баг стоит миллионы: кто виноват и кто заплатит?

Ты написал код. Код ушёл в прод.
Через час — у компании минус 10 миллионов рублей из-за сбоя в платёжке.
Тебя вызывает тимлид. Потом HR. Потом юрист.

А в голове вертится одна мысль: если я сяду, где я возьму столько денег?



😉 Давайте сегодня развеем страхи любого начинающего разработчика


🤓 Где закон встречает программиста

В России у программиста есть три юридических ловушки:

Гражданский кодекс РФ

ст. 1064 ГК РФ — "Общая ответственность за причинение вреда".
ст. 15 ГК РФ "Компенсация убытков".
Если из-за твоего кода компания реально потеряла деньги, теоретически она может взыскать ущерб.


Трудовой кодекс РФ
ст. 232–233, 238 ТК РФ обязанность работника, как стороны трудового договора, нести материальную ответственность, но только в пределах своего заработка, если иное не доказано.

Уголовный кодекс РФ
(крайне редкий, но встречающийся кейс)
ст. 272 УК РФнеправомерный доступ к компьютерной информации.
ст. 273 УК РФсоздание и распространение вредоносных программ.


❗️Вот что важно - это наличие виновности❗️

😔 Что такое "виновность"
В трудовом праве РФ "виновность" это наличие твоих неправомерных действий (или бездействия) и наличие причинно-следственной связи с ущербом. Виновность полностью может установить только суд/специальная комиссия/уполномоченные лица.
При любом раскладе все решения можно обжаловать в вышестоящем суде.



🫰 Когда ты реально можешь заплатить?

🔴 Ущерб доказан и он прямой (сломанный сервер, утраченные данные, деньги реально ушли).
🔴 Ты действовал с нарушением правил, инструкций или проявил грубую небрежность.
🔴 Есть приказ о привлечении к ответственности (работодатель должен провести служебное расследование и зафиксировать все сопутствующие моменты).
🔴 Есть документально подтвержденное, законное, оформленное подтверждение ущерба.
🔴 Суд/комиссия установила, что вина в причиненном ущербе - твоя.

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

Важно: по ст. 241 ТК РФ твой максимум ответственности это средняя месячная зарплата.

А вот полную сумму ущерба взыщут только в спецслучаях (ст. 243 ТК РФ):
- умышленный вред,
- кража,
- разглашение тайны,
- алкоголь/наркотики,
- договор о полной мат. ответственности,
- причинение ущерба не при исполнении работником трудовых обязанностей.

Пример: ты по невнимательности, пьяный, уронил серверный блок, отчего удалилась продовая БД. Твой напарник, по инструкции обязан был делать бэкап — и не сделал. Полный ущерб причиненный компании выплатите пополам 🤣.


✌️ Когда ты НЕ платишь?

🔵 Ошибка нормальная рабочая, без умысла, в рабочем процессе или при выполнения задания.
🔵 Работодатель сам не создал условий (например, не было ревью, тестирования, или тебя заставили задеплоить в прод ночью) и т.д. Но важно это с твоей стороны это доказать!
🔵 Ущерб — это "упущенная выгода" (например, "мы могли заработать, но баг помешал" — это не взыскивается по ТК РФ).
🔵 Крайняя необходимость и необходимая оборона (если ты разбил монитор об голову грабителя — это не взыскивается по ТК РФ).

Пример: тебя попросили срочно вкатить фиксы без тестов, всё упало, компания потеряла клиентов. Тут вина на организации процесса, а не на тебе.


🤫 Вот мои советы, чтобы избежать проблем:

Документируйте всё
Ведите переписку с руководством и коллегами через корпоративные каналы (почта, мессенджеры) по рискованным задачам и условиям, которые могут привести к ущербу.

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

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

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


Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность 🤝

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
🗓 История IT сегодня — 18 августа


ℹ️ Кто родился в этот день

Влади́мир Андре́евич Ме́льников (18 августа 1928, деревня Венюково (ныне Чеховский район Московской области) — 7 мая 1993, Москва)советский учёный и конструктор вычислительной техники. Член-корреспондент (1976) и академик АН СССР (1981). Лауреат двух Государственных премий СССР. Известен созданием советского суперкомпьютера Электроника СС БИС. Принимал участие в создании БЭСМ-6 (первого советского компьютера с быстродействием более 1 млн операций в секунду).

Самвел Кимович Шукурян (арм. Սամվել Կիմի Շուքուրյան; род. 18 августа 1950) армянский/советский учёный в области информатики и компьютерной техники; доктор наук, внёс вклад в развитие вычислительной науки в регионе (научные школы, инженерные разработки).

Брук Те́йлор (англ. Brook Taylor, 1685—1731) английский математик, именем которого называется известная формула, выражающая значение голоморфной функции через значения всех её производных в одной точке.

Брюс Лоуренс Хорн (родился 18 августа 1959 года)американский инженер-программист. Он создал оригинальный Macintosh Finder и Macintosh Resource Manager для Apple Computer . Его подпись, наряду с подписями остальных членов команды разработчиков Macintosh, отлита на корпусе Macintosh 128K. С июня 2022 года он является выдающимся инженером Siri и Language Technologies в Apple.


🌐 Знаковые события

1900русский инженер Константин Перский предложил слово «телевидение».

1947 — основана компания Hewlett-Packard (HP) Уильямом Хьюлеттом и Дэвидом Паккардом, начавшая с выпуска осцилляторов для аудио-техники и выросшая в глобального гиганта индустрии.

1960 — американский спутник-шпион Discoverer 14 сделал первую в истории фотографию с воздуха, запущенный из космоса, запечатлев советский аэродром на мысе Шмидта. Выдающийся прорыв в аэрофотосъёмке и разведке.

2003 — Adobe впервые выпустила Adobe Audition (ранее Cool Edit Pro 2.0), ставшее стандартом для профессионального звукового монтажа.

2004 — Google осуществила «floats» (публичное размещение акций, IPO), ожидая цену $85–95, что стало знаковым моментом в истории интернета и ИТ-индустрии.


#Biography #Birth_Date #Events #18Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Apache Kafka

Consumer — группы, оффсеты, ребалансинг


Apache Kafka Consumer — это клиент, ответственный за чтение и обработку сообщений из топиков.


Group coordinator, heartbeat, session.timeout.ms

Consumer groups позволяют нескольким потребителям параллельно обрабатывать топик, распределяя партиции между ними для load balancing. Группа идентифицируется по group.id; каждый потребитель в группе — member с уникальным member.id (генерируется при join).

Group coordinator это брокер, выбранный для управления группой (hash(group.id) % num_brokers определяет координатора).

Координатор хранит состояние группы: members, assignments партиций, committed offsets (в внутренней теме __consumer_offsets).

В памяти брокера: состояние в GroupMetadataManager, с off-heap структурами для efficiency; offsets реплицированы как обычные записи.


Потребители поддерживают связь через heartbeat'ы: отдельный Heartbeat thread в KafkaConsumer посылает HeartbeatRequest каждые heartbeat.interval.ms (по умолчанию 3 сек) к координатору. Координатор отвечает, подтверждая membership. Если heartbeat не приходит в течение session.timeout.ms (по умолчанию 45 сек), member считается dead, триггеря rebalance.

В памяти потребителя: Coordinator хранит generation (epoch группы), member.id. Нюанс: высокое session.timeout.ms позволяет пережить GC-паузы или network glitches, но замедляет detection failures; низкое — приводит к frequent rebalances. При poll() heartbeat отправляется implicitly, если interval истек.


Offset management: авто-коммит vs ручной (commitSync, commitAsync)

Offsets тракают прогресс чтения: для каждой партиции — committed offset, с которого группа начнет после restart/rebalance.

Авто-коммит: Включается enable.auto.commit=true (default), с auto.commit.interval.ms (5 сек). При poll() потребитель аккумулирует processed offsets в памяти (OffsetAndMetadata), и каждые interval commit'ит их async. В памяти: Map<TopicPartition, OffsetAndMetadata> в KafkaConsumer, flushed periodically.

Trade-offs: удобно, но риск at-most-once (если crash после обработки, но до commit — потеря) или at-least-once (duplicates если commit после обработки, но перед full ack). Не используйте для critical processing.

Ручной коммит: enable.auto.commit=false. commitSync() — synchronous, блокирует до подтверждения от координатора (via OffsetCommitRequest), обеспечивает durability, но увеличивает latency. commitAsync() — asynchronous, с optional callback для error handling; faster, но требует manual retry на failures.

В памяти: offsets буферизуются до commit; при commitSync все in-flight commits ждут. Нюанс: commit только assigned партиций; при rebalance revoked offsets commit'ятся в onPartitionsRevoked. Для EOS используйте с transactions (read-process-write pattern).


#Java #middle #Kafka #Consumer
👍5
Rebalancing: Range, RoundRobin, Cooperative Sticky

Rebalancing — процесс перераспределения партиций при changes в группе (join/leave, failures). Триггерится coordinator'ом: все members посылают JoinGroupRequest, coordinator выбирает leader (первый joiner), который вычисляет assignments via assignor.

Assignors (partition.assignor.class):
- Range: Дефолт до 2.4. Партиции сортируются, делятся по range (например, для 10 partitions, 3 consumers: 0-3,4-6,7-9). Skew если num_partitions не делится evenly.
- RoundRobin: Распределяет round-robin для fairness, минимизируя skew.
- Cooperative Sticky (default с 2.4): Эволюция Sticky (минимизирует перемещения партиций). Cooperative — incremental: вместо full revoke-assign, использует несколько раундов (Eager vs Cooperative protocol). В первом раунде revoke только conflicting partitions, затем assign. Снижает downtime: consumers продолжают process revoked-later.

В памяти coordinator'а: хранит previous assignments для sticky. Нюанс: custom assignor implement ConsumerPartitionAssignor; для large groups (>100) rebalance может занять секунды из-за sync.


Static membership


Static membership избегает rebalance при restarts: group.instance.id (уникальный static ID per instance). При join с тем же ID, coordinator распознает как restart, не триггеря rebalance (если assignments unchanged).

В памяти: coordinator тракает instances в GroupMetadata. Нюанс: полезно для stateful consumers (с local state); но если instance меняет host, rebalance все равно. Комбинируйте с cooperative для minimal disruption.


Pause/Resume и backpressure

Для контроля flow: consumer.pause(Collection<TopicPartition>) останавливает fetch для партиций, но poll() продолжает heartbeat. resume() возобновляет. Используйте для backpressure: если downstream slow, pause до обработки backlog.

В памяти: paused partitions в Set<TopicPartition> в Fetcher; fetch requests skip them. Нюанс: paused не влияет на rebalance; при длительном pause lag растет, рискуя eviction из группы если max.poll.interval.ms истекает.

Backpressure: мониторьте lag, dynamically pause если queue full. В Streams это built-in via task pausing.


Метрики: lag, rebalance-latency

Consumer экспортирует метрики via KafkaConsumer.metrics():
- consumer-lag: Records-lag-max — максимальный lag (LEO - committed offset) по партициям. Вычисляется via FetchRequest с metadata. Высокий lag указывает на slow processing; мониторьте per-partition.
- rebalance-latency-avg: Среднее время rebalance (от trigger до completion). Включает join, sync, assign. Высокое — из-за large groups или slow assignors.

Другие: poll-time, commit-latency. Нюанс: используйте ConsumerMetrics для JMX; в production alert на lag > threshold или frequent rebalances.


#Java #middle #Kafka #Consumer
👍5
Пример кода

Пример на Java с subscribe и RebalanceListener для handling revoke/assign:
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.TopicPartition;
import java.util.*;

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "my-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("enable.auto.commit", "false"); // Manual commit

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("topic"), new ConsumerRebalanceListener() {
@Override
public void onPartitionsRevoked(Collection<TopicPartition> partitions) {
// Commit offsets before losing partitions
commitOffsets(); // Custom method to commit processed offsets
}

@Override
public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
// Restore state or seek to offsets
/* warm-up: e.g., load local state for partitions */
}
});

try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
// Process records
consumer.commitAsync(); // Or commitSync for sync
}
} finally {
consumer.close();
}


В production: implement commitOffsets() с Map<TopicPartition, OffsetAndMetadata>; handle exceptions в listener.


Нюансы

- Избегание frequent rebalancing: Frequent rebalances (от scaling, GC, network) приводят к downtime (poll blocks во время). Static membership стабилизирует группу при restarts. CooperativeStickyAssignor минимизирует перемещения (до 80% меньше чем Range). Увеличьте session.timeout.ms до 300 сек для tolerance; heartbeat.interval.ms= session/3. Мониторьте rebalance-rate; если high — investigate app stability.

- max.poll.interval.ms и долгие операции: По умолчанию 5 мин — максимальное время между poll(). Если processing в poll() превышает (например, heavy computation), coordinator считает dead, триггеря rebalance. Решение: разбейте работу на chunks, poll() frequently; используйте pause() для long ops, но resume timely. Для очень долгих — offload в separate thread, но sync с poll(). Нюанс: в Streams это processing.guarantee=at_least_once handles.

- Обработка с сохранением ordering: Consumer гарантирует order только внутри партиции, но rebalance может нарушить если state не сохранен. В onPartitionsRevoked commit offsets и persist state (например, в external store). В onPartitionsAssigned seek(committed offset) и restore state. Для strict ordering: single-threaded per partition, или assign manually (без subscribe, используйте assign()). Нюанс: в groups с multiple consumers ordering cross-partition не гарантировано; для global order — single partition или external sorting.


#Java #middle #Kafka #Consumer
👍3🤯2
Тестирование в Spring
3. Модульные тесты через TDD в Spring. Тестирование Spring Security и Spring Cash.

Серия видео посвященная тестированию всего и вся в Spring.

Что мы рассмотрели:
🔵как написать тест контроллера через TDD
🔵как добавить в проект и протестить простую аутентификацию через Spring Security и использованием JWT.
🔵как протестить внешнее взаимодействие через FeignClient и WireMock
🔵как добавить в проект и протестить кэширование.

Ссылка на Youtube
Ссылка на Рутьюб

Ссылка на GitHub - жду ваших звезд ☺️

Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Что выведет код?

public class Task180825 {
static void method(Object x) {
System.out.println("Object");
}

static void method(String x) {
System.out.println("String");
}

static void method(Integer x) {
System.out.println("Integer");
}

public static void main(String[] args) {
method(null);
}
}


#Tasks
👍3
👍3
Карточка для запоминания while 😎

#memory_card
👍7
Что такое ConcurrentLinkedQueue? 🤓

Ответ:
ConcurrentLinkedQueue
— потокобезопасная очередь на основе связного списка, подходящая для многопоточных приложений.

Пример:
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
queue.offer("Task");
System.out.println(queue.poll()); // Task

Не блокирует потоки, в отличие от BlockingQueue.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🗓 История IT сегодня — 19 августа


ℹ️ Кто родился в этот день

Са́тья Нараяна Наде́лла (англ. Satya Narayana Nadella; телугу సత్యనారాయణ నాదెళ్ల; род. 19 августа 1967, Хайдарабад) — американский топ-менеджер индийского происхождения. Генеральный директор компании Microsoft. CEO Microsoft; развернул компанию на облака и ИИ, провёл сделки LinkedIn и GitHub.

Честер Гордон Белл (англ. Chester Gordon Bell; 19 августа 1934, Керксвилл, США — 17 мая 2024, Коронадо, США) — американский инженер-электрик, компьютерный инженер и менеджер. В 1960—1966 годах в Digital Equipment Corporation (DEC) разработал несколько мини-компьютеров PDP. В 1972—1983 годах был вице-президентом DEC, курируя разработку VAX. Дальнейшая карьера Гордона Белла — предприниматель, инвестор, вице-президент Национального научного фонда, а также почётный представитель Microsoft Research в 1995—2015 годах. В 1972 году сформулировал закон о классах компьютеров (англ. Bell's law of computer classes), в котором обосновал смену компьютерных систем.

Луис Фон Ан (исп. Luis von Ahn; род. 19 августа 1978, Гватемала, Гватемала) — создатель CAPTCHA/reCAPTCHA и со-основатель Duolingo; один из пионеров краудсорсинга.


🌐 Знаковые события

1960«Спутник-5» (Белка и Стрелка): запуск корабля с двумя собаками и бионабором; первый успешный полёт с возвращением живых существ с орбиты (посадка 20 августа).

1964Syncom 3: запуск первого геостационарного спутника связи; обеспечил прямые телетрансляции Олимпиады-1964 из Токио.

1976«Луна-24»: старт взлётной ступени с лунного грунта (≈170 г) к Земле; последний на сегодня успешный советский/российский образец возврата пробы с Луны.

2003Червь Sobig.F: один из самых быстрых почтовых червей; вспышка началась 19 августа и быстро перегрузила почтовые системы мира.

2004IPO Google: торги стартовали на NASDAQ по $85; день закрылся $100.34 (+18%). Формат — модифицированный «голландский аукцион».

2010 Intel покупает McAfee: объявлена сделка на $7.68 млрд (крупнейшая покупка Intel на тот момент) — ставка на интеграцию безопасности в «железо».


#Biography #Birth_Date #Events #19Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Основы ООП в Java

Глава 1. Классы и объекты


Конструкторы. Перегрузка. Ключевое слово this


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

Сигнатура конструктора:
Имя совпадает с именем класса.
Нет типа возвращаемого значения (даже void не пишется).
Может иметь параметры для передачи значений.


Если вы не определяете конструктор, Java создает пустой конструктор автоматически:
public Person() {
// Пусто, поля инициализируются значениями по умолчанию (null для объектов, 0 для чисел)
}


Пример простого конструктора:
public class Person {
private String name;
private int age;

// Конструктор с параметрами
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}

При создании объекта new Person("Алексей", 35) конструктор присваивает значения полям.



Ключевое слово this

this — это ссылка на текущий объект.


Оно используется внутри класса для:
Отличия полей класса от параметров методов (если имена совпадают).
Вызова других конструкторов или методов текущего объекта.


Пример использования this:
public class Person {
private String name;
private int age;

public Person(String name, int age) {
this.name = name; // this.name — поле класса, name — параметр
this.age = age;
}
}

Без this Java бы подумал, что name = name; — это присваивание параметра самому себе, что бесполезно.



Перегрузка конструкторов

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

Правила перегрузки:
Разные сигнатуры (количество, типы или порядок параметров).
Конструкторы могут вызывать друг друга с помощью this() для избежания дублирования кода.


Пример перегрузки:

public class Person {
private String name;
private int age;

// Конструктор по умолчанию (без параметров)
public Person() {
this.name = "Неизвестный";
this.age = 0;
}

// Конструктор с одним параметром
public Person(String name) {
this.name = name;
this.age = 0; // Возраст по умолчанию
}

// Конструктор с двумя параметрами
public Person(String name, int age) {
this.name = name;
this.age = age;
}

// Вызов другого конструктора с помощью this()
public Person(int age) {
this("Неизвестный", age); // Вызывает конструктор с двумя параметрами
}
}

Теперь объекты можно создавать по-разному:Person p1 = new Person(); // Неизвестный, 0
Person p2 = new Person("Алексей"); // Алексей, 0
Person p3 = new Person("Алексей", 35); // Алексей, 35
Person p4 = new Person(35); // Неизвестный, 35



Как создать это в IntelliJ IDEA

Добавьте конструкторы в класс:
Откройте класс Person.
Вставьте код с перегрузкой.
IntelliJ IDEA может генерировать конструкторы: Правой кнопкой → Generate → Constructor, выберите поля.



Тестируйте в Main:
Создайте класс Main и добавьте код для создания объектов.
Запустите: Правой кнопкой на
Main.java → Run.


Полезные советы для новичков

Избегайте дублирования:
Используйте this() для вызова одного конструктора из другого. Вызов должен быть первой строкой.
Параметры vs поля: Всегда используйте this при совпадении имен — это хорошая практика.
Конструктор без параметров: Полезен для создания объектов с значениями по умолчанию.
Ошибки: Если конструктор с параметрами есть, дефолтный не создается автоматически — добавьте его вручную, если нужен.
Практика: Перегружайте конструкторы, чтобы класс был гибким.



#Java #для_новичков #beginner #constructor
👍5🔥1
Что выведет код?

class A190825 {
static {
System.out.print("1");
}

{
System.out.print("2");
}

public A190825() {
System.out.print("3");
}
}

class B190825 extends A190825 {
static {
System.out.print("4");
}

{
System.out.print("5");
}

public B190825() {
System.out.print("6");
}
}

public class Task190825 {
public static void main(String[] args) {
new B190825();
System.out.print("7");
new B190825();
}
}


#Tasks
👍2
👍2