专注java技术,热爱长跑和阅读开源代码 邮箱 lebron374@163.com
开篇 在elasticsearch的源码当中存在HotThreads.java这个类,里面有一些采集热点线程的方法,刚好我们组的大神本着拿来主义精神把该部分代码应用到了我们线上程序,正好拿来做个简单分享。
开篇 本篇文章主要是是想从源码角度梳理下web应用加载的全过程,注意这里重点是梳理应用加载的整体过程,对于真正执行web应用加载的细节部分后面会有专门的文章进行梳理。
距离国庆已经过去两周了,两周时间似乎过的很快,似乎什么都没做但似乎又好像做了什么东西,路上遇到朋友说最近怎么没有写读书笔记,我想了想或许是自己不知道怎么下笔吧。
开篇 这篇文章主要是把Tomcat的start启动过程的时序图和源码进行结合,加深一下印象,同时在分析源码过程中会分析下Tomcat的代码设计结构供自己提升抽象能力,想更好的阅读这部分代码提前了解以下问题。
开篇 这篇文章主要是把Tomcat的初始化过程的时序图和源码进行结合,加深一下印象,同时在分析源码过程中会分析下Tomcat的代码设计结构供自己提升抽象能力。
开篇 这篇文章主要是将Tomcat的架构图从源码角度解析了一下,基本上就是把图和源码串联起来。 Tomcat 总体架构 Tomcat 总体架构 Catalina - 入口 Catalina对象包含Server对象变量,在初始化过程中通过Digester注入Server来实现。
开篇 这篇文章主要对Tomcat 解析conf/server.xml文件进行了一下流程的分析,对比server.xml的配置文件和代码部分能够建立起一定的关联即可。
开篇 首先一定要先感谢《Tomcat架构解析》一书的作者刘光瑞,对于我这样的新手来说,这本书关于Tomcat总体架构的介绍能够让我快速的了解整个架构的设计背景,达到了循序渐进的目的,在这里非常推荐新手入手一本。
开篇 在看《Tomcat 架构解析》时候,对server.xml的配置文件产生了兴趣,刚好在网上搜了搜一些资料,发现一篇比较好的文章《详解Tomcat 配置文件server.xml》,特意转载过来供有兴趣的人一起研究。
开篇 不知道从哪个途径被安利买了一本《Tomcat架构解析》的书,突然对Tomcat来了兴趣,准备花一段时间好好研究这个对自己来说是黑盒的容器,所以在未来一段时间里朋友圈应该会有大量这方面的分享。
背景 九月份的最后一天抽空跟公司的java大神聊了会天,发现每天跟大神们聊天总能收获很多思路,想想接受了大神那么多的指点,就把他的一点小技巧分享出来。 这次介绍的是JAVA 工程自动通过工具生成标准工程,按照指定步骤生成整个项目工程,解决每次新建项目工程相互拷贝的问题,我也是在用了一次以后发现这个功能很好,就去找原作者请教了一下,因而有了这篇文章用以致敬原作者。
《定位》一书出版的时间非常早,摘录了一段来自百度百科的词条,仅供参考,之所以说仅供参考是因为我对营销完全任何储备知识,看《关联》这本书的初衷也是在看江南春的《抢占心智》时候被安利的,目的也是仅仅为了有一些基础概念而已。
中秋,成都,始于曼姐请吃的第一顿川坝子火锅,别于人菠同学的墨西哥口味西餐,一座城市的温暖在于这里的同学和朋友,遗憾没能一一见上成都的朋友。 中秋,Airbnb成都民宿,火锅,串串,川菜,宽窄巷子,人民公园,锦里,熊猫基地,以及心心念念的九眼桥酒吧一条街。
开篇 《抢占心智》一书全名是《抢占心智 产品与品牌快速崛起的引爆打法》,是分众传媒创始人江南春的首部作品,知道分众传媒已经不知道源于何时了,不过很巧的是小区的电梯广告位就是分众传媒的,当看到电商的新书排行榜推出这本书时就毫不迟疑的购买了,阅读之后发现对于我这样的外行而言也算是长了眼界,解答了之前很多的困惑。
首先表明立场,我非常不推荐这本书,因为这本书给我的感觉是非常的肤浅,翻翻作者的作品,基本上都偏重于鸡汤类的文章,不过按照网上说法书的销量的确还可以,说明迎合消费者需求的书市场还是很大的。
开篇 写这篇文章是因为近期在准备双11大促资源的盘点,盘点过程中发现部门占用的redis空间总共720G已经接近占满了,正常情况下第一反应是联系采购新的服务器扩容内存,但是因为好奇我们的redis集群内部数据占用情况而打算先分析一下,这才有这篇文章,也给所有想对redis内存存储一窥究竟的同学提供一个思路。
背景 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
对于《下一个倒下的会不会是华为》这本书的读后感我是抱着非常谦卑的心态来写的,我肯定自己是写不好,一是内容太长而是资历太浅,内心有那么一点纠结。 必须阐明这不是一本粉饰华为的书,也不是一本宣扬华为的书,书中主要讲的是一些通用的管理上的思想,而且后者带给人很强的认同感,有种书的作者用他独有的语言表达了我想表达但又不知道如何表达的东西,直戳心灵发人深省。
背景 先交代下问题背景,因为某种原因,我们需要在dubbo中使用多注册中心模式,整体上的网络拓扑类似下图。 服务A通过注册中心A向外提供rest接口 服务A通过注册中心B引用注册在中心中心B的服务BCD 服务BCD通过注册中心B向外提供dubbo接口 网络拓扑 抽丝剥茧排查问题 服务A原本在X机房已经正常在运行的,只不过服务A和服务BCD同时注册在同一个注册中心而已。
开篇 BufferedWriter和BufferedReader是对称的,一并分析下源码。 源码分析 构造函数 BufferedWriter的构造函数通过缓冲区char cb[]数组保存待持久化字符 缓存区默认大小为8192 BufferedWriter跟BufferedReader一样采用装饰者模式进行设计,通过内部Writer out对象保存被装饰的Writer对象。
开篇 在设计模式中有一种叫做装饰者模式,刚好BufferedReader的源码是这个设计模式的最好例子,一并看下源码。 源码分析 构造函数 BufferedReader的类变量的Reader in 用以构造函数参数中的Reader in参数,BufferedReader的所有读写操作都通过Reader对象进行操作。
开篇 看了源码之后会发现有关java的String知识点面试的确很无聊,但凡看过代码的基本上都知道,所以我们去面试别人就用这个去面试别人就是为了验证别人有没有看过源码? String源码分析 String通过char value[]的字符数组来保存数据。
开篇 回想研究生期间在H3C做项目的时候第一次接触epoll的异步事件,心血来潮看了下java的NIO的实现,希望同样感兴趣的人一起看看。Netty是java NIO的集大成者,一定要看看。
在上上周看完了曾奇蜂老师的《你不知道的自己》这本书(豆瓣评分8.1分),已经不记得从哪里看到这本书,或许是杭州图书馆公众号推荐的吧,这个公众号经常推荐一些比较新的书,有兴趣的可以订阅一下。
开篇 最近刚刚看了Uber开源的JVM Profiler的源码,对里面的修改字节码的流程有了一定的认识,刚好之前看到网上有人写了一篇关于java类加载时机与过程的文章,想了想决定把两者合并起来写一下。
开篇 先来调侃一句,原来独角兽Uber的程序员写的代码也是看得懂的,而且还是比较容易看得懂的,所以有时候在设计模式和代码结构清晰以及可读性方面我还是更倾向于后者,宁可重复或浪费一部分代码也要整个代码的可读性更强一些。
开篇 JVM Profiler采集完数据后可以通过多种途径上报数据,对接Console,File,redis,kafka等,这篇文章会把源码罗列一下毕竟都很简单。
开篇 JVM Profile的方法采集通过修改字节码在原来方法体的前置和后置增加采集耗时的代码。核心是基于基于java自带的instrument包和javassist包来实现的。
开篇 StacktraceCollectorProfiler主要用来采集线程的调用栈,原理是通过ManagementFactory.getThreadMXBean()返回的ThreadMXBean对象来实现。
开篇 CpuAndMemoryProfiler主要用来采集cpu和memory相关的信息,采集核心方法都是由ManagementFactory提供的接口: getClassLoadingMXBean() 返回 Java 虚拟机的类加载系统的管理 Bean。
开篇 IOProfiler因为采集方法的限制,目前支持linux系统指标采集,但是不支持mac,windows等操作系统。 IOProfiler通过读取linux系统的/proc/self/io的当前线程的IO指标数据,该文件的内容如下图所示,通过解析成kv键值对完成采集。
开篇 整个JVM Profiler的组件类似于上图,抽象出来主要分为:Class File Transformer:负责转换被监控方法的字节码,在前后增加耗时统计。
开篇 过去的几周把java多线程相关部分的源码粗粗的看了一遍基本上也算告一段落了,后面应该会聚焦看下dubbo、mycat、datax以及剩下部分的mybatis。
开篇 Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。
开篇 CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。
开篇 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
开篇 这篇文章主要从源码角度讲解ReentrantReadWriteLock的ReadLock的加锁和减锁过程。 ReentrantReadWriteLock的ReadLock加锁解锁过程依赖于AQS类,所以有些相同的逻辑可以看看ReentrantLock的逻辑。
开篇 这篇文章主要从源码角度讲解ReentrantReadWriteLock的WriteLock的加锁和减锁过程。 ReentrantReadWriteLock的WriteLock加锁解锁过程依赖于AbstractQueuedSynchronizer(AQS)类,所以有些相同的逻辑可以看看ReentrantLock的逻辑。
开篇 ReentrantReadWriteLock是Lock的另一种实现方式,我们已经知道了ReentrantLock是一个排他锁,同一时间只允许一个线程访问,而ReentrantReadWriteLock允许多个读线程同时访问,但不允许写线程和读线程、写线程和写线程同时访问。
开篇 用图形化的方式加深加锁和解锁过程的解释性。 java源码 - ReentrantLockjava源码 - ReentrantLock之FairSyncjava源码 - ReentrantLock之NonfairSyncjava源码 - ReentrantLock图解加锁过程 加锁流程 1、首先我们分析非公平锁的的请求过程。
开篇 NonfairSync和FairSync相比而言,多了一次抢占机会,其他处理逻辑几乎是一模一样。 NonfairSync的tryAcquire的操作流程中如果发现当前锁未被占用那么立即抢占锁。
开篇 这篇文章主要是讲解FairSync公平锁的源码分析,整个内容分为加锁过程、解锁过程,CLH队列等概念。 首先一直困扰我的CLH队列的CLH的缩写我终于明白,看似三个人的人名的首字符缩写"CLH" (Craig, Landin, andHagersten)。
开篇 写完synchronized自然而然就必须分析一下java体系当中的另外一个锁ReentrantLock,相比synchronized的jvm层实现,ReentrantLock是jdk层面的实现。
开篇 在java的语言世界里,有两种锁,其中之一就是synchronized关键字所代表的锁,然后我准备去看源码的,但是发现这个底层不是jdk实现的所以没有办法在jdk中找到源码,很幸运的是我在互联网上一位大佬的博客中找到一篇我认为迄今为止看到的最好的文章,所以参考大佬的文章写了这篇关于synchronized的总结,希望能够帮助到一些人。
上一篇读书的观后感还是7月初,期间大部分时间都在忙着阅读源码,连我也差点遗忘了写读书笔记,周末趁着下雨天把杰克韦尔奇的《赢》粗略的翻了一遍,合着之前看过的《原则》一书,把两本书读后感一并写了。
开篇 ScheduledThreadPoolExecutor的文章主要需要讲清楚一个核心概念(划重点),如何通过数据结构实现定时调度功能,顺带了解下如何实现循环调度功能。
开篇 部门以前有一个很跳的程序员写了一个神奇的代码,通过不停创建ThreadPoolExecutor而不调用shutdown导致线程过多溢出,然后想想毕竟我还是一个不跳的程序员,所以还是研究研究比较合适。
开篇 这篇文章的主要目标是为了讲解清楚ThreadPoolExecutor的提交任务的过程,非常推荐静下心来仔细阅读。java源码-ThreadPoolExecutor(1)java源码-ThreadPoolExecutor(2)java源码-Thr...
开篇 ThreadPoolExecutor还是很值得仔细看一看的,所以准备分开两篇文章来说明,这篇文章用来说明ThreadPoolExecutor的构造函数、拒绝策略、以及一些额外的线程池工厂的一些细节。
酝酿这篇文章已有一段时间了,一直想把这段时间的跑步感受和人生前30年经历串联起来,让自己活的更加通透一些。 诚然如果三个月前有人告诉我在三个月后的某一天我的月跑步公里数能够达到150公里,我一定会觉得非常不可思议且难以置信,但是现在回过头来看似乎也并非不可能,至于为什么?其实在每次开跑的时候我都会问自己。