自定义博客皮肤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)
  • 收藏
  • 关注

原创 JavaScript常用事件

通过鼠标来触发的事件,常见的鼠标事件有: 键盘事件就是指用户在使用键盘时触发的事件,常见的键盘事件如下: 表单事件是指对表单进行操作时触发的事件,常见的表单事件如下:

2022-11-21 09:18:11 1138 1

原创 SpringBoot自动配置原理及启动流程

EnableAutoConfiguration 注解内部使用 @Import(AutoConfigurationImportSelector.class)来加载配置类;配置文件位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当 SpringBoot 应用启动时,会自动加载这些配置类,初始化Bean;并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean。

2022-11-02 15:09:04 999

原创 @Autowired注解底层是如何实现的

Autowired 是 Spring 提供的注解,默认的注入方式为 byType (按类型自动注入);@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作;通过 @Autowired的使用来消除 set ,get方法。

2022-10-19 21:07:05 1374 1

原创 TCP协议的拥塞控制

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。拥塞控制:为了防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到 所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。

2022-10-08 18:45:40 1122

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

*

2022-09-22 20:49:46 269

原创 TCP与UDP的区别

TCP适用于可靠传输的应用,如:文件、邮件传输;UDP要求通讯速度快,如:音、视频。TCP连接只能是一对一通信;UDP支持一对一,一对多,多对一和多对多的交互通信。TCP首部开销20字节;UDP的首部开销小,只有8个字节。UDP是面向报文的。

2022-09-22 18:44:16 426

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

将生命周期很短的对象放在新生代,将生命周期很长的对象放在老年代,因为在每次GC时,垃圾回收器都会去判断当前对象是否可以被回收,而这些生命周期很长的对象每次都被垃圾回收器扫描,但每次都不回收,故而可以将这些对象放在老年代,并减少对老年代的GC次数,从而将GC的重心放在新生代上。,因为回收一部分对象后,剩余对象占用的内存不连续,也就是碎片化,过于严重的话,当前连续的内存不够新对象存放就会触发GC,这样会提高GC的次数,降低性能,当S0 GC后存活对象转移到S1后存活对象占用的就是连续的内存。

2022-09-18 18:45:42 217

原创 CopyOnWriteArrayList源码分析

CopyOnWriteArrayList是基于技术实现的,适用于读多写少场景下的线程安全的并发容器。读操作永远不会加锁,读读、读写都不会冲突,只有写写需要等待。写操作时,为了不影响其它线程的读取,它会进行一次自我复制,待数据写入完成后再替换array数组。array数组是被volatile修饰的,它被修改后可以被其他线程立刻发现。

2022-09-18 17:42:55 376

原创 MySQL索引

使用这种方式的前提,是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根 据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。20)联合索引 is not null 只要在建立的索引列(不分先后)都会走, in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),或者=一个值;这种情况下,最好的办法是先删除表中的索引,然后插入数据,插入完成后,再创建索引。

2022-09-07 16:18:30 609

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

客户端和服务器通信的过程中,自然而然的会产生一些数据交互。比如,A用户登录了邮箱,那么web服务器该怎么知道C一段时间后的登录状态呢?虽然HttpServletRequest对象和ServletContext对象都可以保存数据,但是不适用于这种情况。当浏览器向ServletB发出请求时,它的登陆操作已经完成了,但是却没有留下任何依据能够证明它已经成功登陆。以至于ServletB对他的登陆状态无法判别,这种情况叫用户状态的丢失。造成这种结果的原因是。...

2022-08-25 18:29:28 413 1

原创 Servlet生命周期

在通过一个 URL 路径发起对一个 Servlet 请求的过程中,其本质是在调用执行 Servlet 实例的 doXX() 方法。该 Servlet 实例创建和使用的过程,被称为Servlet的生命周期。整个生命周期包括:实例 化、初始化、服务、销毁。

2022-08-21 14:51:24 123

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

当添加一个元素(key-value)时,首先计算key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,就形成了链表,同一个链表上的Hash值是相同的,所以说数组存放的是链表。JDK8中,当链表长度大于8时,链表就转换为红黑树,这样又大大提高了查找的效率。...

2022-08-13 17:45:23 158

原创 不可重复读和幻读有什么区别?

不可重复读是指在一个事务内,多次读取同一个数据。在这个事务还没有结束时,另外一个事务也访问了该同一数据。那么,在第一个事务中的两次 读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一 个事务内两次读到的数据是不一样的,因此称为是不可重复读。幻读是指当事务不是独立执行时发生的一种现象。例如:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第 二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一 个事务的用户发

2022-08-08 21:05:17 1637

原创 String为什么用final修饰

在Java程序中String类型是使用最多的,这就牵扯到大量的增删改查,每次增删改差之前其实jvm需要检查一下这个String对象的安全性,就是通过hashcode,当设计成不可变对象时候,就保证了每次增删改查的hashcode的唯一性,也就可以放心的操作。比如,数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名和端口都是以字符串的形式传入。因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子,改变字符串指向的对象的值,造成安全漏洞。......

2022-08-08 20:43:55 100

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

清楚FTP协议的文件传输是基于TCP/IP协议上,TCP协议最主要的点是:客户端与服务器之间是建立连接,实现点对点的传输。所以在文件传输或下载时,先建立连接,再登录验证,然后实现具体的操作过程,最后切记要断开客户端与服务器之间的连接。...

2022-08-07 22:40:27 718

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

对称加密算法就是传统的用一个密码进行加密和解密。例如,我们常用的WinZIP和WinRAR对压缩包的加密和解密,就是使用对称加密算法。从程序的角度看,所谓加密,就是这样一个函数它接收密码和明文,然后输出密文而解密则相反,它接收密码和密文,然后输出明文。......

2022-07-21 19:43:25 2533

原创 编码算法与哈希算法

哈希算法(Hash)又称摘要算法(Digest),它的作用是对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的为了验证原始数据是否被篡改。相同的输入一定得到相同的输出;不同的输入大概率得到不同的输出。两个相同的字符串永远会计算出相同的hashCode,否则基于hashCode定位的HashMap就无法正常工作。这也是为什么当我们自定义一个class时,覆写equals()方法时我们必须正确覆写hashCode()方法。......

2022-07-20 20:44:46 967

原创 Java网络编程——HTTP编程

HTTP就是目前使用最广泛的Web应用程序使用的基础协议,例如,浏览器访问网站,手机App访问后台服务器,都是通过HTTP协议实现的。HTTP是HyperTextTransferProtocol的缩写,翻译为超文本传输协议,它是基于TCP协议之上的一种协议。HTTP请求的格式是固定的,它由HTTPHeader和HTTPBody两部分构成。第一行总是请求方法路径HTTP版本响应的第一行总是HTTP版本响应代码响应说明。...

2022-07-20 19:36:12 560

原创 Java网络编程——Java Email

使用JavaMailAPI发送邮件本质上是一个MUA软件通过SMTP协议发送邮件至MTA服务器;打开调试模式可以看到详细的SMTP交互信息;某些邮件服务商需要开启SMTP,并需要独立的SMTP登录密码。https。

2022-07-17 22:42:27 313 5

原创 Java网络编程——UDP编程

使用UDP协议通信时,服务器和客户端双方无需建立连接;服务器端用DatagramSocket(port)监听端口;客户端使用DatagramSocket.connect()指定远程地址和端口;双方通过receive()和send()读写数据;DatagramSocket没有IO流接口,数据被直接写入byte[]缓冲区。https。...

2022-07-17 22:24:16 2728 2

原创 Java网络编程——TCP编程

服务器端用ServerSocket监听指定端口;客户端使用Socket(InetAddress,port)连接服务器;服务器端用accept()接收连接并返回Socket实例;双方通过Socket打开InputStream/OutputStream读写数据;服务器端通常使用多线程同时处理多个客户端连接,利用线程池可大幅提升效率;flush()方法用于强制输出缓冲区到网络。https。...

2022-07-17 22:12:31 739 2

原创 Excel文件解析与超大Excel文件读写

它分别提供对不同格式文件的解析: 解析Excel文件 2.Sheet(工作簿) 通过 Workbook 来进行工作簿 Sheet 对象的获取或创建 创建工作簿 获取工作簿 获取工作簿的数量 3.Row(数据行) 通过 Sheet 来进行数据行 Row 对象的获取或创建 创建数据行 获取首行下标和尾行下标 根据下标获取指定行 遍历所

2022-07-13 20:11:50 1018

原创 properties文件的读取和写入

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

2022-06-14 08:45:49 1529

原创 ZIP文件的读取和写入

输入流(读取):ZipInputStream是一种FileInputStream流,它可以直接读取Zip压缩包的内容:另一个JarInputstream是从ZipInputStream派生出来的,它增加的主要功能是直接读取jar文件里面的MANIFEST.MF文件。因为本质上jar包就是zip包,只是额外增加了一些固定的描述文件。根据上述继承关系,最终还是回到了Inputstream这个抽象类中。而Java的IO标准库使用Decorator装饰器模式为Inputstream和OutputStream

2022-06-14 08:37:59 1046

原创 栈模拟队列

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

2022-05-29 18:54:54 124

原创 FileInputStream与BufferedInputStream有哪些区别

InputStreamInputStream 是 Java 标准库提供的最基本的输入流,它位于 java.io 这个包里;InputStream 不是一个接口,而是一个抽象类,它是所有输入流的超类;抽象类定义的一个最重要的方法就是 int read() ,这个方法会读取输入流的下一个字节,并返回字节 表示的 int 值( 0~255 )。如果已读到末尾,返回 -1 表示不能继续读取了。FileInputSreamFileInputStream 是 InputStream 的一个子类,实现

2022-05-23 10:36:19 393

原创 List、Set、Map、Queue、Deque、Stack六种集合的遍历方式

List:1.Set:1.Map:1.Queue:1.Deque:1.Stack:1.

2022-05-11 00:57:24 126

原创 static关键字和final关键字

static:1.Static可以修饰内部类、方法、变量、代码块;2.Static修饰的类是静态内部类;3.Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用;4.在static方法中不能使用this或者super键字;5.Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象;6.Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。

2022-05-11 00:44:15 444

原创 抽象类和接口的区别

抽象类:只能extends继承一个抽象类;主要用来抽象类别;可以有具体的方法和属性;可以有构造方法;可以有普通成员变量;可以使用任意访问修饰符;接口:可以implements多个interface接口,并且接口之间直接允许多重extends继承;主要用来抽象功能;只能有抽象方法和不可变常量;不允许有构造方法;没有普通成员变量;只能使用public访问修饰符;...

2022-05-11 00:40:58 88

原创 String、StringBuilder、StringBuffer

1

2022-05-11 00:34:34 81

原创 内部类与静态内部类的区别

静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为

2022-05-11 00:25:13 709

原创 重载和重写的区别

重载:在同一个类中,多个方法的方法名相同,参数不同(类型不同,顺序不同,个数不同),返回值类型相同。重写:子类定义了一个与父类完全相同的方法;在子类的重写方法中,如果要调用父类被覆写的方法,通过super来调用;如果一个父类不允许子类对其某个方法进行覆写,可以把该方法标记为final,用final修饰的方法不能被重写。...

2022-05-11 00:24:13 85

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

SN(序号) 方法描述 1 char charAt(int index) 返回指定索引处的 char 值。 2 int compareTo(Object o) 把这个字符串和另一个对象比较。 3 int compareTo(String anotherString) 按字典顺序比较两个字符串。 4 int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 5 String

2022-05-11 00:22:28 153

原创 ==和equals的区别

==:==”是运算符;比较2个对象的地址;基本类型:比较存储值是否相同,若值相同,则返回true;引用类型:比较指向对象的地址值是否相同,若相同,返回true;Integer.java类中的IntegerCache.java缓存了从-128到127之间的所有的整数对象,比较时超出范围返回false。equals :equals是Object的方法;比较的是2个对象的内容;引用类型:默认情况下,比较内存地址上面的值是否相同。...

2022-05-11 00:19:06 65

空空如也

空空如也

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

TA关注的人

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