自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

工匠解码

庖丁解牛,工匠解码

原创 记一次线上请求缓慢问题处理

9月的某天晚上,接到通知,线上环境请求非常慢,页面打开要1分钟,遂按照系统参数,数据库,应用,web服务器状态逐步排查的步骤,最终定位到问题并得以解决,此处做个检查流程梳理,供大家参考。问题描述:正式环境请求响应异常慢,页面打开需要1分钟左右时间等。第一步 系统参数检查 1 df -h 检查硬盘空间 重点看 Use这一栏,可以看到空间足够,硬盘空间ok2 free 检查内存使用情况 对比tot

2017-09-06 11:36:21 2666

原创 kubernetes实践-入门与环境搭建

Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications.Kubernetes官网地址https://kubernetes.io/ 但是,进入首页后依然会很懵逼,进入Documentation页面会更懵逼,对于初学者想依照

2017-08-01 19:49:50 5970

原创 pre -commit hook failed (add --no-verify to bypass)

问题描述:本地使用source tree推送代码,抛如下异常pre -commit hook failed (add --no-verify to bypass)1 进入项目所在的.git文件夹(cd .git)2 再进入hooks文件夹3 删除pre-commit文件 rm -rf pre-commit4 SourceTree也可以正常推送。重新git commit -m ‘xxx’...

2019-07-22 19:15:50 1187

原创 MyBatis初始化流程

spring中有如下配置内容<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" depends-on="mapperConfig">...</bean>SqlSessionFactoryBean实现ApplicationListener接口,执行afte...

2019-06-19 10:34:11 119

原创 dubbo服务端,dubbo客户端,注册中心(zk)之间的心跳

dubbo客户端和dubbo服务端之间存在心跳,由dubbo客户端主动发起,可参见dubbo源码 HeartbeatTask。dubbo服务端和注册中心(zk)存在心跳,由dubbo服务端发起,这是基于zk集群和zk客户端之间的心跳机制。...

2018-03-08 10:37:48 3841

原创 spring boot 异常Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'

spring boot项目,请求回来,响应头中X-Frame-Options被设置为DENY,如下图这个会导致使用iframe模式上传图片或者iframe嵌套页面时,会报如下异常信息: Refused to display in a frame because it set ‘X-Frame-Options’ to ‘DENY’解决方案:扩展WebSecurityConfigurerAdapter

2017-12-27 09:08:25 5935

原创 Spring boot日志配置

步骤1:增加logback配置文件 注意:名字是logback.xml或者是logback-spring.xml,推荐是logback-spring.xml,为啥?因为spring boot框架默认会去寻找名字为这个的配置,并增加一些特性。步骤2:logback.xml的内容配置<?xml version="1.1" encoding="UTF-8"?><configuration> <s

2017-12-25 12:00:16 518

原创 Spring boot实现多环境配置

在实际项目中,我们一般会放置一些配置文件,这些配置文件是区分环境的,一般环境有dev,test,prep,prod,分别对应开发,测试,预发布,生产。那么在spring boot项目中如何实现不同环境,使用不同的配置文件呢。第一步:定义好不同环境的application.propertiesapplication.properties 存放公用的一些配置。 以及最重要的配置 spring.pro

2017-12-25 11:51:05 849

原创 使用SourceTree回退代码版本

项目开发过程中,代码冲突,是比较麻烦的事情,需要造成冲突的代码作者合作解决。比冲突更可怕的是冲掉代码,这个时候,就要回滚代码了。那么git如何回滚代码到某个版本上呢?1 使用source tree也可以回滚,选中待回滚的版本,然后点击Reset develop to this commit上2 紧接着会弹出如下弹框3 里面有三个选项,一定要选择 :强行合并4 然后,再在版本号上选择 提交回滚5 最后

2017-12-22 17:14:19 12532

原创 DataTables使用技巧

官网:https://datatables.net/ 中文站:http://www.datatables.club/下载源码:https://datatables.net/download/index为啥会选择使用DataTables呢?其官网上说了它很多出众的特性,当然其涵盖了大部分的表格操作的功能,但是其API封装的并不是太友好,新老版本混杂,使用起来相当混乱,额外增加的请求参数过多且没有良好

2017-12-21 11:17:18 340

原创 使用spring boot搭建与dubbo整合项目

项目地址:https://github.com/BruceZhangXL/wolf 这是一个完整的使用spring boot搭建的整合dubbo的项目脚手架构建:maven 基础:spring-boot ORM:mybatis 数据库:MySQL 中间件:redis,rabbitMQ项目结构启动说明找到wolf-web下的Application类,右击:run as:java applic

2017-12-13 17:23:04 1826 1

原创 spring boot版本演进

最近项目中想引入spring boot,所以想对spring boot的前世今生做个深入了解,整理了其版本演进情况,来源于spring boot的github:https://github.com/spring-projects/spring-boot/releases?after=v1.0.0.RC3版本号发布时间备注v0.5.0.M1 2013-08-06v1.0.0.RELEASE 20

2017-12-04 10:17:18 8933

原创 is expected to be of type but was actually of type 'com.sun.proxy.$Proxy70'

spring boot项目,启动报这个异常原因是:我通过@EnableTransactionManagement 启动了事务,但是没有开启cglib的动态代理。application.properties增加如下配置#aopspring.aop.auto=truespring.aop.proxy-target-class=true依赖中增加: org.spring

2017-12-01 15:09:23 1300

原创 spring boot 日志输出到 log.path_IS_UNDEFINED目录

springboot项目,logback配置文件如下<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%date|%thread|%X{invokeNo}|%level|%logger{0}|%msg%n</pattern>

2017-11-30 17:32:55 13906 1

原创 Spring的XML文件的Schema扩展点PluggableSchemaResolver

在dubbo源码解析第一章里,我们知道了在dubbo启动(也即spring启动)过程中,是先要加载相关的xml配置文件的,比如provider.xml,consumer.xml或者spring的applicationContextContext.xml都是需要先被加载到内存中去的,这个加载的入口在XmlBeanDefinitionReader类的 doLoadBeanDefinitions(Inpu

2017-11-27 20:38:18 701

原创 龙哥dubbo源码阅读实践-源码入口(第一章)

资源准备1.dubbo开发手册下载: 地址:http://dubbo.io/docs/dubbo-dev-book.pdf 2.dubbo源码下载 地址:https://github.com/alibaba/dubbo/tags 3.导入项目到eclipse或者idea 注意: - dubbo项目是标准的maven工程,直接以maven项目导入即可 - se

2017-11-26 15:05:25 4478 1

原创 Access restriction: The type XX is not API (restriction on required library 'XXX/Ja

Access restriction: The type 'XMLChar' is not API (restriction on required library '/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/rt.jar')有时候,我们会引入rt.jar中的类来使用,比如: com.sun.or

2017-11-26 08:28:14 790

原创 ContextLoaderListener加载过程(最详细版)

以下描述,将是最详细版spring的ContextLoaderListener加载过程,没有之一。ContextLoaderListener实现了ServletContextListener接口,ServletContextListener是Java EE标准接口之一,类似tomcat,jetty的java容器启动时便会触发该接口的contextInitialized。顾,java容器启动触发Con

2017-11-20 22:22:25 17076 10

原创 Kubernetes集群部署

环境:centos 参考:https://kubernetes.io/docs/getting-started-guides/centos/centos_manual_config/第一步:创建仓库文件 目标路径 /etc/yum.repos.d/,创建文件virt7-docker-common-release.repo文件内容如下:[virt7-docker-common-release]

2017-11-10 11:26:44 299

原创 Callable返回的Future对象

Callable 返回Future对象,Future对象的get方法会阻塞,直到callable方法执行结束并且返回结果

2017-11-09 17:30:57 559

原创 Redis的pipeline

Redis是使用C/S模型的TCP服务器,称为请求/响应协议。 这意味着通常一个请求是通过以下步骤完成的: 1 客户端向服务器发送查询,并通常以阻塞的方式从套接字读取服务器响应。 2 服务器处理命令并将响应发送回客户端。因此,例如,四个命令序列是这样的: Client: INCR X Server: 1 Client: INCR X Server: 2 Client: INCR X

2017-11-09 17:18:13 283

原创 VMware中安装centos7无法联网解决

在搭建k8s环境时,使用VMware安装centos后,无法连接上网,ping http://www.baidu.com 也是不通的。解决方案: 1 进入/etc/sysconfig/network-scripts/目录 2 用ls命令查看网卡配置文件 带一串数字的文件就是网卡配置文件 我这里对应的就是 ifcfg-ens33 3 用vi编辑这个文件,将最后一行的ONBOOT=no改为ON

2017-10-27 21:30:46 1011

原创 Mysql批量insert重复数据的处理

经常在批量导入数据的时候,我们需要剔除已导入的重复数据,如果采用查询库中是否已经存在该条纪录,一般是不划算的,至少会多一次查库的 操作。其实数据库oracle或者mysql已经提供了处理重复数据的机制: oracle:可以使用 merge into语法 mysql:可以使用ON DUPLICATE KEY UPDATE首先创建一个唯一索引: ADD UNIQUE INDEX uidx_v_a

2017-10-23 16:04:35 1308

原创 jedis选择redis的某个数据库

在redis.conf配置中有如下一项配置:# Set the number of databases. The default database is DB 0, you can select# a different one on a per-connection basis using SELECT <dbid> where# dbid is a number between 0 and

2017-09-28 20:51:51 14504 1

原创 Linux环境安装imagemagick

系统环境:[root@njyf-test-zxl-10-20-2-127 pic]# cat /etc/*releaseCentOS Linux release 7.1.1503 (Core) 废话不多说,直接按如下步骤操作即可。步骤1:安装一些必要的yum,直接复制如下命令即可yum install tcl-devel.x86_64 libpng-devel.x86_64 libjpeg-de

2017-09-11 16:34:13 4996

原创 imagemagick向图片中写文字

命令: mogrify -font Arial -pointsize 24 -fill yellow -weight bolder -annotate +20+100 “hello world zxl” /Users/zhangxiaolong/Documents/imagemagic/example/hi.jpg-font 后面是字体如果你使用的字体不存在时,该命令会报异常信息 conv

2017-09-09 21:18:01 5269 1

原创 Mac环境安装imagemagick及使用imagemagick拼接图片

ImageMagick是一个免费的创建、编辑、合成图片的开源软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。 ImageMagick官网:http://www.imagemagick.org/ 与ImageMagick功能类似的还有GraphicsMagick,GraphicsMagick号称图

2017-09-09 11:42:05 12069

原创 高并发场景的技术手段术语(开篇)

高并发指的是某个瞬间涌入海量请求,比如促销活动中的秒杀,抢券,抢红包等等。由于服务器端口是有上限,web服务器连接数有上限,数据库连接有上限,JVM内存有上限,CPU个数有上限,等等这一系列的限制,导致在这样的一个瞬间,系统是无法迅速对海量请求中每一个均做出逻辑处理响应,为了解决系统被打垮,并且尽量给每个请求一个合理的处理反馈,技术开发人员们摸索出了很多种应对的手段。前台动静分离 静态化 压缩(

2017-09-06 17:30:52 853

原创 服务器cpu负载过高问题排查

第一步 :执行top命令,查出当前机器线程情况top - 09:14:36 up 146 days, 20:24, 1 user, load average: 0.31, 0.37, 0.45Tasks: 338 total, 1 running, 337 sleeping, 0 stopped, 0 zombieCpu(s): 0.4%us, 0.4%sy, 0.0%ni

2017-08-30 11:15:25 3841

原创 redis分布式锁的思考

在描述设计之前,先提出三个属性,这三个属性是实现高效分布式锁的基础。安全属性:互斥,不管任何时候,只有一个客户端能持有同一个锁。 效率属性A:不会死锁,最终一定会得到锁,就算一个持有锁的客户端宕掉或者发生网络分区。 效率属性B:容错,只要大多数Redis节点正常工作,客户端应该都能获取和释放锁。有几个疑惑:1 单实例的failover场景,如何保证一致性在我们的系统架构里存在一个单点故障,如果R

2017-08-18 12:11:48 322

原创 dubbo中几种protocol的理解

dubbo:service 标签有 protocol这个属性,在多协议时使用,多个协议ID用逗号分隔。那么我们可以看下具体有哪几个值: dubbo 默认 rmi hessian http webservice thrift memcached redis特性dubboDubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者

2017-08-11 16:03:04 9627

转载 java的classloader类加载器

Bootstrap类加载器: 加载JRE/lib/rt.jar Extension类加载器: 加载JRE/lib/ext或java.ext.dirs目录 Application类加载器:加载CLASSPATH环境变量,类加载器工作原则:双亲委派假设你有一个应用需要的类叫作Test.class,首先加载这个类的请求由Application类加载器委托给它的父类加载器Extension类加载器,然后

2017-08-10 18:04:55 226

原创 线程状态

通常可以将线程状态归结为5种: 1. New:new Thread()或者new Runnable() 2. Runnable:调用start方法后 3. Running:运行中,获取必要资源包含CPU资源 4. 阻塞:sleep,wait,suspend 5. 消亡:线程执行结束,程序抛异常简化版图示: 精致版图示: 细化版图片: 阻塞状态细聊: 所谓阻塞状态是正在运行的线程没

2017-08-10 17:57:40 48

原创 redis发布订阅(顺序保证,是否丢失,可靠性保证)研究

公司多个系统之间经常需要相互同步数据,数据同步方式有很多种,常用的有如下几种: 1 接收方主动请求,数据提供方暴露调用接口 2 提供方主动推送,接收方被动接收其中主动推送,有有几种方式:直接调用接收方接口,通过消息中间件等。我们之前使用的rabbitMQ,但是其存在一些天生的缺陷,比如消息顺序的保证,消息的可靠性,事务消息等等。最近在看redis时,突然看到redis支持发布/订阅这种功能,感觉

2017-08-09 19:27:23 4993

原创 微服务架构怎么玩

微服务:重点在服务的粒度小,具体小到什么程度,感觉没有统一标准,都是一些官方说法:职责单一,代码量小,单独进程等。微服务架构:重点在架构,是在微服务基础上对系统架构的一种全盘设计与考虑。那么,究竟如何把微服务玩起来呢? 要先准备些知识: Spring Cloud:eureka(注册中心和服务),ribbon(负载均衡) ,zuul(网关) docker:镜像(创建,推送,拉去),启动,销毁

2017-08-08 18:23:44 472

原创 幂等

幂等:两次调用和一次调用没有什么区别。在失败重试,和定时补偿的时候,一定要考虑幂等性,否则会导致库存锁定,库存释放,库存扣减,库存回滚失败。库存锁定:提交订单锁定库存 库存释放:取消没有支付的订单 库存扣减:支付成功,实际库存扣减,锁定库存扣减 库存回滚:取消已支付的订单

2017-08-07 18:04:00 321

原创 安装docker本地镜像仓库

安装环境: centos 3.10.0-229.el7.x86_64安装docker包yum install docker启动docker服务service docker start运行官方镜像hello world文件,检验是否安装成功docker run hello-world 拉取私服注册包sudo docker pull registry[root@njyf-test-zxl-10-20-2

2017-08-02 21:40:43 1124

原创 reids事务的伪原子性

multi中的命令如果有执行时报错,而不是语法错误的时候,那么exec后,正确的命令依然会执行,并不会因为其中某个命令报错而回滚。参考: https://redis.io/topics/transactions

2017-08-02 21:13:47 246

原创 mysql-B-Tree and Hash Indexes

今日一同事提交sql,发现如下写法USING HASH 的索引ALTER TABLE `shop_banner`ADD INDEX `index_id` (`id`) USING HASH ,ADD INDEX `index_status` (`status`) USING HASH ;通常都是使用默认B-Tree,为何要强制使用HASH索引呢?于是和他了解了一下,他的说法是id一般会用=来查询

2017-08-02 21:08:41 442 1

原创 docker-centos安装docker

切换到root模式。第一步:安装docker软件包yum -y install docker第二步:启动docker服务 service docker start第三步:测试运行hello-worlddocker run hello-world

2017-08-02 11:14:18 231

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