Java進階程式設計班

本課程將延續Java基礎班的內容,可歸納為四大項目:

1. 承續基礎班未能交代的概念與新語法,例如:將資料型態進一步抽象化的泛型 (generics)、創造框架的工具reflection和annotation、JDK8才引進的lambda語法、stream框架、與Optional型態;最後,我們嘗試了解Java程式如何被JVM執行,以利於了解下一個主題:多執行緒程式設計。

2. 首先介紹作業系統的基礎知識(如:多工、程序與執行緒的差異、工作排程),介紹Java的API撰寫多執行緒的應用程式,並如何排除平行程式中會遭遇的問題;透過Concurrent框架實現高階併行化程式。

3. 介紹常見的資料結構與演算法。在CS大一的課程中,DSA是除了程設以外的最重要課程之一,尤其二年級開始會面對不同的應用問題 (如編譯器、作業系統、計算機網路、計算機結構)都需要這些基礎知識;甚至在應徵工作面試時,資料結構與演算法是面試的重點項目之一。想挑戰LeetCode的題目嗎? 先來念念資料結構與演算法吧!

4. 最後我們更上一層樓,進入設計模式的範疇。設計模式討論架構的問題,嘗試找出具備高度彈性與低維護成本的解法用以適應未來的需求改變,作為開發大型專案的預備知識。

透過基礎與進階班的課程內容,希望對學員在CS的學習上有所幫助,尤其是基礎知識的部分;快來跟我一起來還技術債吧。

註0:進階班內容可能因為當期我個人的偏好或者學員的需求而有些許調整。

課程大綱

// 進階物件導向程式設計 (Advanced Topics about JDK8)
0. 複習物件導向設計 (A quick review on OOP)
1. 泛型 (Generics)
2. 匿名函數與Stream API (Lambda expression & Stream API)
3. Optional: alternative to null (a billion-dollar mistake?!)
4. 反射與標註 (Reflection & annotation)
5. Java虛擬機初探 (JVM: internals & computation model)

// 併行程式設計 (Concurrent Programming)
0. Basic concept: Thread & Runnable
1. Race condition, memory inconsistency, and synchronized methods/blocks
2. Speepdup & Amdahl's law
3. Deadlock & starvation
4. Producer-consumer model and semaphores
5. Concurrency API: Thread Pool, Fork-Join Pool, asynchronous callbacks (Callable, Future, CompletableFuture)
(Reference: Brian Goetz, Java Concurrency in Practice, 2006.)

// 資料結構與演算法 (Data Structures & Algorithms)
0. Analysis of algorithms
1. Array list & linked list
2. Stack & queue
3. Priority queue (implemented by binary heap; heap sort)
4. Binary search tree & its variants (2-3 tree, red-black tree, and B-tree)
5. Hash table (separate chaining, linear probing)
6. Undirected/directed graphs:
6.1. Depth first search (DFS) & breadth first search (BFS)
6.2. Topological sort & connected components
6.3. Minimal spanning tree (MST) & shortest path
7. Dynamic programming
(Reference: Robert Sedgewick and Kevin Wayne, Algorithms, 4/e, 2011.)

// 設計模式 (Selected Design Patterns)
0. SOLID principle & Inversion of Control (IoC)
1. Selected patterns: dependency injection, factory method, abstract factory, builder, adapter, decorator, proxy, facade, model-view-control model (MVC)
(Reference: Eric Freeman,‎ Bert Bates,‎ Kathy Sierra,‎ Elisabeth Robson, Head First Design Patterns: A Brain-Friendly Guide, 2004.)

註0:更新於2020/3/10。
註1:課程教材主要以英文為主,授課過程以中文為主。

適合對象

1. 擁有Java程式撰寫經驗的學員*
2. 具備其他物件導向程式語言能力 (如:C++, C#)的學員

(* 試問字串陣列中為何可以把不同長度的字串物件儲存在字串陣列中。)

開發環境

Eclipse with JDK8

近期班次

注意事項

  • 上課地點:台灣大學資訊工程學系系館 詳細位置;教室號碼將於開課前一日公佈於官網"最新消息"中。
  • 上課教材:開課後將公布教學網站給同學查閱。
  • 結業狀況:請上官網”結業名單”查閱是否合格及可領取證書進度。

講師介紹

  • 國立臺灣大學資訊工程學 博士候選人

  • 交通大學電信工程研究所 碩士

  • 中央大學電機工程學系 學士

(一) 服務經驗

  • 國立臺灣大學 腦與心智科學研究所 兼任研究助理 (2014.8--present)
  • 中國信託商業銀行 全球金融商品交易處 期貨自營部 實習研究員 (2014.1--present)
  • 國立臺灣大學 資訊工程學系 資訊系統訓練班 講師 (2014.1--present)
  • 國立臺灣大學 資訊工程學系 課程助教:計算理論、離散數學、財務演算法 (2012.9--present)

(二) 研究興趣

  • Financial computing
  • Analysis and design of algorithms
  • Quantitative finance, econometrics, and algorithmic trading
  • Statistics and machine learning
  • Computing theory and programming language design

(三) 程式語言

  • MATLAB, Java, C, C++, Python, C#

(四) 教學特色

  • 中文授課,課程教材以英文為主。適合規劃出國求學或對科學/技術理論有興趣的學員。
  • 授課時數:於本訓練班教學時數累計至2020年3月10日為4950小時。