自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redistemplate使用Pipeline操作redis集群

管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline 通过减少客户端与 redis 的通信次数来实现降低往返延时时间,而且 Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。RestTemplate是Spring提供的用于访问Rest服务的客户端。

2022-12-11 16:32:34 3336 1

原创 orcale的角色与权限

一、前言orcale的角色和权限,对于管理orcale起着十分关键的作用。那么orcale是如何管理角色和权限呢?它们之间有什么区别?当我们创建orcale用户的时候,它是没有任何权限的(包括登录连接orcale的权限),如果要执行某些操作,只能先授予某些系统的权限;但是权限在orcale中有很多种,如果每个新建的用户都要去授予特定的权限,或者随着时间的推移,需要对一些用户的权限进行调整,如果此时要调整的用户量很大的时候,就会很费时间。为了简化权限的管理,orcale使用了角色来绑定权限,每个角色对应

2021-07-27 21:46:48 403

原创 常见的网络攻击(CSRF 和 XSS)

一、前言二、CSRF跨站请求伪造,简单地说,就是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过(通常指定是用户登录,且网站保留登录信息)的网站并运行一些操作(如发邮件,发消息,甚至财产操作),由于浏览器曾经认证过,因此被访问的网站会认为是真正的用户操作而去运行,这主要利用了web中用户身份认证的一个漏洞:简单的身份验证只能保证请求来自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。CSRF攻击过程如下:用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;2

2021-07-22 10:53:21 610

原创 HTTP协议的 “无连接,无状态” 特点

一、HTTP协议超文本传输协议(HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应,请求和响应消息的头以ASCII形式给出,而消息内容则具有一个类型MIME的格式。特点:1、支持客户/服务器模式2、简单快速3、灵活4、无连接5、无状态无连接指的是限制每次连接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,即断开连接。特点:请求时建立连接,请求完释放连接,以尽快将资源释放出来给其他客户端,适用于

2021-07-19 16:03:30 3363

原创 IDEA整合SVN及常见问题

一、前言SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。二、配置IDEA配置svn,首先打开File->Settings->Plugins,下载Subversion插件之后File->Settings->Version Control->Subversion,下载Subversion插件,配置见图(Path to subversion ex

2021-07-19 11:36:46 2348

原创 Java中的IO流种类

一、流的概念在Java中,流是从源头到目的地的字节的有序序列,存在于Java.io包中,称之为IO(输入输出流)流。IO流的特点:IO流用来处理设备间的数据传输;流的操作数据分为两种:字节流和字符流;流按流向分为:输入流和输出流;二、字节流和字符流首先明确“字节(byte)”和“字符(character)”的大小;1 byte=8 bit;1 char=2 byte =16 bit(Java默认UTF-16编码)字节流就是每次读取1字节的数据;字符流就是每次读取1字符(2字节)

2021-05-25 17:42:50 487

原创 java中基本数据类型运算的自动类型提升

一、前言java的基本数据类型:数值型(又分整数型和浮点型)、字符型、布尔型;1.整型:byte(1字节=8bit) .short(2字节) . int(4字节) .long(8字节)① byte范围:-128 ~ 127② 声明long型变量,必须以"l"或"L"结尾(由于小写的L容易与1混淆,所以一般都大写)③通常,定义整型变量时,使用int型④整型的常量,默认类型是:int型2.浮点型:float(4字节) .double(8字节)①浮点型,表示带小数点的数值② float表

2021-05-25 14:23:52 916

原创 关于利用POI导出excel表,不做任何操作直接导入,读取数据失效的问题

一、背景在项目开发中,经常会遇到导出数据到excel表和利用excel表批量导入数据的需求,最常用的是利用POI进行导出导入操作;二、遇到的问题这时候普遍会遇到一个问题:导出的excel表格,你不做任何操作,直接再把表格导进去,此时会获取不到表格里面的数据;小知识:关于excel表的单元格,一般默认是常规,常规的意思就是:excel表会根据你输入的内容,来给单元格设置类型,以下是单元格的类型当我们导出的时候,一般会调用 Cell.setCellType(CellType cellType),设置

2021-05-19 18:58:47 1295

原创 SpringBoot整合EhCache,并设置JMX监控

一、介绍EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存,主要面向通用缓存JavaEE和轻量级容器,它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序等特点。二、特性1.灵活性EhCache具备对象api接口和可序列化api接口,不能序列化的对象可以使用出磁盘存储外EhCache的所有功能,支持基于Cache和基于Element的过期策略,每个Cache的存活

2021-03-23 11:00:35 511

原创 RabbitMQ的核心对象

一、前言Channels一些应用程序需要多个连接到服务器,如果每次连接都要建立TCP连接,那样不但浪费资源,而且使得防火墙的配置变得十分困难。AMQP使用通道来实现多路传输,通道可以被认为是共享一个TCP连接的轻量级连接;客户端进行的每个协议操作都发送在一个通道上,每个通道的通信都是相互隔离,因此每个协议方法都携带一个通道ID,它是一个整数,被服务器和客户端用来区分方法该用于哪个通道;当一个连接被关闭时,它所属的所有通道都会被关闭;PS:Queue与Exchange的声明和绑定,都是在Channe

2021-01-12 19:45:51 246

原创 RabbitMQ的Queue详解;

一、前言Queue(队列)是RabbitMQ的内部对象,用于存储消息队列,并将它们转发给消费者;二、Queue队列队列跟交换机共享某些属性,但是队列也有一些另外的属性Name:队列的名称 Durable:是否持久化(重启rabbitmq之后,队列是否还存在)Exclusive:是否只被一个客户端连接使用,且当连接关闭后,删除队列AutoDelete:是否自动删除(当最后一个消费者退订后即被删除)Arguments:用来设置TTL、DLX、DLK等功能队列创建...

2021-01-12 16:00:18 5515

原创 RabbitMQ的Exchange详解;

一、前言RabbitMQ的Exchange,即交换机,是用来发送消息的AMQQP实体,通常交换机拿到一个消息之后,根据路由规则,路由到一个或零个队列;二、Exchange的类型AMQP 0-9-1 的代理提供了四种交换机:除交换机类型外,在声明交换机时还可以附带许多其它数据,其中比较常用的是:Name:交换机的名称Durable:是否持久化(重启rabbitmq之后,交换机是否还存在)AutoDelete:是否自动删除(当交换机把消息发送到与之绑定的消息队列后,是否删除交换机)Di

2021-01-07 21:35:21 2120

原创 RabbitMQ的Message详解

一、前言RabbitMQ的Meaasge,又称消息,是服务器与应用程序之间传递的数据,由Properties和Body组成, Properties可以对消息进行修饰,如消息的优先级、传输格式(如JSON)、延迟等高级特性,Body则就是消息体内容;二、Message的状态消息有三种状态:Ready:待消费的消费总数;Unacked:待应答(分配)的消息总数;Total:总数(Ready+Unacked);三、Message类由下图可以看出,Message类主要由properties

2021-01-07 15:38:54 12395

原创 dubbo的服务调用原理

一、前言在我们使用dubbo进行远程服务消费时,可以通过@Reference注解或dubbo:reference来配置引用的接口,最终会生成远程服务的代理类,转化成ReferenceBean,这样我们就可以像调用本地接口方法一样使用远程服务提供的功能;二、实现服务调用的类;ReferenceBeanpublic class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean, Applicati

2020-12-25 20:08:23 1217 1

原创 SpringBoot中,dubbo配置文件和类的初始化

@Order // LOWEST_PRECEDENCE Make sure last executionpublic class OverrideDubboConfigApplicationListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> { @Override public void onApplicationEvent(ApplicationEnvironmentPre

2020-12-21 15:30:02 1106

原创 Dubbo本地和远程服务暴露原理

五、AbstractConfigpublic abstract class AbstractConfig implements Serializable { static { legacyProperties.put("dubbo.protocol.name", "dubbo.service.protocol"); legacyProperties.put("dubbo.protocol.host", "dubbo.service.server.host")

2020-12-21 15:02:08 361 1

原创 操作系统中的BIO、NIO和多路复用器(SELECT、POLL、EPOLL)的演进和实现

一、前言1、计算机的硬件通常由CPU、内存、网卡、键盘、鼠标等组成;2、当计算机开机时,首先会运行一个内核到内存中,同时把内存划分为内核空间和用户空间,内核空间中指令引导CPU的执行,用户空间存放APP(软件);3、内核空间存在一个保护模式,就是用户空间的APP不能直接访问内核空间,生怕APP篡改内核中的指令,导致出现蓝屏;1、用户空间能间接访问内核空间?用户空间的APP如果想要访问硬盘的文件,必须经过内核空间,但由于保护模式,导致不能直接访问,这时候系统提供了中断和系统调用来解决;当AP

2020-12-16 14:38:56 434

转载 Linux中用java命令运行class文件提示“错误:找不到或无法加载主类”的问题分析

一、前言有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:二、why?其实原因很简单,我们忽略了2个细节。1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的;2.我们忽略了package的影响;1、第一个问题我们直接在CLASSPATH环境变量中加入“.:”即可。“.”的意思是搜索当前目录2、第二个问题类A和类B的唯一差别就是没有定义包名。我们的工程路径是D

2020-12-14 14:55:08 5222 1

原创 一看就明的Java的线程池

参考文档:Java的线程池

2020-12-04 16:09:21 147

原创 Java常见的几种集合类

一、前言集合类是Java数据结构的实现。它是java.util包中的重要内容,允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。二、Java集合类框架图三、Java集合类型Java集合框架主要包括两种类型的容器,一种是集合(Collection),另一种是图(Map)。一、Collection接口Collction接口有三种类型,分别是List,Set和Queue;List常用的实现类ArrayList、LinkedList、Vector;Set常用的实现类TreeSet

2020-12-04 15:23:29 6639

原创 Java的多线程和锁机制

一、前言进程:在内存中运行的应用程序,每个进程都有自己独立的一块内存空间。线程:进程中的一个执行任务单元,负责当前进程中程序的执行。二、Java中线程的分类java线程分为用户线程和守护线程1.用户线程:在Java程序中创建一个线程,它就被称为用户线程。2.守护线程:程序运行的时候在后台提供一种通用服务的线程,称为守护线程。2.1特点:当所有用户线程停止,进程就会停掉所有守护线程,退出程序。Java把线程设置为守护线程的方法:用户线程在Start之前,调用线程的serDaemon(tru

2020-12-03 17:38:23 319

原创 Java的锁机制分析

一、前言Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。二、锁的分类锁的分类目录:1.乐观锁VS悲观锁乐观锁:每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止,最常使用的是CAS算法(CAS算法原理);悲观锁:对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候回显加锁,确保数据不会被别的线程修改。Java中,Synchronized关键字和Lock的实现类都是悲观锁;

2020-12-03 17:36:36 277

原创 Tomcat的架构原理

一、前言Tomcat服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP程序的首选。同时它是运行在JVM中的一个进程,包含Web容器,相当于是Web容器和JVM之间的中间件。二、Tomcat的结构图Tomcat的顶层结构图:1、Tomcat中最顶层的容器是Server,代表着整个服务器,一个Server至少包含一个Service,用于具体提供服务。2、Service主要包含两个部分:Connector和Container。Tomc

2020-11-30 23:41:27 396

原创 MySQL的数据迁移

一、前言数据库的数据迁移是我们经常遇到的问题,如因磁盘空间不够、业务出现瓶颈、项目改造等原因。二、MySQL数据迁移常用的方法1、使用第三方迁移工具。2、数据文件和库表结构直接拷贝到新服务器,挂载到同样配置的MySQL服务下。3、数据库直接导出,拷贝文件到新服务器上,在新服务器导入。第一种方案的优点:时间占用短,文件可断点传输,操作步骤少。缺点:新旧服务器中MySQL版本及配置必须相同,可能引起未知问题。第二种方案的优点:设置完成后传输无人值守,自动完成。缺点:不够灵活,设置繁琐,传输时

2020-11-27 21:19:14 5191

原创 使用mysqldump命令备份docker中MySQL数据库中表结构和表数据

一、前言开发过程中,最怕的是遇到删库跑路的叼毛,那心情,你懂的!!因此,为了不让自己的拳头蠢蠢欲动,我们就要进行数据库的备份。二、使用mysqldump命令备份1、mysqldump命令比较灵活,既可以导出所有表结构和数据,又可以只导出表结构或数据1.1、查看当前启动的mysql运行容器 docker ps1.2、导出数据中所有的表结构和数据docker exec -it (容器名或ID) mysqldump -u (用户名)-p (密码) (数据库名)>(导出后文

2020-11-27 15:47:56 1252

原创 MySQL的数据备份和迁移

一、前言为了防止服务器宕机和人为的删库跑路,而造成数据丢失,我们通常需要对MySQL的数据进行备份。二、MySQL的数据备份1.docker中MySQL的数据备份我们都知道docker中运行的MySQL,是处于容器之中,数据也保存在容器里,一旦容器被删除,里面的数据就会丢失,因此我们要进行备份。方法如下:1.11、在linux中创建保存的文件夹mkdir /dokcer/mysql/data;1.12、进入docker容器中的MySQLdocker exec -it (容器

2020-11-27 15:09:47 1010

原创 docker开启mysql和SQLyog连接mysql

一、开启mysqldocker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql-name:容器名-e:配置信息,此处配置mysql的root用户登录密码-p:端口映射,主机3306端口到容器的3306端口二、查看运行情况docker ps 三、启动SQLyog连接docker中的mysql此问题一般是密码错误,解决如下1.进入docker容器的mysql客户端docker exec

2020-11-25 22:57:43 1231 3

原创 Redis分布式锁Redisson剖析

一、什么是Redisson1.Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid),它实现了分布式和可扩展的Java数据结构。2.它不仅提供了一系列的分布式的Java常用对象,还实现了可重入锁(Reentrant Lock)、公平锁(Fair Lock)、联锁(MultiLock)、红锁(RedLock)、 读写锁(ReadWriteLock)等,还提供了许多分布式服务。二、Redisson的宗旨促进使用者对redis的关注分离,从而让使用者

2020-09-26 15:43:57 449

原创 springboot整合mybaits,采用延迟加载

一、概述延迟加载:在真正使用数据时才发起查询,不用的时候不查询。也叫按需加载,懒加载立即加载:不管用不用,只要一调用方法,马上发起查询。在对应的四种表关系中:一对一,多对一:通常情况下我们使用立即加载一对多,多对多:通常情况下我们使用延迟加载二、Springboot整合,采取延迟加载1.首先,在配置文件上开启全局延迟加载2.mapper映射文件3.Pojo类4.mapper类5.service类6.Controller类7.执行方法,结果如下8.在service

2020-09-06 16:16:44 1403

原创 Mybatis懒加载,返回JSON异常 Could not write JSON: No serializer found for class org.apache.ibatis

Service中的代码Pojo类在此我就不贴出mybatis的映射文件,直接进行测试,结果如下断点调试后,发现返回的实体类,多了个属性handler再实体类上加上@JsonIgnoreProperties(value = “handler”)测试结果原因mybatis采用懒加载的时候,会生成一个关联实体类代理对象,代理对象会生成一个handler属性,由于jackson序列化的时候,handler没有getter和setter方法,会报出异常,在关联的类上面加@JsonIgnoreP

2020-09-06 14:33:15 722

原创 Springboot中main启动配置原理

一、概述:众所周知,main方法作为程序的主入口,是启动程序的重要方法,是扫描,创建,加载所有组件的地方(配置类,组件,自动配置),那它的内部是如何运行?运行原理是如何?**欲知下文:**↓↓↓二、分析首先,想知道运行原理如何,需要关注几个核心的接口第一步:创建SpringApplication对象执行initialize方法第二步:运行run方法三、自定义事件监听机制,判断执行顺利是否正确ApplicationContextInitializer:1.用于在spring容器刷新之

2020-08-30 16:26:43 1710

原创 SpringBoot整合Mybatis和druid数据源

一、SpringBoot整合druid数据源pom.xml导入druidapplication.properties配置配置原理查看jar包,autocofigure底下有个jdbc包打开查看Datasource里面的自动配置@ConditionalOnProperty 通过判断值,决定是否注入,由于上面配置了DruidDataSource,此时会自动生成一个Druid的DataSource,并注入IOC中.通过测试,查看druid数据源是否配置成功输出结果:配置成功二、Spri

2020-08-28 20:57:11 284

原创 Springboot自动配置和自定义LocaleResolver(解析用户区域)

一、概述在项目开发过程中,可能会针对不同的国家的用户提供不同的视图,如针对日本用户提供一个视图,针对中国用户提供一个视图,这时候就需提供在同个页面上,能切换不同的语言,而LocaleResolver能够帮我们实现这种切换。二、LocaleResolver的概述LocaleResolver是spring提供的一个接口public interface LocaleResolver { //根据request请求获取locale Locale resolveLocale(HttpSe

2020-08-26 15:12:38 4476

原创 使用JdbcTemplate.queryForObject 的注意点

queryForObject 方法需要传入三个参数,第一个参数是该方法需要执行的SQL语句。 数组params为执行动态SQL时需要传入的参数,参数顺序与SQL中的参数顺序相同。 最后一个参数是返回值的类型(只能是基本数据类型的封装类,如Integer、String) 如果想使用自定义的类型的返回值:new BeanPropertyRowMapper(StoreDto.class) (当POJO对象和数据看表字段完全对应或驼峰式与下划线对应时BeanPropertyRowMapp

2020-08-11 15:05:04 1351

原创 java中在for循环里,外创建对象的不同

低级错误,在此立贴长记性. } @Test public void see(){ Jedis jedis = JedisUtil.getJedis(); Set<String> set = jedis.zrange("cotegory", 0, -1); List<Category> list = new ArrayList<>(); //循环外面创建category对象

2020-08-05 20:21:15 1097

原创 java动静态代理实现原理

一.什么是代理?代理是不直接通过代理类访问方法,而是通过被代理类的代理对象,间接访问代理类里面的方法。就好比:(代理类)相亲女——婚介所(代理对象)这种模式,直接通过婚介所(代理对象),知道相亲女的择偶要求(代理类)。1.代理有几种?一.代理分为静态代理和动态代理静态代理:是在编译期时,知道哪个是被代理的类,那么使用类的静态代理。动态代理:在编译期时,不知道哪个是被代理的类,那么使用类的动态代理。二.静态代理的实现创捷一个接口类(女孩)public interface Girl {

2020-07-01 20:30:32 271

原创 LinkedHashMap 源码分析(JDK1.8)

一.概述LinkedHashMap继承自HashMap,在HashMap基础上,增加一个双向的链表,记录了元素遍历和插入的顺序,在实现上,很多直接继承HashMap的方法,仅为维护双向链表重写部分方法。二.源码分析

2020-06-29 10:48:51 144

原创 ArrayList自动扩容机制(底层原理)

ArrayList简介ArrayList 是 java 集合框架中比较常用的数据结构。继承自 AbstractList,实现了 List 接口。基于数组实现容量大小动态变化。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。创建ArrayList集合时,若未指定容量,默认容量为0; //默认创建一个空集合 transient Object[] elementData; private

2020-06-15 11:26:44 2127

空空如也

空空如也

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

TA关注的人

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