Влади́мир Андре́евич Ме́льников (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
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
👍6
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
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:
В 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
Пример на 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
А вы играете в компьютерные игры? 🆘
Anonymous Poll
31%
Да, конечно! Постоянно! Что за вопросы? 🧑💻
29%
Иногда, но регулярно. Я геймер ☺️
14%
Отношусь к ним индифферентно. Ведь я знаю, что значит слово "индифферентно" 💃
14%
Стараюсь их избегать. Мешают жить и работать 😔
11%
Отношусь к ним отрицательно. Убивают слишком много времени, а его и так мало 👎
👍2
Тестирование в Spring
3. Модульные тесты через TDD в Spring. Тестирование Spring Security и Spring Cash.
Серия видео посвященная тестированию всего и вся в Spring.
Что мы рассмотрели:
🔵 как написать тест контроллера через TDD
🔵 как добавить в проект и протестить простую аутентификацию через Spring Security и использованием JWT.
🔵 как протестить внешнее взаимодействие через FeignClient и WireMock
🔵 как добавить в проект и протестить кэширование.
Ссылка на Youtube
Ссылка на Рутьюб
Ссылка на GitHub - жду ваших звезд☺️
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
3. Модульные тесты через TDD в Spring. Тестирование Spring Security и Spring Cash.
Серия видео посвященная тестированию всего и вся в Spring.
Что мы рассмотрели:
Ссылка на Youtube
Ссылка на Рутьюб
Ссылка на GitHub - жду ваших звезд
Смотрите, ставьте лайки, подписывайтесь на каналы!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Что выведет код?
#Tasks
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
Что такое ConcurrentLinkedQueue? 🤓
Ответ:
ConcurrentLinkedQueue — потокобезопасная очередь на основе связного списка, подходящая для многопоточных приложений.
Пример:
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
queue.offer("Task");
System.out.println(queue.poll()); // Task
Не блокирует потоки, в отличие от BlockingQueue.
#собеседование
Ответ:
Пример:
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
👍5
Са́тья Нараяна Наде́лла (англ. 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 августа).
1964 — Syncom 3: запуск первого геостационарного спутника связи; обеспечил прямые телетрансляции Олимпиады-1964 из Токио.
1976 — «Луна-24»: старт взлётной ступени с лунного грунта (≈170 г) к Земле; последний на сегодня успешный советский/российский образец возврата пробы с Луны.
2003 — Червь Sobig.F: один из самых быстрых почтовых червей; вспышка началась 19 августа и быстро перегрузила почтовые системы мира.
2004 — IPO 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 создает пустой конструктор автоматически:
Пример простого конструктора:
Ключевое слово this
this — это ссылка на текущий объект.
Оно используется внутри класса для:
Отличия полей класса от параметров методов (если имена совпадают).
Вызова других конструкторов или методов текущего объекта.
Пример использования this:
Перегрузка конструкторов
Перегрузка — это создание нескольких методов с одним именем, но разными параметрами. Для конструкторов это позволяет создавать объекты разными способами.
Правила перегрузки:
Разные сигнатуры (количество, типы или порядок параметров).
Конструкторы могут вызывать друг друга с помощью this() для избежания дублирования кода.
Пример перегрузки:
Как создать это в IntelliJ IDEA
Добавьте конструкторы в класс:
Откройте класс Person.
Вставьте код с перегрузкой.
IntelliJ IDEA может генерировать конструкторы: Правой кнопкой → Generate → Constructor, выберите поля.
Тестируйте в Main:
Создайте класс Main и добавьте код для создания объектов.
Запустите: Правой кнопкой на Main.java → Run.
Полезные советы для новичков
Избегайте дублирования: Используйте this() для вызова одного конструктора из другого. Вызов должен быть первой строкой.
Параметры vs поля: Всегда используйте this при совпадении имен — это хорошая практика.
Конструктор без параметров: Полезен для создания объектов с значениями по умолчанию.
Ошибки: Если конструктор с параметрами есть, дефолтный не создается автоматически — добавьте его вручную, если нужен.
Практика: Перегружайте конструкторы, чтобы класс был гибким.
#Java #для_новичков #beginner #constructor
Глава 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
Как Вы считаете - платить ментору 2500 руб/час, это много?
Anonymous Poll
32%
Нет, это нормально! Хороший ментор и больше берет🧑💻
11%
Видимо это нормальный ментор, но я к такому не пойду🤷♀️
21%
Мне пофиг, я у менторов ничего не покупаю 🏝
14%
Это многовато, можно и дешевле найти 🙂
21%
Да он охренел?! Такие бабки, когда можно учиться самому и бесплатно?! 😈
👍1
Что выведет код?
#Tasks
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
Варианты ответа:
Anonymous Quiz
29%
"123456712356"
41%
"14235672356"
12%
"1423567142356"
18%
"12345672356"
👍4
Что такое Files.walk() в Java? 🤓
Ответ:
Метод Files.walk() (Java 8) рекурсивно обходит дерево файлов, возвращая поток Path.
Пример:
Files.walk(Paths.get("."))
.filter(p -> p.toString().endsWith(".java"))
.forEach(System.out::println);
Удобен для поиска файлов или обработки директорий.
#собеседование
Ответ:
Пример:
Files.walk(Paths.get("."))
.filter(p -> p.toString().endsWith(".java"))
.forEach(System.out::println);
Удобен для поиска файлов или обработки директорий.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Том Демарко (также ДеМарко, род. 20 августа 1940 года, Хейзлтон, штат Пенсильвания, США) — классик инженерии ПО; «Peopleware», структурный анализ, влияние на практику менеджмента проектов.
Мартин Догиамас (Martin Dougiamas 1969) — основатель Moodle, одной из самых распространённых LMS в мире.
Эрик Голес Чакк (Антофагаста, 21 августа 1951) — учёный в области дискретной математики и клеточных автоматов, лауреат премий за вклад в информатику Чили.
1912 — Томас Эдисон патентует электробатарею.
1956 — Начала действовать ядерная электростанция «Колдер Холл», первая ядерная электростанция Британии.
1964 — Основан Интелсат — компания, владеющая группировкой телекоммуникационных спутников.
1975 — запуск американской межпланетной станции Viking 1 к Марсу.
2024 — прекращена работа мессенджера «Агент Mail.ru» (пользователям предложено перейти на VK).
#Biography #Birth_Date #Events #20Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Apache Kafka
Схемы, сериализация и эволюция контрактов
В экосистеме Apache Kafka сериализация (преобразование данных в байтовый формат для передачи) и десериализация (обратное преобразование) сообщений играют ключевую роль в обеспечении совместимости данных между отправителями (продюсерами), получателями (потребителями) и хранилищем. Без правильного управления схемами (структурами данных) изменения в приложениях могут привести к ошибкам, потере информации или необходимости полной перестройки систем.
Форматы: Avro, Protobuf, JSON-Schema
Форматы схем определяют структуру сообщений, обеспечивая проверку типов, валидацию и компактность. Они позволяют восстанавливать данные без предварительного знания схемы (чтение по схеме), что важно для эволюции систем.
- Avro: Бинарный формат от Apache, ориентированный на экосистему Hadoop. Схема описывается в формате, похожем на JSON, и определяет записи с полями (простые типы, сложные: массивы, карты, объединения). Avro поддерживает эволюцию: добавление необязательных полей с значениями по умолчанию, удаление с defaults. В памяти сериализатора схема разбирается в общую запись (GenericRecord) или конкретную (SpecificRecord с генерированным кодом), где данные хранятся как древовидная структура (например, карта строк на объекты). Сериализация — рекурсивный обход, кодирование в буфер байтов с переменной длиной для эффективности. Затраты: схема может не включаться полностью, в Kafka обычно используется идентификатор схемы вместо полной версии. Преимущества: быстро (быстрее JSON), компактно, встроенная поддержка эволюции.
- Protobuf (Protocol Buffers): Бинарный формат от Google, с файлами .proto (сообщения с полями: обязательными, необязательными, повторяющимися). Поддерживает эволюцию: добавление полей с новыми номерами тегов (совместимо назад), но удаление или изменение типов рискованно. В памяти: Protobuf использует сгенерированные классы (через компилятор protoc), где сообщение — неизменяемый объект с методами доступа; сериализация в поток с переменными числами и длинами. Нет встроенных значений по умолчанию для новых полей (неизвестные поля игнорируются). Затраты: очень компактно (компактнее Avro за счёт тегов), быстрое разбор. Нюанс: в Kafka требуется внешний реестр для версионности, поскольку формат передачи не включает схему.
- JSON-Schema: Стандарт для описания структур JSON (версия draft-07 и выше). Не бинарный, но подходит для JSON-данных. Схема — объект JSON с свойствами, обязательными полями и типами. Эволюция: добавление свойств (если не обязательные), но JSON раздувается. В памяти: десериализация в карту или объект через библиотеки (например, Jackson с JsonSchema). Затраты: slowest и largest payloads, но читаемо человеком. Используйте для прототипов; в производстве предпочитайте бинарные для высокой пропускной способности.
Компромиссы: Avro и Protobuf для реальных систем (компактные, быстрые), JSON-Schema для простоты. В памяти все форматы используют временные буферы (буферы байтов в Java) для кодирования и декодирования; нагрузка на сборку мусора выше для сложных схем (много объектов).
#Java #middle #Kafka #Kafka_serializers #Kafka_deserializers
Схемы, сериализация и эволюция контрактов
В экосистеме Apache Kafka сериализация (преобразование данных в байтовый формат для передачи) и десериализация (обратное преобразование) сообщений играют ключевую роль в обеспечении совместимости данных между отправителями (продюсерами), получателями (потребителями) и хранилищем. Без правильного управления схемами (структурами данных) изменения в приложениях могут привести к ошибкам, потере информации или необходимости полной перестройки систем.
Форматы: Avro, Protobuf, JSON-Schema
Форматы схем определяют структуру сообщений, обеспечивая проверку типов, валидацию и компактность. Они позволяют восстанавливать данные без предварительного знания схемы (чтение по схеме), что важно для эволюции систем.
- Avro: Бинарный формат от Apache, ориентированный на экосистему Hadoop. Схема описывается в формате, похожем на JSON, и определяет записи с полями (простые типы, сложные: массивы, карты, объединения). Avro поддерживает эволюцию: добавление необязательных полей с значениями по умолчанию, удаление с defaults. В памяти сериализатора схема разбирается в общую запись (GenericRecord) или конкретную (SpecificRecord с генерированным кодом), где данные хранятся как древовидная структура (например, карта строк на объекты). Сериализация — рекурсивный обход, кодирование в буфер байтов с переменной длиной для эффективности. Затраты: схема может не включаться полностью, в Kafka обычно используется идентификатор схемы вместо полной версии. Преимущества: быстро (быстрее JSON), компактно, встроенная поддержка эволюции.
- Protobuf (Protocol Buffers): Бинарный формат от Google, с файлами .proto (сообщения с полями: обязательными, необязательными, повторяющимися). Поддерживает эволюцию: добавление полей с новыми номерами тегов (совместимо назад), но удаление или изменение типов рискованно. В памяти: Protobuf использует сгенерированные классы (через компилятор protoc), где сообщение — неизменяемый объект с методами доступа; сериализация в поток с переменными числами и длинами. Нет встроенных значений по умолчанию для новых полей (неизвестные поля игнорируются). Затраты: очень компактно (компактнее Avro за счёт тегов), быстрое разбор. Нюанс: в Kafka требуется внешний реестр для версионности, поскольку формат передачи не включает схему.
- JSON-Schema: Стандарт для описания структур JSON (версия draft-07 и выше). Не бинарный, но подходит для JSON-данных. Схема — объект JSON с свойствами, обязательными полями и типами. Эволюция: добавление свойств (если не обязательные), но JSON раздувается. В памяти: десериализация в карту или объект через библиотеки (например, Jackson с JsonSchema). Затраты: slowest и largest payloads, но читаемо человеком. Используйте для прототипов; в производстве предпочитайте бинарные для высокой пропускной способности.
Компромиссы: Avro и Protobuf для реальных систем (компактные, быстрые), JSON-Schema для простоты. В памяти все форматы используют временные буферы (буферы байтов в Java) для кодирования и декодирования; нагрузка на сборку мусора выше для сложных схем (много объектов).
#Java #middle #Kafka #Kafka_serializers #Kafka_deserializers
👍3