Java Programming 2

Location: Room 108, 德田館
Time: 1330 ~ 1730


``... it is always a good practice first to make your code right, and then make it fast.''
-- Brian Goetz

Objectives

Prerequisites

Text

References

Java

Data structures and algorithms

Hashing and its applications

Concurrent Programming

Computer organization/architecture

Object-oriented analysis and design

Design patterns

Databases

misc

Online judge systems

Additional reading

IDE

Overview

OOP

Concurrent programming

Data structures and algorithms

Design patterns

Database theory and JDBC

Schedule [ 281, 282, 283, 288, 289 ]

Date Summary
2017.8.21 20170813.pdf, Object class (equals, compare, clone), generics 1, generics 2 (see covariance and contravariance rule and Java generics and type erasure for array types and generics);
2017.8.22 (review on generics: Two Lectures on Constructive Type Theory, CIS 500: Software Foundations with the book Types and Programming Languages by Benjamin C. Pierce; also see Programming Language Theory), reflection (see more in Java Reflection Tutorial by Jakob Jenkov; also see off. ref., Class class; also read metaprogramming), Java annotations (see java annotation design, annotations, javadoc), multithreading;
2017.8.23 synchronization, multithreaded server (see Java Socket Programming Examples);
2017.8.24 Java 8 Lambda Expressions & Streams (see lambda expressions and functional programming, Implementing lambda expressions in Java , parallel functional programming; the official document for Java Aggregate Operations, reduce: identity, accumulator; collect: supplier, accumulator, combiner, Lambdas and Streams in Java 8 Libraries; also read Lambdas & Streams In JDK 8: Beyond The Basics, JDK 8: Stream Style, reduce: identity, accumulator; collect: supplier, accumulator, combiner, more examples in practice: Java 8 No More Loop), JUnit (also see unit testing), JVM; the keyword null (see 補救null的策略); filters in the stream (see examples in Java 8 Streams filter examples);
2017.8.28 analysis of algorithms, array list, linked list, stack, queue;
2017.8.29 priority queue (+ heaps and heap sort), symbol tables, binary search tree, hash table (for the reason of ``one of a billion bug'', see integer overflow);
2017.8.30 undirected graph, graph traversal (DFS, BFS), event-driven programming: Java graphics and GUIs, Java event handling, Java 2D games tutorial (see events, listeners, callbacks and JavaFX tutorial, also see snake game), class design, design patterns 1; Anderson's OOAD lectures (Design Patterns, Facade & Adapter, Expanding Our Horizons, Strategy, Bridge & Factory, Principles of Design Patterns), MVC patterns, Java 8 Stream API and RxJava Comparison and ReactFX, android architecture;
2017.8.31 final exam (sol);

Sample code

Gradebook