- FindBugs, PMD und Checkstyle sind drei statische Codeanalysetools. Sie nutzen unterschiedliche Eingaben für ihre Analyse. Wo liegt der Unterschied?
- PMD, FindBugs und Checkstyle kann man um eigene Regeln erweitern. Lies, wie das geht und gib eine kurze Übersicht.
- Im Quellcode von Java gibt es (immer noch) Stellen, in denen unsinnigerweise von java.lang.Object geerbt wird, etwa bei der java.lang.Character-Klasse (in Java 7 gefixt):
public final class Character extends java.lang.Object
implements java.io.Serializable, Comparable<Character>
Schreibe eine Regel (in einem beliebigen Framework), um genau solche Klassen zu finden.
Die wöchentliche Dosis Java
Thema der Woche: unshared objects
Erkläre die Bedeutung der Methoden:
ObjectInputStream.readUnshared()
ObjectOutputStream.writeUnshared(Object obj)
ObjectStreamField(String name, Class type, boolean unshared)
Lies dazu http://ld2011.scusa.lsu.edu/java/6-docs/platform/serialization/spec/security.html#4271. Nenne drei Szenarien, in denen die Methoden nützlich sind. Schaue auch im JDK nach Anwendungen.
Thema der Woche: Java "Smart and Simple Web Crawler"
http://java.net/projects/crawler/ ist ein Web-Crawler in Java. Die API könnte zwar viel einfacher sein, aber dennoch ist mit Hilfe der beigefügten Beispiele (http://java.net/projects/crawler/downloads/directory/1.3.0) schnell ein Programm implementiert.
Aufgabe: Liste die ersten 5 Links auf, die von der Hauptseite spiegel.de in den den Bereich http://www.spiegel.de/thema/ führen. Überlege dazu ein Fragment wie
LinkFilterUtil.and( new ServerFilter( “..” ), new BeginningPathFilter( "/…/" ) )
zu nutzen.
Thema der Woche: Temporal Patterns
Lies http://www.martinfowler.com/eaaDev/timeNarrative.html und http://www.infoq.com/news/2008/01/bitemporal. Welches Problem geht das Pattern an und um welche Daten geht es? Welche Lösungsansätze werden beschrieben? Mit welchen anderen Pattern ist das Temporal-Pattern verbunden?
Thema der Woche: CAL10N
- Wiederhole http://openbook.galileocomputing.de/javainsel/javainsel_15_004.htm#mj96ec8d1bc0e71c464c41b370dd1db21b.
- Ließ http://cal10n.qos.ch/manual.html.
- Verstehe http://download.oracle.com/javase/1.4.2/docs/guide/nio/example/Grep.java.
- Schreibe Grep so um, dass statt System.err CAL10N genutzt wird. Realisiere dabei Englisch und Deutsch. Teste die Sprachen auf der Kommandozeile mit dem Schalter –Duser.language.
Thema der Woche: Kindle-HTML auf Korrektheit prüfen
Der eBook-Reader Kindle kann HTML-Seiten anzeigen, ist allerdings mit dem HTML etwas eingeschränkt. So sind nur ganz bestimmte HTML-Tag und dann auch nicht alle Attribute erlaubt. Der Anhang “Appendix. Supported HTML tags" in der PDF “Amazon Kindle Publishing Guidelines. How to make books available for the Kindle platform” erklärt welche.
Aufgabe: Schreibe ein Java-Programm, welches eine HTML-Datei (wir können vereinfacht annehmen XHTML) analysiert, ob nur unterstützte HTML-Tags und Attribute vorkommen und andernfalls eine Fehlermeldung ausgibt. Hinweis: Natürlich soll das Programm nicht aus 100 Fallunterscheidungen bestehen, sondern das ganze soll etwas clever programmiert werden. Könnte ein Guava Typ wie com.google.common.collect.Mulimap vielleicht helfen?
Thema der Woche: Valide XML
- XML-Dokumente müssen well-formed und können valide sein. Was heißt das?
- Kann man mit JDOM eine nicht well-formed XML erstellen?
- XML-Validierung über Schema ist die übliche Art die Korrektheit von XML-Dokumenten zu garantieren. Was kann XML-Schema für Kriterien garantieren, was nicht?
- Suche aus dem Internet ein XML-Schema und generiere eine XML-Datei mit Standard-DOM. Aktiviere die Validierung und versuche etwas nicht-valides zu schreiben. Welche Fehler werden produziert und wie kann man sie behandeln?
Thema der Woche(n): Java 2D
Erste Woche:
- Lies Kapitel aus dem Kapitel http://openbook.galileocomputing.de/javainsel9/javainsel_20_001.htm selektiv über die Java 2D API, aber http://openbook.galileocomputing.de/javainsel9/javainsel_20_004.htm und http://openbook.galileocomputing.de/javainsel9/javainsel_20_005.htm aufmerksam.
- Was ist der Unterschied zwischen Graphics und Graphics2D?
- Programmiere ein Beispiel mit AffineTransformation, das etwa ein Rechteck der Größe 100×100 Pixel skaliert und um 45 Grad rotiert wird.
- Zeichne das Rechteck mit Linien der Stärke 5 und gestrichelt. Konfigurierte das Zeichnen so, dass die Linienecken rund sind.
- Nutze GeneralPath um einen einen Stift in die Mitte des Schirms zu setzen, dann 10 Pixel nach rechts, um 45 Grad gedreht, dann 10 Pixel nach links zu gehen. Affine Transformationen soll es nicht geben.
Zweite Woche
- Lies und verfolge die Diashows und Beispiele unter http://www.matheprisma.de/Module/Lmayer/index.htm. Nur das Kapitel “erster Blick”, “L-Systeme und Kröten 1 2” (3 und weiter ist nicht nötig).
- Was beschreibt die Regel F F+F− −F+F ?
- Die Vorschrift lässt sich in einer Methode modellieren, in dem für F eine Methode f(), und für +, – Methoden left() und right() angenommen werden. f() selbst ruft sich rekursiv auf, etwa so: void f() { f(); left(); f(); right(); right(); f(); … }. Allerdings fehlt da noch etwas für den Winkel und die aktuelle Zeichenlänge; wie kommt die Paramater mit ins Spiel? Was bestimmt das Rekursionsende?
- Schreibe eine Methode f(), die die Kochkurvemit Java 2D zeichnet.
Thema der Woche: Java 6-Collections Upate
In Java 6 ist die Collections-API leicht umgebaut worden. Lies http://download.oracle.com/javase/6/docs/technotes/guides/collections/changes6.html.
- Schreibe eine Kurzzusammenfassung jeder Klasse und entwerfe ein Szenario, wo die Klasse besser passt als eine andere Collection-Klasse.
- Wie sieht der Quellcode von http://download.oracle.com/javase/6/docs/api/java/util/AbstractMap.SimpleEntry.html und http://download.oracle.com/javase/6/docs/api/java/util/AbstractMap.SimpleImmutableEntry.html aus uns wer wird sich dafür interessieren bzw. ist ein Nutznießer?
Thema der Woche: Rekursion
Theoretisches:
- Lies http://de.wikipedia.org/wiki/Rekursive_Programmierung.
- Was ist das größte Problem rekursiver Lösungen?
- Kann man jede rekursive Lösung in eine iterative umschreiben?
- Was ist Endrekursion?
- Nenne 10 Beispiele rekursiver Lösungen (andere als Fakultät und Fibonacci) in der Programmierung.
Praktische Aufgabe:
- Entwerfe eine Methode, die rekursiv ein Verzeichnis inklusive aller Unterverzeichnisse mit den Dateien löscht. Wichtig: Wie lässt sich die Methode testen? Theoretische Überlegung: Wie würde sich das ganze iterativ umsetzen lassen? Kann Nebenläufigkeit zum Problem werden?
Thema der Woche: Java Puzzlers
Verfolge die Präsentation http://www.youtube.com/watch?v=wDN_EYUvUq0 und prüfe, wie viele Rätsel du lösen könntest.
Schreibe zu dem Puzzler eine Kurzzusammenfassung über das Problem und wie es sich vermeiden lässt.
Thema der Woche: Technologien der Java SE platform
Die Seite http://download.oracle.com/javase/6/docs/ enthält eine bunte Grafik mit unterschiedlichen Technologien.
- Schreibe zu jedem Punkt eine Kurzzusammenfassung um was es sich geht.
Konkrete Fragen:
- Welche Bedeutung hat IDL heute? Was ist eine moderne Version der “IDL”?
- Welche Bedeutung hat das endorsed-Verzeichnis?
- Was kann die URLConnection caching API?
- Welches Problem lösen Klassen des Pakets java.util.concurrent.atomic?
- An welcher Stelle greift die Instrumentalisierung für die es Typen im Paket java.lang.instrument gibt?
- Wie wählt man zwischen Server- und Client-JVM? Oder wird die Entscheidung auch automatisch vorgenommen?
Thema der Woche: Gui-Dialoge
Theoretisches:
- Lies http://msdn.microsoft.com/en-us/library/aa511268.aspx.
- Aus welchen Bestandteilen besteht ein Dialog?
- Was unterscheidet ein guten Dialog von einem schlechten?
- Welche Fehler sollte man bei Gui-Dialog nicht machen?
- Auf welchem Element liegt der Fokus beim Dialogstart? Welche Aktion wird mit Return bestätigt?
- Sollten Schaltflächen eher generische Titel wie OK, Abbrechen haben oder spezielle Titel wie “Schließen”, usw. Beinflusst das die Formulierung von Texten?
- Welche Möglichkeiten gibt es, dem Benutzer mehr Hilfen/Informationen zu geben?
- Vergleiche die Windows-Dialoge mit denen von Eclipse. Welche Unterschiede gibt es?
Praktisches:
- Welche Möglichkeiten bietet Java SE bei Swing-Dialogen?
- Teste http://code.google.com/p/oxbow/ praktisch an eigenen Beispielen, etwa eine Dialogbox von der MSDN-Seite in Swing umzusetzen.
Thema der Woche: java.util.Collections, java.util.Arrays
- Was ist die Aufgabe der Klasse java.util.Collections und Arrays?
- Gruppiere die Methoden der beiden Klassen.
- Was ist die Funktion einer Gruppe und warum gibt es die Methoden? Finde zu jeder Methoden einer Gruppe ein Beispiel mit Hilfe einer Quellcodesuchmaschine (http://dev.koders.com/ oder http://www.google.com/codesearch) und nenne den Motivation hinter der Nutzung.
- Welche Methoden sind in Java 5, Java 6 und Java 7 hinzugekommen. Kann man Gründe für den Zuwachs anführen?
- Hat Google Collections hat eine weitere Utility-Klasse für Datenstrukturen? Wenn ja, was bietet sie? Wenn nicht, warum ist sie nicht nötig?
Thema der Woche: Gekonnt mappen mit Annotationen
- Was haben http://jsefa.sourceforge.net/ und https://args4j.dev.java.net/ gemeinsam?
- Schreibe ein Programm, welches von der Kommandozeile eine CSV-Datei erwartet. Hilfe bei fehlender Dateiangabe soll gegeben werden.
- Die CSV-Datei soll eingelesen und als Tabelle in ein HTML-Dokument konvertiert werden. Kommandozeilenargumente bestimmen, ob die Ausgabe auf die Konsole geht oder in eine Datei. Nutze dafür args4j und jsefa.
- Es gibt gewissen Standards für Kommandozeilenoptionen. Welche sind das und was sind Quellen.
Thema der Woche: Das HTTP-Protokoll
Über HTTP tauschen Client (etwa Browser) und Server Metadaten und Nutzdaten aus.
- Ließ http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol
- Um von Java auf einen Web-Server zuzugreifen kann die eingebauten Klasse URLConnection verwendet werden. Lies http://openbook.galileocomputing.de/javainsel8/javainsel_18_003.htm#mj9fa6dd9cce4e5c99afe7c4df48d14b57.
- Was ist der Unterschied zwischen URLConnection und HttpURLConnection? Wer liefert HttpURLConnection? Warum?
- Unterstützt (Http)URLConnection alle Spielereien vom HTTP-Protokoll oder gibt es weiße Flecken?
- Insbesondere POST-Aufrufe sind etwas mühselig, sodass mit http://hc.apache.org/httpcomponents-client/index.html eine gute Alternative existiert. Schreibe ein kleines Beispiel mit einem GET, was über Parameter die Yahoo Geo-Code API http://developer.yahoo.com/maps/rest/V1/geocode.html nutzt.
- Eine neuere Alternative ist der http://github.com/ning/async-http-client. Ließ die Kurzeinführung und implementierte das gleiche Geo-Beispiel mit der async-http-client-API.
Thema der Woche: Double-checked locking
Lies http://www.ibm.com/developerworks/java/library/j-dcl.html und erkläre, wo es genau bei
public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { //1 if (instance == null) //2 instance = new Singleton(); //3 } } return instance; }
zu einem Problem bei nebenläufigen Threads kommen kann. Warum funktioniert es auch bei 2 synch. Blöcken nicht? Was hat das dem Memory-Modell zu tun?
Hinweis: Es geht nicht darum, ein Singleton korrekt zu implementieren, sondern das Java Memory Modell zu verstehen und Probleme aufzudecken, die sich aus der Nebenläufigkeit ergeben.
Thema der Woche: Hessian und Burlap Protocol
- Gib eine Auflistung der bekannten Protokolle für entfernte Methodenaufrufe mit Java, etwa RMI, CORBA, SOAP, … Teile die Protokolle in die Eigenschaften plattformunabhängig und binär/textorientiert ein.
- Verschaffe einen Überblick über http://hessian.caucho.com/, http://www.caucho.com/resin-3.0/protocols/hessian-2.0-spec.xtp, http://www.caucho.com/resin-3.0/protocols/burlap.xtp, http://hessian.caucho.com/doc/hessian-java-binding-draft-spec.xtp. Was sind die Unterschiede zwischen Hessian und Burlap, wo die Stärken und Schwächen?
- Wie unterscheiden sich die Protokolle von den etablierten Protokollen? Lies dazu http://hessian.caucho.com/doc/metaprotocol-taxonomy.xtp.
- Implementierte das unter http://hessian.caucho.com/ angegeben BasicAPI-Beispiel mit Hilfe des embedded Servlet-Containers Jetty.
- Lässt sich in Spring ein RMI-Service durch einen Hessian-Service ohne großen Aufwand ersetzen?
Thema der Woche: NoSQL-Datenbanken
Lies ein paar Artikel auf http://nosql-database.org/links.html und erkläre die folgenden Begriffe:
- Was ist eigentlich so nicht-SQL an NoSQL?
- Welche bekannten NoSQL-Systeme gibt es? Wie unterscheiden sie sich in der Modellierung? (Etwa Key/Value, …)
- Was ist CAP?
- Was ist Map & Reduce? „Hat“ jede NoSQL-Datenbank ein Map & Reduce?
- Welche NoSQL-Datenbank wird wie angesprochen? Wie kommen Daten in und aus der Datenbank? Wie sieht eine Java-API aus?
Thema der Woche: Java Sicherheit und Angriffe
Zur Vorbereitung
- Suche über die Nutzung von Escape Sequences \uxxxx im Internet und wo sie im Java-Programmcode überall genutzt werden können.
- Lies über die Methode exec() von Runtime und den ProcessBuilder.
- Lies über den Klassenlader und Klassenladehierarchien.
- Mit der Java Compiler API lässt sich ein Java-Programm aus einem anderen Java-Programm heraus übersetzen. Wie sieht die API aus? Seit wann gibt es sie?
http://www.blackhat.com/presentations/bh-usa-09/WILLIAMS/BHUSA09-Williams-EnterpriseJavaRootkits-PAPER.pdf ist ein schöner Artikel, wie Entwickler den Quellcode kompromittieren können, um “böse” Sachen anzustellen. Zwar ist die Information über den Java-Compiler, den der Tomcat nutzt, nicht korrekt, aber Jeff Williams fasst wunderbar verschiedene Angriffsfälle zusammen.
Lies den Text und beantworte folgende Fragen:
- Welcher Annahme im Programm bei “Abusing the JSP Compiler” wird gemacht? Ist das Beispiel realistisch?
- Wie lässt es sich verhindern, dass man private Attribute auslesen kann? Lässt sich das in der Praxis realisieren?
- Was ist BCEL? Seit wann und warum integriert das JDK BCEL?
- Gibt es Unternehmen (in Deutschland), die Code Audits durchführen? Auch von bekannten Open-Source Libraries?
Wer weiter Interesse an dem Thema hast, kann sich http://www.blackhat.com/presentations/bh-usa-09/WEBER/BHUSA09-Weber-UnicodeSecurityPreview-SLIDES.pdf anschauen.