πŸ” Bouncy Castle β€” криптографичСская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Java с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² β€” ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π»ΡŒΠ½Ρ‹Ρ… схСм Π΄ΠΎ слоТных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ S/MIME ΠΈ OpenPGP.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ структуру с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° core, JCE-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ΠΈ спСциализированныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с сСртификатами X.509 ΠΈ TLS. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° совмСстима Π΄Π°ΠΆΠ΅ с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ вСрсиями Java, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ J2ME, Π° сборка Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ JDK 21.

πŸ€– GitHub

@javatg
βœ”οΈ Presto (prestoDB/presto)

Π­Ρ‚ΠΎ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ распрСдСлённый Π΄Π²ΠΈΠΆΠΎΠΊ SQL для Π°Π½Π°Π»ΠΈΠ·Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ характСристики:

РаспрСдСлённая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°

Бостоит ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° ΠΈ мноТСства Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ запросов, обСспСчивая Π½ΠΈΠ·ΠΊΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…
GitHub

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ANSI SQL ΠΈ UDF

ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандартного SQL с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (UDF), Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΠ² ΠΈ аналитичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠŸΠ»Π°Π³ΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Ρ‹
Из ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ доступны ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊ Hive (HDFS/S3), Cassandra, Kafka, MongoDB, MySQL, PostgreSQL, Elasticsearch ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмам хранСния. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнный ΠΏΠ»Π°Π³ΠΈΠ½
GitHub
.

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ
Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° счёт добавлСния Π²ΠΎΡ€ΠΊΠ΅Ρ€ΠΎΠ², автоматичСскоС пСрСраспрСдСлСниС Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΡƒΠ·Π»ΠΎΠ² ΠΈΠ· строя.

Удобство развёртывания
МоТно ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· исходников Ρ‡Π΅Ρ€Π΅Π· Maven (./mvnw clean install), Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Docker (ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π΅ΡΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΠ΅ docker/), ΠΈΠ»ΠΈ сразу ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° prestodb.io.

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ CLI (presto-cli), JDBC/ODBC‑драйвСры, REST API. Π›Ρ‘Π³ΠΊΠΎ встраиваСтся Π² BI‑инструмСнты ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘Ρ„Π΅Ρ€Ρ‹ примСнСния
Ad‑hoc‑аналитика, ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄Ρ‹, federated query (объСдинСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… источников), ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… для машинного обучСния.

https://github.com/prestodb/presto

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ§ͺ Π—Π°Ρ‡Π΅ΠΌ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² SQL?

ΠŸΡ€ΠΈΠ²Π΅Ρ‚! БСгодня ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Ρ‚Ρ€ΡŽΠΊ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ слоТныС запросы Π² PostgreSQL (ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ SQL-Π΄Π²ΠΈΠΆΠΊΠ΅) ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡ… Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Если Ρƒ тСбя Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ слоТная Π»ΠΎΠ³ΠΈΠΊΠ° Π² JOIN, CASE, ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… функциях ΠΈΠ»ΠΈ CTE β€” протСстируй это Π½Π° сторонС Π±Π°Π·Ρ‹, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

πŸ”Ή Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² PostgreSQL:

CREATE OR REPLACE FUNCTION test_discount(user_id INT)
RETURNS NUMERIC AS $$
BEGIN
RETURN (
SELECT
CASE
WHEN u.vip = true THEN 0.2
ELSE 0.05
END
FROM users u WHERE u.id = user_id
);
END;
$$ LANGUAGE plpgsql;


πŸ”Ή ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ прямо Π² Π±Π°Π·Π΅:

SELECT test_discount(101); -- Π²Π΅Ρ€Π½Ρ‘Ρ‚ 0.2 ΠΈΠ»ΠΈ 0.05


βœ… Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π°:
- Π’Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ Π±Π΅Π· запуска всСго прилоТСния;
- Π£ тСбя CI/CD запускаСт SQL-тСсты ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ (Ρ‡Π΅Ρ€Π΅Π· pgTAP, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€);
- Π’Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ быстро ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ запрос Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΌΠ»ΠΈΠ΄Ρƒ Π±Π΅Π· Java-контСкста.

πŸ’‘ Π›Π°ΠΉΡ„Ρ…Π°ΠΊ: Ссли Ρ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ Liquibase/Flyway β€” ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прямо Π² changelog'Π°Ρ… ΠΊΠ°ΠΊ test-only objects, Π½Π΅ влияя Π½Π° runtime-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ β€” экономит массу Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Ρ€Π΅Π²ΡŒΡŽ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ запросов!

@javatg
πŸ–₯ Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π°Π²Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Spring Boot-прилоТСния для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… микросСрвисов, раздСляя ΠΈΡ… Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ! Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ настройка Maven для управлСния зависимостями ΠΈ взаимодСйствиС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

πŸ”— Бсылка: *ΠΊΠ»ΠΈΠΊ*

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
⚑️ xManager β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ позиционируСтся ΠΊΠ°ΠΊ лСгковСсная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π³Π΄Π΅ Π½Π΅Ρ‚ Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹ ΠΈ Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€ΠΎΠ².

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ Π² Sketchware Pro для Android, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π² Android Studio-совмСстимый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. НСсмотря Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСхничСскиС ограничСния Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, xManager ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»: установку Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий, очистку кСша ΠΈ быстрый доступ ΠΊ настройкам.

БСйчас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ поддСрТиваСтся ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²ΠΎΠ»ΠΎΠ½Ρ‚Π΅Ρ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠΎΠ² Π½Π° 30+ языков. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ xManager ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСсплатСн, Π° вознаграТдСния Π·Π° Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ ΠΈΠ΄ΡƒΡ‚ лишь Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ инфраструктуры.

πŸ€– GitHub

@javatg
βš‘οΈΠ›Π΅Π³ΠΊΠΈΠΉ способ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ свСТиС обновлСния ΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Ρ€Π΅Π½Π΄Π°ΠΌΠΈ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° вашСм языкС. НаходитС свой стСк ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ:

Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
БобСсСдования DS: www.tg-me.com/machinelearning_interview
НСрйросСти www.tg-me.com/ai_machinelearning_big_data
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Π₯Π°ΠΊΠΈΠ½Π³: www.tg-me.com/linuxkalii
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/Java/com.javatg
Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: www.tg-me.com/sqlhub
Python собСсСдования: www.tg-me.com/python_job_interview
Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
ΠœΠΠ’Π•ΠœΠΠ’Π˜ΠšΠ: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€: https://www.tg-me.com/gamedev
Haskell: www.tg-me.com/haskell_tg
Π€ΠΈΠ·ΠΈΠΊΠ°: www.tg-me.com/fizmat

πŸ’Ό Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy

πŸ˜†Π˜Π’-ΠœΠ΅ΠΌΡ‹: www.tg-me.com/memes_prog
πŸ‡¬πŸ‡§ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno

πŸŽ“954Π“Π‘ ΠžΠŸΠ•ΠΠ‘ΠžΠ Π‘ ΠšΠ£Π Π‘ΠžΠ’: @courses
πŸ“•Π˜Ρ‚-ΠΊΠ½ΠΈΠ³ΠΈ бСсплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
πŸ–₯ БобСсСдованиС: АрхитСктура ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий с ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠΌ состояний

## УсловиС Π·Π°Π΄Π°Ρ‡ΠΈ:

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Java ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ систСму:

1. БистСма ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ событий (`EventStream`).
2. КаТдоС событиС (`Event`) ΠΈΠΌΠ΅Π΅Ρ‚ структуру:

class Event {
String entityId;
Instant timestamp;
String eventType;
Map<String, Object> payload;
}

3. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сущности (`Entity`), примСняя ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ события.
4. БистСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ°Ρ‚ состояния:
- ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ состояниС любой сущности Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ (`Instant timestamp`).
- ПослС ΠΎΡ‚ΠΊΠ°Ρ‚Π° систСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ события Π±Π΅Π· остановки ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования:

- ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий ΠΈ запросов Π½Π° ΠΎΡ‚ΠΊΠ°Ρ‚.
- Высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² событий Π² ΠΌΠΈΠ½ΡƒΡ‚Ρƒ.
- Быстрый ΠΎΡ‚ΠΊΠ°Ρ‚ состояния (target: **< 100 мс**).
- Волько стандартныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java (`java.util.concurrent`, java.time, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚.Π΄.).
- АрхитСктура Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ событий Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

## Бонус:

- РСализация ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° снимков (`snapshot`) состояний для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠ².
- АвтоматичСскоС созданиС snapshot'ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ N событий для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сущности.
- ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стратСгий ΠΎΡ‚ΠΊΠ°Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, быстрый ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΏΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠ΅ΠΌΡƒ snapshot + события, ΠΈΠ»ΠΈ чистая ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠ° всСх событий).

---

πŸ“Œ Π§Ρ‚ΠΎ оцСниваСтся:

АрхитСктура: ЧСткая дСкомпозиция слоёв, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ систСмы Π±Π΅Π· сущСствСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π Π°Π±ΠΎΡ‚Π° с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ: Гарантия бСзопасности доступа ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ структурам Π΄Π°Π½Π½Ρ‹Ρ… Π² условиях ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, эффСктивная Ρ€Π°Π±ΠΎΡ‚Π° с большими ΠΎΠ±ΡŠΡ‘ΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, оптимизация ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΠΈ использованию рСсурсов.

Чистота ΠΊΠΎΠ΄Π°: ΠŸΠΎΠ½ΡΡ‚Π½Ρ‹Π΅ ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ интСрфСйсы, чистая рСализация Π±Π΅Π· "грязных Ρ…Π°ΠΊΠ°", Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Ρ‚ΡŒ риски: Π£ΠΌΠ΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ³Ρ€ΠΎΠ·Ρ‹ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рост ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ событий ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ: Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС snapshot'ΠΎΠ² состояния, продуманная организация хранСния ΠΈ восстановлСния событий.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ: Π£ΠΌΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Π΅Π»Π° сСбя ΠΏΡ€ΠΈ сбоях, сСтСвых ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ высоких Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°Ρ….

---

# ΠŸΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ:

- ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π³ΠΎΠ½ΠΊΠΈ состояний: Ссли ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ событиС ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΎΡ‚ΠΊΠ°Ρ‚ β€” Ρ‡Ρ‚ΠΎ происходит?
- Рост памяти: Ссли Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС события, ΠΊΠ°ΠΊ Π½Π΅ "ΡƒΠ±ΠΈΡ‚ΡŒ" ΠΏΠ°ΠΌΡΡ‚ΡŒ?
- ΠŸΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π½Π½Ρ‹Π΅ таймстСмпы: Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли события приходят с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎ порядку?
- ОбновлСниС Ρ‚ΠΈΠΏΠΎΠ² событий: ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ eventType Π±Π΅Π· пСрСписывания всСй Π»ΠΎΠ³ΠΈΠΊΠΈ?
- ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Π΅: ΠΊΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ событий Π·Π° Π³ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹?

---

# РСкомСндация ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ:

- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ copy-on-write ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для состояний сущностСй.
- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… (`ConcurrentHashMap`, ConcurrentSkipListMap ΠΈ Ρ‚.Π΄.).
- Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ "Event Handler" ΠΈΠ»ΠΈ "Command Handler".
- Π’Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ snapshot'ΠΎΠ² ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ событий.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Π•ΡΡ‚ΡŒ Ρ„ΠΈΡ‡Π°. Π•ΡΡ‚ΡŒ Π΄Π΅Π΄Π»Π°ΠΉΠ½. Π•ΡΡ‚ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ тСсты Π½Π°Π΄ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒβ€¦ Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΡ‚ΡŠΠ΅Π΄Π°ΡŽΡ‚ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΡ‚Π°ΠΊ Π²ΠΏΡ€ΠΈΡ‚Ρ‹ΠΊ.

Один наш Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ€ сказал: Β«Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΊΠ°ΠΊ поставил Explyt Test β€” Π½Π°Ρ‡Π°Π» ΠΏΠΈΡΠ°Ρ‚ΡŒ мСньшС тСстов… Π½ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ стало Π»ΡƒΡ‡ΡˆΠ΅. Как это Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ?!Β»

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сами. Плагин сам ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ тСсты для вашСго ΠΊΠΎΠ΄Π° β€” прямо Π² IDE.
πŸ‘‰ explyt.ai β€” сэкономь сСбС ΠΏΠ°Ρ€Ρƒ часов ΡƒΠΆΠ΅ сСгодня.
β˜•οΈ TeaVM β€” компилятор Java Π² JavaScript ΠΈ WebAssembly. НСобычный инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ Java Π² ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ эффСктивный JavaScript-ΠΊΠΎΠ΄.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ GWT, TeaVM Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ исходников ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ прямо с .class-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, прСдлагая свою Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ с бэкСнда Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ пСрСписывания. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Web Workers.

πŸ€– GitHub

@java_tg
πŸ’‘ Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ! 🐧

πŸ“ Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ дирСкториями:

ls β€” просмотр содСрТимого ΠΏΠ°ΠΏΠΊΠΈ
cp β€” ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²/ΠΏΠ°ΠΏΠΎΠΊ
mv β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅
cd β€” ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ
mkdir β€” созданиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
rm β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²/ΠΏΠ°ΠΏΠΎΠΊ


πŸ“‚ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²:

cat β€” Π²Ρ‹Π²ΠΎΠ΄ содСрТимого Ρ„Π°ΠΉΠ»Π°
less β€” постраничный просмотр
head β€” ΠΏΠ΅Ρ€Π²Ρ‹Π΅ строки Ρ„Π°ΠΉΠ»Π°
tail β€” послСдниС строки
more β€” Π°Π½Π°Π»ΠΎΠ³ less
nano β€” простой тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€
vim β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅


πŸ” Бвойства Ρ„Π°ΠΉΠ»ΠΎΠ²:

file β€” Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°
touch β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ
chmod β€” ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π² доступа
chgrp β€” смСна Π³Ρ€ΡƒΠΏΠΏΡ‹
wc β€” подсчёт строк, слов, символов
du β€” ΠΎΠ±ΡŠΡ‘ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ дискового пространства


πŸ“ ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с тСкстом:

grep β€” поиск ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ
cut/paste β€” ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅/вставка ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ
tr β€” Π·Π°ΠΌΠ΅Π½Π° символов
sort β€” сортировка
tee β€” Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ» ΠΈ Π½Π° экран
expand β€” Π·Π°ΠΌΠ΅Π½Π° табуляции ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ


πŸ‘₯ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ:

useradd β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
usermod β€” ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
userdel β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
groupadd β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹
groupdel β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹
groupmod β€” ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹
chgrp β€” смСна Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ„Π°ΠΉΠ»Π°


πŸ–₯ ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ систСмой:

df β€” свободноС мСсто Π½Π° дисках
uname β€” информация ΠΎ систСмС
free β€” использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти
shutdown β€” Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°
lsof β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
rsync β€” синхронизация Π΄Π°Π½Π½Ρ‹Ρ…
ps β€” Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ процСссы


🌐 Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

dig/nslookup β€” DNS-запросы
ping β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° доступности
curl β€” запрос ΠΊ URL
scp β€” ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ SSH
ifconfig β€” настройки сСти
traceroute β€” ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ хоста


πŸ”₯ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈ сСбС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΈ дСлись с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ!

@javatg
Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…?
НС Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·ΠΊΠΈΡ… Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.
Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ индСксы, Π° Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² самой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π‘Π” – Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² масса!

На ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅ «Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ PostgreSQLΒ»
Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:
🎯как ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
🎯как воврСмя Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ диагностики

Π’Π΅Π±ΠΈΠ½Π°Ρ€ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Ρ‚ Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π—ΠΎΠ»ΠΎΡ‚ΠΎΠ², Kotlin-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π² «ЯндСксС».

ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ тСхничСских Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π°Π΄ΠΌΠΈΠ½ΠΎΠ² Π‘Π”, дСвопсов ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ВсС участники ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π² ΠΏΠΎΠ΄Π°Ρ€ΠΎΠΊ Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ Β«Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π² PostgreSQL: Π·Π°Ρ‰ΠΈΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом ΠΈ Π°ΡƒΠ΄ΠΈΡ‚Β» ΠΈ скидку 7% Π½Π° любой курс OTUS.

6 мая, 19:00 МБК
БСсплатно
Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ - https://otus.pw/RBkj/

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО "ОВУБ ΠžΠΠ›ΠΠ™Π-ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π•". ИНН 9705100963. erid: 2W5zFG5y1f6
πŸ§ͺ Pocket Science Lab β€” карманная лаборатория для экспСримСнтов. Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ΅ устройство с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ смартфон ΠΈΠ»ΠΈ ПК Π² ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΡŽ для физичСских ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… экспСримСнтов.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ: осциллограф, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ сигналов, Π»ΡŽΠΊΡΠΌΠ΅Ρ‚Ρ€, Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ давлСния ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сСрвоприводами для Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ Π²ΠΎΠ»Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½ ΠΈΠ»ΠΈ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π½Π° основС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ аксСлСромСтра.

πŸ€– GitHub

@javatg
πŸ¦‰ Apache ZooKeeper β€” координация распрСдСлСнных систСм Π±Π΅Π· лишнСй слоТности

Π’ эпоху Kubernetes ΠΈ сСрвис-мСшСй скромный ZooKeeper ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ инструмСнтом для управлСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ синхронизации распрСдСлСнных систСм. ПослСдниС вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (3.5.5+) ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ минималистичный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” чистыС Java-Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΈ, докумСнтация Π² Markdown ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ процСсс сборки Ρ‡Π΅Ρ€Π΅Π· Maven.

НСсмотря Π½Π° появлСниС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² Π²Ρ€ΠΎΠ΄Π΅ etcd, ZooKeeper ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Hadoop-экосистСмС ΠΈ ΠΊΠ°ΠΊ бэкСнд для Apache Kafka.

πŸ€– GitHub

@javatg
🧩 Π—Π°Π΄Π°Ρ‡Π° Β«Π’Ρ€ΠΈ ΡΡ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊΠ°Β» (с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ)
УсловиС


Π”Π°Π½ класс Counter с ΠΏΠΎΠ»Π΅ΠΌ int value ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ increment().

НуТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ счётчик Ρ€ΠΎΠ²Π½ΠΎ 1 000 000 Ρ€Π°Π·.

Π’ Ρ„ΠΈΠ½Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° вывСсти


Counter value = 3000000
НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ synchronized, ReentrantLock, Atomic*, LongAdder, VarHandle.


Допустимы Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅) ΠΈ любая коллСкция ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Java 19+.

Π’ΠΈΠΏ поля ΠΌΠ΅Π½ΡΡ‚ΡŒ нСльзя β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ int.

⚑️
Π’ Ρ‡Π΅ΠΌ здСсь ΠΏΠΎΠ΄Π²ΠΎΡ…?
ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ value++ Π½Π΅ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Π°: Β«ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ β†’ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ β†’ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΒ».
Π‘Π΅Π· ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² придётся Π½Π°ΠΉΡ‚ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ синхронизации.

πŸ’‘ РСшСниС Ρ‡Π΅Ρ€Π΅Π· message queue (Actor‑подход)
Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ BlockingQueue<Runnable>.

ПоднимаСм ΠΎΠ΄ΠΈΠ½ слуТСбный ΠΏΠΎΡ‚ΠΎΠΊ servo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ СдинствСнный обращаСтся ΠΊ Counter.value.

Π’Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠ»Π°Π΄ΡƒΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ лямбду counter::increment.

```java
import java.util.concurrent.*;

final class Counter {
int value;
void increment() { value++; }
}

public class ThreeCountersDemo {
public static void main(String[] args) throws InterruptedException {
Counter counter = new Counter();
BlockingQueue<Runnable> q = new LinkedBlockingQueue<>();

// 1️⃣ БСрвисный ΠΏΠΎΡ‚ΠΎΠΊ: измСняСт value
Thread servo = Thread.startVirtualThread(() -> {
try { while (true) q.take().run(); }
catch (InterruptedException ignored) {}
});

// 2️⃣ Π’Ρ€ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ° β€” ΠΏΠΎ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρƒ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ²
Runnable worker = () -> {
for (int i = 0; i < 1_000_000; i++)
q.add(counter::increment);
};

Thread.ofVirtual().start(worker);
Thread.ofVirtual().start(worker);
Thread.ofVirtual().start(worker);

// 3️⃣ Π–Π΄Ρ‘ΠΌ ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ΅Π½ΠΈΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сСрвис
while (!q.isEmpty()) Thread.sleep(10);
servo.interrupt();
servo.join();

System.out.println("Counter value = " + counter.value);
}
}```

βœ… ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚
- Value ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΊ servo.

- ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ java.util.concurrent Π½Π΅ Π±Ρ‹Π»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.

- ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π»Ρ‘Π³ΠΊΠΈΠ΅ (~2 ΠšΠ‘ стСк), ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.



@javatg
True Tech Day 2025 β€” Ρ„Π΅ΡΡ‚ΠΈΠ²Π°Π»ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для ИВ-спСциалистов

6 июня Π² МосквС собСрутся экспСрты ΠΈΠ· Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… ИВ-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ кСйсы внСдрСния ИИ Π² Π±ΠΈΠ³Ρ‚Π΅Ρ…Π°Ρ… ΠΈ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

β€” 40+ спикСров ΠΈ 4 Ρ‚Ρ€Π΅ΠΊΠ° Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΎΠ± AI&ML, Π½Π°ΡƒΠΊΠ΅, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… тСхнологиях ΠΈ бэкСнд-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅;
β€” большой Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎ трансформации профСссий ΠΈ ИИ-Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΈ;
β€” взгляд Π½Π° ИИ со стороны Π½Π°ΡƒΠΊΠΈ ΠΈ бизнСса: Ρ‚Ρ€Π΅Π½Π΄Ρ‹ 2025 Π³ΠΎΠ΄Π°;
β€” ΠΎΠΏΡ‹Ρ‚ примСнСния ИИ ΠΎΡ‚ Π·Π°Ρ€ΡƒΠ±Π΅ΠΆΠ½Ρ‹Ρ… ИВ-экспСртов;
β€” Π½Π΅Ρ‚Π²ΠΎΡ€ΠΊΠΈΠ½Π³ ΠΈ мастСр-классы.

Участвуй ΠΎΡ‡Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½, обмСнивайся ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΈ знакомься с Π²Π΅Π΄ΡƒΡ‰ΠΈΠΌΠΈ спСциалистами со всСй страны.

Π–Π΄Π΅ΠΌ тСбя ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ 6 июня Π² МВБ Live Π₯ΠΎΠ»Π».
УчастиС бСсплатноС, Π½ΠΎ ΠΎΡ„Π»Π°ΠΉΠ½-мСста ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. Π Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎ ссылкС.
⚑️ Ktorm β€” минималистичный ORM для Kotlin-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…: вмСсто слоТных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΈ ΠΌΠ°Π³ΠΈΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ здСсь чистый Kotlin-ΠΊΠΎΠ΄ с Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ SQL DSL.

ΠŸΡ€ΠΈ этом Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π½Π΅ абстрагируСтся ΠΎΡ‚ SQL, Π° Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ Π΅Π³ΠΎ дополняСт: Π²Ρ‹ всСгда Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Π½ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π΅Π³ΠΎ Π½Π° понятном Kotlin. ВстроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠΈ, Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΉ ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π΄Π΅Π»Π°Π΅Ρ‚ Ktorm Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊ использованию Π² production.

πŸ€– GitHub

@javatg
πŸ‘©β€πŸ’» Redwood β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов Π½Π° Android, iOS ΠΈ Π² Π²Π΅Π±-прилоТСниях с использованиСм Kotlin ΠΈ Jetpack Compose!

🌟 Основная Ρ†Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… интСрфСйсов, обСспСчивая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ UI ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΎΠ±Ρ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

🌟 Redwood ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ систСму Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (composables), Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ UI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊ особСнностям ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ†Π΅Π»Π΅Π½ΠΎ Π½Π° ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ продуктивности ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ интСрфСйсов Π±Π΅Π· нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

πŸ” ЛицСнзия: Apache-2.0

πŸ–₯ Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
β˜• Вопрос с собСсСдования: БтатичСский Π±Π»ΠΎΠΊ ΠΈ порядок ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

πŸ” УсловиС:

Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?


public class InitializationPuzzle {
static {
System.out.println("Static block 1");
}

public static void main(String[] args) {
Child.doSomething();
}
}

class Parent {
static {
System.out.println("Parent static block");
}
}

class Child extends Parent {
static {
System.out.println("Child static block");
}

static void doSomething() {
System.out.println("Child method");
}
}


❓ Вопрос:
Какой Π±ΡƒΠ΄Π΅Ρ‚ порядок Π²Ρ‹Π²ΠΎΠ΄Π°? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²?


πŸ” Π Π°Π·Π±ΠΎΡ€:

βœ… Π§Ρ‚ΠΎ происходит ΠΏΠΎ шагам:

1️⃣ ΠŸΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сначала загруТаСтся класс `InitializationPuzzle`. Π•Π³ΠΎ статичСский Π±Π»ΠΎΠΊ выполняСтся сразу:


Static block 1


2️⃣ Π”Π°Π»Π΅Π΅ вызываСтся Child.doSomething(). Π’Π΅ΠΏΠ΅Ρ€ΡŒ происходит инициализация класса `Child`. Π’ Java ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° сначала загруТаСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, Ссли ΠΎΠ½ Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½.

- Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Parent:

Parent static block


- Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Child:

Child static block


3️⃣ НаконСц выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ doSomething():

Child method


---

βœ… ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:


Static block 1
Parent static block
Child static block
Child method


πŸ’₯ ΠŸΠΎΠ΄Π²ΠΎΡ…:

β€’ МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π· doSomething() просто статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½.
β€’ Однако Java Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ любого статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½.
β€’ Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса наслСдника сначала Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ статичСскиС Π±Π»ΠΎΠΊΠΈ родитСля.

πŸ›‘οΈ Π›Π°ΠΉΡ„Ρ…Π°ΠΊ:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс Π½Π΅ инициализируСтся ΠΏΡ€ΠΈ доступС ΠΊ статичСским полям/ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ константы (static final), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ класса.

βœ… Π’Ρ‹Π²ΠΎΠ΄:

β€’ Java строго ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ классы Π² порядкС наслСдования ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π»ΡŽΠ±Ρ‹Ρ… статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
β€’ Π”Π°ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ «бСзопасного» статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° затянСт Π·Π° собой Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ родитСля.
β€’ Π’Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° класслоадСров ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов Π² JVM.

πŸ’‘ Бонус-вопрос:
Π§Ρ‚ΠΎ измСнится, Ссли Π²Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ doSomething() Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ static final поля Π² Child? Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Parent?

@javatg
2025/05/12 07:14:10
Back to Top
HTML Embed Code: