自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 问答 (1)
  • 收藏
  • 关注

原创 SpringBoot+Mybatis+Druid多数据源切换

DataSourceMap(设置DataSourceMap,成员变量dbMap保存数据源信息,初始化时将配置文件的数据源db1和db2保存如dbMap中)如需要动态添加数据源,只需要实现put和remove方法,对成员变量dbMap里面的数据源进行动态的添加和删除即可。DataSourceUtil(为保证多用户情况下切换数据源不受干扰,使用ThreadLocal保存数据源名)本文介绍如何使用mybatis实现多数据源切换,并实现动态数据源的添加和删除。application.yml文件配置数据源相关信息。

2022-08-22 15:36:31 680 1

原创 读写锁 ReentrantReadWriteLock 以及应用

当读操作远远高于写操作时,这时候使用读写锁让读-读可以并发,提高性能类似于数据库中的 select … from …lock in share mode提供一个数据容器类内部分别使用读锁保护数据的read()方法,写锁保护数据的write()方法基本使用@Slf4j(topic = "c.DataContainer")class DataContainer { private Object data ; private ReentrantReadWriteLock rw = ne

2021-09-01 15:57:16 252

原创 Java Join的原理

说到join的原理,这里就要说一下同步保护之暂停这个模式了,这个模式用于一个现在等待另一个线程的执行结果。要点有一个结果需要从一个线程传递到另一个线程,让他们关联同一个Guardedobject如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者消费者)-JDK中,join的实现、Future的实现,采用的就是此模式因为要等待另一方的结果,因此归类到同步模式public class GuardedObject { // 结果 private Object re

2021-09-01 15:45:15 334

原创 ThreadPoolExecutor解析

创建一个线程池:BlockingQueue<Runnable> taskQueue = new ArrayBlockingQueue<>(100) ; ThreadPoolExecutor pool = new ThreadPoolExecutor( 1, // corePoolSize 2, // maxPoolSize 10, // keepAliveTime

2021-08-09 09:56:50 158

原创 在xshell上搭建springboot项目,关闭xshell仍可以访问

在xshell上搭建springboot项目,关闭xshell仍可以访问 第一步:项目配置新建一个application-prod.properties 配置文件,用于配置发布环境下的环境配置。首先,需要修改springboot项目中的相关配置,如下的数据库配置信息,数据库用户名和密码需要改成你的服务器的数据库用户名和密码,localhost需要改为你的服务器的主机ip名称其次,项目中的目录路径,文件路径,也需要改为服务器的linux目录结构下的文件路径,比如application.p

2021-06-01 18:35:16 462

原创 阿里云解决xshell无法远程连接主机的问题

xshell突然无法连接远程主机服务器我用的是阿里云,前阵子突然无法登录服务器了,不知道什么原因,当时一下子开了三四个窗口结果就突然进不去了。然后去问了阿里云的在线客服,太鸡肋了,啥也不是,最后给我发了一个错误排查的文档,我按照文档首先ping一下远程主机证明主机通信没有问题。接着按照步骤测试了一下端口号,这里需要先安装telnet客户端打开控制面板 - > 程序 - > 程序和功能 - > 启动和关闭Windows功能如下:勾选telnet客户端旁边的选框,等待安装即可。

2021-06-01 18:11:40 438

原创 linux centos7常用命令大全

常用的Linux命令目录管理绝对路径:绝对路径的路径全称是:C:\ProgramData\360safe\xxx.xx。比如说360safe目录下,那这个xxx.xx文件,对应我们的相对配置/xxx.xxcd :切换目录返回上一级目录 : cd …(…表示上一级)./ :当前目录pwd :显示当前用户所在的目录cp: 复制文件 格式:cp 需要复制的文件名称 复制到的目的文件夹。rm :移除文件或者目录-f 忽略不存在的文件

2021-05-30 21:45:24 940

原创 windows 安装mysql

安装mysql步骤和遇到的问题官网下载mysql地址:https://dev.mysql.com/downloads/mysql/如下图选择第一个点击download下载之后解压,目录结构是这样的:注意原始的解压文件是没有my.ini 文件的,需要自己手动创建3. 在my.ini 文件中写入:[mysqld]port=3306basedir=你的mysql安装路径datadir=你的msql安装路径\datamax_connections=200max_connect_err

2021-05-14 21:36:55 70

原创 Java集合的几种遍历方式及区别

1 普通数组遍历普通数组遍历就是普通的for循环遍历 如下:public static void main(String[] args) { List<Integer> list = new ArrayList<>() ; list.add(1) ;list.add(2) ;list.add(3) ;list.add(4) ;list.add(5) ;list.add(6) ; for(int i=0;i<list.size

2021-04-24 16:53:51 535

原创 2021春招常见面试题

这几天一直在准备面试,所以整理了一些面试题,希望对要找工作朋友的能有个参考和学习的方向,以下有一些是我自己实际遇到的面试题,还有一些是别人的面试题,我都整理出来了!Java并发相关这个是问我问的最多的一类面试题了,可能面试官真的很喜欢问并发把,废话不多说,看题:为什么要有并发引入多线程有什么问题什么是共享变量,内存模型了解吗怎么保证线程安全乐观锁和悲观锁了解吗,什么时候用,为什么要这么用volitle关键字什么作用,一般什么时候用,用了就线程安全嘛?让hashm

2021-03-16 11:50:10 667

原创 TCP和UDP

TCP和UDP的区别这篇博客和大家来说说TCP和UDP的区别把!首先我们先从计算机网络的角度来阐述一下进程之间的通信问题:从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。两个主机之间的通信其实就是两个应用进程之间的通信,计算机中的进程用进程标识符:端口号来

2021-03-07 20:40:19 249

原创 类加载器

类加载器作用:加载Class文件。加载,初始化(Student Class)----》实例化(new)对象都是保存在堆中的,而我们使用的对象其实是堆中对象的引用,地址虚拟机自带的加载器启动类(根)加载器扩展类加载器应用程序(系统类)加载器类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:Loading(加载)、Verification(验证)、Preparation(准备)、Resolution(解析)、Initialization(初始化)、Using(使用)和U

2021-03-04 13:01:09 100 1

原创 String类源码解析

String类源码解析首先来看一下String类的定义:public final class String可以看到这是一个被final关键字修饰的类,这就意味着String类不能够被继承,里面所有的方法都是final方法。我们常说String类是线程安全类,我们知道线程安全类有两种(一种是无状态类,一种是不可变类),String类是不可变类。public final class String implements Serializable, Comparable<String>, C

2021-03-04 11:23:28 135 1

原创 安装Oracle时 [INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法!

安装Oracle时 [INS-30131]执行安装程序验证所需的初始设置失败(无法访问临时位置)解决方法!百度了解决方法都是什么共享c盘,如下:解决方案1:(验证未解决)C:\Users\Administrator>net share C=C:C=C:C=C:C 共享成功。C:\Users\Administrator>net use \localhost\c$命令成功完成。共享了老半天并没有解决问题,于是,我开始从报错的问题下手:报错信息说:没有找到exectask,于是,我开

2021-03-03 16:19:16 747 1

原创 synchronized锁升级过程(无锁->偏向锁->轻量级锁->重量级锁)

synchronized锁升级过程(无锁->偏向锁->轻量级锁->重量级锁)锁的级别从低到高:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁首先,我们来看一下Java对象的组成结构:对象头+成员变量其中Mark Word结构为:biased_lock表示是否为偏向锁,age表示对象在新生代中经历垃圾回收的次数。如果为偏向锁,那么thread参数表示该线程id对应的线程拥有这把锁一个对象创建时:如果开启了偏向锁(默认开启),那么对象创建后,ma

2021-03-03 16:02:33 724 1

原创 代理模式(反射)实现SpringAOP

利用Java的动态代理实现SpringAOP的逻辑我们需要了解两个类:Proxy:代理,InvocationHandler:调用处理程序Proxy提供了创建动态代理类和实例的静态方法/** * 获取动态代理对象 * newProxyInstance(ClassLoader loader, 类<?>[] interfaces, InvocationHandler h) * 返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。 *

2020-10-15 15:11:23 177

原创 使用注解和反射实现SpringIoC容器(简洁版)

使用注解和反射实现SpringIoC容器(简洁版)1、实体类public class User { private Integer id ; private String name ; private Integer age ; public User(Integer id ,String name, Integer age) { this.id = id ; this.name = name; this.age = age

2020-10-13 14:54:18 492

原创 tomcat的下载和配置(idea版)

1、首先下载安装tomcat,可以到官网上面下载,我下的是tomcat9.0.30.exe,安装步骤:点击next点击 I Agree点击next端口号选择8080,用户名密码默认为空,点击next。安装位置我选择了默认位置。2、idea配置tomcat打开idea,选择Run->Edit Configurations,会出现下面的框框,选择左上角的+号如下图:然...

2020-02-02 16:34:19 1070 1

空空如也

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

TA关注的人

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