随笔分类 -  源码

源码阅读心得,提升的路径。
摘要:给你一组json数据结构,你把它解析出来到项目中,你会怎么做? 首先,code,msg,data 肯定是固定结构,所以可以抽象出一层 data 的变化,可以使用泛型去适应变化; 其次,data下的数据是 key -> object 的结构,如果直接object表示的话,又不友好了。如果不以objec 阅读全文
posted @ 2019-04-11 18:54 阿牛20 阅读(9458) 评论(1) 推荐(0) 编辑
摘要:zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址: https://github.com/apache/zookeeper , 确认过眼神,它就是你要找有人! 2. 下载源码到本地,下载 ant 工具到本地,(如果还没下载的话: http: 阅读全文
posted @ 2019-03-24 16:16 阿牛20 阅读(5312) 评论(0) 推荐(0) 编辑
摘要:springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我们从最靠近请求末端的地方说起!此时,handler已经找到,即将进行处理! 这是在 RequestM 阅读全文
posted @ 2019-02-18 17:46 阿牛20 阅读(4241) 评论(0) 推荐(0) 编辑
摘要:老生常谈,循环依赖!顾名思义嘛,就是你依赖我,我依赖你,然后就造成了循环依赖了!由于A中注入B,B中注入A导致的吗? 看起来没毛病,然而,却没有说清楚问题!甚至会让你觉得你是不清楚spring的循环依赖的! 那么,spring的循环依赖到底是啥玩意? 来看个循环依赖注入失败的例子: bean1: u 阅读全文
posted @ 2018-12-23 11:21 阿牛20 阅读(6544) 评论(0) 推荐(0) 编辑
摘要:反射是java的一个特性,这一特性也使得它给了广大的第三方框架和开发过者很大的想像空间。 通过反射,java可以动态的加载未知的外部配置对象,临时生成字节码进行加载使用,从而使代码更灵活!可以极大地提高应用的扩展性! 但是,除了停留在使用其华丽功能,我们还可以去看看其实现! 主要看两个方法的使用: 阅读全文
posted @ 2018-12-15 22:16 阿牛20 阅读(37476) 评论(1) 推荐(4) 编辑
摘要:1. 锁介绍 java中锁是个很重要的概念,当然这里的前提是你会涉及并发编程。 除了语言提供的锁关键字 synchronized和volatile之外,jdk还有其他多种实用的锁。 不过这些锁大多都是基于AQS队列同步器。ReadWriteLock 读写锁就是其中一个。 读写锁的含义是,将读锁与写锁 阅读全文
posted @ 2018-12-03 16:38 阿牛20 阅读(1786) 评论(0) 推荐(0) 编辑
摘要:我们都知道,java中对类型的检查是很严格的,所以我们平操作时,也往往很小心。 如题: (T[]) new Object[size],这种写法是一般我们是不会干的!但是有点经验的同学,还是会遇到这样写的。那么,今天咱们就来看看,像这样的写法对不对,也顺便深入理解java的类型转换机制吧! 问题1: 阅读全文
posted @ 2018-11-18 18:55 阿牛20 阅读(2907) 评论(0) 推荐(0) 编辑
摘要:spring中,注册controller的url有多种方式: 1. 你可以啥都不都干,直接使用 @RequestMapping 注解上体路径,然后加上 <component-scan>, 访问的时候就根据这个路径来加载handler了; 2. 如果你想自定义一些路径的访问方式,那么你可以自定义 Re 阅读全文
posted @ 2018-11-14 21:33 阿牛20 阅读(987) 评论(0) 推荐(0) 编辑
摘要:相信spring-mvc这种被玩坏了的架构理念,大家都烂熟于胸了,不过还是想来扒一扒他的细节。 一个http请求,怎么样被 spring 接收,又怎样做出响应呢? 一般地,我们会配置一个 web.xml,然后开始代码之旅。 在 web.xml 中配置 servlet-mapping, 将请求转发到 阅读全文
posted @ 2018-11-11 15:27 阿牛20 阅读(444) 评论(0) 推荐(0) 编辑
摘要:工具除了会用,还应该多做点。我觉得使用一个软件工具(开源类),一般会经历几个步骤: 1. 通过wiki了解大致作用,然后开始码代码; 2. 系统性地学习其特性,找出可能需要的点,用上去; 3. 通过阅读其源码,清楚其来龙去脉; 4. 有能力你就去超越别人; mybatis作为orm框架给我们带来了很 阅读全文
posted @ 2018-11-08 10:47 阿牛20 阅读(2252) 评论(0) 推荐(1) 编辑
摘要:感觉中,OutOfMemeryError(内存溢出错误) 是jvm抛出的异常,是不能被捕获的。 直到工作中真的遇到OOM异常,而且tomcat服务还一直对外提供服务。 那么问题来了: 1. OOM 到底能不能被捕获? 2. jvm抛出OOM后,是否就会立即停止运行呢? 3. jvm什么时候会抛出OO 阅读全文
posted @ 2018-11-04 21:01 阿牛20 阅读(9693) 评论(0) 推荐(0) 编辑
摘要:tomcat 作为知名的web容器,很棒! 本文简单了从其应用命令开始拆解,让我们对他有清晰的了解,揭开神秘的面纱!(冗长的代码流水线,给你一目了然) 话分两头: 1. tomcat是如何启动的? 2. tomcat是如何接收请求的? x. 应用程序是怎样接入tomcat的? 1. 从何处开始? 找 阅读全文
posted @ 2018-10-12 19:11 阿牛20 阅读(2421) 评论(0) 推荐(0) 编辑
摘要:谈到阻塞,相信大家都不会陌生了。阻塞的应用场景真的多得不要不要的,比如 生产-消费模式,限流统计等等。什么 ArrayBlockingQueue, LinkedBlockingQueue, DelayQueue... 都是阻塞队列的实现啊,多简单! 阻塞,一般有两个特性很亮眼:1. 不耗cpu的等待 阅读全文
posted @ 2018-10-07 23:46 阿牛20 阅读(7206) 评论(0) 推荐(3) 编辑
摘要:如果让你来实现一个定时器的功能,简单点就是,每隔n秒,去执行一次A任务,你打算怎么实现? 我觉得一般都能想到,使用一个死循环,然后每次循环比较时间,时间到了就去执行A任务就好了。但是这样会不会有问题?每次循环会不会性能消耗太大?别人都是怎么做的?如果有语言提供的工具,那我自然更加相信他而不是自己去实 阅读全文
posted @ 2018-09-30 12:27 阿牛20 阅读(7716) 评论(0) 推荐(0) 编辑
摘要:如下,是一些java字节码也就是原始的class文件,当应用部署到线上之后,我们能够看到的也就是这样的字样了。那么怎样解呢?就让我们一起,来解读解读字节码吧! 原始类源码如下: 完整字节码文件,如有兴趣请展开: Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000 阅读全文
posted @ 2018-09-26 22:11 阿牛20 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:接上一篇 dubbo-server 之后,再来看一下 dubbo-client 是如何工作的。 dubbo提供者服务示例, 其结构是这样的!dubbo://192.168.11.6:20880/com.alibaba.dubbo.demo.DemoService?anyhost=true&appli 阅读全文
posted @ 2018-09-25 19:15 阿牛20 阅读(2818) 评论(0) 推荐(0) 编辑
摘要:查看运行时生成的文件,以更清楚运行情况。 查看动态生成的类,一般有两个方法: 1. 使用据说是jdk自带包sa-jdi.jar里的工具。 其中,不想自己搞,当然就利用下,sa-jdi.jar 里自带的的sun.jvm.hotspot.tools.jcore.ClassDump就可以把类的class内 阅读全文
posted @ 2018-09-17 10:06 阿牛20 阅读(10664) 评论(1) 推荐(1) 编辑
摘要:额,dubbo的前世今生咱就不说了,有用的人都知道。(最新版本已更名 incubator-dubbo,预计版本3.0,不过咱们就先不掺和别人的开发过程了,以v2.6.3为蓝本) 首先,是工作需要,用到了dubbo用于微服务化各系统。所以,总体来说,是被动学习。 也就是先有了做,依葫芦画瓢,然后才来理 阅读全文
posted @ 2018-08-23 22:05 阿牛20 阅读(1517) 评论(0) 推荐(1) 编辑
摘要:上两章从点到点讲了,cat-client 到 cat-consumer 的请求处理过程,但是怎么样让我们监控给人看到呢?那么就需要一个展示的后台了,也就是本章要讲的 cat-home 模块 ! 带你一起走进cat-home。 作为观察监控的平台,为所需要的人提供着可视化的稳健服务!那是必须的! 作为 阅读全文
posted @ 2018-08-20 22:00 阿牛20 阅读(3097) 评论(0) 推荐(2) 编辑
摘要:之前讲了 cat-client 进行cat埋点上报,那么上报给谁呢?以及后续故事如何?让我们来看看 cat-consumer 是如何接收处理的? 由cat-client发送数据,cat-consumer进行接收请求处理,开始了处理问题之旅! 首先,让我们来回顾一下 TcpSocketSender 是 阅读全文
posted @ 2018-08-17 23:59 阿牛20 阅读(944) 评论(0) 推荐(1) 编辑