首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
西西弗27
浙江大学 后端工程师
关注
已关注
取消关注
mark
@baize_:
怎么他们都有开源项目经历|手把手教你参与开源
一、前言大家好,这里是白泽。有一些同学提问,希望在自己的简历上增加一些有含金量的项目经历,最好能够去参与一些开源项目的开发,但由于对一个庞大的开源项目缺乏认知,难以着手。同时也担心自己能力不足,不知道自己写的代码是否会被接纳。这里我总结了遇到的一些问题:如何找到适合我自己的开源项目?白泽你能帮帮我吗!确定了项目,在项目中如何找到自己能做的需求?白泽你能帮帮我吗!找到了需求,如何阅读开源项目的代码?白泽你能帮帮我吗!写完了代码,提交代码的流程是什么样的?白泽你能帮帮我吗!必须能!耐心看完这篇文章,你会发现其实参与开源并不遥不可及。在文章的后半部分,白泽将分享自己在不同社区参与的一些开源和之前在 Gitea (GitHub🌟40.3k) 公司实习的一段时光。白泽开源了一个 Go 学习仓库:包含我写作的 Go 各阶段学习文章、读书笔记、电子书、简历模板等,欢迎 star。最近在仓库中一并开源了一个挂机冒险游戏:《模拟龙生》,正在迭代中,欢迎大家试玩,欢迎 pr。二、如何参与开源2.1 如何找到适合自己的开源项目2.1.1 项目检索出发点:首先选择的开源仓库需要适配自己的方向,最好是自己在做什么项目,会用到某开源项目比较有价值,再去尝试了解和贡献。为了学习而学习非上上之选,最好是有需求为出发点。信息检索渠道:GitHub 中文社区在 GitHub 中文社区,点击左侧菜单栏的索引,便可以跳转至分类检索目录,选择自己感兴趣的方向。2.1.2 后端项目推荐🌟 下面这些绝大部分都是白泽参与过开源或者深度使用过的仓库,十分推荐:Kitex:高性能、扩展性强的 Golang RPC 框架。(star 6.5k 字节跳动)Hertz:一个高可用性、高性能和高扩展性的 Golang HTTP 框架(star 4.5k 字节跳动)Gitea:这个项目的目标是以最简单、最快捷、最省力的方式建立一个自我托管的 Git 服务。(star 40.3k)Woodpecker:一个简单而强大的 CI/CD 引擎,具有很强的可扩展性。(star 3.4k)🌟 推荐的理由:首先 Kitex、Hertz 是字节云原生开源社区 cloudwego 中,Go 语言的两个核心框架,当然还有 Rust 的 Volo 框架。白泽自己也是 Hertz 一位认证的 Committer。围绕这两个仓库的生态十分丰富,社区活跃度很高,加上字节背书,又比较年轻,去年才开源年满两周年,初期学习成本不会非常高,并且 Go 云原生相关也是当下发展的热门方向,所以学习的性价比还是比较高的。(社区仓库有飞书群二维码)Gitea 是我去实习之后开始接触的,这个仓库用户极多,非常活跃,社区版也有 Gitea 的员工把持维护,核心开发者在群聊中回复及时,基本可以随时交流,也是很棒的一个社区!(社区仓库有Q群二维码)Woodpecker 是 CI 引擎,用 Go 的协程控制容器启动去运行各种任务(代码检查、单元测试、构建...),面向的是真正的一个发挥 Go 语言协程性能的工作场景,因此学习 Go 它是十分合适的。《使用 Woodpecker 与 Gitea 搭建纯开源的 CI 流程|极限降本》我的这篇文章就讲了如何整合 Woodpecker 与 Gitea。2.2 在开源仓库接受需求以 HTTP 框架 Hertz 主仓库为例,我们进入 Issues 查看有哪些代办的事项。这里看到打有 good first issue 的 tag 的需求,就是新手可以尝试参与的。同时关注一下右侧的评论数,如果没有人评论,说明这个需求还是无人认领状态,你可以去评论 please assign me,获得提问者的开发授权。🌟 白泽找到了一个非常适合新手的任务,“为项目编写单测”,详见这个 issue # 257:Issue 描述:单测必须是有意义的推荐为单元测试添加注释每一个单测都必须使用断言而不是 print 验证2.3 阅读开源仓库代码可以参考白泽之前写作的关于分析 Kitex 框架的文章(下文先以查看这个单测需求为场景进行分析):《Kitex源码阅读——脚手架代码是如何通过命令行生成的(一)》《Kitex源码阅读——脚手架代码是如何通过命令行生成的(二)》1.克隆 Hertz 代码到本地:git clone **********:cloudwego/hertz.git2.针对这个添加单测的 issue,pkg/route 部分还没有分配,那么我们进入这部分的代码进行查看:// HTTP 框架 Hertz 的核心结构内的核心字段就是 *route.Enginetype Hertz struct { *route.Engine signalWaiter func(err chan error) error}🌟 由 Hertz 结构体内包含了 route.Engine 可知,pkg/route 包中的内容是整个 Hertz 框架的核心,涉及大量内容,或许这也是这部分需求没有被社区同学分配掉的原因。3.查看一下当前模块的单测覆盖率与85%目标值的差距:# /pkg/routerbaize@baizedeMacBook-Air route % go test -cover ./...go: downloading github.com/cloudwego/netpoll v0.5.0? github.com/cloudwego/hertz/pkg/route/consts [no test files]? github.com/cloudwego/hertz/pkg/route/param [no test files]# 只相差百分之0.2ok github.com/cloudwego/hertz/pkg/route 2.732s coverage: 84.8% of statementsbaize@baizedeMacBook-Air route % 4.单元测试:单测文件以 xx_test.go 命名,通过调用 xx.go 当中的方法,与一个预定义的值进行 assert 断言,相同则通过测试,补充单元测试直到满足85%的阈值,我们就可以着手提交 pr 了!func TestConnectionClose(t *testing.T) { engine := NewEngine(config.NewOptions(nil)) atomic.StoreUint32(&engine.status, statusRunning) engine.Init() engine.GET("/foo", func(c context.Context, ctx *app.RequestContext) { ctx.String(consts.StatusOK, "ok") }) conn := mock.NewConn("GET /foo HTTP/1.1\r\nHost: google.com\r\nConnection: close\r\n\r\n") err := engine.Serve(context.Background(), conn) assert.True(t, errors.Is(err, errs.ErrShortConnection))}2.4 编码以及提交流程2.4.1 编码前须知一般来说,开源项目的根路径下,都有一个 CONTRIBUTING.md 文档,指导你如何参与本仓库的贡献,包括 git 使用的流程、单测覆盖率、代码的格式化等需求,参与任何开源,都建议先阅读这个文档。以 Hertz 为例:2.4.2 仓库克隆流程《一文搞懂Git工作流,再也不用担心入职就被辞退了》这篇文章是两年前我写作的,对 Git 工作流不甚了解的同学可以快速浏览。🌟 针对开源项目,一般都选择 fork 仓库的形式进行开发:1.将开源仓库 fork 到自己的 remote hertz。2.在自己本地克隆自己的 remote hertz。3.从本地的 develop 分支(或者 main 分支),切换一个新的 feature 分支出来,针对你要开发的内容,比如要增加 /pkg/router 的单测,则执行命令:# 分支命名没有绝对约束,但是希望见名知意checkout -b test_pkg_router4.开发完成之后,将本地 test_pkg_router 分支代码,提交到自己的 remote hertz 的 test_pkg_router 分支。⚠️注意:开发完成之后,不要急着提交,一般需要按照 CONTRIBUTING.md 的要求运行指定控制台命令进行单测运行与代码格式化等操作,确定没有问题后才能提交。5.在自己的 remote hertz 仓库内,创建一个 pull request,将自己 remote hertz 仓库的 test_pkg_router 分支请求合并到 Hertz 官方仓库的开发分支上。提交 pr 的时候,需要描述自己的工作内容,以便 reviewers 快速明白你的意图,举个例子:6.提交 pr 之后,一般都会触发 .github/workflows 目录下的各种 CI 流程,只有全部通过之后,reviewers 才能同意合入代码(code lint、test 等操作在这里也会执行,所以本地提前执行一次是未雨绸缪):2.5 后续提升参与开源过程中,一般都有社群,找到志同道合的团体,一起交流,会让你事半功倍。三、Gitea 的实习3.1 Gitea 介绍Gitea 是一个轻量级的、自助的 Git 服务。它是一个开源的、基于 Go 语言的项目,提供了类似于 GitHub、GitLab 等平台的版本控制仓库管理功能。Gitea 允许您在自己的服务器上架设一个 Git 服务,以便团队或个人能够方便地进行代码托管、协作和版本控制。(GitHub 🌟 Star 40k+)它的社区活跃度也非常高。3.2 在 Gitea 的生活🌟 面试:面试 Gitea 用了一轮面试,大概90分钟。面试官是一位字节架构出来的大哥。整个面试流程体验十分特殊:面试官开了屏幕共享,在自己的白板上写出各种 Go 语言相关的语法题目,涉及切片、map、interface{} 等 Go 的语法知识。询问十分细致,但不故意刁难。因为是做开源,相对项目经历反倒问的比较少。但是要求基础扎实,对 Go 的理解较为清晰。🌟 工作内容:看 issue,提 pr,和自主发电相比,实习是有工资的。去实习之前很难想象在一家 GitHub star 数破40k的项目实习,是什么样的体验。去了之后发现,和在家没什么太大区别。不过有问题可以问身边的同事,但是平时解决问题都是个人为主。公司内人员极其精简,都是大牛,比较忙,除了分配一些工作,不太会主动找你。(所以架构部门真的很难进)开发任务更多时候需要自己发掘,总结来说就是自由,甚至有些盲目。🌟 体会:在这里提升可能没有自己想象的那么快(但也绝对颇有收获),因为更多时候需要自己学习,而且因为是开源项目,对项目的熟悉也是慢慢来的,mentor 基本是没有时间指点你,除非你主动提问。(这与以业务为出发点的项目迭代是有所不同的,你甚至没有 kpi 推着你走)。公司内管理层是圈内知名的开源大佬,在 Gitea 官方群内时刻与群友交流,解答各种问题。这也是我见过最身体力行的 Leader,做技术真的很纯粹,很佩服。四、小结当你开始参与开源,你的编码水平将突飞猛进。天高海阔,任君腾挪。原创不易,感谢关注!
点赞 64
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-21 16:35
上海交通大学 算法工程师
Redis 的 Zset底层是怎么实现的?
一、面试题简述Redis 里的Zset你用过吗?它既能按照 score 排序,又能按照 member 快速查找,这是怎么做到的?底层到底用了什么数据结构?为什么这样设计?二、面试官想听的这道题本质不是问Zset 用了什么结构,而是在考察:1、你是否能从需求出发推导结构设计2、你是否理解时间复杂度与操作路径的权衡3、你能不能讲清楚为什么不用别的结构面试官真正想听的是你能不能从工程约束推导出 Hash + SkipList 是一种必然,而不是偶然。三、面试回答举例Zset 的核心需求其实很矛盾:第一,它要按 score 有序; 第二,它要支持根据 member 快速查找和更新。这两个需求如果拆开来...
查看1道真题和解析
点赞
评论
收藏
分享
02-16 11:49
网易游戏_客户端研发工程师(准入职员工)
网易互娱内推,网易互娱内推码
网易游戏-蛋仔派对-数据分析-已复盘自我介绍,重点讲讲你为什么想来游戏行业做一名数据分析师。某天发现《蛋仔派对》的日活跃用户比前一天断崖式下跌了 20%,如果交给你来分析,你的分析思路是什么?会从哪些方面入手排查原因?我们想通过优化新手教程来提升新用户的次日留存率,你会如何设计一个 A/B 实验来验证这个想法?在设计和分析过程中,需要特别注意哪些潜在的问题?你最近玩得最久或者最喜欢的游戏?你认为它在设计上最成功的一点是什么?如果让你用数据来证明你的观点,你会关注哪些数据?我们有一张玩家登录日志表(包含 user_id, login_time),请你说说计算次日留存率的 SQL 思路是怎样的?《...
点赞
评论
收藏
分享
02-12 14:52
武汉大学 Java
27后端新手咨询!年后如何找实习?
鼠鼠是27后端Java选手,由于之前各种原因一直没准备实习,今年寒假沉淀了一个来月,准备年后出发投递实习了,想咨询各位已经实习/同样在寻找实习的小伙伴几个问题1.目前开学大三下:找实习应该找日常实习?还是直接投递暑期实习?(还是说不影响,同时投递,前几个月先找日常,干到暑假后再去找的暑期实习厂继续干?)2.好奇9本日常实习难度?之前鼠鼠听学长姐说9本实习不会问很难,但是看牛客发现很多9本朋友的面经,大厂问的也比较难,希望评论区看看大家过来人的看法,大概准备到什么程度!3.来点好厂推荐!!!大三下想找日常实习的话是直接旷课换城市还是先图稳待到学校里?目前鼠鼠在武汉,不知道大家是推荐直接在本地找还是不用管base随便投?。话说日常实习都会有手撕吗?还是分厂4.希望各位指点下鼠鼠的简历,欢迎实习er伸出援手帮帮~
纳斯卡可:
暑假实习可不是暑假开始的。大厂暑假实习三月份就开始了面试了,面完为止。甚至字节早就开始了。如果准备好了的话,就直接投暑假就完事了。
校招求职吐槽
点赞
评论
收藏
分享
01-25 12:53
江南大学 Java
27届JAVA后端,简历请教
是我简历或者招呼语有问题吗,问了几十个只有一两个已读,已读之后也不回我
点赞
评论
收藏
分享
02-20 17:18
已编辑
黑龙江大学 Java
agent实习都干什么?什么是ReAct和Planning & Extractor?
在构建AI Agent(智能体)时,如何引导大模型有效完成复杂任务是一个核心问题。当前主流范式主要有两种:ReAct(推理+行动) 和 Planning & Extractor(规划+提取器)。它们都旨在增强模型的自主性和任务执行能力,但在工作流程和适用场景上存在显著差异。本文将通过实例对比两者的异同,帮助企业根据实际需求选择合适范式。一、ReAct范式ReAct由Shunyu Yao等人提出,其核心思想是让模型在生成过程中交替进行“推理”和“行动”。模型会先思考当前状态(Reasoning),然后决定采取什么行动(Acting),如调用工具、查询知识库,之后根据行动结果再次推理,直至...
AI求职实录
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
1
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习租房焚决
1764
2
...
暑期实习来得及吗
691
3
...
嵌入式应届生春招怎么准备——从零到拿 Offer 的系统攻略
647
4
...
HTTP 和 HTTPS 区别
524
5
...
27届实习近一年的年度经历和总结
436
6
...
04男大去相亲了
372
7
...
关于租房
322
8
...
美团推荐算法一面
285
9
...
agent实习都干什么?prompt设计
281
10
...
这个简历可以去找暑期实习了吗
253
创作者周榜
更多
正在热议
更多
#
牛客新年AI问运
#
14601次浏览
168人参与
#
记录实习开销
#
182992次浏览
728人参与
#
牛客AI体验站
#
17966次浏览
305人参与
#
大家每天通勤多久?
#
82067次浏览
593人参与
#
正在实习的你,几点下班
#
295421次浏览
1967人参与
#
牛客租房专区
#
152353次浏览
1516人参与
#
你小时候最想从事什么职业
#
154091次浏览
2059人参与
#
有转正机会的小厂实习值得去吗?
#
954次浏览
21人参与
#
不给转正的实习,你还去吗
#
2624428次浏览
22807人参与
#
你最讨厌面试被问什么
#
1694次浏览
27人参与
#
你觉得今年秋招难吗
#
1988311次浏览
18492人参与
#
如何缓解入职前的焦虑
#
259214次浏览
1454人参与
#
校招入职后的感受
#
487772次浏览
3681人参与
#
金融银行求职进展汇总
#
309518次浏览
1685人参与
#
国庆放假,你还会投简历吗?
#
47857次浏览
214人参与
#
秋招的破防瞬间
#
509201次浏览
2606人参与
#
毕业论文进行时
#
29062次浏览
156人参与
#
春节回家,你最想让 AI 帮你解决哪件事?
#
920次浏览
19人参与
#
这份实习,有没有动摇过你的职业方向?
#
2476次浏览
40人参与
#
毕业后不工作的日子里我在做什么
#
239326次浏览
1697人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务