- 18.6 總結 更新時間:2022-07-27 18:29:44
- 18.5.4 小結
- 18.5.3 Watcher的核心代碼
- 18.5.2 Watcher的設計
- 18.5.1 遠程控制的客戶端介紹
- 18.5 實現智能硬件的遠程控制系統(下)
- 18.4.5 遠程控制系統后續的規劃
- 18.4.4 遠程控制系統服務端的相關代碼
- 18.4.3 遠程控制系統的數據流向
- 18.4.2 遠程控制系統服務端的設計
- 18.4.1 業務背景及遠程控制系統的功能
- 18.4 實現智能硬件的遠程控制系統(上)
- 18.3.3 Kotlin Coroutines在爬蟲框架中的使用
- 18.3.2 DSL在爬蟲框架中的使用
- 18.3.1 NetDiscovery介紹
- 18.3 使用NetDiscovery開發網絡爬蟲
- 18.2.3 小結
- 18.2.2 R2DBC的使用
- 18.2.1 R2DBC介紹
- 18.2 使用WebFlux + R2DBC開發Web項目
- 18.1.3 例子
- 18.1.2 Ktor服務端的使用
- 18.1.1 Ktor介紹
- 18.1 使用Ktor快速開發Web項目
- 第18章 服務端實戰
- 17.4 總結
- 17.3.4 后續的規劃
- 17.3.3 代碼實現以及踩過的坑
- 17.3.2 設計思路
- 17.3.1 業務背景
- 17.3 Kotlin、RxJava以及傳統的機器學習在手機質檢上的應用
- 17.2.4 應用
- 17.2.3 Kotlin開發的FSM
- 17.2.2 常用的狀態機分類
- 17.2.1 狀態機
- 17.2 基于Kotlin、RxJava實現的有限狀態機
- 17.1.3 RxTask的改進,針對Java、Android平臺進行適應
- 17.1.2 利用奠基石實現多種Task
- 17.1.1 RxTask奠基石的實現
- 17.1 封裝一個基于RxJava的任務框架RxTask
- 第17章 響應式開發實戰
- 16.5 總結
- 16.4.3 小結
- 16.4.2 Kotlin Coroutine版本的EventBus
- 16.4.1 RxJava版本的EventBus
- 16.4 實現協程版本的EventBus
- 16.3.4 AndroidServer的使用
- 16.3.3 AndroidServer的設計原理
- 16.3.2 AndroidServer的特性
- 16.3.1 開發背景
- 16.3 使用Netty構建一個在Android上運行的Web服務器
- 16.2 網絡診斷工具
- 16.1.3 記錄Android日志更好的方式
- 16.1.2 如何開發一款類似L的日志框架
- 16.1.1 Android日志框架L
- 16.1 構建一個日志框架
- 第16章 Android實戰
- 15.7 總結
- 15.6.4 小結
- 15.6.3 Navigation原理解析
- 15.6.2 Navigation的基本使用
- 15.6.1 Navigation的配置
- 15.6 Navigation用法詳解
- 15.5.5 小結
- 15.5.4 Room的兼容與升級
- 15.5.3 常用的SQL操作
- 15.5.2 Room的配置與使用
- 15.5.1 Room的基本了解
- 15.5 Room的用法
- 15.4.5 LiveData源碼簡單分析
- 15.4.4 LiveData實現Fragment之間的通信
- 15.4.3 在ViewModel中使用LiveData
- 15.4.2 LiveData的使用
- 15.4.1 LiveData介紹
- 15.4 LiveData
- 15.3.5 ViewModel源碼簡單分析
- 15.3.4 AndroidViewModel
- 15.3.3 使用Kotlin委托屬性創建ViewModel
- 15.3.2 ViewModel的使用
- 15.3.1 ViewModel介紹
- 15.3 ViewModel
- 15.2.3 Retrofit結合Lifecycle
- 15.2.2 Lifecycle的使用
- 15.2.1 Lifecycle介紹
- 15.2 Lifecycle
- 15.1.3 Android Jetpack
- 15.1.2 AAC的功能
- 15.1.1 客戶端的架構迭代
- 15.1 Jetpack介紹
- 第15章 Jetpack
- 14.6 總結
- 14.5.5 LATEST
- 14.5.4 DROP
- 14.5.3 BUFFER
- 14.5.2 ERROR
- 14.5.1 MISSING
- 14.5 背壓策略
- 14.4.5 Maybe
- 14.4.4 Completable
- 14.4.3 Single
- 14.4.2 Flowable
- 14.4.1 Observable
- 14.4 Observeable五兄弟的差異性
- 14.3.4 并行的操作
- 14.3.3 異步實踐例子
- 14.3.2 Scheduler線程池核心RxThreadFactory
- 14.3.1 Scheduler工作核心Worker
- 14.3 線程的決策者Scheduler
- 14.2 恐怖的Function機制
- 14.1 ObservableSource、Observable、Observer的同流合污
- 第14章 RxJava的核心機制
- 13.4 總結
- 13.3.3 過濾操作符
- 13.3.2 轉換操作符
- 13.3.1 創建操作符
- 13.3 常用操作符講解
- 13.2.3 RxJava 3新特性部分詳述
- 13.2.2 與RxJava 2.x的區別
- 13.2.1 主要特性講解
- 13.2 RxJava 3新特性描述
- 13.1.3 RxJava的生命周期
- 13.1.2 RxJava的基礎知識
- 13.1.1 RxJava入門理念
- 13.1 RxJava入門
- 第13章 RxJava的新特性及常用操作符
- 12.6 總結
- 12.5.5 扁平化操作符
- 12.5.4 合并操作符
- 12.5.3 終端操作符
- 12.5.2 限制大小的操作符
- 12.5.1 轉換操作符
- 12.5 Flow其他的操作符
- 12.4.4 并行操作
- 12.4.3 buffer實現并發操作
- 12.4.2 flowOn和RxJava的observeOn
- 12.4.1 更為簡化的線程切換
- 12.4 Flow的線程操作
- 12.3.2 retry、retryWhen操作符
- 12.3.1 catch操作符
- 12.3 Flow的異常處理
- 12.2.2 Flow和RxJava
- 12.2.1 Flow和Sequences
- 12.2 Flow和RxJava
- 12.1.3 Flow的生命周期
- 12.1.2 Flow的基本使用方式
- 12.1.1 Kotlin Flow介紹
- 12.1 Flow的使用
- 第12章 Flow的基本使用
- 11.7 總結
- 11.6.5 Select表達式
- 11.6.4 actor
- 11.6.3 channel緩沖
- 11.6.2 管道
- 11.6.1 生產者和消費者
- 11.6 Channel機制
- 11.5.3 在Android中更好地使用Coroutines
- 11.5.2 安全地使用CoroutineScope
- 11.5.1 盡量少用GlobalScope
- 11.5 協程的作用域CoroutineScope
- 11.4.4 CoroutineContext+Job
- 11.4.3 多個CoroutineContext進行“+”操作
- 11.4.2 父子協程
- 11.4.1 協程的調度
- 11.4 協程的上下文和調度
- 11.3.4 coroutineScope
- 11.3.3 withContext
- 11.3.2 yield
- 11.3.1 delay
- 11.3 掛起函數
- 11.2.2 runBlocking
- 11.2.1 launch和async
- 11.2 Coroutine builders
- 11.1.3 Kotlin協程的基本概念
- 11.1.2 為何要使用協程
- 11.1.1 協程的定義
- 11.1 協程的基本概念
- 第11章 協程及其應用
- 10.3 總結
- 10.2.2 Ktor-Client的使用
- 10.2.1 什么是Ktor
- 10.2 利用Ktor-Client實現跨平臺網絡請求
- 10.1.3 Kotlin與Flutter的對比
- 10.1.2 跨平臺開發當前的主流技術
- 10.1.1 跨平臺開發的愿景
- 10.1 跨平臺的簡單介紹
- 第10章 跨平臺開發
- 9.7 總結
- 9.6.4 狀態模式
- 9.6.3 觀察者模式
- 9.6.2 builder模式
- 9.6.1 單例模式
- 9.6 更好地使用設計模式
- 9.5.3 在Kotlin中使用MapStruct
- 9.5.2 MapStruct簡介
- 9.5.1 data class的copy()為淺拷貝
- 9.5 在data class中使用MapStruct
- 9.4.4 小結
- 9.4.3 Contract源碼解析
- 9.4.2 Contract的特性
- 9.4.1 Contract的概念
- 9.4 Contract契約
- 9.3.2 如何優雅地使用作用域函數
- 9.3.1 作用域函數的概念
- 9.3 作用域函數
- 9.2.2 在成員函數中使用中綴表達式
- 9.2.1 在擴展函數中使用中綴表達式
- 9.2 中綴表達式
- 9.1 運算符重載
- 第9章 常用語法糖與設計模式
- 8.3 總結
- 8.2.7 Kotlin DSL的實際使用——封裝路由框架的使用
- 8.2.6 使用中綴表達式實現DSL
- 8.2.5 使用運算符重載實現DSL
- 8.2.4 將擴展函數改成DSL的方式
- 8.2.3 創建一個自己的DSL
- 8.2.2 帶接收者的Lambda
- 8.2.1 帶接收者的函數類型
- 8.2 構建一個DSL的多種方式
- 8.1 DSL介紹
- 第8章 DSL的構建
- 7.5 總結
- 7.4.2 Java反射與Kotlin反射的互操作性
- 7.4.1 獲取類的其他信息
- 7.4 Java反射和Kotlin反射(下)
- 7.3.4 屬性引用,獲取類的成員變量
- 7.3.3 函數引用,獲取類的成員函數
- 7.3.2 構造函數引用,獲取類的構造函數
- 7.3.1 類引用,獲取Class對象
- 7.3 Java反射和Kotlin反射(上)
- 7.2.2 Kotlin反射API
- 7.2.1 概述
- 7.2 Kotlin反射概述
- 7.1.3 根本沒有什么元編程,從來只有編程而已
- 7.1.2 元編程的分類
- 7.1.1 元編程介紹
- 7.1 元編程
- 第7章 元編程
- 6.4 總結
- 6.3.4 泛型的應用
- 6.3.3 星號投影
- 6.3.2 類型投影
- 6.3.1 泛型約束
- 6.3 泛型約束、類型投影與星號投影
- 6.2.2 型變
- 6.2.1 類和類型
- 6.2 型變
- 6.1.4 Kotlin如何獲得聲明的泛型類型
- 6.1.3 Java通過類型擦除支持泛型
- 6.1.2 Kotlin的泛型
- 6.1.1 Java泛型的優點
- 6.1 類型擦除
- 第6章 泛型
- 5.4 總結
- 5.3 lateinit和by lazy
- 5.2.2 委托屬性
- 5.2.1 委托模式
- 5.2 Kotlin的委托模式和委托屬性
- 5.1.2 動態代理
- 5.1.1 靜態代理
- 5.1 委托介紹
- 第5章 委托
- 4.5 總結
- 4.4 擴展屬性
- 4.3.2 常用標準庫的擴展函數
- 4.3.1 擴展函數的特性
- 4.3 擴展函數
- 4.2.2 內聯類
- 4.2.1 內聯屬性
- 4.2 內聯屬性
- 4.1.3 非局部返回以及crossinline的使用
- 4.1.2 禁用內聯——noinline
- 4.1.1 inline的使用
- 4.1 內聯函數
- 第4章 內聯函數與擴展函數
- 3.4 總結
- 3.3.2 序列和流
- 3.3.1 集合中的函數式API
- 3.3 集合、序列和Java中的流
- 3.2.7 換個角度看Lambda表達式
- 3.2.6 使用高階函數的例子
- 3.2.5 Kotlin支持SAM轉換
- 3.2.4 方法引用
- 3.2.3 簡化Kotlin的Lambda表達式
- 3.2.2 Kotlin的Lambda語法
- 3.2.1 Java 8的Lambda
- 3.2 Lambda表達式
- 3.1.2 高階函數
- 3.1.1 函數式編程
- 3.1 函數式編程與高階函數
- 第3章 Kotlin的函數式編程
- 2.4 總結
- 2.3.4 密封類
- 2.3.3 數據類
- 2.3.2 伴生對象
- 2.3.1 對象聲明和對象表達式
- 2.3 Kotlin的類(二)
- 2.2.5 枚舉類
- 2.2.4 嵌套類和內部類
- 2.2.3 抽象類
- 2.2.2 屬性
- 2.2.1 構造函數和初始化塊
- 2.2 Kotlin的類(一)
- 2.1.2 函數
- 2.1.1 函數的參數
- 2.1 函數的基本概念
- 第2章 Kotlin的函數與類
- 1.3 總結
- 1.2.3 逐漸Kotlin化的Java
- 1.2.2 生態圈
- 1.2.1 實用主義
- 1.2 Kotlin的發展
- 1.1.2 Kotlin的特性
- 1.1.1 Kotlin的歷史
- 1.1 Kotlin簡介
- 第1章 認識Kotlin
- 前言
- 內容簡介
- 作者簡介
- 版權信息
- 封面
- 封面
- 版權信息
- 作者簡介
- 內容簡介
- 前言
- 第1章 認識Kotlin
- 1.1 Kotlin簡介
- 1.1.1 Kotlin的歷史
- 1.1.2 Kotlin的特性
- 1.2 Kotlin的發展
- 1.2.1 實用主義
- 1.2.2 生態圈
- 1.2.3 逐漸Kotlin化的Java
- 1.3 總結
- 第2章 Kotlin的函數與類
- 2.1 函數的基本概念
- 2.1.1 函數的參數
- 2.1.2 函數
- 2.2 Kotlin的類(一)
- 2.2.1 構造函數和初始化塊
- 2.2.2 屬性
- 2.2.3 抽象類
- 2.2.4 嵌套類和內部類
- 2.2.5 枚舉類
- 2.3 Kotlin的類(二)
- 2.3.1 對象聲明和對象表達式
- 2.3.2 伴生對象
- 2.3.3 數據類
- 2.3.4 密封類
- 2.4 總結
- 第3章 Kotlin的函數式編程
- 3.1 函數式編程與高階函數
- 3.1.1 函數式編程
- 3.1.2 高階函數
- 3.2 Lambda表達式
- 3.2.1 Java 8的Lambda
- 3.2.2 Kotlin的Lambda語法
- 3.2.3 簡化Kotlin的Lambda表達式
- 3.2.4 方法引用
- 3.2.5 Kotlin支持SAM轉換
- 3.2.6 使用高階函數的例子
- 3.2.7 換個角度看Lambda表達式
- 3.3 集合、序列和Java中的流
- 3.3.1 集合中的函數式API
- 3.3.2 序列和流
- 3.4 總結
- 第4章 內聯函數與擴展函數
- 4.1 內聯函數
- 4.1.1 inline的使用
- 4.1.2 禁用內聯——noinline
- 4.1.3 非局部返回以及crossinline的使用
- 4.2 內聯屬性
- 4.2.1 內聯屬性
- 4.2.2 內聯類
- 4.3 擴展函數
- 4.3.1 擴展函數的特性
- 4.3.2 常用標準庫的擴展函數
- 4.4 擴展屬性
- 4.5 總結
- 第5章 委托
- 5.1 委托介紹
- 5.1.1 靜態代理
- 5.1.2 動態代理
- 5.2 Kotlin的委托模式和委托屬性
- 5.2.1 委托模式
- 5.2.2 委托屬性
- 5.3 lateinit和by lazy
- 5.4 總結
- 第6章 泛型
- 6.1 類型擦除
- 6.1.1 Java泛型的優點
- 6.1.2 Kotlin的泛型
- 6.1.3 Java通過類型擦除支持泛型
- 6.1.4 Kotlin如何獲得聲明的泛型類型
- 6.2 型變
- 6.2.1 類和類型
- 6.2.2 型變
- 6.3 泛型約束、類型投影與星號投影
- 6.3.1 泛型約束
- 6.3.2 類型投影
- 6.3.3 星號投影
- 6.3.4 泛型的應用
- 6.4 總結
- 第7章 元編程
- 7.1 元編程
- 7.1.1 元編程介紹
- 7.1.2 元編程的分類
- 7.1.3 根本沒有什么元編程,從來只有編程而已
- 7.2 Kotlin反射概述
- 7.2.1 概述
- 7.2.2 Kotlin反射API
- 7.3 Java反射和Kotlin反射(上)
- 7.3.1 類引用,獲取Class對象
- 7.3.2 構造函數引用,獲取類的構造函數
- 7.3.3 函數引用,獲取類的成員函數
- 7.3.4 屬性引用,獲取類的成員變量
- 7.4 Java反射和Kotlin反射(下)
- 7.4.1 獲取類的其他信息
- 7.4.2 Java反射與Kotlin反射的互操作性
- 7.5 總結
- 第8章 DSL的構建
- 8.1 DSL介紹
- 8.2 構建一個DSL的多種方式
- 8.2.1 帶接收者的函數類型
- 8.2.2 帶接收者的Lambda
- 8.2.3 創建一個自己的DSL
- 8.2.4 將擴展函數改成DSL的方式
- 8.2.5 使用運算符重載實現DSL
- 8.2.6 使用中綴表達式實現DSL
- 8.2.7 Kotlin DSL的實際使用——封裝路由框架的使用
- 8.3 總結
- 第9章 常用語法糖與設計模式
- 9.1 運算符重載
- 9.2 中綴表達式
- 9.2.1 在擴展函數中使用中綴表達式
- 9.2.2 在成員函數中使用中綴表達式
- 9.3 作用域函數
- 9.3.1 作用域函數的概念
- 9.3.2 如何優雅地使用作用域函數
- 9.4 Contract契約
- 9.4.1 Contract的概念
- 9.4.2 Contract的特性
- 9.4.3 Contract源碼解析
- 9.4.4 小結
- 9.5 在data class中使用MapStruct
- 9.5.1 data class的copy()為淺拷貝
- 9.5.2 MapStruct簡介
- 9.5.3 在Kotlin中使用MapStruct
- 9.6 更好地使用設計模式
- 9.6.1 單例模式
- 9.6.2 builder模式
- 9.6.3 觀察者模式
- 9.6.4 狀態模式
- 9.7 總結
- 第10章 跨平臺開發
- 10.1 跨平臺的簡單介紹
- 10.1.1 跨平臺開發的愿景
- 10.1.2 跨平臺開發當前的主流技術
- 10.1.3 Kotlin與Flutter的對比
- 10.2 利用Ktor-Client實現跨平臺網絡請求
- 10.2.1 什么是Ktor
- 10.2.2 Ktor-Client的使用
- 10.3 總結
- 第11章 協程及其應用
- 11.1 協程的基本概念
- 11.1.1 協程的定義
- 11.1.2 為何要使用協程
- 11.1.3 Kotlin協程的基本概念
- 11.2 Coroutine builders
- 11.2.1 launch和async
- 11.2.2 runBlocking
- 11.3 掛起函數
- 11.3.1 delay
- 11.3.2 yield
- 11.3.3 withContext
- 11.3.4 coroutineScope
- 11.4 協程的上下文和調度
- 11.4.1 協程的調度
- 11.4.2 父子協程
- 11.4.3 多個CoroutineContext進行“+”操作
- 11.4.4 CoroutineContext+Job
- 11.5 協程的作用域CoroutineScope
- 11.5.1 盡量少用GlobalScope
- 11.5.2 安全地使用CoroutineScope
- 11.5.3 在Android中更好地使用Coroutines
- 11.6 Channel機制
- 11.6.1 生產者和消費者
- 11.6.2 管道
- 11.6.3 channel緩沖
- 11.6.4 actor
- 11.6.5 Select表達式
- 11.7 總結
- 第12章 Flow的基本使用
- 12.1 Flow的使用
- 12.1.1 Kotlin Flow介紹
- 12.1.2 Flow的基本使用方式
- 12.1.3 Flow的生命周期
- 12.2 Flow和RxJava
- 12.2.1 Flow和Sequences
- 12.2.2 Flow和RxJava
- 12.3 Flow的異常處理
- 12.3.1 catch操作符
- 12.3.2 retry、retryWhen操作符
- 12.4 Flow的線程操作
- 12.4.1 更為簡化的線程切換
- 12.4.2 flowOn和RxJava的observeOn
- 12.4.3 buffer實現并發操作
- 12.4.4 并行操作
- 12.5 Flow其他的操作符
- 12.5.1 轉換操作符
- 12.5.2 限制大小的操作符
- 12.5.3 終端操作符
- 12.5.4 合并操作符
- 12.5.5 扁平化操作符
- 12.6 總結
- 第13章 RxJava的新特性及常用操作符
- 13.1 RxJava入門
- 13.1.1 RxJava入門理念
- 13.1.2 RxJava的基礎知識
- 13.1.3 RxJava的生命周期
- 13.2 RxJava 3新特性描述
- 13.2.1 主要特性講解
- 13.2.2 與RxJava 2.x的區別
- 13.2.3 RxJava 3新特性部分詳述
- 13.3 常用操作符講解
- 13.3.1 創建操作符
- 13.3.2 轉換操作符
- 13.3.3 過濾操作符
- 13.4 總結
- 第14章 RxJava的核心機制
- 14.1 ObservableSource、Observable、Observer的同流合污
- 14.2 恐怖的Function機制
- 14.3 線程的決策者Scheduler
- 14.3.1 Scheduler工作核心Worker
- 14.3.2 Scheduler線程池核心RxThreadFactory
- 14.3.3 異步實踐例子
- 14.3.4 并行的操作
- 14.4 Observeable五兄弟的差異性
- 14.4.1 Observable
- 14.4.2 Flowable
- 14.4.3 Single
- 14.4.4 Completable
- 14.4.5 Maybe
- 14.5 背壓策略
- 14.5.1 MISSING
- 14.5.2 ERROR
- 14.5.3 BUFFER
- 14.5.4 DROP
- 14.5.5 LATEST
- 14.6 總結
- 第15章 Jetpack
- 15.1 Jetpack介紹
- 15.1.1 客戶端的架構迭代
- 15.1.2 AAC的功能
- 15.1.3 Android Jetpack
- 15.2 Lifecycle
- 15.2.1 Lifecycle介紹
- 15.2.2 Lifecycle的使用
- 15.2.3 Retrofit結合Lifecycle
- 15.3 ViewModel
- 15.3.1 ViewModel介紹
- 15.3.2 ViewModel的使用
- 15.3.3 使用Kotlin委托屬性創建ViewModel
- 15.3.4 AndroidViewModel
- 15.3.5 ViewModel源碼簡單分析
- 15.4 LiveData
- 15.4.1 LiveData介紹
- 15.4.2 LiveData的使用
- 15.4.3 在ViewModel中使用LiveData
- 15.4.4 LiveData實現Fragment之間的通信
- 15.4.5 LiveData源碼簡單分析
- 15.5 Room的用法
- 15.5.1 Room的基本了解
- 15.5.2 Room的配置與使用
- 15.5.3 常用的SQL操作
- 15.5.4 Room的兼容與升級
- 15.5.5 小結
- 15.6 Navigation用法詳解
- 15.6.1 Navigation的配置
- 15.6.2 Navigation的基本使用
- 15.6.3 Navigation原理解析
- 15.6.4 小結
- 15.7 總結
- 第16章 Android實戰
- 16.1 構建一個日志框架
- 16.1.1 Android日志框架L
- 16.1.2 如何開發一款類似L的日志框架
- 16.1.3 記錄Android日志更好的方式
- 16.2 網絡診斷工具
- 16.3 使用Netty構建一個在Android上運行的Web服務器
- 16.3.1 開發背景
- 16.3.2 AndroidServer的特性
- 16.3.3 AndroidServer的設計原理
- 16.3.4 AndroidServer的使用
- 16.4 實現協程版本的EventBus
- 16.4.1 RxJava版本的EventBus
- 16.4.2 Kotlin Coroutine版本的EventBus
- 16.4.3 小結
- 16.5 總結
- 第17章 響應式開發實戰
- 17.1 封裝一個基于RxJava的任務框架RxTask
- 17.1.1 RxTask奠基石的實現
- 17.1.2 利用奠基石實現多種Task
- 17.1.3 RxTask的改進,針對Java、Android平臺進行適應
- 17.2 基于Kotlin、RxJava實現的有限狀態機
- 17.2.1 狀態機
- 17.2.2 常用的狀態機分類
- 17.2.3 Kotlin開發的FSM
- 17.2.4 應用
- 17.3 Kotlin、RxJava以及傳統的機器學習在手機質檢上的應用
- 17.3.1 業務背景
- 17.3.2 設計思路
- 17.3.3 代碼實現以及踩過的坑
- 17.3.4 后續的規劃
- 17.4 總結
- 第18章 服務端實戰
- 18.1 使用Ktor快速開發Web項目
- 18.1.1 Ktor介紹
- 18.1.2 Ktor服務端的使用
- 18.1.3 例子
- 18.2 使用WebFlux + R2DBC開發Web項目
- 18.2.1 R2DBC介紹
- 18.2.2 R2DBC的使用
- 18.2.3 小結
- 18.3 使用NetDiscovery開發網絡爬蟲
- 18.3.1 NetDiscovery介紹
- 18.3.2 DSL在爬蟲框架中的使用
- 18.3.3 Kotlin Coroutines在爬蟲框架中的使用
- 18.4 實現智能硬件的遠程控制系統(上)
- 18.4.1 業務背景及遠程控制系統的功能
- 18.4.2 遠程控制系統服務端的設計
- 18.4.3 遠程控制系統的數據流向
- 18.4.4 遠程控制系統服務端的相關代碼
- 18.4.5 遠程控制系統后續的規劃
- 18.5 實現智能硬件的遠程控制系統(下)
- 18.5.1 遠程控制的客戶端介紹
- 18.5.2 Watcher的設計
- 18.5.3 Watcher的核心代碼
- 18.5.4 小結
- 18.6 總結 更新時間:2022-07-27 18:29:44