Java進階程式設計班

本課程將延續Java基礎班的內容,可歸納為四大項目:
1. 繼續在基礎班未能交代的概念與新語法,例如:將資料型態進一步抽象化的泛型 (generics)、創造框架的工具reflection和annotation、JDK8才引進的lambda和三大神器;最後,我們嘗試了解Java程式如何被JVM執行,以利於了解下一個主題:多執行緒程式設計。
2. 簡介作業系統的基礎知識(如:process與thread的差異、job scheduling),介紹Java的API撰寫多執行緒的應用程式,並如何排除平行程式中會遭遇的問題。
3. 介紹資料結構與演算法 (Data structures and Algorithms, DSA)。在CS大一的課程中,DSA是除了程設以外的最重要課程之一,尤其二年級開始會面對不同的應用問題 (如編譯器、作業系統、計算機網路、計算機結構)都需要DSA的基礎;甚至在應徵工作面試時,DSA是面試的項目之一。想挑戰LeetCode的題目嗎?
4. 最後我們在更往上走一層,進入設計模式的範疇。設計模式討論架構的問題,嘗試找出具備高度彈性與低維護成本的解法用以適應未來的需求改變。

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

課程大綱

// 進階物件導向程式設計 (Advanced Topics on Object-Oriented Programming)
0. 複習物件導向設計 (A quick review on OOP)
1. 泛型 (Generics)
2. 反射與修飾 (Reflection and annotation with applications (e.g. JUnit))
3. 匿名函數與Stream API (Lambda expressions & Stream API)
4. Optional: alternative to null (a billion-dollar mistake?!)
5. Java虛擬機初探 (JVM: internals and computation model)

// 平行程式設計 (Concurrent Programming)
0. Basic concept: Thread & Runnable
1. Race condition solved by synchronized methods/blocks
2. Deadlock: producer-consumer problem, dining philosophers
4. Concurrency API: thread pools
(Reference: Brian Goetz, Java Concurrency in Practice, 2006.)

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

// 設計模式 (Selected Design Patterns)
0. SOLID principle & Inversion of Control (IoC)
1. Creational patterns: singleton, factory method, abstract factory, prototype, dependency injection, interning, flyweight, builder
2. Structural patterns: adapter, decorator, proxy, facade
3. Behavioral patterns: iterator, observer, strategy
4. MVC model
(Reference: Eric Freeman,‎ Bert Bates,‎ Kathy Sierra,‎ Elisabeth Robson, Head First Design Patterns: A Brain-Friendly Guide, 2004)

註0:updated on 2019/10/7
註1:課程教材主要以英文為主,授課過程以中文為主。
註2:進階班內容可能因為當期我個人的偏好或者學員的需求而有些許調整。

適合對象

1. 擁有Java程式撰寫經驗的學員
2. 具備其他物件導向程式語言能力的學員

開發環境

JDK8 + Eclipse

近期班次

  • 第321期 開課日期:2019.11.09 招生中

    上課時間:每週(六)(日)
    1:00 PM ~ 4:00 PM
    上課日期:2019.11.09 ~ 2019.12.08
    學費:新生新台幣5000元整

    詳細資訊

  • 注意事項

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

    講師介紹

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

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

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

    (一) 服務經驗

    • 國立臺灣大學 腦與心智科學研究所 兼任研究助理 (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

    (四) 教學特色

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