- 博客(26)
- 收藏
- 关注
原创 TCP协议的拥塞控制
设置一个慢开始的门限值,当拥塞窗口的数量大于等于慢开始的门限值时,进入拥塞控制。4.快恢复:此时发送方认为从发送方到接收方的TCP连接上不存在网络拥堵,因此无需设置拥塞窗口的数量为1重新进行慢开始,这样效率太慢。而是将塞窗口的数量设置为新设定的慢开始的门限值,然后执行拥塞避免,让拥塞窗口的数量缓慢的呈指数型增长。1.慢开始:发送方在最初进行慢开始,设置拥塞窗口的数量为1,此时发送方只能发送1个数据报文段,当发送方接收到确认应答后,会将拥塞窗口的数量加倍。发送方窗口:实际决定发送方发送数据多少。
2022-10-08 19:29:15
712
原创 浏览一个网站时的整个过程
此时客户端没有数据要发给服务器了,但是服务器还有数据要发送给客户端,客户端仍可以接收。三次握手过程:客户端发送同步数据包给服务器端--->服务器端获取客户端发送的第一个数据包并判断为请求建立连接的数据包,发送数据包给客户端做出回应--->客户端接受服务器发送的确认数据包,再次发送数据包给服务器。(3)若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文。2.ip到达客户端后,通信过程需要首先建立TCP连接,获得对方回应,使用三次握手。
2022-09-22 19:39:33
481
原创 TCP和UDP的区别
连接:TCP是面向连接的传输层协议,传输数据之前必须先建立好连接;UDP无连接。服务对象:TCP点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。可靠性:TCP可靠交付:无差错,不丢失,不重复,按序到达;UDP尽最大努力交付,不保证可靠交付。拥塞控制/流量控制:TCP有拥塞控制和流量控制保证数据传输的安全性;UDP没有拥塞控制。首部开销:TCP首部开销大,首部20~60个字节;UDP首部开销小,8字节。
2022-09-22 19:01:09
679
原创 CopyOnWriteArrayList源码分析
CopyOnWriteArrayList具有以下特性:1在保证并发读取的前提下,确保了写入时的线程安全;2由于每次写入操作时,进行了Copy复制原数组,所以无需扩容;3适合读多写少的应用场景。由于add()、set() 、 remove()等修改操作需要复制整个数组,所以会有内存开销大的问题。4CopyOnWriteArrayList由于只在写入时加锁,所以只能保证数据的最终一致性,不能保证数据的实时一致性。
2022-09-18 22:52:15
168
原创 Session会话追踪的实现机制
客户端的每次请求,服务器都会产生一个HttpServletRequest对象,该对象只保存请求所传递的数据。用一个WEB应用共享一个ServletContext对象,所以当多个用户登录时就有可能会造成数据混淆。为了解决这个问题,Servlet提供了会话跟踪技术来追踪用户状态,简单的说就是指将用户操作过的重要业务步骤记录下来,以便在后续的处理中使用。会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
2022-08-24 17:10:10
825
1
原创 Servlet生命周期
在JavaEE平台上,处理TCP连接,解析HTTP协议这些底层工作统统扔给现成的Web服务器去做,我们只需要把自己的应用程序跑在Web服务器上。简单来讲,一个Web App就是由一个或多个Servlet组成的,每个Servlet通过注解说明自己能处理的路径。一个Webapp完全可以有多个Servlet,分别映射不同的路径。例如:HelloServlet能处理/hello.do这个路径的请求。一个Servlet总是继承自HttpServlet,然后覆写doGet()或doPost()方法。
2022-08-21 12:15:46
116
原创 当添加一个键值对元素时,HashMap发生了什么?
在谈起“添加一个键值对元素时,HashMap发生了什么变化?”这个问题前,我们先一起认识一下HashMap的存储结构、。HashMap内部数据结构使用数组+链表+红黑树进行存储。数组类型为Node[],每个Node都保存了某个KV键值对元素的key、value、hash、next等值。由于next的存在,所以每个Node对象都是一个单向链表中的组成节点。Map中的Key:无序不可重复,使用set进行存储Map中的Value:无序可重复,使用collection进行存储。............
2022-08-14 17:33:21
466
4
原创 基于FTP协议的文件上传与下载
FTP文件传输协议(File Transfer Protocol),用于Internet上的,是一个应用程序。
2022-08-07 18:57:10
989
2
原创 JAVA加密算法之对称加密与非对称加密算法的对比
对称加密算法就是传统的用一个密码进行加密和解密。加密,就是这样一个函数,它接收密码和明文,然后输出密文而解密则相反,它接收密码和密文,然后输出明文对称加密算法特点●对称加密算法使用同一个密钥进行加密和解密,常用算法有DES、AES和IDEA等;●密钥长度由算法设计决定,AES的密钥长度是128/192/256位;●使用对称加密算法需要指定算法名称、工作模式和填充模式。常用的对称加密算法在软件开发中,常用的对称加密算法有算法密钥长度工作模式填充模式DES56/64AES。...
2022-07-22 20:38:24
1139
原创 JAVA加密算法之常见哈希算法总结
哈希算法(Hash)又称摘要算法(Digest),它的作用是对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的为了验证原始数据是否被篡改。哈希算法最重要的特点就是●相同的输入一定得到相同的输出;●不同的输入大概率得到不同的输出。1.使用MessageDigest时,我们首先根据哈希算法获取一个MessageDigest实例。2.反复调用update(byte[])输入数据。3.当输入结束后,调用digest()方法获得byte[]数组表示的摘要。...
2022-07-22 00:24:08
1351
原创 Java实现TCP/IP网络编程
其中一个进程必须充当服务器端,它会主动监听某个指定的端口,另一个进程必须充当客户端,它必须主动连接服务器的IP地址和指定端口,如果连接成功,服务器端和客户端就成功地建立了一个TCP连接,双方后续就可以随时发送和接收数据。端口号总是由操作系统分配,它是一个0~65535之间的数字,其中,小于1024的端口属于特权端口,需要管理员权限,大于1024的端口可以由任意用户的应用程序打开。●对客户端来说,它的Socket是它所在计算机的IP地址和一个由操作系统分配的随机端口号。5.接受来自服务器端的反馈。......
2022-07-17 22:14:17
2705
1
原创 Java Email-----使用Java程序实现收发电子邮件
在完成使用Java程序实现收发电子邮件前,我们先来看一下传统的邮件是如何发送的传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱。
2022-07-17 17:32:27
2855
2
原创 Excel文件解析
在应用程序的开发过程中,经常需要使用Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生成(导出)。在Java技术生态圈中,可以进行Excel文件处理的主流技术包括:Apache POI、Alibaba EasyExcel等。下面对这两种技术作以简单的对比:...
2022-07-14 19:11:35
601
原创 超大Excel文件读写 :使用SXSSFWorkbook和EasyExcel方式对比
在进行超大Excel文件读写时,我们通常使用EasyExcel,EasyExcel采用逐行读取的解析模式,将每一行的解析结果以观察者的模式通知处理(AnalysisEventListener),所以比较适合数据体量较大的Excel文件解析。下面对比一下对于超大Excel文件使用POI写入和使用EasyExcel的效率...
2022-07-14 19:08:51
3465
原创 Properties集合的介绍和使用
1.概述Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 Map |---Hashtable |--Properties;2.Properties集合特点:1.该集合中的键和值都是字符串类型2.集合中的数据可以保存到流中 或者从流中获取数据3.通常该集合用于操作以键值对形式存在的配置文件4.Properties集合是一个唯一和io流相结合的集合5.可以使用Proper
2022-05-30 15:50:26
912
原创 操作Zip压缩文件流的用法总结
1.概述ZipInputStream是一种FilterInputStream,它可以直接读取zip包的内容:┌───────────────────┐│ InputStream │└───────────────────┘ ▲ │┌───────────────────┐│ FilterInputStream │└───────────────────┘ ▲ │┌────────────────
2022-05-30 15:06:30
1493
原创 Java输入流中FileInputStream 与 BufferedInputStream 的区别
在介绍FileInputStream 与 BufferedInputStream 两者的区别之前,让我们先了解一下JAVA IO流中最基本的一个抽象基类:InputStream。InputStream就是Java标准库提供的最基本的输入流,它位于java.io这个包里。java.io包提供了所有同步IO的功能。要特别注意的一点是,InputStream并不是一个接口,而是一个抽象类,它是所有输入流的超类。//输入流public abstract class InputStream implemen
2022-05-24 17:50:09
740
原创 Java中栈实现队列
在完成该题目前,首先让我们回顾一下队列和栈的存储特点和相关方法:(1)队列queue ①存储特点:先进先出 frist in,first out ; 只能从队首添加元素(入队),队尾取出元素(出队) ②相关方法:element() \ peek() 获取队首元素,但不取出 remove() \ poll() 获取队首元素并取出...
2022-05-13 13:29:53
804
1
原创 list set map queue deque stack 的遍历总结
一.list的遍历①普通for循环:(效率低)Arraylist底层采用object类型数组elementData存储,可以实现按数组索引遍历元素List<Integer> list =new ArrayList<Integer>(Arrays.asList(121,231,34,11,555));for(int i=0;i<list.size();i++) { System.out.println(list.get(i)); }//结果:
2022-05-10 23:04:27
179
原创 Integer类缓存池的理解
先看如下一段代码: Integer integer4=127; Integer integer5=127; System.out.println(integer4==integer5); Integer integer6=128; Integer integer7=128; System.out.println(integer6==integer7); Integer integer8=new Integer("127"); Integer int
2022-02-21 19:50:38
291
原创 StringBuilder类常用方法总结(含与string类相同方法的使用对比)
1.三种重载构造器的使用案例//几种重载构造器的使用案例 StringBuilder sb1 =new StringBuilder();//#1 StringBuilder sb2=new StringBuilder("123");//#2 StringBuilder sb3=new StringBuilder(123);//#2 说明:在StringBuilder类重载的三种构造器中都调用了父类abstractStringBuilder重载的构造器,在StringBuilder类
2022-02-21 19:31:30
2917
原创 String、StringBuilder和StringBuffer的区别
1.String类是不能可变字符串,原因:在内存中采用char[]类型数组value存储,该数组被final关键字修饰,使得char类型的引用value不能重新指向新的内存空间(即不能重新实例化)。2.StringBuilder和StringBuffer都是可变字符串,原因:两个类都继承于abstractStringBuilder父类,该父类中定义的char类型数组未使用final关键字修饰,使得char类型的引用value能重新指向新的内存空间(即能重新实例化)。3.StringBuilder类内
2022-02-21 17:32:59
145
原创 字符串常见方法总结:方法的作用、参数、返回值(构造方法可省略)1. 构造方法2. 静态方法3. 其它方法
truetruefalsetrue1. 构造方法String str1= "123abc";String str2=new String("123abc");(1)采用方式1为string类型的引用赋值,是在方法区的字符串常量池中开辟内存空间(注意:若字符串内容相同,则两个引用指向字符串常量池中同一个地址值)(2)采用方式2为string类型的引用赋值,实际上是在堆空间中开辟内存空间,每“new”一次都会调用一次构造器,在堆空间中开辟一个内存空间(注意:即便字符串内容相同,两个.
2022-02-20 23:00:34
258
原创 重载与重写的区别
1.重载:(1)在一个类中,允许存在多个同名的方法,只要他们的形参列表不同即可(形参的个数、类型、顺序)。(2)注意:同一个类、方法名相同、形参列表不同(形参的个数、类型、顺序),与权限修饰符、返回值类型、形参名和方法体无关。(3)一个类的多个构造器之间构成重载。(4)重载不表现出多态性。(静态绑定、早绑定) 在方法调用前(编译期)编译器可以明确的知道所调用的具体的方法(方法名、形参列表)。2.重写:(1)子类继承父类之后,就获取到了父类中声明的所有属性和方法,可以对继承到的父类中的方法进行覆
2022-02-20 17:58:34
139
原创 抽象类和接口的区别
1.抽象类: (1)在抽象类中既可以声明普通的方法,也可以声明抽象的方法,抽象的方法必须使用abstract关键字修饰,子类继承后需重写抽象方法。 (2)在抽象类中可以声明构造器,且有默认的空参构造器。目的:在创建子类对象前先初始化其父类。 (3)在抽象类中既可以声明属性,也可以声明常量。 (4)一个类只能继承于一个父类(单继承性)。(extends) (5)类之间不能实现多重继承。 2.接口: (1)在接口中只能声明抽象的方法,且方法可以不用a...
2022-02-20 17:57:20
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人