自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 TCP协议的拥塞控制

无论在慢开始阶段还是在拥塞避免阶段,只要发现网络出现阻塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送窗口值的一半,然后把拥塞窗口值cwnd设置为1,执行慢开始算法。把拥塞窗口cwnd设置一个最大报文段的数值,而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个报文段的数值。当发送方连续收到三个重复确认,就会把慢开始门限ssthresh减半,接着把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法,使拥塞窗口可以缓慢地线性增长。

2022-10-08 19:44:09 1472 1

原创 浏览一个网站时的整个过程

首先客户端位置是一台电脑或手机,在打开浏览器以后,输入域名,它首先是由浏览器发送一个DNS解析请求,如果本地缓存服务器中找不到结果,则首先会向服务器查询,服务器里面记录的都是各个域所在服务器的位置,当向服务器请求的时候,服务器会返回服务器的位置信息。当服务器接受请求并且建立连接之后,客户端会通过请求的URL生成HTTP格式的数据包发送给服务器,服务器解析这个HTTP格式的数据包,根据数据包中的内容(请求头,请求体)的内容,解析的结果生成 一个HTTP格式的数据包作为响应发送给浏览器。HTTPS的工作原理。

2022-09-22 20:17:18 248

原创 TCP与UDP的区别

在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开连接用来节约系统资源。因为没有TCP的那些机制,UDP在传输数据时,如果网络质量不好,就会很容易丢包,造成数据的缺失。UDP没有TCP拥有的各种机制,是一个无状态的传输协议,所以传递数据非常快。优点:快,比TCP稍安全。

2022-09-22 19:26:27 389

原创 《创建对象在堆区如何分配内存》

不够则执行FGC(Major GC)即只对老年代进行垃圾收集的GC,回收之后再判断老年代是否空间充足,充足,则分配对象内存;一个对象也不可能永远呆在新生代,在JVM中一个对象从新生代晋升到老年代的阈值默认值是15,可以在Survivor区交换14次之后,晋升至老年代。大部分情况下,对象会在Eden区生成,当Eden区装填满的时候,会触发Young Garbage Collection,即YGC垃圾回收的时候,在Eden区实现清除策略,没有被引用的对象则直接回收。创建一个新对象,在堆中分配内存。

2022-09-18 21:11:24 162

原创 《CopyOnWriteArrayList源码分析》

1.首先CopyOnWriteArrayList内部也是通过数组实现的,在向CopyOnwriteArrayList添加元素时,会复制一个新的数组,写操作会在新数组上进行,读操作在原数组上进行。添加新元素至集合时,会将当前数组Copy复制新数组,并将新元素添加至新数组,最后替换原数组。2.并且,写操作会加锁,防止出现并发写入丢失数据的问题,写操作结束之后会把原数组指向新数组。根据指定下标,从原数组中,Copy复制其他元素至新数组,最后替换原数组。add(E e):添加新元素。remove()方法。

2022-09-18 20:20:16 141

原创 ThreadLocal

key使用弱引用当ThreadLocalMap的key为弱引用回收ThreadLocal时,由于ThreadLocalMap持有ThreadLocal的弱引用,即使没有手动删除,ThreadLocal也会被回收。ThreadLocal内存泄露原因,如何避免内存泄露为程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光,不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露。2、线程间数据隔离3、进行事务操作,用于存储线程事务信息。

2022-09-17 00:12:18 90

原创 【无标题】Java中的锁常见面试题总结

死锁:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续。

2022-09-14 21:03:25 1903

原创 线程的创建方式

程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,可以理解为程序是包含静态代码的文件。例如:浏览器软件、音乐播放器软件等软件的安装目录和文件。进程是程序的一次执行过程,是系统运行程序的基本单位。在Windows系统中,每一个正在执行的exe文件或后台服务,都是一个进程,由操作系统统一管理并分配资源,因此进程是动态的。例如:正在运行中的浏览器就是一个进程,正在运行中的音乐播放器是另一个进程,同理,正在运行中的QQ和WPS等都是进程。操作系统运行一个程序,即是一个进程从创建,运行到消亡的过程。

2022-09-12 17:59:39 128

原创 《Session会话追踪的实现机制》

另外,cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用cookie只能存储一些小量的数据。使用Session时,由于服务器把所有用户的Session都存储在内存中,如果遇到内存不足的情况,就需要把部分不活动的Session序列化到磁盘上,这样会大大降低服务器的运行效率,因此,放入Session的数据不能太大,否则会影响服务器的运行。就是说每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的。

2022-08-23 20:13:41 283

原创 《Servlet生命周期》

3.服务:通过该Servlet的实例,调用service()方法,如果子类没有重写该方法,则调用HttpServlet父类的service()方法,在父类的该方法中进行请求方式的判断,如果是GET请求,则调用doGet方法;整个生命周期包括:实例化,初始化,服务,销毁。如果子类没有重写doXXX()方法,则调用父类的doXXX()方法,在父类的方法实现中,返回一个405状态码的错误页面。5.销毁:服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的destroy()方法。

2022-08-20 17:56:46 206

原创 MyBatis学习过程中所遇到的问题

/insert>

2022-08-16 21:24:30 307

原创 当添加一个键值对元素时,HashMap发生了什么?

每次存储元素(Entry对象)时,根据使用key值进行hash后计算hash值,通过(长度-1)&hash得到这个元素在数组中的位置下标,如果数组该位置上已经存放有其他元素(产生哈希冲突),那么在这个位置上的元素将以链表的形式存放,使用next指向新添加的元素,形成链表;情况1:HashMap中的元素个数超过扩容阈值时,就会进行数组扩容(扩容阈值=数组容量x加载因子).加载因子的默认值为0.75f,数组容量默认为16,当hashMap中元素超过16x0.75的时候,数组就会扩容。...

2022-08-13 23:40:11 139 2

原创 基于FTP协议的文件上传与下载

一,FTP概述1,FTP(File Transfer Protocal,超文本传输协议)是互联网上使用的最广泛的文件传输协议,用于Internet上的控制文件的双向传输。2,FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。3,FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中计算机之间传送文件。二,FTP工作过程1.FTP有控制连接和数据连接,控制连接标准端口为21,用于发送FTP命令信息。数据连接标准端口为20,用于上传,下载数据。2.FTP协议和其他协议不一样的地方就是客

2022-08-07 13:20:00 1072

原创 对称加密算法和非对称加密算法

非对称加密的优点对称加密需要协商密钥,而非对称加密可以安全的公开各自的公钥,在N个人之间通信的时候使用非对称加密只需要N个密钥对,每个人只管理自己的密钥对。Java标准库提供的算法实现并不包括所有的工作模式和所有填充模式,但是通常我们只需要挑选常用的使用就可以了。从DH算法看出,公钥-私钥组成的密钥对是非常有用的加密方式,因为公钥是可以公开的,而私钥是完全保密的,由此奠定了非对称加密的基础。非对称加密加密和解密使用的不是相同的密钥,只有一个公钥-私钥对才能正常加解密。例如,我们常用的WinZIP。...

2022-07-23 17:31:01 318

原创 常见哈希算法以及Hmac算法,BouncyCastle总结

常见哈希算法总结(1)什么是哈希算法?哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输出数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的;为了验证原始数据是否被篡改.哈希算法最重要的特点是:相同的输入一定得到相同的输出;不同的输入大概率得到不同的输出. Java字符串的hashCode()就是一个哈希算法,它的输入是任意字符串,输出是固定的4字节int整数:(2)哈希碰撞概念:两个不同的输入得到了相同的输出。碰撞能不能避免?答案是不能。碰撞是一定会

2022-07-21 23:57:07 2157 6

原创 HTTP编程

我们来看一下浏览器请求访问某个网站发送的HTTP请求-响应。当浏览器希望访问某个网站时,浏览器和网站服务器之间先建立TCP连接,且服务器总是使用80端口和加密端口443,然后,浏览器向服务器发送一个HTTP请求,服务器收到后,返回一个HTTP响应,并且在响应中包含了HTML的网页内容,这样,浏览器解析HTML后就可以给用户显示网页了。因为HTTP协议是一个请求-响应协议,客户端在发送一个HTTP请求后,必须等待服务器响应后,才能发送下一个请求,这样一来,如果某个响应太慢,它就会堵住后面的请求。...

2022-07-18 21:15:24 251

原创 javaEmail邮件传输

不同的是,开启了IMAP后,在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如删除邮件,标记已读等,服务器上的邮件也会做相应的动作。如果需要在HTML邮件中内嵌图片,可以选择在邮件中加入,这样的外部图片链接通常会被邮件客户端过滤,并提示用户显示图片并不安全。更多的需求场景,是需要发送邮件。传统的邮件是如何发送的传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱。...

2022-07-17 22:33:30 702 3

原创 TCP编程及实现图片上传

一个Socket就是由IP地址和端口号(范围是0~65535)组成,可以把Socket简单理解成IP地址加端口号.端口号总是由操作系统分配,它是一个0~65535之间的数字,其中,小于1024的端口属于特权端口,需要管理员权限,大于1024的端口可以由任意用户的应用程序打开.如果ServerSocket监听成功,我们就使用一个无限循环来处理客户端的连接,注意到代码ss.accept()表示每当有新的客户端连接进来后,就会返回一个Socket实例,这个Socket实例就是用来和刚连接的客户端进行通信的。...

2022-07-17 21:56:31 605

原创 Excel文件解析

ApachePOI是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供给Java程序对MicrosoftOffice格式档案进行读写功能的API开源类库。HSSF用于解析旧版本(.xls)Excel文件,由于旧版本的Excel文件只能存在65535行数据,所以目前已经不能常用。AlibabaEasyExcel采用逐行读取的解析模式,将每一行的解析结果以观察者的模式通知处理,所以比较适合数据体量较大的Excel文件解析。XSSF解析Excel文件。加载(解析)Excel文件。...

2022-07-14 19:46:39 602 1

原创 properties文件的读操作和写操作

Properties是用于读写配置文件的集合类,配置文件的格式:键=值,它是map特殊的集合类:可以把输入流和键值对集合连接起来1.读操作作用:用于读取配置文件里的内容(1)创建Properties对象(2)加载指定配置文件(3)使用get(),通过key获取值2.写操作(1)创建Properties对象(2)使用put()方法,添加元素至集合Properties(3)使用store()方法,将k-v存储文件即可读操作通过load()加载配置文件,来获取内容;写操作通过写入键值对至集合类Prop

2022-06-01 15:03:09 447

原创 Zip压缩包的“读操作“和“写操作“

概述ZipInputStream是一种FilterInputStream,它可以直接读取zip包的内容:1.读取zip首先创建一个ZipInputStream,通常是传入一个FileInputStream作为数据源,然后,循环调用getNextEntry(),直接返回null,表示zip流结束。一个ZipEntry表示一个压缩文件或目录,如果是压缩文件,我们就用read()方法不断读取,直到返回-1;2.写入zipZipOutputStream是一种FilterOutputStream,它可以直接写入

2022-06-01 09:37:36 546

原创 FileInputStream与BufferedInputStream有哪些区别

FileInputStream是字节流,BufferedInputStream是字节缓冲流FileInputStream在读取流的时候,一次读取一个字节,即每一次读取都会是一次磁盘I/O操作package demo;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class Demo02 { public

2022-05-18 16:17:56 134 1

原创 栈实现队列

使用栈实现队列的下列操作:push(x):将一个元素放入队列的尾部。pop():从对列首部移除元素。peek():返回对列首部的元素。empty():返回队列是否为空队列特点:先进先出栈的特点:后进先出该题转换为后进先出的元素转换为先进先出,使用两个 栈来进行转换public class Test01 { public static void main(String[] args) { MyQueue<String> queue=new MyQueue&l

2022-05-11 15:18:27 143

原创 HashMap,list,Set,Queue,Deque,Stack的遍历方式

1.HashMap(1)使用for each循环遍历Map实例的keySet()方法返回的set集合,它包含不重复的key集合public class Main{public static void main(String[] args){Map<String,Integer> map=new HashMap<>();map.put("apple",123);map.put("pear",456);map.put("banana",789);for(

2022-05-09 18:12:58 51

原创 Integer常量池

Integer包装类有默认常量缓存池,范围是-128到127;当==比较的数组在这个范围内,就可以直接使用缓存池中的数据,从而节省内存。Integer.valueOf对于-128-127之间的数字,始终返回相同的实例因此==比较恰好为true时,不能以为Java标准库的Integer内部有缓存池就用==比较,必须用equals()方法比较两个Integer. //采用Integer类的缓存池(-128-127) Integer i1x=129; Integer i1y=129; S

2022-02-21 19:46:16 878

原创 String和StringBuilder和StringBuffer的区别以及StringBuilder中常用的方法

string是不可变字符串String类中使用内存数组保存字符串,有final修饰符所以string对象是不可变的。private final char value[];StringBuilder和StringBuffer是可变字符串,都是AbstractStringBulider类的子类在AbstractStringBulider中也是使用字符数组保存字符串所以他是可变的 char[] value;StringBuilder类中的方法没有使用synchronized关键字修饰,所以他的方法都是线.

2022-02-21 18:03:01 145

原创 字符串常见方法总结:方法的作用、参数、返回值(构造方法可省略)

普通方法1.字符串比较(equals)当想要比较两个字符串内容是否相等时,必须使用equals()方法而不能使用==关系运算符public class Main { public static void main(String[] args) { String s1 = "hello"; String s2 = "hello"; System.out.println(s1 == s2); System.out.printl...

2022-02-20 20:13:00 181

原创 ==和equals的区别

==比较基本数据类型的值是否相等;引用数据类型,比较的是他们在堆内存地址是否相等,每重新分配堆内存地址,使用==比较返回false.equals比较的是两个对象的内容是否相等"=="比"equals"运行速度快;...

2022-02-20 18:45:31 160

原创 重载和重写的区别以及抽象类和接口的区别

重载和重写的区别1重载方法重载是指多个方法的方法名相同,但各自的参数不同(类型,顺序,个数)重载方法应该完成类似的功能重载方法返回值类型应该相同实现在一个类中2.重写方法名相同,参数类型个数相同子类返回返回值类型与父类一致实现于子类中抽象类和接口的区别1抽象类有构造方法可以定义变量或者常量只能extends继承一个class抽象方法必须前面加abstract2接口没有构造方法普通方法默认为default只能定义常量可以implements多个接口并且接口之间允许多重继

2022-02-20 18:44:28 105

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除