自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李泽昊

从事软件研发工作

  • 博客(91)
  • 资源 (5)
  • 收藏
  • 关注

原创 MongoDB分片环境下整体数据迁移解决方案

背景:这周请了几天假,25号早上来了,就开始搞MongoDB数据库分片集群环境的整体迁移,起初以为很容易,但是在迁移的过程中,遇到了各种问题。还好经过两天的研究,现在终于搞定!匆忙之中,整理了一下文档,由于网上关于MongoDB数据库迁移的文章较少,顾发表了一篇blog,希望后面的小伙伴少走弯路,快速上路! 一、部署架构图二、基础常识 1.路由服务器和分片服务器(单个副本集)认证

2017-05-26 17:39:32 9096

原创 shiro 权限框架认证和授权原理介绍

Shiro是一个安全框架,是Apache 的一个子项目。Shiro提供了:认证、授权、加密、会话管理、与Web集成、缓存等模块。

2016-12-20 19:28:02 15024 2

原创 实现MongoDB多数据源的自动切换

实现MongoDB多数据源的自动切换实现原理1、通过参考Spring的AbstractRoutingDataSource抽象类(该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上),重新构造一个AbstractMongoDBRoutingMongoTemplate抽象类,实现多mongdbTemplate的自动切换。AbstractM

2016-10-19 17:21:18 8093 5

原创 IDEA中springboot的热加载thymeleaf静态html页面

【代码】IDEA中springboot的热加载thymeleaf静态html页面。

2023-07-10 20:07:52 1000

原创 排查线上CPU飙高的原因和解决

系统CPU飙高问题排查解决

2022-07-22 19:02:09 1196 1

原创 Explain执行计划key_len详解

我们在使用Explain查看SQL执行计划时,其中有一列为key_kenEXPLAIN select * FROM user WHERE id = 1;key_len表示使用的索引长度,key_len可以衡量索引的好坏,key_len越小索引效果越好,那么key_len的长度是如何计算的?常见的列类型长度计算:CREATE TABLE `user` ( `id` bigint(10) NOT NULL AUTO_INCREMENT, `name` varchar(10) D...

2021-05-09 17:34:07 395

原创 spring的4种事务特性、4种隔离级别、7种传播行为

1.事务概念事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败)。2.事务特性(4种)事务特性分为四个:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)简称ACID。原子性 (atomicity):强调事务的不可分割.一致...

2020-06-24 12:16:40 2557 2

原创 MySQL调优

1.存储引擎选择MyISAM:不支持事务处理,读性能处理快,表级别锁,MyISAM适用于读取繁重的应用程序。InnoDB:支持事务处理(ACID),设计目标是为处理大容量数据发挥最大化性能,行级别锁。MySQL5.5以后版本中默认为InnoDB存储引擎引擎。表锁:开销小,锁定粒度大,发生死锁概率高,相对并发也低。行锁:开销大,锁定粒度小,发生死锁概率低,相对并发也高。如果不是只读业务...

2019-04-02 09:03:46 473

原创 算法复杂度o(1), o(n), o(logn), o(nlogn)

在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义:这是算法的时空复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。O后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量。比如时间复杂度为O(n),就代表数据量增大几倍,耗时也增大几倍...

2019-02-25 13:29:47 534

原创 java中获取字节码对象的三种方式

package verify;public class ClassObject { public static void main(String[] args) { getClassObjectMethod1(); getClassObjectMethod2(); getClassObjectMethod3(); } /* * 方式一 通过对象获得 */ pr...

2019-02-18 15:54:38 1674

原创 @Autowired与@Resource (@Inject)的区别

准备数据:定义接口:/** * 定义一个接口 * @author lizehao * @company 连连支付 * @date 2019年2月18日下午2:54:03 */public interface UserService {}实现类/** * 第一个实现类 * bean的名称默认是全类名首字母小写 userServiceImpl * @auth...

2019-02-18 15:34:34 243

原创 关于try、catch、finally返回return的问题

第一种情况:public static void main(String[] args) { System.out.println(print());}@SuppressWarnings("finally")public static String print() { try { System.out.println("------try------"); return ...

2019-02-11 11:43:41 243

原创 一致性Hash算法(分布式算法)

一、分布式算法在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法。典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,...

2019-01-21 22:33:38 300

原创 Spring Cloud版本与Spring Boot版本之间匹配关系

很多人在使用springboot和springcloud,但是对于这两者之间的版本关系不是很清楚,特别是在面临升级的时候不知道该如何操作。本文简要摘录的官方文档的部分内容作为依据,供广大同行参考。问题的提出,我现在使用的是1.5.1版本的springboot 和Edgware.RELEASE版本的springcloud,我想升级到springboot到2.0.0, springcloud需要升...

2019-01-09 15:12:37 599

原创 数据库表结构及数据的复制SQL语句

表的复制复制表在数据库数据维护时使用到,以下的方式不仅可以复制表结构还可以复制表的数据CREATE TABLE 新表名 SELECT * FROM 旧表名如果只向复制表结构而不需要数据,可以使用以下语法:CREATE TABLE 新表名 LIKE 旧表名如果想从一张表中向另外一种表复制数据时可以使用以下语法:INSERT INTO 表名 SELECT * FROM 带...

2018-12-27 15:43:27 3060

原创 Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

概要Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答。本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start() 和 run()相关源码(基于JDK1.7和1.8)start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不...

2018-12-23 15:31:46 227

原创 Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式

本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable。之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程。关于线程池的内容,我们以后会详细介绍;现在,先对的Thread和Runnable进行了解。Thread和Runnable简介Runnable 是一个接口,该接口中只包含了一个run()方法。它的定义如下:...

2018-12-23 15:03:39 204

原创 Java多线程系列--“基础篇”01之 基本概念

多线程是Java中不可避免的一个重要主体。从本章开始,我们将展开对多线程的学习。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thread类中的接口;synchronized关键字。注:JUC包是指,Java.util.concurrent包,它是由Java大师Doug Lea完成并在J...

2018-12-23 14:24:33 229

原创 Java 中 Comparable 和 Comparator 比较

先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明。Comparable 简介Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。  即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列...

2018-12-22 23:09:57 216

原创 Java 随机数

本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示。广义上讲,Java中的随机数的有三种产生方式:通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 通过Math.random()返回一个0到1之间的double值。 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。第1种通过System....

2018-12-22 21:45:34 232

原创 JAVA-Word转PDF各种版本实现方式比较【项目实战使用】

 工作中,经常做一些导出、读取Excel文档,但是从来没有尝试Word转PDF。我们通常使用的是POI和JXL。这两个插件对Excel已经有很好的支持了。操作PDF通常使用的是ITEXT插件,该插件可以操作复杂的PDF,当然我们也可以通过freemarker来生成PDF也是可以的。但是最近的项目在打印合同的时候,只提供了word模板,然后打印PDF,期间需要读取数据,填充到Word文档中,该文...

2018-12-14 22:36:24 2636

原创 Maven引入项目依赖的jar后pom文件报错

Maven引入项目依赖的jar后pom文件报错:1.本地仓库查看所引用的jar是否存在2.存在后,清空执行 maven update后还是报错3.最后定位分析:对应的jar还有父级依赖,查看私服上没有。在发布的时候,需要将jar以及对应的父级依赖一块发布到私服上去。...

2018-11-28 16:16:29 1455

原创 使用 Lombok 优雅编码

一、介绍和使用    Lombok 是一个 java 库,能以简单的注解形式来简化 java 代码,提高开发人员的开发效率。    常见使用在开发过程中需要写的 javabean,往往开发需要花时间去添加相应的 getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的 getter/setter 方法,这些显得很冗长也没有太多技术含量,一旦修...

2018-11-05 18:44:37 252

原创 MySQL分页排序,各页中记录存在重复数据现象

现象描述:项目在做分页查询的时候,用到了排序 order by ctime,由于是测试环境,ctime时间值都是一样的。在通过mybatis分页查询的时候,发现最后一页数据和第一页数据重复。后来就拿出sql进行测试,发现偶尔是重复的。1.解决方案增加一个二级排序【比如:主键,时间戳】,总之实现绝对排序即可order ctime,id 即可。2.原理(1)mysql查询不指定...

2018-07-17 13:33:12 4606 1

原创 导入和导出eclipse代码格式化模板

在项目开发过程中,向svn中提交代码,存在大范围冲突现象,其实这些代码并没有修改过,有时候很头疼,直接覆盖怕冲掉别人的代码,慢慢检查效率又很低,很让人捉急,因此在一个小组开发的时候,统一代码格式化模板就会变得尤其重要,这里就分享导出和导入代码格式化模板的步骤。导出格式化代码模板:上面我们已经完成了格式化代码模板的导出工作,接下来看一下代码模板的导入。导入格式化代码模板:第一步:进入导入模板界面和选...

2018-07-04 18:38:34 3188

原创 使用 Spring Batch 构建企业级批处理应用-入门篇

总述本系列文章旨在通过示例搭建以及特性介绍,详细讲述如何利用 Spring Batch 开发企业批处理应用。本系列文章共分为三部分,第一部分初步介绍了批处理以及 Spring Batch 的相关概念,同时搭建了一个简单的基于 Spring Batch 的批处理应用。第二部分介绍了 Step Flow 以及并发支持。第三部分则主要介绍了 Spring Batch 对任务监控的支持。下面让我们进入第一...

2018-06-26 18:21:06 591

原创 消息队列之JMS和AMQP对比

JMS        JMS(Java MessageService)实际上是指JMS API,它定义了一些借口,提供了一套标准API。        JMS提供了两种消息模型,peer-2-peer(点对点)以及publish-subscribe(发布订阅)模型。当采用点对点模型时,消息将发送到一个队列,该队列的消息只能被一个消费者消费。而采用发布订阅模型时,消息可以被多个消费者消费。在发布订阅...

2018-05-19 21:06:35 755

原创 JVM类加载机制

JVM提供了3种类加载器:启动类加载器(Bootstrap ClassLoader):负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath参数指定路径中的,且被虚拟机认可(按文件名识别,如rt.jar)的类。扩展类加载器(Extension ClassLoader):负责加载 JAVA_HOME\lib\ext 目录中的,或通过java.ext.dirs系统变量指定...

2018-05-17 16:20:35 215

原创 Java中的NIO和IO的比较

        java标准的I/O中,提供了基于流的I/O实现,即InputStream和OutputStream。这种基于流的实现以字节为单位处理数据。        NIO在java 1.4中被纳入到了JDK中,与旧式的的基于流的I/O相比,NIO是基于块的,以块为单位处理数据。NIO有两个重要的组件缓冲(Buffer)和通道(Channel)。        Buffer:缓冲是一块连续的...

2018-05-13 11:57:32 486

原创 Java NIO入门之概念解析

一.什么是同步?什么是异步?    同步:如果有多个任务要执行,这些任务必须逐个地进行,一个任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行;    异步:如果有多个任务要执行,这些任务可以并发地执行,一个任务的执行不会导致整个流程的暂时等待。    这就是同步和异步。举个简单的例子,假如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B...

2018-05-12 23:53:42 237

原创 MyBatis缓存机制

MyBatis 提供了查询缓存来缓存数据,以提高查询的性能。MyBatis 的缓存分为一级缓存和二级缓存。一级缓存是 SqlSession 级别的缓存二级缓存是 mapper 级别的缓存,多个 SqlSession 共享一级缓存        一级缓存是 SqlSession 级别的缓存,是基于 HashMap 的本地缓存。不同的 SqlSession 之间的缓存数据区域互不影响。        ...

2018-05-07 10:42:11 194

原创 RabbitMQ消息队列(一)——Hello World例子

本文主要阐述 6个基本的消息发送/接收模型,或者称为6种不同的使用场景!在学习6种模型之前,我们首先需要安装RabbitMQ。RabbitMQ支持多种系统平台,各平台的安装方法可以点此查看。安装好之后,我们使用如下命令启用Web端的管理插件:rabbitmq-plugins enable rabbitmq_management,然后启动RabbitMQ ( rabbitmq-server star...

2018-04-13 14:14:28 991 1

原创 rabbitmq channel参数详解

1、Channel 1.1 channel.exchangeDeclare():type:有direct、fanout、topic三种durable:true、false true:服务器重启会保留下来Exchange。警告:仅设置此选项,不代表消息持久化。即不保证重启后消息还在。原文:true if we are declaring a durable exchange (the exch...

2018-04-13 10:03:40 1487

原创 Eclipse 修改jsp、XML、 java、 HTML 每行显示的字数

HTML: window -> Preferences-> web -> html files -> Editor JSP: window -> Preferences-> web -> JSP files -> Editor 【备注】:jsp页面的字数设置,在有些版本的eclipse中,当设置了html以后,jsp相应的也就不用再设置!XML: w...

2018-03-25 18:35:20 1335

原创 Java7 中的 HashMap 和 ConcurrentHashMap 全解析

今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚...

2018-03-15 17:11:20 413 1

原创 Java8 中的 HashMap 和 ConcurrentHashMap 全解析

Java8 HashMapJava8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当...

2018-03-15 17:02:16 349

原创 Spring Boot的第一个HelloWorld例子

使用Spring Boot框架可以大大加速Web应用的开发过程。一个最简单的Web应用新建一个maven项目在pom文件中添加依赖<!-- 添加spring boot父级依赖 --><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-paren

2018-01-15 15:27:12 684

原创 Java运行Python脚本的几种方式

有时候在java项目里,需要执行Python脚本,故总结以下几种方式:1、直接执行Python脚本代码 引用 org.python包PythonInterpreter interpreter = new PythonInterpreter(); interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun');

2017-12-21 22:28:24 9908

原创 阿里编码规约扫描eclipse插件安装使用

一、安装 在线安装地址:https://p3c.alibaba.com/plugin/eclipse/update 1.点击 Help –> Install New Software… 2.在弹出的窗口中点击add按钮,输入Name(任意)和Location(插件的URL),点击OK 3.勾选出现的插件内容,一步步安装即可。 二、使用 1.扫描。

2017-10-17 22:47:55 965

原创 java多线程程序性能调优 优化过程

有句话叫“只要推力大,板砖也能飞上天”, 那换到我们it, 只要cpu强大,那么再烂的程序也能跑的飞快,但是cpu肯定是不够强大的,她是不够用,不然也就没多核心,分布式什么事情了,那java中我们如何找出我们的代码中的多线程瓶颈呢,比如这个线程当前在干什么?哪个线程的cpu 占用了100%了?哪个线程当前正在等待锁?下面主要用的命令有两个top 以及jstack 在命令行输入top 后我们看到

2017-06-26 17:07:40 1010

word转pdf所需的jar

word转pdf实战代码。工作中,经常做一些导出、读取Excel文档,但是从来没有尝试Word转PDF。我们通常使用的是POI和JXL。这两个插件对Excel已经有很好的支持了。操作PDF通常使用的是ITEXT插件,该插件可以操作复杂的PDF,当然我们也可以通过freemarker来生成PDF也是可以的。但是最近的项目在打印合同的时候,只提供了word模板,然后打印PDF,期间需要读取数据,填充到Word文档中,该文档还是修订格式,还需要接受所有修订以后,转成PDF下载。本以为很简单,通过freemarker就可以轻松实现,但是在尝试过后,还知道不是很顺利,网上也提供了不少的解决方案,个人感觉大多都不是好,有一些只支持Window系统,有一些则需要安装Office软件,在这里,给大家提供本人在这个过程中的一些新的体会,让大家遇到这类问题少走一些弯路。

2018-12-14

eclipse格式化模板

eclipse格式化格式化模板。在项目开发过程中,向svn中提交代码,存在大范围冲突现象,其实这些代码并没有修改过,有时候很头疼,直接覆盖怕冲掉别人的代码,慢慢检查效率又很低,很让人捉急,因此在一个小组开发的时候,统一代码格式化模板就会变得尤其重要,这里就分享导出和导入代码格式化模板的步骤。

2018-07-04

apache-tomcat-7.0.69.tar.gz

apache-tomcat-7.0.69.tar.gz

2017-01-07

RabbitMQ客户连接池实现示例代码

RabbitMQ客户连接池的实现代码示例

2017-01-06

RabbitMQ客户连接池的实现

RabbitMQ客户连接池的实现代码示例

2017-01-06

空空如也

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

TA关注的人

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