Archiv der Kategorie: Die wöchentliche Dosis Java

Thema der Woche: Statische Analysetools und eigene Regelwerke

  • 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.

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: CAL10N

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:

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+FF+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.

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: 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.

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

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.