Java for Beginner
Вновь создаем встречу, обсуждаем Java, заходите, поговорим.
Всем спасибо кто пришел🫡
Классно поговорили и обменялись мнениями👍
Думаю надо повторить🤝
Классно поговорили и обменялись мнениями👍
Думаю надо повторить🤝
👍6
Ло́уренс Джо́зеф «Ла́рри» Э́ллисон (англ. 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
Ты написал код. Код ушёл в прод.
Через час — у компании минус 10 миллионов рублей из-за сбоя в платёжке.
Тебя вызывает тимлид. Потом HR. Потом юрист.
А в голове вертится одна мысль: если я сяду, где я возьму столько денег?
В России у программиста есть три юридических ловушки:
Гражданский кодекс РФ
ст. 1064 ГК РФ — "Общая ответственность за причинение вреда".
ст. 15 ГК РФ — "Компенсация убытков".
Если из-за твоего кода компания реально потеряла деньги, теоретически она может взыскать ущерб.
Трудовой кодекс РФ
ст. 232–233, 238 ТК РФ — обязанность работника, как стороны трудового договора, нести материальную ответственность, но только в пределах своего заработка, если иное не доказано.
Уголовный кодекс РФ (крайне редкий, но встречающийся кейс)
ст. 272 УК РФ — неправомерный доступ к компьютерной информации.
ст. 273 УК РФ — создание и распространение вредоносных программ.
В трудовом праве РФ "виновность" это наличие твоих неправомерных действий (или бездействия) и наличие причинно-следственной связи с ущербом. Виновность полностью может установить только суд/специальная комиссия/уполномоченные лица.
При любом раскладе все решения можно обжаловать в вышестоящем суде.
Важно: по ст. 241 ТК РФ твой максимум ответственности это средняя месячная зарплата.
А вот полную сумму ущерба взыщут только в спецслучаях (ст. 243 ТК РФ):
- умышленный вред,
- кража,
- разглашение тайны,
- алкоголь/наркотики,
- договор о полной мат. ответственности,
- причинение ущерба не при исполнении работником трудовых обязанностей.
Пример: ты по невнимательности, пьяный, уронил серверный блок, отчего удалилась продовая БД. Твой напарник, по инструкции обязан был делать бэкап — и не сделал. Полный ущерб причиненный компании выплатите пополам
Пример: тебя попросили срочно вкатить фиксы без тестов, всё упало, компания потеряла клиентов. Тут вина на организации процесса, а не на тебе.
Документируйте всё
Ведите переписку с руководством и коллегами через корпоративные каналы (почта, мессенджеры) по рискованным задачам и условиям, которые могут привести к ущербу.
Следуйте инструкциям и правилам
Изучите и всегда следуйте внутренним правилам компании (политикам, регламентам, инструкциям). Не выполняйте задачи, которые не входят в вашу должностную инструкцию, без письменного распоряжения.
Проверяйте условия работы
Внимательно изучите свой трудовой договор. Проверяйте рабочее оборудование, если вам его предоставили.
Соблюдайте стандарты разработки
Регулярно проводите тестирование и ревью кода, ведите подробную документацию по проекту, если этого нет.
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
Влади́мир Андре́евич Ме́льников (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
👍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
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
33%
Да, конечно! Постоянно! Что за вопросы? 🧑💻
30%
Иногда, но регулярно. Я геймер ☺️
15%
Отношусь к ним индифферентно. Ведь я знаю, что значит слово "индифферентно" 💃
12%
Стараюсь их избегать. Мешают жить и работать 😔
9%
Отношусь к ним отрицательно. Убивают слишком много времени, а его и так мало 👎
👍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
👍4
Са́тья Нараяна Наде́лла (англ. 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
30%
Нет, это нормально! Хороший ментор и больше берет🧑💻
9%
Видимо это нормальный ментор, но я к такому не пойду🤷♀️
26%
Мне пофиг, я у менторов ничего не покупаю 🏝
13%
Это многовато, можно и дешевле найти 🙂
22%
Да он охренел?! Такие бабки, когда можно учиться самому и бесплатно?! 😈
👍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
22%
"123456712356"
44%
"14235672356"
11%
"1423567142356"
22%
"12345672356"
👍2