- 博客(11)
- 收藏
- 关注
原创 Java网络模型NIO
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。 NIO通信模型: 每个客户端请求都会注册到Selector(多路复用器) 优点: 非阻塞式IO模型、弹性伸缩能力强、单线陈节省资源。 缺点: 可能会造成Selector空轮询,导致cpu资源飙升。 代码部分: 服务端代码 import java.io.IOException; import java.net.InetSocketAddress
2020-08-04 20:09:03
304
原创 Java网络模型BIO
BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。 主线程负责监听当有新的连接的时候创建一个新的子线程处理任务,如下图: 缺点: 阻塞式IO、弹性伸缩能力强、多线程消耗资源。 代码部分: 服务端代码 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; pu
2020-08-04 19:56:03
189
原创 使用Java实现基于UDP协议的网络通信
UDP协议是一种不可靠的网络协议,它在通信实例的两端个建立一个Socket,但这两个Socket之间没有虚拟链路,这两个Socket只是发送、接收数据报的对象。Java提供了DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket代表DatagramSocket发送、接收数据报。 可以认为UDP协议的Socket类似于码头,数据报则类似于集装箱;码头的作用就是负责发送、接收集装箱,而DatagramSocket的作用则是发送、就收数据报。因此对于通信双方而言,没有所
2020-08-03 17:38:18
1385
原创 使用Java实现基于TCP协议的网络通信
TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信端口,并通过产生IO流来进行网络通信。 两个实体通信示意图: Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一直处于等待状态。
2020-08-03 15:07:07
1442
原创 关于JVM参数详解
介绍 学习JVM参数配置,是为了能在JVM出现问题时分析原因并且去解决它。JVM监控与调优主要的着眼点在于如何配置、如何监控、如何调优等。 本文只重点介绍一些重要和常用的参数,如果想了解全部参数,可以参考下面的文章: JVM启动参数大全:http://www.blogjava.net/midstr/archive/2008/09/21/230265.html 参数介绍 1.标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 2.非标准参数(-X),默认jvm实现这些参数的功能,但是
2020-07-27 23:30:47
358
1
原创 关于Java多线程基础(一)
进程和线程 进程:内存中运行的应用程序。每个进程有独立的内存空间,一个应用程序可以同时运行多个进程。也是程序一次执行的过程。 线程:进程的执行单元(执行路径),负责当前进程中程序的执行,-一个进程至少有-一个线程。 -一个进程中可以有多个线程。 单核心单线程cpu会在多个线程之间切换,轮流执行多个线程。 多核心多线程cpu可以同时执行线程,在多个任务之间高速切换。 两者的联系: (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)线程是操作系统可识别的最小执行和调度单位。资
2020-05-10 19:28:33
135
原创 文件IO相关总结
主要介绍: 对于文件内容的操作主要分为两大类分别是:字符流和字节流 字符流有两个抽象类:Writer Reader其对应子类FileWriter和FileReader可实现文件的读写操作BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率 。 字节流也有两个抽象类:InputStream OutputStream其对应子类有FileInputStrea...
2020-04-21 03:59:21
164
原创 浅谈JVM
问:为什么要学习java虚拟机,它可以做什么? 答:java不像c、c++一样,不需要为每一个new写配对的delete/free代码,在JVM自动内存管理机制的帮助下,不容易出现内存泄漏和内存溢出的问题。但是,一旦出现,如果不了解虚拟机使用内存的原理,那排错就会变得异常艰难。 这里主要给介绍两个方面: JVM运行时的数据区域 1.程序计数器(线程私有):是一块较小的内存空间,字节码解释器根据这...
2020-03-26 15:55:14
83
原创 递归与非递归实现二分查找(java)
二分查找介绍: 二分查找是分治策略应用最简单的实例,分治策略是将规模较大的问题分解成同类型规模较小的问题。二分查找是针对有序的序列查询,它可以有效降低时间复杂度。我们知道对有序或无序的序列查询,需要对该序列进行遍历,时间复杂度为O(n),而二分查找每次使数据量缩减一半,一直继续下去,所以二分查找的时间复杂度是O(log2n)。 二分查找过程: 算法实现: //非递归循环实现 public sta...
2020-03-09 17:28:05
146
原创 HashMap的学习
Java集合之HashMap 简单介绍: HashMap是基于哈希表实现的Map接口实现类。这个实现提供所有的map相关的操作,map接口是以<key,value>的形式存储数据,就是双值存储(也叫键值对)。允许使用null的键和null的值(允许key和value的值为null),并且HashMap内部元素排列是无序的。 HashMap最基础实现方式: 数组+链表源码分析:(JDK1...
2020-03-09 16:10:50
123
原创 List接口下集合的特点(jdk1.7)
List接口特点: 继承自Collection接口。存放单值,里面的内容是允许重复允许为NULL,并且有序(插入的顺序) ,插入第一元素实际上就存放到了数组的0号下标下。 List接口下的集合: 1.ArrayList: 底层实现:数组 继承关系: ArrayList实现了List接口:存放单值,里面的内容是允许重复允许为NULL的并且有序(插入的顺序)。 ArrayList实现了RandomA...
2020-02-21 16:51:00
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人