Simple Steps: szkolenia Java, UML i BPMN
"przypomina nieco Sapkowskiego‚ nieco Tolkiena‚ a najbardziej chyba Grę o tron" - szczere-recenzje.pl, "Lektura tej książki wciągnęła mnie bez reszty. Z niecierpliwością czekam na więcej" - Maria Górska, "jeżeli macie ochotę na dobre‚ mocne high fantasy - nie macie wyboru‚ musicie sięgnąć po Wojny Żywiołów" - biblioteczka..., "genialna‚ wciągająca i intrygująca" - Ewelina Kiełbasińska, "Gorąco polecam!" - Addicted to books, "fabuła brzmi po prostu świetnie!" - kasiek-mysli.blogspot.com, "Jest to pozycja obowiązkowa dla każdego fana fantastyki" - moje-ukochane-czytadelka.blogspot.com, "Miałam wrażenie‚ że z każdą kolejną stroną roztacza się przede mną zupełnie inny świat" - biblioteczkaciekawychksiazek, "Zdecydowanie polecam‚ bo jest to kawał dobrze napisanego polskiego high fantasy!" - biblioteczkaciekawychksiazek, "mogę polecić wszystkim fanom tego gatunku" - zapiski-okularnicy.pl, "wciągnie nie tylko fanów fantastyki‚ ale i każdego czytelnika" - subiektywinie.blogspot.com, "Nie spodziewałam się‚ że aż tak mnie wciągnie." - zapiski-okularnicy.pl, "Jest to powieść zdecydowanie warta uwagi." - in-corner-with-book.blogspot.com, "nie mogę się już doczekać‚ kiedy dorwę tom drugi" - biblioteczkaciekawychksiazek.blogspot.com, "Poleciłabym zdecydowanie osobom gustującym w fantastyce" - marzenieliterackie.blogspot.com, "zachwyca także złożoność i różnorodność wątków" - szczere-recenzje.pl, "Nie mogę się doczekać kiedy znów przeniosę się do tego świata" - moje-ukochane-czytadelka.blogspot.com, "Najchętniej od razu sięgnęłabym po kolejną część." - zapiski-okularnicy.pl, "nie spodziewałam się tego po fantasy" - Ewelina Kiełbasińska, "książkę gorąco wam polecam!" - kasiek-mysli.blogspot.com, "autor cały czas utrzymywał mnie w napięciu i ciekawości" - moje-ukochane-czytadelka.blogspot.com, "książkę mogę z czystym sumieniem polecić wszystkim fanom gatunku" - Globster na lubimyczytac.pl, "to książka‚ która pobudziła moją wyobraźnię i ciekawość." - zapiski-okularnicy.pl, "Nie ma tu miejsca na nudę" - in-corner-with-book.blogspot.com

Szkolenia Java, UML i BPMN: Wydajność w Java


Wydajność w Java

Tworzenie wydajnych aplikacji w Java

Kod szkolenia: JAVA-WYD

Adresaci szkolenia

Szkolenie jest adresowane do programistów języka Java, którzy chcą poznać sekrety tworzenia wydajnego oprogramowania w tym języku.

Cele szkolenia

Celem szkolenia jest obycie się z praktykami tworzenia wydajnego oprogramowania w Java, poprzez tworzenie benchmark’ów i badanie wydajności, profilowanie aplikacji, używanie struktur danych odpowiednich do trybu pracy, wydajny dostęp do plików i przede wszystkim obalenie błędnych mitów dotyczących pracy Garbage Collector’a. Wielu programistów Java posiadających nawet wieloletnie doświadczenie nie zdaje sobie sprawy z tego jakie grzechy popełnia próbując pomagać wirtualnej maszynie Java, czy Garbage Collector’owi, w rezultacie otrzymując efekt przeciwny do zamierzonego. To szkolenie obala te mity i uczy prawdziwych praktyk tworzenia wydajnego oprogramowania w Javie. A także jak zwiększyć wydajność aplikacji bez dotykania samego kodu, czyli profilowanie JVM i GC.

Czas trwania szkolenia

5 dni, po 8 godzin. Łącznie 40 godzin(y) szkolenia.

Oczekiwane przygotowanie słuchaczy przed szkoleniem

Od uczestników wymagana jest umiejętność programowania w języku Java.

Polecane szkolenia uzupełniające

Szkolenie poprzedzające - Programowanie w Java (JAVA-PRO).
Inne szkolenia zaawansowane: wielowątkowość (JAVA-WAT), projektowanie (JAVA-WZO), architektura (JAVA-ARCH)

Program szkolenia

  1. Tworzenie wydajnego oprogramowania
    • Różne wymiary wydajności
      1. Wydajność obliczeniowa
      2. Wydajność pamięciowa (RAM footprint)
      3. Wydajność uruchomienia
      4. Wydajność skalowania
    • Wydajność a użytkownik – subiektywne odczucie wydajności
    • Proces tworzenia wydajnego oprogramowania
      1. Analiza wydajności
      2. Projektowanie a wydajność
      3. Architektura a wydajność
      4. Kodowanie a wydajność
      5. Testowanie a wydajność
      6. Profilowanie a wydajność
    • Co wpływa na wydajność w Javie
  2. Pomiary wydajności
    • Problemy ze zwiększaniem wydajności
    • Co to jest Benchmarking
      1. Sposoby dokonywania pomiarów
      2. Zalety budowania benchmarków
      3. Micro-benchmark
      4. Macro-benchmark
      5. Problemy wyników pomiarowania
    • Czym jest profilowanie aplikacji
      1. Wpływ profilowania na wydajność
      2. Problemy z płaskim profilowaniem
      3. Zalety narzędzi do profilowania
      4. Narzędzia do profilowania
        1. Problemy do zdiagnozowania
        2. Opis narzędzi
      5. Obsługa wybranych narzędzi
        1. JConsole
        2. Java VisualVM
        3. JMC (Java Mission Control)
        4. MAT (Memory Analyzer)
  3. Wydajna praca z plikami
    • Strumienie
      1. Podstawy
      2. Analiza alternatywnych rozwiązań
      3. Porównania wydajności rozwiązań na strumieniach
    • Swobodny dostęp do plików
    • Lepsza wydajność – biblioteka NIO
      1. Kanały
        1. FileChannel
        2. ByteBuffer
        3. Przykłady użycia kanałów
        4. Porównanie wydajność rozwiązań
      2. Odwzorowywanie plików w pamięci
      3. Porównanie wydajności różnych metod dostępu do plików
    • NIO2
      1. Path (operacje na ścieżkach)
      2. Files (operacje na plikach i katalogach)
        1. Kopiowanie/Przenoszenie
        2. System plików
        3. Nowe funkcje odczytu/zapisu
        4. StandardOpenOptions
        5. Nowa konstrukcja try i autocloseable (try-with-resources)
    • Serializacja
      1. Podstawy serializacji
      2. Problemy z serializacją
      3. Analiza wyników serializacji
      4. Sposoby optymalizacji serializacji
  4. Algorytm wydajności
    • Sztuka doboru algorytmu
      1. Porównanie algorytmów
      2. Elegancja a brute-force
      3. Dziedzina problemu a algorytm
    • Problemy z rekurencją
    • Nie tylko algorytm się liczy
  5. Kolekcje i tablice
    • API kolekcji
      1. Podstawowe interfejsy
        1. Iterator<E>
        2. Iterable<E>
        3. Collection<E>
          1. Set<E>
          2. List<E>
          3. Queue<E>
          4. Deque<E>
        4. Map<K, V>
      2. Najważniejsze funkcje
    • Struktury danych – podstawy wydajnych operacji
      1. Tablica haszująca
        1. Kontrakt między equals a hashCode
        2. Kontrakt equals
        3. Problemy z danymi w tablicy haszującej
      2. Przeszukiwanie binarne
        1. Drzewa czerwono-czarne
          1. Opis zagadnienia
          2. Zasady działania
          3. Przykłady działania
    • Zbiory
      1. Wydajność standardowych implementacji
        1. HashSet<E>
        2. TreeSet<E>
        3. LinkedHashSet<E>
        4. EnumSet<E>
      2. Poszerzone interfejsy zbiorów
        1. NavigableSet<E>
      3. Optymalizacja pracy na zbiorach
      4. Porównanie wydajności różnych implementacji zbiorów
    • Listy
      1. Wydajność standardowych implementacji
        1. ArrayList<E>
        2. LinkedList<E>
      2. Optymalizacja pracy z listami
      3. Porównanie wydajności list
      4. Opis struktur ArrayList i LinkedList
      5. Interfejs RandomAccess a wydajność przeglądania listy
    • Kolejki
      1. Wydajność standardowych implementacji
        1. PriorityQueue<E>
        2. LinkedList<E>
      2. Kolejki dwustronne
        1. Interfejs Deque<E>
        2. Wydajność implementacji kolejki dwustronnej
          1. LinkedList<E>
          2. ArrayDeque<E>
    • Mapy
      1. Wydajność standardowych implementacji
        1. HashMap<K,V>
        2. TreeMap<K,V>
        3. EnumMap<K,V>
        4. IdentityHashMap<K,V>
        5. WeakHashMap<K,V>
        6. LinkedHashMap<K,V>
      2. Poszerzone interfejsy map
        1. NavigableMap<K,V>
      3. Optymalizacja pracy na mapach
      4. Porównanie wydajności map
      5. Jak stworzyć cache
    • Stare kontenery (Java 1.0 i 1.1)
      1. Implementacje starych kontenerów
        1. Hashtable<K,V>
        2. Vector<E>
        3. Stack<E>
        4. BitSet
      2. Enumerator – Enumeration<E>
      3. Porównanie wydajności z nowymi implementacjami
    • Widok kolekcji
      1. Zalety używania
      2. Niebezpieczeństwa
      3. Optymalizacja
    • Collections - klasa pomocnicza
      1. Podstawowe funkcje
      2. Rola w optymalizacji
      3. Wykorzystanie w algorytmach
    • Wydajność a kolekcje odporne na wielowątkowość
      1. Wydajność kolejek wielowątkowych
        1. ConcurrentLinkedQueue<E>
      2. Wydajność kolejek blokujących
        1. BlockingQueue<E>
        2. ArrayBlockingQueue<E>
        3. TransferQueue<E>
        4. LinkedTransferQueue<E>
        5. DelayQueue<E extends Delayed>
        6. LinkedBlockingQueue<E>
        7. PriorityBlockingQueue<E>
        8. SynchronousQueue<E>
      3. Wydajność dwustronnych kolejek blokujących
        1. BlockingDeque<E>
        2. LinkedBlockingDeque<E>
      4. Wydajność list wielowątkowych
        1. CopyOnWriteArrayList<E>
      5. Wydajność map wielowątkowych
        1. ConcurrentMap<K,V>
        2. ConcurrentNavigableMap<K,V>
        3. ConcurrentHashMap<K,V>
        4. ConcurrentSkipListMap<K,V>
    • Tablice
      1. Zalety stosowania tablic
      2. Wady stosowania tablic
      3. Porównanie tablic z ArrayList
      4. Klasa pomocnicza Arrays
  6. JMH – microbenchmak framework
    • Czym jest JMH
    • @Benchmark
    • Przygotowanie projektu JMH
    • Uruchomienie JMH
    • Wyniki benchmarków
    • Dodatkowa konfiguracja benchmarków
      1. @Warmup
      2. @Measurement
      3. @OutputTimeUnit
      4. @Timeout
      5. @OperationsPerInvocation
      6. @BenchmarkMode
      7. @Fork
    • Współbieżność
      1. @Threads
      2. @Group
      3. @GroupThreads
    • Benchmarki parametryzowalne
      1. @State(Scope)
      2. @Param
      3. @Setup i @Teardown
    • Blackhole i bezpieczne pętle
    • Pułapki
    • Inne frameworki
    • Informacje dodatkowe (opcjonalne)
      1. Więcej o grupach
      2. Więcej o Level.Invocation
      3. Profilery
      4. @CompilerControl
      5. @AuxCounters
      6. Co jeszcze można wstrzyknąć
  7. Zarządzanie pamięcią
    • Java a zarządzanie pamięcią
      1. Jak działa odśmiecanie pamięci (Garbage Collector)
      2. Co gwarantuje Garbage Collector?
      3. Cykl życia obiektu
        1. Fazy cyklu życia obiektu
        2. Wyspy obiektów
        3. Metoda finalize
        4. Problemy i pułapki
    • Typy referencji a Garbage Collector i proces odśmiecania
      1. SoftReference
      2. WeakReference
      3. PhantomReference
    • Wycieki pamięci w Javie
      1. Powody
      2. Złe praktyki
      3. Unikanie
    • Garbage Collector - złe praktyki
    • Ograniczanie zajętości pamięci
    • Opcje strojenia Garbage Collector’a
      1. Parametry konfiguracyjne Garbage Collector’a
        1. Słaba teoria generacji
        2. Typy odśmiecania
          1. Minor Collections
          2. Major Collections
        3. Generacje obiektów
          1. Organizacja pamięci w Javie
          2. Młoda generacja
            1. Eden
            2. Survivor Spaces
          3. Stara generacja
          4. Pamięć permanentna
        4. Opcje podglądu pracy GC
        5. Parametry wydajnościowe Garbage Collector
        6. Wymiarowanie pamięci (generacji)
      2. Optymalizacja algorytmu odśmiecania
      3. Rodzaje GC
        1. Rodzaje
          1. Serial Collector
          2. Parallel Collector
          3. Concurent Collector
          4. G1
          5. ZGC
          6. Epsilon
          7. Shenandoah
        2. Zasady działania
        3. Preferencje
        4. Skalowalność
        5. Strojenie
        6. Problemy i rozwiązania
      4. Zing jako alternatywa
      5. Zalecenia przy wyborze GC
      6. Inne opcje strojenia GC
  8. Maszyna wirtualna Javy
    • Podstawowe tryby pracy a wydajność
    • Parametry wydajnościowe JVM
    • Przegląd wybranych macrobenchmarków
      1. JBB2015
      2. VolanoMark
    • Usprawnienia w Java
  9. Problemy z optymalizacją
    • Optymalizacje kompilatora a micro-benchmark
    • Micro-benchmark a GC
    • Uruchamianie wielu aplikacji
    • Przyzwyczajenia programistów
    • Optymalizacja za kompilator
    • Przedwczesna optymalizacja
    • Antywzorze związane z wydajnością
      1. Zachłanność
      2. Pośpiech
      3. Lenistwo
      4. Ignorancja

simple-steps.pl, simplesteps.pl są własnością SIMPLE Podbielski Michał