自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

没有进步就是退步

个人博客:https://callmejiagu.github.io/

原创 阿尔萨斯原理解析

i_arthas 是模仿阿里开源的阿尔萨斯写的小工具。整体技术上采用 Java agent 对字节码的加载进 行拦截干涉,利用 ASM/ASM Byte Viewer 实现目标类字节码的加强,通过 Java attach 实现不同 虚拟机进程间的通信,做到了虚拟机层面上的 AOP。 整体实现了简...

2019-07-19 22:18:30 458 4

原创 IO多路复用底层原理分析

前言 最近一直忙着找实习以及小论文的实验,导致最近半个月都没有汲取到新的知识,也就这两天空闲的时候才能继续看看Netty。其实网上关于Netty的文章很多,但是能够从底层原理去解释的却不多,我们都知道Netty底层是通过IO多路复用来实现的,那么你们有没有考虑过在底层上IO多路复用又是是如何实现的...

2019-04-10 21:43:44 542 0

原创 如何定位生产环境中的问题(Java)

前言 相信大家在平时工作中,或多或少遇到过些棘手的问题,如CPU负载过高、内存溢出、频繁Full GC等。对刚接触工作的同学来说的确是不知道从哪入手,所以这里我简单介绍一下上面三种问题该如何去定位以及解决,当然解决的方式是不一的,可以根据具体环境的问题灵活使用。 TOP 命令解析 Linux中t...

2019-03-14 21:14:36 1397 4

原创 多线程并发 之 synchronized 锁的优化

为了提高阅读的体验,可以点击这里 前言 早期版本的synchronized在性能上比较差,好在Jdk1.6之后对其进行种种优化,那么这篇我们就来学习一下synchronized锁都有哪些优化操作!因为网上关于这块的解析比较多了,所以基础如自旋、Mark Word就不再复述了,主要讲我对锁优化的认识...

2019-01-06 14:05:28 300 0

原创 FileChannle 和 MMAP 高性能分析

前言 上一篇的博客中,我从底层上分析了BufferInputStream为什么效率会比FileInputStream来得高,这两种方式都是传统的IO,在JDK1.4 中NIO又多了两种新的IO方式:FileChannle 和 MMAP。这里着重来解释FileChannle的高性能的场景。 Fil...

2018-12-30 12:39:28 675 1

原创 BufferedInputStream 底层原理解析

前言 RMQ中为了实现高性能在IO上做了很多优化,在阿里中间件性能挑战赛也可以看到很多大神们在IO上花了很多功夫去分析优化,这篇主要来解析一下BufferedInputStream的实现原理,看看它在IO上做了哪些优化。 误区 看到很多文章是这么描述BufferedInputStream性能高的...

2018-12-28 10:57:08 385 0

转载 内存映射 mmap的理解(转载+整理)

前言 上一篇解释了RMQ为了提高大文件的读写效率,使用了内存映射的方法,将磁盘上的文件与进程中的进程虚拟空间进行了映射,减少一次内核空间到用户空间的一次复制。看到这里我就有了疑惑,既然内存映射有这么好的特性,为什么还需要传统的IO呢?看下文的分析。 进程中的虚拟内存 mmap是将文件与进程虚拟空...

2018-12-21 19:47:10 4192 0

转载 RocketMQ 源码分析 消息存储(预备知识二)(转载+整理)

前言 在RMQ中为了提高commitlog文件的读写效率,而采用了一个叫做内存映射的技术。按照我的理解,内存映射在处理大文件上有非常大的性能提升,所以这篇来记录一下我对内存映射的理解。 用户态和内核态 我们都知道操作系统分为用户态和内核态,内核态表示当前为内核程序执行时的状态,用户态是用户程序代...

2018-12-21 09:31:04 180 1

原创 RocketMQ 源码分析 消息存储(预备知识一)

前言 看到RocketMQ的性能问题的时候,通常能看到page cache、顺序IO写、预读等,要想设计出一个高性能的中间件,这部分的知识是绝对要掌握的。 顺序IO读写为什么速度更快 当需要从硬盘上读取一个文件时,首先会要求磁头定位到这个文件的起始扇区。这个定位过程包括两个步骤: 磁头定位到对应...

2018-12-19 12:45:14 197 0

原创 读源码感

前言 最近的时间差不多都围绕着RocketMQ的学习上,一开始从了解RocketMQ的场景到RocketMQ的一个使用,然后到源码的阅读。前面两个过程无需多说,到了读源码的阶段,我时常问自己,读这份源码的意义在于哪? 感想 我从namesrv的启动类入手开始阅读,作为切入点我觉得没错,但是时常因...

2018-12-19 12:44:28 203 0

原创 RocketMQ 源码分析 BrokerStartUp(七)

前言 broker是消息接收处理,消息落地的核心模块。这个模块用于接收producer发送的消息以及consumer消费的消息。 本章从broker的启动类入手分析一下broker启动的过程。 分析broker是为了能够搞明白master和slave之间的关系,以及消息落地的具体过程。 crea...

2018-12-14 12:02:48 618 0

原创 RocketMQ 源码分析 NettyRemotingServer(六)

前言 已经写了几篇关于RocketMQ源码的分析,可能对其逻辑处理会多一点认识,但还没深入到RocketMQ精髓中。比如MQ中的通信是如何实现的、如何实现高性能,高可用、最终一致性、MQ 消息存储。这些才是我们阅读源码的一个目标。所以这篇通过分析源码的来了解一下RocketMQ通信机制。 本文很大...

2018-12-14 12:01:36 481 0

原创 RocketMQ 源码分析 BrokerHousekeepingService(五)

前言 RocketMQ在早期版本使用的是Zookeeper,考虑到Zookeeper不够轻量,后面用namesrv来代替。熟悉Zookeeper的知道它使用心跳检测来判断服务是否正常,那么namesrv肯定也少不了这块功能,那么它是怎么判断一个Broker节点是否Live呢?如果一个Broker断...

2018-12-13 09:13:19 242 0

原创 RocketMQ 源码分析 RouteInfoManager(四)

前言 在上一章分析了NamesrvController的构造函数时,会生成一个RouteInfoManager对象,该对象存放着整个消息集群的相关消息,所以这里单独拿出来分析。其实试想一下namesrv的功能不就是一个提供了通信功能的一个队列嘛,而RouteInfoManager保留了所有信息的路...

2018-12-12 09:40:05 337 1

原创 RocketMQ 源码分析 NamesrvController(三)

前言 上一篇在讲到createNamesrvController方法的时候,根据NamesrvConfig和NettyServerConfig对象生成了一个NamesrvController对象,当时并没有deep到该类中,所以这篇来记录一下NamesrvController构造函数的分析。 N...

2018-12-11 09:34:38 276 0

原创 RocketMQ 源码分析 NamesrvStartup(二)

前言 上一篇讲到使用命令行启动namesrv时,最终会以NamesrvStartup作为为启动类,所以这篇主要来记录一下NamesrvStartup的源码分析。分析的RocketMQ的版本是4.3.1。 NamesrvStartup 首先我觉得在看源码的时候,需要把握住一个类的大概流程,而不是看...

2018-12-11 09:30:31 443 0

原创 RocketMQ 源码分析 nameser启动(一)

前言 在RocketMQ中,NameServer的目的是为了解耦Broker和Producer、Consumer。官方文档对NameServer有一个概括:NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。而且在启动MQ的时候,第一个启动必须是NameServer。所以...

2018-12-08 20:31:09 460 0

原创 基于MySQL网络通信协议 编写自己的JDBC

基于MySQL网络协议实现自己的数据库驱动。主要是利用Wireshark解析MySQL的packet,使用Socket实现通信。具体实现思路可以点击下方的个人博客查看 。代码上传至GitHub。 在实现功能,借鉴了 sea-boat的packet实现,在其基础上进行功能块的编写,如查询功能可以看下...

2018-11-02 16:00:01 1115 0

原创 Cglib源码分析 invoke和invokeSuper的差别

Cglib的实例 本文重在源码的分析,Cglib的使用不再复述。 //被代理类 public class InfoDemo { public void welcome (String person){ System.out.println("welcome :...

2018-03-17 17:06:20 5987 2

原创 Java并发编程 之 同步队列与等待队列

在上一篇博客中,我简单的介绍了对Condition和ReentrantLock的使用,但是想要更好的掌握多线程编程,单单会用是不够的。 这篇我会针对Condition方法中的await和signal的实现原理来梳理一下我的理解。首先我们需要了解同步队列和等待队列的概念。简单的理解是同步队列存放着竞...

2017-09-29 16:57:56 9375 6

原创 Apache Shiro源码 拦截器过程

Apache Shiro是Java的一个安全框架,使用的人也越来越多,但很多人只是停留在了会使用的的阶段,可能配置文件也只是网上demo的复制修改,却不知道真正的含义是什么。 今天我用shiro的拦截器为入口,简单的过一点shiro的源码 ,有错误的地方希望大家能给指出。首先我们看一下配置文件中拦...

2017-08-18 20:01:07 2405 0

原创 词向量相似性(Word Similarity)、类比任务(Word Analogy)实验数据

词向量验证的方法通常有: 词的相似性任务(Word Similarity) 以及 词的类比任务 (Word Analogy)。 词的相似性任务-Word Similarity 常用的英文数据集:WordSim-353 、MEN、SCWS 常用的中文数据集:wordsim-240、wordsim-...

2019-01-17 20:00:01 1955 4

原创 python乱码解决

利用chardet.detect 解析字符串的格式先,然后将其转码Unicode,然后再转为utf-8 # coding=utf-8 import sys import chardet import codecs import os reload(sys) sys.setdefaultencodi...

2018-10-15 15:16:09 456 0

原创 mybaits缓存

一级缓存 每一个SqlSession中持有了自己的Executor,每一个Executor中有一个Local Cache。在同一个sqlsession中,如果执行的语句是一样的,那么只有在第一次的时候才会去查询数据库,后面都是将Local Cache的数据返回。 在同一个sqlsession中...

2018-03-19 17:01:23 237 0

转载 Spring与SpringMVC的容器关系分析

Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配置Spring和SpringMVC时会出现一些奇怪的异常,比如Bean被多次加载,多次实例化,或者依赖...

2018-03-11 14:50:57 219 0

原创 偏向锁、轻量锁、重量锁的理解

java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。并且锁只能升级不能降级。 在讲这三个锁之前,我先给大家讲清楚自旋和对象头的概念。 自旋 现在假设有这么一个场景:有两个线程A,B在竞争一个锁,假设A拿到了,这个时候B被挂起阻塞,一直等待A...

2018-03-04 12:59:04 4216 1

原创 python 自动化测试

python 实现自动化登录,感觉挺有意思记录一下。selenium的安装网上很多,这里不多说。 # coding=utf-8 import sys from selenium import webdriver reload(sys) sys.setdefaultencoding('...

2018-03-01 15:02:56 333 0

转载 https 的前世今生

https://juejin.im/post/5a7146fd51882573351a9d99

2018-01-31 16:42:42 184 0

原创 玩转百度AI 之 词向量相似度

也不知道百度什么时候退出了一个AI开发平台,提供了很多接口,刚好和实验室的项目和很多的是相关的,就来看看百度AI平台上效果如何。 首先在你的应用列表创建一个应用,创建完成后会生成一个AppID、API Key、Secret Key。 然后在git bash输入:curl -i -k ‘ht...

2018-01-22 20:27:20 1474 0

原创 垃圾收集器 问题排查初体验

记得之前碰到一个问题,jvm默认情况下使用的是哪个收集器? 这个问题其实是要分情况考虑的,因为jvm会根据你PC机的配置,选择server还是client模式。 server的性能更好,所以对你机器的配置要求更高,如果是多核处理器,内存大一点就会选择server模式。 server在默认的情...

2018-01-21 12:21:50 255 0

转载 垃圾收集器 参数总结

垃圾收集器参数总结-XX:+ 启用选项-XX:- 不启用选项-XX:= -XX:=参数描述-XX:+UseSerialGCJvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收-XX:+UseParNewGC打开此开关后,使用Par...

2018-01-21 11:58:24 411 0

原创 java 并发编程之 ThreadLocal

ThreadLocal在Spring中发挥着重要的作用,在管理request作用域的Bean、事务管理、任务调度、AOP等模块都出现了它们的身影,起着举足轻重的作用。要想了解Spring事务管理的底层技术,ThreadLocal是必须攻克的山头堡垒。 与synchronize不同的是,synch...

2018-01-11 16:27:51 211 0

原创 python 文件操作、数据库读写、爬虫功能块 记录

应实验室的要求,学习了python,没有很系统的去学,但是常用的一些功能块还是在这记录一下,方便以后使用。 文件操作 # coding=utf-8 import os import os.path import uuid import re import sys import codecs...

2018-01-11 16:08:22 675 0

转载 拥塞控制和流量控制区别分析

流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。  拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或...

2018-01-03 16:54:29 306 0

转载 TCP连续ARQ协议和滑动窗口协议

博客转载自:http://blog.csdn.net/guoweimelon/article/details/50879588 TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。 一、ARQ协议 ARQ协议,即自动重传请求...

2018-01-03 16:37:01 304 0

原创 java并发编程之 CopyOnWriteArrayList

我们都知道在java容器中ArrayList是线程不安全的,而vector是线程安全的。那么针对线程安全和不安全来说,这两个容器应该是够用了,为什么还要出现一个CopyOnWriteArrayList这个容器呢?CopyOnWriteArrayList是线程安全的,那么它较vector有哪些优势呢...

2017-12-25 16:11:59 183 0

转载 JVM GC垃圾回收器详解

HotSpot JVM收集器               上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 Serial(串行GC)收集器 Serial收集器是一个新生代收集器,单线程执行,使用复...

2017-12-13 12:16:13 217 0

转载 MySQL的MyISAM与InnoDB的索引方式

在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。

2017-12-09 10:50:02 241 0

转载 你真的了解hashmap吗?

整理了一些关于hashmap的面试题。 为什么在链式长度为8的时候才构建红黑树

2017-12-06 16:15:49 219 0

原创 线程池参数解析

线程池不恰当的设置会导致效率低下,设置低于单线程的效率。corePoolSize,核心线程数的个数。 当线程池被创建时,默认的情况下是没有线程产生的,除非调用了prestartCoreThread()的方法。这里假设没有调用prestartCoreThread(),那么一开始的时候线程的个数为0...

2017-12-06 15:12:13 681 0

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