coding road
基本程式概念
- 輸入與輸出 (input and output)
- 變數型態與宣告變數
- 運算子 (算術、比較、位元、邏輯、關係)
- if 選擇結構
- for、while 重複結構
- 一維陣列 (array)
演算法 (algorithm)
- 排序
- 遞迴
- 堆疊
- 佇列
- 二元樹
- 圖論
- 雜湊
- 暴力法
- 分治法
- 動態規劃
C&C++
技能樹
- 字串 (string)
- 多維陣列
- 函式 (function)
- 標頭檔
- 指標 (pointer)
- 參考 (reference)
- 結構 (struct)
- 建構式
- 解構式
常用函式
- abs (絕對值)
- pow (次方)
- sqrt (開根號)
- random (亂數)
- length (字串長度)
- sort (陣列排序)
- min (取兩數中較小值)
- max (取兩數中較大值 )
常用函式庫
- iostream
- algorithm
- cctype
- string
- math
- cstdlib
- iomanip
Java
Java 初階工程師
- 類別 (class)
- 管理資料夾 (package)
- 物件 (object)
- 方法 (method)
- 轉型 (強制轉型、隱含轉型)
- 存取修飾字 (public、private、protected、default)
- 建構子 (constructor)
- ArrayList
- 介面 (interface)
- 列舉 (enumerations)
- 集合 (Set)
- 抽象類別 (abstract class)
- 多載 (overload)
- 覆寫 (override)
- 例外處理 (exception)
- I/O 操作
- Lambda 表達式
- 執行緒
- JDBC (資料庫操作)
Java 高階工程師
- Java AWT
- Java Swing
- Java Spring
- Java MVC
- Servlet
- Hibernate
- JSP
- Tomcat、TomEE
- RESTful api
- Web container
Python
網站開發
- Django 網站框架
- Flask 網站框架
物理模擬
- VPython
遊戲開發
- Pygame
視窗開發
- Tkinter
- Kivy
網頁爬蟲
- Request
- BeautifulSoup
資料視覺化
- Matplotlib
AI 實作
- Tensorflow
- Keras
- OpenCV
- PyTorch
- Numpy
- Pandas
- Scikit-learn (機器學習)
R 語言
IDE:RStudio
dplyr 套件
- filter():篩選符合條件的觀測值
- select():選擇變數
- arrange():依照變數排序觀測值
- summarise():聚合變數
- group_by():依照類別變數分組,通常搭配 summarise() 函數一起使用
ggplot2 套件 (資料視覺化)
- aes():負責將素材綁定至 X 軸與 Y 軸
- geom_histogram() :直方圖
- geom_boxplot() :盒鬚圖
- geom_line() :線圖
- geom_point() :散佈圖
- geom_bar() :長條圖
C# (C sharp)
- ASP.Net
- Window Forms
- MVC
- Web API
- .Net Framework
- .Net Core
Android 行動裝置開發 (以 Java 為例)
Java 基礎
- Java object、class、method
- Hashmap 原理、集合(Set)、執行緒
- ArrayList 與 LinkList 聯繫
- GC (Garbage Collection) 機制
- Java 泛型
- Java Synchronized
- ThreadPool 原理
Java 進階
- Java JVM (虛擬機)
- Java 物件生命週期
- HTTP 協定、HTTPS 協定
- Socket 協定
- TCP / IP
- 序列化與反序列化
- ThreadPool 實現
- 資料庫操作 (DataSource)
Android 架構
- MVC (Model-View-Controller) 模式
- MVP (Model-View-Presenter) 模式:視圖由表示器初始化,它呈現用戶界面(UI)並接受用戶所發出命令,但不對用戶的輸入作任何邏輯處理,而僅僅是將用戶輸入轉發給表示器
- MVVM (Model-view-viewmodel) 模式:有助於將圖形化使用者介面的開發與業務邏輯或後端邏輯(資料模型)的開發分離開。
- CLEAN 模式:依賴應該是從外到內,因此在實現上,率先實現內層,再實現外層,而每一層都會把內部那一層完全包裹起來,形成一個類似洋蔥的結構。
- 組件化開發
- 跨平台開發:Flutter
Android 基礎
- Application 生命週期
- Android Activity 生命週期
- Android Service、IntentService
- Activity 的 onNewIntent
- BroadcastReceiver 使用
- Android 消息機制
- Binder 機制,共享內存實現
- Android Event 分發機制
- Android 多工實現:Thread、HandlerThread、AsyncTask、IntentService
- ActivityThread 工作原理
- View 的繪製
- RecyclerView 與 ListView
- Android ADB
Android 進階
- Android包 管理機制,核心 PackageManagerService
- Window 管理,核心 WindowManagerService
- Android Activity 啟動和管理,核心ActivityManagerService
- Context 關聯類
- 自定義 LayoutManager,RecyclerView中如何自定義 LayoutManager
- OKHttp3 的使用,網路請求中的 Intercept
- Dagger 依賴注入
混合開發 - Android WebView 應用
- App 調用 WebView 加載 url
- WebView 封裝、WebSettings 配置、WebViewClient、WebChromeClient
- WebView 和 Native 雙向通信機制
伺服器 (Server)
資料庫 (Database)
物聯網 (Internet of Things,簡稱IoT)
物聯網設備
- Arduino - IDE:Arduino Web Editor
- Raspberry Pi
- Webduino - https://webduino.io/
物聯網實作平台
- 中華電信 CHT IoT 平台
- Google Cloud IoT
- AWS IoT 服務
- Azure IoT
Line Bot
- Line Login
- Line Message API
- Line Chain Service (區塊鏈服務)
- LIFF (LINE Front-end Framework)
Git 版本控管
版本控制系統是一種軟體工程的開發技巧,可以透過這個系統讓每位成員的軟體版本可以方便同步和維護管理。一般在軟體開發中又分為中央式系統與分散式系統,中央式版本控制系統的工作主要在一個伺服器進行,由中央管理存取權限「鎖上」檔案庫中的檔案,一次只能讓一個開發者進行工作。而分散式系統讓不同開發者直接在各自的本地檔案庫工作,並容許多個開發者同時更動同一個檔案,而每個檔案庫有另外一個合併各個改變的功能。分散式系統讓開發者能在沒有網路的情況下也能繼續工作,也讓開發者有充分的版本控制能力,而不需經中央管理者的許可,但分散式系統仍然可以有檔案上鎖功能。
Artificial Intelligence (AI) 實作
影像辨識
- OpenCV
- Tensorflow
- Keras
- ImageAI
自然語言處理
- Python NLTK (Natural Language Tool Kit)
- Microsoft Azure LUIS (Language Understanding Intelligent Service) -> Intent、Entity
- Google Cloud Natural Language API
- Amazon Comprehend
文字分析
- Microsoft Azure 文字分析
語音辨識
- Google Cloud Speech-to-Text
- Microsoft Azure Cognitive Services
- Amazon Transcribe 語音轉換為文字
演算法練習
- 費氏數列
- 疊代演算法 (階乘)
- 回溯演算法 (老鼠走迷宮)
- 陣列資料結構 (二階行列式)
- 枚舉演算法 (找質數)