Zkouška 14. 1. 2019

Předmět zaměřený na praktické programování v jazyku a prostředí Java
18721188
Matfyz(ák|ačka) level I
Příspěvky: 1
Registrován: 14. 1. 2019 11:49
Typ studia: Informatika Bc.

Zkouška 14. 1. 2019

Příspěvek od 18721188 »

Zkouška, v porovnání s tím, co se tu píše, obsahovala podstatně víc otázek s odpovědí ve formě kousku kódu: jen polovina otázek byla testových, zbylé byly "snippetové".

Bodování je +- stejné, snippetové otázky mohou nasbírat až tři body -- ale Hnětynka je uděluje hodně mírně. V té mé mi třeba prošel minimálně jeden docela velký c#ismus, které by kompilátor Javy kvůli syntaxi nevzal. Hodně IMHO záleží, jestli pochopíte, o co otázce jde (rozlišení overload/override, řetězce se nedají smysluplně porovnávat pomocí ==, jak fungují funkcionální rozhraní, jak se funkcionální rozhraní používají ve Stream API ...).

Pamatuju si tam jednu docela zajímavou otázku "naimplementujte equals pro následující třídu", která měla vést na to, že Javovský kontrakt pro equals bere Object a že si pomocí instanceof musíte ověřit, s čím porovnáváte. So far so good. Tvar té třídy byl asi class Something { int SomethingId; String SomethingName; } a vůbec nebylo jasné, jestli se od vás chce strukturální nebo "entitová" rovnost. Tu první asi zvolí fanoušci funkcionálního programování zvyklí učit ručně všechny své třídy sémantice součinových typů, tu druhou lidi, co při pohledu na SomethingId vzpomenou DDD, třídu označí za jasnou entitu (ne value type) a budou porovnávat jen podle ID, ne už podlé jména. Hnětynka zdá se očekával strukturální rovnost, jelikož po vyhodnocení mluvil o porovnávání řetězců. Jelikož jsem použil strukturální rovnost, nevím, jestli entitový způsob nějak penalizoval.

Zkouška je o trošku delší, než asi bývávala, jelikož opravování trvá přes půl hodiny. Pořád se v pohodě celá vejde do dvou hodin.
matfyzák

Re: Zkouška 14. 1. 2019

Příspěvek od matfyzák »

Jinak já si dovolím tedy doplnit otázky, tak jak si je pamatuji:

1) StringBuilder sb1 = new StringBuilder("Hello");
StringBuilder sb2 = sb1;
sb1.append(" world");
System.out.println(sb1);
System.out.println(sb2);

Co se vypíše? 2x Hello world

2) definované dvě přetížené funkce
void foo(String s){
System.out.println("string");
}

void foo(int i){
System.out.println("int");
}

Co se vypíše po zavolání foo("Hello" + 1)?
- zde se sice převede celý parametr na string, ale pozor na deifnici metod - člověk se nesmí unáhlit a vypsat parametr, ale skutečně řetězec "string" (to ale lidé občas u zkoušky přehlédli)


3)
class A {
public A(){super(); System.out.println("A");}
}

class B {
public B(){super(); System.out.println("B");}
}

class C {
public C(){super(); System.out.println("C");}
}

Co se vypíše při vytvoření instance C? (někoho může zmást volání super v A, to je ale v pořádku) Vypíše se ABC

4) synchornized blok ve statické funkci - rozhodnout co se stane - synchronized ve statických funkcích nefunguje

5) Naimplementujte MyException, kterou není odchytávat.
- MyException dědí Error nebo RuntimeException, ideálně popsat i konstruktory, ale bral to i bez nich

6) Otázka zmíně výše
class Student {
private int studentID;
private String fullName;

// naimplementovat equals, důležité aby bylo metoda přepsána, nikoli přetížena
}

7) vtvořte fukcionální interface pro (x, y) -> x.equals(y)
interface Foo {
@Funcional
boolean foo(Object o1, Object o2);
}

Nebo ještě lépe
interface Foo<T> {
@Funcional
boolean foo(T t1, T t2);
}

8) ukázka jak vypadá funkiconální interface používající se ve filtru pro streamy, bylo za úkol napsat použití tak, aby vypsal pouze řetezce delší než 5
tj. něco jako
stream.filter((param) -> { return s.length > 5; }

9) Napsat metodu, která má parametr pole Stringů a string a má ověřit zda je string v poli
- řešení spousta, asi není nutné ho explicitně psát

10) jedna otázka se bohužel vytratila a nevím jaká :)
(jo, a pořadí asi taky nebude úplně stejné)
Dave
Matfyz(ák|ačka) level I
Příspěvky: 4
Registrován: 1. 6. 2018 20:10
Typ studia: Informatika Bc.

Re: Zkouška 14. 1. 2019

Příspěvek od Dave »

matfyzák píše: synchornized blok ve statické funkci - rozhodnout co se stane - synchronized ve statických funkcích nefunguje
S tímto si dovolím nesouhlasit. Možná, že nějaký konkrétní příklad na zkoušce nebyl správně, ale obecně to není pravda - každý si může vyzkoušet.
Naposledy upravil(a) Dave dne 14. 1. 2019 14:09, celkem upraveno 1 x.
Vaci

Re: Zkouška 14. 1. 2019

Příspěvek od Vaci »

Chybí otázka: Naimplementujte třídu, která může převzít libovolný počet libovolných parametrů. Tyto parametry vypíše v opačném pořadí a vrátí počet parametrů.
Odpověď něco jako:
public int Foo(Object.. args){
for(int i = args.lentgh -1; i >= 0; i--) System.out.println(args);
return args.length;
}
Návštěvník

Re: Zkouška 14. 1. 2019

Příspěvek od Návštěvník »

Dave píše:
matfyzák píše: synchornized blok ve statické funkci - rozhodnout co se stane - synchronized ve statických funkcích nefunguje
S tímto si dovolím nesouhlasit. Možná, že nějaký konkrétní příklad na zkoušce nebyl správně, ale obecně to není pravda - každý si může vyzkoušet.
Doplním tu otázku číslo 4. Byl tam část kódu něco jako toto:
public static void foo(){
synchronized(this){
// code
}}
A problém u tohoto kódu je ten, že ve statické metodě se odkazujeme na this.
Odpovědět

Zpět na „PGR013 Java“