JCConf 2023
-
總部位於日本的 LINE 以「拉近你我的距離」為企業使命,透過多元的行動服務與內容,致力將人們、資訊與社會緊密連結。自 2011 年 6 月以通訊軟體的型態推出,現更推展其多元的全球生態系,並將觸角延伸至人工智慧、金融科技等領域,積極實現「智慧入口」的願景,2021 年 3 月,LINE 與日本規模最大的網路科技集團之一 Z Holdings 正式整併,未來也將持續提供用戶享有最即時、便利的行動生活。欲瞭解更多資訊,請瀏覽官方網站:http://linecorp.com/zh-hant/
Since the previous LTS, JDK 17, was released in 2021, there are quite lots of features added into the Java specification. In this year, the latest JDK 21 LTS version is released and brings us many formal functions to improve our daily works. This session will focus on the new features, including String Templates, Sequenced Collections, Record Patterns, Pattern Matching for switch, Unnamed features and Virtual Threads.
-
MySQL
本講座介紹在一個高 QPS 、有基本HA需要的web backend service 中,如何使用Redis 滿足許多系統架構需要,從最簡單的寫穿式快取(write through cache)、預載式快取,到redis 快取鍵值設計(cache key design)幾個常用的情境,最後來講解幾個比較複雜的redis 應用(message queue, lock, rate limiter, etc)
身為後端工程師,既然在未來的路上我們必須大量使用 Spring Framework 相處,為何不給自己一個機會好好地了解一下 Spring Framework 的內涵,來當它的知心朋友呢?
大家好,我是水球潘,我專精設計模式並喜愛分享軟體設計學。
這次我想要煮一道比較硬核的菜色送給大家:「帶你用模式語言的高效思路解析 Spring Framework 原始碼,並從中學習如何設計一個 Web Framework」
我會在這場演講中,讓你認識以下這幾個話題:
1. Java 的技術堆疊:Web Framework 的技術價值主張是什麼?
2. 不同種類的 Web Framework:Register-based vs. IoC-based
3. Recap:探究 Spring Autowiring Mechanism 中的各種 Annotation
4. AnnotationConfigApplicationContext:來注入一個 Bean 吧!
5. ClassPathBeanDefinitionScanner 認識這個幫你掃包的掃地僧
6. DefaultListableFactory -- IoC 容器的大主角:getBean
是怎麼運作的?
7. createBean
到底是怎麼運作的?如何選擇最適配的建構子?
8. BeanFactory 設計: 看看 Spring 是如何遵守介面隔離原則的。
9. 看看 Spring 是如何擴充 @Configuration 功能的 -- BeanDefinitionRegistryPostProcessor
10. Zoom out! IoC-Based Container 模式語言:照著這個模式語言的思路進行,你就能自幹出另一個有著特定性質的 IoC Container。
高效率的思路能帶著你解析複雜的大型系統,而這正是我學習軟體設計時最意外的收穫。
希望能藉這個機會分享給大家,我們不見不散!!
使用 Kotlin 的多平台發佈能力,已經成為在不同平台間共用業務邏輯的穩健解決方案。然而,早先 UI 仍需要在各平台以原生元件進行實作,增加了開發門檻。隨著 Android 團隊推出 Jetpack Compose,為 UI 開發迎來了一條新路徑,JetBrains 團隊選中並將其移植為 Kotlin Multiplatform 技術的一部分,形成了跨平台的 UI 解決方案 - Compose Multiplatform。現在,在 Android、Desktop、Web 等平台上都可以使用 Compose 語法來實作 UI 介面。這種多平台開發架構為開發者提供了彈性,可以根據需求靈活調整程式碼的共用比例。
日前在 KotlinConf’23 大會上,Kotlin 團隊進一步公佈了 Compose for iOS (Alpha 版),使開發者能夠在開發 Mobile UI 時使用 Compose 語法,使得多平台開發的最後一塊拼圖得以完整!在這場分享中,將從業務邏輯的共用開始,一路從 Server-Side、兩個 Mobile 平台到 Desktop,示範如何透過 Kotlin Multiplatform 和 Compose Multiplatform 的綜合應用,在多個平台上建立統一的前端和後端應用。聽完這場分享後,將能更深入地了解 Kotlin Multiplatform 生態系,並學習在多平台上共享前後端程式碼的開發流程與技術細節。
-
VMWare
Kotlin 是在 Java 的基礎下,所設計的全新語言。且 Kotlin 是 100% 相容於 Java,所以在 Kotlin 中我們可以輕鬆的使用 Java 函式庫。但反過來也成立嗎?
Kotlin 提供了許多現代化的語言特性,若我們想在 Java 中使用這些專屬於 Kotlin 的特性,我們該如何動手呢?
在本場分享中,將與各位分享如何在 Java 中使用 Kotlin,以及需要注意的地方。
Jakarta EE is looking to “build an open source ecosystem for cloud native enterprise Java” while MicroProfile is “optimizing enterprise Java for a microservices architecture”. They are both open, collaborative, and community-driven initiatives looking to define and develop the next-generation of open cloud-native Java APIs for all … from developers, user groups, enthusiasts to vendors. In this session, we will take a look at how Jakarta EE and MicroProfile came about, what they offer to developers and users today, what they mean to you, what’s next for open cloud-native Java APIs, and how you can get involved.
In a world where microservices are more and more a standard architecture for Java based applications running in the cloud, the JVM warmup time can become a limitation. Especially when you look at spinning up new instances of an app as response to changes in load, the warmup time can be a problem. Native images are one solution to solve these problems because their statically ahead of time compiled code simply doesn’t have to warmup and so has short startup time. But even with the shorter startup time and smaller footprint it doesn’t come without a drawback. The overall performance might be slower because of the missing JIT optimisations at runtime. There is a new OpenJDK project called CRaC (Coordinated Restore at Checkpoint) which goal it is to address the JVM warmup problem with a different approach. The idea is to take a snapshot of the running JVM, store it in files and restore the JVM at a later point in time (or even on another machine).
This session will give you a short overview of the CRaC project and shows some results from a proof of concept implementation.
-
身為 Junior 工程師,在遇到難以“Google”的問題時,由於經驗不足或觀念不清而無從下手。若是以往只能請教Senior 工程師, 但 ChatGPT 的出現提供了另一個選擇。
在這場分享中,我將以工作中遇到的幾個 Java web 開發問題為例,講解如何運用 ChatGPT 找到解決方案的流程。
先簡單介紹Spring以往都用哪些方法發起http request, 如resttemplate或webclient
以及聲明式的http client, Spring Cloud OpenFeign。
接著介紹Spring 6帶來的新的聲明式http client, http interface
有哪些方法以及該如何使用。
最後再比較http interface與spring cloud openfeign的差別。
準備好要面試是很重要的,面試會考的內容有哪些:
-選擇題
-也會有複選題
-後端,以手寫考試準備
-簡答題:DAO和ENTITY是甚麼
-簡答題: Bean 和 SQLMap是甚麼
-資料庫:主鍵(Primary Key)和外鍵(Foreign Key)
-資料型態
-資料庫也可以考簡答題
-
淺談Lombok,原理、常用Annotation和優缺點
透過Line Pay官方文件所提供的Request API以及Confirm API來達成串接Line Pay 付款的功能。
從Line Pay商家後台創建再利用官方文件提供的Java後端範例程式碼,使用簡單的Postman測試,就能完成Line Pay提供測試環境的付款測試囉!
2018年以來,VMware 與微軟聯手在Azure上,以Kubernetes 為底層,並以Spring Cloud、Buildpacks與多項監控、日誌工具,建構開發者友善的應用部署平台。
這個議程將帶大家瀏覽Azure Spring Apps功能與相關技術元件,並展示快速部署流程。
密碼已成為我們生活中不可避免的一部分,但FIDO 與Spring Authorization Server的結合卻讓我們看到了破除密碼依賴的可能。這次我們將帶你探討如何利用 FIDO 的無密碼認證(PASSWORDLESS AUTHENTICATION)與Spring Authorization Server的創造一個更安全、更便利的驗證體驗。我們將斬斷密碼的枷鎖,讓身份驗證不再繁瑣。密碼時代的結束,無密碼時代的開始,從這裡起步。
-
我們都知道,讀書與重構是邁向更好設計的重要元素。書大家都讀了很多(吧!),但你是否發現,每次聽 Kent Beck 的話,發現設計有問題,要拿書上的知識來重構時,卻發現不管程式還是測試都需要大幅度的修改?遇到此情形,你會選擇怎麼做?
選擇硬著頭皮修改,就會遇到修改幅度過大、時間不夠的問題;選擇閉著眼睛 commit,不做修改,就只是把原本就有問題的設計變得更有問題,讓下一個人(a.k.a. 下個禮拜的自己)陷入更壞的處境。真的是兩難…
說到底,不支持重構的測試,只能發揮一半的功效,若是能讓測試在保護邏輯的同時,不對重構造成阻礙,相信 Uncle Bob 說的「重構出好的設計」肯定也是辦得到的吧!
本工作坊將用一個完整的案例,讓與會者在過程中,一步步在(不干擾重構的)測試的保護下,同時完成功能與調整設計。期待這樣的工作方式,能讓與會者回去後,「經過一定的練習與試錯」,在工作上得到品質與速度的提升。
Autopass 創立於台灣,以「車主的錢包」為初衷專注於出行金融支付整合。目前與全台超過 2,000 個出行場景合作,其中包含 600 家中油直營站、超過 1,000 個公私有停車場與 16 個縣市的路邊停車。除了努力拓展出行場景之外,同時也發展自有產品「⾞⿇吉」App,目前累積會員數已超過百萬。2023年將業務拓展至海外,目標讓全球車主都能享受到快速且便利的出行體驗。
官方網站:https://www.autopass.xyz
軟體工程師總是在使用別人開發的函式庫 (library),小至字串處理 (string processing)、大至工作佇列 (task queue)。那大家有沒有考慮自己來開發函式庫呢?
這個議程就是要來探討「與開發函式庫」相關的一些議題:
- 開發函式庫這件事有哪些好處?
- 函式庫與非函式庫的程式碼,通常有什麼差異?你是否聽過 mechanism code vs policy code
- 好的函式庫,大概有什麼特性?
- 在哪邊會容易找到開發函式庫的機會?該怎麼開始呢?
In this presentation, we will provide a brief overview of the current development of native applications using GraalVM. We will also demo Spring Native and Quarkus Native projects, sharing our experiences and lessons learned in their usage.
Arrow KT 2.0 準備要出來了。從一開始的 0.x 的 pure FP 風格到 2.0 面向 Kotlin 風格,一起來討論這樣演變。要如何應用 Arrow KT 寫出更穩固的程式碼
For the last two decades, the amount of data we store, process, and analyze is ever growing. The last decade shows a higher focus on immediate feedback loop data pipeline, using technologies such as Complex Event Processing (CEP), Stream Processing, and Change Data Capture (CDC). Services such as Kafka or NATS are to be found in almost every new system (at least to some extent).
To build a data pipeline, the number of technologies, frameworks, and platforms are endless. Getting the initial grasp of it all is much harder than expected, but together we can tackle it!
-
In the functional programming world, Tagless Final is a famous term. It is like a design pattern, encoding the business logic well. Let's briefly talk about where it comes from and how it applies to actual programming.
在 FP 的世界裡,Tagless Final是一個著名的術語,它是一種設計模式,很好地抽象業務邏輯,我們簡單說一下它的由來以及如何應用到實際程式設計中。
工作中有使用到 Spring Data 官方文件中所列的 community module - Spring Data DynamoDB,後來 project 經歷 Spring Boot 2.x 升級到 3.x,AWS Java SDK 也早已有 2.x 版本,但是 Spring Data DynamoDB 仍然是舊版,且 repo 所有者已經一陣子沒有更新,就決定自己來動手。
本議程將分享維護和升級 Spring Data DynamoDB 底層相依 library 的經驗,以及 Spring Data DynamoDB 實作為 Spring Data 的一個 module 的相關知識。
Javalin是一個輕巧且易用的Java和Kotlin網頁框架,本演講將深入介紹其特點和優勢,包括簡潔API、靈活路由和現代開發。讓您快速構建高效網頁應用程式。
Most modern applications make an HTTP request one way or the other. However, despite their common usage HTTP clients are difficult to use optimally. This is partially because each environment is different, and also because networking itself is a difficult topic.
At the same time, a properly configured HTTP client could be the difference between a thread-busy server, or a localized error.
I believe understanding the internals of how an HTTP library functions is an invaluable skill. I'd like to talk about the internals of a HTTP client that I know well, Armeria's WebClient.
I believe these topics are not pertinent only to Armeria, and other HTTP clients are implemented with similar concepts in mind.
I'll be discussing how Armeria client is implemented internally. I'll briefly go through the process of making a simple client request. While doing so, I'll touch on how DNS Resolution, Connection Pooling, Protocol Negotiation is implemented. I'll also discuss how the request and response is sent or received over the wire.
Implementing an extensible and performant HTTP client can be a difficult task. I'll introduce how Armeria uses Event Loops, Decorators, and Reactive Streams to achieve this. I will also give code pointers in case anyone would like to go through the Armeria code-base themselves.
-
MySQL開發團隊在今年2月推出了MySQL REST Service (MRS) 第一個Beta版,再於今年五月推出了第二個Beta版.這使得MySQL資料庫能透過其REST Service的end point,將資料庫中的資料以JSON文件的格式支援Web應用或Mobile應用,它也支援OAuth2認證服務,及其他先進的安控功能,進而能和各種Framework(例如Django, .NET)合作,以大幅增加開發者的生產力.
這場演講將為會眾介紹這套全新的技術,並且演示如何使用MySQL for VS Code來設定及管理MSR.
本演講主要的重點包括:
- MSR的架構
- 以MySQL for VS Code建立MSR服務
- 下載及安裝具有MSR功能的MySQL Router
- Bootstrap (初始化) MySQL Router
- 以browser連上MySQL REST Service的Endpoint
- 建立基於MRS之REST應用
In this talk, we embark on a journey to unravel the intricate mechanisms of Spring Distributed Lock using Redis. With a keen focus on source code analysis, we will unveil essential insights into the architecture of RedisLockRegistry. This talk also shares the experience of contributing to Spring Integration project.
在這個議程中, 主要會提到 Serverless在提供快速建構應用系統時帶來的幫助, 並試著思考既然是以 FaaS的的腳度在做開發,勢必會有非常多的系統間通訊的話題需要關心。因此,我們應當也理解如何做好事件驅動開發的準備,利用經典的事件觸發與整合模式來做資料流的傳遞,並且也要關心整體的基礎設施如何自動化。
前幾年出現的 Ktor,是一個基於 Kotlin 程式語言的非同步 (asynchronous) 後端框架,不僅能單獨當成一個Server Side 使用,也能用 Ktor/Kotlin 寫 Web。眾所皆知,Kotlin 是 Google 官方指定開發 Android 的主要語言之一,Android 這幾年出現的 Jetpack Compose 目前也朝 Compose Multiplatform (for Android, iOS, desktop, and web.) 的方向在發展。
Ktor 可用的 UI Framework,除了建立新專案時的 Templating 可以選擇之外,Compose Multiplatform + Ktor 也是一個不錯的選擇。當然,最後就是得將 Ktor deploy 到雲端平台(會從 GCP、Azure、AWS...等等擇一)。
-
當App的功能越來越多越來越複雜且開發人員越來越多的時候,如果沒有適當的模組化,開發流程會越來越多問題。不但會降低App的品質,而且開發者的體驗也會越來越差。在本次的分享中,我會分享一個Android上超大型App如何從一個超大型的單一模組化慢慢演化成許多的小模組。以及面向模組化的設計中有哪些挑戰跟建議的 Design Pattern與Anti-Pattern。希望各位可以從本分享中得到一些啟發並且改善本身的App設計
In this thought-provoking talk, we will delve into a comprehensive exploration of Jetpack Compose, its declarative User Interface (UI), and what this signifies for contemporary app development. We will explain its components and processes, specifically focusing on the functionality of composable functions and their implications for performance within app development. The talk will also shed light on distinctive features including skippability, restartability, and stability in Jetpack Compose. We will guide the audience through how these features influence the efficiency, responsiveness, and overall performance of an app. Furthermore, we will examine in depth how the Jetpack Compiler generates skippable code blocks and facilitates stability inference, revolutionizing how we perceive and utilize UI frameworks in application development. Join us for a stimulating conversation on how Jetpack Compose's distinctive capabilities can lead to enhanced crafting of software applications in our technological world.
基於微服務的系統在過去幾年中變得無處不在。然而,單體、模塊化系統的想法最近也重新流行起來。
Spring Modulith 是一個新的實驗性 Spring 項目,讓開發人員在代碼中表達這些邏輯應用程序模組,並構建結構良好、與領域對齊的 Spring Boot 應用程序。
Java Thread 從早期就開始利用OS Thread,在單核心到現在的多核心的變遷過程中,結合concurrent函式庫讓Java在開發語言的選擇上具有了重要優勢。儘管OS Thread被稱為輕量級,實際上並不完全如此。為了應對High Throughput的需求,我們不能無限制的建立Thread,
而市面上也出現了各種非同步的方法。在這種情況下,Virtual Threads被新增到JDK中,試圖提供更簡單的方式來實現High Throughput。本議程將介紹JDK 21正式引入的Virtual Threads,並探討其背景和如何正確利用。