Neue Themen aus der Java SE 11 Programmer II-Prüfung

Über diesen Artikel

Ich habe am 16. Mai 2020 die Prüfung * Java SE 11 Programmer II * abgelegt und bestanden und die Qualifikation * Java Programmer, Gold SE 11 * erhalten. Ich hoffe, dieser Artikel hilft denjenigen, die die Prüfung ablegen werden. Ich beschloss zu schreiben. Ich habe die neuen Funktionen selbst nicht wirklich verstanden, daher überprüfe ich sie auch. Als Voraussetzung habe ich * Java Programmer, Silver * Qualifikationen (* Java SE 11 Programmer II * Qualifikationen) und ich gehe davon aus, dass ich einige Kenntnisse über * Java SE 8 Gold * erworben habe. Ich werde nicht viel über Core-APIs wie Lambda-Ausdrücke und Stream-APIs sprechen, aber ich werde hauptsächlich über die neuen Elemente schreiben, die aus SE 8 hinzugefügt wurden. Dieser Artikel ist nur eine kurze Erklärung. Weitere Informationen finden Sie unter den Links in den einzelnen Artikeln.

Einführung

Das Unternehmen, für das ich arbeite, hat eine Qualifikationszulage, und ich habe für Qualifikationen studiert, um Java zu lernen und eine Qualifikationszulage zu erhalten. * Java SE 7/8 Bronze * und * Java SE 8 Silver * (* Java SE 8 Programmer I *) waren beide relativ leicht zu bekommen, nachdem das Black Book einige Wochen lang gelöst worden war. Nachdem ich ungefähr zwei Monate lang über Gold studiert hatte, konnte ich SE 8 bestehen, aber ich wollte die neueste Qualifikation erhalten, wenn ich die höchste Qualifikation erhalten wollte, also entschied ich mich für SE 11 Hat. Das Nachschlagewerk wurde jedoch bis zum 16. Mai 2020 nicht veröffentlicht, und es wird voraussichtlich einige Zeit dauern, bis es veröffentlicht wird. Ich musste also neue Bereiche ab SE 11 studieren, ohne mich auf Nachschlagewerke verlassen zu müssen, was ziemlich schwierig war. Durch die Teilnahme an einem kostenlosen Online-Seminar von Oracle wurden grobe Informationen gesammelt. Der Fragesteller war der Ausbilder und die Geschichte war leicht zu verstehen, daher war sie sehr bedeutungsvoll. Wenn ich die Gelegenheit dazu habe, gibt es meiner Meinung nach keinen Verlust, wenn ich an dem Kurs teilnehme. Wenn Sie die Prüfung bis zum 31. Mai ablegen, führen wir eine Kampagne durch, in der Sie die Prüfung erneut kostenlos ablegen können. Wenn Sie also Zweifel haben, möchten Sie sie möglicherweise einmal ablegen. Details finden Sie unter den unten stehenden Links.

[Kampagne :: Oracle :: Pearson VUE] (https://www.pearsonvue.co.jp/Clients/Oracle/Special-Offers/Retake2020.aspx)

Prüfungsbeschreibung

Beginnen wir mit einem Überblick über die Prüfung.

Java SE 11 Programmer II | Oracle University

||Java SE 11 Programmer II|Java SE 8 Programmer II| |:-:|:-:|:-:| |Prüfungsname|Java SE 11 Programmer II|Java SE 8 Programmer II| |Prüfungsnummer|1Z0-816|1Z0-809| |Prüfungsgebühr(Steuer ausgeschlossen)|¥26,600|¥26,600| |Fragenformat|Wahlfrage|Wahlfrage| |Testzeit|180 Minuten|150 Minuten| |Anzahl der Fragen|80 Fragen|85 Fragen| |Linie passieren|63%|65%|

Die Anzahl der Fragen hat sich etwas verringert und die Prüfungszeit hat zugenommen. Es scheint, dass der Code der Problemstellung insgesamt etwas länger ist. Die Anzahl der vorbeifahrenden Linien ist leicht zurückgegangen, aber ich denke, das liegt daran, dass es sich um eine neue Qualifikation handelt. Die eigentliche Produktion hat ungefähr 30 Minuten gedauert, daher denke ich nicht, dass es notwendig ist, sich zu beeilen, um das Problem zu lösen.

Unterschiede im Fragenbereich

Neu hinzugefügtes Thema

--Private Methode der Schnittstelle

Die neu hinzugefügten Themen konzentrierten sich auf Modulfunktionalität und sichere Codierung.

Themen, auf die man sich konzentrieren muss

--Srialisierung

Das Verhältnis der Serialisierung ist höher als Sie denken, stellen Sie also sicher, dass Sie es verstehen. In Bezug auf JDBC gibt es auch Probleme im Zusammenhang mit Gegenmaßnahmen zur SQL-Injektion im Zusammenhang mit der sicheren Codierung. Lambda-Ausdruck, Stream API ist das wichtigste Thema wie SE 8, und das Fragenverhältnis ist ziemlich hoch.

Themen, die nicht mehr angezeigt werden

Mir wurde gesagt, dass die Datums- und Uhrzeit-API nicht auf dem Seminar angezeigt wurde, sondern nur eine Frage ein Formatproblem aufwies. Es scheint besser, nur die Grundlagen zu lernen. Was das Entwurfsmuster betrifft, kann das Singleton-Muster in Verbindung mit einer sicheren Codierung wie einer Synchronisationssteuerung abgefragt werden.

Java SE 11-Ausführungsumgebung

Pleiades Java 11-Standardinstallation und das Ende des Eclipse-Codenamens

Es gibt einen kompletten Satz von ** Plejaden All In One **, der über den Link heruntergeladen werden kann. Dies ist also das Beste, wenn Sie ihn schnell verwenden möchten.

Private Methode der Schnittstelle

Ab Java 9 können Sie in Ihren Schnittstellen ** private Methoden ** definieren. Es wird für die Verwendung in statischen Methoden und Standardmethoden in derselben Schnittstelle verwendet, hat eine Implementierung und kann nicht von externen Klassen geerbt oder aufgerufen werden.

SampleInterface.java


public interface SampleInterface{
    default void defaultMethod(){
        privateMethod("Taro");
        privateMethod("Jiro");
    }

    static void staticMethod(){
        privateStaticMethod("Saburo");
        privateStaticMethod("Shiro");
    }

    private void privateMethod(String name){
        System.out.println( "Hallo," + name + "Herr.");
    }
    
    private static void privateStaticMethod(String name){
        System.out.println( "Hallo," + name + "Herr.");
    }
}

SampleClass.java


public class SampleClass implements SampleInterface{
	public static void main(String[] args) {
		SampleClass sc = new SampleClass();
		sc.defaultMethod();
		SampleInterface.staticMethod();
	}
}

Ausführungsergebnis


Hallo Taro
Hallo Jiro
Hallo, Saburo
Hallo, Shiros

Auf diese Weise können Sie beim Schreiben einer ähnlichen Verarbeitung in eine Schnittstelle diese präzise schreiben, ohne mehrmals denselben Code zu schreiben.

Verwendung der Inferenz lokaler Variablentypen (var)

Ab Java 10 ist eine Typinferenz mit var für lokale Variablen verfügbar. Der Typ wird automatisch von der rechten Seite abgeleitet, wenn die Variable zugewiesen wird.

Anwendungsbeispiel

LocalVariableType.java


public class LocalVariableType {
	public static void printInt(int i) {
		System.out.println(i + " is int type");
	}

	public static void printBoolean(boolean bl) {
		System.out.println(bl + " is boolean type");
	}

	public static void printString(String str) {
		System.out.println(str + " is String type");
	}

	public static void main(String[] args) {
		var i = 1;
		var bl = true;
		var str = "String";
		printInt(i);//Funktion, die ein Argument vom Typ int akzeptiert
		printBoolean(bl);//Funktion, die ein boolesches Argument akzeptiert
		printString(str);//Funktion, die ein Argument vom Typ String akzeptiert

		//Kann auch in List und für Anweisungen verwendet werden
		var list = List.of(i,bl,str);
		for(var l :list) {
			System.out.print(l + " ");
		}
		//Ab Java 11 kann var als Argument für Lambda-Ausdrücke verwendet werden, sodass es mit Anmerkungen versehen werden kann.
		Function<String,Integer> function = (@Annotation var a) -> a.length();
	}
}

Ausführungsergebnis


1 is int type
true is boolean type
String is String type
1 true String 

Wie bei JavaScript können Sie sehen, dass die Typinferenz jetzt von der rechten Seite aus durchgeführt werden kann. Inferenztypen können die Beschreibung von Generika weglassen, daher denke ich, dass es mit weniger Code einfacher zu sehen ist.

Beispiel für einen Kompilierungsfehler

Wenn der Typ nicht von der rechten Seite abgeleitet werden kann, tritt ein Kompilierungsfehler auf.

LocalVariableType2


public class LocalVariavleType2 {
	public static void main(String[] args) {
		var v;//Muss zum Zeitpunkt der Deklaration initialisiert werden
		var f1 = a -> a + 1;	//Lambda-Ausdrücke können nicht zugewiesen werden
		var f2 = (Runnable)() -> new String("Hello");//Kann durch Casting einer Funktionsschnittstelle initialisiert werden
		var list1 = {1, 2, 3};//Kann nicht zum Initialisieren eines Arrays verwendet werden
		var list2 = new int[]{1, 2, 3};//Kann durch Angabe des Typs initialisiert werden
		var list3 = new ArrayList<>();//Kompilierbar, aber vom Typ ArrayList<Object>werden
		var n = null;//null kann nicht zugewiesen werden
	}
}

Ich habe nur zwei Fragen direkt zur Verwendung von var gestellt, aber dies ist im Code der Problemstellung selbstverständlich. Lassen Sie uns also die Bedeutung verstehen.

Modulfunktion

Ich fuhr mit dem Lernen fort, indem ich mich auf die folgende Oracle-Seite bezog.

Grundlegendes zu Java 9-Modulen

Was ist ein Modul?

Ab Java 9 stehen Modulfunktionen zur Verfügung. Ein Modul ist ein übergeordnetes Konzept eines Pakets, bei dem es sich um eine Sammlung verwandter Pakete, Ressourcen und Modulbeschreibungen handelt. Grundlegende Bibliotheken wie java.lang werden ebenfalls im Modul java.base gespeichert. Auf dieses java.base-Modul kann zugegriffen werden, ohne Modulbeschreibungen wie das unten beschriebene Schlüsselwort require zu verwenden.

Vorteile der Modularisierung

Vereinfachung der Abhängigkeit

Durch die modulweise Beschreibung der Abhängigkeiten ist es nun möglich, die Abhängigkeiten zwischen Paketen einfach zu beschreiben.

Starke Einkapselung

Da Sie die Zugriffsberechtigung für die untergeordneten Pakete detaillierter angeben können, ist eine stärkere Kapselung möglich.

Die Ausführungsumgebung kann für jedes Modul angepasst werden

Indem Sie eine Laufzeit nur mit den Modulen erstellen, die Sie benötigen, können Sie die Laufzeit verkleinern und die Effektivität der JVM-Optimierung verbessern.

Moduldefinition

Sie können ein Modul definieren, indem Sie die folgende Moduldefinitionsdatei oben im Quellordner platzieren. Der Modulname muss in inverser Domäne und eindeutig sein (darf nicht denselben Namen enthalten).

module-info.java


module Java_SE_11_Gold {
//Beschreiben Sie den Moduldeskriptor usw.
}

Modulbeschreibung

requires

module-info.java


module A {
	requires B;
}

Ein Deskriptor, der angibt, dass das Modul von einem anderen Modul abhängt. Für den obigen Code liest Modul A Modul B. requires transitive

module-info.java


module A {
	requires B;
}
module B{
	requires transitive java.sql;
}

Ermöglicht das Lesen des angegebenen Moduls, wenn das Modul, das den erforderlichen transitiven Deskriptor beschreibt, beim Lesen des angegebenen Moduls gelesen wird. Für den obigen Code liest Modul B java.sql. Modul A liest auch Modul B, aber zu diesem Zeitpunkt liest Modul A gleichzeitig auch java.sql. Wenn Sie nur die Anforderungen in Modul B verwenden, kann Modul A java.sql nicht laden. requires static Das Vorhandensein eines Moduls ist nur zur Kompilierungszeit erforderlich. Zur Laufzeit nicht erforderlich. Es ist nur eine Einbildung, aber ich denke, es wird für Anmerkungen verwendet. exports

module-info.java


module A{
	exports samplePackage;
	exports samplePackage2 to B,C;
}

Auf die folgenden Pakete kann standardmäßig nicht von außen zugegriffen werden. Verwenden Sie den Exportdeskriptor, um den Zugriff von außerhalb des Moduls zu ermöglichen. Wenn Sie exportieren, erlauben Sie den Zugriff auf öffentliche Typen (und verschachtelte öffentliche und geschützte Typen). Im obigen Code wird angegeben, dass das Paket samplePackage von außen zugänglich ist. Sie können auch angeben, auf welche Pakete Sie den Zugriff zulassen möchten, indem Sie den Deskriptor export ... verwenden (mehrere Spezifikationen können durch Kommas getrennt angegeben werden). Der obige Code ermöglicht Modul B und Modul C den Zugriff auf das Paket samplePackage2. opens Es kann nicht zur Kompilierungszeit referenziert werden, aber es kann so gesteuert werden, dass es zur Laufzeit referenziert werden kann. Es gibt zwei Typen: opens ... to, das für jedes Paket festgelegt ist, und open module, das für das gesamte Modul festgelegt ist.

mojule-info.java


module Java_SE_11_Gold{
	opens samplePackage;//Macht das angegebene Paket für alle Module sichtbar
	opens aamplePackage2 to B,C;//Sie können mehrere Zielmodule einzeln angeben, die durch Kommas getrennt geöffnet werden sollen.
}

mojule-info.java


open module Java_SE_11_Gold{//Machen Sie es möglich, auf alle untergeordneten Module zu verweisen
}

uses Gibt den vom Modul verwendeten Dienst an. Ein Dienst besteht aus einer Reihe bekannter Schnittstellen und Klassen (normalerweise abstrakte Klassen). Weitere Informationen finden Sie unter dem folgenden Link zu javadoc. https://docs.oracle.com/javase/jp/8/docs/api/java/util/ServiceLoader.html provides...with Gibt an, dass das Modul eine Implementierung des Dienstes bereitstellt. Geben Sie nach dem Bereitstellen die Schnittstelle oder kleine und mittlere Klasse an, die für die Verwendung bereitgestellt werden soll, und geben Sie anschließend mit den Namen der Klasse an, die die Schnittstelle implementiert oder die abstrakte Klasse erbt.

Anonyme und automatische Module

Anonyme und automatisierte Module sind spezialisierte Module, die hauptsächlich zum Anwenden von Modulsystemen auf Code vor Java 8 verwendet werden. Hier erklären wir die Teile, die wahrscheinlich an der Prüfung beteiligt sind. Wenn Sie also mehr wissen möchten, klicken Sie bitte auf den folgenden Link. Lernen Sie das Modulsystem kennen

Anonymes Modul

Aus dem Klassenpfad geladene Pakete und Typen gehören jetzt zu einem Modul namens * Anonymes Modul *. Anonyme Module können keine Moduldefinition (module-info.java) haben, daher können sie keine Moduldeskriptoren zur Beschreibung von Abhängigkeiten verwenden, verhalten sich jedoch implizit wie folgt:

Automatisches Modul

Ein Modul zur Behandlung von Nichtmodulen als Module. Code ohne Moduldefinition wird als automatisches Modul erkannt. Wie bei anonymen Modulen können Sie einen Moduldeskriptor nicht explizit definieren und er verhält sich implizit wie folgt:

Referenzierbarkeit zwischen Modulen

Ein benanntes Modul ist ein reguläres Modul mit einer Moduldefinition. Der Befehl --add-module ist auch ein Befehl, mit dem Sie dem Root-Modul ein beliebiges Modul hinzufügen können. In der folgenden Tabelle werden die Modultypen angezeigt, auf die von der markierten Seite verwiesen wird (auf die verwiesen wird), und die Module, auf die von der anderen Seite verwiesen wird.

Benanntes Modul(Referenziert) Automatisches Modul(Referenziert) Anonymes Modul(Referenziert) Eigenschaften
Benanntes Modul Kann verwiesen werden Kann verwiesen werden Kann nicht referenziert werden Es gibt eine Moduldefinition, die im Modulpfad platziert wird
Automatisches Modul --add-Kann mit dem Modulbefehl referenziert werden Kann verwiesen werden Kann verwiesen werden Keine Moduldefinition im Modulpfad
Anonymes Modul --add-Kann mit dem Modulbefehl referenziert werden --add-Kann mit dem Modulbefehl referenziert werden Kann verwiesen werden Keine Moduldefinition im Klassenpfad

ServiceLoader-Klasse

Diese Klasse heißt SPI (Survice Provider Interface) und verwaltet den Mechanismus für die Bereitstellung von Implementierungen durch Dritte. Die Bibliothek stellt Dienste bereit, bei denen es sich um SPIs handelt (eine Reihe von Schnittstellen und Klassen (normalerweise abstrakte Klassen)), und der Service Loader lädt die Implementierung eines Drittanbieters. Ausführliche Spezifikationen und Methoden finden Sie in den folgenden Oracle-Dokumenten. ServiceLoader (Java Platform SE 8 ) - Oracle Docs

Wie man jdeps benutzt

Mit dem Befehl jdeps können Sie herausfinden, von welchem Modul die JAR-Datei (oder Klassendatei) abhängt, wie unten gezeigt.

jdeps -s JAR-Datei
(JAR-Dateiname) -> (Abhängiger Modulname)
(JAR-Dateiname) -> (Abhängiger Modulname)
(JAR-Dateiname) -> (Abhängiger Modulname)
……

-s ist eine Option zum Drucken einer Zusammenfassung der Abhängigkeiten. Die Optionen werden auf der folgenden Oracle-Dokumentenseite beschrieben. Druckzusammenfassungen -s und -summary, Druckabhängigkeiten -v und -verbose, geben Abhängigkeiten im angegebenen Paket -p und -package an, angegebenes Muster für reguläre Ausdrücke Ich erinnere mich, dass ich Probleme mit -e <Muster für reguläre Ausdrücke> und -regex <Muster für reguläre Ausdrücke> hatte, die nach Abhängigkeiten in übereinstimmenden Paketen suchen. Wenn keine Option angegeben ist, wird die Option -verbose: package verwendet, die standardmäßig die Abhängigkeiten zwischen Paketen ausgibt. Weitere Informationen finden Sie in den folgenden Oracle-Dokumenten. jdeps - Oracle Docs

Ein konkretes Operationsbeispiel für jeden Befehl finden Sie unter den folgenden Links. Probieren Sie das mit Java 8 gelieferte Tool zur Abhängigkeitsanalyse jdeps aus

Sichere Codierung

Im Bereich der sicheren Codierung gibt es Fragen, wie Datenlecks und Manipulationen beim Austausch wichtiger Daten wie Kreditkartennummern und Angriffe wie SQL-Injection durch böswillige Angreifer verhindert werden können. .. Wenn Sie im gesunden Menschenverstand denken, gibt es einige Probleme, die ohne viel Wissen gelöst werden können. Ich denke, dass dies eine relativ einfache Kategorie auf dem neuen Gebiet sein wird. Auf dem Oracle-Seminar verknüpft das folgende JPCERT "00. Überprüfung der Eingabewerte und Datenentgiftung (IDS)", "12. Eingabe / Ausgabe (FIO)", "13. Serialisierung (SER)", "14. Plattform" Es gab Informationen, dass die Fragen von "Sicherheit (SEC)" und "49. Verschiedene Regeln (MSC)" gestellt werden. Java Coding Standard CERT / Oracle-Version Die Hauptprobleme sind SQL-Injection, Kapselung und Serialisierung. Es ist eine gute Idee, den Konformitätscode mit dem Verstoßcode im obigen Link zu vergleichen, um zu verstehen, was falsch ist. Voraussetzung ist auch, dass Sie die grundlegende Angriffsmethode für Websites verstehen. Die folgenden Links beschreiben jede Angriffsmethode. Arten von Cyber-Angriffen und Web-Sicherheit

Eingabewertprüfung

Durch Überprüfen des Eingabewerts können Sie SQL-Injection und XSS (Cross-Site Scripting) verhindern. Betrachten Sie beispielsweise die folgende Abfrage.

SELECT * FROM db_user WHERE username='<USERNAME>' AND password='<PASSWORD>'

Wenn "username'or '1' = '1" als Benutzername angegeben wird, sieht diese Abfrage folgendermaßen aus:

SELECT * FROM db_user WHERE username='Nutzername' or '1'='1' AND password='<PASSWORD>'

Ursprünglich werden sowohl der Benutzername als auch das Kennwort überprüft. Durch Umschreiben der Abfrage auf diese Weise wird jedoch "Benutzername = 'Benutzername'" oder "'1' = '1' UND Passwort = ''". Wenn beides zutrifft, können Sie auf den Datensatz zugreifen. Mit anderen Worten, in diesem Fall können Sie auf den Datensatz zugreifen, indem Sie einfach den Benutzernamen eingeben, unabhängig vom eingegebenen Wert des Kennworts. Um dies zu verhindern, muss überprüft werden, ob der Eingabewert bestimmte Symbole oder Zeichen enthält und ob er länger als erforderlich ist. Wenn Sie Maßnahmen gegen die SQL-Injection ergreifen möchten, können Sie PreparedStatement auch zum Erstellen von SQL verwenden.

Dateieingabe / -ausgabe

Grundsätzlich stellt sich die Frage, ob die Datei ordnungsgemäß geschlossen ist. Wenn die Datei nicht geschlossen wird, geht Speicher verloren und es werden Ressourcen verbraucht. Als Methode zum Schließen der Datei gibt es eine Methode zum Verwenden der try-with-resource-Anweisung und eine Methode zum Verwenden der close () -Methode. Bei der Ausgabe einer Datei empfiehlt es sich außerdem, eine schreibgeschützte Tiefenkopie zu erstellen, damit die Originaldaten nicht geändert werden.

Serialisierung

** Serialize ** dient zum Ausgeben einer Java-Instanz als Byte-Zeichenfolge und zum Speichern. Umgekehrt wird die Operation zum Konvertieren einer Byte-Zeichenfolge in eine Java-Instanz als ** deserialize ** bezeichnet. Es wird hauptsächlich verwendet, um eine Java-Instanz in einer Datei zu speichern und die Informationen der Instanz dauerhaft zu machen. Da es im Bereich von * SE 8 * liegt, wird eine ausführliche Erläuterung weggelassen und nur der Teil erläutert, der sich auf die sichere Codierung bezieht.

Kompatibilität bei der Serialisierung

Wenn Sie die Felder einer serialisierten Klasse usw. ändern, besteht möglicherweise ein Konflikt zwischen der Instanz, die bei der Wiederherstellung der Serialisierung wiederhergestellt wird, und der geänderten Klasse. Um dies zu verhindern, geben Sie serialVersionUID einen Wert und ändern Sie diesen Wert jedes Mal, wenn sich etwas ändert. Die serialVersionUID sollte einen endgültigen Modifikator haben, damit sich ihr Wert nicht ändert. Mithilfe des statischen Modifikators und des transienten Modifikators können Sie auch die Felder angeben, die nicht im Voraus serialisiert wurden. Dies hilft, die Kompatibilität zu verbessern, wenn Sie Änderungen an Klassen usw. vornehmen.

Wenn wichtige Informationen wie Kreditkarteninformationen in den zu serialisierenden Daten enthalten sind, können diese außerdem in böswilliger Absicht manipuliert werden, es sei denn, die Verarbeitung wie die Verschlüsselung erfolgt im Voraus.

Exklusive Kontrolle bei Parallelverarbeitung

Bei der Parallelverarbeitung gab es ein Problem mit der Frage, ob es threadsicher ist und ob ein Deadlock oder ein Lie-Block aufgetreten ist. In Bezug auf die Parallelverarbeitung werde ich eine ausführliche Erklärung weglassen, da diese ebenfalls in den Geltungsbereich von SE 8 fällt. Ich möchte dies jedoch erläutern, da mir in der tatsächlichen Produktion einige Fragen zu Deadlock und Livelock gestellt wurden.

Sackgasse

Wenn ein Thread eine exklusive Ressource verwendet, kann er problemlos parallel verarbeitet werden, indem gewartet wird, bis ein anderer Thread die Ressource freigibt. Deadlock ist eine Bedingung, bei der, wenn ein Thread zwei oder mehr Ressourcen benötigt, die parallele Verarbeitung dazu führt, dass verschiedene Threads um exklusive Ressourcen konkurrieren und nicht mehr funktionieren. Umgehungen umfassen das Ordnen der Sperren (wenn ein Thread beispielsweise versucht, eine Sperre für eine zweite oder nachfolgende Ressource zu erlangen, versucht er zuerst, die Sperre für die erste Ressource zu erlangen). .. Abbildungen, Codebeispiele usw. werden auf dieser Website ausführlich beschrieben. Bitte beziehen Sie sich darauf. Über Deadlock-Einführung in Java-IT Specialized

Livelock

Mehrere Threads erfassen und geben gemeinsam genutzte Ressourcen frei, um einen Deadlock zu vermeiden. Die Wartezeit ist jedoch gleich und die Priorität des Threads, um mit dem nächsten Prozess fortzufahren, ist niedriger als die anderer Threads. Das Wiederholen des Vorgangs, der nicht fortgesetzt wird, wird als Live-Block bezeichnet. Um dies zu vermeiden, verwenden Sie eine Zufallszahl für die Wartezeit eines Threads oder geben Sie anderen Threads Priorität (z. B. der Ertragsmethode). Codebeispiele usw. werden auf dieser Site ausführlich beschrieben. Bitte beziehen Sie sich darauf. Über Livelock-Nee-kun

Schließlich

In Bezug auf SE 11 Gold, auch wenn es kein Nachschlagewerk gibt, wenn Sie das alte Sortiment genau studieren, denke ich, dass Sie es nicht schwer haben werden, außer völlig neuen Elementen wie Modulfunktionen. Wenn der Inhalt Mängel oder Auslassungen aufweist, würden wir uns freuen, wenn Sie in den Kommentaren darauf hinweisen könnten.

Referenzlink

Java SE 11 Programmer II | Oracle University Grundlegendes zu Java 9-Modulen Lernen Sie das Modulsystem kennen ServiceLoader (Java Platform SE 8 ) - Oracle Docs jdeps - Oracle Docs Probieren Sie das mit Java 8 gelieferte Tool zur Abhängigkeitsanalyse jdeps aus Java Coding Standard CERT / Oracle-Version Arten von Cyber-Angriffen und Web-Sicherheit Über Deadlock-Einführung in Java-IT Specialized Über Livelock-Nee-kun

Recommended Posts

Neue Themen aus der Java SE 11 Programmer II-Prüfung
Lassen Sie uns über die vorübergehende Erfahrung von Java SE 8 Programmer II sprechen
Java Se 8 Programmierer Ⅰ Memo
Java SE 8 Sliver Problem Collection Zusammenfassung
Neue Funktionen von Java7 bis Java8
Erhaltener Oracle Certified Java Programmer, Gold SE 8
Testinhalt der Java SE Bronze Prüfung
Der Weg von JavaScript nach Java
Was ich getan habe, um den Oracle Certified Java Programmer, Silver SE 8, zu erhalten
Kick ShellScript auf dem Server von Java
Über das neue Release-Modell von Java @ Seki Java (20.07.2018)
Ich habe das neue Yuan-Problem in Java ausprobiert
Rufen Sie die Salesforce REST-API von Java aus auf
Java SE 8 Silver (Java SE 8 Programmer I) Pass Hinweis
Die Geschichte von Java SE11 Silber erhalten
Von der Bewerbung bis zur Einführung von Oracle Java SE 11 Silver dauerte es einen Monat
[Qualifikationstest] (Java SE8 Gold) Lernbericht & Zusammenfassung
Um ein VB.net-Programmierer aus einem Java-Shop zu werden
Versuchen Sie, den CORBA-Dienst von Spring (Java) aus aufzurufen.
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Probieren Sie Progate Free Edition [Java II]
[Qualifikationstest] Zusammenfassung der Java SE 8 Silver-Lernmethode