随笔分类 -  源码

源码阅读心得,提升的路径。
摘要:经过前面几章的简单介绍,我们已经大致了解了jvm的启动框架和执行流程了。不过,这些都是些无关痛痒的问题,几行文字描述一下即可。 所以,今天我们从另一个角度来讲解jvm的一些东西,以便可以更多一点认知。即如题:jvm是如何找到对应的java方法,然后执行的呢?(但是执行太复杂,太重要,我们就不说了。我 阅读全文
posted @ 2021-02-21 20:08 阿牛20 阅读(698) 评论(0) 推荐(1) 编辑
摘要:要想写出高性能高并发的应用,自然有许多关键,如io,算法,异步,语言特性,操作系统特性,队列,内存,cpu,分布式,网络,数据结构,高性能组件。 胡说一通先。 回到主题,线程池。如果说多线程是提高系统并发能力利器之一,那么线程池就是让这个利器更容易控制的一种工具。如果我们自己纯粹使用多线程基础特性编 阅读全文
posted @ 2021-02-20 16:19 阿牛20 阅读(467) 评论(0) 推荐(1) 编辑
摘要:上两篇中梳理了整个java启动过程中,jvm大致是如何运行的。即厘清了我们认为的jvm的启动过程。但那里面仅为一些大致的东西,比如参数解析,验证,dll加载等等。把最核心的loadJavaVM()交给了一个dll或者so库。也就是真正的jvm我们并没有接触到,我们仅看了一个包装者或者是上层应用的实现 阅读全文
posted @ 2021-02-16 14:46 阿牛20 阅读(813) 评论(0) 推荐(1) 编辑
摘要:上一篇粗略讲了下jvm的启动过程,但很多路子还没跑通。其中非常核心的,加载vm的过程。这个可以在hotspot中找到端倪。但jvm启动,又是如何载入java代码呢。 1. JavaMain加载流程 我们知道,java中入口是在main方法中,可以在命令行中指定main类,或者jar包中指定的mani 阅读全文
posted @ 2021-02-13 20:24 阿牛20 阅读(389) 评论(2) 推荐(1) 编辑
摘要:jvm是java的核心运行平台,自然是个非常复杂的系统。当然了,说jvm是个平台,实际上也是个泛称。准确的说,它是一个java虚拟机的统称,它并不指具体的某个虚拟机。所以,谈到java虚拟机时,往往我们通常说的都是一些规范性质的东西。 那么,如果想要研究jvm是如何工作的,就不能是泛泛而谈了。我们必 阅读全文
posted @ 2021-02-07 08:50 阿牛20 阅读(1624) 评论(0) 推荐(0) 编辑
摘要:Netty作为一个流行的应用框架,它的强悍之处主要有两点:1. 是性能强悍,可以轻松承载数万并发; 2. 其编程模型简单,容易上手; 这就给大家打开了一扇通向高性能的大门。 我在rocketmq的一篇文章里阐述过,高性能的核心本质和实现原理。主要就是依赖于操作系统提供的高效io模型和内存控制。有兴趣 阅读全文
posted @ 2021-01-31 17:10 阿牛20 阅读(1344) 评论(0) 推荐(0) 编辑
摘要:上一篇中,我们了解了如何nginx的配置原则及解析框架,以及解析location配置的具体实现,相信大家对该部分已经有了比较深刻的认识。 本篇,我们进一步来了解下,解析之后的配置,如何应用到实际中的吧。当然,我们只讲解 location 的查找过程。 1. location的接入流程 在nginx的 阅读全文
posted @ 2021-01-24 17:00 阿牛20 阅读(764) 评论(0) 推荐(0) 编辑
摘要:nginx成为非常流行的代理服务软件,最根本的原因也许是在于其强悍性能。但还有一些必要的条件,比如功能的完整,配置的易用,能够解决各种各样的实际需求问题,这些是一个好的软件的必备特性。 那么,今天我们就来看看nginx配置的部分原则和解析原理吧。我们只做location部分的细节解析,但其他配置道理 阅读全文
posted @ 2021-01-19 10:18 阿牛20 阅读(1251) 评论(3) 推荐(0) 编辑
摘要:说到json,相信没有人会陌生,我们天天都在用。那么,我们来讨论个问题,json有序吗?是谁来决定的呢?如何保持? 说到底,json是框架还是啥?实际上它只是一个数据格式,一个规范标准,它永远不会限制实现方的任何操作,即不会自行去保证什么顺序性之类的。json的格式仅由写入数据的一方决定其长像如何。 阅读全文
posted @ 2021-01-10 15:37 阿牛20 阅读(9771) 评论(1) 推荐(0) 编辑
摘要:hive原本不是用来做简单的crud的,但有时候我们就是有可能这么干,怎么办呢? hive 还是提供了相应的功能的,查询是最必须的,就无须多说了。 插入数据一般来说都是大批量的插入,一般用于从源数据中导入数据到hive中,然后经过hive加工后,写入到一张新的结果表。而这个表的数据一般也会很大,具体 阅读全文
posted @ 2021-01-07 09:05 阿牛20 阅读(5141) 评论(0) 推荐(0) 编辑
摘要:消息中间件,说是一个通信组件也没有错,因为它的本职工作是做消息的传递。然而要做到高效的消息传递,很重要的一点是数据结构,数据结构设计的好坏,一定程度上决定了该消息组件的性能以及能力上限。 1. 消息中间件的实现方式概述 消息中间件实现起来自然是很难的,但我们可以从某些角度,简单了说说实现思路。 它的 阅读全文
posted @ 2021-01-02 23:08 阿牛20 阅读(2123) 评论(1) 推荐(1) 编辑
摘要:分布式系统的三大理论CAP就不说了,但是作为分布式消息系统的rocketmq, 主从功能是最最基础的保证可用性的手段了。也许该功能现在已经不是很常用了,但是对于我们理解一些分布式系统的常用工作原理还是有些积极意义的。 今天就一起来挖挖rocketmq是如何实现主从数据同步的吧。 1. 主从同步概述 阅读全文
posted @ 2020-12-27 21:02 阿牛20 阅读(3500) 评论(0) 推荐(0) 编辑
摘要:上一篇文章讲了如何设计和实现高并发高性能的应用,从根本上说明了一些道理。且以rocketmq的mappedFile的实现作为一个突破点,讲解了rocketmq是如何具体实现高性能的。从中我们也知道,mappedFile只是其利用的操作系统的一个特性小点。 今天,我们就来说说,rockmq实现高性能的 阅读全文
posted @ 2020-12-26 20:50 阿牛20 阅读(2512) 评论(0) 推荐(1) 编辑
摘要:业务场景,基于同一套代码,可能会有不同的部署需求。原因可能是为做数据隔离,权限隔离,等等。。。 没有什么新的实际需求,基本上只要根据新的环境配置把代码部署过去就可以了。说直接点,就是配置文件不一样。如何处理呢? 1. 多环境部署解决方案列举 要解决这类问题,实际上已经有很多的现成的案例了。我们唯一的 阅读全文
posted @ 2020-12-22 16:48 阿牛20 阅读(440) 评论(0) 推荐(0) 编辑
摘要:RocketMQ作为消息中间件,经常会被用来和其他消息中间件做比较,比对rabbitmq, kafka... 但个人觉得它一直对标的,都是kafka。因为它们面对的场景往往都是超高并发,超高性能要求的场景。 所以,有必要深挖下其实现高性能,高并发的原因。实际上,这是非常大的话题,我这里也不打算一口吃 阅读全文
posted @ 2020-12-21 10:10 阿牛20 阅读(1499) 评论(0) 推荐(0) 编辑
摘要:在rocketmq中,nameserver充当了一个配置管理者的角色,看起来好似不太重要。然而它是一个不或缺的角色,没有了它的存在,各个broker就是一盘散沙,各自为战。 所以,实际上,在rocketmq中,nameserver也是一个领导者的角色。它可以决定哪个消息存储到哪里,哪个broker干 阅读全文
posted @ 2020-12-13 15:53 阿牛20 阅读(879) 评论(0) 推荐(0) 编辑
摘要:rocketmq作为一个高性能的消息中间件,咱们光停留在使用层面,总感觉缺点什么。虽然rocketmq的官方设计文档讲得还是比较详细的,但纸上得来终觉浅!今天我们就来亲自挖一挖rocketmq的实现细节:server端处理框架以及如果进行消费消息。 说白了,就是先走马观花一下,然后就消费消息这个细节 阅读全文
posted @ 2020-12-06 11:11 阿牛20 阅读(790) 评论(0) 推荐(1) 编辑
摘要:之前写过一篇博客,是关于如何解析类似sql之类的解析器实现参考:https://www.cnblogs.com/yougewe/p/13774289.html 之前的解析器,更多的是是做语言的翻译转换工作,并不涉及具体的数据运算。而且抛弃了许多上下文关联语法处理,所以相对还是简单的。 那么,如果我们 阅读全文
posted @ 2020-11-28 13:59 阿牛20 阅读(602) 评论(0) 推荐(0) 编辑
摘要:最近搞一个文件上传功能,由于文件太大,或者说其中包含了比较多的内容,需要大量逻辑处理。为了优化用户体验,自然想到使用异步来做这件事。也就是说,用户上传完文件后,我就开启另一个线程来处理具体逻辑,主线程就直接返回用户成功信息了。这样就显得非常快了,要看具体结果可以到结果页进行查看。看起来很棒! 然后, 阅读全文
posted @ 2020-11-22 17:25 阿牛20 阅读(2165) 评论(0) 推荐(2) 编辑
摘要:有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用。涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的。 废话不多说,java如何执行shell命令?自然是调用java语言类库提供的接口API了。 1. java执行shell的api 执行sh 阅读全文
posted @ 2020-11-08 14:27 阿牛20 阅读(6771) 评论(0) 推荐(3) 编辑