自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MyBatis之Mapper.xml文件中parameterType,resultType,resultMap的用法

MyBatis之Mapper.xml文件中parameterType,resultType,resultMap的用法

2024-02-23 21:21:08 3318

原创 MyBatis之自定义数据类型转换器

MyBatis 数据类型转换器

2024-02-16 21:08:53 2133

原创 MyBatis之动态代理实现增删改查以及MyBatis-config.xml中读取DB信息文件和SQL中JavaBean别名配置

MyBatis 动态代理 实现增删改查 MyBatis-config.xml中读取DB信息文件 SQL中JavaBean别名配置

2024-02-08 20:28:04 1673

原创 MyBatis之环境搭建以及实现增删改查

MyBatis 环境搭建 实现增删改查

2024-02-04 17:56:42 944

原创 Docker安装MySQL5.7

Docker安装MySQL

2024-01-27 21:56:42 982

原创 重温经典struts1之自定义Filter(拦截器)解决中文乱码问题

自定义Filter(拦截器)解决中文乱码问题

2024-01-21 11:55:13 1084

原创 重温经典struts1之DispatchAction完成一个Action中编写多个方法接收页面的增删改查请求

DispatchAction完成一个Action中编写多个方法接收页面的增删改查请求

2024-01-16 20:44:20 965

原创 重温经典struts1之自定义全局异常处理类处理异常以及<exeception>标签的配置

自定义全局异常处理器处理自定义异常

2024-01-13 20:50:29 1064

原创 重温经典struts1之ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息

ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息

2023-12-26 11:34:24 1041

原创 重温经典struts1之国际化(I18N)

struts1实现国际化(i18n)

2023-12-22 18:06:19 935

原创 重温经典struts1之自定义类型转换器及注册的两种方式(Servlet,PlugIn)

自定义类型转换器并交给struts来管理

2023-12-20 20:59:07 1115

原创 重温经典struts1之八种页面跳转或请求转发的方式

struts1中八种页面跳转或请求转发的方式

2023-12-17 19:29:30 1377

原创 重温经典struts1之文件上传

struts1实现文件上传功能

2023-12-15 19:47:21 1092

原创 重温经典struts1之常用标签

struts1常用标签

2023-12-11 20:09:42 1102

原创 重温经典struts1之搭建环境

搭建struts1框架并实现简单的login功能

2023-12-04 20:39:01 1268

原创 git的常用命令(持续更新中)

windows安装git 去https://gitforwindows.org/下载centos安装git#yum install git -y

2020-09-01 09:04:14 236

原创 java死锁编码及定位分析

如果线上出现死锁问题,我们应该怎样来定位和解决呢,首先我们先了解下什么是死锁,死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁,简单通俗的将,线程A持有A锁,它并尝试着获取B线程的锁B,而同时线程B持有B锁,它并尝试着获取A线程的锁A,就这样相互等待着,吃着碗里的望着锅里的,是不是很形象,我们下边撸一个死锁的代码,分析并解决,多...

2020-07-22 10:42:17 245

原创 聊聊java线程池的七大参数,四种拒绝策略,工作原理以及合理配置线程数

面试大厂,都会涉及到的一个题目,java线程池的工作原理以及参数,今天我们就来聊聊这个问题,在创建了线程池后,当有请求任务来之后,就会安排池中的线程去执行请求任务,近似理解为今日当值线程,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中...

2020-07-21 15:53:45 923

原创 为什么要用线程池它的优势以及如何使用,也是实现多线程的第四种方式

线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行,它的主要特点是,线程复用,控制最大并发数,管理线程。 第一,降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二,提高响应速度,当任务到达时,任务可以不需要的等到线程创建就能立即执行。 第三,提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗系统...

2020-07-18 10:58:53 516

原创 原来实现多线程还有第三种方式Callable

java面试中,面试官会问,实现多线程有几种方式,答:两种,继承Thread类,实现runnable接口,面试官:开门,左转,不送。开个玩笑,实现多线程只知道这两种方法是不行的,今天我们就来介绍下,实现多线程的第三种方式,Callable,它也是JUC包下的类,它的主要特点是带返回值,主要和FutureTask类合起来用,FutureTask,翻译成未来任务,是把比较耗费时间的处理重新开一个线程去执行,,接下来我们看一个demo,在main线程中,import java.util.concur...

2020-07-17 11:07:12 171

原创 volatile/CAS/atomicInteger/BlockQueue/线程交互/原子引用的生产消费者实例

这篇文章是对前几篇文章的一个总结,用我们学过的知识点(volatile/CAS/atomicInteger/BlockQueue/线程交互/原子引用)做一个生产者消费者的例子,看下边的代码,我们在main方法中,创建两个线程,来操作资源类,import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;...

2020-07-14 14:10:27 173

原创 synchronized和Lock有什么区别,用新的lock有什么好处,举例说说

回答这个问题,我们要从五个方面说起原始组成synchronized是关键字属于jvm层面monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步块或方法中才能调用wait/notify等方法)Lock是具体类(java.util.concurrent.locks.Lock)是api层面的锁使用方法synchronized不需要用户去手动释放锁,当synchronized代码执行完后系统会自动让线程释放对锁的...

2020-07-10 12:35:10 219

原创 SynchronousQueue又叫零库存阻塞队列

SynchronousQueue,阻塞队列的一种,单个元素的队列,没有容量,与其他阻塞队列不同,SynchronousQueue是一个不存储元素的阻塞队列,每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然,也可叫做零库存阻塞队列,来一个demo,更加深刻的理解。import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;import java.util...

2020-07-08 15:24:11 152

原创 谈谈阻塞队列以及阻塞队列四种方法类型

队列的数据结构大家并不陌生,先进先出,先到先得,ArrayBlockingQueue 是一个基于数组的有界阻塞队列,次队列按FIFO(先进先出)原则对元素进行排序LinkedBlockingQueue 是一个基于链表结构的阻塞队列,次队列按FIFO(先进先出)排序元素,吞吐量通常要高于ArrayBlockQueueSynchronousQuere是一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插...

2020-07-07 16:41:12 3020

原创 Semaphore使用过吗

Semaphore,信号灯,也叫信号量,主要用于两个目的,一个是用于多个共享资源的互斥使用,另一个用于并发线程数的控制,大家想一个生活中的例子,我们开车去超市买东西的时候,首先要把车停到超市的停车场中,停车场的车位是有限的,假设停车场有3个停车位,来了6辆车,总会有3辆车先抢到,后面的3辆车等待前边的3辆车买完东西开走后,才可以进入停车场停车,也就是java中多个线程抢多份有限的资源import java.util.concurrent.Semaphore;import java.util....

2020-07-06 12:07:50 149

原创 CyclicBarrier做加法CountDownLatch做减法

CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障,它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await方法。举一个生活的例子,正常情况下,我们平时工作中开会,只有等人到齐后,会议才可以开始,我们来一个demo。import java.util.concurrent.BrokenBarrierException;import j...

2020-07-05 10:28:31 207

原创 原来CountDownLatch是用于线程间的调度

学一个类,或者一个方法,我们就从先从它的字面意思说起,CountDownLatch,倒计时,大家都看过发射火箭的最后阶段吧,10,9,8...,0发射,

2020-07-04 09:46:04 146

原创 java的独占锁(写锁),共享锁(读锁)和互斥锁以及ReentrantReadWriteLock用法

java中的锁有15种之多,但是有很多都是重复的,大的方面分为读锁和写锁,那今天我们就聊聊独占锁(写锁),共享锁(读锁)和互斥锁,独占锁呢,指该锁一次只能被一个线程所持有,对synchronized和ReentrantLock而言都是独占锁,那共享锁呢,指该锁可被多个线程所持有,对ReentrantReadWriteLock而言,其读锁是共享锁,其写锁是独占锁,读锁的共享可保证并发读是非常高效的,读写,写读,写写的过程是互斥的,多个线程同时读一个资源类没有任何问题,但是在这个高并发,大数据的互联网时...

2020-07-01 17:13:43 512

原创 聊聊java的自旋锁以及手撸一个自旋锁

前几天的一篇文章,谈到UnSafe类CAS思想时,说的其原理就是自旋锁(spinlock),那什么是自旋锁呢,从字面解释就是自我旋转,是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点就是循环会消耗CPU,下边这段代码是UnSafe的实现CAS的源码,使用do...while实现了一个自旋锁,循环着获取主内存中的值。 public final int getAndAddInt(Object o, long offset, int ...

2020-07-01 12:50:16 241

原创 java锁之公平,非公平锁,可重入锁(递归锁)

什么是java的公平锁呢,就是很公平,在并发环境中,每个线程在获取锁时会先看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,负责就会加入到等待队列中,以后会按照FIFO的规则从队列中取到自己,是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到,非公平锁呢,是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,有可能会造成优先级反转或者饥饿现象,非公并锁比较粗鲁,上来就直接尝试占有锁,如果并发包中Reentrant...

2020-06-30 13:18:35 170

原创 集合类不安全之并发修改异常以及怎样解决

我们先通过一段代码来看看什么是并发修改异常import java.util.ArrayList;import java.util.List;import java.util.UUID;public class ContainerNoSafeDemo { public static void main(String[] args) { List<String> lists = new ArrayList<>(); // ...

2020-06-29 13:27:48 446

原创 CAS是什么它的优缺点以及怎样解决ABA问题

什么是CAS呢,它的全称是Compare And Swap,比较并交换,它是一条CPU并发原语,它的功能是判断内存中某个位置的值是否为预期值,如果是预期值则更改为新的值,这个过程是原子的,说到CAS,不得不说JUC包下的原子类,我们先来看一个demo。import java.util.concurrent.atomic.AtomicInteger;public class CASDemo { public static void main(String[] args) { ...

2020-06-24 14:23:30 1172

原创 对volatile的理解以及代码演示

volatile是java虚拟机提供的轻量级的同步机制

2020-06-21 16:59:22 274

原创 MySQL的多表关联查询SQL语句优化实例

今天我们动手练习下,两个表或多表结合查询的SQL语句是怎样优化的。还是我们先创建两个表和准备一些数据create table teacher( tid int(4) primary key, cid int(4) not null);insert teacher values(1,2);insert teacher values(2,1);insert teacher values(3,3);create table course( cid int(4) , ...

2020-06-12 13:48:03 1343

原创 MySQL的sql语句单表索引优化的实例

上一篇我们简单介绍了,MySQL数据库的逻辑分层,索引以及执行计划的执行和分析执行计划结果,今天我们通过一个小栗子,来讲解下单表查询索引优化的实例。 首先我们创建个临时表,以及准备几条数据。create table book( bid int(4) primary key, name varchar(20) not null, authorid int(4) not null, publicid int(4) not null, typeid int(4) not...

2020-06-10 12:53:15 172

原创 MySQL的逻辑分层,索引介绍和怎样看执行计划

每个javaweb项目中,都不会离开写sql语句,打开一个电商网站,商品的查询,用户的管理,库存的更新等,都涉及到sql语句,当一个商品的查询sql语句执行较慢,一两分钟都不能返回结果的话,直接回影响到用户的体验效果,严重的话,会流失客户,这里涉及到sql语句的优化,我们首先了解下使用索引优化 索引,我们可以理解为一个字典的...

2020-06-10 10:16:05 189

原创 SpringSecurity分布式认证即SSO单点认证

并发访问量不高的系统中,我们通常将应用部署到一台app服务器,为用户提供服务,当用户使用用户名和密码登录完成后,会把用户的信息会保存到session中,大家也都知道,session是保存在app服务器端的,这时,随着业务量的增长,一台服务器已经不能很好的为用户服务了,我们这时会横向扩展,比如增加服务器数量,使用负载均衡等,这时,将同一个应用部署到两台服务器时,A用户在A服务器中登陆了,session信息被保存在服务器A,当用户关闭页面,A用户再访问时,请求被负载均衡到B服务器时,由于用户A的登录状态...

2020-06-03 16:42:05 1297

原创 SpringSecurity基于数据库认证以及权限管理

上一篇对SpringSecurity做了基本介绍,以及做了一个基于内存用户认证的小栗子,在企业开发中,都会连接数据库来做认证,那怎么来基于数据库做认证呢,今天我们就动手练习下,我们使用的环境呢,springboot+springsecurity+mybaits+mysql来搭建。 没有mysql数据库环境的小伙伴,可以看下我之前的文章,来安装mysqldocker安装mysql 安装完数据库后,创建一个名为SpringSecurity的schema数据库,导入两个表,一个...

2020-06-02 13:29:22 815

原创 SpringSecurity基本介绍以及简单入门(内存用户认证)

每个项目中,都会涉及的安全,例如跨域攻击,跨站脚本攻击等,现在比较流行的安全框架呢,有spring家族的SpringSecurity,和apache的shiro,每个框架都有自己的优点,今天我们来开始实战springsecurity,springsecurity...

2020-06-01 09:23:30 496

原创 mysql的常用命令(持续更新)

显示所有数据库show databases;创建数据库create database 数据库名;选择数据库use数据库名;创建表create table sys_user ( id(11) int not null ,username varchar(12) not null ,password varchar(120) not null ,status int(1));...

2020-05-28 09:30:22 138

空空如也

空空如也

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

TA关注的人

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