「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?
目录
好日子
为什么你需要学习造轮子
投资自己
不要成为调包侠
通过造轮子你能学到什么?
下一步计划
好日子,宣布一件事情!
好日子
12月有个好日子,20211202,从左往右读,接着从右往左读你会发现居然是对称的,这是属于程序员的「浪漫」,身边有程序员朋友还特地选择了今天去领证。
熟悉算法的小伙伴应该发现了,这就是经典的算法题:「回文串」,那么问题来了,你知道下一个回文串日期是什么时候吗?评论区见~
既然是个好日子,那不能浪费啊,总得搞搞搞搞搞点事情吧。
最近一段时间思绪很乱,加上工作上巨忙,经常会怀疑自己:我现在做的事情有价值吗?我写的文章是不是能帮助到读者?文章写的通俗易懂吗?后面应该写什么?
每当我想放弃的时候,总会看到一些小伙伴们发来一些私信:雷小帅,你写的技术文章对我太有用了,通俗易懂,思路清晰,我在车上看的太专注了,都坐过站了。
有些话可能是开玩笑,但至少是帮助和影响了部分人,这对于我来说是莫大的鼓励,很欣慰!
既然还有人惦记,那必然不能让大家失望。回顾近一年,作为技术博主输出了很多技术文章:
《玩转 Redis 面试》
《图解分布式&中间件》
《死磕 Java 并发编程》
Java 学习路线
Java 八股文
《五分钟入门系列》
武汉互联网
……若干水文
一篇文章的产生通常会经过:选题、构思、画图、排版这些步骤,稍微用点心,至少得花三个晚上以上。
那这样一篇文章会产生多大价值呢?大部分人可能是这样的状态:读完了,写的不错 = 我学会了
,但实际在工作或者面试中遇到时又忘了,究其原因是:懂了很多「点」但无法将知识点连成「线」和「面」,从而无法将学的东西运用到项目中来。
那最好的办法就是「项目实战」,以战促学。前一阵子,我也在 B 站(id:程序员雷小帅,欢迎关注)直播过几次,本来想带着大家一起直播写个项目,奈何电脑太卡了,开了直播软件,我的 IDE 就卡的不行,只好放弃了。
最近我想了一下,做一个这样的业务项目其实也没什么意思,无非就是增删改查,企业中真正的难点是「理解业务」,而真正涉及到的技术难点都会交给基础框架组或者中间件组搞定。
那既然这样,我们是不是也应该干点他们干的事情呢?是的,我想到了一个idea:自己造一个 RPC 轮子。
为什么你需要学习造轮子
投资自己
有人要问了:现在各种好用的框架都开源了,直接拿过来用不就得了,自己造一个不是浪费时间么?
这个问题看你用什么视角看了,如果从领导视角看:
领导:现在项目交付这么紧,你赶紧找个开源项目,copy 改一下,能跑起来就可以了。
有技术追求的哥哥:我想自己写一个框架,性能肯定比开源的那个好。
领导:这周五你得把项目交付了,你自己看着办吧?!
领导在乎的是你能不能快速交付项目,能不能快速产生价值创造收益。
如果从自己的视角来看:
有技术追求的哥哥:这个框架我已经实现了
领导:好用吗?
有技术追求的哥哥:通过写这个框架,我学到了好多知识,我已经开源了,好多 star
领导:项目已经延期了,你明天不用来了。
通过自己造一个,学到了很多以前没接触到的东西,自己的技术有了更进一步的提升。
那你们说:自己造一个轮子,是浪费了时间吗?
不要成为调包侠
很多人进入公司后都会陷入复杂的业务场景,一周可能要花四天讨论业务,剩下一天就可以把代码写完了。
回过头想想,我们写的是什么代码呢?大多数是在写 CRUD,写 if else for,调一调开源的 jar 包接口。
以为是在写高并发,有牛逼技术的代码,其实是个 CRUD boy。
以为懂得了各种中间件,其实只是学会了如何调用他们的接口,是个调包侠。
我不是在诋毁写业务代码的人,而是怕大家对自己有误解。
如果想在技术上有更进一步的成长,你必须要跨过 CRUD boy
、调包侠
这个阶段,深入到框架底层,熟知源码和原理。
通过造轮子你能学到什么?
敲黑板:首先强调一下造轮子的目的不是为了放在生产上面去用,而是通过造轮子促进你学习,让你将零散的知识点贯穿起来。
这一次我会带领大家从零开始撸一个 RPC 框架,如果你还不知道 RPC 是什么?建议你先去了解一下。
目前常见的 RPC 框架有:
阿里 Dubbo
谷歌gRPC
Apache Thrift
微博 Montan
SpringCloud(类似)
……等
我们会参考 Dubbo 框架去写一个 mini 版的 RPC 框架,实现最基本和核心的功能。
如果你认真学下来,可以掌握以下的技术:
底层网络层基于 netty,学完 netty 入门没有问题;
使用自定义注解,学完可以了解注解的基本运行机制;
服务注册基于 zookeeper,学完 zk 入门没有问题;
会用到反射机制;
会用到动态代理技术;
教你如何定义一个 xxx-spring-boot-starter,了解spring boot自动配置机制;
学会如何自定义配置项,并绑定到 bean;
学习监听 spring 容器的事件;
……等等
有没有一点心动呢?!
下一步计划
这篇文章就当做是一个引入和前言吧,主要是为了增强大家的信心,肯定是能学到东西的。
下一步,我会用多篇文章详细介绍 RPC 框架的源码以及涉及到的技术点,还会将框架源代码放到 Github 上供大家下载学习,包教包会,后面面试拿这个出去吹牛B 完全没有问题。
项目源码已经在 Github 开源了:
GitHub - CoderLeixiaoshuai/easy-rpc: Easy RPC是一款低性能的服务框架,主要用于学习造轮子Easy RPC是一款低性能的服务框架,主要用于学习造轮子. Contribute to CoderLeixiaoshuai/easy-rpc development by creating an account on GitHub.https://github.com/CoderLeixiaoshuai/easy-rpc
如果大家特别感兴趣后面也可以开直播讲解哦~
好了,我是雷小帅,以上就是今天的全部内容啦,如果你对手动造一个轮子感兴趣,三连支持一下吧,给点信心~
「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?相关推荐
- 「学点C语言系列」02 判断年份是否为闰年
写在前面:「学点C语言系列」是新开的专栏,博主电子信息工程专业毕业后,从事了4年硬件工程师,最近一次接触C语言还是4年前的毕设,想重新系统的学习一下C语言,从最基本的Hello World开始. 上一 ...
- 5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」
原文:5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢 ...
- 5.3Role和Claims授权「深入浅出ASP.NET Core系列」
5.3Role和Claims授权「深入浅出ASP.NET Core系列」 原文:5.3Role和Claims授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁. ...
- 4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」
原文:4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. HTTP请求过程 这里展示整 ...
- 4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
原文:4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 管道实现机制 要了解管道的实现机制 ...
- 精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)
前提介绍 很多小伙伴,都跟我反馈,说自己总是对JVM这一块的学习和认识不够扎实也不够成熟,因为JVM的一些特性以及运作机制总是混淆以及不确定,导致面试和工作实战中出现了很多的纰漏和短板,解决广大小伙伴 ...
- 【深度挖掘 RocketMQ底层源码】「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(Pull模式-下)
承接[[深度挖掘 RocketMQ底层源码]「底层源码挖掘系列」透彻剖析贯穿RocketMQ的消费者端的运行核心的流程(Pull模式-上)] pullBlockIfNotFound方法 通过该方法获取 ...
- 「30天制作操作系统系列」1~4天从汇编到C语言
目录 背景 30制作操作系统?这个听起来像天方夜谭,但是真有一本书就叫做<30天自制操作系统>,当然,自制操作系统的目的不是要去对标Windows.Linux.MacOS等流行的现代化操作 ...
- 有小数点是什么类型_「JAVA零基础入门系列」Day3 Java基本数据类型
前两篇已经将开发环境搭建完成,如果你已经按之前的教程按部就班的完成了部署,那么世界上最优秀的编程语言之一和世界上最优秀的IDE之一已经出现在你的电脑上(此处应有掌声),如果你还没入门,或者正在台阶上踱 ...
最新文章
- 竞赛报名 | AI时代数据库交互怎么玩?首届中文NL2SQL挑战赛开战
- 替换ubuntu 源
- 阿里灵杰:AI工程化助力产业数字升级
- Windows配置本地域名
- C#中你想象的Task,很简单?
- 十二星座职业成功忠告
- Django(五)中间件
- MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel
- (60)UART外设驱动发送驱动(五)(第12天)
- 必知必会SQL(贰) --索引(聚集[簇]索引和非聚[簇]集索引) vs 全文本索引
- 基于注解的Spring MVC与JPA如何解决实体的延时加载问题
- 爬虫cookie过期_【Python】Scrapy爬虫框架之Request和Response
- 左神-05 二分搜索(多看几遍)
- android沉浸式状态栏封装—教你玩出新花样
- 解决SQL数据库无法附加
- 熊出没之奇幻空间里面的机器人图片_《熊出没之奇幻空间》小铁COCO智能机器人玩具...
- 苹果手机!!!fiddler自动抓抓包iphone上的http(或https)请求,手机设置完http代理,但是手机不能上网了。即(fiddler iphone http代理 不能上网)
- 盘点国外知名量化基金
- v-charts 如何更改文本颜色
- SQL Server 遇到报错解决办法--更新中
热门文章
- 磁盘磁带光盘是计算机系统中,磁盘、磁带和光盘是计算机系统中最常用的( )。...
- 基于OSG的虚拟校园系统的设计与实现
- Java师说CMS管理系统源码
- std::string 含义
- 电子游戏理论基础知识的初步探索(转)
- i.MX6网卡驱动程序fec.c的分析(AR8035网卡驱动程序的详细分析)之二
- 计算机丢失UxTheme无法修复,RWUXThemeSU90.dll
- 威联通TS-532x 篇一: ssh admin登录密码
- Mac怎么开启多个终端
- 四阶龙格库塔算法用MATLAB写