Difference between revisions of "TU Wien:Einführung in die Programmierung 2 VU (Puntigam)/Fragenkatalog 2. Test"

From VoWi
Jump to navigation Jump to search
(use <quiz>)
 
Line 8: Line 8:
 
- Ein AVL-Baum ist stets effizienter als ein einfacher Suchbaum.
 
- Ein AVL-Baum ist stets effizienter als ein einfacher Suchbaum.
 
+ Lineare Listen sind einfach zu implementieren.
 
+ Lineare Listen sind einfach zu implementieren.
 +
+ Mergesort wird auf linearen Listen häufiger eingesetzt als Quicksort.
 +
- Hash-Tabellen eignen sich vor allem gut für geordnete Daten.
 +
+ Bäume verwenden wir meist nur wo andere Datenstrukturen nicht passen.
  
 
{Welche der folgenden Aussagen treffen auf die Ein- und Ausgabe über Streams in Java zu?}
 
{Welche der folgenden Aussagen treffen auf die Ein- und Ausgabe über Streams in Java zu?}
Line 18: Line 21:
 
+ Streams werden nach der Verwendung mittels close() geschlossen.
 
+ Streams werden nach der Verwendung mittels close() geschlossen.
 
+ Gepufferte Streams sind meist effizienter als ungepufferte.
 
+ Gepufferte Streams sind meist effizienter als ungepufferte.
 +
- Ab Java 7 schließen sich am Methodenende offene Streams automatisch.
 +
+ Streams vom Typ Writer wandeln die Kodierung automatisch um.
 +
+ Streams werden nach der Verwendung mittels close() geschlossen.
 +
- Streams vom Typ InputStream wandeln die Kodierung automatisch um.
  
 
{Welche der folgenden Aussagen treffen auf Schleifen und Schleifeninvarianten zu?}
 
{Welche der folgenden Aussagen treffen auf Schleifen und Schleifeninvarianten zu?}
Line 98: Line 105:
 
- {x>0} while (x>0) x--; {x>0}
 
- {x>0} while (x>0) x--; {x>0}
 
- {true} x++; {x>=0}
 
- {true} x++; {x>=0}
 +
+ {x>2} if (x<0) x--; {x>2}
 +
- {y<=0} while (++x < 0) y--; {y<0}
 +
 +
 +
{Welche der folgenden Aussagen treffen für Design-by-Contract zu?}
 +
+ Invarianten beziehen sich auf Objektzustände.
 +
- Es gilt nur das, was explizit in Zusicherungen steht.
 +
+ Auch ohne Zusicherungen muss gelten, was allgemein erwartet wird.
 +
+ Vorbedingungen beschreiben häufig Eigenschaften von Parametern.
 +
- Invarianten beschreiben häufig Eigenschaften von Methodenparametern.
 +
 +
{Welche der folgenden Aussagen treffen auf gut gewählte Kommentare in Programmen zu?}
 +
- Invarianten sollen bei Deklarationen lokaler Variablen stehen.
 +
+ Vor Methoden stehen hauptsächlich Vor-und Nachbedingungen.
 +
- Hinweise zur Programmanwendung stehen meist bei Schleifenköpfen.
 +
- Kommentare sollen sich nur auf die Implementierung konzentrieren.
 +
+ In Methodenrümpfen stehen hauptsächlich Schleifeninvarianten.
 +
 
</quiz>
 
</quiz>

Latest revision as of 17:30, 30 June 2020

Beim Test bekommt man zufällig 5 Fragen mit je 5 Antwortmöglichkeiten. Um neue Fragen hinzuzufügen konvertiere sie mit dieser Website.







  

1

Welche der folgenden Aussagen treffen in Bezug auf Algorithmen und Datenstrukturen zu?

Absicherung gegen schlechte Datenverteilung kann die Laufzeit erhöhen.
Arrays sind sehr effizient wenn normale Arrayzugriffe ausreichen.
Bei unbekannter Datenverteilung gehen wir von Zufallsverteilung aus.
Ein AVL-Baum ist stets effizienter als ein einfacher Suchbaum.
Lineare Listen sind einfach zu implementieren.
Mergesort wird auf linearen Listen häufiger eingesetzt als Quicksort.
Hash-Tabellen eignen sich vor allem gut für geordnete Daten.
Bäume verwenden wir meist nur wo andere Datenstrukturen nicht passen.

2

Welche der folgenden Aussagen treffen auf die Ein- und Ausgabe über Streams in Java zu?

'new FileWriter(s)' erzeugt einen gepufferten Stream.
'new FileWriter(s)' wirft eine IOException wenn s schon existiert.
Ausgaben über gepufferte Streams gehen direkt an das Betriebssystem.
Puffer können als Wrapper vor nichtgepufferte Streams gehängt werden.
Viele Methoden von PrintStream werfen keine IOException.
Streams vom Typ Reader wandeln die Kodierung automatisch um.
Streams werden nach der Verwendung mittels close() geschlossen.
Gepufferte Streams sind meist effizienter als ungepufferte.
Ab Java 7 schließen sich am Methodenende offene Streams automatisch.
Streams vom Typ Writer wandeln die Kodierung automatisch um.
Streams werden nach der Verwendung mittels close() geschlossen.
Streams vom Typ InputStream wandeln die Kodierung automatisch um.

3

Welche der folgenden Aussagen treffen auf Schleifen und Schleifeninvarianten zu?

Die Abbruchbedingung kann nicht Teil einer Schleifeninvariante sein.
Durch Schleifeninvarianten werden Schleifen im Debugger iterierbar.
Eine Schleifeninvariante beschreibt, was jede Iteration ändert.
Schleifeninvarianten garantieren den Fortschritt jeder Iteration.
Schleifeninvarianten helfen dabei, Programme statisch zu verstehen.
Schleifeninvarianten müssen auch vor und nach der Schleife gelten.
Schleifeninvarianten müssen vor jedem Methodenaufruf erfüllt sein.
Termination muss unabhängig von Schleifeninvarianten geprüft werden.

4

Welche der folgenden Aussagen treffen auf das Testen großer Programme zu?

Anwender sind wegen möglicher Verfälschungen nicht einzubeziehen.
Auch intensives Testen kann nicht alle Fehler aufdecken.
Eine Code-Review hilft beim Auffinden von Fehlerursachen.
Experten für Softwaresicherheit sollen einbezogen werden.
Debugger eignen sich zum Aufdecken fast aller Fehlerursachen.
Regressions-Tests müssen fast immer händisch durchgeführt werden.
White-Box-Testen legt Testfälle vor der Implementierung fest.
White-Box-Testen leitet Testfälle aus der Implementierung ab.
Black-Box-Testen leitet Testfälle aus Anwendungsfällen ab.
Mit absichtlichen Fehlern ist die Qualität des Testens prüfbar.

5

public int median(int[] a) { return a[a.length / 2]; }

Welche der folgenden Aussagen können (jede für sich) als Vor- bzw. Nachbedingungen dieser Methode sinnvoll sein?

Nachbedingung: Gibt einen Eintrag etwa in der Mitte von a zurück.
Nachbedingung: Setzt voraus, dass a mindestens einen Eintrag hat.
Nachbedingung: Wirft eine Exception wenn a.length == 0.
Nachbedingung: Halbiert die Länge von a.
Vorbedingung: a != null
Vorbedingung: a ist absteigend sortiert.
Vorbedingung: a ist aufsteigend sortiert.
Vorbedingung: Gibt den Median zurück wenn a sortiert ist.
Vorbedingung: Greift auf einen Eintrag von a zu.
Vorbedingung: Wirft eine Exception wenn a == null.

6

Welche der folgenden Aussagen treffen auf Iteratoren in Java zu?

Lineare Listen sind meist einfacher iterierbar als Binärbäume.
Mehrere Iteratoren auf dem gleichen Objekt stören sich gegenseitig.
Iterator-Implementierungen sind eigene Klassen.
Iterator-Implementierungen bestimmen die Reihenfolge der Iterationen.
Iteratoren über Bäume sind häufig rekursiv implementiert.

7

Welche der folgenden Aussagen treffen auf die notwendige Überprüfung von Eingabedaten zu?

Alle Parameter einer Methode müssen in der Methode überprüft werden.
Die Validierung soll erst möglichst knapp vor der Ausgabe erfolgen.
Java-Objekte vom Typ Pattern lesen nur überprüfte Daten ein.
Plausibilitätsprüfungen sollen direkt nach der Eingabe erfolgen.
Reparaturversuche nicht plausibler Daten können gefährlich sein.
Unzureichende Prüfung kann z.B. zu einer SQL-Injection führen.
Nicht validierbare Daten reparieren wir direkt nach der Eingabe.
Reguläre Ausdrücke können Prüfungen von Datenformaten vereinfachen.

8

Welche der folgenden Aussagen treffen auf Klassen und Interfaces im Java-Collections-Framework zu?

Einträge in einem TreeSet<E> sind sortiert (über Iterator sichtbar).
Set<E> erweitert Collection<E>, verbietet aber mehrfache Einträge.
Map<K,V> implementiert Set<K> als balancierten binären Suchbaum.
ArrayDeque<E> erweitert ArrayList<E> um die Methoden von Deque<E>.
In eine Queue<E> kann man neben add auch mittels offer einfügen.
LinkedHashMap<K,V> ist sowohl Hash-Tabelle als auch lineare Liste.
LinkedList<E> implementiert Deque<E> als doppeltverkettete Liste.
LinkedList<E> implementiert Set<E> als einfachverkettete Liste.

9

Welche der folgenden Aussagen treffen auf die Einhaltung von Zusicherungen entsprechend Design-by-Contract zu?

Clients müssen für die Einhaltung von Invarianten sorgen.
Clients müssen für die Einhaltung von Nachbedingungen sorgen.
Clients können sich auf die Einhaltung von Nachbedingungen verlassen.
Invarianten müssen zu ausnahmslos jedem Zeitpunkt erfüllt sein.
Server müssen für die Einhaltung ihrer Nachbedingungen sorgen.
Server müssen für die Einhaltung ihrer Vorbedingungen sorgen.
Server müssen für die Einhaltung ihrer Invarianten sorgen.
Server können sich auf die Einhaltung ihrer Vorbedingungen verlassen.
Server können sich auf die Einhaltung ihrer Nachbedingungen verlassen.

10

Welche der folgenden Hoare-Tripel gelten (für Anweisungen in Java)?

{true} x = y<z ? y : z; {x>=y}
{y>0} while (x>0) x--; {y>0}
{true} x=0; {x>=0}
{x>0} while (x>0) x--; {x>0}
{true} x++; {x>=0}
{x>2} if (x<0) x--; {x>2}
{y<=0} while (++x < 0) y--; {y<0}

11

Welche der folgenden Aussagen treffen für Design-by-Contract zu?

Invarianten beziehen sich auf Objektzustände.
Es gilt nur das, was explizit in Zusicherungen steht.
Auch ohne Zusicherungen muss gelten, was allgemein erwartet wird.
Vorbedingungen beschreiben häufig Eigenschaften von Parametern.
Invarianten beschreiben häufig Eigenschaften von Methodenparametern.

12

Welche der folgenden Aussagen treffen auf gut gewählte Kommentare in Programmen zu?

Invarianten sollen bei Deklarationen lokaler Variablen stehen.
Vor Methoden stehen hauptsächlich Vor-und Nachbedingungen.
Hinweise zur Programmanwendung stehen meist bei Schleifenköpfen.
Kommentare sollen sich nur auf die Implementierung konzentrieren.
In Methodenrümpfen stehen hauptsächlich Schleifeninvarianten.