---
# System prepended metadata

title: Java/SpringBoot 練習題
tags: [教育訓練]

---

---
tags: 教育訓練
---
[TOC]

# Java/SpringBoot 練習題

## EX_001 建立SpringBoot Console Application
1. 建立一個SpringBoot Console maven專案
    * https://www.baeldung.com/spring-boot-console-app
    * https://start.spring.io/ 
1. 引入maven專案至eclipse中
2. 使用log4j，印出"Hello World!! Today is 2022/XX/XX", 將今天日期格式化為西元/月/日字串，以參數方式傳入log4j
3. eclipse中，執行專案，檢查結果
4. 使用mvn 命令 build出 jar檔
5. 執行java -jar 執行jar檔，檢查結果
::: info
1. 在springboot 使用 slf4j，列印log
2. slf4j設定，xml or application.properties
3. slf4j 列印格式化
4. 日期物件 Date vs LocalDateTime
:::

## EX_002 讀取使用者輸入
1. 建立一個SpringBoot Console專案
2. 此程式啟動後，等待使用者輸入字串
3. 使用者輸入字串後按enter後，程式印出輸入內容

## EX_003 建立簡易計算機
1. 建立一個SpringBoot Console專案
2. 此程式可接受命令列3個參數，舉例: "1 + 1", "1 * 2", "4 / 2"
3. 運算元可處理(+ - * /)
4. 若輸入參數數目不對，或不支援的運算，印出 usage: 語法
5. 若輸入正確，則輸出結果
6. 使用junit 驗証元件功能(單元測試)
:::info
1. 如何接收命令列參數 
2. 如何在eclipse下執行有參數的程式
3. 使用enum表示運算元
4. 定義一個計算機界面(Interface)，並建立二個計算機物件(BasicCalculator、SuperCalculator)實作計算機界面
5. 將計算機界面改寫成抽象類別(abstract)
6. SpringBoot Favor
    1. CommandLineRunner
    2. @Component
    3. @PostConstruct
    4. @Autowired - Field or Constructor Injection?
    5. @Configuration
    6. @Bean
    7. load item from applicaiton.properteist @Value("${test.msg}") 
7. JUnit with/without SpringBoot (@SpringBootTest)
:::

## EX_004 讀寫JSON 
1. 建立一個SpringBoot Console專案
2. 建立一個資料物件(Data Object)
3. 引入Google GSon 函式庫
4. 將此資料物件，以json的格式儲存至檔案中
5. 讀取JSON格式檔案，將檔案中內容讀入至資料物件中

## EX_005 執行緒
1. 建立一個SpringBoot Console專案
2. 創建一個thread，此thread執行一個for-loop,印出1~100, 每次印出後，睡10ms
3. 主程序需等待此thread 執行完後才能結束 (thread join)

## EX_006 執行緒互動
1. 建立一個SpringBoot Console專案
2. 建立一個Counter物件或全域變數
3. 創建二個thread，一個thread負責印出奇數，另一個thread負債印出偶數
4. thread每次印完數字後，將counter+1，並notify 喚醒另一thread後，自身進入wait狀態
5. counter+1 此操作建議使用synchronzied 保護
6. 當counter > 50時，結束thread
7. 主程序需等待此thread執行完後才能結束 (thread join)

## EX_007 時間比較
1. 建立一個SpringBoot Console專案
2. 使用者輸入一個日期字串，如"2022/05/11 11:26:00"
3. 若大於等於目前時間，則印出1，否則印出0

## EX_008 排序，使用Comparator
1. 建立一個SpringBoot Console專案
2. 建立一個Person物件，包含name(string), id(int)欄位，覆寫物件的toString函式，輸出一個容易閱讀的格式
3. 建立一個```ArrayList<Person>```，並產生一些Person物件，insert至list中
3. 將```ArrayList<Person>```利用comparaor針對 id 或 name 排序
1. 輸入排序後的結果

## EX_009 呼叫外部程式
1. 在程式中啟動chrome，並讓chrome導向到www.tric.com.te

## EX_010 Spring Schedule
1. 建立一個SpringBoot Console專案
2. 利用@Scheduled annotation建立排程
3. 建立一個listener，並註冊至排程元件中
4. 該排程元件，每10秒通知listener一次
5. 在listenr的實作，收到通知後會印出目前時間

## EX_011 JDBC Template
1. 安裝mySql
2. 在程式中連接資料庫，取得JDBCTemplate
3. 使用Jdbc Template 
    1. 建立表格
    2. CRUD SQL 

## EX_011 SpringBoot JPA 
參考範例:https://matthung0807.blogspot.com/2019/05/spring-boot-2-spring-data-jpa-mysql-8.html
使用JPA存取資料庫，重點了解
1. spring中資料庫相關設定
1. @Entity, @Repository, @Service 等使用方式

## EX_012 Transaction

## 建立Restful API

##  Socket通訊

## ByteArray處理

## Refactor

# Coding Style
## Don't use "else" if possible (2022/05/13)
*  https://youtu.be/EumXak7TyQ0
*  https://youtu.be/ZzwWWut_ibU
