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?

  1. Create a ForkJoinTask
  2. Create the ForkJoinPool
  3. 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