自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

至尊宝

大圣此去欲何,踏南天碎凌霄,若一去不回,便一去不回.

  • 博客(234)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Spring的静态代理与动态代理

简述AOP是可以横向扩展功能的,能够在不修改原来代码的前提下实现功能扩展,AOP的实现原理即是动态代理+反射。 为什么要使用代理1.什么是代理  代理即是将被代理对象进一步封装后,隐藏被代理对象,在不修改被代理对象代码的前提下完成一些额外的处理。2.场景描述  有一个BookService类,其中有一个add方法,现在想在执行hello方法之前打印一句话,例如是打印”...

2018-06-26 23:34:00 20443 57

原创 Java反射机制

简述Spring Ioc的原理是工厂+反射,所谓IOC即是控制反转,控制反转是一种思想,一个类想要完成一个功能,非常常见的是需要和其他对象进行合作完成,例如,分层系统中,service层调用dao层,则需要在service层new出一个dao层对象,接着使用,这种是较强的依赖管理,耦合强,一旦dao层做了更改,使用到dao层对象的都需要跟着改动,还有一种情况是多态中的使用,例如有一个水果接口,...

2018-06-25 14:54:06 19016 11

原创 Zookeeper在Dubbo中的作用及Zk集群的选举原理

Zk在Dubbo中的作用  zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是consumer和provider在启动的时候就和注册中心建立一个socket长连接。provider将自己的服务注册到注册中心上,注册中心将可用的提供者列表notify给consumer,consumer会将列表存储到本地缓存,consumer选举出一个要调用的提供者,去远程调用。   如果...

2018-06-18 18:04:22 33321 14

原创 Mycat+Mysql主从复制实现双机热备

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan一、原理简介 主从复制原理:Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。 双机热备概念:...

2017-12-15 21:11:50 25918 25

原创 本地搭建dubbo+zookeeper环境

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 在开发过程中使用到dubbo+zookeeper,而dubbo和zookeeper是部署在服务器上的,一旦环境出了问题,会大大影响开发进展,有时回家想要再调一会程序,又会因为公司的VPN还不是很成熟,所以就不能调代码了,but,这怎能阻挡我们对代码的热情,在本地搭建一套环境,...

2017-08-11 19:48:47 40550 43

原创 springboot项目生产环境禁用swagger

我也是百度的,只不过怕自己之后再次使用时还需要去查,就记录一下。建立类Swagger2Config,使用@Profile区分,配置文件中配置spring.profiles.active=dev,test表示在dev和test环境开启,prod环境不开启使用@ConditionalOnProperty,配置文件中配置swagger.enable =true表示开启swagger文档,再生产环...

2019-03-31 21:39:22 3829 2

原创 记一次日志优化引发的性能提升

背景阐述:1. 程序中有统一的拦截,入参,出参,请求时间的日志打印2. 接口是一个批量处理接口,一次传入200个id,然后循环处理业务,最终返回,业务接口是A循环调用B方法,其中B方法还会被一个调用量较高的接口调用,高峰期qps达到16003. 在B方法中有三种处理方式,首先,从本地缓存取,取不到数据则从redis中取,从redis取不到再从DB中取,每一种方式都打印一行日志,因此无论命中哪...

2019-03-24 20:25:48 423 3

原创 【2018.3-2018.9】年中总结:直挂云帆济沧海

1. 回顾上一次总结2018年2月份给自己定下计划如下,回顾这半年,自己更加的成熟稳重了,自己的学习计划也在稳步进行中,计算机行业,发展真的是太迅速,一旦停下学习的脚步,想再追上趋势的步伐就太难咯,这半年也在不断丰富自己的技术栈,写博客的数量也比之前要多很多,半年时间读的大多是技术类书籍,之后要扩展一下自己的知识面:思考问题时,心胸开阔,处事不惊,落落大方将思想和技术都提高层次,认真落...

2018-08-29 10:32:47 16866 12

原创 List遍历,边查询边删除

1.在对集合遍历时边查询边执行添加或删除操作会报错:java.util.ConcurrentModificationException,原因是集合引用和迭代器引用在同时操作元素,通过集合获取到对应的迭代器后,在迭代中,进行集合引用的元素添加,迭代器并不知道,所以会出现异常情况ArrayList<Integer> list = new ArrayList<Integer>...

2018-08-26 20:19:59 19137 3

原创 HashMap基础问题总结

1.前言2.导图总览3.参考文章4.HashMap5.ConcurrentHashMap6.hashmap线程不安全的原因7.如何判断一个链表有环8.判断两个单向链表是否相交,如果相交,求出交点。9.判断有环的链表入口点1.前言  近期看了一些HashMap方面的内容,主要对比的是1.7和1.8版本的,由于网上都有,我也是查阅了一些博客和技术公众号,特此将自...

2018-08-19 17:54:56 16825 3

原创 常用linux文件操作命令

1.开关机2.文件2.1查看文件夹下的文件2.2文件类型2.3创建文件夹2.4创建文件2.5删除指定名称目录2.6创建文件2.7删除文件2.7移动文件2.8copy文件3.目录操作3.1复制删除需要添加-r命令符4.查看文件内容5.查看历史命令6.重定向7.管道8.find命令1.开关机立即关机: shutdown -h now...

2018-08-12 20:29:44 19189 5

原创 分布式事务几种实现方式

1.分布式事务产生的背景2.X/OpenDTP事务模型3.Mysql事务处理过程4. 2PC协议5.3PC协议6.分布式事务的实现- atomikos7.MQ实现最终一致性7.1消息重复消费解决方案8.LCN实现1.分布式事务产生的背景根据业务需求需要对业务进行拆分,例如将一个大应用拆分成用户模块,订单模块,商品模块,每个模块都有自己的数据库,在用户...

2018-08-05 22:51:00 42341 3

原创 分布式锁原理及实现

[TOC] 一、为什么需要锁?多任务环境任务都需要对同一共享资源进行写操作对资源的访问是互斥的二、分布式锁方案比较三、Redis实现分布式锁1. 单个JVM下实现代码块加Synchronized锁或者Reentrantlock锁2.分布式下实现if(setnx(key,1) == 1){ expire(key,30) ...

2018-08-05 22:49:32 22413 3

原创 maven工程打版本

一、 打版本SNAPSHOT->RELEASE二、 当前代码还原成SNAPSHOT版本一、 打版本SNAPSHOT->RELEASE将项目中的所有SNAPSHOT更换为RELEASE① 项目的根目录下执行命令: cmd —>mvn versions:set -DnewVersion=1.0.2(可替换成要打的版本) ②确定无误后,将对应的jar...

2018-07-29 17:37:23 18324 6

原创 登录功能:md5加密与分布式Session

1.依赖jar包<!--md5工具类--> <dependency> <groupId>commons-codec</groupId> <artifactId&gt

2018-07-16 11:56:35 19206 6

原创 jemeter的使用

1.创建线程组 设置多少个并发线程,如何并发,执行几次 2.配置元件—>HTTP请求默认值 这里配置整个压测过程中的默认值,在这里配置了,在之后的配置项中就不需要配置了 3.新建一个Sampler—>HTTP请求 设置请求的方法路径 4....

2018-07-13 23:04:07 20402 3

原创 SSM框架搭建(三)--整合p6spy

描述普通情况下,控制台打印出的sql是带?的,开发人员在自己调试的过程中遇到bug是再常见不过了,如果想看一下程序打出来的sql,发现参数的位置都是?,是不是很不爽,若想在数据库中执行sql,还需要手动修改sql的参数,真是麻烦,使用p6spy可以将sql格式化然后打出,打出的sql不再是带有?的,而是可以直接拷贝到数据库执行的。整合步骤如下: 添加jar包依赖 在service层...

2018-07-09 20:52:18 18176 6

原创 SSM框架搭建(二)--整合swagger

描述用的多的简单方式是使用postman进行接口测试,这种测试需要开发人员自己输入url,参数等信息,使用swagger项目启动后通过swagger界面就可直接看到对应的controller及其下的接口,例如一些需要输入某个实体的参数直接就给出了model,只需要修改参数即可测试,方便,快捷。 添加jar包依赖在web层的pom文件中添加swagger的jar包依赖&lt...

2018-07-09 16:20:48 19171 3

原创 SSM框架搭建(一)--整合mybatis,druid,dubbo

建立maven工程 - zh-plat为项目名称 - zh-root为管理jar的工程 - zh-tool为项目中公共用到的工具类 添加jar包依赖 1.日志相关slf4j-apislf4j-log4j12log4j2.web层相关依赖: spring相关spring-web(@Controller) spring-context(@Req...

2018-07-09 15:55:25 18069 5

原创 安装新版git报错:autoconf: command not found

1.下载gitwget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz2.执行安装 $ tar -zxf git-2.9.5.tar.gz $ cd git-2.0.0 $ make configure $ ./configure --prefix=/usr $ make ...

2018-07-07 09:46:28 29300 4

原创 Spring MVC上传

简述项目中上传和下载是非常常见的功能,如果项目中使用的是Spring MVC,那么实现上传和下载真是很简单咯。 上传1.添加相关jar包的依赖<dependency> <groupId>org.springframework</groupId> <artifactId&

2018-07-03 10:26:09 17493 4

原创 Spring MVC从浏览器访问到返回到页面的流程

概念简述Spring MVC是一个模型-视图-控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果。 Spring MVC项目想要正常运行就需要有一个前端控制器(DispatcherServlet),需要在web.xml中进行配置,其他的例如,处理器映射器,处理器适配器和视图解析器...

2018-07-02 17:00:31 20557 5

转载 Spring事务管理(详解+实例)

本篇博文转自:https://blog.csdn.net/trigl/article/details/50968079#t11 写这篇博客之前我首先读了《Spring in action》,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下...

2018-06-27 15:38:39 18849 8

原创 Spring的AOP简单使用

相关概念1.连接点(Joinpoint):类里面哪些方法可以被增强,这些方法称为连接点 2.切入点:在类里可以有很多的方法被增强,实际增强的方法称为切入点 3.通知/增强:增强的逻辑,称为增强前置通知:在方法之前执行后置通知:在方法之后执行异常通知:方法出现异常最终通知:在后置之后执行环绕通知:在方法之前和之后执行4.切面(Aspect):增强具体方法的过程称为切面...

2018-06-21 15:12:41 18736 6

原创 Spring的bean管理

简单描述在未使用IOC管理对象时,想要使用某个对象需要通过new关键字创建对象实例,这种实现方式是耦合性较强的实现方式,使用了Spring提供的IOC机制管理,那么现在想获得bean该如何获取呢? bean实例化三种方式 以下例子的结构如下: 1.使用类的无参数构造创建创建一个HelloWorld类,使用默认的构造函数(无参构造)public class Hell...

2018-06-20 16:36:21 18623 9

原创 连接mysql数据库报错:java.sql.SQLException: The server time zone value

**背景** 项目使用的是springboot集成mysql,项目正常启动是不会报错的,当请求接口时报错如下:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configur...

2018-06-14 20:29:35 21543 3

原创 Redis管道--Pipeline

概念Redis客户端执行一条命令分为如下四个过程:发送命令命令排队命令执行返回结果 其中第一个和第四个称为执行一条命令的往返时间,Round Trip Time(RTT). Pipeline指管道技术,客户端允许将多个请求一次发送给服务器,过程中不需要等待请求的回复,服务端将结果都查回后,一次返回给客户端,通过这种方式能够提高吞吐量 对比分析Redis提供了批量...

2018-06-11 15:20:33 20253 4

原创 Java使用Jedis:Connection refused解决方案

问题今天想自己做个demo,使用jedis连接自己安装的redis发现报错了,本能反应是查看防火墙,查完防火墙后开放端口,依旧不行,原来还需要修改一些redis本身的配置。redis配置文件中有一个bind配置,指定哪些ip可以连接到redis数据库,默认配置为127.0.0.1。具体修改看解决方案。 代码如下: public static void testUnUsed(){ ...

2018-06-11 14:39:52 20707 3

原创 Redis五种数据类型

Redis简介悲观锁:在每次去拿数据的时候总是认为别人会修改数据,因此,在每次去拿的时候都会加锁,其它人想来拿就只能被阻塞。 乐观锁:心很大,每次去拿数据的时候都不认为别人会修改,在取数据的时候不会加锁,乐观锁可以理解为一种检测机制,只是在更新数据的时候会判断一下别人是否已经修改了,如果已经修改了就放弃此次的更新操作,进行重试。检测方式有两种:一种是版本号,一种是时间戳,乐观锁适用于读多的场...

2018-06-07 21:38:32 44641 2

原创 java8特性--list集合根据多个字段去重

项目需求描述出于项目需要,有一个list,实体包含多个字段,当其中两个字段相同均相同时,就认为list中的两条记录是一样的,本来想通过分组实现,java8的分组只提供根据一个字段分组,只好另寻他路,java8有一个collectingAndThen可以根据多个字段去重,因为我们的需求是可以去重之后操作,因此采用这种方式。分组及去重分组classEntities.stre...

2018-05-28 16:02:58 50413 22

原创 Mysql(二)--索引使用及优化

索引简介索引是什么?索引是类似于书的目录这样的结构吗?可以这么讲,但是到底索引是什么,索引是排好序的快速查找数据结构。索引最常用的类型是BTree类型,这种类型同样可以体现出索引是排好序的快速查找数据结构,没有索引之前要想查找符合某个条件的数据就需要全表扫描,这样性能是非常低的,当有了BTree类型,可以按照一定的规则进行查找,如下是BTree结构: 索引分类1. 单值索引 一...

2018-05-22 18:05:56 22535 14

原创 Mysql(一)--EXPLAIN的参数解析及简单应用

Mysql逻辑架构本篇博客的主题是explain查询分析器的使用,在写这个之前非常有必要了解一下mysql的查询分析器,才不至于,在后期了解完一些mysql优化原则后与一些结果产生歧义。 1.最上层不是mysql独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构,比如,连接处理,授权认证,安全等 2.第二层包括了mysql的许多核心功能,例如,查询解析,分析,...

2018-05-21 17:46:06 25293 16

原创 Java多线程学习笔记(七)--线程池

什么是线程池为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用,线程池是来管理线程的,线程池中总有那么几个活跃线程,当使用线程时可以从池子中随便拿一个空闲线程,当完成工作时,不用立即关闭线程,而是将线程还给线程池,方便下一个要使用线程的任务,有了线程池后,创建线程变成是从线程池中拿线程,销毁线程时变成是将线程还给线程池继续管理。 这种场景非常像在开发中连接数据库,有一个数据库连...

2018-05-19 17:47:54 20495 12

原创 Redis持久化机制和线上环境容灾备份与恢复

两种持久化机制Redis支持RDB和AOF两种持久化机制,持久化功能有效的避免因进程退出造成的数据丢失问题。redis的安装在上篇博文中已经写过了,这篇文章主要用到的linux目录分别如下: a./etc/redis 该目录下存放过的是redis的配置文件 b./var/redis/6379/ 该目录下存放的是redis的持久化文件 c.在/usr/local目录下创建redis...

2018-05-14 11:55:46 26436 11

原创 多线程学习笔记(六)--重入锁

重入锁重入锁可以完全替代synchronized关键字,jdk5的早期版本中,重入锁的性能远远好于synchronized,在jdk6之后,jdk在synchronized上做了大量的优化,使得两者的性能差距并不大。 ·重入锁简单使用 method1拿到锁之后执行业务代码,method2需要等待method1释放锁资源,从而保证了安全性public class UseReentr...

2018-05-12 11:11:15 20394 9

原创 多线程学习笔记(五)--Volatile关键字

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan实现了变量在多个线程间可见。我在网上看了许多博客后,发现总结的都差不多,Volatile的几点特性也讲解的听清楚,所以我就不再重写,在此记录以下自己的理解。下图来自网络:1.线程在使用某个变量时,会从主内存读到线程工作内存,当没有加volatile关键字时,一旦线...

2018-05-10 08:40:13 20296 8

原创 项目应用RabbitMQ简单配置

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan前言至于rabbitMQ的安装我就不写了,近期由于项目需求,使用RabbitMQ异步处理数据,为了数据安全,加入死信队列概念保证数据的简单安全性。这里的安全主要是,超时,处理异常这些内容,一旦程序拿到队列中的数据,处理过程中出现了异常,非常有可能导致数据的丢失。配置...

2018-05-09 19:59:17 21239 13

原创 生产环境redis安装及启动方式

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan前言之前写过一篇博客,是如何安装和redis单机版和集群版,启动方式也是简单的启动一下,生产环境下,总不能时时刻刻提心吊胆每天检查一下redis是否启动着呢?服务器有没有意外重启等,所以在生产环境上需要更加严格,通过自动化脚本,设置开机自启。安装第二种简单的安装方式,安...

2018-05-09 09:42:10 21468 7

原创 Java虚拟机学习笔记(二)--垃圾回收

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan如何判定哪些对象为垃圾对象引用计数法实现方式: 在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,当引用失效的时候,计数器的值就-1,当计数器的值为0的时候,代表这个对象时垃圾对象,可以执行回收优点: 效率高缺点:...

2018-05-07 21:17:59 20160 7

原创 Java虚拟机学习笔记(一)--运行时数据区域

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan前言Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成若干个不同的数据区域。程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器 程序计数器处于线程独占区,Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的...

2018-05-07 10:29:45 20110 9

空空如也

环游记的留言板

发表于 2020-01-02 最后回复 2020-02-16

空空如也

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

TA关注的人 TA的粉丝

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