PJV Flashcards

(67 cards)

1
Q

Typovane vs netypovane jazyky

A

Typovane - oeprace typove zavisle
Netypovane - oeprace nezalezi na typech - libovolna operace na libovolnych datech (treba asembler)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Staticke vs Dynamicke typovani

A

Staticke - pri prekladu C, C++, Java
Dynamicke - za behu, Python, Lisp,

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Silne vs Slabe typovani

A

Silne - kombinace neni povolena, safe jazyky, Java
Slabe typovani - povolena kombinace typu, unsafe jazyky asembler

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Interpreter vs Prekaldac

A

Interperte - virtualni stroj, vykonava radky zdrojoveho koud - interpretuje je jeden za druhym - skriptovaci jazyky vetisnou - Python, Ruby, shell
- nema spustitelny soubor kompilvoany ale primo kod a musim na nej ostal virtualni interpret
- vetsinou jakasi kompilace do byte-codu ktery je pak vykonava - kompilace programu na moduly a propojovani modulu

Prekaldac - prekaldaa zdrojovy kod do spustitelne podoby, kompiluje na .o treba

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Obecny popis Javy

A

Obecny, vyssi, imperativni a objektove orientovany jazyk
- preklad je zamereny na prenositelnost byte-codu
- spousten ve vyvojovem prostredi (Java Virtual Machine)

kod pisu do .java souboru
- preklad do binarniho byte codu .class
- VM spousti byte code

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

JDK, JRE, JVM, JAR

A

JDK - Java development Kit, zakladni vyvojove prostredi, jakysi kontejner pro praci s Javou, obsahuje jazyk, knihovny, prekaldac javac, jeho soucasti je i JRE

JRE - java runtime environment - zaklad prostredi java pro spousteni programu, obsahuje virtualni storj Java

JVM - Java Virtual Machine, virtualni stroj pro spoustnei Javy programu

JAR - Java Archive, v podstate zip archiv kompilovanych java souboru pro jednodussi preposilani

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

IDE

A

Integrovane Vyvojove prostredi - prostredi ktere abstrahuje a integruje v sobe praci s obecnym jazykem. Tedy v sobe zabaluje zakladni funcke jazyka, jeho kompilace, ruzne vlastnoti a z pohledu uzivatele predstavuje podstatne jednodussi prostredi na vyvoj nez vsechno delat manuale

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Obecny popis OOP pristupu

A

“Metodicky pristup reseni vypocetnich problemu zalozeny na objektovem programovani”

Je to programovaci pristup ktery reseny problem dekomponuje na logicke celky a snazi se spravne navrhnout strukturu reseni podle jejich hierarchie a komuniakce, tak, aby vysledny program splnoval pozadavky a byl udrzitelnej rozsiritelnej znovupouzitelnej atd…

  • Abstrakce reseneho problemu zalozena na objektovem popisu
  • Dekompzoice problemu z pohledu cloveka na celky - objekty a tridy
  • Objekty mezi sebou komunikuji a zasilaji zpavy a reaguji
  • Objekty rpedstavuji nozniu dat a operaci

OO analyza - se zabyva modelovanim, rozborem a popisem problemu
- abstrakce ralneho sveta nezavisla na jazyku

OO navrh - resi uz analyzovany problem
- pridava Software uroven, treba jazyk nebo nastroje

spolecnym cilem je rozbor reseneho problemu, jeho abstrakce a dekompozice na objekty a softwarova implementace OOP

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Zapouzdreni

A

Encapsulation - mnozina sluzeb ktere objekt nabizi navenek, jinak zatajuje, schovava vnitrni stav a funkce objektu, chceme minimalizovat pristup k hodnotam objektu. Zprostredkovava se to pomoci interface objektu, tedy co objekt poskytuje navenek

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Stav, Chovani, Identita objektu

A

Stav - mnozina jeho hodnot - data
Chovani - urceno stavem a funckemi
Id - rozlisitelnost uniakni kazdeho objektu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Vnitrni Struktura Objektu

A
  1. Datove struktury
    - vnitrni hodnoty, data, promenne, datove struktury
    - urcuji stav a vlastnostni objektu
    - jsou tajne, zapouzdrene uvnitr objektu a jejich pristup zvne je omezen
  2. Metody
    - urcuji chovani objektu
    - definuje opreace nad daty objektu bud pro vlastni stav nebo poskytuje komuniakc mezi dvema objekty

Metody objetku tvori jeho rozhrani - tedy komuniakce pozue skrz ne, pouze skrz verejne public poskytovane interface objektu, nesmi se pristupvoat primo na jeho hodnoty…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Klicove slovo static pro promenne tridy

to same pro metody

A

Jsou spolecne pro vsechny isntance tridy. Tedy je zakladni mnzoina dat kterou bude mit kazda isntance tridy

Staticka metody tridy je genericka pro vsechny isntance tridy, tedy hlavni funkcionality tridy se zde specifikuji, pracuji pouze nad statickymi promennyim
- je to zakladni mnozina operaci, kterou by mela poskytovat kazda instance
- jdou volat na abstraktni tride bez konkretni instance

Naopak datove polozky uz jednotlivych isntanti jsou privatni, pouze lokalne vytvorene, jsou to promenne instance, jsou vyrobeny v konstruktoru a kazda instance muze mit svoje ruzne, nezavisle vuci jinym objektum

Metody isntance uz predstavuji konkretni operace konkretni intace a jde t volat az na konkretni instanci

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Modifikatory pristupu promenne

A
  1. Public - verejne ze vsech trid
  2. Private - pristupne pouze v ramci teto tridy
  3. Protected - pristuone z teto tridy a vsech odvozenych
  4. Default - v ramci package viditelne
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Je konstruktor defualtne public enbo rpivate?

A

Public, protoze chceme vytvrate nove objekty tridy. tedy new Class(…) nam vytvorit novou instanci tridy Class.

Private konstruktor zakaze vytvrateni techto isntanci
- treba v priapde singletonu chceme vytvorit pouze jeden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Immutable objekty

A

Takove, ktere se v prubehu programu nesmi/nemei

oepratorem final a private

Neni mozne tento objekt zmenit, je nutno vytvorit novy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Primitivni a slozite datove typy v Jave

A

char dedi od Char
bool od Boolean
int od Integer
long od Long
float od Float
double od Double
String neni primitivni typ

nadrazene tridy jsou immutable (proto string je immutable) a poskytuji treba slozitejsi metody nad typem

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Ctyri hlavni zasady OOP

A
  1. Abstrakce - realny svet dekomponujeme a abstrahujeme do obecnych sablon abstrakci - trid
  2. Zapouzdreni - objekty trid maje utajene informace a pouze poskytuji navenek interface pro komunikaci
  3. Hierarchie - hierarchie trid od nejvic obecnych spolecnych vlastnsoti po konkretnejsi detaily
  4. Polymorfismus - objekt se stehynm rozhranim muze zastoupit podobny objekt
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Polymorfismus

A

Vlastnost, ktera umoznuje nam pojemnovat nejakou metodu identicky na nejvyssi urovni, ale na konkretnich implementacich se muze naprosto lisit (treba trida Shape ma metodu area, ale Square a Circle ji maji uz jinak naimplementovane)

Bud:
pres dedicnost - viz vyse
nebo interface a abstraktni triy
nebo override metody (prepis metody na jinou implementaci

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Dedicnost

A

Umoznuje hierarchicky system kdy mame obecnou sablonu se zakladni vybavou kterou predavame vsem potomkum a pak potomci ji mohou urpesnit a dale predat atd…

Dedicnost je zakladem polymorfismu a umoznuje psat znovupouzitelny kod

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Overriding vs Overloading

A

Overriding - metodu nadrazeneho predka prepisu na jinou implementaci ale ma stejny nazev a parametry

Overloading - vytvorim novou metodu se stejnym nazvem ale jinymi parametry (pocet i typ se pocita)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Jak spravne rozlisit co ma byt predek a co potoem?

A

Musi logicky platit ze predek ma VSECHNY SPOLECNE ZAKLADNI vlastnosti a zaroven

“Vse co plati pro predka, musi identicky platit i pro potomka”

Pomucka “is-a?” otazka

Je usecka potomem bodu -> NE
Je bod potomkem usecky - > ANO -> potomek

Je obdelnik potomek usecky -> NE

Je obdelnik potomekm ctverce nebo ctverec potomkem obdelniku?
- vse co plati pro obdelnik automaticky plati i pro ctverec, ctverec je tedy pouze specialnim pripadem obdelniku se stejnymi stranami ale muze ouzit vsechny jeho funkce (nastavime atributy v konstruktoru)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Kompozice a agregace objektu

A

Pokud nejaky objekt ma atribut jinou tridu - jedna se o skladani objektu - agreages, tedy vazbu “has-a”

Je to jakasi hierarchicka struktura ale neni to dedicnost - pouze vlastnim jiny objekty ale neprijimam jejich zadne vlastnosti

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Trida Object

A

Je to nejvyssi herarchicka trida v Jave, vsechny ostatni tridy od ni dedi deafutle (scohvany priznak class A extend Object {}).

Implementuje nekokik metod spolecnych pro jakoukoliv triud v Jave:
- clone, to string, comapre, equal, get hash code, get class…

Je to super/nad trida vsech ostatnich

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Polymorfismus objektů

A

Polymorfismus objektů - Nechť třída B je podtřídou třídy A,
pak objekt třídy B můžeme použít všude tam, kde je očekáván
objekt třídy A

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Polymorfismus metod
yžaduje dynamické vázání, statický a dynamický typ třídy Nechť třída B je podtřídou třídy A a redefinuje metodu m() Proměnná x statického typu B, dynamický typ může být A nebo B Jaká metoda se skutečně volá pro x.m() závisí na dynamickém typu Tj podle typu redefinovane promenne x zavolame pretizenou metodu m
26
specifikator final v pripade tridy
Zakazuje to prepisovani metody v potomcich, tedy abstraktni trida nam naimplementovala metodu a zadny potomek ji nemuze modifikovat
27
Abstraktni trida a abstraktni metoda
Je to jakasi nejobecnejsi nejabstraktnejsi trida, ktera nam pouze definuje metody, ktere bude mit, ale nema zadnou implementaci (tedy ma puze abstract emtody) Kazdy potomek MUSI overridnout tyto metody sam kazdy zvlast. Abstraktni trida nejde vytvorit, a pouze specifikuje seznam metod potrebnych k implementaci - od ni musime dedit konkretnejsi tridy
28
Interface vs Dedicnost
Trida muze dedit pouze od jednoho predka (ale treba na vice urovnich) a splnuje to logickou hierarchii. Interface resi problem "dedicnosti" od vice druhu, tedy mohu mit class A implements B, implements C,... Interface je neco jako abstraktni trida, ktera povoluje vice dedicnsoti. Tedy predepisuje POVINNE METODY ktere musi obsahovat trida, ktera ji implementuje. Je to jakasi sablona zakaldni mnoziny metod, ale uz neresi vnitrni implementaci, kazda trida si to prepise po svem Abstraktni trida aslespon castecne uchovava logicky vztah mezi odvozenymi ptomky, neco jako rodic, ktery ale neresi implementaci. Naopak interface nema skoro zadnou logickou vztah s potomky, pouze predepisuje ze pokud ode me nekdo bude implementovat, tak musi splnit tuto a tuto metodu
29
Single/Double Dispatch
Single dispatch - dynamicka vazba a vyhodnoceni typu objektu (rozhodnuti jaka implementace metody objektu se zavola) dynamicky za behu programu. Tedy mohu nekolikrat volat Class.X.do_step() a podle classy X se pokazde zavola jina implementace do_step() Toto se vuziva kdyz se rozhodujeme pouze podle jednoho objektu (treba pouze podle hrace) Co kdyz se potrebujem rozhodovat podle dvou a vice kriterii naraz aniz bychom modifikovali cely program? Pouzijeme double dispatch - je to akumulace single dispatche, kdy nejdriv se rozhodnem podle jednoho objektu a pak uz v ramci rozhodnuti se rozhodneme podle druheho objektu - je to tedy jakysi nabalovani single-dispatchu za sebou kde delame vetveni podle dynamicky zjistenych typu. Da se provadet i pomoci zjisteni typu jako (if instanceof XY) then... ale Single/Multi Dispatch je elegantni navrhovy vzro ktery predchazi hromadi kontorly typu trid a umoznuje jednoduche rozsireni naseho koud
30
Vyctovy typ enum
Pokud mame seznam nejakych omezenych hodnot, ktere chceme udrzvoat v konstatni strutkrue, bud zavedu tolik KONSTANT ale je to nebezpecny typove a nemuzu zamezit 100% kontrolu hodnot a typu Java nabizi enumeration typ, ktery se definuje jako classa ale se slovickem enum. public enum Enum {A, B, C...} Kde misto typu promennych pouze vypisu jejich nabyvane hodnoty. Uz to v sobe ma nejakou functionality porovnani, kontrol a omezuje mozne hodnoty, uz mi tam tedy nikdo neprida nejaky nesmysl Muzu s tim rovnou pracovat ve switch case Je to singleton, pouze jedna instance a pakl se na ni odkazujou vsichni
31
JFC - Java Collection Framework, Kolekce (kontejnery v Java
- Mnozina trid a rozhrani implementujici sadu znovupozutelnych datovych struktur - definuje datove struktury - tedy kontejnery nebo kolekce - JFC poskytuje unifikovany ramec pro reprezentaci a manupulaci s daty Kolekce - je objekt, ktery obsahuje mnozinu prvku v jedine datove strukture, zakladni dve: - pole - seznamy JFC - poskytuje nejenom samotne datove struktury (vetsinou abstraktni) ale uz je to i chytrejsi system, ktery umi v ramci strukltury provest nejake vypocty nad daty uz sam, tedy ma implemeotvano vbudovane metody nejake, ktere nam usnadnuji pristup - treba len(), sum(), min/max... - vetsinou slozitejsi abstraktni skupiny: - mnoziny, seznamy., fronty, mapy, tabulky... - realizuje se pomoci trid a rozhrani - zjednodusuje a hlavne UNIFIKUJE pristupy a metody v ramci mnoha typu kolekci Zakladni pratrida je Collection, od ni dedi vsechny sotani, treba Set a List, pak SortedSet a LinkedList, Array... Prochazet kolekce muzime bud ve forc cyklu, nebo for-each, ktery jen zabaluje v sobe iterator, nebo pomoci primo iteratoru
32
Iterator
Objekt umoznujici prochazeni kolekce, nutna implementace hasNext()? a next(), tedy boolean zda je next anebo vraceni dalsiho prvku Interface Iterator Tedy iterator si zavolam primo z kolekce jako: Iterator it = collection.iterator() while (it.hasNext()) {print it.next()} tedy se postupne sam umi posouvat pres ukazatele a indexy Rozhrani Iterable je primo navazano na nejakou tridu, kterou ozacim jakoi Iterovatelnou, tedy musi splnovat implmentova potrebne funkce hasNext a next a mit v sobe iterator
33
Prehled hierarchie kolekci
Iterable -> Collection -> Queue, List -> Priority QUeue, Linked List, Array List, Vektor -> Stack... Collection je nejobecnejsi a ma hlavni metody, ktere se mi muzou hodit od strukturyz jako: empty, size, remove, find, contains, addm clear... Set - kolekce bez duplikatu, vyzuva equals a hashCode - HashSet v JDK List - collection kde mohu sekvence nebo indexova prochazet prvky podle jejich indexu, vetsinou algoritmu funguji prace na List, ale ma statickou velikost ArrayList - umoznuje automatickou velikost pole - tedy dynamicka struktura - velmi dobry vykon - na nem zaklada LinkedList Map - dictionary
34
Genericky typ
Nam umoznuje specifikovat, jaky typ objektu budeme vkladat do Kolekce ArrayList persons = new ArrayList(); Toto nam umoznuje statickou kontrolu kodu, jinak bychom museli pokazde pretypovavat pro kadyu pristup do kolekce aq museli furt klidat co jsme tam vlozili a co vyndavame Genericky typ nam povoli vkladani pouze jednoho druhu typu
35
Genericky parametrizovany typ
Pokud zavedeme treba List resources -> tedy nespecifikujeme typ dorpedu, ale pouze definujeme jak se s typem bude zachazet, implementujeme k tomu metody aniz bychom potrebovali znat realny typ. Genereicka metoda: public print(T object) ... tedy na zaklade typu co nam prisel vratime stejny typ pokud to nemuzeme vedet dopredu - tedy dynamicke rozhodovani o typu, nezalezi nam na nem a implementujeme nezavisle
36
Zakladni deleni vyjimek podle reakce a dulzeitosti
1. RuntimeException - programatorske chyby, nedostatek kontroly, bugy a prekley.. - treba odkazovani mimo pole, deleni nulou, preteceni, ekontrolovany vstup atd - musime na ne reagovat, muzeme a dokazeme ale nejlepe predejit 2. Exception - vetsinou chyba, na kterou musime reagovat a JAva ji sama vynucuje - treba I/O operace, se soubory a - IOException, FileNotFoundException 3. Error - zavazna chyba na kterou nemuzeme reagovat - pad celeho JVM systemu - zavazny SW error ze strany Javy a IDE Chybu bud zachytime a vypiseme, nebo zachytime a posleme nahoru (throws), nebo zachytime a snazime se opravit Snazime se vyjimku resit co nejbliz mistu vyskytu, RuntimeError ani neproapgujeme a spis orpavime program. Exception throws anhoru pouze tehdy, kdy nema smysl porkacovat ve vypocty bez nejakje hodnoty. Tedy se snazim minimalizovat posilani chyb nahoru nejhur az do mainu
37
Kontrolovane (synchronni) vs Nekontrolovane (asynchronni) vyjimky
1. Kontrolovane - musi byt explicitne deklarovnay v hlavice - tridy Exception - tedy vetsinou na ktere reagujeme a osetrujeme hned 2. Nekontrolovane - Error a RuntimeException - vetsinou preposilame dal a neresime
38
Vlastni vyjimky
Mohu zalozit novou tridu vlastni vyjimky, ktera bude dedit od treba RuntimeException a treba vypisovbat svoji vlastni chybovou hlasku, neni treba ji osetrovat Pokud budeme odvozovat od Excpetion tak je to nutno osetrit, tedy musime explicitne deklarovat throws u metody ve ktere ji budeme pouzivat V metode muzeme reagovat an ruzne vyjimky podle jejich trid a odvozeni, tedy nekolirkat catch(), catch() catch()...
39
Struktura a hierarchie vyjmek
Throwable -> Error, Exception -> IOException, RuntimeException -> ArithemiticException, NullPointerException...
40
Blok try-catch-finally
Finally - blok kodu ktery se proede VZDY - tedy bud po try (ktera ma i RETURN) - nebo po catch - tedy treba pro uvolneni alokovanych zdroju, ukonceni vlaken, uzavreni souboru atd... Je to kus kodu ktery se musim provest nezavisle na chodu metody
41
Pristupy k souborum a souboruy obecne
Sekvencni - postupny po bajtu Nahodny - adresovatelny, jako indexovani v poli Soubor bud: 1. Textove - primo citelne a jednoduse edtovalne 2. Binarni - zakodoane, potrebujeme specialni program na to nebo dekodovani Textovy soubor - posloupnost znaku clenena na radky, EOL, EOF, znaky jsou jenom bajty Bianrni soubor - posloupnost bajtu zakodovanych, do tohoto souboru muzeme zapisovat bajt, jednoduche promenne, pole, cele objekty ale vetsinou ne jen nejaky text. Jen programator musi spravne rozlusist praci se souborem, sam soubor neobsahuje informaci o vnitrnich datech
42
Realizace prenosu dat do souboru a z
Pres vrstvyL Program -> posloupnost datovych typu -> posloupnosty bajtu -> soubor a naopak Toto umoznuje vrsdtvit, pridavat dalsi zpusoby zpracovani nebo kontroly dat
43
Sekvencni pristup k souborum
Ctu postupne jednotlive bajty - behem toho muzu data rovnou intrepretovat (treba 4 bajty = integer...) - kurzor ukazuje aktualni pozici - posouvmam kurzor o zadany pocet bajtu - nejde se vracet, pouze na zacatek - zapis pridava na konec souboru nove bajtyP
44
Primy/Nahodny pristup k souborum
Muzu se obracet na libovolne misto v souboru - jako podle indexovani v poli - kurzor nastavuju libovolne - vhodne pokud znam vnitrni strukturu souboru a nemusim to hledat sekvence (treba dataframy nebo csv atd...)
45
Proudy Streams
Nastroje pro prenos informaci nejenom souboru ale i vsech jinych medii ktere jsou schopne generovat data jako posloupnost bajtu Tedy je to jakysi kanal pro generovani/prenos bajtu, znaku, objektu atd... Vice vrstev: 1. Otevernei bajtoveho produu 2. Otevereni datovych typu proudu 3. Filtace dat podle pozadavku
46
Standardni Streamy v Jave
1. Bajtove - FileInputStream - bud pro primitivni typy - nebo objektovy 2. Znakove - FileReader/Write - BufferedReader - s buffrerovanim - StreamTokenizer - pro tokenizaci 3. RandomAccessFile - pro nahodny pristup 4. File - standardni reprezentace souboru v jave vsechno v baliku java.io
47
Serializovatelnost
Je to interface Serializable, ktery ale nepredepisuje zadne emtody, pouze slouzi jako flag pro seskaldani progamu ktery rika, ze tento slozitejsi objekt se muze seralizoat Serializace - schopnost byt zapsan a prenese treba do souboru, tedy metoda, jak nejaky slozitejsi komplexni objekt zapsat do souboru aby sel uschovat, prenest nekam a zpatky precist a poskladat znovu tens amy objekt. Tedy je to proces ukladani a zpetna rekonstrukce. Je to apriori podprovoanym pro primitivni typy a stringy Pro serializaci dat musi byt vsechna serializovatelna treba pak mam public class Person implement Serializable... a nekde ho zapisu do souboru jako: file.writeObject(Person...) nebo to samy read return (Person) file.readObject()... musi throws IOException
48
Scanner pri cteni ze souboru
Kdyz otevirame nejaky souborovy stream tak na jeho cteni muzeme pozuti klasicky scanner jakopro STDIN: FileInputStream in = new FileInputStream(file) Scanner scan = new Scanner(in) while (scan,hasNext) read...
49
Vytvoreni vlakna v jave
1. Bud dedenim od THread: public class Worker extends Thread { private final int numberOfJobs; public Worker(int id, int jobs) { super("Worker " + id); } public void run() { doWork(); } } Metodu run ale nespoustime primo ale pomoci zabalujici metodu start(): Worker thread = new Worker(1); thread.start(); //new thread is created System.out.println("Program continues here"); Tedy vytvorili jsme novy vlakno, pak ho spustili a asynchronne pokracujeme dal 2. Nebo pomoci interface Runnable - taky ma metodu predepsanou run() - pro sposuteni ale musime vytvorit Thread, kam "vlozime" runnable tridu a spustime vlakno: WorkerRunnable worker = new WorkerRunnable(1, 10); Thread thread = new Thread(worker, worker.getName()); thread.start(); Obecne metody vlaken: getName isAlive join() - pozastavi volajiic vlakno dokud prislusne vlakno neni ukonceno sleep() pozastavi vlakno na urcenou dobu yield() - predani rizeni jinemu vlaknu
50
Vytvoreni poolu vlaken a postupne spousteni
- vytvor pole vlaken - pridej tam workery - spust workery JVM automaticky ceka na ukoncein vsech vlaken po tom, co dobehlo hlavni vlakno - muzeme tomu zabranit nastavenim vlakna do Daemon rezimu , pak se nebude cekat na ukonceni tohoto vlakna - napak join vynuti cekani na vsechna vlakna
51
Zastaveni cinosti vlakna
Jediny spravny zpusob - zaslani signalu s zaodsti o zastaveni - tedy vlakno musi mit v sobe implementovano nejakou promennou nebo podminku zastevni, kterou mzueme nastavit na true. tedy z pohledu vlkana je to: public vod run() - dokud mas co delat ve fronte jobu - zkontroluj stop podminku: - pokud true -> break a ukonci cinnost - pokud false -> pracuj dal Nastaveni stop promenne spravne delame pomoci specialni metody shutdown(), ktery je obycejnym setterem Promenna stop se musi zavet jako volatile - priznak, ze se promenna muze menit z ruznych vlaken zaroven - NEZARUCUJE TO ATOMICITU ale spis ihned viditelnost promenneze vsech vlaken anraz. Predejde to tomu, ze si kazde vlakno uchova ve vlastni cache svoji lokalni hodnotu stop a pripadna zmena se neuvidi. Volatile - zajistit, ze zmena promenne je ihned viditelna v pameti jinych vlaken a ze tato hodnota muze byt upravovana z ruznych vlaken
52
Prevence race condition v Jave
Pouzijeme tzv monitor - zamek, jehoz vlastneni nam povoli vstup do kriticke sekce mezitim ostratni cekaji. v roli monitora muze byt jakykoliv objekt. Deklaruju synchronized kritickou sekci do ktere vlozim monitor a prvni vlakno co to vlastni k tomu ma pristup (ma pod kapotou lock unclock atd...) Object monitor = new Object(); synchronized(monitor) { //Critical section protected //by the monitor } Muzeme synchronizovat celou metodu jako: public synchronized void function() cimz davame ctenari hned najevo ze je metoda synchronizovana a pouze jedno vlakno ji bude moct vykonavat. Jako monitor se zde defaultne pouzije samotna trida metody, tedy this (pod kapotou) Po odejiti z kriticke skece se vola notify pro cekajiici vlakno. notifyAll probouzi uplne vsechna vlakna pozastavena metodou wait() // teedy i necekajici vlakna na primo nas monitor ale uplne vsechna
53
Thread pool
Dopredne vytvoreni tymu N vlaken, ktera cekaji na prichozi praci. Usetri to rezii vytvareni furt novych vlaken pri prichozi praci Tedy v poolo je vlakno zalozeno, pak ceka na praci, dostane prace, vykona ji a vraceno zpet do poolu. Naopak pri dynamickem zakladani vlaken je overhead rizeni na vytvoreni, provoz a pak ukonceni, tedy vlakna nerecyklujem V Jave treba ThreadPoolExecutor Vraci Future object, ktery slibuje vysledek a anvratoovu hodnotuVni
54
Vnitrni tridy
Logické seskupení tříd, které se používají jen v jednom konkrétním místě Třídy posluchačů jsou využitelné pro producenty v GUI Efektivita kódu Princip „pomocné” třídy Princip zapouzdření (třída B je vnitřní třídou vnější třídy A) Třída B má přístup ke všem členům třídy A, které však mají být nepřístupné jiným třídám (jsou deklarovány jako private) Je-li B vnitřní třídou A, pak členy private třídy jsou přístupné i třídě B. Třída B je skryta mimo třídu A Metody třídy A nemají přístup k proměnným a metodám třídy B Zvýšení čitelnosti kódu a zlepšení údržby kódu
55
Anonymni trida
Lambda vyrazem - kdy nepotrebujem pojmenovavat nejakou instanci ale jen zadefinovat jeji chovani Treba v pripade pridavani ActionListeneru na tlacitko - zavedu anonymni tridu s lambda funcki ktera prepisuje chovani hned na miste
56
Vykon aplikace a profilovani
Vykon obecne zahrnuje business pozadavky klienta: - tedy vyuziti pameti - doba spusteni - doba vypoctu - responzivita apliakce - skalovatelnost pro velke vstupy Merime vykon bud: Monitorovanim - sledujeme chovani apliakce behem vyvoje, analyzujeme chyby, tedy jen pozorovani vnejsi Profilovani - jiz zasahujeme do behu aplikace, merime primo za behu, treba dobu zpracovani funkci, nebo pozuita pamet, nebo pocet vlaken atd..., tedy pozorovani vnitrni Ladeni - oprava implementace na zaklade monitorovani a profilvoani Profilovat muzeme treba pri vysokem zatizeni CPU, nebo pameti, nebo sitove komuniakce - hledame uzke hrdlo treba, enbo memory leaks, nebo prezamkovani vlaken...
57
Hlavni tri modely vicevlaknove hierarchie
1. Boss-Worker - jedno hlavni vlakno po obdrzeni prace ji presmeruje na worker vlakno a zase ceka 2. Peer - rovnocenna vlakna, zadny boss, proste dostane prace a jede 3. Pipeline - jako v procesoru APO, tady paralelne mame velky proud dat a na kazde casti pracuje jednotlive vlakno - predavaji si ho jako producent-konzument
58
Reentrantni funkce a THread-safe funkce
1. Reentrantni - v jedinem okamziku mzue byt stejna funkce vykonavana soucasne - tedy vice vlaken najednou - je to piuze reader funkce, ktera nezapisuje, tudiz nepotrebuje ani primititva 2. Thread-safe funcke - funkci je mozno volat z vice vlaken soucasne - pomoci synchronizacnich primitiv - tedy zapisuje i do pameti
59
Sprava pameti a garbage collector
Data (objekty) se ukladaji na heap - Garbage Collector - pravidelne uklizeni heapu, tedy pokud byl nalezen objekt, ktery uz neni v ramci kodu potreba, ke kteremu se nepristupuje, nebo alokovana pamet, nebo objekt, na ktery se uz neukazuje -> uklidit - zabaluje vsechnu manualni .clear() funkcionalitu nebo dealoc... Stack - lokalni promenne, docasny pametovy prostor, lokalni refernce, pro kazdou funcki se alokuje svuj vlastni stack ktery se nabaluje na vsechno pred tim, tedy pokud ve funkci zavolam jinou funkci tak na svuj aktualni stack prihodim dalsi cizi stack nove funcke atd... Objekty nejsku ukladany primo na stacku, ale na halde, ve stacku je pouze odkaz na ne Tedy pokud ve funkci pristupuju k objektu, tak si na stacku zalozim odkaz na haldu. Jakmile funcke skonic a uz nepouziva stack -> tak se zrusi i referennce do haldy, tam mi ale zustal sedet uz nereferencovatelny objet -> musim ho vycistit Tedy jamkmile funkce dobehne -> stack se zrusi -> musim vyklidit i alokovanou haldu Heap - spolecny pametovy prostor, ukladani objektu, ma na starosti GC
60
Garbage collector faze a obecne
1. Oznaceni - markovani objektu na halde vhodnych k odstraneni 2. Uvolneni pameti - smazani oznacenych objektu - pametovy alokator si pamatuje, kde se uvolnila mista pro pripadnou dalsi alokaci 3. Zkompaktneni haldy - tedy odstrani se mezery v pameti - vsechno se zcucne dohromady pro efektivnejsi alokaci
61
Generacni GC
Vetsina objektu zanika brzy po vzniku. Nektere objekty ale mohou byt dlouho nazivu a pouzivany a pri jejich hromadeni muze dochazet pamet. Pamet tedy rozdelime na tri logicke celky 1. Young generation 2. Old Generation 3. Permanent generation a v kazde fazi muze probehnout GC: 1. Minor garbage collection - pri zaplneni Young Generation casti - "prezivsi" neodstranene objekty jsou presunuty do Old Generace 2. Major GC - pri zaplneni OldGenerace 3. Full GC - kontrouje vsechny oddily Tedy v ramci Javy apliakce ve JVM bezi 1 GC. Aby nemusel pokazdy prochazet celou pamet a prohledavat, tak se pamet rozdeli na 3 logicke prvky podle "dlouhodobosti" objektu. Tedy aby nejcasteji cistil pouze young genreation, o neco mene casteji old generation a jen jednou za cas cely heap. Tedy pri naplneni young genration -> cisti pouze young genration (minor collection), pri zaplneni old genration -> cisti jen old genration cast (major). Jednou za cas vycisti i cely heap. Dela to tedy nezavisle na jinych celkach Nove objekty se zakaldani v tzv Edenu - tedy v young generation casti. Pokud pri Minor cisteni nebyly odstraneny, tak se presunou do Old generation (aby uvolnily misto v Young pameti dalsim objektum,ktere budou pripadne rychlejsi na usmrceni
62
Paralelni vs Seriovy GC
1. Seriovy - bezi na jednom vlaknu, je to stop-the-world metoda - tedy program se zastavuje na nejakou dobu a probiha uklid - vhodny pro malou apliakci a jeden CPU 2. Paralelni - vice thraedu behem uklidu - rychlejsi nez seriovy - furt ale stop-the-world
63
Concurrent vs Stop-The-World GC
1. Concurrent - bezi zaroven s programem - GC probiha ve stejny moment jako program - muze byt mene efektivni - ale lepsi latence a reakce apliakce 2. Stop-The-World - pozastaveni - horsi latence - efektivnejsi ale z pohledu uklidu
64
Concurrent Mark Sweep CMS GC
GC zaměřený na nízkou latenci – vhodný pro interaktivní nebo realtime aplikace (např. webové servery). Běží současně (concurrent) s aplikací, aby minimalizoval pauzy. Nevýhody: Fragmentace paměti – objekty se nepřesouvají, takže vznikají „díry“ (jako u malloc/free). Postupně byl nahrazen GC jako G1.
65
Garbage First G1 kolektor
- moderni - default pro novou Javu - paralelni - ma predvidatelne pauzy - rozdeluje pamet na regiony - nejnizsi latence
66
Escape Analyza
Metoda, ktera nam umozni zoptimalizovat kod tak, ze JIT (Just-In-Time) komptilator behem prekladu byt-codu na storjovy kod zjisti, zda nejaky zalozeny objekt v ramci metody se bude pouzivat jenom v ni, nebo bude unikat ven (escape) 1. Pokud se zjisti, ze se objekt pouzije pouze v metode - vytvori se na stacku -> neni potreba zadny GC na halde a navic neni potreba synchronizovat metodu - tedy je to pouze lokalni objekt 1.5. Ojekt neunika dal ale predava se jako argument jinym funkcim - 2. Pokud bude unikat ven -> musi se vytvorit na halde a zapne se GC - Tedy je to optimalizacni emtoda, ktera nam dokaze dopredu rozhodnout, kde vytvorit objekt podle jeho potreby a to nam mzue velmi zrychlit program odebranim zbytecne rezie GC na halde.
67