自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Autowired如何实现自动注入?

BeanPostProcessor有两个方法,和。它们分别在任何bean初始化回调之前或之后执行(例如InitializingBean的afterPropertiesSet方法或自定义init-method方法之前或者之后), 在这个时候该bean的属性值已经填充完成了,并且我们返回的bean实例可能已经是原始实例的包装类型了。例如返回一个。

2022-10-24 21:51:41 2423 1

原创 TCP协议的拥塞控制

当过多的主机发送了太多数据或者发送数据太快,以至于网络无法处理。造成阻塞。拥塞控制就是为了防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载。拥塞造成的表现:1. 分组丢失(路由器缓存溢出)2. 分组延迟过大(在路由器缓存中排队)为解决上述出现的问题引入了拥塞控制的四个算法来控制发送方的速率从而进行拥塞控制。

2022-10-08 19:45:36 766

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

可通信后:浏览器会向服务器发送一个HTTP数据包,由浏览器发送的HTTP数据包首先会进入传输层,在传输层,将数据包加上TCP首部通过TCP协议进行传送到服务器的传输层,接着传送至服务器的应用层,应用层通过解析拿到数据并进行处理,处理之后同样会发送一个HTTP数据包响应给浏览器,在传输期间同样会从传输层传送数据,浏览器接收到服务器响应的内容后,会对响应的内容进行解析,将内容通过HTML返回给浏览器从而在浏览器上显示内容。建立连接后,浏览器和客户端就可以相互通信了。

2022-09-22 19:06:47 256

原创 TCP与UDP的区别?

TCP:面向连接、可靠的传输层协议,UDP无连接、不可靠的传输层协议

2022-09-22 18:39:44 629

原创 CopyOnWriteArrayList源码分析

CopyOnWriteArrayList(Copy-On-Write: 写入时复制)是一个线程安全的ArrayList,对其进行的修改操作都是先加锁然后在底层的一个复制数组上进行。需要拷贝原数据,数据较大的时候容易引起频繁Full GC;写和读在不同的数组上,读取的是老数组的数据(弱一致性问题)经常被用于"读多写少"的并发场景,因为读取的时候不需要加锁,性能较好。读写分离,在使用迭代器迭代的时候不会抛出异常。

2022-09-18 21:54:17 435

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

我们都知道对象创建后,会被存入堆区,那么在堆区中是如何分配内存的呢?再了解对象在堆区中是如何分配内存之前,我们先来了解一下堆区(heap),堆是JVM管理的内存中最大的一块区域,是被所有线程共享的一块区域,堆区被划分为新生代和老年代,新生代占总内存的三分之一,其中又被划分为两个区域eden区和survivor区,eden区占十分之二,survival区占十分之八。老年代占总内存的三分之二。 当创建一个对象后,会先判断eden区是否被填满,若没有填满,直接存放在eden区,若填满则会触发新生代GC(

2022-09-18 13:47:37 168

原创 多线程常见面试题总结

线程池相当于一个容器,里面存放若干个线程,对若干个线程进行管理维护,在创建线程池的时候需要对线程池进行参数配置,常用的参数有核心线程数、最大线程数、非核心线程存活时间、工作队列、拒绝策略等(单位,线程创建工厂),核心线程数指的是线程池里可维护的最小线程数量,最大线程数指线程池允许创建的最大线程数量、非核心线程存活时间指的是一个可被回收的线程空闲时间大于非核心线程存时间就会被回收,工作队列用来存储等待执行的任务,拒绝策略当线程池内线程耗尽,并且工作队列已经满,提交新的执行任务,将使用拒绝策略进行处理。

2022-09-15 16:48:40 565

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

首先, HTTP请求是无状态的,通俗点说,就是你打开一个网页,和打开下一个网页之间,没有任何关系, 数据不会保存共用的。其次, 会话,就是人的对话, 一次会话指从开始聊天到聊天结束, 在这里就是指,你进入一个网站一直访问浏览,直接到你退出这个网站,或者关浏览器, 这是一次会话, 会话跟踪, 就是在你多次访问一个网站之间要保存数据, 多次请求要保存共有的数据,就叫会话跟踪了。

2022-08-24 13:59:05 1008

原创 Servlet生命周期

Servlet(Server Applet是Java Servlet的简称,翻译过来就是服务程序。是由sun公司提供的一门用于开发动态Web资源的技术。简单的讲,Servlet就是运行在服务器上的一个小程序,用来处理服务器接收到的请求。比如一般的网页程序,是由我们通过浏览器来访问实现的,在这个过程中,我们的浏览器发送访问请求,服务器接收到请求,并对浏览器的请求做出相应的处理,这就是我们熟悉的B/S模型(浏览器—服务器模型)。而Servlet就是对请求做出处理的组件,运行于支持java的应用服务器中。

2022-08-21 10:43:24 1002

原创 MyBatis框架学习过程中遇到的问题总结

出现此错误的主要原因是对Mybatis的主配置文件以及XML映射文件之间的配置不熟悉,在初学时,往往会忽略映射文件在主配置文件中的配置。:解决该问题的方案是要深刻理解并熟悉Mybatis的配置文件与映射文件之间的关系,在Mybatis框架的使用中,尽可能的去避免由于配置产生的错误。在映射器中出现了相同的方法id,出现了相同insertOne当Mybatis加载第二个insertOne时,会发现Mapped集合中已经存在该方法,因此会产生错误。.........

2022-08-15 18:13:12 713

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

在了解添加一个键值对元素,HashMap会发生什么之前我们先来了解一下HashMap的存储结构:HashMap内部数据结构使用的方式进行存储。数组类型为Node[ ],每个Node都保存了某个KV键值对元素的key、value、hash、next等值,由于next的存在,所以每个Node对象都是一个中的组成结点。...

2022-08-14 09:46:54 190

原创 Java反射技术

简单来说,反射机制指的是程序在运行时能够获取自身的信息。附:在WCF或者WebService的开发过程中,我们在客户端添加服务引用的时候,在客户程序中会添加一些额外的类,在客户端生成的类扮演着代理主题角色,我们客户端也是直接调用这些代理角色来访问远程服务提供的操作。在项目中配置Mybatis时,我们仅创建了映射器接口映射文件,并未创建映射器接口的实现类,但当我们使用Sqlsesion的getMapper()方法时,Mybatis却自动帮我们实现了映射器接口的实现类,从而可以使用映射器接口中的方法。...

2022-08-11 20:55:05 353

原创 String为什么是不可变的?

但是这并不代表char value[ ]数组中的内容不可变,我们依旧可以通过数组下标来修改value数组,从此看来在源代码中String不可变的主要原因是存放数据的char[ ]数组被private修饰,我们从外部无法去访问到char[ ],并且String内部本身也没有向我们提供修改char value[ ]的API, 从而无法对字符串内容进行修改。在此过程中,我们通过反射的技术获取了String类中的value数组,通过数组下标修改了其内容,但字符串s的引用一直未发生改变。......

2022-08-09 10:18:54 1255

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

FTP协议建立在TCP协议之上,是进行文件传输服务的常用协议,采用C/S模式,是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。

2022-08-06 18:15:02 1648

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

非对称加密算法使用一组密钥对进行对文件加密解密,也就是说加密和解密使用的不是相同的密钥,当我们想让A向B发送加密文件时,A首先需要将自己的公钥发送给B,B使用A的公钥对文件进行加密,随后将加密文件发送给A,A可以通过自己私钥对文件进行解密。例如,我们常用的WinZIP和WinRAR对压缩包的加密和解密,就是使用对称加密算法。解密时我们首先得拿到他的IV字节内容,根据IV字节内容恢复IV,同样在初始化密钥时将IV设置进去。2、对称加密解密的速度比较快,非对称加密和解密花费的时间长、速度相对较慢。...

2022-07-21 20:26:20 1348 2

原创 常见哈希算法总结

哈希算法(Hash)又称摘要算法(Digest),它是将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值(散列值)。哈希碰撞哈希是将不同的输入映射成独一无二的、固定长度的值。哈希碰撞是指两个不同的输入得到了同一个哈希值,就说明发生了"哈希碰撞"。...

2022-07-21 19:57:36 2060 3

原创 网络编程-HTTP编程

HTTP是基于TCP处于应用层的一种协议,与传输层协议不同,它关注的不是像TCP那样的可靠传输,而是站在应用的角度,对传输的信息来具体的使用。HTTP广泛应用于手机APP和浏览器之中。

2022-07-19 19:30:04 1634 5

原创 网络编程-Java Email

电子邮件是一种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。电子邮件可以是文字、图像、声音等多种形式。同时,用户可以得到大量免费的新闻、专题邮件,并轻松实现轻松的信息搜索。电子邮件的存在极大地方便了人与人之间的沟通与交流,促进了社会的发展。要想在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。SMTP服务器地址。...

2022-07-17 13:57:52 1446 5

原创 网络编程-TCP

首先在网络协议中TCP协议是一种面向连接、可靠传输、字节流式的协议,而TCP编程又是基于TCP协议实现的,因此在我们进行TCP编程时,我们需要建立一个服务器端和一个客户端,ServerSocket作为服务器端,用来监听指定的端口,当这个端口进行客户端连接时,服务器端进入等待状态,等待客户端连接,而另一个Socket就是我们的客户端,用来连接指定服务器和端口,从而进行连接,实现客户端与服务器端的通信与交互。3.连接到客户端之后,我们就可以获取到客户端的相关信息,并通过输入流读取到客户端的提问。...

2022-07-16 22:11:42 1036 1

原创 Excel文件解析

在应用程序的开发过程中,经常需要使用Excel文件来进行数据的导入或导出。所以,在通过Java语言实现此类需求的时候,往往会面临着Excel文件的解析(导入)或生出(导出)。在Java技术生态圈中,可以进行Excel文件处理的主流技术包括:Apache POI,Alibaba EasyExcel等。今天我们就来分别介绍一下这两种技术如何来进行解析文件和生成文件。Apache POI 是一种免费开源的跨平台的Java API ,在Apache POI 中我们常用的解析文件的类有 HSSF 和 XSSF。

2022-07-13 19:33:27 3075 5

原创 Map接口下的实现类

Map接口下有三个常用的实现类,分别是 HashMap LinkedHashMap TreeMapHashMap是无序的,唯一的,可重复的,并允许使用null值和null键。它是基于哈希表的Map接口的实现,该类的存储结构=数组+链表+红黑树。初始化时他得数组长度为16,它是利用key的hashcode和数组的长度来算数组的下标 ((n-1)&hashcode 这里相当于n%hashcode)从而加入一个新的键值对。只不过第一个运算更加效率,当链表长度大于8时,且数组长度大于64时链表会自动转换为红黑树。H

2022-07-12 20:52:28 1101 5

原创 LinkedList和ArrayList的区别

ArrayList是实现了基于动态数组的数据结构,在进行初始化的时候,如果没有指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会进行扩容(grow),新的数组长度为原来的长度的1.5倍,然后把之前的数据拷贝到新建的数组中。 LinkedList是基于双向循环链表实现的,双向链表包含两个指针的,pre指向前一个节点,next指向后一个节点。...

2022-07-06 19:08:50 721 4

原创 properties文件的读取和写入

什么是properties文件?properties文件是一种属性文件,这种文件以key=value格式存储内容。Java中可以使用Properties类来读取这个文件,使用Propertie类中的getProperty(key)方法就能得到对应的数据。一般properties文件作为一些参数的存储,使得代码更加灵活。Properties文件的读取:普通读取:利用BufferInputStream缓冲输入流进行读取,可以读取到文件的所有内容,但这样读取失去了properties文件的特点。这种文

2022-05-30 20:38:56 579

原创 zip文件的读取和写入

Zip文件的读取ZipInputStream的基本用法:首先要创建一个ZipInputStream,通常是传入一个FileInputStream作为数据源,然后循环调用getNextEntry(),当返回值为null时,表示zip流读取结束。一个ZipEntry表示一个压缩文件或目录,如果是压缩文件,我们就用read()方法进行读取,当返回值为-1时,读取结束。public class Main { public static void main(String[] args) { t

2022-05-30 15:40:31 1499 1

原创 Throw和Throws的区别?

Throw:1,作用在方法体内,表示抛出具体异常,由方法体内的语句处理2,具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行throw一定是抛出了某种具体异常对象3,Throw抛出的异常是指一定会发生这种异常。Throws:1,作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。2,主要的声明这个这个方法会抛出某种类型的异常,让它的使用者知道捕获异常的类型3,Throws抛出的异常是可能会发生,但不一定会发生的异常。...

2022-05-30 14:58:19 219

原创 FileInputStream与BufferedInputStream有哪些区别?

FileInputStream1)FileInputStream概念 FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等2)构造方法 通过打开与File类对象代表的实际文件的路径来创建FileInputStream流对象, 若File类对象的所代表的文件不存在;不是文件是目录;或者其他原因不能打开的话,则会抛出异常FileNotFoundExceptionpublic FileInputStream(File f...

2022-05-21 13:06:59 1454 2

原创 栈模拟队列

队列(Queue)的特点:先进先出 FIFO栈(Stack)的特点:先进后出 FILO要想使用栈来模拟队列,需要使用两个栈空间去存储数据,数据结构如下: 由于栈的特点是先进后出,而队列的特点是先进先出,因此我们需要定义两个栈,栈(in)用来进行入队操作,栈(out)用来进行出队操作。先将需要入队的数据入栈(in),最先进入的数据就存放到了栈底,最后进入的数据存放到了栈顶,要出队就需要将栈(in)里的数据再次入栈(out)从而使得最先入栈(in)的数据在栈(out)里的位置是栈顶,最后入栈...

2022-05-12 12:57:56 386 2

原创 List、Set、Map、Queue、Deque、Stack的遍历方法总结

文章目录一、List 二、Set 三、Map 四、Queue 五、Deque 六、Stack 总结一、遍历List1,使用get(int)方法遍历,由于List的行为和数组几乎完全相同:List内部存放元素是按照元素的先后顺序进行顺序存放的,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始public class Main { public static void main(String[] args) { L...

2022-05-10 23:03:34 1115

原创 Java缓存池

Integer缓存池(-127-128)当我们在使用int的包装类型(Integer)类创建对象时,Java内部给我们提供了Integer缓存池,出现缓存池的目的是为了减少的内存空间浪费,尽可能的节约内存空间。当我们使用Interger创建对象时Integer i1 = 127;Integer i2 = 127; Integer i1 = Integer.valueOf(127);Integer i2 = Integer.valueOf(127);//用上面两个方...

2022-02-21 18:06:36 276

原创 String、StringBuilder、StringBuffer以及它们之间的区别

文章目录一、String类二、StringBuilder类三、StringBuffer类四、三者的区别一、String类字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。常用的集中创建字符串的方法1.String name = "中国加油"! 存在字符串常量池中2.String name= new String("中国加油"); // String 对象创建 开辟新的空间存放字符串...

2022-02-21 17:45:34 402

原创 equals()与==的区别

“equals”用于引用类型的内容比较 而 “==”一般用于基本类型之间的比较 ,equals比较的是引用类型的地址,就用String类型来比较,String类型有自己的缓存池,在缓存池范围内,若输入两个相等的字符串,此时,它并没有开辟新的内存空间,所以用==来比较是相等的 若开辟一个新的内存空间 来存放或是超出了该缓存池的范围 用==来比较便是不相等的,此时只能用equals方法来比较该字符串是否相等。...

2022-02-20 19:31:07 234

原创 字符串常见方法总结

文章目录一、构造方法二、静态方法三、其他方法一、构造方法字符串中有无参构造方法和有参构造方法两种构造方法1、String s1="中国";2、String s2=new String(“中国”);//创建一个对象,指向字符串常量对象。3、String s3=new String(char数组);//将char数组中的存放的每一字符连结起来形成字符串4、String s3=new String(char数组,起始下标,长度);//将char数组中的存放的起始位置起...

2022-02-20 19:23:30 1988

原创 抽象类与接口的区别

抽象类和抽象类中的方法必须用abstract修饰,如果该类里面有抽象方法,则这个类一定是抽象类,抽象方法没有方法体接口是一个规范抽象方法的地方 在接口中的方法都是抽象方法没有方法体 可以不用abstract修饰,接口中也可以存在普通方法 但必须用default修饰,一个类只能继承一个父类但可以实现多个接口...

2022-02-20 18:33:00 171

原创 重载和重写的区别

重载是在同一个类中的具有相同方法名,不同参数(个数,类型,顺序)的方法的定义,构造方法普通方法,抽象方法都可以重载;重写是在子类继承父类的方法重写,在子类重写的方法必须和父类方法完全相同,可以用@override检查是否是重写方法......

2022-02-20 18:31:40 10803 1

空空如也

空空如也

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

TA关注的人

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