Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » pfp » Aufgabe 1 (Übersicht)
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
pruefungen:bachelor:pfp:loesungws15 [18.07.2016 16:09] – Scala-Aufgaben hinzugefügt! Marcel[Inf] | pruefungen:bachelor:pfp:loesungws15 [19.07.2018 15:50] (aktuell) – evren | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Aufgabe 1 ====== | ====== Aufgabe 1 ====== | ||
- | a) 1 und 4 | + | * a) 1 und 4 |
- | b) 2 und 4 (???) (einerseits | + | * b) 2 und 4 |
+ | Da nur nach gefragt ist, was den Speedup verbessern **könne**, ist 4 auch richtig, da es in manchen Fällen eine bessere Lastverteilung | ||
- | c) 2 und 3 (siehe Seite 26 VL Folie: https:// | + | * c) 2 und 3 (siehe Seite 26 VL Folie: https:// |
====== Aufgabe 2 ====== | ====== Aufgabe 2 ====== | ||
- | a) | ||
- | < | ||
- | </ | ||
- | b) | + | * a) |
- | < | + | < |
+ | |||
+ | * b) | ||
+ | <code=java> | ||
boolean manageThreads(String linkUrl) { | boolean manageThreads(String linkUrl) { | ||
- | if (curThreads.incrementAndget() <= maxThreads) { | + | |
- | CrawlThread t = new CrawlThread(linkUrl); | + | CrawlThread t = new CrawlThread(linkUrl); |
- | t.start(); | + | t.start(); |
- | } else { | + | } |
- | curThreads.decrementAndGet(); | + | |
- | return false; | + | curThreads.decrementAndGet(); |
- | } | + | return false; |
+ | } | ||
} // END OF manageThreads | } // END OF manageThreads | ||
</ | </ | ||
- | c) | + | * c) |
- | < | + | <code=java> |
public void run() { | public void run() { | ||
- | process(); | + | |
- | curThreads.decrementAndGet(); | + | curThreads.decrementAndGet(); |
} | } | ||
</ | </ | ||
- | d) | + | * d) |
- | < | + | <code=java> |
synchronized(visitedUrls) { | synchronized(visitedUrls) { | ||
- | if(!visitedUrls.contains(linkUrl)){ | + | |
- | doVisit = true; | + | doVisit = true; |
- | visitedUrls.add(linkUrl); | + | visitedUrls.add(linkUrl); |
- | } | + | } |
} | } | ||
</ | </ | ||
+ | ====== Aufgabe 3 ====== | ||
+ | {{: | ||
- | ====== Aufgabe 4 ====== | + | Nicht gefragt, hier aber erwähnt: |
- | a) | + | |
- | 3 | + | |
- | Nein ist nicht möglich, s wird bereits mit anderen Werten belegt bevor das Programm parallel ausgeführt wird. Die Sichtbarkeit der in Zeile 25 festgelegten Werte ist gewährleistet. | + | Beschränktheit: |
- | b) | + | Lebendigkeit: |
- | 3 | + | |
- | Ja, " | + | ====== Aufgabe 4 ====== |
+ | * a) 3 | ||
+ | Nein ist nicht möglich, s wird bereits mit anderen Werten belegt, bevor das Programm parallel ausgeführt wird. Die Sichtbarkeit der in Zeile 25 festgelegten Werte ist gewährleistet (genauer [nicht VL-Stoff]: Es existiert im Allgemeinen eine Happens-Before Ordnung zwischen Code vor start() und dem Thread-Code.) | ||
- | c) | + | * b) 2 |
- | 4 | + | Nein, " |
- | Nein, da die Threads wieder gejoint wurden. Das Programm ist somit nicht mehr parallel. Die Sichtbarkeit ist im (einzigen) Thread gewährleistet. | + | * c) 4 |
+ | | ||
+ | |||
+ | Was bringt hier, dass s als volatile deklariert ist? volatile wirkt sich nur auf die Referenz selbst aus, diese wird aber nie geändert, könnte also genauso gut finaln sein. | ||
====== Aufgabe 5 ====== | ====== Aufgabe 5 ====== | ||
Zeile 104: | Zeile 110: | ||
def sortAllWith: | def sortAllWith: | ||
sortFun => ls => for (cur <- ls) yield sortFun(cur) | sortFun => ls => for (cur <- ls) yield sortFun(cur) | ||
+ | </ | ||
+ | |||
+ | Falls man nicht unbedingt eine Listenabstraktion hätte verwenden müssen: | ||
+ | < | ||
+ | def sortAllWith: | ||
+ | list.map(x => function(x)) | ||
+ | } | ||
</ | </ | ||