About
KTY's Journey
背景
高天逸
tianyikao@gmail.com
KTY 是一名 Java 後端工程師,自 2023 年 3 月 起承接軟體專案並投入後端開發,於 2024 年 正式加入企業內部團隊。先前曾任銀行 MA(數位金融專案管理)與交易室大數據研究員。
擅長 Spring Boot 多層架構系統、PostgreSQL 優化、Redis 快取、RabbitMQ、多執行緒與非阻塞 I/O、RESTful API、WebSocket,以及企業級安全(Keycloak/JWT/OAuth2)。熟悉 Jenkins、Docker、Kubernetes 的 CI/CD 流程,並具備 OCI 私有節點雲架構、Java 17 升級、RHEL/JBoss 現代化 的實務經驗。
同時持續探索 AI 知識檢索系統,透過 LangChain 與 PostgreSQL 混合檢索建構 RAG 應用。
專長
後端核心:Spring Boot 多層架構、PostgreSQL/Redis 效能優化、RabbitMQ 非同步處理;安全:Keycloak/JWT/OAuth2;DevOps:Jenkins/Docker/K8s/OCI/OpenShift;AI:LangChain RAG 與 pgvector 混合檢索;兼具 Angular、Flutter 前端整合經驗。
職涯概覽
第一性原理
- 我習慣把系統當成一盤棋,不是急著寫程式,而是先把問題的結構攤開來。
- 當別人看到的是 Bug、延遲或相容性錯誤,我看到的卻是謎題的邊界,等待被拆解。我的直覺不是去打補丁,而是去設計一條能長期支撐的解法路徑。
- 當我問「這個 process 的本質是什麼?」或「為什麼這樣算起來不直覺?」時,其實我不是在找捷徑,而是在挖出背後的底層規律。
- 這種思維影響了我在 Kubernetes 上的轉折
- 第一次上 K8s,我走了最簡單的路:把 node 公網全開,雖然能跑,但風險極高
- 後來我換個角度思考:問題不是『容器怎麼不要掛掉』,而是『整個 cluster 應該自己劃出什麼邊界?』
- 於是我改用 private node,並透過 operator 自動化治理與隔離,讓整個架構不只是能跑,而是具備韌性
- 同樣的思維也發生在 RabbitMQ 的經驗裡
- 當新節點 CPU 被限得太緊,服務一遇到尖峰流量就會窒息
- 一般的做法可能是調 quota 或加硬體,但我退一步問:真正的問題不是『怎麼撐住這顆 node?』,而是『能不能把需求本身的流動方式重塑?』
- 導入 RabbitMQ 後,它成為緩衝與分派層,把生產者與消費者解耦,讓尖峰流量被平滑化,系統自然而然具備彈性
前山伏筆
- EY 審計:VBA 巨集讓我發現熱衷於改造流程。
- 遠東商銀 Fintech PM(2021-2022):RPA 自動化展現程式碼節省百小時的威力,從那一刻我決定成為工程師。
- Tarobo投資 Macro Associate(2022-2023):每天寫 Python 處理交易策略,比研究報告更投入。
- 在程式實驗中,我感受到將邏輯轉成系統的熱情。這種創造與記錄的差異推動我轉職。每個成功的 Debug 都證明我的選擇正確。
- EY:我用 VBA 自動化對帳,不只是為了省工時,而是被流程重構的優雅吸引
- 遠東商銀:開發 31 個流程的 RPA 機器人、設計 BNPL 原型,讓我體會到程式能把重複作業變成可規模化的系統
- 我設計了一個 B2B2C 模型:Bankee 作為入口,引導使用者到虛擬貨幣交易所完成 KYC 開戶——這其實是一個流程事件建模的演練,著重在思考每個交易進出如何串起整個場景
- Tarobo:串接 Shioaji 逐筆行情、建立自動回測流程,重點不是追求超額報酬,而是看到邏輯能自動化執行,像活的系統一樣
- 金融強調紀錄,而我渴望創造
- 於是我進修 JavaScript 與 JavaEE,嘗試 Django 專案、Jenkins 流水線、Docker 部署
- Toastmasters 又提供另一層養分:把抽象原則轉成可分享的故事
- 所有這些經歷,構成了我的基礎:每一段程式碼、原型與 debug 都強化了我的選擇——從紀錄現實,走向建構現實
實戰場
- 核心:Spring Boot 微服務、REST 控制器、安全過濾器。
- Django ASGI/ORM/REST。
- Celery 非同步 LLM 檢索。
- Docker/K8s 微服務。
- Redis 分布式鎖;RabbitMQ 非同步處理;PostgreSQL 使用複合索引 + GIN 索引後,針對模糊檢索與多欄位查詢的效能,相較於原本單索引方案提升約 5 倍。
- 演算法:每週 LeetCode 訓練 – 二元樹、DP、回溯、滑動視窗。
- API Gateway:重寫 JOIN,加複合索引,建快取層
- 檢索系統:pg_trgm + pgvector 混合,GIN + IVFFlat 索引,fallback 策略降幻覺,API 呼叫限流
- 基礎設施:Docker 容器化,K8s 自動擴展,OCI Terraform 建 VCN/Bastion/OKE
- CI/CD:Jenkins pipeline
- 可靠性:Redis 管理 session,WebSocket STOMP 推播,責任鏈處理例外,JUnit5/Mockito 測試覆蓋
- 資料:HikariCP 多資料源調優,修 ORM N+1,批次查詢降 GC
- Spring Boot:熟練分層架構、Spring Security JWT 過濾器、非同步 @Scheduled 任務、RestTemplate/WebClient 優化
- 演算法:已解 200+ LeetCode 題目,專注生產應用 – 二元樹用於快取/索引,DP 用於任務排程,回溯用於搜尋優化
下個迴圈
- 核心關注:高併發架構、非阻塞非同步管線與分散式資料系統設計,實作過程以《Designing Data-Intensive Applications》為方法論依據。
- 產品:設計能整合 AI 模組的資料流,將原型轉化為用戶可用的 MVP。
- AI:生成式模型、提示工程、RAG 管線、embedding 儲存。
- 借鏡:像 Modular 一樣組合最優工具鏈,打造最佳系統。
- 前瞻路線:併發 – 精練 Java CompletableFuture 線程池,探索 Project Loom 虛擬線程,用 WebFlux/Netty 做非阻塞 I/O
- 佇列 – RabbitMQ 測試耐久與吞吐,設計 backpressure 機制與死信佇列
- 資料庫 – 增量物化檢視、分片實驗、自適應查詢快取
- 資料流 – 分片設計,探索如何將大資料集分散到多個節點處理
- AI – 文件路由、token 成本控制、多模型協作,建立準確率/延遲/成本評估框架
- 產品 – 把 side project 系統化成 MVP,內建回饋監測,執行 A/B 測試,優化 onboarding 流程
- 團隊 – 借助 Toastmasters 訓練形成知識庫,建立 PR review 儀式,模組輪值
- 指北星:以《DDIA》原則導入 AI 系統 – 不可變性、串流優先、容錯、可擴展、可追蹤,每次迭代都讓資料流更韌性,同時保證產品可用
專案經歷
Software Engineer
Software Engineer
- 2026/01 ~ Present - Thumbnail Asset Manager — 高性能媒體資產管理應用:(一) 資源池管理:實作 VideoPlayerController Pool 解決硬體解碼器競合並優化記憶體使用。(二) 視覺特效:以尋軌控制開發無縫 Boomerang (正序+倒序) 循環效果。(三) 統一快取:建立 AssetCacheManager 序列化管理圖片與影片的持久化快取。(四) 自動探測:實作 VideoProber 進行背景資產掃描與自動化發現。
- Flutter 核心架構設計、效能調優與資源池管理、視覺效果與快取策略實作
- ThumbManager
- 資料結構:Controller Pool / Asset Cache / Prober
- 操作邏輯:Memory Optimization & Async Probing
- 存取介面:Flutter UI + Local Cache
- 2026/03 ~ Present - 信用狀架構優化:提升模組化與可維護性。(一) 全域路由註冊:應用 Registry 與 Singleton 模式提煉 API 路由,建立 Single Source of Truth 並移除硬編碼。(二) 網關介面整合:以 Adapter 與 Facade 模式實作 Gateway 轉換規則,整合既有介面並統一前端規格。(三) 配置外部化:維護環境參數矩陣,確保程式邏輯與配置分離。
- 架構解耦與路由註冊、網關適配邏輯開發、環境配置矩陣維護
- LCQueryArch
- 資料結構:Global Registry / Gateway Schemas / Config Matrix
- 2025/12 ~ 2026/03 - 列印確認書功能:主導橫跨多面向的全端功能交付。(一) 前端建構:開發 5 個 Angular 元件並實作三層分離。(二) 元件解耦:抽離共用邏輯策略。(三) 錯誤處理:以責任鏈模式建立統一的回饋鏈路。(四) 路由配置:完成 8 條 API 路由與 Java Header Inserter Beans 設定。
- Angular 元件開發與架構分離、共用邏輯抽離、網關路由與掛勾元件配置
- PrintConfirmGate
- 資料結構:Angular Components/Services/Java Beans
Open Source Backend Engineer
Open Source Backend Engineer
- 2025/04 ~ Present - 文件管理系統:建置多層次 Spring Boot 應用,整合完整後端功能(@EnableRetry、@EnableCaching、@EnableRedisHttpSession、@EnableWebSecurity、@EnableMethodSecurity);設計雙 PostgreSQL 資料來源與 HikariCP 連線池,實作複合索引、批次查詢與 N+1 查詢優化;實作 WebSocket 與 RESTful API;建立 JUnit5/Mockito 單元測試與 Grafana/Prometheus 監控
- 設計文件權限與版本控管 API、以 WebSocket 推送檔案事件通知、優化 PostgreSQL 索引與批次查詢
- DocCore
- 資料結構:Document/Version/ACL
- 操作邏輯:版本控管與生命週期
- 存取介面:REST + WebSocket
- 2025/01 ~ 2025/03 - 外部專區與入口網站:實作 Redis 基礎快取系統,包含 TTL 管理、會話儲存與分布式鎖,以應對高併發情境;配置 @EnableRedisHttpSession 與會話逾時及固定攻擊防護;建立完整的錯誤處理系統,包含有序的異常處理器
- 規劃 Redis 快取/Session 策略(TTL、分散式鎖)、落實有序全域錯誤處理、調校高併發端點
- PortalCache
- 資料結構:Session/CacheEntry
- 操作邏輯:TTL 快取與分散式鎖
- 存取介面:REST + Redis Session
- 2024/08 ~ 2024/09 - DevOps 管理後台:配置企業級安全防護(@EnableWebSecurity、@EnableMethodSecurity、JWT 認證、OAuth2 資源伺服器、CORS);使用 Keycloak 與 RedHat SSO 設計並實作企業級 SSO 解決方案,確保安全驗證
- 實作 JWT/OAuth2 資源伺服器、整合 Keycloak SSO、制定細粒度角色授權規則
- SecAuth
- 資料結構:User/Role/Policy
- 操作邏輯:JWT 驗證、RBAC 與 SSO
- 存取介面:OAuth2 endpoints + 受保護 REST
- 2024/06 ~ 2024/07 - DevOps Team Lab:設計 OCI VCN 架構,包含 Bastion、Public/Private Subnets、OKE 叢集與負載平衡器,使用 Terraform 建置
- 以 Terraform 佈署 OCI VCN 與 OKE、配置負載平衡與路由、自動化叢集啟動流程
- InfraIaC
- 資料結構:VCN/Subnet/OKESpec
- 操作邏輯:宣告式佈署與路由
- 存取介面:Terraform modules/variables
- 2024/03 ~ 2024/05 - 系統現代化與部署:建置 JBoss War Deployment CI/CD Pipeline for UAT/PROD(10+ UAT 伺服器);實作 Linux 離線部署策略,並使用 Kubernetes 與 Docker Compose 將應用容器化;主導將 JBoss、MVC 與 Spring/Spring Boot 應用從 Java 8/11 升級至 Java 17;為 20+ 台伺服器將 RHEL 從 7 升級至 8
- 建立 JBoss WAR CI/CD、以 Kubernetes/Docker Compose 進行容器化、執行 Java 17 與 RHEL 8 升級與滾動發佈
- ReleaseKit
- 資料結構:Pipeline/Artifact/DeploymentPlan
- 操作邏輯:CI/CD 階段與滾動發佈與健康檢查
- 存取介面:Jenkins pipeline + K8s manifests
Freelancer
Freelancer
- 2023/10 ~ 2024/01 - 客戶專區附加的問答輔助系統(FastAPI + LangChain):個性化 RAG 聊天機器人,具混合檢索
- 建置 pg_trgm/pgvector RAG 流程(GIN/IVFFlat)、整合多 LLM 回退與無知識處理、設計 Prompt 與評估
- RAGCore
- 資料結構:ArticleEmbedding/TrigramIndex/ChatHistory
- 操作邏輯:混合檢索、Prompt 組裝與回退
- 存取介面:FastAPI + LLM adapters
- 2023/05 ~ 2023/09 - SmartSync Crawler — 線上零售商產品資訊爬蟲插件(PHP + WordPress):自動化產品爬蟲插件,具安全管理介面
- 設計 WordPress 插件/管理介面、實作 XPath URL 收集與產品提取、開發樣式化描述與 CSV 匯出(UTF-8 BOM/正規化)並強化超時處理
- SmartSync
- 資料結構:URL 收集/數據提取/內容處理/CSV 輸出
- 操作邏輯:XPath 解析、DOM 操作、內容過濾、UTF-8 編碼
- 存取介面:WordPress HTTP API + CSV + 管理介面
- 2023/03 ~ 2023/05 - 餐廳訂位與管理平台(Vue 3 + Spring Boot):建置訂位 + CMS 系統,含 Vue 3 前端與 Spring Boot API
- 設計 JWT/RBAC、開發核心 CMS 模組(員工/客戶/分店/優惠券/菜單/訂單/預約管理)、實作 BI 儀表板與 Docker 部署
- 餐廳管理系統
- 資料結構:Request → Router → Controller → Service → Repository → Database 配合 POJO 實體
- 操作邏輯:JWT/RBAC、訂單/預約工作流程、商業分析
- 存取介面:REST API + JWT + SQL Server
Macro Associate
Macro Associate
- 2022/12 ~ 2023/01 - 維護並強化橫跨 10+ 個資料庫的數據基礎設施,以支援全面的市場分析,優化多源金融數據整合的數據流程架構
- 2022/11 ~ 2022/12 - 分析宏觀經濟指標,包括貨櫃航運趨勢、美國零售銷售、台幣資金流向、外匯動態與 EPFR 基金流向,以制定跨資產配置策略,將市場行為模式對應至投資決策框架
- 2022/10 ~ 2022/11 - 每日提供涵蓋新興市場(墨西哥、印度、巴西)的市場情報報告,並進行即時分析,運用 scikit-learn、statsmodels 與 scipy 進行數據分析與統計建模,透過系統化數據流程分析將複雜市場數據結構化為可執行洞察
- 2022/09 ~ 2022/10 - 建置自動化報表工作流程;整合永豐金 Shioaji API 進行市場數據攝取與策略原型開發,設計即時市場分析的數據處理管道;運用 pandas、numpy 與 scipy 進行期貨價格與隱含波動率數據分析,實作自動化回測框架與量化交易策略(紅K策略、基於隱含波動率動態切換的再平衡策略)
Fintech PM, MA Program
Fintech PM, MA Program
- 2022/04 ~ 2022/05 - 提出跨產業聯盟策略,3 項提案通過內部審查,其中 2 項成功落地,分析整合需求與數據交換協議
- 2022/02 ~ 2022/03 - 管理數位支付部門 31 項作業流程,確保合規與效率,設計工作流程邏輯與數據驗證程序;導入開源 RPA 解決方案,使用 Python 搭配 Selenium 進行流程自動化與工作流程優化
- 2021/12 ~ 2022/01 - 進行 BNPL、加密貨幣與線上小額信貸產品設計等新興金融科技趨勢研究,並每週提交報告,將產品功能對應至用戶行為模式
- 2021/10 ~ 2021/11 - 撰寫 20+ 份商業計畫書,並與大型電信公司合作成功提出 2 個數位支付專案,分析用戶旅程流程與支付處理邏輯
- 2021/08 ~ 2021/09 - 使用 Power BI 建置視覺化儀表板,設計資料模型與圖表以支援主管與產品 KPI 檢視,將複雜業務需求轉化為結構化數據流程
Auditor
Auditor
- 2020/02 ~ 2020/03 - 稽核並分析 20+ 份資產負債表/損益表及 3+ 份現金流量表,為合規與分析目的結構化財務報告數據流程
- 2020/01 ~ 2020/02 - 編制利率與外幣曝險敏感度分析,及前十大供應商/客戶集中度分析,建立數據驅動的風險評估模型
- 2019/12 ~ 2020/01 - 執行 40+ 次實質性分析程序,以驗證科目變動並識別潛在差異,開發財務數據分析與異常檢測的系統化方法
- 2019/11 ~ 2019/12 - 協調 8 個專業團隊執行金融服務客戶(含股票與債券基金)的稽核程序,將複雜金融產品結構對應至稽核測試框架
- 2019/10 ~ 2019/11 - 為 20+ 客戶專案執行財務報表稽核,範圍涵蓋流動資產、固定資產、負債及權益,分析財務數據流程與交易處理邏輯
- 2019/09 ~ 2019/10 - 使用 Excel VBA 自動化鉤稽流程,加速稽核底稿作業,設計財務數據完整性的邏輯驗證程序
教育
RedHat
2024/12- Red Hat JBoss Application Administration I (AD248)
iSpan
2023/10~2024/2- JavaEE Career Development Program
FreeCodeCamp.com
2023/7~2023/9- JavaScript Algorithms and Data Structures
- Data Visualization
Hong Kong Polytechnic University
2020/9~2021/9- Master of Finance in Investment Management
Fu Jen Catholic University
2013/9-2018/6- B.B.A. in Finance and International Business
Temple University
2016/8-2017/5- Global Exchange Program
技術經驗
Software Engineer
Frontend Development
Backend Development
Java
- 實作後端商務邏輯與中介控制(Java),透過撰寫及修改 .java 檔案(如 HeaderConfigGSP.java),在系統中建立攔截元件(Inserter Beans),以便在 Request 送往系統後台前,動態插入指定的 Header 等中介層處理
- 進行路由與服務設定(XML 配置),異動了諸如 service_extn_gsp.xml 的配置檔,用來宣告、綁定 API 的呼叫 Method (例如從 get 換成 post) 及配對正確的請求參數等
General
- 實作 Gateway 介面整合,應用轉接器 (Adapter) 與外觀 (Facade) 模式封裝底層複雜的既有系統介面,抹平前後端規格差異。維護外部化配置 (Externalized Config) 參數表,落實配置與程式碼分離原則確保環境遷移靈活性
flowchart LR
subgraph "Frontend (Angular.js)"
A["Angular Components\n(View / Logic / Style)"]
AR["Angular Routing Module"]
REG["Global Config Registry\n(Registry + Singleton Pattern)"]
A --> AR
A --> REG
end
subgraph "Gateway Layer (Java)"
GW["Java Gateway"]
INS["Header Inserter Beans\n(Java Interceptors)"]
ADP["Adapter / Facade\n(XML + JSON Schema Mapping)"]
EXT["Externalized Config\n(Multi-env Config Matrix)"]
GW --> INS
GW --> ADP
GW --> EXT
end
subgraph "Backend Systems"
BE["Legacy Backend Services"]
end
AR -->|"REST API Calls"| GW
REG -->|"Centralized Route Lookups"| GW
INS -->|"Injects Headers"| BE
ADP -->|"Transforms Payloads"| BE
classDef fe fill:#e8f4fd,stroke:#2196f3,color:#0b1a33
classDef gw fill:#fff3e0,stroke:#ff9800,color:#0b1a33
classDef be fill:#e8f5e9,stroke:#43a047,color:#0b1a33
class A,AR,REG fe
class GW,INS,ADP,EXT gw
class BE be
Open Source Backend Engineer
Backend Development
Java
- 使用不同設計模式進行解耦 - https://github.com/Vinskao/TY-Multiverse-Backend
- 使用 Java ExecutorService、ConcurrentHashMap 與非同步任務實作即時 WebSocket 後端,處理多執行緒訊息佇列。透過頻道推送方式將系統指標與訂單資訊傳送至前端,確保不同資料源非阻塞處理
- 使用 Spring Boot 框架開發 CRUD API,並整合 SSO 伺服器
- 使用 JPA、MyBatis 與 JDBCTemplate 在 Spring Boot 與傳統 JBoss 應用中實作資料存取層。設計實體映射與 SQL 查詢以支援 CRUD 與批次操作
- 使用 Spring MVC 設計並實作訂單處理與帳戶管理之 RESTful API。以 JUnit 5 與 Mockito 實作單元與整合測試,驗證控制器、服務及資料層互動。應用 Servlet 5 Filter 處理 CORS 與驗證,並以 Maven 管理建置流程
classDiagram
%% Application Layer
class TYMBackendApplication {
+@EnableWebSocket
+@EnableRetry
+@EnableAsync
+@EnableScheduling
+@EnableCaching
+@EnableRedisHttpSession
+@EnableWebSecurity
+@EnableMethodSecurity
}
%% Security Layer
class SecurityConfig {
+@EnableWebSecurity
+@EnableMethodSecurity
+JWT Authentication
+OAuth2 Resource Server
+CORS Configuration
}
class KeycloakController {
+OAuth2 Redirect
+Token Exchange
+User Info
+Token Introspect
}
class Auth {
+User Management
+Admin Operations
+Token Validation
}
%% Configuration Layer
class RedisConfig {
+@EnableCaching
+RedisConnectionFactory
+RedisTemplate
+TTL Management
+damage-calculations
+tymb:sessions
+Distributed Lock
+Lua Scripts
}
class PrimaryDataSourceConfig {
+PrimaryHikariCP
+HikariCP Connection Pool
+Connection Management
+Connection Timeout
+Leak Detection
}
class PeopleDataSourceConfig {
+PeopleHikariCP
+HikariCP Connection Pool
+Connection Management
+Connection Timeout
+Leak Detection
}
class SessionConfig {
+@EnableRedisHttpSession
+Redis Session Store
+Session Timeout
+Session Fixation
+Session Security
+Concurrent Session Control
}
%% Infrastructure Layer
class Database {
+PostgreSQL Primary
+PostgreSQL People
+Indexed Queries
+Batch Operations
}
class Redis {
+Cache Storage
+Session Store
+Distributed Lock
+Concurrency Control
}
%% Layer Relationships
TYMBackendApplication --> SecurityConfig
TYMBackendApplication --> RedisConfig
TYMBackendApplication --> PrimaryDataSourceConfig
TYMBackendApplication --> PeopleDataSourceConfig
TYMBackendApplication --> SessionConfig
SecurityConfig --> KeycloakController
SecurityConfig --> Auth
SecurityConfig --> SessionConfig
SessionConfig --> RedisConfig
RedisConfig --> Redis
PrimaryDataSourceConfig --> Database
PeopleDataSourceConfig --> Database
classDiagram
class SecurityConfig {
+@EnableWebSecurity
+@EnableMethodSecurity
+JWT Authentication
+OAuth2 Resource Server
+CORS Configuration
+Stateless Keycloak Endpoints
}
class JWTValidation {
+OAuth2ResourceServer
+JwtDecoder
+CustomJwtGrantedAuthoritiesConverter
+Bearer Token Resolver
}
class Authorization {
+ROLE_GUEST
+ROLE_MANAGE_USERS
+ROLE_ADMIN
+ROLE_USER
+permitAll() for /people/names
+authenticated() for protected endpoints
}
class SessionManagement {
+Redis Session Storage
+Session Timeout
+Session Fixation
+@EnableRedisHttpSession
+tymb:sessions namespace
}
class KeycloakController {
+OAuth2 Redirect
+Token Exchange
+User Info
+Token Introspect
+Dynamic redirectUri
}
SecurityConfig --> JWTValidation
SecurityConfig --> Authorization
SecurityConfig --> SessionManagement
SecurityConfig --> KeycloakController
classDiagram
class GlobalExceptionHandler {
+Chain of Responsibility
+Error Response Builder
}
class BusinessApiExceptionHandler {
+@Order(0)
+BusinessException
}
class DataIntegrityApiExceptionHandler {
+@Order(1)
+DataIntegrityViolationException
}
class ValidationApiExceptionHandler {
+@Order(2)
+MethodArgumentNotValidException
}
class DefaultApiExceptionHandler {
+@Order(Integer.MAX_VALUE)
+Generic Exception
}
GlobalExceptionHandler --> BusinessApiExceptionHandler
GlobalExceptionHandler --> DataIntegrityApiExceptionHandler
GlobalExceptionHandler --> ValidationApiExceptionHandler
GlobalExceptionHandler --> DefaultApiExceptionHandler
Python
Node.js
- 使用 Mongoose.js 為 MongoDB 儀表板定義 Schema 與查詢
PHP
General
Frontend Development
Vue
React
Angular
General
- 建立整合 React useState 的 Astro 網站
- 開發 Thymeleaf MVC 及 Handlebars CRUD API
- 開發 Vue.js 2/3 並整合 Vuex
- 使用 Angular 作為 gateway (或前台介面) 的最主要框架,異動了大量的 .component.ts 與 .html 檔案(如修改 showMessage 為 alertDialog / errLabel 的 UI 互動行為,及元件狀態資料刷新邏輯),並管理 Angular Routing 路由 (app-routing.module.ts)
- 以 SCSS / CSS 進行網頁視覺樣式開發,修改全站共用元件庫的 UI_Workspace/src/css/widget.scss 以及各個 Angular 模組專屬的 .scss(如 MaintainPrintingOfTransactionNotification.scss)
- 開發多國語系在地化 (Localization / i18n),異動 package.js、package_zh.js 檔案管理前端多國語系字首對照表,讓應用程式能呈現包含中文的對應顯示資源
- 將前端 API 路由提煉至全域配置中心,應用 Registry 與 Singleton 模式建立 Single Source of Truth,移除硬編碼路徑並落實高內聚低耦合的架構設計
Mobile & App Development
Mobile Frameworks
Performance & Architecture
- 使用 Flutter 與 Dart 開發高性能媒體播放應用程式。
- 實作複雜的 Boomerang (正序+倒序) 特效與視訊控制器資源池管理。
- 設計跨平台媒體管理的統一快取系統。
- 透過持久化探測與背景任務管理自動化資產發現流程。
Database
Relational
- 將 PostgreSQL 與 Keycloak SSO、LangChain 及多個後端 REST API 框架整合
- 維護 JBoss EAP 中的 MSSQL 資料存取層
- 將 JBoss 從 EAP 7 升級至 EAP 8,並為 20+ 伺服器將 JBoss 7 容器化
- 使用 PostgreSQL 交易區塊(搭配 Spring @Transactional)確保訂單撮合、資料插入與持倉更新的原子性;設計複合索引(如 status + timestamp)以高效查詢最新紀錄,並避免不必要索引以平衡寫入效能
- 使用 PostgreSQL pg_trgm 擴展實作 N-Gram 索引以支援全文檢索,實現跨多語言的模糊匹配與相似度搜索。建構混合檢索系統結合 N-Gram 與向量搜索,以實現語義與字元層級的文本檢索
NoSQL
- 部署 Redis 伺服器,搭配 producer(具訪問計數 API 的 API 伺服器)與 consumer(獨立部署)服務,記錄網站訪問次數,以因應大量並發請求
- 整合 Redis 進行表單狀態管理系統,實作會話儲存與暫存資料快取,以 Lua 腳本實作原子操作並透過應用程式層級整合進行資料持久化與狀態同步。
- 實作基於 RabbitMQ 的非同步訊息處理架構,採用 producer-consumer 模式。設計 TYMBackendApplication 作為 producer,整合 AsyncMessageService 與 RabbitMQConfig 進行訊息發布。部署 RabbitMQ 4.1 Management 伺服器作為訊息代理,具備佇列管理與非同步處理能力。建構專用 Consumer Pod 進行訊息處理與資料庫寫入操作,確保可靠訊息傳遞與容錯機制。此架構實現後端服務與資料庫操作間的可擴展、解耦通訊,支援高吞吐量訊息處理並保證傳遞語義。
graph LR
A[Backend<br/>Spring Boot<br/>REST Endpoints] --> B[RabbitMQ<br/>Message Queue]
B --> C[Consumer<br/>Spring Boot<br/>JDBC Processing]
C --> D[PostgreSQL<br/>Database]
%% Vivid, high-contrast class colors for light theme
classDef producer fill:#bbdefb,stroke:#1e88e5,color:#0b1a33
classDef mq fill:#e1bee7,stroke:#8e24aa,color:#0b1a33
classDef consumer fill:#c8e6c9,stroke:#2e7d32,color:#0b1a33
classDef database fill:#ffcdd2,stroke:#c62828,color:#0b1a33
class A producer
class B mq
class C consumer
class D database
Infrastructure & Deployment
Containerization & Orchestration
- 為資料庫資料持久化實作 PV 與 PVC
IaC & Automation
- 使用 Terraform 在 OCI 佈建基礎設施並配置網路、運算與儲存資源。透過 Ansible 自動化多節點部署。編寫並模板化 Helm Chart 以在多命名空間中部署與升級應用
Servers & Middleware
- 為容器化 JBoss EAP 7 設定 Volume,以支援即時配置更新
- 為 JBoss EAP 8 及 JBoss 容器設定 systemctl,確保重新啟動後自動啟動
System Architecture
- 實作執行緒池模式以處理高性能應用中的併發任務與資源管理
Monitoring & Visualization
- 整合 Prometheus 與 Spring Boot Actuator 收集 JVM 與自訂指標,並以 Grafana 儀表板視覺化即時資料。透過 Jolokia 監控 JBoss 執行狀態,並以 Instana 收集 Trace
CI/CD
- 搭建 Jenkins 伺服器,並為 Spring Boot、Django、Laravel 與 Astro 專案實作 CI/CD 流水線
graph LR
A[GitHub Repository] --> B[Clone and Setup]
B --> C[Build with Node.js]
C --> D[Build Docker Image with BuildKit]
D --> E[Push to Docker Hub]
E --> F[Deploy to Kubernetes]
Network
Protocols
- 使用 WebSocket 建置聊天室與 Spring Boot Actuator 指標匯出器,並以 STOMP 擔任訊息代理
Load Balancing & Ingress
- 部署 Nginx Ingress Controller,透過 Ingress 暴露所有服務並以 cert-manager 發行 TLS 憑證,同時使用 Nginx Static File Server 提供靜態檔案
- 對無狀態服務採用 Round-Robin 負載均衡,並整合 Nginx 以傳送靜態資源。使用 cert-manager 搭配 ACME 發行並自動續期 Ingress TLS 憑證
Cloud
Platforms
- 在 OCI 上部署裸機 K8S 伺服器,使用 Public Subnet 與 Ingress 設定,並規劃遷移至 GCP 的 GKE,將資料庫放置於 Private Subnet。評估兩雲環境的成本效益與網路安全
- 在 OKE 架構中,Bastion 置於 Public Subnet,Operator VM 置於 Private Subnets,OKE Control Plane 使用 Private Endpoint;配置 Public/Internal LB 與路由表(IGW/NAT/Service Gateway),透過 Bastion SSH Proxy 執行 kubectl 存取。
flowchart LR
user["User"] -->|SSH 22| bastion["Bastion (Public Subnet)"]
subgraph OCI VCN
direction LR
subgraph Public["Public Subnets"]
bastion
pubLB["Public LB Subnet (OCI LB - Reserved IP)"]
end
subgraph Private["Private Subnets"]
operator["Operator VM"]
cp["OKE Control Plane (Private Endpoint)"]
workers["Worker Nodes (NodePool size=2, A1.Flex 1c/8GB/50GB)"]
intLB["Internal LB Subnet"]
end
subgraph Gateways["Network Gateways"]
ig["Internet Gateway"]:::net
nat["NAT Gateway"]:::net
sg["Service Gateway"]:::net
end
pubRT["Public Route Table"]:::net --> ig
privRT["Private Route Table"]:::net --> nat
privRT --> sg
bastion -.-> pubRT
pubLB -.-> pubRT
operator -.-> privRT
workers -.-> privRT
intLB -.-> privRT
end
bastion -->|SSH Proxy| operator
operator -->|kubectl 6443| cp
pubLB --> workers
intLB --> workers
%% Improve contrast with vivid class definitions
classDef host fill:#eef3fb,stroke:#1f5bff,color:#0b1a33;
classDef control fill:#ede7f6,stroke:#5e35b1,color:#0b1a33;
classDef compute fill:#e8f5e9,stroke:#43a047,color:#0b1a33;
classDef net fill:#fff3e0,stroke:#fb8c00,color:#0b1a33;
%% Assign classes for better differentiation
class bastion host;
class pubLB,intLB,cp control;
class operator,workers compute;
class pubRT,privRT net;
Tools
Systems
- 為 20+ 台伺服器將 RHEL 從 7 升級至 8
Scripting
- 使用 Bash 與 Shell 腳本自動化 RHEL 系統的備份、部署與日誌輪轉。利用 Python 腳本呼叫 API、處理日誌,並與第三方服務整合以進行資料抽取與清理
Others
- 使用 Yum Repository 與 Satellite 取得檔案以升級 RHEL
- 開發 WordPress 外掛,抓取 Elementor 電商表單的雙層式資料
Security & Authentication
Identity Provider / SSO
- 建置 Keycloak SSO 伺服器,並實作授權碼 OIDC 流程以連接 Public 與 Confidential Client - https://github.com/Vinskao/keycloak-client-demo
Protocols & Flows
Framework & Keys
- 建置 Keycloak SSO 伺服器,並實作授權碼 OIDC 流程以連接 Public 與 Confidential Client - https://github.com/Vinskao/keycloak-client-demo
- 在 K8S 上將 Keycloak 18 升級至 26,並將資料持久化至 PostgreSQL
- 將 Keycloak SPI 從 Quarkus 2 升級至 Quarkus 3,並以 Informix Stored Procedure 實作 Keycloak 使用者密碼驗證流程
- 使用 CDI 將 EntityManager 注入 DAO 層
sequenceDiagram
participant User as User
participant App as Application
participant Auth as Authorization Server
participant API as Resource Server
User->>App: 1. Access Application
App->>Auth: 2. Redirect to Authorization Page
User->>Auth: 3. Login and Authorize
Auth->>App: 4. Return Authorization Code
App->>Auth: 5. Exchange Code for Token
Auth->>App: 6. Return Access Token
App->>API: 7. Access Resources with Token
API->>App: 8. Return Protected Resources
AI
Frameworks & APIs
- Maya Sawa V1:使用 FastAPI 框架與 LangChain 及 OpenAI API 構建具備多角色個性系統的知識型 RAG 聊天機器人。實作名稱檢測以獲取角色檔案、語義搜尋以查找人物,以及向量相似度搜尋以獲取文件上下文。透過 LLMChain 與 PromptTemplate 建立查詢流程,並使用個性提示詞建構器。解析並嵌入文件,透過 FastAPI 提供查詢介面,並以多工具與 Chain 協調流程。整合 Redis 進行聊天歷史管理與會話儲存。建構多層架構包含 API 層(FastAPI Router)、Q&A 層(QAChain、PageAnalyzer)、支援層(NameDetector、ProfileManager、PeopleWeaponManager、PersonalityPromptBuilder、VectorStore、ChatHistoryManager)以及外部服務整合(OpenAI API、People System API、PostgreSQL、Redis)。
- Maya Sawa V2:使用 Django 框架建構進階問答系統,透過 pg_trgm 與 pgvector 擴展增強系統,結合 PostgreSQL 中的 trigram 與向量搜尋能力。實作全文檢索管道,使用 GIN 索引進行 trigram 搜尋,IVFFlat 索引進行向量搜尋。透過 AIResponseService 新增多 AI 提供者支援(OpenAI、Gemini、Qwen、Mock)。建構完整的服務層,包含 FilterChainManager、KMSourceManager、ChatHistoryService 與 AIResponseService。增強資料層,整合 PostgreSQL、Redis 與 Celery Broker。在保持向後相容性的同時,新增模型管理、健康檢查與舊版聊天歷史支援等進階功能。
- 在 AI 應用中實作 N-Gram 索引技術以支援模糊文本匹配與語義搜索。使用 PostgreSQL pg_trgm 擴展進行 trigram 相似度搜索,在 RAG 系統中實現容錯查詢與多語言文本檢索。
Maya Sawa V2
graph TD
%% User and Entry
U["User"] --> Q["ask-with-model API<br/>question"]
Q --> P["Full-text Retrieval Pipeline"]
%% Retrieval Process
subgraph "Pipeline"
P --> N["Normalize/Lowercase<br/>trim punctuation"]
N --> E{"Compute Embedding?"}
E -- Yes --> EM["OpenAI Embeddings<br/>(text-embedding-3-small) → qvec"]
E -- No --> SKIP["Skip vector branch"]
%% PostgreSQL Retrieval (Trigram & Vector)
subgraph "PostgreSQL"
direction LR
PG1["Trigram Search<br/>content % :query<br/>similarity(content, :query) as text_sim"]:::trgm
PG2["Vector Search<br/>1 - (embedding <=> :qvec) as vec_sim"]:::vec
IDX1["GIN Index<br/>idx_articles_content_trgm<br/>(content gin_trgm_ops)"]:::idx
IDX2["IVFFlat Index<br/>idx_articles_embedding_ivfcos<br/>(embedding vector_cosine_ops)"]:::idx
EXT1["EXTENSION pg_trgm<br/>set_limit(:min_sim)"]:::ext
EXT2["EXTENSION pgvector"]:::ext
end
EM --> PG2
SKIP -.-> PG1
N --> PG1
PG1 --> MRG["Merge & Rank<br/>score = 0.6*text_sim + 0.4*vec_sim"]
PG2 --> MRG
MRG --> TOPK["Top-K Articles"]
end
%% Post-processing and Response
TOPK --> CTX["Build Context from Articles<br/>(title + snippet)"]
CTX --> AI["LLM Call (OpenAI/Gemini/Qwen/Mock)"]
AI --> RESP["Answer + Citations/No Knowledge Notice"]
RESP --> RDS["Redis ChatHistory<br/>chat:session:{sid}"]
RESP --> OUT["API Response"]
%% Database Table and Indexes
subgraph "articles schema"
TBL["articles<br/>- id BIGSERIAL PK<br/>- file_path VARCHAR(500) UNIQUE<br/>- content TEXT NOT NULL<br/>- file_date TIMESTAMP NOT NULL<br/>- embedding vector"]:::tbl
end
TBL -. indexed by .-> IDX1
TBL -. indexed by .-> IDX2
%% Styles
classDef trgm fill:#e3f2fd,stroke:#1e88e5,stroke-width:1px
classDef vec fill:#fce4ec,stroke:#d81b60,stroke-width:1px
classDef idx fill:#fff3e0,stroke:#fb8c00,stroke-width:1px
classDef ext fill:#ede7f6,stroke:#5e35b1,stroke-width:1px
classDef tbl fill:#f1f8e9,stroke:#43a047,stroke-width:1px
graph TB
subgraph "Frontend Layer"
A[User Interface] --> B[API Client]
end
subgraph "API Layer"
B --> A1[ask-with-model<br/>Async Processing]
B --> A2[task-status<br/>Task Status Query]
B --> A3[available-models<br/>Available Models List]
B --> A4[add-model<br/>Add Model]
B --> A5[chat-history<br/>Chat History]
B --> A6[legacy-chat-history<br/>Legacy Chat History]
B --> A7[healthz<br/>Health Check]
end
subgraph "Processing Layer"
P1[Async Processing<br/>Celery Task]
P2[Task Status Management<br/>Redis/Celery]
end
subgraph "Agent Service Layer"
AS[MayaAgentService<br/>Unified Service Entry]
end
subgraph "Workflow Layer"
WF[MayaAgentWorkflow<br/>Graphical Workflow]
N1[Intent Classification Node<br/>FilterChain]
N2[Knowledge Retrieval Node<br/>KMSourceManager]
N3[Tool Selection Node<br/>Smart Tool Selection]
N4[Tool Execution Node<br/>PDF/OCR/Calculation/Search]
N5[AI Response Generation Node<br/>LLM Call]
N6[Result Saving Node<br/>Data Persistence]
N7[Error Handling Node<br/>Exception Handling]
end
subgraph "Capability Support Layer"
LLM[LLM Capability<br/>OpenAI/Gemini/Qwen]
TOOLS[Tool Capability<br/>PDF/OCR/Calculation/Search]
MEMORY[Memory Capability<br/>Redis/Vector Memory]
RAG[RAG Capability<br/>pgvector/Hybrid Retrieval]
end
subgraph "Data Layer"
D1[(PostgreSQL<br/>Conversations/Articles)]
D2[(Redis<br/>Cache/Memory/Celery)]
D3[(RabbitMQ<br/>Celery Broker)]
end
subgraph "External Systems"
E1[Paprika API<br/>Knowledge Base Content]
E2[OpenAI API<br/>GPT-4o/GPT-4.1]
E3[Google Gemini API<br/>Gemini Pro/Flash]
E4[Qwen API<br/>Qwen Turbo/Plus]
end
%% API to Processing Layer
A1 --> P1
A2 --> P2
%% Processing Layer to Agent Service Layer
P1 --> AS
%% Agent Service Layer to Workflow Layer
AS --> WF
%% Workflow Node Connections
WF --> N1
WF --> N2
WF --> N3
WF --> N4
WF --> N5
WF --> N6
WF --> N7
%% Workflow Nodes to Capability Layer
N1 --> LLM
N2 --> RAG
N3 --> TOOLS
N4 --> TOOLS
N5 --> LLM
N6 --> MEMORY
%% Capability Layer to Data Layer
LLM --> D1
TOOLS --> D1
MEMORY --> D2
RAG --> D1
%% Celery Tasks to Data Layer
P1 --> D3
P2 --> D2
%% External System Connections
LLM --> E2
LLM --> E3
LLM --> E4
RAG --> E1
%% Style Definitions
classDef api fill:#e8f5e8,stroke:#4caf50,stroke-width:3px,color:#000000
classDef process fill:#fff8e1,stroke:#ffa000,stroke-width:3px,color:#000000
classDef agent fill:#e3f2fd,stroke:#2196f3,stroke-width:3px,color:#000000
classDef workflow fill:#fff3e0,stroke:#ff9800,stroke-width:3px,color:#000000
classDef capability fill:#fce4ec,stroke:#e91e63,stroke-width:3px,color:#000000
classDef data fill:#f1f8e9,stroke:#43a047,stroke-width:3px,color:#000000
classDef external fill:#f3e5f5,stroke:#9c27b0,stroke-width:3px,color:#000000
class A1,A2,A3,A4,A5,A6,A7 api
class P1,P2 process
class AS agent
class WF,N1,N2,N3,N4,N5,N6,N7 workflow
class LLM,TOOLS,MEMORY,RAG capability
class D1,D2,D3 data
class E1,E2,E3,E4 external
sequenceDiagram
participant U as User
participant F as Frontend
participant A as API
participant C as Celery Worker
participant DB as Database
U->>F: Send Question
F->>A: POST /maya-v2/ask-with-model/
A->>DB: Create Task Record
A->>C: Send Processing Task
A-->>F: Return task_id
F-->>U: Show Processing
loop Poll Status
F->>A: GET /maya-v2/task-status/{task_id}
A->>C: Query Task Status
C-->>A: Return Status
alt Task Complete
A-->>F: Return AI Response
F-->>U: Display Result
else Processing
F-->>U: Show Processing
end
end
Tools
- 在 Windows 透過 NVIDIA Container Toolkit 與 WSL2 部署本地 GPU 推論環境,並使用 Colab 進行 LLM 原型與快速實驗。調校提示詞行為並比較本地與遠端環境延遲基準
Freelancer
Backend Development
Python
- 以 FastAPI 與 LangChain 架構知識管理問答系統;透過 Laravel API 注入資料,儲存於 PostgreSQL 並轉換為向量嵌入以進行語義檢索
PHP
Tools
Others
AI
Frameworks & APIs
Maya Sawa V1
graph TD
A["User Request</br>(/qa/query)"] --> B{FastAPI Router};
B --> C["qa_chain.get_answer(query)"];
C --> D{"Detect names in query"};
%% Name Detection Branch
D -- "Names found" --> E["Fetch character profiles</br>from DB"];
E --> F{"Profile found?"};
F -- "Yes" --> G["Create prompt with</br>character profile"];
F -- "No" --> H["Respond 'not found'"];
%% No Names Branch
D -- "No names found" --> I{"Semantic search for people"};
I -- "People found" --> J["Generate answer from</br>search results"];
I -- "No one found" --> K["Similarity search</br>in Vector Store"];
K --> L["Create prompt with</br>document context"];
%% Unified Processing
G --> M["Invoke LLM"];
J --> M;
L --> M;
H --> N["Return final answer"];
M --> N;
N --> O["Save chat history"];
O --> P["Return AI answer"];
P --> B;
flowchart TD
subgraph "API Layer"
APIRouter["FastAPI Router<br/>(maya_sawa/api/qa.py)"]
end
subgraph "Q&A Layer"
QAChain["QAChain"]
PageAnalyzer["PageAnalyzer"]
end
subgraph "Support Layer"
NameDetector["NameDetector"]
ProfileManager["ProfileManager"]
PeopleWeaponManager["PeopleWeaponManager"]
PersonalityPromptBuilder["PersonalityPromptBuilder"]
NameAdapter["NameAdapter"]
VectorStore["PostgresVectorStore"]
ChatHistoryManager["ChatHistoryManager"]
ConfigManager["ConfigManager"]
ConnectionPoolManager["ConnectionPoolManager"]
Scheduler["ArticleSyncScheduler"]
end
subgraph "External Services"
OpenAIAPI["OpenAI API<br/>Chat & Embeddings"]
PeopleAPI["People System API<br/>/tymb/people/*"]
ArticleAPI["Public Article API<br/>/paprika/articles"]
PostgresDB["PostgreSQL"]
RedisDB["Redis"]
end
Client["Client / Frontend"] --> APIRouter
APIRouter --> QAChain
APIRouter --> PageAnalyzer
APIRouter --> VectorStore
APIRouter --> ChatHistoryManager
APIRouter --> Scheduler
ChatHistoryManager --> RedisDB
QAChain --> NameDetector
QAChain --> ProfileManager
QAChain --> PeopleWeaponManager
QAChain --> PersonalityPromptBuilder
QAChain --> NameAdapter
QAChain --> VectorStore
PageAnalyzer --> QAChain
NameDetector --> OpenAIAPI
QAChain --> OpenAIAPI
ProfileManager --> PeopleAPI
PeopleWeaponManager --> PeopleAPI
VectorStore --> PostgresDB
VectorStore --> ArticleAPI
PeopleWeaponManager --> PostgresDB
ConfigManager --> PostgresDB
ConnectionPoolManager --> PostgresDB
Scheduler --> ArticleAPI
人格特質
具備強烈的結果導向思維,習慣從「是否可行、是否有效率、是否能落地」的角度切入問題,重視實際產出與執行成效。在面對需求或技術挑戰時,優先考量解決方案的可實作性與執行效率,能快速做出判斷並推進落地,而非僅停留於理論層面。
個性偏理性分析,處理問題時以邏輯與結構化思考為核心。即使在壓力或複雜情境下,仍會回歸「問題本質為何」、「規則與邏輯是什麼」來進行判斷,具備穩定且一致的決策模式,能有效降低情緒干擾,提升問題解決品質。
同時具備良好的系統性思維,擅長將複雜問題拆解為可管理的模組,並從系統架構、流程與元件關係進行分析。習慣透過不同方案比較(A/B)來評估優劣,並主動找出系統瓶頸(如效能、併發、資源使用)進行優化,使整體系統在穩定性與效率上持續提升。
整體而言,屬於以邏輯與數據驅動的工程型人格,兼具執行力與優化能力,能在變動需求中快速定位問題並提出可落地的解決方案,同時持續進行系統性改善。