π Bouncy Castle β ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Java Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΏΠ΅ΠΊΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² β ΠΎΡ Π±Π°Π·ΠΎΠ²ΡΡ
ΡΠΈΡΡΠΎΠ²Π°Π»ΡΠ½ΡΡ
ΡΡ
Π΅ΠΌ Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² Π²ΡΠΎΠ΄Π΅ S/MIME ΠΈ OpenPGP.
ΠΡΠΎΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° core, JCE-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ X.509 ΠΈ TLS. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Π΄Π°ΠΆΠ΅ Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Java, Π²ΠΊΠ»ΡΡΠ°Ρ J2ME, Π° ΡΠ±ΠΎΡΠΊΠ° ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ JDK 21.
π€ GitHub
@javatg
ΠΡΠΎΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π½Π° core, JCE-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ X.509 ΠΈ TLS. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Π΄Π°ΠΆΠ΅ Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Java, Π²ΠΊΠ»ΡΡΠ°Ρ J2ME, Π° ΡΠ±ΠΎΡΠΊΠ° ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ JDK 21.
π€ GitHub
@javatg
ΠΡΠΎ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ 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-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ Ρ ΡΠ΅Π±Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠ»ΠΎΠΆΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π²
πΉ Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π² PostgreSQL:
πΉ ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎ Π² Π±Π°Π·Π΅:
β ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π°:
- Π’Ρ Ρ ΠΎΡΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΠΊΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ Π±Π΅Π· Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ;
- Π£ ΡΠ΅Π±Ρ CI/CD Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ SQL-ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ (ΡΠ΅ΡΠ΅Π·
- Π’Ρ Ρ ΠΎΡΠ΅ΡΡ Π±ΡΡΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π·Π°ΠΏΡΠΎΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΡ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ»ΠΈΠ΄Ρ Π±Π΅Π· Java-ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
π‘ ΠΠ°ΠΉΡΡ Π°ΠΊ: Π΅ΡΠ»ΠΈ ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡ Liquibase/Flyway β ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΡΠΌΠΎ Π² changelog'Π°Ρ ΠΊΠ°ΠΊ test-only objects, Π½Π΅ Π²Π»ΠΈΡΡ Π½Π° runtime-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ β ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΌΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ΅Π²ΡΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ²!
@javatg
ΠΡΠΈΠ²Π΅Ρ! Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΡΡΡΠΊ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΏΠΈΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π² 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
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
β‘οΈ xManager β ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π³Π΄Π΅ Π½Π΅Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΡ ΠΈ ΡΡΠ΅ΠΊΠ΅ΡΠΎΠ².
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΎΡΡ Π² Sketchware Pro Π΄Π»Ρ Android, Π° Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ Π² Android Studio-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, xManager ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»: ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ, ΠΎΡΠΈΡΡΠΊΡ ΠΊΠ΅ΡΠ° ΠΈ Π±ΡΡΡΡΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ.
Π‘Π΅ΠΉΡΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π²ΠΎΠ»ΠΎΠ½ΡΠ΅ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠΎΠ² Π½Π° 30+ ΡΠ·ΡΠΊΠΎΠ². Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°ΡΡ, ΡΡΠΎ xManager ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½, Π° Π²ΠΎΠ·Π½Π°Π³ΡΠ°ΠΆΠ΄Π΅Π½ΠΈΡ Π·Π° ΡΠ΅ΠΊΠ»Π°ΠΌΡ ΠΈΠ΄ΡΡ Π»ΠΈΡΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
π€ GitHub
@javatg
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΎΡΡ Π² 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
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 β ΡΡΠΊΠΎΠ½ΠΎΠΌΡ ΡΠ΅Π±Π΅ ΠΏΠ°ΡΡ ΡΠ°ΡΠΎΠ² ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΠΠ΄ΠΈΠ½ Π½Π°Ρ Π·Π½Π°ΠΊΠΎΠΌΡΠΉ Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅Ρ ΡΠΊΠ°Π·Π°Π»: Β«Π‘ ΡΠ΅Ρ ΠΏΠΎΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ°Π²ΠΈΠ» Explyt Test β Π½Π°ΡΠ°Π» ΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ²β¦ Π½ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΡΡΠ°Π»ΠΎ Π»ΡΡΡΠ΅. ΠΠ°ΠΊ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ?!Β»
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°ΠΌΠΈ. ΠΠ»Π°Π³ΠΈΠ½ ΡΠ°ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° β ΠΏΡΡΠΌΠΎ Π² IDE.
π explyt.ai β ΡΡΠΊΠΎΠ½ΠΎΠΌΡ ΡΠ΅Π±Π΅ ΠΏΠ°ΡΡ ΡΠ°ΡΠΎΠ² ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
βοΈ TeaVM β ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Java Π² JavaScript ΠΈ WebAssembly. ΠΠ΅ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Java Π² ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ JavaScript-ΠΊΠΎΠ΄.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ GWT, TeaVM Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΡΠΌΠΎ Ρ .class-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ Ρ Π±ΡΠΊΠ΅Π½Π΄Π° Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π°ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· Web Workers.
π€ GitHub
@java_tg
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ GWT, TeaVM Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΡΠΌΠΎ Ρ .class-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ Ρ Π±ΡΠΊΠ΅Π½Π΄Π° Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π°ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· Web Workers.
π€ GitHub
@java_tg
π‘ ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Linux, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ! π§
π Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ:
π ΠΡΠΎΡΠΌΠΎΡΡ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²:
π Π‘Π²ΠΎΠΉΡΡΠ²Π° ΡΠ°ΠΉΠ»ΠΎΠ²:
π ΠΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ:
π₯ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ:
π₯ ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ:
π Π‘Π΅ΡΠ΅Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
π₯ Π‘ΠΎΡ ΡΠ°Π½ΠΈ ΡΠ΅Π±Π΅, ΡΡΠΎΠ±Ρ Π½Π΅ Π·Π°Π±ΡΡΡ ΠΈ Π΄Π΅Π»ΠΈΡΡ Ρ Π΄ΡΡΠ·ΡΡΠΌΠΈ!
@javatg
π Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ:
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
ΠΠ΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ΅Π·ΠΊΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡ ΡΠ΄ΡΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
Π‘Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΠΎ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΡ, Π° Π±ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π² ΡΠ°ΠΌΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΠΠ β Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠ°!
ΠΠ° ΠΎΡΠΊΡΡΡΠΎΠΌ Π²Π΅Π±ΠΈΠ½Π°ΡΠ΅ Β«ΠΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΠ²ΡΡΠΈΡΡ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ PostgreSQLΒ»
Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅:
π―ΠΊΠ°ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
π―ΠΊΠ°ΠΊ Π²ΠΎΠ²ΡΠ΅ΠΌΡ Π²ΡΡΠ²ΠΈΡΡ Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ
ΠΠ΅Π±ΠΈΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅Π΄ΡΡ ΠΠΌΠΈΡΡΠΈΠΉ ΠΠΎΠ»ΠΎΡΠΎΠ², Kotlin-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² Β«Π―Π½Π΄Π΅ΠΊΡΠ΅Β».
ΠΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, Π°Π΄ΠΌΠΈΠ½ΠΎΠ² ΠΠ, Π΄Π΅Π²ΠΎΠΏΡΠΎΠ² ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
ΠΡΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°Ρ Π² ΠΏΠΎΠ΄Π°ΡΠΎΠΊ Π²ΠΈΠ΄Π΅ΠΎΡΡΠΎΠΊ Β«ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π² PostgreSQL: Π·Π°ΡΠΈΡΠ° Π΄Π°Π½Π½ΡΡ , ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΈ Π°ΡΠ΄ΠΈΡΒ» ΠΈ ΡΠΊΠΈΠ΄ΠΊΡ 7% Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΊΡΡΡ OTUS.
6 ΠΌΠ°Ρ, 19:00 ΠΠ‘Π
ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎ
ΠΠ°ΠΏΠΈΡΠ°ΡΡΡΡ - https://otus.pw/RBkj/
Π Π΅ΠΊΠ»Π°ΠΌΠ°. ΠΠΠ "ΠΠ’Π£Π‘ ΠΠΠΠΠΠ-ΠΠΠ ΠΠΠΠΠΠΠΠ". ΠΠΠ 9705100963. erid: 2W5zFG5y1f6
π§ͺ Pocket Science Lab β ΠΊΠ°ΡΠΌΠ°Π½Π½Π°Ρ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡ Π΄Π»Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΠ΅Π΅ ΡΠΌΠ°ΡΡΡΠΎΠ½ ΠΈΠ»ΠΈ ΠΠ Π² ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠΈΡ Π΄Π»Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΡΡ
ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠΎΠ΅ΠΊΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ: ΠΎΡΡΠΈΠ»Π»ΠΎΠ³ΡΠ°Ρ, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², Π»ΡΠΊΡΠΌΠ΅ΡΡ, Π΄Π°ΡΡΠΈΠΊΠΈ Π΄Π°Π²Π»Π΅Π½ΠΈΡ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΎΠΏΡΠΈΠ²ΠΎΠ΄Π°ΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ±ΠΎΡΠΎΡΠ΅Ρ Π½ΠΈΠΊΠΈ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π²ΡΠΊΠΎΠ²ΡΠ΅ Π²ΠΎΠ»Π½Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡΠ°.
π€ GitHub
@javatg
ΠΡΠΎΠ΅ΠΊΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ: ΠΎΡΡΠΈΠ»Π»ΠΎΠ³ΡΠ°Ρ, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², Π»ΡΠΊΡΠΌΠ΅ΡΡ, Π΄Π°ΡΡΠΈΠΊΠΈ Π΄Π°Π²Π»Π΅Π½ΠΈΡ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΎΠΏΡΠΈΠ²ΠΎΠ΄Π°ΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ±ΠΎΡΠΎΡΠ΅Ρ Π½ΠΈΠΊΠΈ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π²ΡΠΊΠΎΠ²ΡΠ΅ Π²ΠΎΠ»Π½Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠΊΡΠΎΡΠΎΠ½ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡΠ°.
π€ GitHub
@javatg
π¦ Apache ZooKeeper β ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ Π±Π΅Π· Π»ΠΈΡΠ½Π΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ
Π ΡΠΏΠΎΡ Ρ Kubernetes ΠΈ ΡΠ΅ΡΠ²ΠΈΡ-ΠΌΠ΅ΡΠ΅ΠΉ ΡΠΊΡΠΎΠΌΠ½ΡΠΉ ZooKeeper ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° (3.5.5+) ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β ΡΠΈΡΡΡΠ΅ Java-Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² Markdown ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· Maven.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² Π²ΡΠΎΠ΄Π΅ etcd, ZooKeeper ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Hadoop-ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ ΠΊΠ°ΠΊ Π±ΡΠΊΠ΅Π½Π΄ Π΄Π»Ρ Apache Kafka.
π€ GitHub
@javatg
Π ΡΠΏΠΎΡ Ρ Kubernetes ΠΈ ΡΠ΅ΡΠ²ΠΈΡ-ΠΌΠ΅ΡΠ΅ΠΉ ΡΠΊΡΠΎΠΌΠ½ΡΠΉ ZooKeeper ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° (3.5.5+) ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ β ΡΠΈΡΡΡΠ΅ Java-Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² Markdown ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΠ΅ΡΠ΅Π· Maven.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² Π²ΡΠΎΠ΄Π΅ etcd, ZooKeeper ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Hadoop-ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ ΠΊΠ°ΠΊ Π±ΡΠΊΠ΅Π½Π΄ Π΄Π»Ρ Apache Kafka.
π€ GitHub
@javatg
π§© ΠΠ°Π΄Π°ΡΠ° Β«Π’ΡΠΈ ΡΡΡΡΡΠΈΠΊΠ°Β» (Ρ ΠΏΠΎΠ΄Π²ΠΎΡ
ΠΎΠΌ)
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠ°Π½ ΠΊΠ»Π°ΡΡ
ΠΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΡΡΡΡΠΈΠΊ ΡΠΎΠ²Π½ΠΎ 1 000 000 ΡΠ°Π·.
Π ΡΠΈΠ½Π°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ²Π΅ΡΡΠΈ
ΠΠΎΠΏΡΡΡΠΈΠΌΡ Π»ΡΠ±ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅) ΠΈ Π»ΡΠ±Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java 19+.
Π’ΠΈΠΏ ΠΏΠΎΠ»Ρ ΠΌΠ΅Π½ΡΡΡ Π½Π΅Π»ΡΠ·Ρ β ΡΠΎΠ»ΡΠΊΠΎ
β‘οΈ Π ΡΠ΅ΠΌ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄Π²ΠΎΡ ?
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ 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
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠ°Π½ ΠΊΠ»Π°ΡΡ
Counter
Ρ ΠΏΠΎΠ»Π΅ΠΌ int value ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ increment().ΠΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΡΡΡΡΠΈΠΊ ΡΠΎΠ²Π½ΠΎ 1 000 000 ΡΠ°Π·.
Π ΡΠΈΠ½Π°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ²Π΅ΡΡΠΈ
Counter value = 3000000
ΠΠ΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ synchronized, ReentrantLock, Atomic*, LongAdder, VarHandle.
ΠΠΎΠΏΡΡΡΠΈΠΌΡ Π»ΡΠ±ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅) ΠΈ Π»ΡΠ±Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Java 19+.
Π’ΠΈΠΏ ΠΏΠΎΠ»Ρ ΠΌΠ΅Π½ΡΡΡ Π½Π΅Π»ΡΠ·Ρ β ΡΠΎΠ»ΡΠΊΠΎ
int
.β‘οΈ Π ΡΠ΅ΠΌ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄Π²ΠΎΡ ?
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ value++ Π½Π΅ Π°ΡΠΎΠΌΠ°ΡΠ½Π°: Β«ΠΏΡΠΎΡΠΈΡΠ°ΡΡ β ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ β Π·Π°ΠΏΠΈΡΠ°ΡΡΒ».
ΠΠ΅Π· ΠΏΡΠΈΠ²ΡΡΠ½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² ΠΏΡΠΈΠ΄ΡΡΡΡ Π½Π°ΠΉΡΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΏΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
π‘ Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄ 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 Π₯ΠΎΠ»Π».
Π£ΡΠ°ΡΡΠΈΠ΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ΅, Π½ΠΎ ΠΎΡΠ»Π°ΠΉΠ½-ΠΌΠ΅ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ. Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅.
6 ΠΈΡΠ½Ρ Π² ΠΠΎΡΠΊΠ²Π΅ ΡΠΎΠ±Π΅ΡΡΡΡΡ ΡΠΊΡΠΏΠ΅ΡΡΡ ΠΈΠ· Π²Π΅Π΄ΡΡΠΈΡ ΠΠ’-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΊΠ΅ΠΉΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΠ Π² Π±ΠΈΠ³ΡΠ΅Ρ Π°Ρ ΠΈ Π±ΡΠ΄ΡΡΠ΅Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅:
β 40+ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² ΠΈ 4 ΡΡΠ΅ΠΊΠ° Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΎΠ± AI&ML, Π½Π°ΡΠΊΠ΅, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅, ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ ΠΈ Π±ΡΠΊΠ΅Π½Π΄-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅;
β Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΎ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΉ ΠΈ ΠΠ-ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΈ;
β Π²Π·Π³Π»ΡΠ΄ Π½Π° ΠΠ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π½Π°ΡΠΊΠΈ ΠΈ Π±ΠΈΠ·Π½Π΅ΡΠ°: ΡΡΠ΅Π½Π΄Ρ 2025 Π³ΠΎΠ΄Π°;
β ΠΎΠΏΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΠ ΠΎΡ Π·Π°ΡΡΠ±Π΅ΠΆΠ½ΡΡ ΠΠ’-ΡΠΊΡΠΏΠ΅ΡΡΠΎΠ²;
β Π½Π΅ΡΠ²ΠΎΡΠΊΠΈΠ½Π³ ΠΈ ΠΌΠ°ΡΡΠ΅Ρ-ΠΊΠ»Π°ΡΡΡ.
Π£ΡΠ°ΡΡΠ²ΡΠΉ ΠΎΡΠ½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½, ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΠΉΡΡ ΠΎΠΏΡΡΠΎΠΌ ΠΈ Π·Π½Π°ΠΊΠΎΠΌΡΡΡ Ρ Π²Π΅Π΄ΡΡΠΈΠΌΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌΠΈ ΡΠΎ Π²ΡΠ΅ΠΉ ΡΡΡΠ°Π½Ρ.
ΠΠ΄Π΅ΠΌ ΡΠ΅Π±Ρ ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ 6 ΠΈΡΠ½Ρ Π² ΠΠ’Π‘ Live Π₯ΠΎΠ»Π».
Π£ΡΠ°ΡΡΠΈΠ΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ΅, Π½ΠΎ ΠΎΡΠ»Π°ΠΉΠ½-ΠΌΠ΅ΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ. Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅.
β‘οΈ Ktorm β ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ ORM Π΄Π»Ρ Kotlin-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΡΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
: Π²ΠΌΠ΅ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΠΈ ΠΌΠ°Π³ΠΈΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π·Π΄Π΅ΡΡ ΡΠΈΡΡΡΠΉ Kotlin-ΠΊΠΎΠ΄ Ρ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ SQL DSL.
ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π΅ Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅ΡΡΡ ΠΎΡ SQL, Π° Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ: Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½, Π½ΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ Kotlin. ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ, Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΉ ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π΄Π΅Π»Π°Π΅Ρ Ktorm Π³ΠΎΡΠΎΠ²ΡΠΌ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² production.
π€ GitHub
@javatg
ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π΅ Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅ΡΡΡ ΠΎΡ SQL, Π° Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ: Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½, Π½ΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ Kotlin. ΠΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ, Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΉ ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π΄Π΅Π»Π°Π΅Ρ Ktorm Π³ΠΎΡΠΎΠ²ΡΠΌ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² production.
π€ GitHub
@javatg
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
β ΠΠΎΠΏΡΠΎΡ Ρ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ: Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π»ΠΎΠΊ ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
π Π£ΡΠ»ΠΎΠ²ΠΈΠ΅:
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
β ΠΠΎΠΏΡΠΎΡ:
ΠΠ°ΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°? ΠΠΎΡΠ΅ΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄ΠΈΠ²ΠΈΡΡ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡΡΠ½ΡΡ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²?
π Π Π°Π·Π±ΠΎΡ:
β Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ:
1οΈβ£ ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ `InitializationPuzzle`. ΠΠ³ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π±Π»ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ°Π·Ρ:
2οΈβ£ ΠΠ°Π»Π΅Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ
- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
3οΈβ£ ΠΠ°ΠΊΠΎΠ½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄
---
β ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΠΎΠ»Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄:
π₯ ΠΠΎΠ΄Π²ΠΎΡ :
β’ ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ ΡΠ°Π·
β’ ΠΠ΄Π½Π°ΠΊΠΎ Java Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½.
β’ Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ° ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
π‘οΈ ΠΠ°ΠΉΡΡ Π°ΠΊ:
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠΎΠ»ΡΠΌ/ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠ°, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ (static final), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ»Π°ΡΡΠ°.
β ΠΡΠ²ΠΎΠ΄:
β’ Java ΡΡΡΠΎΠ³ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π»ΡΠ±ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
β’ ΠΠ°ΠΆΠ΅ Π²ΡΠ·ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Β«Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎΒ» ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΡΠΎΠΌΠΊΠ° Π·Π°ΡΡΠ½Π΅Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
β’ Π’Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Ρ ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΊΠ»Π°ΡΡΠ»ΠΎΠ°Π΄Π΅ΡΠΎΠ² ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π² JVM.
π‘ ΠΠΎΠ½ΡΡ-Π²ΠΎΠΏΡΠΎΡ:
Π§ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅
@javatg
π Π£ΡΠ»ΠΎΠ²ΠΈΠ΅:
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ?
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