自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Kettle采集数据时遇到error:invalid byte sequence for encoding "UTF8": 0x00

我们项目有个需求是需要通过 Kettle把数据从 oracle采集到postgresql,然后在采集过程中发现出现了invalid byte sequence for encoding "UTF8": 0x00导致采集失败,经查阅相关资料,pg官网上解释是因为pg数据库不能存储\u0000这样的字符,明白了根本原因,解决方案就容易多了,首先是确定哪此字段会包含这种字符,为了快速定位问题,我把ket...

2019-07-31 23:14:33 581

原创 ETL工具之Kettle的使用及源码研读

首先简单说明一下ETL的概念,引用百度上写的就是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。再说下Kettle是什么。它其实就是一个数据迁移的工具,使用java编写,提供图形界面来设计ETL转换过程。Kettle中有两种...

2019-05-26 22:08:18 139

原创 关于当前开源分布式任务框架的比较

最近有对分布式任务调度框架的选型,下面是个人整理的一个比较文档,供大家参考使用。分布式任务调度框架各有利弊,需根据实际需求决定使用。框架名称 xxl-job elastic-job 简介 大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 当当开发的弹性分布式任务调度系统...

2019-04-23 21:59:48 2722 1

原创 mybatis入门要点

一、跟Hibernate的区别Hibernate是面向对象的设计思想,所以对数据库的操作基本是对一个对象的操作。而Mybatis是半面向对象的思想,把SQL语句跟java分离,易于维护。总的来说,各自有利有弊,需根据项目实际需求来选型。目前互联网使用最多的应该还是mybatis,主要是易于使用,比hibernate的学习成本要低。二、Mybatis的学习网站网上学习Mybatis...

2019-04-13 08:34:14 89

原创 如何在工作中提高架构设计能力

之前认识了一些工作五年以上的开发工程师,深聊之下发现虽然开发能力很强,但架构设计方面的能力还是偏弱,这不得不让人深思,五年以上的时候都在干嘛去了。通常毕业没多久的开发工程师,因为没有什么实际的开发经验,所以架构设计能力还处于初级阶段,这时候必须得有人带着开发,对所用的技术也是一知半解。但随着工作年限的增长,技术也在慢慢的提高,但并不代表,编程能力越强,架构设计能力就越强。 ...

2019-03-26 22:50:39 1730

原创 MySQL的一些总结

最近拜读了58同城的大神沈剑的关于mysql的一些文章,现在做一个总结如下:一、索引到底是怎么实现的这里要思考“为什么设计成这样”,而不是“是怎样的”。数据库的索引用于提升数据库的查找速度。加速查找速度的数据结构有两种:一种是哈希,一种是树型。哈希的查询、插入、修改、删除的平均时间复杂度都是O(1),而树的平均时间复杂度都是O(lg(n))。这里可以看到哈希结构查找速度会快一点,但My...

2019-02-15 14:44:41 106

原创 理解幂等性设计

话说这个词出现的频率很高,在实际开发中遇到的也多,特别是微服务化之后,这个就显得更重要了。但是这个概念有时候会搞得有点糊涂,比如说一个查询接口,有可能因为其它请求修改了数据,从而导致它返回的数据是不一样的,这就跟大部分文章说的无论怎么请求,返回的结果一样有点矛盾。实际应该这么理解:幂等性强调的是外界通过接口对系统内部的影响, 外界怎么看系统和幂等性没有关系,只要一次或多次调用对某一个资源应该具有同...

2019-02-13 10:40:35 241

原创 使用JDK8的日期转换类DateTimeFormatter时遇到的问题

有个同事开发的时候用到这个类进行日期的转换,想转换的日期格式为“YYYY/MM/dd”,结果在2018年12月30日那天转换出来的格式是2019/12/30,请看下面的代码:public static void main(String[] args) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("YYYY/MM/...

2019-01-03 15:01:42 4127

原创 Jenkins的自动部署方法

Git提交代码时自动部署:首先通过在git上面配置webhooks: 有了Groovy上面的变量,Build就可以随心所欲了!  根据Label来部署不同的项目,这是重点!   ...

2018-12-29 14:45:19 69

原创 关于spring cloud config的一个坑

搭建spring cloud config很简单,基本配置一下就好了,但发现有个问题,就是每隔一段时间客户端就连不上了,获取不了配置数据,更重要的是因为没有配置更多的日志信息导致问题不知道出现在哪里,客户端在启动时报错的信息是不能获取配置文件。后来经过多次测试实践,发现原来是配置中心在本地服务器上会缓存配置文件,但这个路径默认是在linux的/tmp下面的,然后这个路径操作系统是会定期清理的,明白...

2018-12-29 11:21:48 638

原创 消息队列RabbitMQ线上问题总结

首先简单介绍下RabbitMQ。RabbitMQ使用高并发性的erlang语言开发编写,性能比较好,并且可靠性比较高,支持事务。RabbitMQ这些特性都比较适合我们当前的业务,对可靠性和稳定性都要求比较高,很适合作为我们系统的消息总线和异步解耦。而Spring boot集成RabbitMQ也比较简单,网上资料很多,下面是我刚开始使用的一种集成方案:首先maven要引入相关的依赖包:&lt...

2018-12-11 11:38:12 848

转载 JAVA8之妙用Optional解决NPE问题

引言在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示在这种情况下,有如下代码<span style="color:#333333"><code>user.getAddress().getProvince();</code></span&g...

2018-12-04 11:51:09 123 1

原创 使用Java8 Optional解决繁琐的NPE判断

Optional是java的新特性,主要用来解决空指针异常。按以前的做法,一般我们在调用某个对象之前都需要判断一下这个对象是否为null,这样的话有些情况下会有很多的if判空操作,有了这个Optional就好办了,下面给一个简单的使用例子,一学就会:没有使用Optional这样写:BigDecimal amount = null != dto.getAmount() ? dto.getA...

2018-11-28 11:39:49 464

转载 深入理解 MySQL 底层实现

MySQL 的常用引擎1. InnoDBInnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件。InnoDB 中存在表锁和行锁,不过行锁是在命中索引的情况下才会起作用。InnoDB 支持事务,且支持四种隔离级别(读未提交、读已提交、可重复读、串行化),默认的为可重复读;而在 Oracle 数据库中,只支持串行化级...

2018-11-23 18:21:52 135

原创 maven仓库支持下载CDH的包

一、项目pom.xml, 添加仓库配置<repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> &...

2018-11-23 16:16:01 1038

原创 java lambda表达式的简单应用

一、多参数的情况:(Type1 param1, Type2 param2, ..., TypeN paramN) -> { statment1; statment2; //............. return statmentM;}二、单参数的情况:param1 -> {  statment1;  statment2;  //............

2018-11-23 12:01:47 50

原创 Eureka实现基于DNS方式搭建集群

Eureka使用起来还是比较简单的,至于搭建集群网上很多资料都有介绍使用IP的方式配置集群的每一台服务器,这样做不好之处在于万一需要添加、删除、修改服务IP和端口号时需要针对每一台服务器的配置文件进行修改,这是比较麻烦的一个事,而使用DNS方式就能解决这个问题。但是网上的资料针对这方面还是比较少的,没有一个很详细的说明,于是我专门研究了下这个流程。大概的步骤就是:1.首先需要有一个云服务商的域...

2018-09-15 22:55:30 621 2

原创 注意了!云服务器的一些环境配置有可能导致应用启动失败

尝试用serviceComb框架跟Spring boot框架结合写了一个测试应用,结果放到云服务器上启动的时候报错,大概错误如下:Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'HOSTNAME%%.*' in value "history -a; printf "\033]0;%s@...

2018-08-19 09:44:15 576 1

原创 Eureka的深度总结

一、Eureka是一个去中心化的架构,注重CAP理论中的AP,重点在于高可用性。二、Eureka的serviceUrl既可以通过IP:Port的方式配置集群,也可以基于DNS方式配置高可用集群,它的原理就是通过域名获取所有的IP地址,但端口号要一致。配置DNS对增减服务器比较好,不需要每一台服务器修改其配置。三、Spring cloud中可以添加spring-security支持Eurek...

2018-08-05 19:09:57 1001 2

原创 简单记录在centos 7下安装docker的过程

首先是要删除旧版本的docker,使用以下命令:$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ ...

2018-07-29 23:29:09 94

原创 关于mysql使用explain看执行计划的变化

今天有个同事找我解决一个SQL优化的问题。我去看了下,在生产环境上,通过explain查看这个SQL语句执行计划是全表扫描,并没有用到索引,数据量大概在50万左右。通过分析,针对where字段已经建立了索引,而且这个SQL使用的查询条件也都很简单,也就用了in,按道理是可以使用索引查询的。按我之前的开发经验,这应该就是同一SQL在不同环境不同的数据量下执行计划是会发生变化的,为了证实这一想法,我把...

2018-07-23 23:14:19 468

原创 微服务框架serviceComb的崛起

      之前微服务框架一直是用dubbo和spring cloud,直到2017年差不多年底的时候发现了新的开源微服务框架 - serviceComb。这个框架是由华为公司开源的,在公司内部叫cse,想了解更多的朋友可以到华为云官网查看。这里我大概说下这个新开源框架的一些优势的地方。一、系统架构灵活,扩展性强。下面以两图来说明: 模块说明类型artifact id是否可选功能说明编程模型pro...

2018-07-05 00:06:31 9543

原创 技术的广度与深度

一般来说,我们都希望自己的技术既有广度又有深度,但事实上,鱼与熊掌不可兼得,我们人的一生其实很短暂,在这有限的时间和精力里,我们不可能掌握所有的技术,而且技术的更新速度很快,就如同浩瀚的大海一样。那么我们应该如何掌握好时间效率?如何才能不浪费生命呢?这个除了三观要正之外,还得需要有一个正确的学习方式,端正的态度。下面具体来说说要如何提高自己的广度和深度。一、广度为辅,深度为主。既然人生有限,我们不...

2018-06-26 23:18:01 3656 1

原创 java基础的深刻理解

程序猿每天的生活,除了加班就是加班,很少有时间去总结开发经验。这样下去对技术的提高会非常缓慢,下面简单说下个人的一些思考总结。首先写代码前要思考几个方面:一、做什么。从需求方的角度去思考,假如你就是那个客户,你希望得到什么?二、怎么做。从开发者的角度去思考,如何通过代码实现,分步骤来完成,可以使用思维导图或者流程图来表达思路。三、详细实现。有了大概思路之后,就是具体的实现,要在脑里过一遍整个流程,...

2018-06-21 22:55:11 161

原创 NewSQL新星冉冉升起 - TiDB

      许多人还在用mysql,当然这对于单机、数据量不大的情况下还是比较不错的选择,而且现在oracle收购之后其稳定性、效率等都提高了不少。然而现在这个时代是一个大数据时代,很多东西都可以通过大数据来分析研究,从而越来越多的系统做成了分布式,数据库也是一样的道理,通过分布式数据库来解决大数据的问题。      目前NewSQL就是这样的一个情况下产生,这个也将是未来的数据库之路。而TiDB...

2018-06-19 23:34:14 1626

原创 论技术与人品

       作为技术员,首先是人,得有品。虽然说技术很重要,有可能是因为兴趣,也有可能是为了生计,但我认为,工程师不应该过度沉迷在技术之中,而忽略了自己的思想世界,需要学习下其它的,比如哲学。如果一个技术员眼里只有技术,那么他的人生一定会很无趣,但更这最严重的,是一个人变得麻木,没有自己的思想,没有正确的人生观、价值观、世界观。那么作为一个技术员,要如何丰富自己的人生呢?答案在人品。      ...

2018-06-13 23:45:11 196

原创 JAVA8的IO流源码简析

让我们来分析一下java8里面的IO源码。一般来说分两类,即字节流和字符流,通过下面的思维导向图总结下:关于流有几点是要注意的:第一,读写流要及时的关闭,使用close方法。第二,深入理解read和readline的区别。具体请看下面的源码:需要注意的是read方法有时候会出现内容丢失的情况。第三,读写字符流时要注意编码格式定义好。...

2018-06-07 22:59:38 865 1

原创 论架构中的设计思想

大道至简至易,法无定法。譬如我们知道设计模式有23种之多,但又有多少程序员能灵活使用到实际项目中去?下面谈谈在实际开发中的一些设计思想,希望对大家的架构设计有帮助。第一,分而治之。面对一个庞大而复杂的系统时,我们是否会感觉到无从下手,这种情况,我们可以梳理一下业务,然后根据高内聚低耦合的原则,对系统进行划分,从而各个击破。目前流行的微服务架构很好的阐述了这一点。第二,化繁为简。把一件复杂的事件拆分...

2018-06-05 23:18:56 1695

原创 Mysql读写分离架构及注意事项

下面实现一个简单的Mysql双主多从的架构,如下图所示:这个架构首先考虑到的是做故障转移,提高可用性,保证整个集群的稳定性。另外我们要注意以下事项:1.当主库发生故障时,能自动切换到备用主库,并且要注意主库恢复后如何继续同步;2.从库应该连接主库的一个虚拟IP,这样就可以做到主库切换时不影响从库;3.主从在高并发时会存在一定的延时,对于要求高实时性高一致性的业务要强制走主库。...

2018-06-04 22:38:43 824

原创 关于java的类实例化的先后顺序

      最近有同事在部署一个旧系统的时候遇到问题,在本地部署是没事的,但一到正式线上服务器就报错。报错的大概意思就是某个类里面的一个静态变量为空导致出现空指针异常。为了帮忙解决这个问题,我再详细地深入代码,然后模拟实际情况建立如下类:1.定义了一个加载配置文件的类Test1,使用spring注解@Service来实例化这个类。2.定义了一个final的工具类Test2,然后在这个类里面添加静态...

2018-06-01 23:48:30 2041

原创 java IO思维导图总结

字节流每次读取一个字节,而字符流每次读取两个字节。如果有同学看了java IO源码的话,就会发现里面用到了装饰者设计模式。

2018-05-29 21:36:49 864

原创 关于前后端分离下如何生成图片验证码

前后端分离跟传统的JSP动态页面不太一样,前端通过调用restful接口获取数据,一般都是JSON格式的数据。我们在登录的时候有时候需要后端返回一个图片验证码,直接返回验证码数字肯定是不安全的,使用图片验证码的目的就是让机器人无法盗号暴力破解,提高安全性。这种情况下,可以通过后端返回图片字节流来获取图片验证码,具体代码如下:这里要注意的地方是后端把验证码保存到redis里面,对应的key是一个UU...

2018-05-26 22:54:11 7855 8

原创 如何提高网站性能

一、首先要分析网站的性能瓶颈网站性能影响的因素有很多,主要从以下几个方面来分析:1.网络负载。这个会分成外网和内网,需要对网络进行有效的规划。2.应用服务器性能。主要包括CPU、存储、I/O访问、内存、TCP/IP连接数等等。3.数据库服务器性能。主要包括数据库参数配置、设备性能、数据结构的合理性,另外要注意的是分布式架构、微服务需要避免分布式事务的产生。4.代码质量。主要是检查代码的编写质量,防...

2018-05-24 22:53:18 829

原创 JDK中泛型的上下界概念

今天看了下jdk8的Function源码,发现好多地方的方法传递参数都是如下这般:Function<? super V, ? extends T> before这个其实就是泛型的上下界:上界 <? extend T>下界 <? super T>上界的list只能get,不能add 下界的list只能add,不能get具体看代码示...

2018-05-24 00:15:29 518

原创 java类对象初始化过程

当我们要创建一个类的实例时,其初始化过程如下:一、初始化父类中的静态变量和静态代码块二、初始化子类中的静态变量和静态代码块三、初始化父类中的普通成员变量和代码块四、调用父类的构造方法五、初始子类中的普通成员变量和代码块六、调用子类的构造方法另外要注意在spring配置里面当我们要给某个类实例定义一个父类时使用parent这个选项。...

2018-05-22 23:52:50 97

原创 数据库事务管理相关总结

Mysql数据库的事务隔离级别如下:隔离级别     更新丢失  脏读取  重复读取 幻读 读取未提交      N            Y         Y          Y 读取已提交      N            N         Y          Y 可重复读取      N            N         N         Y 串行化           ...

2018-05-21 23:36:03 60

原创 用java实现首字母小写

实现首字母变小写的方法不少,但感觉下面的这种写法会更高效一点,请看:这里主要就是先把字符串分成一个个单独的字符,然后对首字符进行加32操作,相信大家都知道大写字母+32变小写的原理,这里就不同赘述了,以后要把一些开发小技巧发出来跟大家一起共享。...

2018-05-20 23:35:17 4083

原创 如何阅读源码

很多朋友反馈在看java源码的时候感觉很难懂,看完之后很快又忘记了。在此我结合自己的经验体会,简单说下读源码的方法。第一点,首先是要对自己要有信心。信心是很重要的一个东西,一定要坚信自己是有能力读懂理解源码的,这样才能一直坚持下去。第二点,对技术要抱有极大的热情。把读源码当成是过五关斩六将,就好像是在打游戏一样,这样的话你会越来越有成就感。这个要怎么做呢?主要就是订计划目标,先从大计划开始,比如说...

2018-05-20 23:19:10 667

原创 Spring AOP深入浅出

AOP思想:面向方面编程,简单来说就是把代码的很多地方所出现公共的功能封装到一个地方去,达到复用的目的,便于维护。作用:1、降低模块之间的耦合度2、使系统容易扩展3、更好的代码复用。AOP的使用场景:权限管理缓存管理错误处理日志处理事务处理Spring AOP源码:通过生成代理类来作aop相应的功能。请思考:Java的动态代理跟静态代理有什么区别?...

2018-05-18 23:20:41 93

原创 Threadlocal之关于Fortify 扫描警告

        在使用Fortify 扫描代码之后报出如下警告, J2EE Bad Practices:Threads (FORTIFY.J2EE_Bad_Practices--Threads) 0. InCall: Threadlocal()。经查资料主要是J2EE的规范,就是在某些情况下禁止web使用线程管理器,以免造成死锁等问题。       事实上Threadlocal应该是不会出现死锁这...

2018-05-17 23:31:08 1061

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