自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于Java实现随机字母数字验证码

生成随街验证码VerifyCode 工具类package com.meeno.common.cerifycode;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import jav

2020-09-28 14:43:33 14

原创 基于java实现的选择排序

选择排序是一种简单直白的排序算法,它的思想是:每次从无序区中选择出最小(或最大)的元素,然后把它和无序区首部的元素交换,此时有序区长度+1,无序区长度-1。实现思路:①在排序开始前,整个数组都是无序的,所以此时有序区的长度为0 ===> 找出整个数组中最小(或最大)的元素,将它与无序区首部的元素,即arr[0]交换;此时有序区长度为1,无序区长度为length-1;②在无序区中查找最小的元素,并与无序区首部元素交换 ===>此时有序区长度为2,无序区长度为length-2……如此不断

2020-09-27 22:02:28 16

原创 详解Java 中 static 的作用 Java大魔王

在 Java 中 static 关键字有4种使用场景,下面分别进行介绍:1.static 成员变量public class Student { // 静态成员变量 private static String SchoolName; private static int nums; // 非静态成员变量 private String name; private int age;}在类中一个成员变量可用 static 关键字来修饰,这样的成员变

2020-09-25 21:00:09 13

原创 浅析SpringBoot开启异步方法

在启动类上加入@EnableAsync异步方法/** * 简单文本邮件 * @param to 收件人 * @param subject 主题 * @param content 内容 */ @Async public void sendSimpleMail(String to, String subject, String content) { //创建SimpleMailMessage对象 Simple

2020-09-25 19:49:03 5

原创 HashMap的使用及其实现

1.概述HashMap可以说是在java中应用最频繁Map类型了。HashMap 是基于哈希表的 Map 接口的非同步实现====>这里可以说明,它不能保证映射的顺序,特别是它不能保证该顺序亘古不变,因为加入的元素是根据哈希值来存储的。HashMap允许存储null的key值和null的value值。由于HashMap是基于哈希表来实现的,所以此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap

2020-09-24 18:54:02 17

原创 SpringBoot常用注解总结

在SpringBoot框架中,注解做为一种隐式配置,极大的简化了之前xml文件的配置方式。SpringBoot中包含许多种类的注解,这里对在SpingBoot项目中经常使用到的一些注解的进行大致的归纳总结;一、启动相关1、@SpringBootApplicationSpringBootApplication注解:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBo

2020-09-23 20:28:15 13

转载 Redis6.0为何引入多线程?单线程不香吗?

本文主要分两部分。首先我们先聊一下Redis6.0之前为什么采用单线程模型。然后再详细解释Redis6.0的多线程。Redis6.0之前为什么采用单线程模型严格地说,从Redis 4.0之后并不是单线程。除了主线程外,还有一些后台线程处理一些较为缓慢的操作,例如无用连接的释放、大 key 的删除等等。单线程模型,为何性能那么高?Redis作者从设计之初,进行了多方面的考虑。最终选择使用单线程模型来处理命令。之所以选择单线程模型,主要有如下几个重要原因:Redis操作基于内存,绝大多数操作的性能瓶

2020-09-22 15:08:54 46

原创 Java基础知识总结(完)

29.抽象类和接口区别?抽象类:用abstract修饰,抽象类不能创建实例对象。抽象方法必须在子类中实现,不能有抽象构造方法或者抽象静态方法。接口:抽象类的一种特例,接口中的方法必须是抽象的。两者的区别:抽象类可以有构造方法,接口没有构造方法抽象类可以有普通成员变量,接口没有普通成员变量。抽象类可以有非抽象的普通方法,接口中的方法必须是抽象的。抽象类中的抽象方法访问类型可以是public,protected,接口中抽闲方法必须是public类型的。抽象类可以包含静态方法,接口中不能包含静态

2020-09-21 19:41:06 10

原创 Java基础知识总结(三)

20.List、Set和Map的区别?List:是存储单列数据的集合,存储有顺序,允许重复。继承Collection接口。Set: 是存储单列数据的集合。继承Collection接口。不允许重复。Map:存储键和值这样的双列数据的集合,存储数据无顺序,键(key)不能重复,值(value)。可以重复。21.什么时候用assert?在调试程序时使用,对一个boolean表达式进行检查。为true,则程序正确,如果为false,系统则给出警告或者退出。22.使用java.lang.Math,生成10

2020-09-21 16:36:31 11

原创 Java基础知识总结(二)

11.sleep()和wait()有什么区别?sleep是线程被调用时,占着cpu休眠,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu。sleep()和wait()方法的区别可从两个角度阐述:1.cpu的抢占权;2.锁旗标是否释放两者都会释放cpu的抢占权;wait()方法执行完即可释放锁旗标,进入线程的等待队列;sleep()执行完,不会释放,进入等待队列;12. 同步和异步的区别?同步的实现方法?同步:发送

2020-09-20 22:11:58 4

原创 Java基础知识总结(一)

1.&和&&的区别?&:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true。&&:短路与,如果第一个表达式为false时,第二个表达式就不会计算了。2.在java中如何跳出当前的多重循环?在循环语句外前面定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出循环。比如:ok:for (int i = 0; i < 10; i++) {{for (int j = 0; j < 10;

2020-09-20 15:28:55 11

转载 spring 与 springmvc 的区别和定义

前言:补充一下基础知识,spring 的定义和 springmvc 的定义,来源于百度百科。spring定义Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。**  简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。**目的解决企业应用开发的复杂性

2020-09-20 15:09:58 10

原创 SpringBoot入门练习

一、创建项目出现的问题问题1、application.yml文件无法识别 *解决方法:File->Settions->Plugins目录下 选中YAML,重启IDEA问题2、application.yml文件图标错误 *解决方法:File->Settings->File Types下 删除*.yml二、创建一个SpringBoot的项目New Project选择Spring Initializr选择Web下的Web,然后Flish导入依赖

2020-09-17 14:50:49 23

原创 详解java中的缓冲流、转换流、序列化流

一、缓冲流缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。字节缓冲流构造方法创建字节缓冲输入流:BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));创建字节缓冲输出流:BufferedOutputStream bos = new BufferedOutputStream(new FileOutputSt

2020-09-16 14:39:49 32

原创 这可能是最详细的JVM类加载讲解了

1. Java对象的创建过程类加载检查 ===> 分配内存 ===> 初始化零值 ===> 设置对象头 ===> 执行init方法1.1 类加载检查虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,就必须执行相应的类加载过程。1.2 分配内存在类加载检查通过后,虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定

2020-09-15 22:36:09 30

原创 在Spring Boot中从类路径加载文件

介绍创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件;war和jar的加载文件格式是不一样的在下面,您将找到在WAR和JAR中加载文件的解决方案。资源加载器使用Java,您可以使用当前线程的classLoader并尝试加载文件,但是Spring Framework为您提供了更为优雅的解决方案,例如ResourceLoader。您只需要自动连接ResourceLoader,然后调用getResource(„somePath“)方法即可。在Spring Boot

2020-09-13 19:38:57 32

原创 mybatis如何防止SQL注入?

*** sql注入发生的时间,sql注入发生的阶段在sql预编译阶段,当编译完成的sql不会产生sql注入一、采用jdbc操作数据时候String sql = "update ft_proposal set id = "+id; PreparedStatement prepareStatement = conn.prepareStatement(sql); prepareStatement.executeUpdate();preparedStatement 预编译对象

2020-09-11 15:11:51 13

原创 详解mybatis的#{}和${}的区别以及order by注入问题

直奔主题…#{}相当于jdbc中的preparedstatement${}是输出变量的值你可能说不明所以,不要紧我们看2段代码:String sql = "select * from admin_domain_location order by ?";PreparedStatement st = con.prepareStatement(sql);st.setString(1, "domain_id");System.out.println(st.toString());  Res

2020-09-09 19:48:20 57

原创 Springboot项目使用拦截器方法详解

1. 创建一个拦截器并实现HandlerInterceptor接口package com.leiyuan.bs.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.

2020-09-08 22:00:55 129

原创 Java多线程中的AQS简述

抽象的队列式的同步器,AQS(AbstractQueuedSynchronizer)定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock.AQS提供一个框架,用于实现依赖先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等)。 该类被设计为大多数类型的同步器的有用依据,这些同步器依赖于单个原子int值来表示状态。 子类必须定义改变此状态的受保护方法,以及根据该对象被获取或释放来定义该状态的含义。 给定这些,这个类中的其他方法执行所有排队..

2020-09-07 19:19:21 28

翻译 你的 IDEA 是如何配置的?卡不卡?试试这样配置

本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响。Don’t be a Scrooge and give your IDE some more memory不要做守财奴,给IDE多留点内存吧。昨天,大家就是否自定义 IntelliJ IDEA 的内存设置进行了讨论,有些人选择默认设置,有些人会对默认的设置进行简单的变更,还有一些开发者会基于他们的需求进行全面复杂的设置。笔者目前的工作是处理几个微服务项目和一个老

2020-09-06 14:51:33 80

原创 深入浅出Java中String类的常用方法

1. 判断功能的方法public boolean equals (Object anObject) :将此字符串与指定对象进行比较。public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。public class String_Demo01 { public static void main(String[] args) { // 创建字符串对象 String s1 = "hell

2020-09-04 15:01:46 35

原创 Java连接MySQL数据库

第一步 下载MySQL connector在命令行窗口查看自己MySQL版本 ,下载对应的驱动下载路径:https://dev.mysql.com/downloads/connector/j/下载名称如:mysql-connector-java-5.7.26-bin.jar第二步 导入connector创建普通Java项目,src同级目录新建文件夹lib文件夹,将jar文件放进去,然后右击Build,图片演示如下-----------------------------------分隔符--

2020-09-03 22:14:14 44

原创 MyBatis核心类简介

前言每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。MyBatis取代JDBC,框架会做什么:读取配置文件底层一定是JDBC结果集的映射(反射)ObjectF

2020-09-02 20:06:01 155

原创 MyBatis四大核心组件你知道吗?

1.SqlSessionFactoryBuilder (构造器)会根据配置或者代码来生成SqlSessionFactory2.SqlSessionFactory (工厂接口)以后他来生成SqlSession3.SqlSession (会话)一个既可以发送SLQ执行返回结果,也可以获取Mapper的接口4.SQL Mapper (映射器)负责发送SQL 去执行,并返回结果。使用MyBatis 肯定是要生成 SqlSessionFactory1.通过读取xml 配置文件用SqlSessionF

2020-09-01 22:27:16 17

原创 MyBatis四大核心组件你知道吗?

1.SqlSessionFactoryBuilder (构造器)会根据配置或者代码来生成SqlSessionFactory2.SqlSessionFactory (工厂接口)以后他来生成SqlSession3.SqlSession (会话)一个既可以发送SLQ执行返回结果,也可以获取Mapper的接口4.SQL Mapper (映射器)负责发送SQL 去执行,并返回结果。使用MyBatis 肯定是要生成 SqlSessionFactory1.通过读取xml 配置文件用Sql

2020-09-01 22:25:41 53

原创 MyBatis使用时的注意事项

1. 使用何种映射器配置MyBatis 3之后的SQL语句映射既支持注解也支持XML配置,他们各有优势和缺点,在实例项目中应该如何选择可以参考如下建议:对于简单语句来说,注解使代码显得更加简洁,然而Java注解对于稍微复杂的语句就会力不从心并且会显得更加混乱。因此,如果你需要做很复杂的事情,那么最好使用XML来映射语句。当然,可以在项目中同时使用基于注解和基于XML配置2种形式的SQL语句映射,MyBatis是支持的。2. 对象生命周期和作用域SqlSessionFactoryBuilder这个类

2020-08-31 21:14:52 40

原创 Mybatis工作流程及其原理

一、MyBatis的重要组件Mybatis底层封装了JDBC,使用了动态代理模式。1.SqlSessionFactoryBuilder (构造器):使用Builder模式根据mybatis-config.xml配置或者代码来生成SqISessionFactory。2.SqlSessionFactory (工厂接口):使用工厂模式生成SqlSession。3.SqlSession (会话): 一个既可以发送 SQL 执行返回结果,也可以获取Mapper的接口。4.SQL Mapper (映射器):

2020-08-30 20:41:10 30

原创 MyBatis全局配置文件

一、全局配置文件mybatis-config.xml1.dtd约束xml文件的声明处引入dtd约束文件 ===》 规定xml中语法规则。(会自动提示)http://mybatis.org/dtd/mybatis-3-config.dtdidea中复制项目时,在工作空间中直接复制,然后修改名称;然后把里边该删除的文件删除(例如:.idea文件夹、删掉.iml为结尾的文件等),然后在idea中import导入选择create,然后一直点next就行。(复制完别忘了手动导入的jar包)上图情况就需

2020-08-27 19:47:11 34

原创 解析Java中接口的定义

使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:[修饰符] interface 接口名 [extends 父接口名列表]{[public] [static] [final] 常量; //全局常量[public] [abstract] 方法;  //抽象方法}修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。接口名:必选参数,用于指定接口的名

2020-08-26 15:14:24 44

原创 Java io流之字符流详解

字节流基类InputStreamInputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。常用方法: // 从输入流中读取数据的下一个字节 abstract int read() // 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中 int read(byte[] b) // 将输入流中最多 len 个数据字节读入 byte 数组 int read(byte[] b, int off, int len) // 跳过和丢弃

2020-08-25 14:56:57 35

原创 Java io流 之 字节流详解

字节流基类InputStreamInputStream:字节输入流基类,抽象类是表示字节输入流的所有类的超类。常用方法: // 从输入流中读取数据的下一个字节 abstract int read() // 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中 int read(byte[] b) // 将输入流中最多 len 个数据字节读入 byte 数组 int read(byte[] b, int off, int len) // 跳过和丢弃

2020-08-24 16:59:44 22

原创 java语言的各种输入情况(ACM常用)

1.只输入一组数据:Scanner s=new Scanner(System.in);int a=s.nextInt();int b=s.nextInt();2.输入有多组数据,没有说明输入几组数据,每组数据占一行:Scanner s=new Scanner(System.in);while(s.hasnext()){//判断是否数据结束int a=s.nextInt();int b=s.nextInt();}3.输入多组数据,第一行为一个整数N,表示有N组测试数据,后面的接着又N组

2020-08-23 22:25:54 12

转载 你真的理解Java 字符串的不可变性吗?

一、背景字符串的不可变性可以说是面试中的一个常见的“简单的” 问题。常见的回答如:字符串创建后不可改变。字符串的不可变性是指字符串的字符不可变。String 的 value 字符数组声明为 final 保证不可变。真的是这样吗?下面我们再思考两个问题:那么字符串的不可变究竟是指什么?是如何保证的呢?下面看一个奇怪的现象:在程序一段程序的最后执行下面的语句居然打印了 “aw” 为什么?// 前面代码省略System.out.println("ab");建议大家先思考,然后再看下

2020-08-23 14:00:44 43

原创 Java 创建线程池的四种方式

1、newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。2、newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。4、newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO,

2020-08-19 22:49:05 57

原创 Java面向对象练习题之计算圆的面积和周长

创建一个圆Circle类。为该类提供一个变量r表示半径,一个常量PI表示圆周率;同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长;为该类提供一个无参的构造方法,用于初始化r的值为4。在main方法中测试。package hello.circle;/** * 2.创建一个圆Circle类。 * 为该类提供一个变量r表示半径,一个常量PI表示圆周率; * 同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长; * 为该类提供一个无参的构造方法,用于初始化r的值

2020-08-18 15:37:19 1033

原创 Java面向对象练习题之定义交通工具类型,控制速度

请定义一个交通工具(Vehicle)的类,其中有:属性:速度(speed),车的类型(type)等等方法:移动(move()),设置速度(setSpeed(double s)),加速speedUp(double s),减速speedDown(double s)等等.最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过构造方法给它初始化speed,type的值,并且打印出来。另外,调用加速,减速的方法对速度进行改变。package hello.vehicle;/** *

2020-08-17 16:23:26 102

原创 Java面向对象练习题之猜数字游戏

一个类A有两个成员变量v、num,v有一个初值100。定义一个方法guess,对A类的成员变量v,用num进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。在main方法中测试package hello.guess;public class Guess { // 创建属性 private int a = 100; public static void main(String[] args) { int num; Guess

2020-08-16 22:20:59 32

原创 SSM框架的基本原理与优势

原理:1.Spring在java里面,要用类里面的方法,就需要先有类的对象,而类的对象就是new出来Spring就是用来简化这一步操作的框架Spring是一个容器,里面装了很多Bean即实体对象。之后要用到这些对象对应的类的方法,可以直接从容器里面拿,就不用再去new一个了2.SpringMVC首先理解好servlet是什么?Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序

2020-08-14 22:32:02 131

原创 Java接口的定义与实现

一.定义Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。口定义的一般形式为:[访问控制符]interface <接口名> {类型标识符final 符号常量名n = 常数;返回值类型 方法名([参数列表]);}二.接口的特点Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化

2020-08-13 15:48:05 80

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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