自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Autowired自动配置的过程

是根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配,当我们根据byName进行自动装配时,就需要使用到@Qualifier注解来手动指定一个beanid来进行装配。@Autowired用在字段上时,表示Spring会对该字段进行匹配赋值,在Spring容器中查找,找到能匹配到该字段的对象,进行赋值,找不到就抛出异常。当容器内存在一个和指定的属性类型相同的bean时,那么将和这个属性自动的进行装配,当存在多个该类型的bean,将会抛出异常。

2022-10-24 20:12:25 805

原创 Tcp协议的拥塞控制

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。首先我们先了解Tcp协议,它是面向连接的,可靠的传输层协议。由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口。拥塞控制:从其字面意思就可以知道,它是为了减少网络拥塞的,TCP主要通过。当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限。

2022-10-08 19:56:39 315

原创 TCP与UDP的区别

应用场景: TCP要求通信可靠,所以一般向邮件传输,发送文件使用TCP;UDP追求性能,不可靠,一般用于音频,视频之类的场景。UDP是用户数据报协议,是传输层的协议,支持无连接,支持一对一、一对多、多对一和多对多的交互通信。(传输数据前,必须建立连接),通过三次握手建立连接,四次挥手来释放连接。是面向字节流的传输协议,具备可靠性传输,流量控制,拥塞控制等功能。TCP:传输控制协议,面向连接。UDP:用户数据报协议,无连接。首部字节:TCP:首部20-60个字节;传输可靠性:TCP:提供可靠的数据传输服务;

2022-09-22 19:39:32 516

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

消息):浏览器生成HTTP格式的请求数据包发送给服务器端,服务器端获取并解析数据包,执行请求,然后生成HTTP格式的响应数据包发送给浏览器,浏览器解析数据包后,将内容呈现给用户。1.域名解析成IP地址:当用户在浏览器输入URL(统一资源定位符)时,浏览器通过DNS域名解析器将URL解析成对应服务器的IP地址,并将此IP地址返回给浏览器。2.与服务器端进行TCP连接(三次握手):用户发起请求后,服务器通过TCP协议进行三次握手,建立起客户端与服务器端的连接。客户端)与 Web 服务器(

2022-09-22 19:00:51 608

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

从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以。如图所示可知,新生代占堆区的三分之一,老年代占堆区的三分之二。这便是我对创建对象在堆区分配内存的理解,希望对大家有所帮助。管理的主要区域,因此堆区也被称作。堆区最容易出现的就是。

2022-09-18 19:22:44 132

原创 CopyOnWriteArrayList部分源码分析

当我们往一个集合容器中写入元素时(添加、修改、删除),并不会直接在集合容器中写入,而是先将当前集合容器进行Copy,复制出一个新的容器,然后新的容器里写入元素,写入操作完成之后,再将原容器的引用指向新的容器。当添加新元素到集合时,将原数组中元素copy到一个新数组中,再将新添加的元素放入新数组中,最后将用新数组替换原数组。//是最后一个复制原数组中除最后一个下标外的所有值。//跳过当前下标将原数组中元素复制到新数组。//创建一个新数组,长度比原数组少一个。//复制原数组中的值到新数组。

2022-09-18 18:00:26 171

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

应用程序中,我们经常要跟踪用户身份。例如:当一个用户登录成功后,如果他继续访问其他页面,请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以。程序如何才能识别出该用户身份?当一个用户在操作自己的购物车时,的形式发送到浏览器,浏览器在后续访问时总是附带此。,这样,服务器就可以识别用户身份。我们可以在浏览器看到服务器发送的。程序如何才能识别出该用户身份?应用程序无法区分收到的两个。协议是一个无状态协议,即。唯一ID识别用户身份。...

2022-08-25 22:53:32 127

原创 Servlet生命周期

WebServlet(urlPatterns = "/hello") //请求路径。服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的。,如果子类没有重写该方法,则调用HttpServlet父类的。实例创建和使用的过程,被称为Servlet的生命周期。方法,在父类的该方法中进行请求方式的判断,如果是。方法,在父类的方法实现中,返回一个。一个Web App是由一个或多个。请求的过程中,其本质是在调用执行。方法,执行初始化的逻辑。方法,则调用子类重写后的。,分别映射不同的路径。

2022-08-21 18:02:58 105

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

并且,数组的长度必须为2”(MUST be a powerof two),因为数组长度为2的n次幂时,可以使用&与位运算,结合hash值,快速计算该元素在数组中的下标位置,提高 HashMap 的使用效率。由干计算机底层进行取模运算时,分为两步,第一步求商,即c=a/b:第二步求余数,即r=a-c*b,这两步包含了除法,乘法和减法运算,所以效率不高,使用位运算,计算结果相同,并且效率高。,数组容量默认为16,当HashMap 中元素个数超过 16x0.75=12的时候,数组就会扩容。...

2022-08-14 21:40:30 163

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

6、上传至FTP服务器使用storeFile("**.jpg", ...);3.通过connect()方法,连接FTP服务器与客户端的连接。5、设置上传文件的类型,使用setFileType()方法。参数1:ftp本地服务器的存储位置(文件名)2、创建文件输出流,便于下载的文件写入本地。参数2:本地输出流(负责下载后写入)2.创建文件输入流,便于读取本地文件。参数2:本地的文件输入流。3、建立FTP服务器的连接。1、创建FTP协议的对象。参数1:服务器指定文件。5、设置下载文件的类型。...

2022-08-07 22:33:23 241

原创 Java加密总结:常见哈希算法总结、对称式加密与非对称式加密的对比

碰撞是一定会出现的,因为输出的字节长度是固定的,string的hashcode()输出是4字节整数,最多只有4294967296种输出,但输入的数据长度是不固定的,有无数种输入。例如小明要加密一个文件发送给小红,他应该首先向小红索取她的公钥,然后,他用小红的公钥加密,把加密文件发送给小红,此文件只能由小红的私钥解开,因为小红的私钥在她自己手里,所以,除了小红,没有任何人能解开此文件。碰撞不可怕,我们担心的不是碰撞,而是碰撞的概率,因为碰撞概率的高低关系到哈希算法的安全性。...

2022-07-21 21:00:04 524 1

原创 基于Java Email的邮件发送

然后我们通过JavaMailAPI连接到SMTP服务器上,连接SMTP服务器时,需要准备一个Properties对象,填入相关信息,最后获取Session实例,如果服务器需要认证,还需传入一个Authenticator对象,并返回指定的用户名和口令。假设我们准备使用自己的邮件地址发送邮件,在发送邮件前,我们首先要确定作为MTA的邮件服务器地址和端口号,邮件服务器的地址通常是smtp.***.com,端口号由邮件服务商确定。电子邮件的发送过程也是类似的,只不过是电子邮件是从用户电脑的邮件软件,例。......

2022-07-17 18:19:56 1919 2

原创 Tcp编程

写入网络时,必须调用flush()方法,如果不调用,客户端和服务器都收不到数据,因为我们是以流的方式写入数据的,并不是一写就发送到网络了。而是先写入内存缓冲区,直到缓冲区满了,才一次发送到网络,这样提高了传输效率,如果缓冲区的数据很少。使用Socket进行网络编程时,本质上就是两个进程之间的网络通信,其中一个充当服务器端,它会主动监听某个指定端口,另一个进程必须充当客户端,它必须主动连接服务器的IP地址和指定端口,如果连接成功,服务器端和客户端就成功建立了一个TCP连接,双方后续就可以随时发送和接收数据。.

2022-07-17 16:24:01 519

原创 Excel文件的解析

创建工作簿和解析时候类似,首先通过createSheet创建工作簿,再在工作簿中通过createRow创建行,再在行里通过createCell创建单元格,通过set方法将内容写入行和单元格,最后通过workbook里的write方法将所写的内容通过输出流写入所输出的路径。在解析时候,需要传入需要解析的Excel文件的路径(因为它是以流的方式传入,所以会出现异常),然后获取Excel文件里的工作簿,再从工作簿中获取行,再从行获取单元格,层层递进,都通过get方法来获取对应的值;...

2022-07-14 21:29:49 714

原创 Properties格式文件的读写

首先,我们得了解什么是Properties文件。Properties是一种配置文件,它继承自Hashtable并且实现了Map接口,所以Properties类的内部是以k-v键值对的方式存储数据的,而且实现了Map接口,因此,存储的数据是无序的。Properties格式文件的读取: 要读取Properties文件,首先要创建输入流,其次创建Properties类的对象,再调用Properties类的load()方法,将Properties属性文件对应的文件输入流,加载至Properties集合对象中。最后根

2022-06-06 18:13:41 478

原创 zip文件的读写

zip文件的读取首先,读取zip文件,我们需要用到ZipinputStream类,它是FilterInputSteram类的子类,具有直接读取zip文件内容的功能。其次,在使用ZipInputStream时,首先应当传入一个FileInputStream作为文件源(因为ZipinputStream属于包装器,它不可以直接对zip文件进行操作)。当创建好ZipInputStream对象后,需要设定一个循环调用 getNextEntry() ,直到返回 null ,表示 zip 流结束。(getNextEntr

2022-06-05 20:01:02 837

原创 栈模拟队列

首先,我们得知道队列和栈存储数据的特点:队列:Queue是一种先进先出(First In First Out)的数据结构,只允许在队首进行删除操作,队尾进行插入操作。栈 : Stack是一种后进先出(Last In First Out)的数据结构,只在栈顶操作。由此可知,队列数据结构和栈正好相反,当用栈模拟队列时就要遵循队列先进先出的特点,因此,我们可以定义两个栈(一个入队栈,一个出队栈)来模拟队列。思路:push过程:将元素push入stack1中即可 pop过程:如...

2022-05-12 17:19:07 275

原创 集合中List, Set, Map, Queue, Deque, Stack的遍历方式总结

总的来说,Collection接口和Map接口是所有集合框架的父接口。Collection接口的子接口包括:Set接口、List接口和Queue接口。1.List接口:List接口的实现类有Arraylist和Linkedlist

2022-05-11 19:13:54 1287 2

原创 String 、StringBuilder 、 StringBuffer的相同点与不同点

String :1.String是被final修饰的类,不能被继承。 2.String底层是通过char类型的数据实现的,并且被final修饰,所以字符串的值创建之后 就不可以被修改,也就是说字符串具有不可变性。 String s = "明天会下雨"; s.concat("吗");//连接字符串 System.out.println(s);//结果:明天会下雨 String st...

2022-02-21 20:09:36 1051

原创 java中重载和重写的区别

重载(Overload)方法重载,就是在类中可以创建多个方法,它们具有相同的方法名,但具有不同的参数和不同的定义。重载时,方法名要相同,参数类型和个数不一样,返回值类型通常是相同的。class Hello { public void hello() { System.out.println("Hello, world!"); } public void hello(String name) { System.out.println("H

2022-02-16 19:56:32 358 1

空空如也

空空如也

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

TA关注的人

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