[toc]
Java SE中的4大核心技術:多線程、并發處理、Socket和NIO。
> 本文重點摘自《NIO與Socket編程技術指南》。可以很好地讓我們知道,作為程序員向上生長,應該學什么!
## 一、Socket
高性能服務器的架構設計離不開集群,集群同樣離不開Socket。Socket技術可以實現不同計算機間的數據通信,從而實現在集群中的服務器之間進行數據交換,因此,Socket技術是必須要學習的,它也是工作、面試時經常涉及的知識點。Java語言中的Socket技術其實是封裝了操作系統中Socket編程的API。
Socket編程其實就是實現服務端與客戶端的數據通信,不管使用任何的編程語言,在實現上基本上都是4個步驟:
①建立連接;
②請求連接;
③回應數據;
④結束連接
這4個步驟的流程圖如圖1-3所示。

## 二、NIO
學習NIO能更加接近架構級的技術體系,對未來的職業發展有非常好的促進作用。當你看到以上這段文字的時候,筆者要恭喜你,因為你正在往Java高性能、高并發、高吞吐量技術的道路上邁進,也就代表著未來是有可能將自己的職業規劃定位在Java高級程序員、Java資深工程師,以及技術經理、技術總監或首席技術官(CTO)這類職位上。這些職位對Java技術的掌握是有一定要求和標準的,至少筆者認為要將自己對技術的關注點從SSH、SSM分離出去,落腳在多線程、并發處理、NIO及Socket技術上,因為這些技術是開發Java高性能服務器必須要掌握的,甚至有些第三方的優秀框架也在使用這些技術。
在學習NIO之前,必須先學習Socket,因為NIO中的核心通道類都是基于Socket技術的通道類。學習Socket時要著重學習Socket Option特性,因為它會影響程序運行的效率。在網絡程序優化時,除了優化代碼之外,還要優化Socket Option中的參數。
NIO實現高性能處理的原理是使用較少的線程來處理更多的任務。使用較少的Thread線程,通過Selector選擇器來執行不同Channel通道中的任務,執行的任務再結合AIO(異步I/O)就能發揮服務器最大的性能,大大提升軟件運行效率。

NIO技術中的核心要點:緩沖區(Buffer)。緩沖區在NIO的使用中占據了很高的地位,因為數據就是存放到緩沖區中,并對數據進行處理的。例如,進行CURD操作時,都是對緩沖區進行處理,也就是數據處理的正確與否與操作緩沖區的正確與否關系緊密。每種緩沖區都有自己獨有的API,這些API提供的功能已經足夠在大多數的場景下進行軟件設計了。
## 三、推薦閱讀
socket相關編程知識與范例,子涵整理了一份實戰案例《從NIO到Netty,編程實戰出租車905協議》

學習本課程,你將收獲:
* 輕松理解Socket編程中的核心概念及應用場景;
* 快速而整體掌握Socket中的在項目中的實際應用案例;
* 解讀并通過編碼實現交通部905.4-2014數據交換協議核心邏輯;
* 學習如何設計并實現一套TCP協議; 從NIO到Netty的實戰入門。
> [走吧,我們一起去學習吧,為自己點贊??](http://www.hmoore.net/mr_zihan/protocol905/2317767)
- 簡介
- 更新說明
- 其他作品
- 第一部分 Java框架基礎
- 第一章 Java基礎
- 多線程實戰
- 嘗試一下Guava帶返回值的多線程處理類ListenableFuture
- LocalDate和Date有什么區別
- JAVA8接口增強實踐
- 第二章 Spring框架基礎
- MVC究竟是個啥?
- @ApiImplicitParam
- 七種方式,教你在SpringBoot初始化時搞點事情!
- Spring事務狀態
- maven
- Mybatis小總結
- mybatis-plus的使用
- 第三章 SpringSecurity實戰
- 基于SpringSecurity+jwt的用戶認證
- spring-security-oauth2
- 第四章 數據庫
- mysql
- mysql授權
- mysql數據庫三個關鍵性能指標--TPS\QPS\IOPS
- 梳理一下那些年Mysql的弱語法可能會踩的坑
- 關于Mysql的“字符串”數值的轉換和使用
- 憑這一文咱把事務講透
- Mysql性能優化
- 查詢性能優化
- 不常用的一些語法
- elasticsearch
- elasticsearch文檔操作
- 索引的基本操作
- java操作ElaticSearch
- elasticsearch中的各種查詢
- DB與ES混合應用可能存在的問題及解決方案探索
- 使用es必須要知道的一些知識點:索引篇
- Es中的日期操作
- MongoDB
- 入門篇(了解非關系型數據庫 NoSQL - MongoDB)
- 集群分片 (高級篇)
- 互聯網大廠的建表規范
- 第五章 中間件
- nginx
- nginx動靜分離配置,這個雷你踩過嗎?
- Canal
- Sharding-jdbc
- 水平分庫實踐
- kafka
- 第六章 版本管理
- git
- Not currently on any branch 情況提交版本
- 第七章 IO編程
- 第八章 JVM實戰調優
- jvisualvm
- jstat
- 第二部分 高級項目實戰篇
- 第一章 微信開發實戰
- 第二章 文件處理
- 使用EasyExcel處理導入導出
- 第三章 踩坑指南
- 郵件發送功能
- 第三部分 架構實戰篇
- 第一章 架構實戰原則
- 接口防止重復調用的一種方案
- 第二章 高并發緩存一致性管理辦法
- 第三章 異地多活場景下的數據同步之道
- 第四章 用戶體系
- 集成登錄
- auth-sso的管理
- 第五章 分庫分表場景
- 第六章 秒殺與高并發
- 秒殺場景
- 第七章 業務中臺
- 中臺的使用效果是怎樣的?
- 通用黑白名單方案
- 第八章 領域驅動設計
- 第十一章 微服務實戰
- Nacos多環境管理之道
- logback日志雙寫問題及Springboot項目正確的啟動方式
- 第四部分 優雅的代碼
- java中的鏈式編程
- 面向對象
- 開發原則
- Stream操作案例分享
- 注重性能的代碼
- 第五部分 談談成長
- 新手入門指北
- 不可不知的調試技巧
- 構建自己的知識體系
- 我是如何做筆記的
- 有效的提問
- 謹防思維定勢
- 學會與上級溝通
- 想清楚再去做
- 碎片化學習
- 第六部分 思維導圖(付費)
- 技術基礎篇
- 技術框架篇
- 數據存儲篇
- 項目實戰篇
- 第七部分 吾愛開源
- 7-1 麻雀聊天
- 項目啟動
- 前端登錄無請求問題解決
- websocket測試
- 7-2 ocp微服務框架
- evm框架集成
- 項目構建與集成
- zentao-center
- 二次開發:初始框架的搭建
- 二次開發:增加細分菜單、權限到應用
- 7-3 書棧網
- 項目啟動
- 源碼分析
- 我的書架
- 文章發布機制
- IM
- 第八章 團隊管理篇
- 大廠是怎么運作的
- 第九章 碼山有道
- 簡歷內推
- 聯系我內推
- 第十章 學點前端
- Vue