ОО2/Пробни тестови 2021 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Ispravka u šestom zadatku autora koji nema nalog koji mogu da pomenem)
м (+data-solutions i kategorija)
 
(Нису приказане 2 међуизмене 2 корисника)
Ред 1: Ред 1:
{{tocright}}
{{tocright}}
* Za pitanja sa više odgovora, tačni odgovori su <span class="solution-example">podebljani i uokvireni</span>.
{{rešenja}}
* Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni: <span class="spoiler-example">ovako</span>.
* Pritisnite na sledeće dugme kako biste ih sakrili ili otkrili: <span class="unhide-spoilers unhide-solutions"></span>


== Kolokvijum - samotestiranje ==
== Kolokvijum - samotestiranje ==
Ред 9: Ред 7:
=== 1. zadatak ===
=== 1. zadatak ===
Koje tvrdnje za jezik Java su tačne?
Koje tvrdnje za jezik Java su tačne?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku.
# Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku.
# JIT (''Just In Time'') prevodilac prevodi izvorni kod programa u bajtkod.
# JIT (''Just In Time'') prevodilac prevodi izvorni kod programa u bajtkod.
Ред 17: Ред 15:
</div>
</div>


'''Objašnjenje:''' <span class="spoiler">JIT prevodilac prevodi bajtkod u mašinske instrukcije prilikom izvršavanja, virtuelna mašina interpretira bajtkod i on je različit od izvornog koda po tome što prevodilac mora da prevede izvorni kod u bajtkod.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">JIT prevodilac prevodi bajtkod u mašinske instrukcije prilikom izvršavanja, virtuelna mašina interpretira bajtkod i on je različit od izvornog koda po tome što prevodilac mora da prevede izvorni kod u bajtkod.</span>


=== 2. zadatak ===
=== 2. zadatak ===
Ред 31: Ред 29:
}
}
</syntaxhighlight>
</syntaxhighlight>
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <code>false<br />false<br />false</code>
# <code>false<br />false<br />false</code>
# <code>false<br />false<br />true</code>
# <code>false<br />false<br />true</code>
Ред 39: Ред 37:
</div>
</div>


'''Objašnjenje:''' <span class="spoiler">Prevodilac će optimizovati<sup>[?]</sup> <code>str3</code> prilikom prevođenja pa će <code>str1</code>, <code>str2</code> i <code>str3</code> pokazivati na iste niske u ''string pool'' dok <code>str4</code> izričito koristi nisku koja nije u ''string pool''.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prevodilac će optimizovati<sup>[?]</sup> <code>str3</code> prilikom prevođenja pa će <code>str1</code>, <code>str2</code> i <code>str3</code> pokazivati na iste niske u ''string pool'' dok <code>str4</code> izričito koristi nisku koja nije u ''string pool''.</span>


=== 3. zadatak ===
=== 3. zadatak ===
Ред 62: Ред 60:
</syntaxhighlight>
</syntaxhighlight>
Odabrati tačan odgovor
Odabrati tačan odgovor
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Kod je sintaksno neispravan.
# Kod je sintaksno neispravan.
# Program ispisuje vrednosti <code>0 0</code>.
# Program ispisuje vrednosti <code>0 0</code>.
Ред 69: Ред 67:
# Program ispisuje vrednosti <code>1 1</code>.
# Program ispisuje vrednosti <code>1 1</code>.
</div>
</div>
'''Objašnjenje:''' <span class="spoiler">Prvi poziv <code>f</code> će izmeniti polje klase na 1 preko reference dok drugi poziv neće izmeniti objekat <code>i</code> jer se reference prenose po vrednosti. Bez obzira na ovo drugo, doduše, <code>i</code> bi svakako bio 0.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prvi poziv <code>f</code> će izmeniti polje klase na 1 preko reference dok drugi poziv neće izmeniti objekat <code>i</code> jer se reference prenose po vrednosti. Bez obzira na ovo drugo, doduše, <code>i</code> bi svakako bio 0.</span>


=== 4. zadatak ===
=== 4. zadatak ===
Za pakete na jeziku Java važi:
Za pakete na jeziku Java važi:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Postoje tipovi koji mogu pripadati većem broju paketa.
# Postoje tipovi koji mogu pripadati većem broju paketa.
# <span class="solution">Svaka klasa mora biti deo nekog paketa.</span>
# <span class="solution">Svaka klasa mora biti deo nekog paketa.</span>
Ред 84: Ред 82:
=== 5. zadatak ===
=== 5. zadatak ===
Koje tvrdnje su tačne za nestatičke inicijalizacione blokove?
Koje tvrdnje su tačne za nestatičke inicijalizacione blokove?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Izvršavaju se nakon izvršavanja konstruktora svoje klase.
# Izvršavaju se nakon izvršavanja konstruktora svoje klase.
# <span class="solution">Mogu bacati izuzetke.</span>
# <span class="solution">Mogu bacati izuzetke.</span>
Ред 91: Ред 89:
# <span class="solution">Izvršavaju se nakon izvršavanja konstruktora natklase.</span>
# <span class="solution">Izvršavaju se nakon izvršavanja konstruktora natklase.</span>
</div>
</div>
'''Objašnjenje:''' <span class="spoiler">Nestatički inicijalizacioni blokovi mogu bacati izuzetke ukoliko su svi konstruktori klase deklarisani kao da te izuzetke bacaju.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Nestatički inicijalizacioni blokovi mogu bacati izuzetke ukoliko su svi konstruktori klase deklarisani kao da te izuzetke bacaju.</span>


=== 6. zadatak ===
=== 6. zadatak ===
Ред 120: Ред 118:
}
}
</syntaxhighlight>
</syntaxhighlight>
'''Odgovor:''' <span class="spoiler">ab</span>
'''Odgovor:''' <span class="spoiler" data-solution="text">ab</span>


'''Objašnjenje:''' <span class="spoiler">Prva završi sa inicijalizacijom klasa <code>A</code> kao natklasa klase <code>B</code>, a zatim se pozove konstruktor klase <code>B</code>. Pošto je metoda natklase označena kao <code>private</code>, ona neće biti polimorfno redefinisana u <code>B</code> i zato se iz konstruktora <code>A</code> poziva metod te klase.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Prva završi sa inicijalizacijom klasa <code>A</code> kao natklasa klase <code>B</code>, a zatim se pozove konstruktor klase <code>B</code>. Pošto je metoda natklase označena kao <code>private</code>, ona neće biti polimorfno redefinisana u <code>B</code> i zato se iz konstruktora <code>A</code> poziva metod te klase.</span>


=== 7. zadatak ===
=== 7. zadatak ===
Modifikator abstract je moguće staviti ispred definicije:
Modifikator abstract je moguće staviti ispred definicije:
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">metoda</span>
# <span class="solution">metoda</span>
# <span class="solution">klase</span>
# <span class="solution">klase</span>
Ред 136: Ред 134:
=== 8. zadatak ===
=== 8. zadatak ===
Šta važi za '''throw''' na programskom jeziku Java?
Šta važi za '''throw''' na programskom jeziku Java?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <span class="solution">Može se koristiti u statičkim inicijalizacionim blokovima.</span>
# <span class="solution">Može se koristiti u statičkim inicijalizacionim blokovima.</span>
# Predstavlja operator jezika Java.
# Predstavlja operator jezika Java.
Ред 143: Ред 141:
# <span class="solution">Predstavlja ključnu reč jezika Java.</span>
# <span class="solution">Predstavlja ključnu reč jezika Java.</span>
</div>
</div>
'''Objašnjenje:''' <span class="spoiler"><code>throw</code> se može koristiti u statičkim inicijalizacionim blokovima, ali samo ako se izuzeci bačeni preko njega u tom istom statičkom inicijalizacionom bloku i uhvate. Za razliku od C++, u Javi <code>throw</code> nije operator već naredba (i ključna reč), i ponovno bacanje izuzetka sa <code>throw;</code> nije dozvoljeno. Parametar mu je referenca na objekat izveden iz klase <code>Throwable</code>, koja je nadklasa <code>Exception</code>.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>throw</code> se može koristiti u statičkim inicijalizacionim blokovima, ali samo ako se izuzeci bačeni preko njega u tom istom statičkom inicijalizacionom bloku i uhvate. Za razliku od C++, u Javi <code>throw</code> nije operator već naredba (i ključna reč), i ponovno bacanje izuzetka sa <code>throw;</code> nije dozvoljeno. Parametar mu je referenca na objekat izveden iz klase <code>Throwable</code>, koja je nadklasa <code>Exception</code>.</span>


=== 9. zadatak ===
=== 9. zadatak ===
Ред 155: Ред 153:
</syntaxhighlight>
</syntaxhighlight>
koje od navedenih naredbi su ispravne?
koje od navedenih naredbi su ispravne?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# <syntaxhighlight lang="java" inline>int i=1,j=2; I5 i5=(i+j)->i*j;</syntaxhighlight>
# <syntaxhighlight lang="java" inline>int i=1,j=2; I5 i5=(i+j)->i*j;</syntaxhighlight>
# <span class="solution"><syntaxhighlight lang="java" inline>I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};</syntaxhighlight></span>
Ред 162: Ред 160:
# <span class="solution"><syntaxhighlight lang="java" inline>I1 i1=n->n+5;</syntaxhighlight></span>
# <span class="solution"><syntaxhighlight lang="java" inline>I1 i1=n->n+5;</syntaxhighlight></span>
</div>
</div>
'''Objašnjenje:''' <span class="spoiler">Izraz sa četvrtim interfejsom nije validan jer kada se lambda izraz okruži blokom (<code>{}</code>) više se ne podrazumeva <code>return</code>. Izraz sa petim interfejsom ima sintaksnu grešku, jer <code>(i+j)->...</code> nema smisla.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation">Izraz sa četvrtim interfejsom nije validan jer kada se lambda izraz okruži blokom (<code>{}</code>) više se ne podrazumeva <code>return</code>. Izraz sa petim interfejsom ima sintaksnu grešku, jer <code>(i+j)->...</code> nema smisla.</span>


=== 10. zadatak ===
=== 10. zadatak ===
Koja tvrđenja su tačna na programskom jeziku Java?
Koja tvrđenja su tačna na programskom jeziku Java?
<div class="abc-list">
<div class="abc-list" data-solution="multiple">
# Ako je pre ulaska u <code>wait()</code> pozvan metod <code>notifyAll()</code> za isti objekat, nit koja poziva <code>wait()</code> neće biti blokirana.
# Ako je pre ulaska u <code>wait()</code> pozvan metod <code>notifyAll()</code> za isti objekat, nit koja poziva <code>wait()</code> neće biti blokirana.
# <span class="solution">Po ulasku u <code>wait()</code>, nit se blokira (suspenduje) i oslobađa se brava objekta.</span>
# <span class="solution">Po ulasku u <code>wait()</code>, nit se blokira (suspenduje) i oslobađa se brava objekta.</span>
Ред 173: Ред 171:
# <code>wait()</code> je metod klase <code>Thread</code>.
# <code>wait()</code> je metod klase <code>Thread</code>.
</div>
</div>
'''Objašnjenje:''' <span class="spoiler"><code>wait()</code> je metod klase <code>Object</code>, dok <code>notify()</code> ne budi nužno nit koja je najduže čekala.</span>
'''Objašnjenje:''' <span class="spoiler" data-solution="explanation"><code>wait()</code> je metod klase <code>Object</code>, dok <code>notify()</code> ne budi nužno nit koja je najduže čekala.</span>
 
[[Категорија:ОО2]]
[[Категорија:Рокови]]

Тренутна верзија на датум 30. јун 2021. у 15:00

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

Kolokvijum - samotestiranje

Na svakom pitanju je bilo ili moguće izabrati jedno ili više rešenja ili uneti odgovor u polje.

1. zadatak

Koje tvrdnje za jezik Java su tačne?

  1. Interpretiranje bajtkoda je po pravilu efikasnije od izvršenja programa na mašinskom jeziku.
  2. JIT (Just In Time) prevodilac prevodi izvorni kod programa u bajtkod.
  3. Implementacija virtuelne mašine zavisi od konkretne platforme, ali interfejs prema bajtkodu ostaje isti.
  4. Izvorni kod programa se interpretira od strane virtuelne mašine.
  5. Izvorni kod programa se naziva bajtkod.

Objašnjenje: JIT prevodilac prevodi bajtkod u mašinske instrukcije prilikom izvršavanja, virtuelna mašina interpretira bajtkod i on je različit od izvornog koda po tome što prevodilac mora da prevede izvorni kod u bajtkod.

2. zadatak

Šta ispisuje sledeći program?

public class A {
     public static void main(String[] args) {
          String str1 = "abc", str2 = "abc", str3 = "ab" + "c", str4 = new String("abc");
          System.out.println(str1==str2);
          System.out.println(str1==str3);
          System.out.println(str1==str4);
     }
}
  1. false
    false
    false
  2. false
    false
    true
  3. true
    false
    false
  4. true
    true
    false
  5. true
    true
    true

Objašnjenje: Prevodilac će optimizovati[?] str3 prilikom prevođenja pa će str1, str2 i str3 pokazivati na iste niske u string pool dok str4 izričito koristi nisku koja nije u string pool.

3. zadatak

Dat je sledeći program:

public class Primer{
  int polje;
  static void f(Object o){
    if(o instanceof Primer)
      ((Primer)o).polje = 1;
    else if (o instanceof Integer)
      o = 0;
  }
  public static void main(String[] args){
    Primer p = new Primer();
    Integer i = 0;
    f(p);
    f(i);
    System.out.println(p.polje + " " + i);
  }
}

Odabrati tačan odgovor

  1. Kod je sintaksno neispravan.
  2. Program ispisuje vrednosti 0 0.
  3. Program ispisuje vrednosti 0 1.
  4. Program ispisuje vrednosti 1 0.
  5. Program ispisuje vrednosti 1 1.

Objašnjenje: Prvi poziv f će izmeniti polje klase na 1 preko reference dok drugi poziv neće izmeniti objekat i jer se reference prenose po vrednosti. Bez obzira na ovo drugo, doduše, i bi svakako bio 0.

4. zadatak

Za pakete na jeziku Java važi:

  1. Postoje tipovi koji mogu pripadati većem broju paketa.
  2. Svaka klasa mora biti deo nekog paketa.
  3. Uvoženjem paketa ne uvoze se i svi potpaketi tog paketa.
  4. Sve klase koje se nalaze u istoj datoteci su deo istog paketa.
  5. Paket java.lang se automatski uvozi.
  6. U datoteci može postojati više naredbi: package naziv_paketa;

5. zadatak

Koje tvrdnje su tačne za nestatičke inicijalizacione blokove?

  1. Izvršavaju se nakon izvršavanja konstruktora svoje klase.
  2. Mogu bacati izuzetke.
  3. Može ih biti više u jednoj klasi.
  4. Izvršavaju se nakon punjenja klase u memoriju, a pre stvaranja prvog objekta date klase.
  5. Izvršavaju se nakon izvršavanja konstruktora natklase.

Objašnjenje: Nestatički inicijalizacioni blokovi mogu bacati izuzetke ukoliko su svi konstruktori klase deklarisani kao da te izuzetke bacaju.

6. zadatak

Šta ispisuje sledeći program na programskom jeziku Java? Upisati 0 ukoliko se program ne prevodi, odnosno 1 ukoliko postoji greška u vreme izvršavanja programa.

class A {
    private void m() {
        System.out.print("a");
    }
    public A() {
        m();
    }
}

class B extends A {
    public void m() {
        System.out.print("b");
    }
    public B() {
        m();
    }
}

public class Test {  
    public static void main(String args[]) {
        new B();
    }
}

Odgovor: ab

Objašnjenje: Prva završi sa inicijalizacijom klasa A kao natklasa klase B, a zatim se pozove konstruktor klase B. Pošto je metoda natklase označena kao private, ona neće biti polimorfno redefinisana u B i zato se iz konstruktora A poziva metod te klase.

7. zadatak

Modifikator abstract je moguće staviti ispred definicije:

  1. metoda
  2. klase
  3. interfejsa
  4. nabrajanja
  5. polja klase

8. zadatak

Šta važi za throw na programskom jeziku Java?

  1. Može se koristiti u statičkim inicijalizacionim blokovima.
  2. Predstavlja operator jezika Java.
  3. Parametar mu je referenca na objekat klase koja mora biti izvedena iz klase Exception.
  4. Može se koristiti bez parametra.
  5. Predstavlja ključnu reč jezika Java.

Objašnjenje: throw se može koristiti u statičkim inicijalizacionim blokovima, ali samo ako se izuzeci bačeni preko njega u tom istom statičkom inicijalizacionom bloku i uhvate. Za razliku od C++, u Javi throw nije operator već naredba (i ključna reč), i ponovno bacanje izuzetka sa throw; nije dozvoljeno. Parametar mu je referenca na objekat izveden iz klase Throwable, koja je nadklasa Exception.

9. zadatak

Ukoliko su definisani sledeći interfejsi:

interface I1 {int m(int i);}
interface I2 {int m(int i, int k, int j);}
interface I3 {double m(int n);}
interface I4 {double m(double x, double y);}
interface I5 {int m(int i);}

koje od navedenih naredbi su ispravne?

  1. int i=1,j=2; I5 i5=(i+j)->i*j;
  2. I3 i3=k->{double p=1; for (int i=1; i<=k; p*=i++); return p;};
  3. I2 i2=(x,y,z)->x+y-z;
  4. I4 i4=(a,b)->{a*b};
  5. I1 i1=n->n+5;

Objašnjenje: Izraz sa četvrtim interfejsom nije validan jer kada se lambda izraz okruži blokom ({}) više se ne podrazumeva return. Izraz sa petim interfejsom ima sintaksnu grešku, jer (i+j)->... nema smisla.

10. zadatak

Koja tvrđenja su tačna na programskom jeziku Java?

  1. Ako je pre ulaska u wait() pozvan metod notifyAll() za isti objekat, nit koja poziva wait() neće biti blokirana.
  2. Po ulasku u wait(), nit se blokira (suspenduje) i oslobađa se brava objekta.
  3. Metodi wait(), notify() i notifyAll() moraju da se pozivaju iz sinhronizovanih delova koda.
  4. Metod notify() budi samo jednu nit i to uvek onu koja je najduže čekala.
  5. wait() je metod klase Thread.

Objašnjenje: wait() je metod klase Object, dok notify() ne budi nužno nit koja je najduže čekala.