ASS
Z OI wiki
|
|
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:
- Reversable linked list, vlastní implementace
- Paralelní merge sort
- Composite pattern
- Object pool (Vlastní implementace java.util.concurrent.BlockingQueue)
- Worker pool (Vlastní implementace ExecutorService)
- 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
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