Java IO — NIO Channel

在上一章NIO Channel篇中我们解释了它在NIO中的作用。Channel(通道)是一个核心概念,它提供了与IO设备(如文件、网络套接字等)进行数据传输的能力。下面我将从多个方面详细讲解NIO的Channel。Channel本身不直接存储数据,它通过与Buffer(缓冲区)的交互来实现数据的读写。数据首先被读入到Buffer中,然后再从Buffer中写入到Channel,或者从Channel读入到Buffer。 Channel的工作原理 • ‌与Buffer的交互‌:Channel本身不直接存储数据,它通过与Buffer(缓冲区)的交互来实现数据的读写。数据首先被读入到Buffer中,然后再从Buffer中写入到Channel,或者从Channel读入到Buffer。 • ‌非阻塞模式‌:Channel支持非阻塞模式,这意味着线程可以在等待IO操作完成时继续执行其他任务,而不是被阻塞。这大大提高了程序的并发处理能力。 • ‌Selector机制‌:NIO还提供了Selector机制,它允许单个线程同时处理多个Channel的IO事件。Selector会不断地轮询注册在其上的Channel,检查是否有IO事件发生,并通知相应的线程进行处理。

Java IO — NIO Buffer

在上一章中我们介绍的 NIO模型的核心组件 以及其运行流程 知道如何简单使用 buffer 之后,下面就来探究一下 buffer 的底层原理。 Buffer 的原理主要在于它的四个属性: • mark:在缓冲区操作过程当中,可以将当前的 position 的值临时存入 mark 属性中,需要的时候再取出,恢复到之前的 position,重新从之前的 position 位置开始处理。调用 mark() 方法来设置 mark=position,再调用 reset() 可以让 position 恢复到 mark 标记的位置,即 position=mark • position:位置,读或写都会改变位置 • limit:表示缓冲区的当前终点,不能对缓冲区超过极限的位置进行读写操作,极限可以修改 • capacity:容量,在缓冲区创建时设定且不可修改,比如前面创建的缓冲区容量就是 1024 且不可修改

Java算法 — 快速排序(Quick Sort)

上文我们介绍了Java比较算法的核心思想 但那仅仅是最简单的思维方式并不是大家最常用下面我们来学习下组合了集中思想的快速排序算法。快速排序(Quick Sort)是一种高效且广泛应用的排序算法,由东尼·霍尔所发展,并于1960年由C.A.R.Hoare提出。快速排序是对冒泡排序的一种改进,它采用分治法的策略来将一个序列(或数组)分为两个子序列,并通过递归的方式对这两个子序列进行排序,从而达到整个序列有序的目的。通过选取一个基准值(pivot),将待排序的序列分为两部分,一部分包含所有小于基准值的元素,另一部分包含所有大于基准值的元素(相等的元素可以归到任一边)。然后,递归地对这两部分继续进行快速排序,直到整个序列有序。在Java中List接口中实际应用了该算法,也是我们最常使用的算法之一。本文介绍了Java中的快速排序和归并排序算法,包括其实现细节和优化策略。快速排序使用三向分区方法进行排序,而归并排序利用分治策略进行合并。还讨论了Timsort算法的执行过程和关键阀值,以及如何在Java中对List集合进行排序。Timsort结合了归并排序和二分插入排序的优点,适用于大数据集的排序。

Java算法 — 比较排序(Comparison-based Sorting)

比较排序(Comparison-based Sorting)是一种基于元素之间比较操作的排序算法。这类算法通过比较数据之间的大小关系来确定数据的相对顺序,从而完成排序。在我们学习Java算法过程中是一个比较重要的一个排序算法,下面我讲从一些基础简单算法 它们不是最好的算法但是其中的核心思想和思维模式值得我们深入学习。其实有 选择排序(Selection Sort),插入排序(Insertion Sort),冒泡排序(Bubble Sort),归并排序(Merge Sort),堆排序(Heap Sort)

网络编程 — Socket编程与IO模型

网络的基础知识包括一些网络模型和协议。我们常说Talk is cheap, show me code.这一小节我们将解锁Socket网络编程,通过Socket来编写简单一些简单的网络小程序。我很早之前就接触过Socket网络编程,也能写一些简单的程序,但是始终感觉socket离我很遥远,不清楚socket到底是什么以及socket是如何工作的。如果你也有和我一样的疑问,通过这一小节的梳理让我们一起搞懂socket,解锁socket技能点。在编写完socket程序之后,我们还会思考如何提高我们socket网络程序的处理吞吐量连接数,并且引入我们的IO模型,深入理解几种常见的IO模型。

网络基础 — 深入理解TCP协议

网络模型和一些网络协议,其中最大头TCP协议我们挖了一个坑,这一小节我们来填坑。这一小节我们主要分成三大块,第一部分我们将介绍,TCP的三次握手和四次挥手,通过简单的交互维护一个状态机之后建立一个稳定可靠的连接。我们有了一个稳定的连接,我们还需要数据包地稳定发送和接收。有了上面两个保障之后,如何充分利用网络带宽,成了最后的问题,这里我们介绍了传统算法和BBR算法。梳理完以上这些部分,我相信你对TCP协议会有更加深入的理解,让我们先从TCP的介绍开始吧~

网络基础 — 网络模型与网络协议

网络对于程序员非常重要,可以说离开了网络软件程序就失去了70%的魔力。但是程序员对于网络相关的领域是又爱又恨,爱是因为网络赋予程序无限的可能性,恨是因为网络对软件开发来说几乎是透明的,不用刻意的去调整网络,我们也能进行业务的开发。掌握网络相关的知识并不容易,网络相关的领域的知识内容复杂且涉及范围广。可是如果要成为一个优秀的开发工程师,进行网络相关的开发,就必须对这个部分有一个清晰的结构化的认知。这一小节,我们会从网络的TCP五层模型和OSI七层结构模型开始梳理介绍,随后介绍每一层和每一层具有代表性的网络协议,最后我们简单的聊一聊一个数据包是怎么在网络上传输的。

📖主动阅读:成为更好的阅读者

主动阅读是一种积极、深入的阅读方式,它需要读者在阅读过程中利用多种策略,如提问、概括、笔记、推理等,不仅理解文字表意,还要加深对其背后涵义的理解和记忆,同时,将自己的经验和知识运用到阅读中去,以达到更好的阅读效果。主动阅读能够提高我们的阅读能力和思维水平,培养我们批判性地思考和分析问题的能力,帮助我们更好地掌握知识和信息。

✍️你有什么值得分享的高效学习方法?

在 21 世纪的今天,我们每天都要面临大量的知识和信息。我们每个人都需要不断学习新知识、新思想和进行新的实践。 这意味着,学习不再是学生阶段才需要做的事情,终身教育应该成为我们工作和生活的有机组成部分。 在自我学习的过程中,很多人都会尝试寻找高效的学习方法,以便提升自己的学习能力和学习效率。 接下来我分享的学习方法,不仅是我自己切身实践有效,也有科学依据作为支撑。
Honesty
Honesty
人道洛阳花似锦,偏我来时不逢春
最新发布
Java IO — NIO Buffer
2024-10-21
Java IO — NIO Channel
2024-10-21
Java IO — IO/NIO模型
2024-10-21
Java异步编程方式介绍
2024-10-21
Elasticsearch — 索引(Mapping Index)
2024-10-19
Elasticsearch — 如何存储数据并保持一致性?
2024-10-19