ASS

Z OI wiki

Přejít na: navigace, hledání

Obsah

1. semestr 2. semestr 3. semestr 4. semestr 5. semestr 6. semestr
Povinné předměty DMA ¤ LAG
PR1 ¤ RPH
ALG ¤ BP1 ¤ LGR
MA2 ¤ PR2
JAG ¤ PSI ¤ SPS APO ¤ BP2 ¤ FYZ OPT SZZ - LS 2012
Inf. a poč. vědy NUM ¤ OSS DS ¤ FLP ¤ ZUI RPZ
Počítačové syst. EAM ¤ EM DSP ¤ OSD PKS ¤PSR ¤NVS
Softwarové syst. OSS ¤ SI ASS ¤ DS ¤ TUR WA1
Volitelné předměty ACM ¤ EPD ¤ ET1 ¤ FI1 ¤ HI1 ¤ HSD ¤ HT1 ¤ IA+AZK ¤ MME ¤ MMP ¤ MPS ¤ PAP ¤ PPR ¤ PRS ¤ RET ¤ SOJ ¤ UFI
Grafický minor

PGR ¤ MVR ¤ KMA ¤ MGA ¤ GRT


Info o předmětu

  • Přednášející: Martin Rehák, David Šišlák
  • Cvičící: Jan Stiborek, Ján Jusko


Pravidla předmětu 2013

V příštím roce se mohou změnit! Předmět je dost "nestabilní" a vše se vymýšlí za běhu.

Semestr (zápočet)

V semestru se dalo získat 40 bodů. Z toho 25 minimum na zápočet. Dalších 15 započteno ke zkoušce. K zápočtu splnit zadání semestrálky a odvzdat všechny úkoly -> pak by neměl být problém. Viděl jsem však, jak jednoho nepustil, protože měl prostě málo bodů, druhou šanci mu nedal (Stiborek).

Každé cvičení nějaká úloha, typicky 14 dní na vypracování. Úlohy 2013/LS:

  1. Reversable linked list, vlastní implementace
  2. Paralelní merge sort
  3. Composite pattern
  4. Object pool (Vlastní implementace java.util.concurrent.BlockingQueue)
  5. Worker pool (Vlastní implementace ExecutorService)
  6. Semestrální úloha: WebServer (za použití ExecutorService, nebo vlastního object poolu)

Zkouška

Zkouška dělena na 2 části: Teoretická x Praktická. Na zkoušku si přineste papíry!

Teoretická: viz termín 2013. Otevřené otázky (žádné abcd).
Varování: vybírají i otázky, které by jste nečekali. Minule prý na poslední termíny dali i Služby (services).

Studijní materiály

Slajdy předmětu "Návrhové vzory" z MFF UK: http://ulita.ms.mff.cuni.cz/pub/predn/NPRG024/DesignPatterns.rar (tisantom)

Úkoly

Úkoly na Google drive

Semestrální práce

RxJava neblokující statický HTTP server

Zkoušky

Zkouška 12.6.2015

Návrhová část Programovací část

Pro úspěch v programovací části bylo potřeba dát první dvě úlohy. To pak bylo za 35 bodů a ta třetí za 15 bodů.

Zkouška 6.6.2014

Dvě části - první teorie/architektura a druhá programovací. Ze semestru šlo získat maximálně 40 bodů, z toho nad limit pro zápočet (25) se přenášely ke zkoušce. Dopředu jste si tedy mohli ke zkoušce přinést 15 bodů.

První část - teoretická - max 35 bodů

 Úkolem bylo navrhnout systém pro sledování zásilek na po celém světě. Každá zásilka má na sobě tag a každý kontejner (auto, letadlo, sklad, ...) 
 odesílá každou sekundu informace o obsažených zásilkách (id zásilky, pozice, timestamp). Dále bylo třeba volat zadané API pro zjištění, 
 zda je zásilka v daný čas na správném místě a chybu detekovat v relevantním čase. Už nevím, jestli to bylo přímo v zadání, ale systém bylo 
 třeba navrhnout tak, že kontejnery posílali informace do lokálních nodů a ty pak dál do globálního. Určitě není potřeba, aby zasílání probíhalo 
 tak často, jako se dostávají data z kontejnerů. Pro posílání dat pak zvolit vhodný způsob (SAOP či REST).

Přesnější zadání si nevzpomenu, bylo tak několik otázek na to, proč a jak jste danou technologii či přístup zvolili.

Druhá část - programovací - max 50 bodů V druhé část zkoušky se rozšiřovala semestrálka (webserver).

 1. přidat možnost nastavení portu a adresáře webu pomocí parametrů při spuštění [5 bodů]
 2. doplnit webserver tak, aby byl schopen zpracovávat také požadavek PUT (nahrání obsahu), 
    specifikace PUT viz. http://www.w3.org/Protocols/rfc2616/rfc2616.html [20 bodů]
 3. napsat jednoduchý proxy server, který bude přijímat HTTP požadavky, ty předá dvěma instancím webserveru a pokud se od obou vrátí stejná 
    odpověď, pošle ji klientovi, jinak nějaký chybový HTTP kód (5xx) [25 bodů]
 +. upravit bod 3. tak, aby proxy fungoval pro libovolný počet webserverů daných např. parametrem při spouštění [5 bodů]

S ohledem na tuto část zkoušky doporučuji psát semestrálku poctivě OOP a co nejmodulárněji, úpravy na zkoušce pak byly mnohem snazší. Řekl bych, že se podobný způsob zkoušky může opakovat, protože během semestru a ve zkouškovém měli skluz i s informacemi o zkoušce, takže takovéto zadání pro ně bylo jednodušší.

Zkouška 31.5.2013

Dve casti: Znalosti, Architektura a navrh. Maximalne 85 bodu ze zkousky + max. 15 ze semestru, min. 50 na E.

Prvni cast - znalosti - az 40 bodu

 Bylo zde 4 casti, v kazde bylo 4 otazky. Napriklad: jak zajistit, aby instance nejakeho objektu ve tride nebyla automaticke serializovana?
 1. část: serializace a externalizace
 - jakými dvěma způsoby zajistit, že se field neserializuje?
   1. označit ho jako transient
   2. přidat field serialPersistentFields (Přednáška 14, slide 4)
 - jak se liší serializace nadtřídy v serializaci a externalizaci? (hrubě z paměti)
 2. část: Channel, Selector, Buffer, napsat pseudokód webserveru s použitím selectoru
 - popsat typockou práci s Bufferem ve 4. krocích
   1. write data
   2. buffer.flip()
   3. read data
   4. buffer.clear()
 - jaká je výhoda při využití bufferů? v čem spočívá zrychlení?
 3. část: autoboxing, unboxing
 - metoda compute(Integer i) se volá 10x s parametrem compute(5) a 10x s parametrem compute(1024), kolikrát se alokuje nová instance?
   10x, 5 je v rozsahu IntegerCache, 1024 je už mimo rozsah
 - co je unboxing a autoboxing?
 - je preferovanější widening nebo autoboxing?
 4. část: paralelní garbage collector, popsat heap (tj. rozdělení na young generation (enden, survival), older generation, permament space)

zadání [1]

Druha cast - architektura a navrh - az 45 bodu. Bylo zde dovoleno pouzivat jakekoliv papirove materialy.

 Uloha se tykala "Bloomberg scandal". Mel jste za ukol tajne odeslat udaje o aktivite uzivatelu z terminalu (5 mil. už.) do vzdaleneho serveru. Popsat client,
 server, architekturu atd. - konrétněji: [A] z hlediska programátora, jaký je nejdůležitější aspekt, na který se musíte zaměřit - bezpečnost/riziko odhalení, 
 [B] client side - jaký použijeme protokol při komunikaci se serverem a jak budeme data posílat (posílal se 1 za min souhrn akcí, které uživatel na terminálu 
 provedl, pak HTTP requesty a zprávy instant messengeru), [C] server side - tady chtěl návrhový vzor proactor/reactor nebo stačilo napsat, že tam bude nějaká 
 fronta, ve které se data budou hromadit a poté ukládat do databáze, [D - bonus 5b] jak byste prováděli legálně špionáž dat posílaných z terminálů na server

Ústni část

 Vetsinou chteli aby clovek popsal nejake vysvetleni k druhe casti. Nejake body tady ziskali skoro vsichni.

Zkouška 4.6.2012

Tri casti: Znalosti, Architektura a navrh 1, Architektura a navrh 2

Prvni cast - znalosti - az 20 bodu

 1) Co je immutable object, kod pro lazy initialization v immutable objectu.
 2) Streamy (typy, rozdeleni, popis), DirectBuffer (co je to?, vyhody), Selector (co je to?), Channel (co je to?)
 3) Agenti (co je to?, rozdeleni, pouziti v navrhovych vzorech)

Druha cast - architektura a navrh 1 - az 25 bodu

Zde nemam presne zadani, ale zkusim to priblizit:

Petriho misku s bakteriema snima kamera, ktera odesila 2 obrazky za vterinu do benche, ktery to nasledne odesila do pocitace na zpracovani. Pocitac ma k dispozici knihovny ke zpracovani obrazku a jejich vyhodnoceni. Vysledky vraci a podle toho se meni podminky na petriho misce. a se pouzit Active Object. Ukolem bylo udelat nejaky diagram (UML), figuru a popis implementace (zadny kod nebyl treba). Melo se taky zjistit, co tam bude za problem a bylo nam receno, ze problem se nachazi v prvnim odstavci zadani. V prvnim odstavci bylo neco ve smyslu: Jste vedouci programator a pracujete pro Kim-Jong "neco" (il to nebyl :D) + nejake dalsi nepotrebne informace...no hlavni problem byl v tom, ze to je Korejske jmeno, takze se to odehrava v Korei a ta nema medicinsky vyzkum, takze bakterie nespis budou slouzit jako biologicke zbrane => problem s OSN, atd., atd. - jeden clovek na to u zkousky prisel.

Treti cast - architektura a navrh 2 - az 25 bodu

Navazovalo na druhou cast. Mel se udelat efektivnejsi navrh zpracovani, pokud najednou kamer bude nekolik (v radech stovek az tisic) a pocitac stale jeden. Na to by Active Object nestacil (nejspis), takze bylo potreba udelat Proactor nebo Reactor. Nejaky navrh implementace, diagram, popis...pripadne davali jeste body za thread pool. Tusim ze mi dali body i za tvrzeni, ze si muzu dovolit vynechat par zpracovani, pokud nebudu stihat, jelikoz ty bakterie urcite nejsou nachylne na kazde jednotlive zpracovani...tedy neni dulezite, aby se jim podminky menily kazdych cca 0.5s (resp. aby se kontrolovalo, jestli ty predchozi stale vyhovuji). V tomhle by se pripadne tedy dalo ubrat a mohla by se tak napriklad pulka zpracovani uplne vynechat - neni to kriticka cast.

Zkouška 29.05.2012

Tri casti: Znalosti, Architektura, Program Nepamatuju presne, na diakritiku jsem liny

Prvni cast - znalosti - az 20 bodu

 1) Co je to VM (Virtual Machine), vyhody, nevyhody, proces od zdrojoveho kodu k behu programu
 2) Co je to obfuscator, co dela, jak to funguje. 
 3) Volatile - co je to, k cemu slouzi, co jeho pouziti znamena pro JVM. Atomicka nastavovaci instrukce, jeji pouziti

Druha cast - architektura - az 25 bodu

 http://i.imgur.com/7ISxLUW.jpg

Treti cast - program - az 25 bodu

 Zdanlive "navazovalo" to na predchozi...
 Mame "hlavni server" s frontou ukolu a nejake pracujici stroje (konkretne 4 jednojadrove). 
 Pracantni stroj musi vzit ulohu, zpracovat a vratit vysledek. Ukolem bylo navrhnout jednotlive casti (ve forme pseudokodu) tak, aby byl vykon/paralelizace co nejvyssi.

Zkouška 27.5.2011

První část - bez pomůcek - 6b na úlohu

 1) Popište rozdíly mezi Interface, Facade, Wrapper
 
 2) Proč není Map-Reduce aplikovaný na lokální soubory na disku vhodný pro náhradu 
    SQL databáze v běžné aplikaci?
 
 3) Popište rozdíly mezi Gnutella a Kazaa
 
 4) Co je výstupem programu... - viz. 2.přednáška, strana 32
 
 5) Rozdíly mezi serializací a externalizací. K čemu je Selector a kde se používá.
 
 6) Reachable levels... - viz. 12.přednáška, předposlední strana

Druhá část - papírové poznámky povoleny

 Máme zadanou třídu od dodavatele na zpracování obrazků - class Imager s metodou Obrazek(ImageStruct image) {...}
 
 Tuto metodu budeme volat cca 5000000 za minutu. Vstupem jsou data z kamer v byte[] poli o konstatní velikosti.
 
 
 1) [ 6b] Jaký pattern použijeme pro integraci dodavatelovy třídy?
 
 2) [ 6b] Co je systémovým (VM) problémem tohoto řešení?
 
 3) [12b] Navrhněte řešení problému ze 2)
 
 4) [25b] Knihovna již není poskytována lokálně, ale vzdáleně. Při zachování všech parametrů ale
          dojde ke značnému zvýšení latence. Navrhněte použití návrhového vzoru.
 
 Nastínění řešení:
 
 1) Adapter pattern - jeho implementace bude sloužit pro převod mezi naším byte[] polem a ImageStruct image
 2) Garbage Collector - protože se jedná prakticky o realtime aplikaci, tak v okamžiku, kdy se spustí GC,
    tak dojde k pozastavení aplikace a v tu chvíli nejsme schopni zpracovávat příchozí data z kamer...
 3) Použití Poolu - díky konstantní velikosti byte[] polí je můžeme recyklovat a držet tak heap co možná
    nejmenší, tím pádem pokud by došlo na GC, byl by velice rychlý...
 4) Použijeme Proxy + ActiveObject pattern - viz slidy (zde mi ale něco chybělo...)
 
 ** Nepamatuji si to přesně, ale pro představu to snad stačí... --Hanx 27. 5. 2011, 10:33 (UTC)

Zkouška ??.?.2010

text

Events Upcoming
More »