Inden | Java Challenge | E-Book | sack.de
E-Book

E-Book, Deutsch, 599 Seiten

Reihe: Programmieren mit Java

Inden Java Challenge

Fit für das Jobinterview und die Praxis – mit mehr als 100 Aufgaben und Musterlösungen

E-Book, Deutsch, 599 Seiten

Reihe: Programmieren mit Java

ISBN: 978-3-96910-029-5
Verlag: dpunkt.verlag
Format: EPUB
Kopierschutz: 6 - ePub Watermark



Ihr persönlicher Java-Coach !

Ihr Java-Trainingsbuch mit Musterlösungen
Lernen Sie Tipps und Kniffe vom Java-Experten kennen
Erweitern Sie Ihr Java-Knowhow in praxisrelevanten Bereichen

Dieses Buch bietet Ihnen ein breit gefächertes Spektrumvon über 100 Übungsaufgaben und Programmierpuzzlesinklusive Lösungen zum Knobeln und Erweitern Ihrer Kenntnisse zu unterschiedlichen praxisrelevantenThemengebieten wie Arrays, Datenstrukturen, Rekursion,Date and Time API usw. Jedes Themengebiet wird in einem eigenen Kapitel
behandelt, das zunächst mit einer Einführung in die
Grundlagen beginnt. Danach finden sich zumeist10 bis 15 Übungsaufgaben verschiedener
Schwierigkeitsgrade, sodass von Anfänger bis
Fortgeschrittenen immer etwas dabei ist und
sich die Programmierkenntnisse effektiv verbessern
lassen. Dabei helfen am Kapitelabschluss insbesonderedetaillierte Musterlösungen inklusive der genutztenAlgorithmen zu allen Aufgaben. Vielfach werden
zudem alternative Lösungswege aufgezeigt, aber
auch mögliche Fallstricke und typische Fehler
thematisiert. Abgerundet wird das Buch durch zwei Anhänge.Einer gibt einen Überblick in wesentliche Neuerungen
von Java 8. Der zweite beschäftigt sich mit der
JShell, die zum Ausprobieren der Codeschnipselund Beispiele des Buchs oftmals hilfreich ist.
Inden Java Challenge jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material


1Einleitung
Herzlich willkommen zu diesem Übungsbuch! Bevor Sie loslegen, möchte ich kurz darstellen, was Sie bei der Lektüre erwartet. Dieses Buch behandelt verschiedene praxisrelevante Themengebiete und deckt diese durch Übungsaufgaben unterschiedlicher Schwierigkeitsstufen ab. Die Übungsaufgaben sind (größtenteils) voneinander unabhängig und können je nach Lust und Laune oder Interesse in beliebiger Reihenfolge gelöst werden. Neben den Aufgaben finden sich die jeweiligen Lösungen inklusive einer kurzen Beschreibung des zur Lösung verwendeten Algorithmus sowie dem eigentlichen, an wesentlichen Stellen kommentierten Sourcecode. 1.1Aufbau der Kapitel
Jedes Kapitel ist strukturell gleich aufgebaut, sodass Sie sich schnell zurechtfinden werden. Einführung Ein Kapitel beginnt jeweils mit einer Einführung in die jeweilige Thematik, um auch diejenigen Leser abzuholen, die mit dem Themengebiet vielleicht noch nicht so vertraut sind, oder aber, um Sie auf die nachfolgenden Aufgaben entsprechend einzustimmen. Aufgaben Danach schließt sich ein Block mit Übungsaufgaben und folgender Struktur an: AufgabenstellungJede einzelne Übungsaufgabe besitzt zunächst eine Aufgabenstellung. Dort werden in wenigen Sätzen die zu realisierenden Funktionalitäten beschrieben. Oftmals wird auch schon eine mögliche Methodensignatur als Anhaltspunkt zur Lösung angegeben. BeispieleErgänzend finden sich fast immer Beispiele zur Verdeutlichung mit Eingaben und erwarteten Ergebnissen. Nur für einige recht einfache Aufgaben, die vor allem zum Kennenlernen eines APIs dienen, wird mitunter auf Beispiele verzichtet. Oftmals werden in einer Tabelle verschiedene Wertebelegungen von Eingabeparameter(n) sowie das erwartete Ergebnis dargestellt, etwa wie folgt: Eingabe A Eingabe B Ergebnis [1, 2, 4, 7, 8] [2, 3, 7, 9] [2, 7] Für die Angaben gelten folgende Notationsformen: "AB" – steht für textuelle Angaben true / false – repräsentieren boolesche Werte 123 – Zahlenangaben [ value1, value2, …. ] – steht für Collections wie Sets oder Listen, aber auch Arrays { key1 : value1, key2 : value3, … } – beschreibt Maps Lösungen Auch der Teil der Lösungen besitzt die nachfolgend beschriebene Struktur. Aufgabenstellung und BeispieleZunächst finden wir nochmals die Aufgabenstellung, sodass wir nicht ständig zwischen Aufgaben und Lösungen hin- und herblättern müssen, sondern das Ganze in sich abgeschlossen ist. AlgorithmusDanach folgt eine Beschreibung des gewählten Algorithmus zur Lösung. Aus Gründen der Didaktik zeige ich bewusst auch einmal einen Irrweg oder eine nicht so optimale Lösung, um daran dann Fallstricke aufzudecken und iterativ zu einer Verbesserung zu kommen. Tatsächlich ist die eine oder andere Brute-Force-Lösung manchmal sogar schon brauchbar, bietet aber Optimierungspotenziale. Exemplarisch werde ich immer wieder entsprechende, mitunter verblüffend einfache, aber oft auch sehr wirksame Verbesserungen vorstellen. PrüfungTeilweise sind die Aufgaben recht leicht oder dienen nur dem Kennenlernen von Syntax oder API-Funktionalität. Dafür scheint es mir oftmals ausreichend, ein paar Aufrufe direkt in der JShell auszuführen. Deshalb verzichte ich hierfür auf Unit Tests. Gleiches gilt auch, wenn wir bevorzugt eine grafische Aufbereitung einer Lösung, etwa die Darstellung eines Sudoku-Spielfelds zur Kontrolle nutzen und der korrespondierende Unit Test vermutlich schwieriger verständlich wäre. Je komplizierter allerdings die Algorithmen werden, desto mehr lauern auch Fehlerquellen, wie falsche Indexwerte, eine versehentliche oder unterbliebene Negation oder ein übersehener Randfall. Deswegen bietet es sich an, Funktionalitäten mithilfe von Unit Tests zu überprüfen – in diesem Buch kann das aus Platzgründen natürlich nur exemplarisch für wichtige Eingaben geschehen. Insgesamt existieren jedoch über 90 Unit Tests mit rund 750 Testfällen. Ein ziemlich guter Anfang. Trotzdem sollte in der Praxis das Netz an Unit Tests und Testfällen wenn möglich noch umfangreicher sein. 1.2Grundgerüst des Eclipse-Projekts
Auch das mitgelieferte Eclipse-Projekt orientiert sich in seinem Aufbau an demjenigen des Buchs und bietet für die Kapitel mit Übungsaufgaben jeweils ein eigenes Package pro Kapitel, z. B. ch02_math oder ch08_recursion_advanced. Dabei weiche ich ausnahmsweise von der Namenskonvention für Packages ab, weil ich die Unterstriche in diesem Fall für eine lesbare Notation halte. Einige der Sourcecode-Schnipsel aus den jeweiligen Einführungen finden sich in einem Subpackage intro. Die bereitgestellten (Muster-)Lösungen werden in jeweils eigenen Subpackages namens solutions gesammelt und die Klassen sind gemäß Aufgabenstellung wie folgt benannt: Ex_. Das gesamte Projekt folgt dem Maven-Standardverzeichnisaufbau und somit finden siche die Sourcen unter src/main/java und die Tests unter src/test/java. Sourcen – src/main/javaNachfolgend ist ein Ausschnitt für das Kapitel 2 gezeigt: Test-Klassen – src/test/javaExemplarisch hier einige dazugehörige Tests: Utility-KlassenAlle in den jeweiligen Kapiteln entwickelten nützlichen Utility-Methoden sind im bereitgestellten Eclipse-Projekt in Form von Utility-Klassen enthalten. Beispielsweise implementieren wir in Kapitel 5 einige hilfreiche Methoden, unter anderem swap() und find() (alle in Abschnitt 5.1.1). Diese kombinieren wir dann in einer Klasse ArrayUtils, die in einem eigenen Subpackage util liegt – für das Kapitel zu Arrays im Subpackage ch05_arrays.util. Gleiches gilt für die anderen Kapitel und Themengebiete. 1.3Grundgerüst für die Unit Tests
Um den Rahmen des Buchs nicht zu sprengen, zeigen die abgebildeten Unit Tests jeweils nur die Testmethoden, jedoch nicht die Testklasse und die Imports. Damit Sie ein Grundgerüst haben, in das Sie die Testmethoden einfügen können sowie als Ausgangspunkt für eigene Experimente, ist nachfolgend eine typische Testklasse gezeigt: import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.LocalDate; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; import org.junit.jupiter.params.provider.MethodSource; public class SomeUnitTests { @ParameterizedTest(name = "value at pos {index} ==> {0} should be perfect") @ValueSource(ints = { 6, 28, 496, 8128 } ) void testIsPerfectNumberSimple(int value) { assertTrue(Ex03_PerfectNumbers.isPerfectNumberSimple(value)); } @ParameterizedTest @CsvSource({"2017-01-01, 2018-01-01, 53", "2019-01-01, 2019-02-07, 5"}) void testAllSundaysBetween(LocalDate start, LocalDate end, int expected) { var result = Ex09_CountSundaysExample.allSundaysBetween(start, end); assertEquals(expected, result.count()); } @ParameterizedTest(name = "calcPrimes({0}) =...


Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler. Nach seinem Studium in Oldenburg hat er bei diversen internationalen Firmen in verschiedenen Rollen etwa als Softwareentwickler und -architekt, als Consultant, Teamleiter, CTO und Leiter Academy sowie Trainer gearbeitet. Zurzeit ist er freiberuflich in Zürich tätig.

Michael Inden hat über zwanzig Jahre Berufserfahrung beim Entwurf komplexer Softwaresysteme gesammelt, an diversen Fortbildungen und mehreren Java-One-Konferenzen teilgenommen. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen GUIs sowie dem Coaching. Sein Wissen gibt er gerne als Trainer in internen und externen Schulungen und auf Konferenzen weiter, etwa bei der Java User Group Switzerland, bei der JAX/W-JAX, ch.open und den IT-Tagen.


Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.