- 博客(75)
- 收藏
- 关注
原创 MyBatis之Mapper.xml文件中parameterType,resultType,resultMap的用法
MyBatis之Mapper.xml文件中parameterType,resultType,resultMap的用法
2024-02-23 21:21:08 3318
原创 MyBatis之动态代理实现增删改查以及MyBatis-config.xml中读取DB信息文件和SQL中JavaBean别名配置
MyBatis 动态代理 实现增删改查 MyBatis-config.xml中读取DB信息文件 SQL中JavaBean别名配置
2024-02-08 20:28:04 1673
原创 重温经典struts1之DispatchAction完成一个Action中编写多个方法接收页面的增删改查请求
DispatchAction完成一个Action中编写多个方法接收页面的增删改查请求
2024-01-16 20:44:20 965
原创 重温经典struts1之ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息
ActionMessage(s)类结合html标签完成页面显示异常消息和正常提示消息
2023-12-26 11:34:24 1041
原创 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
原创 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关注的人