Java Portal | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠ°Π½Π°Π»Ρ ΠΈ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΠ΅ΡΡ Π² ΠΌΠΈΡ Π΄Π»Ρ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π‘Π²ΡΠ·Ρ: @devmangx Π ΠΠ: https://clck.ru/3H4WUg
Show moreπ Analytical overview of Telegram channel Java Portal | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Channel Java Portal | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (@java_iibrary) in the Russian language segment is an active participant. Currently, the community unites 11 913 subscribers, ranking 10 459 in the Technologies & Applications category and 53 942 in the Russia region.
π Audience metrics and dynamics
Since its creation on Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΎ, the project has demonstrated rapid growth, gathering an audience of 11 913 subscribers.
According to the latest data from 31 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 293 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 10.96%. Within the first 24 hours after publication, content typically collects 6.20% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 306 views. Within the first day, a publication typically gains 738 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 3.
- Thematic interests: Content is focused on key topics such as boot, string, void, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°, resttemplate.
π Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
βΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡΠ΅ΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠ°Π½Π°Π»Ρ ΠΈ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΠ΅ΡΡ Π² ΠΌΠΈΡ Π΄Π»Ρ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Π‘Π²ΡΠ·Ρ: @devmangx
Π ΠΠ: https://clck.ru/3H4WUgβ
Thanks to the high frequency of updates (latest data received on 01 November, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
ReadWriteLock β ΡΡΠΎ ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ Π² Java, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΈΡΠ°ΡΡ ΡΠ΅ΡΡΡΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ β Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΡΠΈΡΠ°ΡΡ ΠΈ Π½Π΅ ΠΏΠΈΡΡΡ.
ΠΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Ρ ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, synchronized ΠΈΠ»ΠΈ ReentrantLock), Π³Π΄Π΅ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΡΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π·Π° ΡΠ°Π·.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ReadWriteLock
πΉRead Lock (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅):
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅Π΄ΠΊΠΎ β Π½Π° Π·Π°ΠΏΠΈΡΡ.
πΉWrite Lock (Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π° Π·Π°ΠΏΠΈΡΡ):
Π’ΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ Π½Π° Π·Π°ΠΏΠΈΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΏΡΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ.
Java ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ReadWriteLock Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»Π°ΡΡΠ° ReentrantReadWriteLock.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΎΠ±ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΡΡ ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²:
πΉΠ§ΠΈΡΠ°ΡΠ΅Π»ΠΈ: ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ°ΡΡΠΎ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅.
πΉΠΠΈΡΠ°ΡΠ΅Π»ΠΈ: Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ReadWriteLock, Π²Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΡΠ΅ Π²ΡΠ΅ΠΌ ΡΠΈΡΠ°ΡΠ΅Π»ΡΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ, Π½ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΠ΅, ΡΡΠΎ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ
ΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ. ΠΡΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ.
π Java Portal/ ΠΈ /login, Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ ΡΡΠ΅Π±ΡΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΎΠ»Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠΈΡΠ°ΠΉΡΠ΅ Π·Π΄Π΅ΡΡ: ΡΡΠΊ
π Java PortalDataProcessor<T> β ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, Ρ
ΡΠ°Π½ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° T ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ getMax(...), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠ°ΡΠ°ΡΠΎΡΡ.
> Employee ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Comparable<Employee> ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ compareTo, ΡΡΠΎΠ±Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΏΠΎ Π·Π°ΡΠΏΠ»Π°ΡΠ΅.
> Π main() ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² DataProcessor<Employee>, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΡΠΏΠ»Π°ΡΠΎΠΉ.
ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
Highest paid: Bob ($75000.0)π Java Portal
ApiResponse<T> Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ payload-Π° API.
π Java PortalExecutorService ΠΎΠ½ΠΈ ΡΠΏΡΠΎΡΠ°ΡΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β€οΈ
π Java Portaladd(), get(), remove(), set().
Π§Π°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ β ArrayList ΠΈ LinkedList. List ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ null.
ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Collections.synchronizedList(). Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ β ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ΅Π½ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ. ΠΠ»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Collections.sort(). ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: Π±ΡΡΡΡΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ Ρ ArrayList, Π±ΡΡΡΡΠ°Ρ Π²ΡΡΠ°Π²ΠΊΠ° Ρ LinkedList. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ list.stream().
2. Set β ΡΡΠΎ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡΡΠ΄ΠΎΠΊ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² HashSet). ΠΠΎΡΡΡΠΏ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΡΠ΅ΡΠ°ΡΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ: add(), contains(), remove(). Π§Π°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ β HashSet, LinkedHashSet, TreeSet. Set ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ null, ΠΊΠ°ΠΊ Π² HashSet. ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² TreeSet, Π³Π΄Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ
ΡΠ°Π½ΡΡΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: Π±ΡΡΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² HashSet. ΠΠΎΡΠΎΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ (stream()).
3. Map β ΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΏΠ°Ρ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ»ΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ β Π½Π΅Ρ.
ΠΠ»ΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ (HashMap), ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ (TreeMap) ΠΈΠ»ΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ Π²ΡΡΠ°Π²ΠΊΠΈ (LinkedHashMap). ΠΠΎΡΡΡΠΏ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ map.get(key). ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ: put(), get(), remove(), containsKey(). Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ β HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap.
Π Π°Π·ΡΠ΅ΡΡΠ½ ΠΎΠ΄ΠΈΠ½ null-ΠΊΠ»ΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ null-Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² HashMap). ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² HashMap, Π½ΠΎ Π΅ΡΡΡ Π² ConcurrentHashMap. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. TreeMap ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΏΠΎ ΠΊΠ»ΡΡΠ°ΠΌ. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: Π±ΡΡΡΡΡΠΉ Π΄ΠΎΡΡΡΠΏ Ρ HashMap, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ Ρ TreeMap. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· map.entrySet().stream().
π Java Portal@PreAuthorize("hasRole('ADMIN')") β ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ρ ΡΠΎΠ»ΡΡ ADMIN.
πΉ@Secured("ROLE_USER") ΠΈ @RolesAllowed("ROLE_EDITOR") β Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΡΠ½Π½ΡΡ
ΡΠΎΠ»Π΅ΠΉ.
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ant matchers Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ URL-ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΠΏΠΎ ΡΠΎΠ»ΡΠΌ.
5) ΠΠ΅ΡΠ°ΡΡ
ΠΈΡ ΡΠΎΠ»Π΅ΠΉ Π΄Π»Ρ Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ
Spring Security ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΈ ΡΠΎΠ»Π΅ΠΉ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
π ADMIN > STAFF > USER
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΠ»Ρ ADMIN Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ΅ ΠΏΡΠ°Π²Π° ΡΠΎΠ»Π΅ΠΉ STAFF ΠΈ USER. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠΎΠΌ.
6) Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ»Π΅ΠΉ Ρ JWT ΠΈ OAuth2
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ OAuth2 ΠΈΠ»ΠΈ JWT, ΡΠΎΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠΎΠΊΠ΅Π½Π΅ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΈΡ
Π½Π° authorities Spring Security.
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ ΠΈ ΡΡΠ΅ΠΉΡΠ»Π΅Ρ (stateless) Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ API ΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
7) ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈ ΡΠΎΠ»ΠΈ:
> USER β ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΎΠ²Π°ΡΡ
> CREATOR β ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠ²Π°ΡΡ
> EDITOR β ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ²Π°ΡΡ
> ADMIN β ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ
πΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ»Π΅ΠΉ Π² Spring Security ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠΊΠΎ Π·Π°Π΄Π°ΡΡ, ΠΊΡΠΎ ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ β Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΠΈΠ±ΠΊΠΈΡ
ΡΠΎΠ»Π΅ΠΉ, Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΉ ΡΠΎΠ»Π΅ΠΉ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π².
ΠΠ°ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΠΉΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
π Java Portal
CompletableFuture Π² Java ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠΎΠ³ΠΎ, ΡΠ΅ΠΏΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ API.
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ API ΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ. π₯°
π Java Portaluser_id).
4. ΠΠ½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ β Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
5. Π‘Π²ΡΠ·Ρ "ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ" β ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ Π² Π΄ΡΡΠ³ΠΎΠΉ.
6. Π‘Π²ΡΠ·Ρ "ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ" β ΠΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π° Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ β ΠΏΠΎΡΡΡ).
7. Π‘Π²ΡΠ·Ρ "ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ" β ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ (ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ°-ΡΠ²ΡΠ·ΠΊΠ°).
8. ΠΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ΅Π»ΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ.
9. ΠΠ΅Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡ β ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΡ
(Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
) Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΡΠ΅Π½ΠΈΡ.
10. ΠΠ΅ΡΠ²Π°Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΌΠ° (1NF) β Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ
ΡΡ Π³ΡΡΠΏΠΏ; ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ΅ΠΉΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
11. ΠΡΠΎΡΠ°Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΌΠ° (2NF) β Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΎΡ ΡΠΎΡΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°.
12. Π’ΡΠ΅ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΠΌΠ° (3NF) β Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΡ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Π½Π΅ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ
Π½Π΅ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΡΠΎΠ»Π±ΡΠΎΠ²).
13. Π‘ΡΡΡΠΎΠ³Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ β Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎ-ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, UUID ΠΈΠ»ΠΈ auto-increment ID).
14. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ»ΡΡ β Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, email ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠ°ΡΠΏΠΎΡΡΠ°).
15. Π‘ΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΊΠ»ΡΡ β ΠΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΡΠΎΠ»Π±ΡΠΎΠ².
16. Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ β ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠΎΠ»Π±ΡΠ΅ (ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΠ΅ ΡΡΠΎΠ»Π±ΡΠΎΠ²).
17. ΠΠΎΠΏΡΡΡΠΈΠΌΠΎΡΡΡ NULL β ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ Π² ΡΡΠΎΠ»Π±ΡΠ΅ NULL (Ρ.Π΅. ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ).
18. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠ»Π±ΡΠ΅ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, age > 0).
19. ΠΠ½Π΄Π΅ΠΊΡ β ΠΠΎΠ²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π·Π° ΡΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ.
20. Π‘Ρ
Π΅ΠΌΠ° β Π‘ΡΡΡΠΊΡΡΡΠ°/ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ, ΠΏΠΎΠ»Π΅ΠΉ, ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠ²ΡΠ·Π΅ΠΉ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
.
21. ERD (Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° "ΡΡΡΠ½ΠΎΡΡΡ-ΡΠ²ΡΠ·Ρ") β ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ ΠΈΡ
ΡΠ²ΡΠ·Π΅ΠΉ.
22. ΠΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎΡΡΡ β ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΠ²ΡΠ·ΠΈ.
23. Π’ΠΈΠΏ Π΄Π°Π½Π½ΡΡ
β ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Ρ
ΡΠ°Π½ΠΈΡΡ ΡΡΠΎΠ»Π±Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, INT, VARCHAR, DATE).
24. ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ β ΠΠΎΠ»Π΅, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, status = [pending, complete]).
25. ΠΡΠ³ΠΊΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ β ΠΠΎΠΌΠ΅ΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΊΠ°ΠΊ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΉ Π±Π΅Π· ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, deleted_at).
π Java Portal