- 博客(30)
- 收藏
- 关注
原创 TCP协议的三次握手及其原因
TCP协议的三次握手,以及TCP协议必须是三次握手的原因:建立tcp连接的前两次握手,一个是客户端向服务器发出建立连接的请求,另一次是服务器向客户端确认收到这个请求,这两次只能证明客户端与服务器之间的网络是通畅的,最后一次握手是为了让客户端确认收到服务器发送的数据,避免服务器等待造成资源浪费 。如果过于频繁会导致服务器停止响应。
2022-09-28 16:38:27 4615 2
原创 ClassLoder类加载机制
是由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并产生的,编译器收集的顺序由语句在源文件中出现的顺序决定。所以,静态语句块只能访问到定义在它之前的类变量,定义在它之后的类变量只能赋值,不能访问。该模型要求除了顶层的启动类加载器外,其它的类加载器都要有自己的父类加载器(注:应该注意到,实例化不是类加载的一个过程,类加载发生在所有实例化操作之前,并且类加载只进行一次,实例化可以进行多次。一个类加载器首先先将请求发送到父类的加载器,只有当父类的加载器无法完成才尝试自己完成。
2022-10-19 23:07:13 649
原创 JMM内存模型:创建对象在堆区如何分配内存
对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为每一个new操作去写对应的delete/free操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序把内存控制权利交给JVM虚拟机。一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。
2022-09-18 23:24:39 211 1
原创 CopyOnWriteArrayList源码分析
1.这样做的好处:实现对集合容器写入操作时的线程安全,但同时并不影响进行并发的读取操作。所以容器也是一种读写分离的思想。从JDK1.5开始Java并发包里提供了两个使用机制实现的并发集合容器,它们是和。相当于线程安全的ArrayList,内部存储结构采用Object[]数组,线程安全使用实现,允许多个线程并发读取,但只能有一个线程写入。
2022-09-18 17:16:58 150
原创 JavaEE——Session会话追踪的实现机制篇
一、引言一、引言:在Web应用程序中,我们经常要跟踪用户身份。例如:当一个用户登录成功后,如果他继续访问其他页面,Web 程序如何才能识别出该用户身份?当一个用户在操作自己的购物车时,Web 程序如何才能识别出该用户身份?:因为HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。
2022-08-25 12:33:24 393 2
原创 JavaEE—— Servlet生命周期篇
Servlet的生命周期的整个生命周期一、Servlet基础一、Servlet基础1. BS架构首先,我们先介绍一下BS架构。当我们访问网站或者使用App时,大部分场景下都是,它的特点是,户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web页面,并把Web页面展示给用户即可。Web页面具有极强的交互性。于Web页面是用HTML编写的,而HTML具备超强的表现力,并且,服务器端升级后,客户端无需任何部署就可以使用到新的版本,因此,BS架构升级非常容易。2. HTTP协议。
2022-08-21 19:13:59 421
原创 当添加一个键值对元素时,HashMap发生了什么?
HashMap内部数据结构使用数组+链表+红黑树进行存储。数组类型为Node[], 每个 Node都保存了某个KV键值对元素的key、value 、hash 、next 等值。于next的存在,所以每个Node对象都是一个单向链表中的组成节点。如图中代码所示:HashMap的底层采用的存储方式:数组+链表+红黑树,当新添加一个键值对元素时,通过该元素的key的hash 值,计算该元素在数组中应该保存的下标位置。...
2022-08-14 21:07:57 226
原创 对称加密算法(AES加密)以及对称算法与非对称算法的对比
主要概括什么是对称加密算法,使用AES的ECB工作模式和CBC工作模式对数据进行加密与解密。以及对称加密算法与非对称加密算法的对比
2022-07-20 19:12:10 2993
原创 FileInputStream和BufferdInputStream的区别
1.从结构上:FileInputStream是字节输入流InputStream抽象类的一个实现类。BufferdInputStream是缓冲输入流,它继承于FilterInputStream。2.从读取方式上:FileInputStream每次会到磁盘上读取数据。BufferdInputStream通过read()读取输入流的数据时,BufferdInputStream会将该输入流的数据分批的填到缓冲区中,每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区。...
2022-05-17 23:03:21 767 1
原创 List、Set、Map、Queue、Deque、Stack 遍历方式总结
1.List(一共两种遍历方法)://方式一List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); for(int i =0; i < list.size(); i++){ System.out.println(list.get
2022-05-10 12:33:54 113
原创 String,StringBuilder和StringBuffer的异同点;StringBuilder的常用方法
相同点:StringBuilder和StringBuffer都是可变的字符串 不同点:①String的字符串不可变②StringBuilder的方法没有使用synchronized关键字,所以它的方法线程不安全,但性能好③StringBuffer使用了synchronized关键字,所以线程安全,但性能差它的常用的方法:使用方法前先要进行实例化:StringBuilder sb = new StringBuilder();...
2022-02-21 17:27:54 366
原创 字符串常见的方法总结:方法的作用、参数值、返回值(构造方法可省略)
一.构造方法//创建一个不含有任何内容的空白字符串对象public String(){}//根据传入的字符数组的内容,创建字符串对象public String(char[] ch){}//根据传入的字符串内容,创建字符串对象public String(String origianl){}//直接赋值的方式创建字符串对象例:String s = "abc";二.静态方法1.public static String toString(数组):将传入的参数数
2022-02-20 19:41:11 2809 1
原创 static关键字
实例字段在每个实例中都有自己独有的“空间”,static关键字修饰的静态字段拥有一个共享的“空间”定义静态成员变量:public static int result;定义静态方法:public static void text() {}//静态方法中允许仅访问静态的成员变量,也允许访问该类中的其他静态方法,但是不允许访问普通方法普通和静态成员变量的访问的对比:...
2022-02-17 12:35:14 168
原创 重载 与 重写(覆盖) 的区别
重载(overload)与重写(override)1、实现:重载实现在一个类中;重写实现在一个父类的子类中。2、形式上:重载要求方法名必须相同,参数(个数,类型,顺序)不完全相同;重写要求方法名和参数(个数,类型)必须相同。3、访问修饰符:重载可以有不同的访问修饰符;重写的访问修饰符的限制一定要大于被重写方法的访问修饰符。...
2022-02-16 18:00:51 797
原创 抽象类和接口的区别
abstract class interface 继承 只能extends继承一个class 可以implements多个interface接口并且接口之间直接允许多重extends 字段 可以定义实力字段 不能定义实力字段 抽象方法 可以定义抽象方法 可以定义抽象方法 非抽象方法 可以定义非抽象方法 可以定义default方法 构造方法 可以有构造方法 不允许有构造方法 访问修饰符 可以使用任意访问...
2022-02-16 17:33:57 133
原创 Abstract抽象类
1.没有方法体2.使用abstract关键字修饰3."抽象方法"必须在"抽象类"中4.抽象类不允许实例化5.子类继承抽象父类时,“必须”重写父类的抽象方法。(除非子类也是抽象类,可以不重写)...
2022-02-16 11:51:49 233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人