自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

列苗

越学习,越发现自己的无知。个人公众号:wlm_tech

原创 [OOM] hbase堆外内存溢出底层定位

单台服务器刚发布时 java 进程占用3g,以一天5%左右的速度增长,一定时间过后进程占用接近90%,触发服务器报警,而此时 old 区占用在 50%,未触发 CMS GC,而导致堆外内存溢出。本文记录了完整的排查过程,涉及 JVM、hbase 读写源码、JDK 原理、MAT 等排查工具使用。

2019-02-17 16:00:46 1374

原创 [SpringMVC] HTTP 请求与响应过程底层源码解析

本文从使用 SpringMVC 出现的两种常见的错误场景展开,深入 SpringMVC 处理 HTTP 请求与响应的底层源码,从中分析错误的原因,并提供相应的解决方案。

2017-12-21 01:29:50 1798

原创 Dubbo 服务引入

本篇文章侧重于 Dubbo 服务引入的实现细节,主要包括:服务引入入口,获取服务地址列表,启动 qos server,注册消费者,构建路由策略链,订阅数据,notify,服务引入,发布服务引入事件,构建 filter 链,合并 invokers 等。

2020-01-12 22:28:07 428

原创 Dubbo SPI之自适应扩展机制 @Adaptive

介绍下 Dubbo SPI 的自适应扩展机制,对应注解 @Adaptive

2020-01-07 23:09:39 333

原创 Dubbo 服务导出

本篇文章侧重于 Dubbo 服务导出的实现细节,主要包括:服务导出入口,加载注册中心地址,创建 invoker 对象,启动 qos server,构建 filter 链,服务导出,发布服务导出事件,注册服务地址,订阅等。

2020-01-07 22:57:39 585

原创 [Spring] 自定义标签解析

Spring 除了实现了默认的标签解析,如 bean, beans, import, alias,还提供了自定义的标签解析机制,由用户实现解析自定义标签的逻辑,如: aop, tx, context 等。

2019-05-21 23:57:45 132

原创 [Dubbo] connections 参数

为某个接口创建独立的连接通道,若未配置该参数,则共享一个连接通道。

2019-03-15 15:12:04 1731

原创 [MySQL] 在线 DDL 工具 gh-ost 原理简介

github 提供的针对 MySQL 无触发器式在线架构迁移解决方案。

2019-03-13 15:17:02 1035

原创 [MySQL] 主从延迟现象及原理分析

凌晨对线上一张表添加索引,表数据量太大(1亿+数据,数据量50G以上),造成主从延迟几个小时,各个依赖从库的系统无法查询数据,最终影响业务。现在就梳理下主从延迟的原理。

2019-01-28 15:42:26 469

原创 [Java] 线程的状态及转换

主要介绍: 1.JDK 的线程状态枚举类 java.lang.Thread.State,及如何相互转换;2. Java 对象的 monitor 和 wait set 。

2019-01-21 18:01:27 215

原创 [Java] 序列化之基本认识

Java 序列化即将 Java 对象转换为二进制序列的过程,主要用于网络通信、持久化存储。

2018-10-15 15:47:01 126

转载 [Java] 查看占用 CPU 最高的线程

先用 top 命令找出进程中占用 CPU 最高的线程pid,再用 jstack 找出具体的线程堆栈。

2018-10-06 14:53:44 1133

原创 记一次堆外内存溢出排查过程

服务器发布/重启后,进程占用内存 21%(3g),观察进程占用内存,以一天4%左右的速度增长,一定时间过后,java 进程内存增长到接近 90%,服务器报警。此时 old 区占用 50%,未达到 CMS GC 阈值,因此不会触发 CMS GC,而导致服务器崩溃。本文记录排查过程,以及最后的解决方案。

2018-09-30 12:58:14 9573 4

原创 内存溢出分析之垃圾回收知识

主要介绍Java 垃圾收集算法、垃圾收集器、JDK 命令行工具 jstat, jmap, jstack 等的使用。

2018-09-30 12:55:58 764

原创 内存溢出分析之工具篇

主要介绍 性能压测工具 jmeter;JDK 自带工具JConsole、JVisualVM;google 推出的 malloc 分析工具 gperftools;eclipse 的 dump 文件分析工具 MAT;sun 推出的 Java 动态追踪工具 btrace;linux 查看进程内存软件 gdb 等的使用

2018-09-28 16:26:57 3602

原创 [maven] maven-assembly-plugin 打包插件简介

主要介绍 maven 打包插件 maven-assembly-plugin 的使用。

2018-05-10 15:23:53 2238

原创 [Redis] 数据类型

主要介绍 Redis 基本数据类型,以及常用的命令。

2018-02-27 14:05:28 175

原创 [SpringMVC 源码] 415 (Unsupported Media Type) 原因及解决方案

一、现象描述前端 ajax 方式调用 springmvc 接口时,返回 415 (Unsupported Media Type) 错误:前端代码:function fSave(url) { var obj = {}; obj['cateId'] = $("input[name=cateId]").val(); obj['cateName'] = $("input[name=ca

2017-12-19 22:31:01 3975

原创 [Java] socket 简介

Socket 是网络上两个程序间双向交流连接的一个端点(类似于打电话时的两台手机),基于TCP/IP协议,稳定有序。

2017-12-14 14:15:13 351 1

原创 [Java] 浅拷贝与深拷贝

Java 中的拷贝分为浅拷贝和深拷贝两种,其中浅拷贝指只拷贝按值传递的数据类型,如基本数据类型、String 类型;而深拷贝除了拷贝浅拷贝的内容外,还负责拷贝引用类型的数据。

2017-12-10 17:43:27 239

原创 [设计模式] 原型模式

主要内容来自《研磨设计模式》一、模式定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型的本质:克隆生成对象。创建型模式。二、模式结构三、代码示例功能描述:当订单数量大于1000时,拆分订单,直至订单数量小于1000。对外统一的订单接口: package com.kascend.test.prototype;/** * 订单接口 * * @author wengliemia

2017-12-10 15:48:59 139

原创 [Java] 抽象类与接口

抽象类和接口的关系:接口是一种特殊的抽象类,所有接口中的属性自动是 public final static 类型,而接口中的方法必须是抽象的抽象类是 abstract 修饰的类。抽象类和抽象方法的关系:抽象类中不一定包含抽象方法,而有抽象方法的类一定是抽象类抽象类与接口比较最大的特点是,抽象类中可以有具体的实现方法使用抽象类的时机:既要约束子类的行为,又要为子类提供公共功能 的时候使用抽象类

2017-12-10 00:36:48 179

原创 [设计模式] 模板方法模式

一、模式定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。二、模式结构三、代码示例场景:有普通登录、管理员登录两种登录方式,其中登录判断的逻辑一致,根据用户名获取登录密码不同。根据模板方法模式设计如下: 登录模板类: 定义登录逻辑,以及相关的原语操作、钩子操作 普通登录类: 继承登录模板类,并实现获取用户密码接口

2017-12-01 17:40:41 204

原创 [DOM] 什么是 DOM

一、写在前面:Dom 即 Document Object Model (文档对象模型),为 HTML、XML 设定的应用程序接口规范;定义了文档的逻辑结构和访问、操作文档的方式;不同环境应用程序访问时由各自语言实现具体的实现,如 Java(org.w3c.dom),ECMAScript;以 OMG IDL 方式定义接口规范二、DOM Core未完待续,详情见文档。三、Java (org.w

2017-12-01 17:37:00 430

原创 [Spring 源码] bean 加载机制

本文主要内容为: spring 如何通过 XmlBeanFactory 解析并注册 bean.xml 配置文件中的 bean。bean.xml 配置文件为:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://

2017-12-01 17:12:52 876

原创 [MySQL] limit 性能

一、结论语法结构: limit offset, rows结论:rows 相同条件下,offset 值越大,limit 语句性能越差二、测试执行测试: 5750000 条数据 select * from gift_record_0 limit 1000 0.11 s select * from gift_record_0 limit 10000, 1000

2017-06-19 13:41:11 1091

原创 [Spring] @AutoWired @Resource 区别

AutoWired 为spring提供的注解,Resource 为 J2EE 提供,在 javax.annotation.Resource 包下,但spring支持该注解;AutoWired 按 byType 注入,想按名称注入,可结合 @Qualifer(value = “”) 。且默认不允许依赖的对象为 null,可设置 required = false 允许 null; Resource 按

2017-05-25 15:24:57 469

原创 [MySQL] varchar(220) 存储长度

结论: MySQL 5.0 版本以上, varchar(220) 表示存储的字符的长度为 220,而与存储的是数字、字母还是汉字无关,只与字符集编码有关:utf8mb4 编码,占用4个字节,最多可设置的长度是: 65533/4 ≈ 16383utf8 编码,占用3个字节,最多可设置长度为: 65533/3 ≈ 21844gbk 编码,占用2个字节,最多可设置长度为: 65533/2 ≈ 32

2017-04-17 14:02:49 1129

原创 [Java] String 长度限制

一、Java String 变量长度限制根据 String 源码: 因此,理论上 String 变量长度限制为 int 类型的最大值,即 Integer.MAX_VALUE = 2^31 - 1 = 2147483647,约等于 2G。注:实际还和 java 堆内存大小有关。二、Java String 常量长度限制而在 Java 中,由于字符串常量池的存在,String 常量长度限制取决于 S

2017-03-10 16:30:07 20321 1

原创 [MySQL] specified key was too long max key length is 767bytes

一、问题描述描述:创建唯一索引时,数据库报错: specified key was too long max key length is 767bytes数据库版本:5.5.22-log引擎: InnoDB数据库结构为:CREATE TABLE `cdkey` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cdkey` varchar(200) NO

2016-12-22 15:29:37 11148 1

原创 [iframe] 扩展百度ueditor时获取dialog内的表单值

百度ueditor的dialog弹出层方式为,创建一个 iframe,在 iframe 里打开一个 html 页面,因此问题转化为:如何从 iframe 中获取表单内容根据iframe的id属性,获取window;即可使用 window.document.getElementById(“id”);代码如下:$({ var window = fGetWindow("iframeId");

2016-12-20 20:39:32 2299

原创 [MySQL] count(*) vs count(1) vs count(column)

MySQL版本:5.7.9数据表结构为: category: InnoDB 引擎,无索引CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(220) NOT NULL, `created_time` datetime NOT NULL, `updated_time` datet

2016-10-21 18:00:16 4271

转载 [MyBatis] MySQL like, >=, <= 写法

like 写法:`company` like concat('%', #company#, '%')>=, <= 写法:<![CDATA[`updated_time` >= #updateTime#and `updated_time` <= #updateTime#]]>

2016-10-19 15:36:08 575

原创 [MySQL] 并发更新性能测试

MySQL 版本:5.7.9 表结构:CREATE TABLE `award` ( `id` int(11) NOT NULL AUTO_INCREMENT, `award` varchar(255) DEFAULT NULL, `count` int(11) NOT NULL COMMENT '数量', `created_time` datetime NOT NULL DEFAU

2016-10-13 18:34:23 6889 1

翻译 [MySQL] 行级锁SELECT ... LOCK IN SHARE MODE 和 SELECT ... FOR UPDATE

一、译文翻译来自官方文档:Locking ReadsIf you query data and then insert or update related data within the same transaction, the regular SELECT statement does not give enough protection. Other transactions can upda

2016-10-10 16:09:47 8673 3

转载 [Java] CountDownLatch 模拟高并发

参考: Class CountDownLatch Coordinating threads with CountDownLatch一、简介CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个或多个线程在其他的线程的一系列操作完成之前一直等待,初始化值为计数器大小(即线程数量)。二、使用场景同时启动多个线程;多个线程操作完成之前一直等待。

2016-10-09 18:30:51 5028

转载 常用 MySQL 修改表结构命令

一、字段1、添加字段:alter table `product` add `inventory` int(11) NOT NULL COMMENT '库存'添加多个字段:加括号,逗号分隔alter table `category` add (`company` tinyint(4) NOT NULL COMMENT '公司',`date` varchar(40) NOT NULL COMMENT

2016-09-29 13:45:31 6371 1

原创 MyBatis, MyBatis-Spring 常用访问数据库的方式

一、MyBatis 访问数据库的方式使用 MyBatis 的主要 Java 接口就是 SqlSession,可通过 SqlSessionFactoryBuilder 创建 SqlSession。文档:MyBatis 官方文档二、MyBatis-Spring 访问数据库的方式文档:MyBatis-Spring 文档先放出结论,MyBatis-Spring 访问数据库的方式有三种:SqlSession

2016-09-28 14:52:00 5693

原创 TreeMap 实现降序原理及Key 是否可以为 null

一、TreeMap 实现降序排列的原理TreeMap 底层为数据结构为红黑树,默认为升序排序方式。整个红黑树的结构为:根节点值大于所有左子树节点值,小于所有右子树节点值,由此整个红黑树以深度优先搜索方式遍历一遍为从小到大的升序排列。 如需改为降序排列方式,则应自定义实现 Comparator 接口。降序排列实现示例:Map<Integer, Object> map = new TreeMap<In

2016-09-25 15:04:42 6113

原创 微信开放平台与微信公众平台简介

微信开放平台地址:微信开放平台微信公众平台地址:微信公众平台一、微信开放平台常用功能app:分享与收藏微信登录微信支付智能接口(具体参看文档)网站:微信登录智能接口(具体参看文档)公众账号:消息接口(发送消息,或点击事件)二、微信公众平台常用功能订阅号、服务号皆有:接收消息和回复消息获取用户基本信息(关注者与公众号产生消息交互后,可获得openid)服务号(微信认证):网

2016-09-18 19:06:54 4112

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