Softwarové systémy 19.6.2018

CiTrus at 2018-06-20 01:39:26

Klasický formát. Ráno v 9 sraz na chodbě, každý dostal 5 otázek vybraných na místě zkoušejícími z okruhů. Ke každé otázce příslušný zkoušející většinou vypíchnul pár věcí, které by chtěl slyšet podrobněji, a pak také zmínil čas, kdy se vrátí a projde s námi odpovědi (měli rozvrh na studenty). První zkoušení začínalo v 9:45, pak se pokračovalo rovnoměrně ve 45min intervalech (30min příprava + 15min zkoušení) až do 13, kdy měly být kolektivně ohlášeny výsledky. Rozvrh ale byl spíše orientační - kdo byl připraven, mohl zamávat a byl vyzkoušen dříve. Po posledním zkoušení šlo odejít na oběd bez omezení.

Samotné zkoušení probíhalo hodně závisle na zkoušejícím. Někteří si nejprve přečetli papír, který jsem v průběhu přípravy popsal, a pak se doptávali; jiní dávali přednost tomu, abych povídal hned od začátku a papír používal spíše jako osnovu v případě výpadku. Výsledkem každého zkoušení byla známka 1-4, kterou si zkoušející zaznamenal do privátní tabulky. Tyto známky ovšem zřejmě byly pouze informativní, protože oficiálním výsledkem zkoušky byla právě jedna známka, která byla vytvořena na základě neznámého klíče (spekulace: zřejmě průměr zmíněných 5 známek). Kromě tabulky možná roli hrály i informace o studiu - každý student měl v deskách, do nichž komise zapisovala zadané otázky, vytisknutý výpis předmětů ze SISu, průměr, příznak zda už má obhájenou diplomku, a příznak zda má šanci získat vyznamenání. Lze spekulovat, že tyto informace mohly sloužit jako heuristiky při volbě otázek a rozbíjení případných remíz mezi známkami.


Zadání společné části (informatika):

Základy složitosti a vyčíslitelnosti (MJ)

  • popsat základní třídy složitosti a vztahy mezi nimi

  • z vět jsem si (kromě triviálních inkluzí) vzpomněl na Saviče, deterministickou časovou/prostorovou hierarchii a otevřenost shora v obou případech (u většiny jsem důkazy znal, nebyl ale prostor o nich povídat)

  • celkově velice příjemné zkoušení

Datové struktury (?)

  • líné a zbrklé binomiální haldy

  • jejich definice

  • k čemu se používají

  • operace a jejich worst case a amortizovaná složitost

  • ukázat příklad na nějaké malé posloupnosti operací


Zadání oborové části (softwarové systémy, zaměření systémové programování):

Systémové aspekty počítačů (Bulej)

  • synchronizace (obecné povídání, proč, kdy, jak)

  • naimplementovat v pseudokódu spin lock

  • naimplementovat v pseudokódu producer-consumer

  • řeč byla i o bariérách, condition variables a cache ping pongu

Paralelní a distribuované systémy (Zavoral)

  • RPC (popsat obecně)

  • uvést co možná nejvíce příkladů konkrétních technologií a porovnat je

  • vzpomněl jsem si na ORB, RMI, EJB, .NET remoting, web services a zmínil jsem i OpenMPI - to stačilo

Moderní koncepty programování (Hnětynka)

  • generika v objektově orientovaných jazycích

  • porovnat generiku v C# / C++ / Javě

  • byl jsem tázán, zda umím Scalu nebo Kotlin - když jsem řekl, že jsem to viděl, ale jen jsem si s tím hrál, nebylo to vnímáno jako špatná odpověď

  • povídání o kovarianci, kontravarianci (důležité bylo vzpomenout si na to, co je přesně co)

  • velká část zkoušení byla o generice v Javě (omezující podmínky, otazníček a jeho chování)

Celkově mám pocit, že jsem zkoušením prošel dost rychle. Končil jsem asi jako druhý nebo třetí v pořadí. Když jsem odcházel, bylo zkoušeno asi ještě 5 lidí - z tohoto počtu tam 1 stále byl grilován i o hodinu později, když jsem se vrátil z oběda na vyhlášení výsledků. Známky nám byly oznámeny a přímo zapsány do SISu předsedou komise.

Přeji hodně štěstím následujícím generacím!