java 2
Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff
Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff
Kartei Details
Karten | 500 |
---|---|
Sprache | Deutsch |
Kategorie | Informatik |
Stufe | Universität |
Erstellt / Aktualisiert | 03.03.2020 / 22.06.2022 |
Weblink |
https://card2brain.ch/box/20200303_java_2
|
Einbinden |
<iframe src="https://card2brain.ch/box/20200303_java_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>
|
Was macht man mit dem Fork/Join framework
Arbeit wird aufgeteilt (rekursion) und zwischen threads verteilt.
Was sind die Steps die man für das fork/join framework benötigt?
1. ForkJoinTask erstellen
2. ForkJoinPool erstellen
3. ForkJoinTask starten
Welche zwei (fürs examen wichtige klassen) implementioeren das ForkJoinTask interface?
RecursiveAction und RecursiveTask
Was muss man bei RecursiveAction implementieren? (für fork/join framework)
compute() die void returned
Was muss man bei RecursiveTask implementieren (für fork/join framework)
compute, was einen generischen typen zurückgibt
Worauf sollte man achten beim reviewen von Fork/join issues?
- Die klasse sollte RecursiveAction oder RecursiveTask extenden
- Wenn RecursiveActin: compute ohne argumente und mit returntype void wird überschrieben
- Wenn RecursiveTask: compute ohne argumente mit generischem typen wird überschrieben
- invokeAll() bekommt zwei instanzen der fork/join klassen, returned nichts
- fork() submitted neue Task zum pool
- join() kommt vor fork(), current thread wartet auf result von subtask
- compute() in cumpote() führt dazu, dass task auf result von subtask wartet
- fork() sollte aufgerufen werden bevor current thread compute/( performed (mit join um die results danach zu lesen)
- compute() immt keine argumente, der konstruktor der klasse wird oft verwendet um instruktionen in die task zu gebe
Was für parameter hat die collect()-version die eine parallele reduction kann?
accumulator, combiner (assoziativ, stateless), supplier
Was gibt es für Regeln dafür, dass eine parallele reduction mit collect ausgeführt werden kann?
- Der Stream muss parallel sein
- Der parameter der collect operation hat die Charakteristik: Collector.Characteristics.CONCURRENT
- Entweder der Stream ist ungeordnet oder der Collector hat die Charakteristig Collector.Characteristic.UNORDERED
Was gibt es für methoden der Collector klasse um collectoren zu erhalten die UNORDERED und CONCURRENT sind?
- Collectos.toConcurrentMap()
- Collectors.groupingByConcurrent()
Was bringt eine CyclicBarrier? Wie funktioniert sie?
Wartet auf Anzahl n Threads bis sie an bestimmten Punkt sind.
Der punk wird mit cyclicBarrier.await() anzegeigt -> jeder Thread ruft diese Funktion auf und zählt dann den counter hoch bis die cyclic barrier passiert werden kann
Was ist ein Nachteil bei cyclic barriers?
Wenn ein Thread super langsam ist müssen alle auf ihn warten
Auf was basiert das Fork/Join framework?
Auf Rekursion
Was sind die Steps die man im fork/join framework machen muss?
- Create a ForkJoinTask
- Create the ForkJoinPool
- Start the ForkJoinTask
Welche wichtigen Klassen implementieren das ForkJoinTask interface, die man extenden kann um die fork/join-lösung anzuwenden?
RecursiveAction und RecursiveTask
Was ist der Unterschied in der Implemtierung von RecursiveAction zu RecursiveTask?
RecursiveAction: implementiere compute mehtode die void zurück gibt
RecursiveAction: implementiere compute method die generischen typ zurückgibt
Wie ruft man in einer RecursiveAction nach dem splitten der Arbeit die compute-methoden der gesplitten Actions auf?
invokeAll(new ActionImpl(param1, start, middle), new ActionIMpl(param1, start, middl))
Wie startet man den ForkJoinPool?
Task anlegen, ForkJoinPool pool = new ForkJoinPool();
pool.invoke(task);
Kann bei einem ForkJoinTask garantiert werden dass er umgehend ausgeführt wird?
Nein, es kann sein dass 10 tasks erstellt werden aber nur 4 threads verfügbar sind. Dann muss gewartet werden bis genug frei sind.
Wie funktioniert das forken bei einer RecursiveTask?
if(...) return value;
else(...) {
RecursiveTask<Double> otherTask = new WeighAnimalTask(weights,start,middle);
otherTask.fork();
return new WeighAnimalTask(weights,middle,end).compute() + otherTask.join();
}
Auf was sollte man bei Fork/Join klassen achten?
- Extended RecursiveAction oder RecursiveTask
- Wenn RecursiveAction: returns void
- Wenn RecursiveTask: no arguments, returns a generic type
- invokeAll nimmt zwei instanzen von fork/Join klassen, returned nichts
- fork() submitted neue task zum pool, wie thread executor submit()
- join() kommt nach fork() und zwingt den aktuellen thread auf das ergebnis der subtask zu warten
- compute() innerhalb compute() zwingt den task azuf das ergebnis der subtask zu warten
- fork() sollte or compute() kommen, mit join() um die results zu lesen
- compute() hat keine argumente -> konstruktor wird oft verwendet um instruction s zu passen
Was bedeutet Liveness?
Die Fähigkeit einer Anwendung innerhalbg einer Zeitspanne fertig zu werden
Was sind die drei wichtigsten liveness issues?
deadlock, starvation, livelock
Was ist ein Deadlock?
Wenn zwei Threads gegenseitig für immer aufeinander warten
Was bedeutet Starvation?
Wenn ein thread ständig den resorucen-zugriff verweigert bekommt da andere threads ihn lblockieren
Was ist ein Livelock?
Wenn die threads zwar aktiv sind und versuchen ihre aufgabe zu lösen aber eigentlich blockiert sind, z.b. wenn ein deadlock aufgelöst werden soll und alle resourcen freigegeben werden, dann aber weider zylkisch so gelbokct werden, dass die threads ihre arbeit nicht vollenden können.
Für was wird die Klasse java.io.File verwendet?
informationen über files/directories lesen, inhalte eines directories listen, create/delete files/directories
Kann man mit der File-Klasse auch daten lesen/schreiben?
Nein, man kan nsie aber in viele Stream-klassen übergeben
Wie kann man bei der FileKlasse überprüfen ob die file oder das directory existieren=
.exists() (true/false)
Wie kann man bei der FileKlasse den namen des files/directories bekommen?
getName()
Wie kann man bei der FileKlasse den absoluten pathname auslesen?
getAbsolutePath()
Wie kann man bei der FileKlasse checken ob es sich um ein directory handelt?
.isDirectory() (true/false)
Wie kann man bei der FileKlasse checken ob es sich um eine File handelt?
isFile()
Wie kann man bei der FileKlasse die Anzahl bytes in der FIle auslesen?
length() -> für performanceverbesserungen werden manchmal mehr bytes reserviert als eigentlich benötigt
Wie kann man bei der FileKlasse auslesen wann die file als letztes bearbeitet wurde?
.lastModified()
Wie kann man bei der FileKlasse ein file/directory löschen?
.delete()
Wie kann man bei der FileKlasse eine file umbenennen?
.renameTo(File)
Wie kann man bei der FileKlasse ein Directory anlegen?
mkdir()
Wie kann man bei der FileKlasse ein directory mit parent-directories anlegen?
mkdirs()
Wie kann man bei der FileKlasse den abstract pathname des parents auslesen?
getParent() (null wenn es keinen gibt)
Wie kann man bei der FileKlasse die Files im directory auslesen?
listFiles() -> Returnes File[] array