# Zkouska 2009-02-02

<{ForumPost(poster="kukmuk", timestamp=2009-02-02 21:19:51)}>
Tak dnesni zkouska mi prisla v ramci moznosti ok. Zadani nerozdaval Hnetynka, ale nekdo jim povereny. Na zacatku jeste stihl rict, ze zkouska mu prijde tezsi nez obvykle. Ja bych to okomentoval jen tak, ze kdo byl na zkousce ze C# u Pavla Jezka, tak ma jinou predstavu o tom, co je tezka zkouska z programovaciho jazyka :).  
  
Bylo 10 otazek. Z toho 8 zaskrtavacich a 2 na psani kodu. V zaskrtavaci sekci byla u kazde otazky alespon jedna moznost ze ctyr spravne, ale mohlo byt klidne vic. Za nezaskrtnuti toho co melo byt nebo za zaskrtnuti toho co nemelo byt se daval trestny bod. Na zkousku je 45 minut.  
  
Hodnoceni:

*  0-1 trestny bod - za 1 
*  2-3 trestne body - za 2 
*  4-6 trestne body - za 3 
 

----

1. Lokalni promenna typu ***int*** vyskytujici se uvnitr metody  
    A. je od mista deklarace inicializovana hodnotou 0  
    B. ma nedefinovanou hodnotu a pri cteni je vraceno predem nestanovitelne cislo  
    **C**. ma nedefinovanou hodnotu a prekladac nedovoli pouziti  
    D. je inicializovana maximalni hodnotou, ktera se do typu int vejde
1. Mejme abstraktni tridu, pak  
    **A**. od ni nelze vytvaret instance  
    B. lze od ni dedit, ale nelze predefinovat zadnou jeji metodu  
    C. nelze od ni dedit  
    D. vsechny jeji metody jsou take abstraktni
1. Prikazem ***import static*** lze naimportovat do lokalniho jmenneho prostoru  
    A. vsechny atriuty a metody tridy  
    B. pouze staticke atributy tridy  
    C. pouze staticke metody tridy  
    **D**. pouze staticke metody a staticke atributy tridy  
    E. pouze atributy a metody oznacene anotaci ***@exportStatic***
1. Co bude vystupem nasledujiciho useku kodu?

    public class A {
        public int x = 0;
    
        {
            x += 1;
        }
    
        public A() {
            x += 1;
        }
    
        public static void main(String[] args) {
            A a = new A();
            System.out.println(a.x);
        }
    }
    

    A. nelze prelozit  
    B. 0  
    C. 1  
    **D**. 2  
    E. hodnota se muze lisit pri opakovanych spousteni programu
1.  Ktera slova **nejsou** v Jave klicovymi?  
    A. import  
    B. throws  
    C. implements  
    **D**. foreach  
    **E**. run  
    **F**. sizeof
1.  Predpokladejme, ze metoda foo() v nasledujicim uryvku kodu skonci vyhozenim vyjimky ***MyException***, ktera dedi od tridy ***Exception***. Rozhodnete, co bude na standardnim vystupu po provedeni kodu

    ...
    try {
        foo();
    } catch (MyException exc) {
        System.out.println("MyException");
    } catch (Exception exc) {
        System.out.println("Exception");
    } finally {
        System.out.println("finally");
    }
    ...
    

    A. MyException Exception finally  
    **B**. MyException finally  
    C. Exception finally  
    D. finally  
    E. takovy to try-catch-finally blok nelze v Jave napsat - chyba pri prekladu
1.  Rozhodnete, co bude na standardnim vystupu po spusteni programu

    class A {
        int x = 1;    
    }
    class B extends A {
        int x = 2;
    
        public void foo() {
            System.out.println(this.x);
            System.out.println(super.x);
        }
    
        public static void main(String[] args) {
            B b = new B();
            b.foo();
        }
    }
    

    A. 2 2  
    B. 1 1  
    **C**. 2 1  
    D. nelze aplikovat klicove slovo ***super*** na atributy  
    E. nelze prepisovat atributy tridy, od ktere se dedi
1.  Uvazujme nasledujici tridu

    public class A {
        private int x;
    
        public synchronized void setX(int value) {
            x = value;
        }
    
        public synchronized int getX() {
            return x;
        }
    }
    

Dale predpokladejme, ze nejake vlakno ziskalo pristup a je uvnitr metody ***setX(int value)***. Pak jinym vlaknem  
    **A**. nelze pristupovat ani k getX() ani k setX(int value)  
    B. lze pristupovat k getX(), ale ne k setX(int value)  
    C. kod nelze prelozit, u metod nejsou deklarovany "throws" parametry
1.  Napiste metodu, ktera obdrzi jako prvni parametr typu int nejakou mzdu a jako druhy parametr typu int nejakou hodnotu procent (od nuly do sta) udavajici velikost dane z prijmu. Metoda ma vracet castku (double), kterou zaplatime jako dan. Overte korektnost vstupu.  
    Hint: nezapomenout k metode pripsat patricne "throws", nezapomenout pri deleni pretypovat na double
1.  Napiste tridu dynamicky rozsirujici ho se pole intu - staci metody add(int x) a get(int index){: style="list-style-type:decimal"}

<{/ForumPost}>

<{ForumPost(poster="QZuzka", timestamp=2009-02-02 21:24:23)}>

 > kukmuk wrote:
 > Hodnoceni:
 > 
 > *  0-1 trestny bod - za 1 
 > *  2-3 trestne body - za 2 
 > *  4-6 trestne body - za 3

Jen to hodnocení bylo mírnější, jednička za -2, dvojka -4, trojka snad až -8
<{/ForumPost}>

<{ForumPost(poster="Germoe", timestamp=2009-02-02 22:28:26)}>

 > QZuzka wrote:
 >  > kukmuk wrote:
 >  > Hodnoceni:
 >  > 
 >  > *  0-1 trestny bod - za 1 
 >  > *  2-3 trestne body - za 2 
 >  > *  4-6 trestne body - za 3
 > 
 > 
 > Jen to hodnocení bylo mírnější, jednička za -2, dvojka -4, trojka snad až -8

Taky špatně... já měl -5 a měl jsem ještě dvojku... takže bych to viděl tak, že známkování bylo stejné jako na C#  
0-2 1  
3-5 2  
6-8 3  
9-∞ 4
<{/ForumPost}>

<{ForumPost(poster="QZuzka", timestamp=2009-02-02 22:48:20)}>

 > Germoe wrote:
 >  > QZuzka wrote:
 >  >  > kukmuk wrote:
 >  >  > Hodnoceni:
 >  >  > 
 >  >  > *  0-1 trestny bod - za 1 
 >  >  > *  2-3 trestne body - za 2 
 >  >  > *  4-6 trestne body - za 3
 >  > 
 >  > 
 >  > Jen to hodnocení bylo mírnější, jednička za -2, dvojka -4, trojka snad až -8
 > 
 > 
 > Taky špatně... já měl -5 a měl jsem ještě dvojku... takže bych to viděl tak, že známkování bylo stejné jako na C#  
 > 0-2 1  
 > 3-5 2  
 > 6-8 3  
 > 9-∞ 4

  
jo, to zní logicky..  ale, třeba by teď mohl přijít ještě někdo a zase to posunout a zmírnit :)
<{/ForumPost}>

<{ForumPost(poster="adam", timestamp=2009-02-03 00:34:40)}>

 > kukmuk wrote:Tak dnesni zkouska mi prisla v ramci moznosti ok. Zadani nerozdaval Hnetynka, ale nekdo jim povereny. Na zacatku jeste stihl rict, ze zkouska mu prijde tezsi nez obvykle. Ja bych to okomentoval jen tak, ze kdo byl na zkousce ze C# u Pavla Jezka, tak ma jinou predstavu o tom, co je tezka zkouska z programovaciho jazyka :).

Doplnění:  
  
9. Bylo zadáno, že při nekorektním vstupu (záporný hrubý příjem apod.) se má vyhodit výjimka MyException (máme přepokládat, že už je někde deklarovaná, případně naimportovaná). Několik lidí včetně mě to místo přetypováním řešili násobením konstantou v plovoucí řádce (tj. return příjem/(daň/100.0) místo return (double)příjem*(daň/100)), což zkoušející zprvu opravoval jako chybu (asi si toho prostě nevšiml), ale pak to uznal.  
  
10. Byla tam zmínka o tom, že pokud je index mimo rozsah, měla by se vyhodit výjimka, a že implementovat se to má polem intů, které se bude podle potřeby realokovat. Při nejjednodušší implementaci (tj. že pole roste po jednotkách podle potřeby) výjimky vůbec nebylo třeba řešit, protože se vyhazují samy přístupem do toho pole (instanční proměnné). Taková implementace byla v pořádku (nebyly za ní žádné trestné body).  

 > Za nezaskrtnuti toho co melo byt nebo za zaskrtnuti toho co nemelo byt se daval trestny bod.

Tj. pokud jste místo správné odpovědi A měli špatnou odpověď B, dostali jste 2 trestné body. Nezkoušel jsem nechávat otázku úplně nezodpovězenou, protože jsem o téhle penalizaci nevěděl. Pak mi bylo nějaké divné, že mám za každou chybu 2 body dolů:/. Vzhledem k tomu, že i malý bodový rozdíl může snadno rozhodnout o známce (případně udělání/neudělání zkoušky), tak je docela dobré vědět to předem a zbytečně neztrácet body, když opravdu neznáte správnou odpověď. To jen tak pro příští generace;).
<{/ForumPost}>

<{ForumPost(poster="adam", timestamp=2009-02-03 12:06:42)}>

 > QZuzka wrote:
 >  > Germoe wrote:
 >  > Taky špatně... já měl -5 a měl jsem ještě dvojku... takže bych to viděl tak, že známkování bylo stejné jako na C#  
 >  > 0-2 1  
 >  > 3-5 2  
 >  > 6-8 3  
 >  > 9-∞ 4
 > 
 > jo, to zní logicky..  ale, třeba by teď mohl přijít ještě někdo a zase to posunout a zmírnit :)

6 trestných bodů už byla trojka, takže mírnější to asi nebude. Alespoň ne ta hranice 2/3. (Do kolika byla jednička nebo trojka, nevím.)
<{/ForumPost}>

<{ForumPost(poster="JPS18", timestamp=2009-02-03 16:30:04)}>
Nemohol by pls niekto napisat ako mala vyzerat 10. a 8. ?
<{/ForumPost}>

<{ForumPost(poster="adam", timestamp=2009-02-03 17:45:53)}>

 > JPS18 wrote:Nemohol by pls niekto napisat ako mala vyzerat 10. a 8. ?

10. (a 9.): Řešení je na [http://mff.lokiware.info/Java](http://mff.lokiware.info/Java). (Prošlo mi bez ztráty bodu, a prý to bylo dokonce jedno z těch rozumnějších. Předpokládám, že dost lidí se snažilo řešit výjimky, nebo možná alokovali pole nějak zbytečně "chytře", třeba po dvojnásobcích kapacity.)  
  
8. Správná odpověď je ***A.** nelze pristupovat ani k getX() ani k setX(int value)*. Tím *nelze přistupovat* je míněno (jak zkoušející ústně doplnil), že vlákno, které by se o to pokusilo, se zablokuje, dokud to nepůjde.
<{/ForumPost}>

<{ForumPost(poster="johnny", timestamp=2009-02-05 18:37:44)}>
6. vypise MyException finally
<{/ForumPost}>

