- 博客(28)
- 收藏
- 关注
原创 Tcp协议的拥塞控制如何实现
产生拥塞的原因也显而易见,比如①存储空间限制:转发端口的输入端被多个高速输入流占用,而输出端口的转发送速率就显得较慢了,此时来不及转发的数据临时存储在存储空间,等到后面的数据流到达时存储空间此时已满就会丢弃从而造成数据丢失。TCP协议是面向连接的可靠的传输层控制协议,建立点对点的连接通信,依靠传输报文段里的首部中的一些控制位字段标识来得知两端的数据传输情况,从而判断是否需要采取针对性措施来保证传输的可靠。当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,将当前拥塞窗口值的一半作为新的慢开始门限。
2022-10-08 20:14:31
840
1
原创 Java删除有序数组中的重复项
维护一个基本的i指针和一个向前探索的j指针,j指针勇往直前,每发现一个与i指针所指向的数字不一样的数时,就让i指针所指向的数也变成这个数字,直到j指针到达数组的最后一个元素。如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k。修改输入数组 并在使用 O(1) 额外空间的条件下完成。给你一个 升序排列 的数组 nums ,请你。删除重复出现的元素,使每个元素。,返回删除后数组的新长度。不要使用额外的空间,你必须在。
2022-09-28 17:18:26
763
原创 TCP和UDP的区别
首先TCP(传输控制协议)、UDP(用户数据报协议)是目前互联网体系主流的传输层协议,负责定义两台主机之间的数据传输规则,提供传输服务。TCP协议是面向连接的可靠的传输协议,它在数据传输前必须确保先建立点对点之间的连接(客户端-服务器),建立连接后将应用层传下来的报文以字节流的形式封装成一个一个的TCP报文段(报文段内容包括TCP首部和TCP数据部分),以报文段的形式发送给另一端。建立连接的过程比较复杂,必须经历“三次握手”才能成功建立。:客户端向服务端发送一个表示请求连接同步数据包;
2022-09-22 20:53:11
676
原创 创建对象在堆区如何分配内存
每次 YGC的时候,它们将存活的对象复制到未使用的Survivor 空间(from 或 to),然后将当前正在使用的空间完全清除,交换两块空间的使用状态。每次交换时,对象的年龄会加+1,如果 YGC 要移送的对象大于 Survivor 区容量的上限,则直接移交给老年代。Heap堆是JVM 所管理的内存中最大的一块区域,被所有线程共享的一块内存区域。需要大量连续内存空间的Java对象,当对象需要的内存大于-XX:PretenureSizeThreshold参数的值时,对象会直接在老年代分配内存。
2022-09-19 17:40:25
167
原创 CopyOnWriteArrayList源码分析
这样做的好处是多个线程想要修改或者删写的时候只能有一个线程得到锁来执行操作,直到操作完成后释放锁其他线程才能继续抢占,而对于只读操作的线程来说,get()方法没有加锁,允许多个线程同时读取,而且读取到的一直都是旧数据。加锁,然后复制一个数组"副本"出来,修改操作都是在副本数组里完成的,操作完成后再替换原来的数组为"副本"数组。
2022-09-19 00:38:38
133
原创 谈谈你对线程池的理解以及常见的线程池
submit()方法用于提交需要返回值的任务,线程池会返回一个future 类型的对象,通过 future 的 get()方法来获取返回值,get()方法会阻塞当前线程直到任务完成,而使用 get(long timeout,TimeUnit unit)方法则会阻塞当前线程一段时间后立即返回,这时候有可能任务没有执行完。○ 当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会被回收,直到线程池中的线程数不超过corePoolSize。
2022-09-15 20:10:37
312
原创 Session和Cookie的区别
答案就是Cookie,你可以理解为Cookie是一个容器,里面存放了你浏览网页时做出的一些选择,输过的文字信息,登陆过的账号密码,以及自己的过期时间,路径和域等一小段文本信息(长度有限制,比如在Chrome浏览器中,单个 Cookie的长度不能超过 4069 个字符),第一次访问时服务器将SessionId以Cookie的形式响应发送到浏览器,浏览器在后续请求访问时总是附带此Cookie,这样,服务器就可以识别用户身份。总结:cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上。
2022-09-15 19:56:03
189
原创 Session会话追踪的实现机制
在Web应用程序中,我们经常要跟踪用户身份。例如:当一个用户登录成功后,如果他继续访问其他页面,Web程序如何才能识别出该用户身份?当一个用户在操作自己的购物车时,Web程序如何才能识别出该用户身份?因为HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。...
2022-08-25 23:33:29
110
原创 Servlet介绍的以及它的生命周期
1、当我们想要访问一个网站时,只需要在浏览器地址栏里输入网址,然后点击搜索或者链接即可,比如www.baidu.com,然后回车浏览器就可以跳转到百度首页了,那么这个过程底层的步骤是怎么实现的呢?这就涉及到http的请求与响应了:2、我们访问网站时,大部分场景下都是基于Browser/Server模式(浏览器/服务器模式),简称BS架构,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取网页页面,并把网页页面展示给用户即可,此传输过程遵循Http协议。
2022-08-21 23:41:05
322
原创 当添加一个键值对元素时,HashMap发生了什么
当我们调用HashMap的put()方法时:首先判断当前table是否为空,若为空,则初始化,若不为空,则根据key的hash计算得到插入位置(所以该key所在的类一定要正确覆写hashcode()和equals()方法),再判断该位置是否有元素,若无元素,则直接插入,若有元素,则判断原位置数据的hash值与待插入数据的hash值是否相同,若相同,则继续比较值,若值不同,则创建一个新的Node节点,并使用尾插法将其插入到原数据的节点后面形成链表,若值相同,则用待插数据的值覆盖原数据的值,并返回原数据的值;.
2022-08-15 02:09:34
126
原创 基于ftp协议的文件上传与下载
依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。我们在这里在一台电脑上安装easyftp工具作为服务器,一个java程序作为客户端来演示文件的上传与下载。和HTTP相比,FTP面向的直接是服务器的文件系统,并且具有维持状态的特点,在文件传输管理上,FTP更胜一筹。4.可以看到在我们的ftp服务器还有一张名为'gd'的图片,我们可以通过下面的程序将他下载到本机的某个文件目录下。2.上传文件到服务器的某个文件目录下。...
2022-08-07 22:28:22
545
原创 常见的对称式加密与非对称式加密算法
对称式加密对称加密算法就是传统的用一个密码进行加密和解密,通信发送方使用这种算法加密数据,接收方也用同样的算法解密数据.因此对称式加密本身不是安全的。从程序的角度看,所谓加密,就是这样一个函数它接收密码和明文,然后输出密文而解密则相反,它接收密码和密文,然后输出明文算法秘钥长度工作模式填充模式AES56/64DESIDEA128ECB密钥长度直接决定加密强度,而工作模式和填充模式可以看成是对称加密算法的参数和格式选择。1.加密和解密过程不同。...
2022-07-24 23:14:23
2738
1
原创 常见哈希算法总结实现:
哈希算法又称摘要算法,它的作用是对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的为了验证原始数据是否被篡改。哈希算法最重要的特点就是●相同的输入一定得到相同的输出;●不同的输入大概率得到不同的输出(基本可忽略)●单向性给定一个输入数,容易计算出它的哈希值,但是已知一个哈希值根据同样的算法不能得到原输入数我们可以看到①只要输入信息一致,结果肯定是完全一样②如果输入有哪怕一点点小小的不一样,结果会完全不同,并且完全无法预测。...
2022-07-21 20:00:26
1060
原创 Java实现TCP编程
首先我们先来了解什么是TCP1.TCP协议(传输控制协议)是面向连接的可靠的协议,是允许系统通过Internet进行通信的标准,它定义了如何建立和维护应用程序可以通过其交换数据的网络对话;保证了数据的传递,并保证数据包的发送顺序与发送数据包的顺序相同,是OSI层中的传输层协议,通过传输和确保通过支持网络和Internet传递消息来在远程计算机之间创建连接。2.在明白TCP协议这个概念的前提下我们要想实现用Java程序来进行TCP编程其实不难,只需要我们理清相关概念。...
2022-07-20 20:01:25
9273
原创 Java中解析Excel文件
步入正题,我们在Java应用程序的开发过程中碰到Excel类型的文件时(*.xlsx),我们需要对其进行解析(导入)或生成(导出)。 目前,在Java技术生态圈中,可以进行Excel文件处理的主流技术包括: Apache POI、JXL、Alibaba EasyExcel等。其中Apache POI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文件数据量不大的应用场景; Alibaba EasyExcel采用逐行读取的解析模式,将每一行的解
2022-07-13 20:11:12
9960
7
原创 Java中ArrayList扩容机制源码解析(JDK8.0)
ArrayList作为List接口的实现类可以用来存储有序的、可重复的数据;ArrayList线程不安全、效率高,底层使用Object类型的数组存储,对于只是访问而不需要频繁插入删除的数据集来说,一般使用ArrayList来存储; 我们知道创建一个数组会在内存中会开辟一组连续的内存空间,且一旦创建后数组大小不可改变,除非指向新的内存空间,那当我们创建一个ArrayList并向其中添加元素时底层数组的容量机制是怎样变化的呢? 1.我们首先进入ArrayList类的源码会看到有6个成
2022-07-10 18:55:06
291
原创 String类不同实例化方式的对比
首先我们需要清楚字符串类型的特性:不可变性然后通过三张ppt浅浅了解一下String不同实例化方式的字段存储情况吧:
2022-06-28 13:24:27
114
原创 FileInputStream与BufferedInputStream有哪些区别?
首先我们需要清楚:FileInputStream是字节流,BufferedInputStream是字节缓冲流;FileInputStream继承自抽象类InputStream,BufferedInputStream又继承了FileInputStream。它们的区别:1、FileInputStream的构造方法需要指定一个文件对象或文件路径,然后直接对此文件进行InputStream操作,当读取到某个位置时要做一些其他操作时(接收文件的一部分字节并处理),此时输入流在什...
2022-05-21 15:04:32
512
原创 Java用栈模拟队列
首先我们需要清楚:栈,是一种后进先出的数据结构,只能我们从栈顶(top)往栈中压入(push)元素,也只能从栈顶(top)往外弹出元素,所以最后进去的必须最早弹出(pop):而队列, 是一种先进先出的线性表结构,一般来说,它只允许在集合的前端进行删除操作,而在集合的后端进行插入操作:清楚了栈和队列的思想, 那我们如果想要定义一个底层用栈来实现的队列应该怎么做呢?很明显我们需要两个栈来完成,其中一个栈(我们命名为in)...
2022-05-13 21:02:39
202
原创 Java实现密勒编码
首先你得需要明白密勒编码的规则为:对于原始的符号“1”,用码元起始不跳而中间跳变来表示,即用10或01表示;对于原始符号“0”,则分成单个“0”还是连续的“0”予以不同的处理,单个“0”时,保持“0”前的电平不变,即在码元边界处电平不跳变,在码元中间点电平也不跳变;对于两个连续的“0”,则使两个连续的“0”的边界处发生电平跳变。密勒码的编码规则如图所示:朴实无华的代码分为原始数据向曼彻斯特编码的转换和转化为密勒编码两部分:public class Mcst_Test { public s
2022-05-12 23:23:51
4133
2
原创 Java中List、Set、Map、Queue和Stack栈集合的遍历
Java中List、Set、Map、Queue和Stack栈集合的遍历方式
2022-05-10 18:07:43
2056
原创 蓝桥杯Java:密码发生器
今天看到一个很有意思的题目:把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。 变换的过程如下:第一步 把字符串6个字符一组进行分拆。例如: wangximing 则变为 wangxi ming第二步 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字。例如: 上面的例子,则得出 228 202 220 206 120 105 第三步. 再把每个数字“缩位”...
2022-04-09 15:16:39
977
原创 Java中的String类、StringBuilder类和StringBuffer类
首先String类区别于其他两个的一个最重要也是本质的一个特征为-字符串不可不变,这是因为字符串在String内部是通过一个char[]数组表示的:什么意思呢?比如说我们相对一个Srting类型的字符串做拼接处理可以直接用+l来拼接String s = "";for (int i = 0; i < 1000; i++) { s = s + "," + i;}执行完这个循环后我们打印s,虽然可以得到最终拼接的“0,1,2...999”这个字符串,但是前面的从"...
2022-02-24 19:29:13
332
原创 字符串常见方法总结: 构造方法、静态方法、 其它方法
1、 字符串的创建首先,我们需要明确在Java中,String是一个引用类型,它本身也是一个class类。在一个Java程序中,我们一般通过这几种方式来定义一个字符串:public static void main(String[] args){ String str1 = "我创建了一个字符串"; String str2 = new String("我又创建了一个字符串"); String str3 = new String(new ch...
2022-02-21 19:07:22
553
原创 简单理解Java中的“Abstract 抽象类“和“Interface 接口“
首先我们需要知道"Abstract 抽象类"(abstract class)和"Interface 接口"(interface)是支持抽象类定义的两种机制.1、Abstract 抽象类那么在Java中什么是抽象类呢?在Java中由于多态的存在,一个类可以作为父类被多个子类继承,例如:从Person父类派生的Student子类和Teacher子类都可以覆写run()方法。class Person { public void run() { … }}...
2022-02-20 18:45:46
335
原创 Java中的“方法重写“和“方法重载“
1、方法的重载在一个类中,我们可以定义多个方法。如果有一系列方法,它们的功能都是类似的,只有参数有所不同,JavaOOP的语法允许把这一组方法名定义为同名方法。例如,在Hello类中,定义多个hello()方法:class Hello { public void hello() { System.out.println("Hello, world!"); } public void hello(String name) { S...
2022-02-16 19:29:10
1467
原创 Java中“==”和equals的区别
首先我们需要明确在java中有两种类型分别是值类型(基本数据类型)和引用该类型1、==在基本数据类型中,==比较的就是两个比较对象的值是否相等而在引用数据类型中
2022-02-14 19:47:10
308
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人