Skip to content

Commit

Permalink
知识星球
Browse files Browse the repository at this point in the history
  • Loading branch information
itwanger committed Nov 6, 2022
1 parent 5336ecf commit 3be5443
Show file tree
Hide file tree
Showing 48 changed files with 698 additions and 142 deletions.
162 changes: 162 additions & 0 deletions docs/nice-article/weixin/liaolrhxxkyxm.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
---
title: 聊聊如何学习开源项目
shortTitle: 聊聊如何学习开源项目
author: 勇哥
category:
- 微信公众号
---

工作几年的程序员同学,有了一定的项目经验,对于编程也有了自己的理解,但他们偶尔也会感到困惑,不知道接下来该如何提升自己。

在笔者看来:"这个阶段的程序员最需要的是提升自身编程能力和视野高度,而学习开源项目是最有效的方法之一"。

这篇文章,笔者聊聊自己的学习开源项目的心得,希望对你有所帮助。

# 1 学会使用

首先,我们需要学习**如何使用开源项目**

Github 是全球最大的在线软件源代码托管服务平台,很多开源项目都托管在他上面。

在 GIthub 下载源码后,需要重点关注类似 **Quick Start,Getting started ,Example** 之类的文档,这些文档告诉初学者如何使用项目。

假如项目需要部署,参考项目文档,在独立的环境中,尝试从零开始,动手部署该项目。

某些项目也会提供完善的 example 工程·,里面有现成的例子,可以尝试按照文档介绍运行入门例子。

如果入门例子运行顺利 ,对于项目初学者来讲是一个很好的开始。若运行中出现异常,也不必慌张,寻找项目中 FAQ 文档,或者搜索出现问题的关键字(比如异常信息),查询相关的解决方案。

成功运行了项目中第一个基础例子之后,可以尝试运行更复杂的功能例子。

笔者建议**单独创建一个工程,一个一个功能例子完善整个项目。当这个项目越来越充盈,也就证明你掌握得越多**。在学习过程中,将学习的心得记录在笔记中,便于后续回溯。

# 2 阅读源码

**阅读源码是深入理解开源项目最重要的一步**

阅读源码之前,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。构建成功后,尝试运行该项目。

查看该项目的架构设计文档,梳理出整个项目的骨架,可以画流程图或者 UML 图,加深对项目的理解。

当我们了解到整个项目的骨架后,可以挑选感兴趣的模块来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,DEBUG 细节代码。

阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。

笔者体系化的阅读源码是在2014年。彼时,RocketMQ 3.0 刚开源不久,笔者对消息队列极其感兴趣,同时也迫切想了解网络编程框架 Netty 到底是如何使用的。

于是,先从 RocketMQ 网络通讯模块 remoting 开始学习,因为源码中有完善的测试用例,先运行单元测试,学习网络编码模型。

在学习网络编程的过程中,笔者有两点思维突破:

**▍一、客户端的编程模型**

RocketMQ 客户端网络通讯有如下三种方式:

* oneway : 单向发送
* sync :同步调用
* callback :异步回调

很多技术的思想是相通的,下图是蚂蚁开源的通讯组件 sofa-bolt 支持的调用类型。

![](https://mmbiz.qpic.cn/mmbiz_png/V71JNV78n28Y8MicStwz8LpZ58sNEy5RuR03NuIZuzKYiabSwdrgkQUCRoymNsubXOlkFP7MCicunObuu4frs94Rg/640?wx_fmt=png)

蚂蚁通讯框架Bolt调用类型

**▍二、服务端处理器模式**

RocketMQ 服务端通讯使用经典的 Reactor 模式 ,服务端注册不同的业务处理器,而各个业务处理器可以绑定不同的线程池。

```
void registerProcessor(
      final int requestCode, 
      final NettyRequestProcessor processor,
      final ExecutorService executor);
```

![](https://mmbiz.qpic.cn/mmbiz_png/V71JNV78n28Y8MicStwz8LpZ58sNEy5Ruk6t4pMGiaEI7rpq2qfzouy4aJiawrfAicoVl3CssJJVLrcgBCdDhv5cSg/640?wx_fmt=png)

* * *

学完网络框架 Remoting 之后,然后结合 Broker 模块,学习 RocketMQ 存储模型,通过这种方式就可以对 RocketMQ 有了一个相对清晰的认识。

# 3 知行合一

笔者大学刚毕业的时候,读李开复老师的书,书中有一句话,我印象深刻:“**I Hear and I Forget, I See and I Remember, I Do and I Understand** ” 。

中国古代哲学家荀子也说过:"**不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之;学至于行之而止矣**"。

学习源码的过程中,将知识点夯实的关键要诀是**动手实践**,并保证实践之后有**输出产物**,也就是**知行合一**

笔者总结了两点经验,供大家参考。

**▍一、源码中的知识点应用到项目中**

开源项目中有非常多的**优秀实践** ,可以将代码中的编码技巧,设计思想,优秀源码引进到业务项目里。

2014年,艺龙的优惠券计算服务遇到性能瓶颈,笔者负责重构这个系统。在阅读 RocketMQ 源码后,学习到了线程池使用精髓:**线程池隔离,各司其职**

于是,笔者先梳理出业务场景,根据任务类型,绑定不同的线程池,为了便于扩展同时对外暴露并发度的配置参数。在重构这个系统的过程中,还引入 RocketMQ 创建线程工具类代码 。

重构之后,不仅系统的性能提升了5倍,而且笔者的自信心也大大提升,对技术的理解也更加深刻。

**▍ 二、造轮子**

当我们学习了一个开源项目,我们可以参考开源源码仿写一个。仿写的过程就是查漏补缺的过程,也能完善自己的知识体系。

2016年,sharding-jdbc 开源了,下图是当时 sharding-jdbc 的架构设计图:

![](https://mmbiz.qpic.cn/mmbiz_png/V71JNV78n28Y8MicStwz8LpZ58sNEy5RuSqHFDEbve3ibpS9LCQ8ABpmszKzZvQCOv4gGKPFE2cXbEsl7UvVlmsQ/640?wx_fmt=png)

笔者当时对分库分表着迷,同时脑海里有很多疑问,比如如何封装 jdbc 的接口,如何实现 SQL 解析 ,如何将多个分片的结果聚合等。

于是,笔者参考 sharding-jdbc 的源码,仿写了一个分库分表组件。

![](https://mmbiz.qpic.cn/mmbiz_png/V71JNV78n28Y8MicStwz8LpZ58sNEy5RuLBRfQbiaOoFHsVXECnhTyHaFDqWRTtMqOGOtP3Hz3J7o00ib094Jg70g/640?wx_fmt=png)

经过这次仿写,笔者深入实践了 client 模式分库分表的原理,并积累了自己的技术储备。

# 4 参与开源

> “开源理念之一就是非常鼓励不同的人一起合作”。——Linux 之父 `Linus Torvalds` 2016 年 2 月 TED 演讲《The mind behind Linux (opens new window)》
在《教授鼓励学生参与开源项目的 5 个理由》这篇文章里,提到了如下五点理由:

1. 无边界的学习
2. 专业的交流
3. 外在的机会
4. 更深入的理解计算机科学
5.

那么程序员如何参与开源呢 ?参与开源有很多种方式,最常见的有如下几种:

1. 直接参与开源项目的开发
2. 参考开源项目的社区比赛
3. 修复开源项目中的 Bug
4. 开源项目文档编写
5. 参与开源项目的测试和 Demo 编写工作
6. 参与开源项目推广

参与一个开源项目,并与许许多多同样聪明的工程师协作,把脑海中的奇思妙想一一实现,那是多么美好的事情。

# 5 写到最后

亲爱的程序员朋友,当你不知道选择哪一个开源项目开始学习时,希望你**立足当下,**当前技术团队使用的开源组件,正是你学习的方向。

行动起来,相信你会成为更好的自己,加油。

![](https://mmbiz.qpic.cn/mmbiz_jpg/E44aHibktsKapR0VnBicTdJkajth5o8OQpKjuXr5a1TuW21dmiaB2enXIFONvu1C5utmic40xbaRKl2OLeW5ImvJibQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

![](https://mmbiz.qpic.cn/mmbiz_png/E44aHibktsKb9KpZvt9jfMS0rPmyMufl11zg41ExIr2bDlcrQbNgW78TXFA642PI0F50yn0YGHROcWFVeFJCQTg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

最近我开通了[**股东服务**](https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247505577&idx=1&sn=5114f8f583755899c2946fbea0b22e4b&chksm=ebd497a8dca31ebe8f98344483a00c860863dfc3586e51eed95b25988151427fee8101311f4f&token=319992632&lang=zh_CN&scene=21#wechat_redirect),感兴趣的可戳:[**我开通了付费渠道**](http://mp.weixin.qq.com/s?__biz=MzU4NzA3MTc5Mg==&mid=2247487129&idx=1&sn=4b0d7f12315585738c33e655326805c7&chksm=fdf0e6c6ca876fd034adb19af56315a9221e0e8c71fe3d7924627872e1706789b04c44dc571d&scene=21#wechat_redirect)

![](https://mmbiz.qpic.cn/sz_mmbiz_jpg/2BGWl1qPxib14ibDza9cLmAHwzNX1iaicgMvEmWBP7yEOkGIQCyIjPELEvMkcM6Q34saoqtAl20kxMagrqyzMRAryA/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

关注公众号回复「**对线」**即可免费领取《对线面试官》系列电子书****

点击 阅读原文  跳转至Java开源消息推送平台项目仓库

>参考链接:[https://mp.weixin.qq.com/s/nWdzvy76YV4sKqmu6znfQg](https://mp.weixin.qq.com/s/nWdzvy76YV4sKqmu6znfQg),出处:Java3y,整理:沉默王二
43 changes: 43 additions & 0 deletions docs/nice-article/weixin/qiantsxxmykpllwngsxrbldg.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: 同事见项目要垮跑路了,无奈公司新人背了大锅...
shortTitle: 前同事见项目要垮跑路了,无奈公司新人背了大锅...
description: 软件“莫名”崩溃了。。。
category:
- 微信公众号
head:
---

> [二哥的编程星球](https://mp.weixin.qq.com/s/e5Q4aJCX9xccTzBBGepx4g)已经有 **1000 多名** 球友加入了,如果你也需要一个良好的学习氛围,[戳链接](https://mp.weixin.qq.com/s/e5Q4aJCX9xccTzBBGepx4g)加入我们吧!这是一个 Java 学习指南+编程实战+LeetCode 刷题的私密圈子,你可以向二哥提问、帮你制定学习计划、和球友一起打卡成长,冲冲冲。
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-qiantsxxmykpllwngsxrbldg-da6a85f1-2544-4410-a42e-6721ca5fa85c.jpg)



![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-qiantsxxmykpllwngsxrbldg-76aa00e4-41a6-44e9-9b25-0b82551ef67a.jpg)

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-qiantsxxmykpllwngsxrbldg-d3345136-764a-4b57-a3e4-8fa98a5f574c.jpg)

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-qiantsxxmykpllwngsxrbldg-146eb782-427f-42f8-bae4-17a88aca6609.jpg)

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-qiantsxxmykpllwngsxrbldg-895d4642-7868-4a5b-83a6-df5bb1d78762.jpg)

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-qiantsxxmykpllwngsxrbldg-9d861226-854d-41c0-802e-5f8421506c8b.jpg)



---

没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。

- [为什么这样?真的不甘心!](https://mp.weixin.qq.com/s/oshIokqSO_OMeNJeQKpeGA)
- [双非本,拿到这个offer也不错](https://mp.weixin.qq.com/s/OHXpEOKcLaKW8h0TS4Xqjg)
- [今年嵌入式软件这块真挺香](https://mp.weixin.qq.com/s/6YuyA1Ja5RfDEQatfsQpjA)
- [入职 15 天,就想跑路了?](https://mp.weixin.qq.com/s/EW95wdK4SM0CiBEJqUP7Mg)
- [比亚迪,秋招的神](https://mp.weixin.qq.com/s/PmVwFKsXkGeJjmNPiu5hrQ)
- [今年这情况,拿到这俩 offer 不错了](https://mp.weixin.qq.com/s/xxl1qOKQUrVoO-bRJorE6Q)
- [曝光秋招毁约公司](https://mp.weixin.qq.com/s/gOuoM27tl4l6GW7aqZu98Q)
- [垃圾外包,离职也罢](https://mp.weixin.qq.com/s/3Iry19JaEoN4pA3-JDtVhw)
- [非科班转码](https://mp.weixin.qq.com/s/CyJAVQza-9zmDdboStKe8w)
- [美团率先开奖 24k,不甘心?](https://mp.weixin.qq.com/s/MGqyie9KvD6kH8Tuv2mqOw)

![](https://files.mdnice.com/user/3903/b7e50cf4-6fca-4511-9bfd-aa1ed9eb587b.png)
78 changes: 78 additions & 0 deletions docs/nice-article/weixin/yinhwsmyykjgzrrhrrglnjy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
---
title: 银行为什么要以科技岗招人然后让人干两年柜员?
shortTitle: 银行科技岗招了人却让干两年柜员?
author: 小牛肉
category:
- 微信公众号
---

> [二哥的编程星球](https://mp.weixin.qq.com/s/e5Q4aJCX9xccTzBBGepx4g)已经有 **1000 多名** 球友加入了,如果你也需要一个良好的学习氛围,[戳链接](https://mp.weixin.qq.com/s/e5Q4aJCX9xccTzBBGepx4g)加入我们吧!这是一个 Java 学习指南+编程实战+LeetCode 刷题的私密圈子,你可以向二哥提问、帮你制定学习计划、和球友一起打卡成长,冲冲冲。
秋招也看了些银行,主要是金融科技岗,发现大部分都会要求轮岗一到两年,心中大呼实在太坑了吧,干两年柜员还能写得来 Hello World?感觉根本原因是培养方式有问题,先熟悉业务再开发系统,这俩强行整了个先后顺序有点不合适吧,找个有经验的开发人员带两年不比在柜台干两年有用。上网搜罗了一些资料分享出来~

知乎有类似问题:www.zhihu.com/question/422427316

![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-yinhwsmyykjgzrrhrrglnjy-b95e2bb5-14db-4b6d-a021-ea1949f887e2.jpg)

> 回答 1:www.zhihu.com/question/422427316/answer/1504706224
同今年入的建行科技类专项人才。目前在市分行科技部。此前在网点做柜员。下面是我的感受:

两年基层后,确定还能写出 hello world?本来科技部人就存在养老,一个萝卜一个坑,不像柜员,流动性大并且需求大,基本上去了基层锻炼就废了。在调去科技部之前,我已经提交了辞职,因为白天做柜员,晚上写代码,实在太累,而且不知道这么累是为了什么,这样学习代码,闭门造车,还不如去互联网加班。后来运气好,给我调去了,但据我所知,大部分都是做了一年两年柜员还在网点,并且科技部都是年级比较大的,所以新人去了哪里?

前段时间省行老总来开会,也对基层锻炼的决策不满意,**科技人员应当跟随业务人员在开发系统过程中去了解业务,而不是两年只学业务**。并且我认为,在基层网点做柜员,做大堂经理,根本连业务也学不到!

最后,你问为什么招科技类做柜员。我认为,这就是上面的决定,想要科技和业务复合的金融科技人才,但是落实到实际和基层,真正的系统开发还是交给了外包和省行,下面的科技类专项只是一种人才储备。关于是否会调回科技部,那只能看当地科技部有没有这方面需求了。

* 轮岗问题:如果是科技中心一般都不轮岗的。如果是分行省行的科技岗位,无论校招还是社招,很多科技岗位都要去基层锻炼,一定要向hr问清楚,轮岗超过三个月的都不建议去,那种轮岗一年以上的,一年后你就一个标准柜员,很难有机会转岗。最重要的是这种长达一年的专业不对口恶心工作你忍受的了吗?
* 面试难度,市分行很容易,学历要求很低,省份或许会有名校研究生学历限制。
* 福利待遇,银行和公务员是不一样的,公务员的年终奖不会告诉你但是基本上都有。银行没有可能就是没有。薪资待遇问清楚,每个地方银行绩效不一样所以薪资不一样。以我在的国有四大行之一为例,第一年一般是见习期,薪资很低,五千以下。第二年第三年逐渐好一些,八九千的样子吧。

> 回答 2:www.zhihu.com/question/422427316/answer/1670483428
因为根本不需要那么多科技岗人员。

省行层面还存在一些开发性质的工作,二级行科技岗就是修电脑的。

**开发性质的工作主要在总行**,有些行还有开发中心,还有很多开发工作都选择了专业团队外包出去。

所以省行科技部门一般三十多人,二级行一两个人足够(沿海地区省行科技部门可达一百多人,有省会市行的,市行科技部门二十人左右,其他地市行也是一两个人)。

就目前来说,各行招聘中,除了管培几乎确定基层轮岗后可以回到省行,其他岗位是没有本质性区别的,都需要从柜台开始,**等待机会**

当然,科技岗、小语种岗等专项人才,会比柜员岗的员工在一些内部招聘上略有优势。

为什么要招这么多科技岗员工,因为各省招聘从人数到各类人员构成都是总行确定的。要响应金融科技政策,首先要把相关人才储备到位。

从柜员做起没有错,因为各岗位确实需要具备一定的基层工作年限,对银行最基础的工作有一定的了解。超过三年就没必要了。

就以往来看,很多科技岗员工入行后,慢慢的自己也不想从事科技岗位了,最终从事营销岗位。

因为银行来说,营销岗才是主流岗位,从收入到提拔晋升都具有很大优势,非营销岗位中,办公室、人力、财会也不错,其他非营销岗位在银行并不具有很好的发展前景。

> 回答 3:www.zhihu.com/question/422427316/answer/1683310079
首先我很明确的告诉你,你确实是被骗了。作为一名前银行员工,对于银行的招聘流程也算熟悉。我来讲一下,银行为什么要这样干。

第一,银行的愿望很美好。由于银行搞科技开发,最终的目的也是为了业务发展,因此银行方面希望科技岗位的工作人员能熟练掌握银行的具体业务,具有深厚的业务背景,这样在搞开发的时候,才能以业务为导向,开发出真正面向市场、符合客户需求的产品。从这个角度来说,科技岗的新人先去柜台干一两年似乎是无可厚非的。

第二,银行确实骗人了。而这源于两方面原因,一方面是因为柜员流失率高,所以银行需要不断的招聘新人,弥补人员流失;另一方面银行柜员又招不来人,尤其是高学历、名校的学生,如果银行在招聘公告中说明是柜员,那无疑最终报名的都是学校学历很一般的学生。所以这几年各家银行都学聪明了,在招聘时各种其他名义招聘,比如运营岗,科技岗,管培生等等。等招进来以后,就以新员工必须先从柜台开始熟悉业务为理由,把你放到柜台上,从此遥遥无期。甚至有银行为了招揽双一流高校的学子,会以总行或者省分行的名义招聘,招进来以后放下去当柜员。

**总结来说,真要去就去总行科技中心,分行下的科技岗大概率是个坑。**

---

没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。

- [为什么这样?真的不甘心!](https://mp.weixin.qq.com/s/oshIokqSO_OMeNJeQKpeGA)
- [双非本,拿到这个offer也不错](https://mp.weixin.qq.com/s/OHXpEOKcLaKW8h0TS4Xqjg)
- [今年嵌入式软件这块真挺香](https://mp.weixin.qq.com/s/6YuyA1Ja5RfDEQatfsQpjA)
- [入职 15 天,就想跑路了?](https://mp.weixin.qq.com/s/EW95wdK4SM0CiBEJqUP7Mg)
- [比亚迪,秋招的神](https://mp.weixin.qq.com/s/PmVwFKsXkGeJjmNPiu5hrQ)
- [今年这情况,拿到这俩 offer 不错了](https://mp.weixin.qq.com/s/xxl1qOKQUrVoO-bRJorE6Q)
- [曝光秋招毁约公司](https://mp.weixin.qq.com/s/gOuoM27tl4l6GW7aqZu98Q)
- [垃圾外包,离职也罢](https://mp.weixin.qq.com/s/3Iry19JaEoN4pA3-JDtVhw)
- [非科班转码](https://mp.weixin.qq.com/s/CyJAVQza-9zmDdboStKe8w)
- [美团率先开奖 24k,不甘心?](https://mp.weixin.qq.com/s/MGqyie9KvD6kH8Tuv2mqOw)

![](https://files.mdnice.com/user/3903/b7e50cf4-6fca-4511-9bfd-aa1ed9eb587b.png)
Loading

0 comments on commit 3be5443

Please sign in to comment.