自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM 内存模型整理

目录一、前言二、具体介绍1、程序计数器1.1、概念1.2、特点2、Java的虚拟机栈2.1、概念2.2、局部变量表2.3、操作数栈2.4、动态链接2.5、方法的返回地址2.6、附加信息3、本地方法栈(Native栈)3.1、概念4、堆4.1、概念4.2、Java堆细分4.3、分代策略5、方法区(MethodArea)5.1、概念5.2、方法区结构5.3、HotSpot在1.7版本以前和1.7版本,1.7版本后都...

2022-01-14 18:43:42 671

原创 JVM常用调优参数

目录一、具体实例1、-Xms20M2、-Xmx20M3、-verbose:gc4、-Xss128k5、-Xoss128k6、-XX:PermSize=10M7、-XX:MaxPermSize=10M8、-Xnoclassgc9、-XX:+TraceClassLoading10、-XX:+TraceClassUnLoading11、-XX:NewRatio=412、-XX:SurvivorRatio=813、-Xmn20M14、-XX:+Heap

2022-01-14 16:32:23 924

原创 Java如何实现并发的原子性、可见性和有序性

目录一、原子性1、原子性原理2、测试代码二、可见性1、可见性原理2、测试代码2.1、synchronized和lock也能实现可见性2.2、添加volatile关键字也能实现可见性三、有序性1、有序性原理2、测试代码一、原子性1、原子性原理一个操作或者多个操作要么全部执行并且执行的过程不被任何因素打断,要么都不执行。2、测试代码按正常的运行结果来说它应该是20000,但运行结果却并不是,产生的原因是有几个线程点,两个线程都读完了然后进行加一

2022-01-11 18:28:22 800

原创 Java的内存屏障

一、为什么要有内存屏障内存屏障是为了解决因为cpu,高速缓存,主内存出现的时候,导致的可见性和重序性问题。1、原理解释因为计算机的运算任务需要CPU和内存相互配合共同完成,其中CPU负责逻辑计算,内存负责数据存储。但是在真正的实际开发中CPU是要与内存进行交互的,但因为内存和CPU的计算速度是有差距的,因此为了提高CPU的利用效率,现代处理器结构都加入了一层读写速度尽可能接近CPU运算速度的高速缓存来作为内存与CPU之间的缓冲:将运算需要使用的数据复制到缓存中,让CPU运算可以快速进行,计算结束

2022-01-11 16:49:09 3703 1

原创 classfile解析的内容

目录一、前言二、Classfile文件结构解析1、无符号数2、表3、魔术(magic)3.1、每一个class文件的头4个字节,被称为魔数 magicNumber3.2、总结魔术的用处:4、Class文件的版本号(minor_version、major_version)4.1、minor_version(次版本号)4.2、major_version(主版本号)5、常量池(CONSTANT_POOL_COUNT、CONSTANT_POOL)5.1、con..

2022-01-09 16:51:56 621

原创 SpringMVC的国际化

目录一、简介二、配置1、创建资源文件2、配置SpringMVC的配置文件三、创建前端jsp一、简介SpringMVC的国际化是建立在java国际化的基础之上的,SpringMVC 框架的底层国际化与 Java 国际化是一致的,作为一个良好的 MVC 框架,Spring MVC 将 Java 国际化的功能进行了封装和简化,开发者使用起来会更加简单、快捷。二、配置要想使用SpringMVC的国际化肯定是需要配置文件进行配置的。Locale本地化对象,更改locale对象.

2021-09-26 22:22:00 285

原创 SpringMVC实现文件上传与下载

目录一、前言二、上传文件1、创建上传的前端界面2、后台代码的实现三、下载文件1、注意文件下载(为了防止乱码,下载名要转换为ISO-8859-1西欧语言)2、文件展示3、后台代码一、前言在做SpringMVC实现文件上传与下载之前,我们要先了解什么是上传和下载。上传:客户端发送给服务端下载:服务端给客户端响应,响应一个文件流接下来我们正数开始书写上传与下载导入相关的pom.xml依赖 <!-- https://mvnrepository

2021-09-24 21:36:29 575

原创 SpringMVC+Jquery+Ajax实现静态的增删查改

目录一、前言二、资源配置1、SpringMVC.xml配置2、配置web.xml三、过度界面的书写四、对象类的书写及前端界面的准备五、查找所有数据并展示1、书写查找所有功能的接口2、查找功能的实现(包括静态数据添加)3、配置文件实现跳转4、Ajax实现查找界面emplist.jsp5、后端数据实现查找六、删除功能1、先实现删除接口2、完成删除的实现类(以id进行删除)3、前端代码的书写4、后台代码的实现七、增加功能...

2021-09-23 17:47:30 1071

原创 SpringMVC执行过程

目录一、前言二、SpringMVC项目的搭建1、先导入pom.xml的相关依赖2、配置web.xml文件3、在资源文件中配置springMVC.xml,进行构建视图解析器4、构建控制器的类5、创建WEB-INF/views/hello.jsp6、MVC步骤总结三、SpringMVC的执行过程1、浏览器发送请求2、如果请求地址符合控制器url-pattern,该请求就会被前端控制器DispatcherSerblet处理。3、前端控制器会读取SpringMVC的.

2021-09-20 22:12:17 192

原创 Spring事务配置及mybatis整合

目录一、事务配置1、事务的特性2、通过注释实现事务3、通过配置文件实现事务二、Spring整合mybatis1、导入mybatis配置文件2、配置数据库相关的语句3、在pom.xml中添加依赖4、配置Spring的配置文件4、创建业务层Service接口5、创建Service的实现类一、事务配置1、事务的特性在我们进行事务配置之前,我们需要先对事务的特性了解一下,事务的特性(ACID)原子性(A):事务是最小的单位,不可再分一致性(C):.

2021-09-16 23:04:20 456

原创 Spring之AOP及jdbc相关总结

一、AOP中的几个概念1、连接点:类里面那些方法可以被增强,这些方法称为连接点(@pointcut就是连接点)2、切入点:实际被增强的方法,就被称为切入点如execution(* com.DJX.Dao.*.*(..))第一部分*号表示任意返回值第二部分*号com.DJX.Dao.*表示在com.DJX.Dao包下的任何类第三部分*号表示任何类下的任何方法第四部分(..)表示任意参数个数3、通知:所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、

2021-09-15 22:37:48 236

原创 Spring注解相关的使用

目录一、引入外部属性文件配置数据库连接池1、创建外部properties文件2、添加druid的pom依赖3、添加druid.properties4、创建beans.xml二、注解的使用1、非注解的方法2、注解的方法三、依赖注入四、配置注解类一、引入外部属性文件配置数据库连接池1、创建外部properties文件2、添加druid的pom依赖 <!-- https://mvnrepository.com/artifact/co..

2021-09-14 22:49:17 192

原创 浅谈Spring

一、前言在学习Spring框架前,我们肯定要先知道什么是Spring,我们都知道JavaWeb开发基本上需要用到各种框架,而Spring就是比较流行的一种。Spring框架是一个开放源代码的Java EE(就是用于开发B/S的程序 企业级)编程领域的一个轻量级开源框架。且具有很高的凝聚力和吸引力,从而解决了企业应用开发的复杂性。其中的轻量级就是使用最少代码启动框架,然后根据你的需求选择,选择你喜欢的模块使用,并且Spring提供了表示层,服务层,持久层的所有支持。二、Spring的特点1、方便解

2021-09-14 09:21:18 769

原创 指针和引用的区别

一、前言指针:指针是一个变量,该变量存储的是一个地址,指向内存的一个存储单元。引用:跟原来的数据是同一个,只是原来数据的一个别名。指针: 引用: 二、区别1、指针可以有常属性(const),而引用不存在(const)因为引用自身就是常量,不能改变指向。指针对const的用法分为三种:根据const修饰的位置不同,内容也就不同。const int *p =&a;...

2021-09-13 09:07:34 834

原创 jQuery选择器

一、基本选择器1、id选择器简述:可以根据给定的id匹配一个元素。如果选择器中包含特殊字符,可以用两个斜杠转义。代码如下:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>选择器</title> <script src="js/jquery-1.8.3.js"></script>

2021-09-08 08:52:13 137

原创 长连接和短连接

一、前言HTTP的长连接和短连接实际上就是TCP的长连接和短连接。因为HTTP是属于应用层的协议,在传输层使用的是TCP的协议,在网络层采用的是IP协议。IP协议主要解决了网络路由和寻址的问题,TCP协议主要解决如何可靠的实现网络层数据包的传递,并且保证接收顺序与发送顺序一致。从而体现出TCP协议是可靠的、面向连接的协议。二、...

2021-09-06 18:38:36 201

原创 JavaWeb实现文件下载

一、前言我们这里要说的文件下载是包括word文档、Excel表格、PPT、image图片的下载,因为我们是基于JavaWeb实现的,所以web前端的界面是在JSP中实现的,而后台的响应是通过Servlet来实现的。所以我们先简单了解一下Servlet。二、ServletServlet 其实是由tomcat服务器来进行创建的,因为我们实现的是文件下载,所以离不开一个关键词ServletConfig,它是Servlet的配置对象 ,实现GenericServlet接口,它主要可用用来获取Servle

2021-09-05 19:49:21 3191 1

转载 内存溢出及解决方法

内存溢出 (简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。就比如说,你的电脑只有32GB的内存,已经把这32GB的内存用完了,但是还在继续用,就会造成内存溢出。1.java堆内存溢出设置的jvm内存太小,对象所需内存太大,创建对象时分配空间,就会抛出这个异常。解决方法:首先,如果代码没有什么问题的情况下,可以适当调整-Xms和-Xmx两个jvm参数,使用压力测试来调整这两个参数达到最优值。其次,尽量避免大的对象的申

2021-08-17 18:07:17 11535 2

原创 Java中的强引用、软引用、弱引用与虚引用

一、前言今天我们浅谈一下java的四种引用,分别是强引用、软引用、弱引用与序引用。在谈引用之前我们不得不提一下Java的垃圾回收器机制GC,GC算是Java的一大特点,我们都知道c语言是不能自动释放内存的需要程序员去操作的,而Java自带的垃圾回收机制是能够帮助程序员自动释放内存的。所以在了解四种引用之前我们先了解一下GCGC:是Java自带的垃圾回收器,它是运行在独立的,优先级比较低的线程中,时刻都在检测与释放无用的内存,那是如何判断它是否有用,主要用的较多的判断方式就是引用计数。JDK1

2021-08-16 21:45:04 1611

原创 HashMap底层原理

一、前言在了解HashMap底层原理之前,我们要先去了解JDK1.8这个分水岭,JDK1.8以前在JDK1.7版本实现HashMap的方式相对简单,主要是通过数组和链表。而在JDK1.8版本时,便对HashMap底层进行了优化,通过数组+链表+红黑树来进行实现,大大提高了查找效率。二、底层代码为了更好的了解HashMap底层原理我们可以通过底层代码来了解,接下来我为大家分析一下底层代码。public class HashMap<K,V> extends AbstractMap&

2021-08-16 20:11:00 159

原创 深拷贝和浅拷贝

目录一、对象创建(两者方式)1、new创建对象2、clone复制对象二、浅拷贝1、定义2、代码3、浅拷贝总结三、深拷贝1、定义2、代码3、总结一、对象创建(两者方式)在谈深拷贝和浅拷贝之前,我们要先知道深拷贝与浅拷贝主要是针对引用数据的,而非基本数据类型。当我们遇到引用数据类型时,首先想到的就是对象的创建,那Java创建对象的方式有几种呢?答案是:创建对象的方式有两种:1、new来创建对象,2、通过clone来复制对象。接下里我们用点实...

2021-08-10 22:20:18 166

原创 Java值传递和引用传递

目录一、Java的数据类型二、值传递1、定义2、代码展示3、画图展示4、String类型属于值传递三、引用传递1、定义2、代码展示3、总结一、Java的数据类型我们要了解java的值传递和引用传递那么我们必须先引出java的数据类型,那我们接下来说说java的数据类型包括什么?java的数据类型分为两大类:基本数据类型和引用数据类型基本数据类型:4种整数类型:byte、short、int、long2种浮点数类型:float、doubl..

2021-08-09 22:17:37 1036

原创 线程池原理和线程间通信

目录一、线程间的通信1、线程间的通信方式(四种)2、生产者 ---消费者二、线程池1、概念2、线程池图3、ThreadGroup4、代码展示一、线程间的通信1、线程间的通信方式(四种)同步(多个线程通过synchronized关键字这种方式来实现线程间的通信) while轮询的方式 wait/notify机制 管道通信 2、生产者 ---消费者1.在这四种通信方式中,我着重讲解一下wait/notify机制,要想了解他们之间的关系..

2021-08-08 19:20:10 1029

原创 面试题16.06 最小差

一、思路(排序+双指针)分析:两个数据越接近他们的差值的绝对值最小。 首先:对两个数据进行排序,定义一个min变量用来存储最小值其初始值(Integer.MAX_VALUE), 然后两个指针(l,r)分别指向两个数组的首地址。其次:两个数组相减的差值绝对值与min进行比较,两者小的值存入min中。最后:a[l]<a[r],进行...

2021-08-04 22:16:45 105

原创 LeetCode24. 两两交换链表中的节点

一、思路(递归)确定终止条件当遇到null时返回,因为当没有值或者下一个节点没有值的时候就无法进行交换操作。图中内容为递归的过程,因为递归是比较抽象的所以想要真的理解还是需要根据代码自己画图,接下来就是该题的代码。二、代码class Solution { public ListNode swapPairs(ListNode head) { if(head ==null||head.next==null){ return head;...

2021-08-03 21:43:24 50

原创 LeetCode581.最短无序连续子数组

一、思路(排序+遍历)题目分析:左区间是从第一个无序的位置开始计算,右区间是到最后一个无序的位置为止。可以理解为左区间左边、右区间右边都是从小到大的有序数据。首先:开辟一个新的数组,存储原有数组的数据,然后从小到大进行排序。其次:两数组依此比对,记录第一个两个不同的位置(min),在记录一下最后一个不同的位置(max),最后一个不同位置减去第一个不同的位置加一(下标是从0开始计算所以加一操作),公式(max-min+1)。最后:还需要进行判断是否原数组就是有序的,如果是就返回0。二...

2021-08-03 21:12:42 93

原创 LeetCode 349.两个数组的交集

一、思路双指针算法首先:对两个数组进行排序操作,然后开辟集合进行存储。其次:两个指针同时从数组下标0开始,循环遍历直到某一方到达终点结束。遍历途中分三种情况:1、数组1的值小于数组2的值,数组1的指针进行加一操作2、数组2的值小于数组1的值,数组2的指针进行加一操作3、当两者数组值相同时判断集合中是否存在如果存在两个指针同时加1,如果不存在则添加到集合中两个指针同时加一操作。最终:循环从集合取出值存储再数组中set去重操作首先:开辟set集合,通过set对某一...

2021-07-30 19:27:50 271

原创 LeetCode 347.前k个高频元素

一、思路:该题主要用到了堆的思想来解决该问题。并且用到了优先队列用来作为存储。java的优先队列默认的是最小堆。最小堆的定义:根结点的键值是所有堆结点键值中最小者,称为最小堆。首先:需要用键值对来进行存储,键:存储数组的元素,值:存储元素出现的次数其次:1、要考虑优先队列是否满了,没满则直接存入队列,Java底层会进行堆化(最小堆)。 2、如果队列已满则需要与遍历的键对应的值进行比较如果大于我们队列首元素则替换,系统自动进行堆化将最小值换到队列首元素。最终:...

2021-07-30 18:48:55 76

原创 快排算法(单路、双路、三路)

一、基本思想通过一趟排序将待排序记录分隔成独立的两部分,其中左半部分的值比我们选取的数据要小,右半部分比我们选取的数据要大,则可继续对这两部分记录的数据继续进行排序,以达到整个序列有序。时间复杂度:O(nlogn)空间复杂度:O(1)稳定性:不稳定二、单路快速排序1、缺点:我们没有过多考虑等于我们选取数据的情况时的处理。2、目标实现:arr[l~(p-1)]<arr[p]<arr[(p+1)~r]p:是我们选取的数据l~(p-1):表示 l ...

2021-07-26 23:18:39 753

原创 中序表达式运算(Java)

目录一、中序表达式执行过程二、中序表达式的代码三、视频讲解一、中序表达式执行过程二、中序表达式的代码public class InfixCalulator { public static void main(String[] args){ String expression="(8+6*2)/4+5-2"; try { int result = evaluteExpression(expression); Sy..

2021-07-17 10:33:44 547

原创 Java成员变量初始化

目录一、成员变量初始化步骤(三步)二、程序代码三、执行过程1、主函数先进栈空间2、开一个对象空间给对象空间开辟一个地址(地址是随机的)对成员变量初始化(num)3、构造函数进入空间4、针对性初始化过程5、主函数的执行过程一、成员变量初始化步骤(三步)默认初始化 -> 显示初始化(调用super时)->针对性(看构造函数)二、程序代码Demo类public c...

2021-07-12 22:36:46 4166

原创 XML的DOM解析(Java实现)

目录一、DOM定义二、DOM代码实现1、注意:我们应当认识到,DOM一切皆节点。2、XML文件代码3、DOM解析XML的过程三、通用方法用于把所有的xml文件进行解析四、实现XML增加、修改和删除操作 1、增加功能代码​ 2、修改功能代码​3、删除功能代码一、DOM定义DOM:Document Object Model,文档对象模型,DOM解析方式把整个文档看成是一个倒挂的树形结构来进行解析。有助于更好的理...

2021-07-11 19:39:56 1449

原创 双端队列

目录一、双端队列的定义二、双端队列代码实现1、定义节点2、队首入队3、队尾入队4、队首出队5、队尾出队6、输出队列7、主函数8、最终效果展示一、双端队列的定义双端队列(deque,全名double-ended queue)是一种具有队列和栈的性质的数据结构。双端队列的队首和队尾都满足栈先进后出的原则。它队首和队尾都支持入队和出队的操作。双端队列图:二、双端队列代码实现注意:从双端队列图可以看出不管是队头还是队尾都符合栈先进后...

2021-07-10 20:43:26 1507

原创 解决哈希冲突(四种方法)

一、了解哈希表及哈希冲突哈希表:是一种实现关联数组抽象数据类型的数据结构,这种结构可以将关键码映射到给定值。简单来说哈希表(key-value)之间存在一个映射关系,是键值对的关系,一个键对应一个值。哈希冲突:当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。简单来说就是哈希函数算出来的地址被别的元素占用了。二、解决哈希冲突办法1、开放定址法:我们在遇到哈希冲突时,去寻找一个新的空闲的哈希地址。举例:就是当我们去教室上课..

2021-07-09 22:24:02 69094 17

原创 二分算法(整数二分和浮点二分)

一、整数二分说明:我们需要找到一个性质使得区间一分为二,左半部分是不满足这个性质的,右半部分是满足这个性质的。二分就可以找到该性质的边界,既可以是不满足的边界,也可以是满足的边界。二分法可以帮助我们找到蓝色上的褐色点,也可以帮我们找到绿色上的黄色点。二、二分法模板1、找到蓝色的边界点(蓝色上的褐色点)分析:模板://区间[l,r]被划分为[l,mid-1]和[mid,r]使用int BinarySearch(int l,int r){ while(l&l...

2021-07-08 22:57:29 465

原创 简单工厂模式

前言:在我们现实生活中也存在工厂,工厂的出现就是为了提高生产效率,大大缩短了产品的生产周期。同样我们的项目开发过程中也存在工厂的说法。

2021-06-06 16:54:01 90

原创 Java在异常处理中try、catch、finally的执行顺序

通过学习Java的异常处理,知道它是通过try-catch-finally来实现的,那么就有一个疑问?他们的执行顺序是如何的,接下来我将tong'g

2021-06-02 22:51:56 5361 4

原创 Java中的代码执行顺序

Java是面向对象的思想,面向对象的特征之一就是继承,当子类继承父类的时候他们的执行顺序是如何 ,jie'l

2021-05-30 16:47:43 653 4

原创 弹性布局flex

弹性布局flex1.前言:弹性布局又称为flex布局,由W3C推出的一种布局方式,优点体现在简便、完整、响应式地实现各种页面布局。而且已经得到所有主流浏览器的支持,它的出现意在取代“display+float+position”的布局形式,解决“display+float+position”所存在的不能自适应的问题,简而言之就是通过弹性布局可以实现屏幕自适应,不会应为屏幕的变化改变原有的布局。2.学习开始2.1初实现实现弹性布局只需要在外层父容器设置display:flex即可&l

2021-05-23 23:31:06 597

原创 瓢城旅行社网页界面设计(HTML+CSS)

瓢城旅行社网页界面设计(HTML+CSS)效果展示:首页图片

2021-05-08 15:50:58 9998 51

空空如也

空空如也

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

TA关注的人

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