自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一篇弄懂Java线程池(三大方法、七大参数、四大策略)

目录线程池的特点及其优势创建多线程但是七大参数四种拒绝策略AbortPolicy:CallerRunsPolicy:DiscardOldestPolicy:DiscardPolicy:DiscardOldestPolicy:DiscardPolicy:线程池的特点及其优势线程复用:通过重复利用已创建的线程降低线程创建和销毁造成的消耗控制最大并发数:当任务到达时,任务可以不需要等待线程创建就能立即执行管理线程:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以

2021-05-31 17:44:11 779 1

原创 【搭建】第一个SpringBoot程序

目录前言需求系统要求步骤0、目录结构1、创建Maven工程2、导入依赖3、创建主程序4、编写业务5、测试前言需求浏览器发送 /hello 请求,响应 Hello SpringBoot系统要求Java8及以上Maven3.3及以上步骤0、目录结构1、创建Maven工程2、导入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri

2021-05-26 21:17:30 131

原创 Lambda表达式、函数式接口用法

函数式接口什么是函数式接口只包含一个抽象方法的接口,称为函数式接口可以通过Lambda创建该接口的对象以前用匿名实现类表示的都可以使用Lambda表达式来写Lambda表达式Lambda就是将以前我们写的匿名实现类简化了,下面我通过几段递进的代码演示Lambda的简化过程匿名实现类写法@Testpublic void test() { Runnable run = new Runnable() { @Override public void run(

2021-05-24 19:48:28 315

原创 【GC】垃圾标记阶段的两个算法

垃圾标记阶段:主要是为了判断对象是否存活在堆里存放着几乎所有的 Java 对象实例,在 GC 执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC 才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在 JVM 中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法和可达性分析算法。引用计数算法

2021-05-16 19:10:33 131

原创 【运行时数据区】虚拟机栈、栈的异常、栈的结构

目录栈的基本内容什么是虚拟机栈作用特点栈的异常StackOverflowError:OutofMemoryError:栈的存储结构栈中存储什么栈帧的内部结构每个栈帧中存储:栈的基本内容什么是虚拟机栈Java虚拟机栈,早期也叫Java栈。每个线程在创建的时候都会创建一个虚拟机栈,内部保存一个个的栈帧,对应每一次方法的调用作用主管Java程序的运行,保存方法的局部变量、部分结果,并参与方法的返回和调用特点栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器JVM对栈的直接操作只有两个:出

2021-05-10 15:44:34 189

原创 【SpringMVC】如何接收请求参数?一篇弄懂

在以往的Servlet + JSP项目中,我们使用 req.getParameter(" ") 的方式获取用户提交的参数。那么在SSM项目中如何接收参数呢?在Controller的处理器方法中,我们通过处理器方法的形参可以获得用户提交的参数,处理器方法可以包含以下四种形参,这些形参会在系统调用时由系统自动赋值,我们可以直接使用HttpServletRequestHttpServletResponseHttpSession请求中所携带的请求参数对于接受参数的方式一般分为两种:逐个接收和对象接收

2021-05-07 17:03:20 382

原创 【SpringMVC】一篇搞懂拦截器

目录1、什么是拦截器2、使用步骤3、拦截器的执行时间4、多个拦截器的执行顺序1、什么是拦截器SpringMVC中的Interceptor拦截器是非常重要的,它的主要作用是拦截用户的指定请求,并进行相应的预处理和后处理,其拦截的时间点在“处理器映射器根据用户提交的请求映射除了所要执行的处理器类,并且也找到了要执行处理器类的处理器适配器,在处理器适配器执行持利器之前”。当然,在处理器映射器映射出所要执行的处理器类时,已经将拦截器与持利器组合成为了一个处理器执行立案,并返回给了中央调度器特点​ 拦截器是全

2021-05-03 19:58:13 245

原创 【SpringMVC】SSM框架整合,看这一篇就够了

目录前言步骤0、创建Maven项目1、导入依赖2、web.xml3、创建包结构4、写Spring、SpringMVC、Mybatis配置文件前言SSM整合,即Spring + SpringMVC + Mybatis整合,是当前最为流行的JavaEE开发技术框架,其实SSM整合的实质,仅仅就是将Mybatis整合入Spring,因为SpringMVC原本就是Spring的一本分,不用专门整合整合需要容器第一个容器是SpringMVC容器,负责管理Controller控制器对象第二个容器是Spring

2021-04-29 21:41:31 185 1

原创 【Spring】怎么配置事务?看这一篇就够了

0、什么是事务想象一个场景,A给B转账,A的钱转出去之后发生异常B没有收到钱,A的钱少了B的钱没有多,这不就乱套了吗?所以就引出了事务这个概念:事务是数据库操作最基本的单元,逻辑上的一组操作,这一组操作要么都执行成功,要么都失败事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都 必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些操作 要么都完成,要么都取消,从而保证数据满足一致性的要求如下这段代码,如果不添加事务管理,就会导致A的钱减少,但是B的钱没有增多,所以在

2021-04-27 16:34:57 3132

原创 【Spring】Spring集成Mybatis

目录前言集成步骤0、项目结构1、新建Maven项目2、导入依赖3、创建实体类4、创建Dao接口和对应Mapper5、创建Mybatis主配置文件6、创建Service类,属性是dao7、创建Spring主配置文件测试前言① 本篇博客将从0开始将Spring框架和Mybatis框架完美融合② 前提知识:SpringIOC、Mybatis、Maven③ 将这两个框架集成在一起主要使用SpringIOC的特性,为什么IOC可以将两个框架集成在一起呢?​ 是因为IOC能创建对象,我们可以将Mybatis框

2021-04-26 20:38:32 426

原创 SpringMVC搭建

目录前言创建Maven Web项目导入依赖配置web.xml创建一个发起请求的页面创建控制器类创建一个显示结果的页面配置spring配置文件前言本博客演示如何从0到搭建一个最简单的SpringMVC项目需求:从index页面发送请求,show页面显示结果创建Maven Web项目导入依赖<dependencies> <!-- spring-webmvc --> <dependency> <groupId>org.sp

2021-04-26 11:31:12 156 3

原创 【Spring】控制反转、依赖注入、Bean管理

目录Spring框架概述IOC(控制反转)1、基于XML方式1.1 创建对象1.2 注入属性2、基于注解方式2.1 什么是注解2.2 spring针对bean管理操作创建对象的注解2.3 基于注解对象创建2.3 基于注解注入属性Spring框架概述轻量级的、开源的JavaEE框架解决企业应用开发的复杂性Spring两个核心部分:IOC、AOP​ IOC:控制反转(之前主动创建对象,现在Spring帮助我们创建对象)​ AOP:面向切面编程(不修改源代码的情况下,功能增强)特点​

2021-04-19 22:36:01 177

原创 【Map】基本方法及其源码理解

1、Map接口的体系结构Map:存储Key—value对的数据​ HashMap:作为Map的主要实现类;线程不安全;效率高;键和值都可以是null​ LinkedHashMap:遍历时,可以按照添加的顺序进行遍历;对于频繁的遍历操作,效率高​ TreeMap:可以进行排序(按照key排序)​ Hashtable:作为Map古老的实现类(几乎不用);线程安全;效率低;键和值都不能是null,如果存,报空指针异常​ Properties:常用来处理配置文件;键和值都是String

2021-04-19 20:13:56 207

原创 【Mybatis】从0到单表增删改查

目录环境1、创建user表2、创建Maven工程3、导入相关依赖4、编写Mybatis-config.xml文件5、bean层6、dao层7、配置userMapper.xml9、在总配置文件中注册映射文件10、测试环境IDEA、Mysql81、创建user表2、创建Maven工程3、导入相关依赖<!-- mysql-connector-java --><dependency> <groupId>mysql</groupId> &

2021-04-15 21:32:04 99

原创 【类加载子系统】双亲委派机制、类的加载器

类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例在虚拟机提供了3种类加载器,引导(Bootstrap)类加载器、扩展(Extension)类加载器、系统(System)类加载器(也称应用类加载器)1、类的加载器1.1 引导类加载器也叫作引导类加载器(Bootstrap ClassLoader)启动类加载器使用**C/C++**语言编写(所以我们在Java程序中获取不到)用来加载Java的核心类库处于安全

2021-04-15 20:10:47 79

原创 【运行时数据区】PC寄存器

Program Counter Register位置位于JVM中的运行时数据区作用PC寄存器用来存储指向下一条指令的地址,也就是即将要执行的指令代码,由执行引擎读取下一条指令特点它是一块内存很小的区域,小到可以忽略不计,也是运行速度最快的存储区域在JVM中,每个线程都有自己的PC寄存器,是线程私有的,生命周期和线程的生命周期保持一致任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。PC寄存器会存储当前方法的JVM地址;或者是如果在执行本地方法,则是未指定值JVM中唯一一个没有

2021-04-13 16:42:01 174

原创 【Mybatis】动态SQL

目录前言1、where if标签2、set if标签3、foreach标签前言动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。1、where if标签对于查询条件数量不确定的情况,Mybatis使用这两个标签组合可以解决IF 进行条件判断,如果为真,将IF标签内的内容拼接到SQL语句

2021-04-11 21:45:41 66

原创 【查询】Mybatis多对一查询

1、需求数据库中有两张表,分别是学生表和老师表,它们之间的关系是多对一即多个学生有一个老师,一个老师对应多个学生现在要查学生的所有信息,包括老师的信息2、实现2.1 数据库2.2 bean层public class Student { private int id; private String name; //将老师的信息作为一个属性 private Teacher teacher; @Override public String to

2021-04-09 18:15:55 91

原创 Maven配置IDEA搭建

前言本教程适用于第一次使用Maven工具在IDEA构建项目jdk1.8.0_261(前提)IDEA 2020.2一、本地配置Maven环境Maven官网下载Maven安装包(https://maven.apache.org/download.cgi)点击下载的文件解压,然后配置环境变量,在path中配置到bin目录至此本地配置成功,cmd输入 mvn -version 可查看配置信息接下来配置本地仓库地址,在解压的文件夹中 conf 文件夹下的 setting.xm

2021-04-04 20:08:46 73

原创 javaWeb过滤器

一、什么是过滤器生活中的过滤器净水器空气净化器滤网web中的过滤器​ 当访问浏览器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能过滤器的作用​ 一般用于完成通用的操作:登录验证、统一编码处理、敏感字符过滤二、代码实现步骤:定义一个类,实现接口Filter实现方法配置拦截路径web.xml 配置注解配置(最常用)代码:@WebFilter("/*")//访问所有资源之前,都会执行这个过滤器public class DemoFilter implemen

2021-03-10 11:43:56 116

原创 【多线程】如何实现线程通信

目录一、引入二、如何实现三、面试题一、引入​ 什么是线程通信?​ 线程通讯指的是多个线程通过消息传递实现相互牵制,相互调度,即线程间的相互作用。二、如何实现1、涉及到的三个方法​ wait() :一旦执行此方法,当前线程就会进入阻塞状态,并释放同步监视器​ notify() :一旦执行此方法,就会唤醒被wait的另一个线程,如果有多个线程被wait,那么唤醒优先级高的那个​ notifyAll() :一旦执行此方法,就会唤醒所有被wait的线程2、对这三个方法的说明​

2021-02-08 18:42:56 1184

原创 【多线程】线程同步问题的三种解决方法

目录一、前言二、同步代码块三、同步方法四、Lock方法五、总结一、前言解决线程同步问题有三种方式:同步代码块、同步方法、锁(JDK5新增)使用synchronized 解决线程同步问题要时时刻刻注意要使用同一个同步监视器,特别是在继承创建多线程是要格外注意。二、同步代码块1、语法synchronized(同步监视器){ 需要被同步的代码}2、对语法的说明​ 需要被同步的代码就是操作共享数据的代码​ 同步监视器可以是任何类的对象,但必须是唯一的​ 实现创建多线程的案

2021-02-08 16:53:28 2698

原创 【BOM】定时器

目录一、执行一次的定时器二、重复执行的定时器三、案例四、补充JS中的定时器分为两类:一类是计时结束执行一次的计时器,一类是每隔指定时间执行一次的计时器一、执行一次的定时器1、语法:window.setTimeout(函数, 时间);2、说明- window可以省略- 这个调用函数可以直接写函数,或者函数名- 时间的单位是毫秒- 因为定时器一般有很多,所以我们一般给定时器赋值一个标识符3、案例:2秒后控制台输出时间到了//写法一:直接将函数写到新参位置var timer = se

2021-02-04 16:39:33 189

原创 一篇弄懂JDBC(不骗你)

目录一、获取数据库连接二、增删改操作三、查询操作一、获取数据库连接首先知道连接数据库的四个要素,这是连接数据库必须的这四个要素可以这样形象的理解,数据库驱动相当于一辆车,URL地址相当于目的地,账号密码相当于车钥匙,这样才能去往数据库相应的数据库驱动URL地址账号密码//一、加载数据库驱动Class.forName("com.mysql.cj.jdbc.Driver");//二、数据库的URL地址String url = "jdbc:mysql://127.0.0.1:3306

2021-01-22 20:22:47 1121 4

原创 MySQL---函数

目录1、字符函数2、数字函数3、日期函数4、流程控制函数5、分组函数1、字符函数#1、length 获取参数值的字节个数SELECT LENGTH(stu_name) FROM student;#2、concat 拼接字符串SELECT CONCAT(id,':',stu_name) FROM student;#3、upper、lowerSELECT UPPER(stu_name) FROM student;#4、substr、substring 截取字符串,索引从1开始SELECT

2021-01-19 15:02:31 72

原创 MYSQL约束、添加约束、删除约束

目录1、约束1.1 含义:1.2 分类:1.3 约束的添加分类:1.4 添加约束的时机:1、约束1.1 含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性1.2 分类:主键约束PRIMARY KEY:用于保证该字段的唯一性,并且可以为空非空约束NOT NULL:用于保证该字段的值不能为空唯一约束UNIQUE:用于保证该字段的值就有唯一性检查约束CHECK:限制字段值的内容默认约束DEFAULT:用于保证字段具有默认值外键约束FOREIGN KEY:用于限制两个

2021-01-14 14:53:29 699

原创 快速优雅的弄懂包装类

目录一、为什么要有包装类二、基本数据类型和包装类之间的转化1、原始方法(了解即可)2、自动装箱、拆箱三、基本数据类型、包装类和String之间的转化1、100 ---> "100"2、"100" ---> 100***面试题一、为什么要有包装类为了Java真正面向对象的特征,所以提出包装类的概念针对八种基本数据类型定义相应的引用类型------包装类有了类的特点,就可以调用类中的方法,Java才能使纯粹的面向对象的语言基本数据类型包装类byteBytesho

2020-12-23 20:51:39 83

原创 【多线程】初识多线程

目录一、线程的创建和使用1、继承Thread类2、实现Runnable接口3、两种方式的比较二、线程的常用方法三、线程的优先级1、线程的优先级等级2、获取和设置当前线程的优先级四、线程的生命周期一、线程的创建和使用1、继承Thread类步骤1、创建一个类继承于Thread2、重写Run方法(方法体内写要做的事情)3、创建该类的对象4、调用start方法代码演示//创建一个继承于Thread类的子类class MyThread extends Thread { //重写Thre

2020-12-15 17:10:20 84

原创 UDP网络编程(Java实现)

一、UDP网络通信类 DategramSocket 和类 DategramPacket 实现了基于UDP协议网络通信UDP数据报通过数据报套接字 DategramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不确定什么时候可以抵达DategramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号UDP协议中每个数据报都给出了完整的地址信息,因此无需建立发送方和接受方的连接,如同发快递包裹一样二、代码实现

2020-12-11 18:14:34 333

原创 Java比较器概述

引入使用Java比较器的实际需求,普通的比较运算符只能比较基本数据类型,如果想要比较引用数据类型的话就无能为力了。比如说在购买东西时,我们有时需要按销量排序、按评论数排序、按价格排序,这里的每一个商品都是一个一个的对象,如果要实现我们的排序需求,那么就会用到Java比较器一、自然排序像String、包装类都实现了Comparable接口,重写了ComparTo方法,给出了比较两个对象的方法重写CompareTo方法的规则: 如果当前对象this大于形参对象obj,则返回正整数

2020-12-11 16:36:26 187 1

原创 IO流---File类的使用

前言1、File类的一个对象,代表一个文件或者文件夹2、File类声明在IO包下3、File类涉及到文件的创建、删除、重命名、修改时间、文件大小等方式;并未涉及到数据的写入与读取等操作,如果需要读取或者写入数据,必须使用IO流来完成4、后续File类的对象常常被当做参数传递到流的构造器中,指明读取或写入的位置一、创建File类的对象相对路径:相较于某个路径下,指明的路径绝对路径:包含盘符在内的文件或文件目录的路径//构造器一:File(String pathName)//构造器二

2020-11-30 17:16:46 270

原创 【数组】Arrays工具类

一、Arrays类Arrays 类即为操作数组的工具类,包含了用来操作数组的各种方法判断两个数组是否相等 public static boolean equals(int[] a, int[] b) 输出数组信息 public static String toString(int[] a)将原数组所有元素替换为指定值 public static void fill(int[] a, int val) 对数组进行排序 public static so

2020-11-28 22:08:50 217

原创 你所不知道的泛型

目录一、为什么要有泛型二、在集合中使用泛型三、自定义泛型结构1、自定义泛型类四、泛型在继承上的体现一、为什么要有泛型//没有泛型之前存在的问题List list = new ArrayList();//需求:存入学生成绩list.add(34);list.add(23);//问题一:类型不安全,可以存入其他类型的数据list.add("Tom");for(Object score : list){ //问题二:类型转换异常 int num = (int)score;}

2020-11-25 18:34:08 73

原创 Java集合基本概述

目录引入一、Java集合框架二、Collection接口方法三、Iterator迭代器接口四、Collection子接口一:ListList接口的常用方法List的遍历(三种方式)ArrayList源码分析:五、Collection子接口二:Set1、Set的理解1.1、无序性1.2、不可重复性1.3、向set中添加元素的过程2、treeSet六、Map接口1、Map接口的框架结构2、key-value的理解3、HashMap的底层实现原理4、Map接口中常用方法5、Map的遍历七、Collection工具

2020-11-24 21:23:05 101

原创 String类介绍

目录一、简介二、不可变性三、String实例化1、字面量方式2、使用构造器四、String的转换1、String与char[]之间的转换2、String与byte[]之间的转换一、简介String类:代表字符串String类是final的,代表不可变的字符序列字符串是常量,用双引号引起来表示,它们的值在创建之后不可改变String对象的字符内容存在一个字符数组中public final class String implements java.io.Serializable, Compa

2020-11-16 17:05:50 249

原创 StringBufferStringBuilder

一、区别String:不可变的字符序列StringBuffer:可变的字符序列、线程安全、效率低StringBuilder:可变的字符序列、线程不安全、效率高 JDK5.0新增二、源码分析String str = new String(); //相当于 char[] value = new char[0]String str = new String("abc"); //相当于 char[] value = new char[]{'a','b','c'}StringBuffe

2020-11-15 21:46:50 82

原创 Java实现稀疏数组

目录一、引入二、二维数组三、将二维数组转化为稀疏数组1、思路2、代码实现四、将稀疏数组转化为二维数组1、思路2、代码实现一、引入普通二维数组 稀疏数组0 0 0 0 0 3 5 10 0 1 0 0 1 2 10 0 0 0 0有时二维数组比较占用空间,如上的二维数组就可以用旁边的稀疏数组表示,可以节省大量空间二、二维数组二维数组一般是多行三列第一行第一二列为原二维数组的

2020-11-13 23:02:08 104

原创 Java系统类详解

目录一、简介二、属性和方法1、属性2、方法一、简介System类代表系统,系统级别的很多属性和控制方法都在该类的内部,该类位于lang包下System类的构造器是private的,所以无法创建该类的对象,但是内部的属性和方法都是static的,所以也可以方便的调用二、属性和方法1、属性in 标准输入流out 标准输出流err 标准错误输出流2、方法public static native long currentTimeMillis()该方法的作用是返回当前的计算机时间,时

2020-11-12 22:28:34 358

原创 SimpDateFormat类详解

一、引入Date类的API不易于国际化,大部分被废弃了java.text.SimpleDateFormat 是一个不与语言环境有关的方式格式化和解析日期的具体类它允许 格式化:日期 —>文本 解析:文本—>日期二、作用1、格式化:日期->文本2、解析:文本->日期SimpleDateFormat 类的构造器有无参和带参SimpleDateFormat sdf = new SimpleDateFormt(“yyyy-MM-dd hh-mm-ss”);如上

2020-11-12 00:20:35 894 2

原创 面向对象特征-继承性

目录一、继承的好处二、继承性的格式三、说明一、继承的好处减少代码冗余,提高代码的复用性便于功能的拓展为多态性使用提供前提二、继承性的格式class A extends B{}A:子类、派生类、subclassB:父类、基类、超类、superclass体现:一旦子类A继承父类B后,子类A就获取了父类B的所有属性和方法​ 包括私有方法和属性,只是因为封装性的原因不能调用三、说明一个类可以被多个类继承Java类的单继承性:一个类只能有一个父类子类继承父类后,就获

2020-11-08 14:03:35 84

空空如也

空空如也

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

TA关注的人

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