自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卡多希y的博客

谢谢你的关注

  • 博客(37)
  • 收藏
  • 关注

原创 Spring中@Autowired注解实现原理

Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示,自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。

2022-10-24 20:25:45 974 1

原创 TCP协议的拥塞控制

拥塞避免指的是当每次发送的数据包都是上一次的二倍时,可能使得发送方发送数据包的速率越来越快,从而可能造成网络拥塞,所以我们需要设置一个门限值,当拥塞窗口值大于门限值时,会执行加法增大策略,每次只让窗口值加一,这就是拥塞避免算法。快恢复指的是当执行了快重传后,就意味着发生了超时,则发送方就会执行乘法减小策略,将慢开始门限值降为当前拥塞窗口值的一半,并且将窗口值等于这个新的门限值,随后开始执行拥塞避免,让窗口值增大,这就是快恢复算法。TCP协议的拥塞控制就是为了防止过多的数据涌入到网络中,造成网络超负荷。

2022-10-08 18:59:48 553

原创 TCP与UDP的区别?

⑤TCP协议要求通信可靠,所以一般像文件发送,邮件传输都使用TCP,而UDP追求性能,它一般适用于音频。TCP协议和UDP协议都是传输层下的协议,他们大致有以下五点区别。③TCP是面向字节流传输,而UDP是面向报文传输。①TCP是面向连接的,而UDP是无连接的。②TCP是可靠传输,而UDP是不可靠传输。④TCP传输效率低,而UDP传输效率高。

2022-09-22 18:38:44 815

原创 通过浏览器访问某一个网站的完整过程?

此时需要客户端发送挥手报文(FIN = 1),服务器接收到后会发送一个确认报文,如果有未发送完的数据,接着发送数据,如果数据发送完毕,此时服务器会再发送一个数据包(FIN = 1,ACK = 1)给浏览器,浏览器再发送一个确认数据包给服务器,四次握手结束,这就是一个完整的访问网页的过程。如果说浏览器的connection = Keep-alive,代表本次TCP连接是一个长连接,不会主动释放连接,当传输内容完毕后,需要主动释放连接,得到随机密钥后,通过随机密钥对要传输的内容加密,然后发送给服务器端,

2022-09-22 18:18:53 3064

原创 基于写时复制技术的并发集合———CopyOnWriteArrayList源码分析

CopyOnWriteArrayList作为一种线程安全的集合,它通过加Lock锁来实现线程安全,并且它的写是复制技术是指在对集合进行添加或修改。删除等操作时,不会直接对当前集合进行操作,而是根据原集合进行复制一份出来,然后再对拷贝的集合进行操作,当对新集合写入完毕时,再将原集合的引用指向当前的新集合,从而实现写时复制。CopyOnWriteArrayList内部使用Object[]类型数组存储数据,它允许多个线程并发读取,但在写入时,只能有一个线程操作当前集合。

2022-09-18 19:29:37 439

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

当创建一个新对象时,会将新对象加入新生代的Eden区,如果Eden区放不下,会触发YGC的垃圾回收机制,然后再次判断Eden区能否放下,如果可以放下则分配内存空间,如果放不下则尝试将对象放到老年代中,如果老年代放不下,则触发FGC的垃圾回收机制,然后再次判断老年代能否放下,如果可以放下则分配内存空间,否则抛出错误OOM,而在这个过程中,当YGC执行完成时,Eden区幸存的对象survivor区能否放下,如果放不下则直接移到老年代,如果能放下则会放在幸存区的from或to空间中,并且from和

2022-09-17 17:13:55 318

原创 多线程基础知识总结

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

2022-09-16 18:41:05 343

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

web语言中的会话web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。由于HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,但是一个请求结束时 , 服务器就会忘掉这个会话 , 当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户。

2022-08-24 13:52:42 517

原创 Servlet的生命周期

当我们的浏览器访问服务器时,服务器会对URL进行解析,然后根据URL访问对应的Servlet,以Tomcat为例,如果是第一次访问,Tomcat服务器会创建这个Servlet的实例对象,接着通过Java反射技术来自动调用Servlet的init()、service()等方法,最终,当Tomcat关闭或者重启时,Servlet就会被销毁,这是一个Servlet的完整生命周期。web容器加载Servlet并将其实例化后,其生命周期正式开始。

2022-08-20 15:05:37 767

原创 MyBatis框架使用过程中出现的问题以及解决方案

MyBatis作为一款完全开源的框架,对于原生的JDBC做了一个很好封装,简化了我们对于JDBC的操作,将更多的精力放在注重SQL映射文件上,给程序的维护带来了很大的便利,我们也可以结合数据库自身的特点灵活的控制SQL语句,因此能够实现比Hibernate等全自动ORM框架更高的查询效率,高效的完成复杂查询。...

2022-08-16 20:39:43 1621

原创 MyBatis框架的搭建以及使用教程

标签中添加和属性,来实现该功能

2022-08-16 19:52:48 4880 1

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

所以,每次当我们使用下面这行语句时,都会将key、value存储到Entry对象中,然后将每一个Entry对象都保存在数组中,当发生哈希冲突时,会在发生哈希冲突的数组位置将Entry对象以链表的形式保存,并且当链表长度大于阈值8,数组长度大于64时,会将列表转化为红黑树,减少搜索时间。⑽判断链表长度大于阈值8并且数组长度大于64,如果满足,链表转换为红黑树,如果不满足,数组扩容。⑿如果大于,调用resize()方法,按原数组的长度,扩容一倍。⑸如果存在数据,说明发生哈希冲突,继续判断key是否相等。...

2022-08-13 17:26:07 370

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

在FTP的使用当中,经常会提到两个概念,“下载”和“上传”。下载文件就是从远程主机拷贝文件到自己的计算机中;使用FTP时,必须先登录,在FTP服务器上获得相应的权限后,才能进行上传和下载文件。在进行使用FTP服务器来进行文件传输前,要先对FTP服务器的IP地址,端口,以及用户的权限进行设置。(4)为确保我们的文件能够上传成功,我们在FTP服务器中切换上传目录。最终我们可以看到在FTP服务器设置的文件夹内可以查看到刚才上传的文件。下载和上传类似,同样的是先进行连接、登录、设置文件类型,最后下载。...

2022-08-06 15:32:05 1429

原创 Java反射基础

既然通过Field实例可以拿到指定实例的字段值,那么也可以设置字段的值,设置字段的值通过Field.set(Object,Object)实现的,其中第一个Object参数是指定的实例,第二个参数是待修改的值。当我们拿到一个field字段实例时,我们还可以拿到一个实例对应的该字段的值,例如,对于一个Person实例,我们可以先拿到name字段对应的Field,再获取这个实例的name字段值。既然我们可以通过反射调用Field对象,那么同样的我们也可以通过反射来调用Method类的对象,即方法。...

2022-08-04 19:47:50 561 1

原创 常见的哈希算法总结

Hmac算法就是一种基于密钥的消息认证码算法,它是一种更安全的消息摘要算法,在存储用户的口令时,通过加"盐"的方式可以抵御彩虹表的攻击,而这个"salt"就相当于Hmac算法里的认证码这也是Hmac算法的一个优势,一般情况下,Hmac算法总是和某种哈希算法配合起来使用的,而且输出的长度也和所配合的这种哈希算法长度一致。字符串长度为32的原因是无论你要加密的内容是什么,最后的输出长度都会像上图提到的输出长度一样,像MD5最终的输出长度为16字节,因为我将字节数组转换为了字符串,所以它的长度就变为了32。...

2022-07-21 19:47:54 6811 2

原创 对称式加密与非对称式加密的对比

非对称加密算法使用的是一对密钥,使用公钥加密私钥解密的方法,这就使得在通信初期,要想双方可以通信,必须让A方先发送公钥给B方,B方通过接受的公钥进行加密,再将密文发送给A方,A方再使用私钥进行解密。根据结果可以发现,加解密步骤大致相同,但是要保证双方密钥在交换的过程中保证安全性,一般我们会采用DH算法,也就是密钥交换算法,使用了这种算法可以保证双方的共享密钥一致,并且保证了密钥的安全性。而非对称式加密就是加密和解密使用的是不同的密钥,只有同一对的公钥和私钥才能正常进行加密和解密。4、根据原始内容进行加密。.

2022-07-21 19:15:30 542 1

原创 基于HTTP协议以及TCP协议实现的简单网络爬虫

HTTP(HypeTextTransferProtocol)协议又叫做超文本传输协议,是目前使用最广泛的Web应用程序使用的基础协议,像APP访问后台服务器或者浏览器访问网站,都是通过HTTP协议实现的,它是基于TCP协议之上的一种请求-响应协议。Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似与jQuery的操作方法取出和操作数据。5、通过输入输出流,一边读,一边将内容写到磁盘上。......

2022-07-19 08:56:44 632

原创 基于Java Mail 的简单Java邮件发送

但是与POP3不同的是,开启了IMAP后,你在客户端收取的邮件仍然保留在服务器上,同时所有的操作都会回馈给服务器。假设我们准备使用自己的邮件地址发送邮件,在发送邮件前,我们首先要确定作为MTA的邮件服务器地址和端口号,邮件服务器的地址通常是smtp.***.com,端口号由邮件服务商确定。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式,SMTP协议属于TCP/IP协议簇。在网络上,想要实现邮件功能,必须要有专门的邮件服务器,这些服务器类似于我们生活中的邮局,快递站等等。......

2022-07-16 18:53:57 658 3

原创 基于UDP协议的Java聊天室

而DatagramPacket是用来表示一个数据包的,DatagramPacket只是在首次创建时指定地址,以后所有的包都会通过DatagramSocket发送。UDP协议是无连接、不可靠的,并且它是面向报文的,并不是像TCP一样,面向字节流的。8、客户端实例时候,不需要指定端口,操作系统会指定一个当前未使用的端口,然后调用setSoTime(3000),设定超时时间。在实现Java聊天室之前,我们先了解一下什么是UDP协议,以及使用UDP协议的客户端或服务器端是如何来接收信息或者发送信息的。...

2022-07-16 18:07:27 1778 2

原创 Java中excel文件解析总结以及超大文件读写的分析报告

在系统与系统之间进行数据传递时,经常需要使用Excel文件来进行数据的导入或者导出。因此,在Java语言实现这类需求时,往往会面临着数据的导入(解析)或者导出(生成)。Java中可以用来处理Excel文件的主流技术主要包括Apache POI、JXL、Alibaba的easyExcel等。 APache POI 是用Java编写的免费开源的Java API ,Apache POI 提供对Microsoft Office格式进行读写功能的API。 POI是基于DOM方式进行解析的,它将文件数据一

2022-07-13 19:59:54 1979 4

原创 使用Java解析JSON

JSON全称为Java Script Object NoTation。它作为一种轻量级的数据交换格式,它被广泛应用于各种平台,在两个系统之间交换数据起到不可或缺的作用。JSON具有两种结构:JSON对象和JSON集合。JSON对象为{key:value,key:value,...}的键值对形式,key为对象的属性,value为对应的属性的值。JSON集合为["Java","JSON","Apesource"]的形式,取值方式和所有语言相同,同过索引获取,字段值的类型可以为字符串、数字、数组、对象等等。同时,

2022-07-12 20:02:53 7235 9

原创 Java中HashSet去重的实现原理

HashSet作为Set接口的实现类,它的底层还是基于HashMap来创建的。而HashSet拥有两个特点:1、插入元素的顺序和输出元素顺序与HashSet中的位置不一致。2、HashSet可以保证集合中的元素唯一。这篇文章主要针对HashSet的这个特点来详细讲解HashSet是如何在底层进行去重的。那么HashSet是如何去重的呢?当我们在一个HashSet的对象中添加元素时,首先计算该元素的hashCode是否与HashSet中元素的hashCode相同,如果不相同,则直接添加到HashSet之中;如

2022-07-08 08:03:07 1491 1

原创 Java中ArrayList的扩容机制

ArrayList作为List接口的实现类,它是一种可以根据需要动态增长的数组。在Java中标准的数组都是定长的,当一个数组被创建后,它不能再被修改长度,也就是说我们在创建数组时要确定数组所需的长度。但有时我们需要动态程序中获取数组长度,此时,我们就可以使用ArrayList来存储数据,但是它并不是线程安全的。首先,ArrayList扩容发生在add()方法调用的时候,它是调用ensureCapacityInternal()来扩容的,通过方法calculateCapacity(elementData, mi

2022-06-21 10:39:00 4084 2

原创 Java中的浮点数为什么不精确?

我们都知道Java中的浮点数计算并不精确,需要用BIgDecimal进行精确计算。但是为什么是不精确的?为什么不精确还要使用呢?在计算机的世界中,计算机的数字的存储和运算都是通过二进制进行的,对于十进制数来说,要转换为二进制整数,就要采用“除二取余,逆序排列”(小数采用“乘二取整,顺序排列”)的方法具体做法是:如果我们想要把127转换成二进制,做法如下:而十进制小数转换成二进制小数,又该如何计算呢?十进制小数转换成二进制小数采用”乘2取整,顺序排列”法。具体做法是: 尝试将0.1转成二进制:我们发现,0.1

2022-06-17 17:58:26 887 4

原创 在Java中,如何读取与写入*.properties资源文件

关于在Java中何如读取与写入*.properties文件。

2022-05-31 12:25:20 499

原创 Java IO流:ZIP文件的读取与写入

输入流(读取):ZipInputStream是一种FileInputStream流,它可以直接读取Zip压缩包的内容:┌───────────────────┐│ InputStream │└───────────────────┘ ▲ │┌───────────────────┐│ FilterInputStream │└───────────────────┘ ▲ │┌───────────

2022-05-30 21:25:56 4902 1

原创 FileInputStream & BufferedInputStream之间的区别

InputStream:InputStream 是 Java 标准库提供的基本的输入流。它位于 java.io 包里。 java.io 包提供了所有同步 IO 的功能。要特别注意的一点是, InputStream 并不是一个接口,而是一个抽象类,它是所有输入流的父类,InputSream实现了Closeable接口。FileInputSream是InputStream类的子类,它实现了InputStream中的抽象方法read(),FileInputstream流被称为文件字节输入流,是指以文件字节输入

2022-05-19 15:19:35 346 4

原创 在Java中,队列实现栈 & 栈实现队列基本思路

队列(Queue)和栈(Stack)作为集合中经常使用到的两种集合,它们各自有各自的特点。队列继承自它的上级接口Collection。作为线性表结构,它遵循先进先出、后进后出(FIFO)的基本原则。它只允许在集合的首部进行出队操作,而在集合的尾部进行入栈操作。栈是基于Vector实现的后进先出(LIFO)的栈。它只允许在栈的顶部进行入栈和出栈操作。队列(Queue)的基本操作是:①:把元素添加到队列末尾②:从队列头部取出元素根据这两个操作我们可以通过两个栈来模拟队列的操作(PS:GI

2022-05-12 15:27:41 893 1

原创 List、Set、Map、Queue、Deque、Stack遍历方式小结

List是一种可变有序列表,它的存储结构采用数组存储。在需要遍历时,和数组一样,我们可以利用for循环根据索引配合get(int)方法遍历①:public class Main { public static void main(String[] args) { List<String> list = Arrays.asList("杭州", "北京", "上海", "南京"); for (int i=0; i<list.size(); i

2022-05-12 13:36:02 300

原创 throw 和 throws 有什么区别

不同点:一:位置不同。throws用在函数上,后边跟的是异常类,可以跟多个异常类。throw用在函数内,后面跟的是异常对象。二:功能不同。throws用来声明一个

2022-04-04 12:06:11 16614 2

原创 脑筋急转弯

工人工作七天,可以获得一根金条,现有一根金条被平分成相连的七段,每天需支付一段金条。且金条只允许掰两次,问如何给工人支付?

2022-02-22 18:49:52 176 1

原创 String,StringBuilder,StringBuffer,StringJoiner

java标准库提供了String,StringBuilder,StringBuffer,StringJoiner三个类String类是不可变的对象,而其他三个类是可变的对象首先,由于在String类中的定义存储字符串的char[]数组,它被final关键字修饰,所以说String类是不可变的而其他三个字符串类中char[]数组都没有被定义为final.其次,String类正因为不可变所以无法预分配缓冲区,只能根据最终结果来分配。而其他三类都已经预分配了缓冲区。内存空间为16+字符串的长度接着,S

2022-02-21 18:08:28 423 1

原创 Integer缓存池与String缓存池

Integer类中与String类一样都存在缓存池,但String类型的缓存池"没有限制",所谓没有限制是指,String类型可以产生多个缓存池对象。例如:String str = “ABC”,String s = "Def";等等。只要它不是通过创建对象创建出来的。它都会被存在缓存池中。例如:String str = new String(“123”)。它则不存在于缓存池中。而Integer中的缓存池与String类型类似。若它是通过new关键字创建出的对象。则不存在缓存池中。但Integer类的

2022-02-21 17:29:02 358

原创 字符串常见方法总结:方法的作用、参数、返回值

常见的字符串方法:①.str.charAt(int index):该方法得到指定下标的字符。方法参数为int类型的下标。最终的返回值为char类型字符。测试用例:String str = "abcde";System.out.println(str.charAt(0));// 得到str字符串的第一个值a②.str.str.compareTo(anotherString):该方法比较两个字符串的大小。方法参数为字符串。当str>anotherString 返回一个大于0的数字,如果

2022-02-20 19:45:59 724

原创 abstract类与interface接口的区别

abstract类与interface接口的区别: abstract类:在一个类中的方法被abstract关键字修饰并且这个方法没有方法体,则这个类也必须使用abstract关键字修饰则这个类为抽象类。抽象方法一定存在于抽象类中,但抽象类中不一定存在抽象方法。抽象类中可以存在成员变量(字段),也存在构造方法、非构造方法。且子类在继承抽象类时必须重写抽象类中的所有抽象方法,如果不继承则子类也必须为一个抽象类。且抽象类无法实例化为一个对象。 interface接口:如果一个类中,没有成员变量(...

2022-02-16 19:17:04 473

原创 “==”与equals方法的区别

==”与equals的区别(以String类型为例):“==”作为关系运算符,它存在两种情况,第一:当运算符两边的表达式是通过类型new对象new出来的,它是在比较两边对象的地址。此时,“==”判断值是否相等就会变的不准确。第二:当运算符两边的表达式不是通过类型new对象new出来的,它一般存在于字符串常量池中,此时使用“==”比较的是两个对象的值。.equals是引用类型的一个方法,他不理会两个对象的内存地址,只是简单的比较两个对象的值是否相同。//代码实例// "=="关系运算符S.

2022-02-16 18:07:17 210

原创 Overload(重载)与Override(重写)的区别

Overload(重载)与Override(重写)的区别:重载:在一个类中存在一组方法,他们的方法名相同,但参数的类型、顺序、参数的个数不同的一组不同的方法,(也就是说他们的方法签名不同)他们称为重载。形成重载的方法属于不同的方法重写:在继承关系内,子类如果存在与父类相同的方法,并且他们的方法签名完全一致,则称这个方法为重写方法,形成重写的方法是一个方法。加上@Override注解可以使编译器帮我们检查方法是否正确重写。// 方法重载实例class Room{ // 方法重载...

2022-02-16 18:04:12 242

空空如也

空空如也

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

TA关注的人

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