自定义博客皮肤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/

  • 博客(145)
  • 资源 (10)
  • 收藏
  • 关注

原创 阿尔萨斯原理解析

i_arthas 是模仿阿里开源的阿尔萨斯写的小工具。整体技术上采用 Java agent 对字节码的加载进 行拦截干涉,利用 ASM/ASM Byte Viewer 实现目标类字节码的加强,通过 Java attach 实现不同 虚拟机进程间的通信,做到了虚拟机层面上的 AOP。整体实现了简易版的 redefine(热替换)、 watch(方法监控)、trace(方法链路追踪)、timeTunnel(流量采集与回放)等功能。

2019-07-19 22:18:30 1435 6

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

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

2019-04-10 21:43:44 1580

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

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

2019-03-14 21:14:36 3300 5

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

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

2019-01-06 14:05:28 648 1

原创 FileChannle 和 MMAP 高性能分析

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

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

原创 BufferedInputStream 底层原理解析

前言RMQ中为了实现高性能在IO上做了很多优化,在阿里中间件性能挑战赛也可以看到很多大神们在IO上花了很多功夫去分析优化,这篇主要来解析一下BufferedInputStream的实现原理,看看它在IO上做了哪些优化。误区看到很多文章是这么描述BufferedInputStream性能高的原因:BufferedInputStream 将数据先保存在了缓存区,从而减少磁盘IO操作次数,提高I...

2018-12-28 10:57:08 1167 2

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

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

2018-12-21 19:47:10 7320 1

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

前言在RMQ中为了提高commitlog文件的读写效率,而采用了一个叫做内存映射的技术。按照我的理解,内存映射在处理大文件上有非常大的性能提升,所以这篇来记录一下我对内存映射的理解。用户态和内核态我们都知道操作系统分为用户态和内核态,内核态表示当前为内核程序执行时的状态,用户态是用户程序代码运行的状态。用户态是不能直接和物理设备打交道的,如果想把硬盘的一块区域读到用户态,则需要两次拷贝(硬...

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

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

前言看到RocketMQ的性能问题的时候,通常能看到page cache、顺序IO写、预读等,要想设计出一个高性能的中间件,这部分的知识是绝对要掌握的。顺序IO读写为什么速度更快当需要从硬盘上读取一个文件时,首先会要求磁头定位到这个文件的起始扇区。这个定位过程包括两个步骤: 磁头定位到对应的磁道; 主轴马达带动盘片转动到正确的位置。这个过程所花费的时间被称为寻址时间。也就是说寻址时间实际...

2018-12-19 12:45:14 430

原创 读源码感

前言最近的时间差不多都围绕着RocketMQ的学习上,一开始从了解RocketMQ的场景到RocketMQ的一个使用,然后到源码的阅读。前面两个过程无需多说,到了读源码的阶段,我时常问自己,读这份源码的意义在于哪?感想我从namesrv的启动类入手开始阅读,作为切入点我觉得没错,但是时常因为某个细枝末节的事情从而打断对整块功能块的认识。这点我觉得是在读源码的一个误区吧,首先你想要掌握所有的...

2018-12-19 12:44:28 461

原创 RocketMQ 源码分析 BrokerStartUp(七)

前言broker是消息接收处理,消息落地的核心模块。这个模块用于接收producer发送的消息以及consumer消费的消息。 本章从broker的启动类入手分析一下broker启动的过程。分析broker是为了能够搞明白master和slave之间的关系,以及消息落地的具体过程。createBrokerControllerbroker启动会获取外部传入的初始化参数, 也会从配置文件中加...

2018-12-14 12:02:48 1077

原创 RocketMQ 源码分析 NettyRemotingServer(六)

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

2018-12-14 12:01:36 987

原创 RocketMQ 源码分析 BrokerHousekeepingService(五)

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

2018-12-13 09:13:19 947 2

原创 RocketMQ 源码分析 RouteInfoManager(四)

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

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

原创 RocketMQ 源码分析 NamesrvController(三)

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

2018-12-11 09:34:38 562

原创 RocketMQ 源码分析 NamesrvStartup(二)

前言上一篇讲到使用命令行启动namesrv时,最终会以NamesrvStartup作为为启动类,所以这篇主要来记录一下NamesrvStartup的源码分析。分析的RocketMQ的版本是4.3.1。NamesrvStartup首先我觉得在看源码的时候,需要把握住一个类的大概流程,而不是看到一个功能块就deep进去。首先要明白namesrv是用来做什么的,简单的来考虑就是一个提供了通信功能...

2018-12-11 09:30:31 893

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

前言在RocketMQ中,NameServer的目的是为了解耦Broker和Producer、Consumer。官方文档对NameServer有一个概括:NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。而且在启动MQ的时候,第一个启动必须是NameServer。所以这篇主要来记录一下NameServer启动的源码分析。脚本启动无论在Windows或者是Linux...

2018-12-08 20:31:09 837

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

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

2018-11-02 16:00:01 2225 7

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

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

2018-03-17 17:06:20 10190 3

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

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

2017-09-29 16:57:56 13332 11

原创 Apache Shiro源码 拦截器过程

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

2017-08-18 20:01:07 2688

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

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

2019-01-17 20:00:01 4438 6

原创 python乱码解决

利用chardet.detect 解析字符串的格式先,然后将其转码Unicode,然后再转为utf-8# coding=utf-8import sysimport chardetimport codecsimport osreload(sys)sys.setdefaultencoding('utf-8')fileT = codecs.open(r'C:\Users\GEKL\De...

2018-10-15 15:16:09 677

原创 mybaits缓存

一级缓存每一个SqlSession中持有了自己的Executor,每一个Executor中有一个Local Cache。在同一个sqlsession中,如果执行的语句是一样的,那么只有在第一次的时候才会去查询数据库,后面都是将Local Cache的数据返回。在同一个sqlsession中还有一个问题是,但执行更新,插入,删除等操作,对应的Local Cache会被更新掉。如sqlse...

2018-03-19 17:01:23 375

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

Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配置Spring和SpringMVC时会出现一些奇怪的异常,比如Bean被多次加载,多次实例化,或者依赖注入时,Bean不能被自动注入,但是明明你已经将该Bean注册了的。找原因还是要看问题的根源,我们从容...

2018-03-11 14:50:57 317

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

java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。并且锁只能升级不能降级。在讲这三个锁之前,我先给大家讲清楚自旋和对象头的概念。自旋现在假设有这么一个场景:有两个线程A,B在竞争一个锁,假设A拿到了,这个时候B被挂起阻塞,一直等待A释放了锁B才得到使用权。在操作系统中阻塞和唤醒是一个耗时操作,如果A在很短的时间内就释放了锁,当这个时...

2018-03-04 12:59:04 8847 3

原创 python 自动化测试

python 实现自动化登录,感觉挺有意思记录一下。selenium的安装网上很多,这里不多说。# coding=utf-8import sysfrom selenium import webdriverreload(sys)sys.setdefaultencoding('utf8')class SeleniumLoginTest(object): def __init_...

2018-03-01 15:02:56 469

转载 https 的前世今生

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

2018-01-31 16:42:42 282

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

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

2018-01-22 20:27:20 2103

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

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

2018-01-21 12:21:50 348

转载 垃圾收集器 参数总结

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

2018-01-21 11:58:24 557

原创 java 并发编程之 ThreadLocal

ThreadLocal在Spring中发挥着重要的作用,在管理request作用域的Bean、事务管理、任务调度、AOP等模块都出现了它们的身影,起着举足轻重的作用。要想了解Spring事务管理的底层技术,ThreadLocal是必须攻克的山头堡垒。与synchronize不同的是,synchronize维护的是一个变量,而ThreadLocal是每一个线程都持有一份,就用空间换时间,而syn

2018-01-11 16:27:51 398

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

应实验室的要求,学习了python,没有很系统的去学,但是常用的一些功能块还是在这记录一下,方便以后使用。文件操作# coding=utf-8import osimport os.pathimport uuidimport reimport sysimport codecsreload(sys)sys.setdefaultencoding('utf-8')# 这里放

2018-01-11 16:08:22 836

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

流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。 拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素

2018-01-03 16:54:29 600

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

博客转载自:http://blog.csdn.net/guoweimelon/article/details/50879588TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输。一、ARQ协议ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是OSI模型中数据链路层和传输层的错误纠正协议之

2018-01-03 16:37:01 496

原创 java并发编程之 CopyOnWriteArrayList

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

2017-12-25 16:11:59 344

转载 JVM GC垃圾回收器详解

HotSpot JVM收集器              上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。Serial(串行GC)收集器Serial收集器是一个新生代收集器,单线程执行,使用复制算法。它在进行垃圾收集时,必须暂停其他所有的工作线程(用户线程)。是Jvm client模式下默认的

2017-12-13 12:16:13 347

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

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

2017-12-09 10:50:02 371

转载 你真的了解hashmap吗?

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

2017-12-06 16:15:49 400

原创 线程池参数解析

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

2017-12-06 15:12:13 883

搜狗新闻分类语料

整理自搜狗实验室中的新闻分类。含有金融、体育、军事等11个分类集。

2018-10-30

hibernate开发包

hibernate开发包

2017-06-11

spring3.0.5-dist.rar

spring开发包

2017-06-08

navicat_mysql

11.0版本的navicat

2017-06-01

杭电数据结构01-15年真题答案

历年师兄传下来的答案,有需要的下载

2017-03-04

杭电数据结构01-16年真题

包括最近一年的16年真题到01年

2016-10-02

android-async-http-1.4.7.jar

2016-06-18

学生管理数据库系统

用mysql,apache,php编写的学生管理系统课程设计

2015-06-21

SDK迷宫游戏

利用SDK完成的小游戏,没有什么算法,简单的判断。

2015-06-18

空空如也

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

TA关注的人

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