Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Allgemeines:   (Übersicht)

Allgemeines:

Prüfer: Professor Philippsen
Beisitzer: Patrick Kreutzer, Marius Kamp
Ergebnis: 1.0

Die Fragen wurden von den Beisitzern gestellt, Philippsen hat wie gewohnt nur mitgeschrieben. Die Atmosphäre war sehr angenehm, es wurde nicht unnötig nachgebohrt wenn man gesagt hat, dass man etwas nicht weiß.

Kein Anspruch auf Vollständigkeit, ich habe bestimmt die eine oder andere Frage vergessen. Logischerweise auch keinen Anspruch auf Korrektheit der Antworten.

  • F: Frage (einer der Beisitzer)
  • A: Antwort

Teil 1: Fragen zum Blockpraktikum

  • F: Was haben wir im Praktikum gemacht?
  • A: VM mit JIT programmiert. Zuerst nur Interpreter, dann JIT, Registervergabe und Inlining.
  • F: Wie funktioniert Interpretation?
  • A: Einfache Interpretation, indirektes und direktes Durchfädeln jeweils mit Vor-/Nachteilen erklärt.
  • F: Was haben wir bei JIT1 gemacht?
  • A: Vorteile von nativer Übersetzung erklärt. Trampolinfunktion.
  • F: Wozu benötigt man die Trampolinfunktion?
  • A: Kompilierung der Methode anstoßen, ggf. Optimierungen durchführen.
  • F: Danach haben wir Registervergabe gemacht…
  • A: Linear Scan statt Registerfärben. Finden von SCCs mittels Kosarajus.
  • F: Was ist er Nachteil von SCCs?
  • A: Keine Löcher, Kontrollflussunabhängigkeit (hier wollten sie ein Beispiel, mir ist keines eingefallen. Gemeint war, wenn eine Variable z.B. nur in einem kleinen Teil einer Schleife lebendig ist, wird sie mit SSCs für die gesamte Schleife als lebendig erkannt)
  • F: Warum kann man die SSCs direkt verwenden?
  • A: Topologisch sortiert
  • F: Was machen wir mit den Lebensspannen?
  • A: Linear Scan erklärt.
  • F: Welche anderen Heuristiken gibt es noch?
  • A: z.B. Variablen in Schleifen oder Variablen, die als nächstes benötigt werden, bevorzugen
  • F: Was haben wir dann gemacht?
  • A: Inlining, besonders bei kleine Funktionen sinnvoll.
  • F: Was muss dabei alles verändert/beachtet werden?
  • A: Anpassen von Sprungzielen (vor/nach dem Inling, in der geinlinten Funktion), Returns durch Mov+Sprung ersetzen
  • F: An welche Stelle haben wir das gemacht? Warum?
  • A: TVM-Bytecode. Vorteile gegenüber E2: Vorzeitige Returns einfach, keine Umbenennung von Variablen notwendig. Vorteile gegenüber Assembler: Flexibler, weniger plattformabhängige Sachen, auf die man achten muss (z.B. Aufbau/Abbau von Funktionsstacks), Sprungzielberechnung einfach, da alle Instruktionen die gleiche Länge, Optimierungen nach dem Inlining möglich

Teil 2: Fragen zur Vorlesung

Funktionale Programmierung
  • F: E2 soll eine funktionale Programmiersprache werden: Was muss dabei beachtet werden?
  • A: Besonderheiten von FP erklärt
  • F: In funktionalen Sprachen können Typen erkannt werden, obwohl sie nicht explizit hingeschrieben werden. Wie geht das?
  • A: Typinferenz und Unifikation erklärt
  • F: Was ist die Besonderheit bei Funktionsaufrufen?
  • A: PAP, Speichern des Kontext in Closures (auf dem Heap)
Garbage Collection
  • F: Welche Garbage Collection Verfahren gibt es?
  • A: Reference Counting, Mark/Sweep, Kopierendes Bereinigen
  • F: Was ist der Hauptnachteil von allen Verfahren?
  • A: Verlangsamung/Pausen durch GC
  • F: Wie kann man das lösen?
  • A: Generationenkonzept erklärt
  • F: Was kann hier passieren/worauf muss man achten?
  • A: Zeiger von der alten in die neue Generation, darf nicht übersehen werden. Verfahren dafür erklärt (Erinnerungsmengen, Markierungsbits).
  • F: Wieso ist das andersum (Zeiger von junge in alte Generation) kein Problem?
  • A: GC der alten und neuen Generation werden gemeinsam durchgeführt.
Aspekte
  • F: Wie funktioniert das mit Aspekten?
  • A: Einweben von Aspekten mit Advices und Pointcuts erklärt
  • F: Welche Typen von Advices gibt es? Warum muss man sie unterschiedlich behandeln?
  • A: Before/After/Around Advices. Mehrere mögliche Ausgänge (mehrere Returns, Exceptions) bei After Advices, bei Around Advices muss der Orinalcode angesprungen werden
  • F: Was muss man bei Around Advices besonders beachten?
  • A: Speichern des Kontextes. Ansprung des Originalcode mittels proceed.
  • F: Wie macht das AspektJ genau? (wusste ich nicht)
  • F: Bei AspektJ gibt es dynamischen und statischem Kontext. Was ist der Unterschied? (wusste ich nicht)
Exceptions (kurz vor Schluss)
  • F: Wie funktionieren Statische Tabellen?
  • A: erklärt