Skip to content

B-O-O-P/itmo-java-advanced-2019

Repository files navigation

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 12. Бтатистика тСкста

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ TextStatistics, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ тСксты Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках.
    1. АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: TextStatistics <локаль тСкста> <локаль Π²Ρ‹Π²ΠΎΠ΄Π°> <Ρ„Π°ΠΉΠ» с тСкстом> <Ρ„Π°ΠΉΠ» ΠΎΡ‚Ρ‡Π΅Ρ‚Π°>
    2. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ тСкста: всС Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² систСмС.
    3. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π»ΠΎΠΊΠ°Π»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°: русская ΠΈ английская.
    4. Π€Π°ΠΉΠ»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF-8.
    5. ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ статистики Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΡ‚ΠΈΡΡŒ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ катСгориям:
      • прСдлоТСния
      • строки
      • слова
      • числа
      • дСньги
      • Π΄Π°Ρ‚Ρ‹
    6. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ статистика:
      • число Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ
      • число Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
      • минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
      • максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
      • минимальная Π΄Π»ΠΈΠ½Π°
      • максимальная Π΄Π»ΠΈΠ½Π°
      • срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅/Π΄Π»ΠΈΠ½Π°
    7. ΠžΡ‚Ρ‡Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ HTML.
    8. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°:
АнализируСмый Ρ„Π°ΠΉΠ»: input.txt
Бводная статистика
Число ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ: 38

Число строк: 41

…

Бтатистика ΠΏΠΎ словам
Число слов: 153 (95 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…)

МинимальноС слово: HTML

МаксимальноС слово: языках

Минимальная длина слова: 1 (и)

Максимальная Π΄Π»ΠΈΠ½Π° слова: 14 (ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅)

БрСдняя Π΄Π»ΠΈΠ½Π° слова: 10

Бтатистика ΠΏΠΎ …
  1. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ задания слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°:
    1. Π”Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ сообщСний для Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
    2. БогласованиС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 11. ЀизичСскиС Π»ΠΈΡ†Π°

  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ банковскому ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с физичСскими Π»ΠΈΡ†Π°ΠΌΠΈ.
    1. Π£ физичСского Π»ΠΈΡ†Π° (Person) ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ имя, Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ ΠΈ Π½ΠΎΠΌΠ΅Ρ€ паспорта.
    2. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ физичСскиС Π»ΠΈΡ†Π° (LocalPerson) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° сСриализации.
    3. Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ физичСскиС Π»ΠΈΡ†Π° (RemotePerson) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².
    4. Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска физичСского Π»ΠΈΡ†Π° ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ паспорта, с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Ρ‚ΠΈΠΏΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Π»ΠΈΡ†Π°.
    5. Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания записи ΠΎ физичСском Π»ΠΈΡ†Π΅ ΠΏΠΎ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ.
    6. Π£ физичСского Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько счСтов, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ доступ.
    7. Π‘Ρ‡Π΅Ρ‚Ρƒ физичСского Π»ΠΈΡ†Π° с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ subId Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ банковский счСт с id Π²ΠΈΠ΄Π° passport:subId.
    8. ИзмСнСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ со счСтом Π² Π±Π°Π½ΠΊΠ΅ (созданиС ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ баланса), Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π½Ρ‹ всСм ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ RemotePerson, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ LocalPerson, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ созданы послС этого измСнСния.
    9. ИзмСнСния Π² счСтах, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· RemotePerson Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сразу ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ глобально, Π° ΠΏΡ€ΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· LocalPerson – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локально для этого ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ LocalPerson.
  2. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ тСсты, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅Π΅ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
  3. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с физичСским Π»ΠΈΡ†Π°ΠΌΠΈ.
    1. АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: имя, фамилия, Π½ΠΎΠΌΠ΅Ρ€ паспорта физичСского Π»ΠΈΡ†Π°, Π½ΠΎΠΌΠ΅Ρ€ счСта, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ суммы счСта.
    2. Если информация ΠΎΠ± ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ физичСском Π»ΠΈΡ†Π΅ отсутствуСт, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС – Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.
    3. Если Ρƒ физичСского Π»ΠΈΡ†Π° отсутствуСт счСт с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, Ρ‚ΠΎ ΠΎΠ½ создаСтся с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ балансом.
    4. ПослС обновлСния суммы счСта, Π½ΠΎΠ²Ρ‹ΠΉ баланс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° консоль.

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 10. HelloUDP

  1. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎ UDP.

  2. Класс HelloUDPClient Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Π½Π° сСрвСр, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° консоль.

    • АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:
      1. имя ΠΈΠ»ΠΈ ip-адрСс ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½ сСрвСр;
      2. Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒ запросы;
      3. прСфикс запросов (строка);
      4. число ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² запросов;
      5. число запросов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.
    • Запросы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ числС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ своСго запроса ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ сам запрос ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° консоль. Если запрос Π½Π΅ Π±Ρ‹Π» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½, трСбуСтся ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ³ΠΎ.
    • Запросы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ схСмС <прСфикс запросов><Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠ°>_<Π½ΠΎΠΌΠ΅Ρ€ запроса Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅>.
  3. Класс HelloUDPServer Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ задания, отсылаСмыС классом HelloUDPClient ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ….

    • АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки:
      1. Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ запросы;
      2. число Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы.
    • ΠžΡ‚Π²Π΅Ρ‚ΠΎΠΌ Π½Π° запрос Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Hello, <тСкст запроса>.
    • Если сСрвСр Π½Π΅ успСваСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы, ΠΏΡ€ΠΈΠ΅ΠΌ запросов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ приостановлСн.
  4. Бонусный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. РСализация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ.

    • ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
    • Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС Ρ‡Π΅Ρ€Π΅Π· Selector.

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:
    • ΠΊΠ»ΠΈΠ΅Π½Ρ‚: info.kgeorgiy.java.advanced.hello client <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
    • сСрвСр: info.kgeorgiy.java.advanced.hello server <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:
    • ΠΊΠ»ΠΈΠ΅Π½Ρ‚: info.kgeorgiy.java.advanced.hello client-i18n <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
    • сСрвСр: info.kgeorgiy.java.advanced.hello server-i18n <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 9. Web Crawler

1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ потокобСзопасный класс WebCrawler, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ рСкурсивно ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ сайты.

  1. Класс WebCrawler Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ конструктор:
                        public WebCrawler(Downloader downloader, int downloaders, int extractors, int perHost)
    • downloader позволяСт ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ страницы ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ссылки;
    • downloaders β€” максимальноС число ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… страниц;
    • extractors β€” максимальноС число страниц, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ссылки;
    • perHost β€” максимальноС число страниц, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… c ΠΎΠ΄Π½ΠΎΠ³ΠΎ хоста. Для опрСдСния хоста слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getHost класса URLUtils ΠΈΠ· тСстов.
  1. Класс WebCrawler Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс Crawler:
                        public interface Crawler extends AutoCloseable {
                            List<String> download(String url, int depth) throws IOException;

                            void close();
                        }
    • ΠœΠ΅Ρ‚ΠΎΠ΄ download Π΄ΠΎΠ»ΠΆΠ΅Π½ рСкурсивно ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ страницы, начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ URL Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ список Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… страниц ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². НапримСр, Ссли Π³Π»ΡƒΠ±ΠΈΠ½Π° Ρ€Π°Π²Π½Π° 1, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ указанная страница. Если Π³Π»ΡƒΠ±ΠΈΠ½Π° Ρ€Π°Π²Π½Π° 2, Ρ‚ΠΎ указанная страница ΠΈ Ρ‚Π΅ страницы ΠΈ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° ссылаСтся ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ….
    • Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° страниц (ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ссылок) Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ максимально ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° число ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… страниц (Π² Ρ‚ΠΎΠΌ числС с ΠΎΠ΄Π½ΠΎΠ³ΠΎ хоста) ΠΈ страниц, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ ссылки.
    • Для распараллСливания Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎ downloaders + extractors Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
    • Π—Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ/ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ссылки ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ страницы Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π° (download) запрСщаСтся.
    • ΠœΠ΅Ρ‚ΠΎΠ΄ close Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ всС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.
  1. Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Downloader, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ конструктора.
                        public interface Downloader {
                            public Document download(final String url) throws IOException;
                        }
    • ΠœΠ΅Ρ‚ΠΎΠ΄ download Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ Π΅Π³ΠΎ адрСсу URL.
    • Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылки ΠΏΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ страницС:
                        public interface Document {
                            List<String> extractLinks() throws IOException;
                        }
    • Бсылки, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌΠΈ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ схСму http ΠΈΠ»ΠΈ https.
  1. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ main, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки
    • Командная строка:
                    WebCrawler url [depth [downloads [extractors [perHost]]]]
    • Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ CachingDownloader ΠΈΠ· тСстов.

2. ВСрсии задания

  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ β€” ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ограничСния Π½Π° число ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°ΠΊΠ°Ρ‡Π΅ΠΊ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ хоста (perHost >= downloaders).
  • Полная β€” трСбуСтся ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всС ограничСния.
  • Бонусная β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΠΎΠ΄ Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ.

ВСстированиС:

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.crawler easy <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.crawler hard <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 8. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск

  1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ класс ParallelMapperImpl, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс ParallelMapper.
public interface ParallelMapper extends AutoCloseable {
    <T, R> List<R> run(
        Function<? super T, ? extends R> f, 
        List<? extends T> args
    ) throws InterruptedException;

    @Override
    void close() throws InterruptedException;
}
    • ΠœΠ΅Ρ‚ΠΎΠ΄ run Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ f Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (args).
    • ΠœΠ΅Ρ‚ΠΎΠ΄ close Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ всС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.
    • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ParallelMapperImpl(int threads) создаСт threads Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для распараллСливания.
    • К ΠΎΠ΄Π½ΠΎΠΌΡƒ ParallelMapperImpl ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ нСсколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
    • Задания Π½Π° исполнСниС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² порядкС поступлСния.
    • Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΉ.
  1. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ класс IterativeParallelism Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ParallelMapper.
    • Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ конструктор IterativeParallelism(ParallelMapper)
    • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° threads Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ParallelMapper.
    • Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ запуска ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ParallelMapper.
    • ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ParallelMapper сам IterativeParallelism Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½.

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.mapper scalar <ParallelMapperImpl>,<IterativeParallelism>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.mapper list <ParallelMapperImpl>,<IterativeParallelism>

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ классов ParallelMapperImpl ΠΈ IterativeParallelism Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ запятая ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 7. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ

  1. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ класс IterativeParallelism, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ списки Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
  2. Π’ простом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:
  • minimum(threads, list, comparator) β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ;
  • maximum(threads, list, comparator) β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ максимум;
  • all(threads, list, predicate) β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ всС элСмСнты списка ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρƒ;
  • any(threads, list, predicate) β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ сущСствуСт элСмСнт списка, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρƒ.
  1. Π’ слоТном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:
  • filter(threads, list, predicate) β€” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ список, содСрТащий элСмСнты ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρƒ;
  • map(threads, list, function) β€” Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ список, содСрТащий Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ;
  • join(threads, list) β€” конкатСнация строковых прСдставлСний элСмСнтов списка.
  1. Π’ΠΎ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСдаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ threads β€” сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ вычислСнии. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π΅ Π²Π΅Π»ΠΈΠΊΠΎ.
  2. НС слСдуСт Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстро.
  3. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ задания нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Concurrency Utilities.
  4. РСкомСндуСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ заданию ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠΎΠ½ΠΎΠΈΠ΄Ρ‹.

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.concurrent scalar <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.concurrent list <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 5-6. JarImplementor

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ .jar-Ρ„Π°ΠΉΠ», содСрТащий скомпилированный Implementor ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы.
  • Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ .jar-Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ java -jar.
  • ЗапускаСмый .jar-Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‡Ρ‚ΠΎ ΠΈ класс Implementor.
  1. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ Implemetor Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈ запускС с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ -jar имя-класса Ρ„Π°ΠΉΠ».jar ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π» .jar-Ρ„Π°ΠΉΠ» с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса (интСрфСйса).
  2. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ исходного ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»Π΅Π½Ρ‹: скрипт для создания запускаСмого .jar-Ρ„Π°ΠΉΠ»Π°, Π² Ρ‚ΠΎΠΌ числС, исходный ΠΊΠΎΠ΄ манифСста; запускаСмый .jar-Ρ„Π°ΠΉΠ».
  3. Π”Π°Π½Π½ΠΎΠ΅ домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅ сдаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСстС с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡΠ΄Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ нСльзя.
  4. БлоТная вСрсия. РСшСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ модуляризовано.

Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс JarImpler

  1. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ класс Implementor ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Javadoc.
  • Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ всС классы ΠΈ всС Ρ‡Π»Π΅Π½Ρ‹ классов, Π² Ρ‚ΠΎΠΌ числС Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ (private).
  • ДокумСнтация Π΄ΠΎΠ»ΠΆΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.
  • БгСнСрированная докумСнтация Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ссылки Π½Π° классы стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  1. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ исходного ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»Π΅Π½Ρ‹:
  • скрипт для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ;
  • сгСнСрированная докумСнтация.
  1. Π”Π°Π½Π½ΠΎΠ΅ домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅ сдаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вмСстС с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡΠ΄Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ нСльзя.

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.implementor jar-interface <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.implementor jar-class <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 4. Implementor

  1. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ класс Implementor, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ классов ΠΈ интСрфСйсов.
  • АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса/интСрфСйса, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.
  • Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сгСнСрирован java-ΠΊΠΎΠ΄ класса с суффиксом Impl, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ (Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ) ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ класс (интСрфСйс).
  • Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ошибок.
  • Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ абстрактным.
  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ сгСнСрированного класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
  1. Π’ Π·Π°Π΄Π°Π½ΠΈΠΈ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ уровня слоТности:
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ β€” Implementor Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйсы (Π½ΠΎ Π½Π΅ классы). ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° generics Π½Π΅ трСбуСтся.
  • Π‘Π»ΠΎΠΆΠ½Ρ‹ΠΉ β€” Implementor Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ классы ΠΈ интСрфСйсы. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° generics Π½Π΅ трСбуСтся.
  • Бонусный β€” Implementor Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ generic-классы ΠΈ интСрфСйсы. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π½Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ UncheckedWarning.

Класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс Impler

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.implementor interface <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.implementor class <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 3. Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚Ρ‹

  1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ класс StudentDB, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ поиск ΠΏΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… студСнтов.
  • Класс StudentDB Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс StudentQuery (простая вСрсия) ΠΈΠ»ΠΈ StudentGroupQuery (слоТная вСрсия).
  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈ этом Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π°Π΄ΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° нСсколько строк.
  1. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ задания слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°:
  • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².
  • ИзбавлСниС ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π°.

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.student StudentQuery <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.student StudentGroupQuery <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 2. ArraySortedSet

  1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ класс ArraySet, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ нСизмСняСмоС упорядочСнноС мноТСство.
  • Класс ArraySet Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс SortedSet (упрощСнная вСрсия) ΠΈΠ»ΠΈ NavigableSet (услоТнСнная вСрсия).
  • ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ мноТСствами Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ с максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ асимптотичСской ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ.
  1. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ задания слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°:
  • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ стандартных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.
  • ИзбавлСниС ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π°.

ВСстированиС

  • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.arrayset SortedSet <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
  • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: info.kgeorgiy.java.advanced.arrayset NavigableSet <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

Π”ΠΎΠΌΠ°ΡˆΠ½Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ 1. ΠžΠ±Ρ…ΠΎΠ΄ Ρ„Π°ΠΉΠ»ΠΎΠ²

  1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ класс Walk, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ подсчСт Ρ…Π΅Ρˆ-сумм Ρ„Π°ΠΉΠ»ΠΎΠ².

    1. Π€ΠΎΡ€ΠΌΠ°Ρ‚ запуска java Walk <Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»> <Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»>

    2. Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» содСрТит список Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся ΠΎΠ±ΠΎΠΉΡ‚ΠΈ.

    3. Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ строкС для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π€ΠΎΡ€ΠΌΠ°Ρ‚ строки: <ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Π°Ρ Ρ…Π΅Ρˆ-сумма> <ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ>

    4. Для подсчСта Ρ…Π΅Ρˆ-суммы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ FNV.

    5. Если ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π² качСствС Π΅Π³ΠΎ Ρ…Π΅Ρˆ-суммы 00000000.

    6. ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² β€” UTF-8.

    7. Если Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ дирСктория Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ сущСствуСт, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ.

    8. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

    9. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

      Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»

                       java/info/kgeorgiy/java/advanced/walk/samples/1
                       java/info/kgeorgiy/java/advanced/walk/samples/12
                       java/info/kgeorgiy/java/advanced/walk/samples/123
                       java/info/kgeorgiy/java/advanced/walk/samples/1234
                       java/info/kgeorgiy/java/advanced/walk/samples/1
                        java/info/kgeorgiy/java/advanced/walk/samples/binary
                       java/info/kgeorgiy/java/advanced/walk/samples/no-such-file
      

      Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»

                       050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                       2076af58 java/info/kgeorgiy/java/advanced/walk/samples/12
                       72d607bb java/info/kgeorgiy/java/advanced/walk/samples/123
                       81ee2b55 java/info/kgeorgiy/java/advanced/walk/samples/1234
                       050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                       8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                       00000000 java/info/kgeorgiy/java/advanced/walk/samples/no-such-file
      
  2. УслоТнСнная вСрсия:

    1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ класс RecursiveWalk, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ подсчСт Ρ…Π΅Ρˆ-сумм Ρ„Π°ΠΉΠ»ΠΎΠ² Π² дирСкториях

    2. Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» содСрТит список Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся ΠΎΠ±ΠΎΠΉΡ‚ΠΈ. ΠžΠ±Ρ…ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ осущСствляСтся рСкурсивно.

    3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

      Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»

                           java/info/kgeorgiy/java/advanced/walk/samples/binary
                             java/info/kgeorgiy/java/advanced/walk/samples
      

      Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»

                           8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
                           050c5d2e java/info/kgeorgiy/java/advanced/walk/samples/1
                           2076af58 java/info/kgeorgiy/java/advanced/walk/samples/12
                           72d607bb java/info/kgeorgiy/java/advanced/walk/samples/123
                           81ee2b55 java/info/kgeorgiy/java/advanced/walk/samples/1234
                           8e8881c5 java/info/kgeorgiy/java/advanced/walk/samples/binary
      
  3. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ задания слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°:

    • Π”ΠΈΠ·Π°ΠΉΠ½ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, диагностику ошибок.
    • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ Π² случаС ошибки.
    • ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° с Π²Π²ΠΎΠ΄ΠΎΠΌ-Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ.
    • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ рСсурсов.
  4. ВрСбования ΠΊ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΡŽ задания.

    • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ исходный ΠΊΠΎΠ΄ задания.
    • Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ru.ifmo.rain.фамилия.walk.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

  • Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅
  • ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ домашнСго задания
  • ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅
    • ВСкущая дирСктория Π΄ΠΎΠ»ΠΆΠ½Π°:
      • ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС скачанныС .jar Ρ„Π°ΠΉΠ»Ρ‹;
      • ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ скомпилированноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅;
      • Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ скомпилированныС ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ тСсты.
    • простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: java -cp . -p . -m info.kgeorgiy.java.advanced.walk Walk <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>
    • слоТный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚: java -cp . -p . -m info.kgeorgiy.java.advanced.walk RecursiveWalk <ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса>

About

HW's from Java advanced ITMO course

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published