自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 MySql批量插入指定位数的随机数

需求:向mysql中批量插入指定位数的随机数sql脚本:第一步:创建一个函数用于生成指定位数的随机数#创建一个函数用于生成随机字符串DELIMITER $$CREATE FUNCTION random_ss(num INT) RETURNS VARCHAR(64)BEGIN #声明一个字符序列 DECLARE str VARCHAR(64) DEFAULT 'abcdefghigklmnopqrstuvwxyz'; #定义一个变量,用于控制随机数的位数 DECLARE i IN

2021-07-04 18:35:20 768 1

原创 JUC中的原子类操作

JUC中原子类的操作文章目录JUC中原子类的操作前言一、简图二、基本类型原子类三、数组类型的原子类四、引用类型的原子操作类五、对象属性修改的原子类操作前言atomic译为原子,原子在化学中中表示物质最小的单位是不可分割。而在多线程中原子类(具有原子操作特性的类)中的操作是不可中断的。即时在多线程的情况下原子操作一旦开始不会受到其它线程的干扰。一、简图atomic中原子操作类简图atomic原子操作得益于:JMM volatile UnSafe CAS机制二、基本类型原子类Atomic

2021-04-12 16:43:08 197

原创 Executors一篇就够

Executors框架包含的内容十分的多:看图:Executors框架前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码

2021-04-11 16:05:37 4575

原创 ScheduledThreadPoolExecutor类的使用

系列文章目录关系图:文章目录系列文章目录前言0.熟悉api1.schedule方法2.固定频率执行任务3.固定的间隔时间执行任务4.定时任务出现异常5.取消定时任务的执行前言ScheduledThreadPoolExecutor它与ThreadPoolExecutor最大的不同就是可以设置延迟任务和中期任务。0.熟悉api构造方法:ScheduledThreadPoolExecutor(int corePoolSize) 指定核心线程大小,最大线程数默认为Integ

2021-04-11 14:57:04 2651

原创 线程池深入浅出也就这一篇了!

线程池深入浅出线程池在高并发编程中是一定会使用到的!接下来一起看看吧文章目录线程池深入浅出一、什么是线程池?二、线程池原理三、线程池的核心api四、常见的工作队列五、自定义线程工厂六、常见的饱和策略七、线程池的关闭八、线程池的拓展一、什么是线程池?线程池从名字上来看就是存放线程的池子,那为什么需要它?或者它有什么优势?线程的创建和销毁是一件非常消耗资源的操作。有时我们实际的业务还没有线程的创建开销大,线程池的作用便是提前创建好一些线程,我们需要的时候直接来取,使用完毕后不是关闭,而

2021-04-10 21:57:59 105

原创 CyclicBarrier的使用

CyclicBarrier称为循环屏障它允许一组线程互相等待,直到达到某个公共的屏障点CyclicBarrier和CountDownLatch有一些相似。CountDownLatch表示只有线程执行结束后当前线程才可以继续执行和Join方法一致。但是CyclicBarrier是只有等待的线程数达到一定的值时才继续执行。该值在我们创建对象的时候传递CyclicBarrier的计数器可以重置,因此他的实例可以反复使用public CyclicBarrier(int parties);在给定数量的线

2021-04-10 16:05:26 230

原创 Semaphore信号量真的晦涩难懂?

在介绍Semaphore信号量的时候我们要知道以往学习的synchronized和ReentrantLock锁都是只允许在同一时刻只能有一个线程去访问资源。这与我们生活中的一些情况是不符合的。而Semaphore信号量可以控制多个线程去访问特定的资源。Semaphore的使用场景:理解:假设有一个停车场,一次可以停车5辆。而停车管理员就好比我们的Semaphore他可以控制需要停车的车辆。每一个停车位都有一把锁,当来了一辆车后就给该车主一把钥匙,在停车结束后就车主将车钥匙归还给管理员。如果管理员此时

2021-04-10 11:24:18 112

原创 LockSupport实现等待唤醒机制

提到等待唤醒机制最常想到的就是Object中的wait/notify以及Condition中await/signal。但是这两种方式会有一定的缺陷比如:1.在使用等待唤醒机制前需要先获取锁2.等待一定是发生在唤醒之前的那么今天介绍的LockSupport在实现等待唤醒机制时就不需要获取锁LockSupport实现等待唤醒机制依靠的是park()和unpark(thread)方法,这两个方法都是LockSupport的静态方法每一个线程都会有一个许可证称为permit。permit只有两个值

2021-04-10 09:23:04 149 1

原创 多线程中Condition的用法

多线程中Condition的用法与Object中wait、notify、notifyAll用法非常的相似Condition与Lock对象搭配完成等待唤醒机制首先我们需要创建Condition对象newCondition();//返回Condition实例首先我们知道wait、notify使用前提是通过synchronized获取锁对象,而Condition对象也需要在使用前获取锁。此时获取锁是通过Lock的lock()方法获取锁。Condition能够支持不响应中断,而通过使用Object方式

2021-04-09 22:12:30 942

原创 ReentrantLock锁详解

在没有接触ReentrantLock锁之前我们一直使用的是Synchronized互斥锁。Synchronized是Java的一个关键字,锁是由Jvm实现的,因此我们在使用的时候相对比较方便(无需考虑释放锁),但是synchronized相对于我们今天介绍的ReentrantLock有以下的局限性:1.当线程尝试获取锁的时候,若不能成功获取锁便会一直阻塞且用户无法控制2.如果获取锁的线程休眠或者阻塞了,若不发生异常则将导致需要该锁的线程一直等待下去了解ReentrantLock锁前了解一些概念1.

2021-04-09 19:19:36 927

原创 线程安全的实现方法

首先线程安全的实现方法多是理论,比较枯燥!首先知道什么是线程安全?“线程安全”是一个老生常谈的话题,但是对线程安全比较规范的定义却不是一件容易的事。Brian Goetz是这样描述线程安全的:当多个线程同时访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方法进行其它的协调操作,调用这个对象的行为都可以获得正确的结果,那么就称这个对象是安全的。简单说:但多个线程同时访问同一个类(对象、方法)的时候,可以得到预期的结果,那么这就是线程安全的。线

2021-04-09 10:54:31 695

原创 synchronized关键字

“线程安全”是一个老生常谈的话题,但是对线程安全比较规范的定义却不是一件容易的事。Brian Goetz是这样描述线程安全的:当多个线程同时访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方法进行其它的协调操作,调用这个对象的行为都可以获得正确的结果,那么就称这个对象是安全的。简单说:但多个线程同时访问同一个类(对象、方法)的时候,可以得到预期的结果,那么这就是线程安全的。看一段代码:public class Xiaoping {

2021-04-08 21:56:17 56

原创 线程组的使用

首先什么是线程组?线程组表示一个线程的集合,还可以包含其它线程组。像一棵树我们首先看一下线程组怎么创建ThreadGroup(String name) //构造一个新线程组。 //name表示线程组的名字,此时如果不指定父线程组的话就是main线程组,main线程组的父线程组是System线程组ThreadGroup(ThreadGroup parent, String name) //创建一个新线程组。 //创建一个新的线程组并且加入指定的线程组中。演示验证:上述演示中用到的方

2021-03-23 23:13:47 177

原创 用户线程和守护线程

什么是用户线程?什么又是守护线程?从名字上来看用户线程就是我们用户定义的线程,系统的工作线程用于完成一定的业务逻辑。而守护线程从名字上看我们可以理解为守护线程就是守护用户线程的比如我们常见的垃圾收集线程。守护线程在系统后台默默的提供着服务,一旦用户线程结束,那么Java虚拟机将会自动退出举栗子:public class Test extends Thread { @Override public void run() { System.out.println(this.isDaemon(

2021-03-23 20:58:11 249

原创 volatile关键字深入浅出

volatile关键字volatile关键字提供最轻量级的同步机制,但是想完全正确的理解该关键字你需要知道的东西有很多。比如先行并发原则、指令重排序以及最重要的JMM。下面一起来看看吧。前言一、看一下这段代码?public class Test extends Thread { //定义一个变量来控制循环结束 static boolean falg =true; @Override public void run() { System.out.println("该线

2021-03-23 19:47:15 100

原创 线程中断的方式

线程中断的方式我在这篇文章多线程基本操作有解释过。这篇文章单独抽离出来共享变量的方式public class MyThread implements Runnable { //使用volatile关键字可以做到变量的可见性,后续会详细的解释 static volatile boolean flag = false; @Override public void run() { while (true){ System.out.print

2021-03-14 22:41:14 226

原创 Java内存模型(JMM)

学习高并发时,有必要对JMM了解一下。特别是线程安全这一方面JMMJMM(Java Memory Model) 译:Java内存模型定义Java内存模型的主要目的为了:定义程序中各种变量的访问规则即关注虚拟机中把变量值存储到内存和从内存中取出变量值的底层细节。这里的变量包括实例字段、静态变量、数组对象等****但是不包括局部变量和方法参数,因为后者是线程私有的,不会被共享就不存在安全问题。JMM中关键技术都离不开 原子性、可见性、有序性原子性:简单说就是操作是不可分的,要么全部执行,要么都不执行。

2021-03-14 22:28:23 101

原创 多线程基本操作(重点)必看

高并发系列文章本文章来会议一下多线程中的基本操作,如有错误望指正。这篇文章您将看到高并发系列文章一、创建线程1.继承Thread2.实现Runnable接口二.中断线程1.原始终止2.中断线程总结一、创建线程创建一个线程对象十分简单,只需要new Thread()就可以创建好一个线程对象。然后调用start()方法即可开启线程。调用start()方法后线程会自动执行run()方法。注意:调用start()方法启动线程而不是直接调用run方法。举例简单创建一个线程对象并调用:public

2021-03-14 20:12:51 421 4

原创 SpringMvc文件的上传和下载

SpringMvc文件的上传和下载内容SpringMvc文件的上传和下载前言一、前提准备二、文件上传1.页面2.处理器下载前言文件的上传和下载在项目开发中十分的常见,今天我们一起来看一下SpringMvc是如何实现文件的上传和下载的提示:本文仅提供部分核心代码一、前提准备引入文件上传和下载所需要的依赖,编写配置文件。 <dependency> <groupId>commons-fileupload</groupId> &

2021-03-13 14:39:38 129

原创 SpringMvc中常用到的注解

SpringMvc对于开发的小伙伴真的在熟悉不过了,今天总结一下SpringMvc中开发经常用到的注解。@Controller该注解使用在类上,表示该类是一个控制器类。Spring扫描器会扫描所有的控制器类,并在控制器类中查找是否有注解@RequestMapping注解的方法。标注@RequestMapping注解的方法就是请求的处理器。补充:要使用@Controller要在配置文件中开启包扫描<context:component-scan base-package="com.off

2021-03-13 11:21:46 477

原创 反编译

通过写一个反编译类的方法来复习一下反射技术import java.lang.reflect.*;//这是自定义的反编译程序public class MyReflect { //私有构造方法 private MyReflect(){} //定义的方法,需要传递反编译类的全类名 public static void reflect(String name) { try { //获取类的Class对象 Cla

2021-01-03 14:05:15 140 3

原创 动态代理之java详解

前言今天在看spring事务时又想起动态代理,因此便写下这篇文章来和大家交流。动态代理在spring中可谓是十分常见,到处都有他的身影,例如spring中的核心技术aop、spring的事务,以及注解都用到了动态代理,因此但凡你想深入学习spring框架,那么动态代理是必须知道的。文章目录前言一、什么是代理?1.小试牛刀之静态代理二、动态代理1.jdk动态代理1.1常用API1.2 创建代理:方式一1.3 创建代理:方式二1.3 自定义代理工厂2.cglib代理2.1拦截所有方法 MethodIn.

2021-01-02 18:18:14 84

原创 反射-这一篇就让你学会!

当你看到这篇文章时请您慢慢的将它看完,相信对您一定会有帮助的!技术目录前言一、反射的引入二、获取Class对象1.Class.forName()2.类名.class3.对象.getClass()三、通过反射实例化对象四、通过反射设置对象属性五、通过反射调用方法六、反射获取注解七、注解获取类的接口八、通过反射完成反编译一个类前言提起反射我想大家第一印象就是牛批!牛批。确实反射技术的确是Java中非常强大的技术了。大多数的框架都是通过反射技术完成的,因此你要想学习一些框架的原理那么反射是必学技术,不.

2021-01-01 23:10:42 131

原创 MyBatis学习总结

随着学习的东西越来越多,遗忘的知识也越来越多。今天就在这个空闲时间来回忆了一下MyBatis中的知识点,放到这里来和大家分享一下。文章名称链接内容简介第一篇:需要知道的一些概念访问MyBatis的简介、配置,标签以及核心api等第二篇:MyBatis的核心对象和执行流程访问MyBatis的核心对象和执行流程第三篇:MyBatis基于dao接口开发访问MyBatis的基于dao接口开发的详细入门案例第四篇:多参数传递访问多参数传递,对象,Map,集合等

2020-12-24 15:28:18 107 1

原创 Spring第二篇:Spring容器介绍和入门案例

文章目录一、Spring容器二、Spring容器对象1.BeanFactory2.ApplicationContext3.ClassPathXmlApplicationContext4.AnnotationConfigApplicationContext三、入门案例一、Spring容器Spring容器首先是具有依赖注入的容器,它可以完成对象实例化,对象初始化、对象的销毁,配置对象之间的依赖关系等操作。一个对象的整个生命周期都可以通过容器去进行控制。我们不需要去new对象,而是直接在这个容.

2020-12-21 22:50:20 116 1

原创 Spring第一篇:理解Spring中的IOC和DI

学完MyBatis后紧接着我们就一块学习Spring框架吧。文章目录前言一、简说Spring?二、控制反转(IOC)三、依赖注入(DI)总结前言Spring框架现在99%以上的公司都在使用,他是java开发程序员必备技能之一,是非常非常的重要因此一定要掌握一、简说Spring?Spring是简化java企业级开发的一个框架。简单来说使用它就是为了解决企业应用开发的复杂性。Spring中最重要的是三个核心概念分别是控制反转IOC、依赖注入DI、面向切面编程AOP因此要想学好Spring这

2020-12-21 21:53:52 145

原创 MyBatis的分页查询

应用场景:分页的应用场景比较多,只要是数据库中的文件比较多,为了方便查看我们一定会使用分页查看的使用步骤应用场景:1.引入依赖2.在MyBatis核心配置文件中添加配置3.测试1.引入依赖1.在pom.xml中引入分页插件依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> &

2020-12-21 20:33:09 300

原创 MyBatis第九篇:逆向工程

试想一下如果我们的数据库中有十张表,每张表中有十个字段,那么我们就要写十个实体类,十个接口,十个映射文件。这还不说接口中的方法,这些工作是无聊且没有技术含量的,因此有没有一种方法来自动生成呢?文章目录前言一:使用步骤1.引入依赖2.逆向工程核心配置文件3.测试(生成)总结前言MyBatis的逆向工程可以根据表关系,自动创建代码中的bean类和类的关系,进而简化开发。通过逆向工程我们可以实现(数据表—>bean类和mapper接口以及mapper接口对应的mapper.xml,并在接口中.

2020-12-20 22:30:07 89 2

原创 MyBatis第八篇:使用延迟加载和缓存机制来提升效率

我们开发过程中效率最慢的就是数据库的操作部分,所以我们想尽办法去提高数据库的性能,今天介绍的延迟加载和缓存机制就是提升数据库访问性能的两种方式,但是我们在真实的开发环境中往往不会使用的。往往我们会使用Redis来提升性能,在Redis面前这个缓存机制就是小儿科。但是不使用并不代表不需要了解。文章目录前言一、延迟加载?二、缓存机制1.一级缓存2.二级缓存总结前言一、延迟加载?当查询一个对象时,与它相关联的对象的查询尽量的往后延,延到我要使用这个相关联的对象的属性时,才进行查询。要知道数据

2020-12-20 22:09:15 256

原创 MyBatis第七篇:动态sql

回想一下我们在没有学习MyBatis之前是在进行多参数模糊查询时是怎么做的?我们要判断很多条件,然后看是否符合条件然后在进行附加sql语句。代码写起来非常的繁琐,并且还极易出错。下边看一下MyBatis是怎样做的吧。其实底层的原理是一样的。文章目录前言一、<if> 标签二、<where> 标签三、choose, when, otherwise 标签四、<set> 标签五、<Trim> 标签六、<foreach> 标签七、<bind&.

2020-12-20 12:41:38 127 1

原创 MyBatis第六篇:关联查询一定要会的!

这是MyBatis学习的第六篇,继续吧~文章目录前言一、多对一1.联合查询2.分表查询二、使用步骤1.引入库总结前言在实际开发中我们的数据表都是有关联关系的,我们查询也都是几张表联合起来进行查询的。例如,订单表和用户表,员工表和部门表等等吧,总之十分的重要,我们在进行多表查询的时候会介绍两种方式:联合查询和分表查询一、多对一1.联合查询模拟多个员工对应一个部门的情况。1.创建表:2.实体类://员工实体类public class Employee { priva.

2020-12-20 11:08:48 153 1

原创 Mybatis第五篇:MyBatis获取自增值和自定义结果映射集ResultMap

本篇学习:1.Mybatis获取自增值2.Sql片段3.自定义ResultMap文章目录前言一、MyBatis获取自增值1.Mapper.xml中添加属性2.使用标签二、Sql片段1.应用场景2.实现步骤三、自定义ResultMap1.使用场景2.映射简单字段3.映射复杂字段前言在开发过程中,我们可能有这样的业务要求在生成数据的同时要获取它的主键,或者我们在编写实体类的时候属性名和数据表中的列名不一致怎么办?今天我们就来看一下这种方式怎么处理提示:以下是本篇文章正文内容,下面案例可供参

2020-12-19 22:07:20 545 1

原创 MyBatis第四篇:Mapper接口多种方式进行传参

在实际的开发我们对数据库进行crud操作时,需要传递的参数往往不是一个因此我们讲述一下Mapper接口中传递参数的集中形式。文章目录一、传递一个参数二、使用步骤1.引入库2.读入数据总结一、传递一个参数传递一个参数就是Mapper接口中的方法只有一个普通类型的参数接口:public interface PersonMapper { //根据员工编号获取员工信息和员工部门 public Person getPersonById(Integer id); }接口对应.

2020-12-19 19:31:48 6333 1

原创 MyBatis开发帮助文档中文版

链接:https://pan.baidu.com/s/1KhRxnvYA4zjvbbtDlymJOw提取码:xf8m最好用的MyBatis开发文档

2020-12-19 15:26:38 328 1

原创 MyBatis第三篇:基于接口代理方式实现Dao层开发超级详细!

接口代理方式实现Dao层开发我们在实现的开发过程中都是写接口的文章目录接口代理方式实现Dao层开发前言一、必须遵守的规范二、开发步骤1.引入依赖2.核心配置文件的编写3.创建数据表4.实体类编写5.工具类的编写6.编写PersonMapper接口7.编写PersonMapper接口对应的映射文件问题1:8.测试总结前言采用MyBatis的基于接口代理方式实现持久层的开发,这种方法是我们在企业中使用的主流。基于接口代理方式的开发只需要实现程序员实现Mapper接口,MyBatis框架会为我们动态

2020-12-18 22:18:52 202 1

原创 MyBatis第二篇:MyBatis的核心对象和执行流程必学!

MyBatis的核心api和执行原理今日内容:1.MyBatis的核心对象解释2.MyBatis的执行流程这篇文章主要介绍一下MyBatis的核心对象,执行的原理不会特别的深,有机会将会出几篇深入理解MyBatis核心原理的文章文章目录MyBatis的核心api和执行原理前言一、MyBatis中的核心对象①Resources②SqlSessionFactoryBuilder③SqlSessionFactory④SqlSession二、MyBatis的执行原理详细流程总结前言要想学习好框架

2020-12-18 20:38:43 178 1

原创 MyBatis第一篇:学习MyBatis之前这些你必须知道!

MyBatis中必知的概念所学内容: 1.MyBatis的简介 2.MyBatis的配置 3.MyBatis的核心配置文件以及标签 4.MyBatis的的核心api文章目录MyBatis中必知的概念前言一、MyBatis是什么?二、MyBatis的配置1.引入库2.读入数据三、MyBatis的核心配置文件四、MyBatis的配置中的标签总结前言我们知道在使用JDBC对数据库进行操作时步骤非常的繁琐,注册驱动,获取连接,生成编译器,执行sql

2020-12-18 16:10:29 826

原创 监听器设计模式java详解

前言:在学习监听器设计模式前最好先学习一下观察者设计模式,因为这两种设计模式有很大的相似之处(两者不属于23种设计模式),可以类比着学习,监听器设计模式要比观察者设计模式要稍微困难一点,我的另一篇文章:观察者设计模式监听器的设计模式:类比观察者设计模式:监听器就是观察者,被监听对象就是被观察者。被监听对象的状态发生改变时,会通知监听器,监听器收到通知后会做出相应的处理。1.被监听者状态的改变被定义为一个对象,称为事件。2.被监听器对象称为事件源3.对监听器的通知称为触发监听器接下来进行逐一

2020-12-10 21:53:43 725

原创 观察者设计模式java详解

该设计模式和我们的生活中联系联系的比较紧密:从现实生活角度中说起我们每个人都是一个观察者,同时也是一个被观察者。作为观察者当“被观察者”发出消息后会做出响应的响应,同时被观察者也会根据观察者的反应做出动作。举个不太恰当的例子:假如有一个罪犯挟持了一名人质,那么此时该罪犯就主要作为被观察者(但是他也是一名观察者,他在时刻观察警察的动向)此时的多名警察就是主要作为观察者(但是也是被观察者,时刻被罪犯所观察),所以观察者设计模式其实就是这种关系观察者设计模式: 一对多关系,一个被观察者对应多个观察者。观察者

2020-12-10 14:37:45 150

原创 Ajax与Json入门与进阶

Ajax简介:Ajax全称:"Asynchronous Javascript and XML"简单的理解就是:无需重新加载整个网页的情况下,可以更新部分网页的技术特点:1)可以刷新局部页面的数据 2)不需要等待上一次服务器相应就可以进行下一步操作。原生Ajax虽然现在原生的Ajax使用的已经很少了,但是我们还是要了解一下的。原生Ajax使用分四步走:1.创建Ajax对象 var xhr = new XMLHttpRequest();//IE5,6浏览器不支持该创建2.请求准备:

2020-12-02 22:30:44 97

dubbo-admin管理工具

打包好的dubbo-admin管理工具,放在tomcat的webapps目录下即可使用。访问网址:http://localhost:8080/dubbo/ 注意:运行时需要启动zookeeper服务。默认的zookeeper是本机,若是需要修改请联系我,无偿将所有压缩包给你。

2021-07-28

空空如也

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

TA关注的人

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