Java Programming 2

Location: Room 108, 德田館
Time: 1300 ~ 1600, Saturday and Sunday


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

Object-oriented analysis and design

Concurrent Programming

Computer organization/architecture

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 ]

Date Summary
2017.5.20 Object class (equals, compare, clone), generics 1;
2017.5.21 generics 2 (see covariance and contravariance rule and Java generics and type erasure for array types and generics), 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);
2017.6.4 multithreading, synchronization, multithreaded server (see Java Socket Programming Examples);
2017.6.10 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, Lambdas and Streams in Java 8 Libraries; more examples in practice: Java 8 No More Loop), JUnit (also see unit testing);
2017.6.11 JVM, analysis of algorithms, array list, linked list, stack, queue;
2017.6.17 (reivew on lambda: reduce: identity, accumulator; collect: supplier, accumulator, combiner; also read Lambdas & Streams In JDK 8: Beyond The Basics, JDK 8: Stream Style), priority queue (+ heaps and heap sort), symbol tables;
2017.6.18 binary search tree, hash table;
2017.6.25 (review on hash table: for the reason of ``one of a billion bug'', see integer overflow; also read universal hashing, universal and perfect hashing; for information security, see cryptographic hash functions, Cryptographic Hash Functions: Theory and Practice; bitcoin hash functions explained), undirected graph, graph traversal (DFS, BFS), directed graph; feedback;
2017.7.1 event-driven programming: events, listeners, callbacks, Java graphics and GUIs, Java event handling, Java 2D games tutorial (see snake game), JavaFX tutorial, class design, design patterns 1; android architecture;
2017.7.2 Anderson's OOAD lectures (Design Patterns, Facade & Adapter, Expanding Our Horizons, Strategy, Bridge & Factory, Principles of Design Patterns) (see design patterns 2, design_pattern_tutorial, dependency injection; also see Java 8 Stream API and RxJava Comparison and ReactFX), MVC patterns, data compression, feedback;

Gradebook