Java 值得读源码的开源项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
errorMsg0xff
V2EX    Java

Java 值得读源码的开源项目

  •  
  •   errorMsg0xff 2023-12-15 19:16:16 +08:00 5172 次点击
    这是一个创建于 666 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前几天听人说 Spring 源码很多设计模式是错误的,jdk 的源码也有不优雅的地方(这里不是黑印度人,没有任何歧视),不知道他是装 x 的,还是事实

    所以想问一下大家有没有比较值得读源码的开源项目?或者非常值得读的一段代码
    27 条回复    2023-12-18 16:38:58 +08:00
    hello2090
        1
    hello2090  
       2023-12-15 19:32:03 +08:00   1
    他工资多少哇
    smalljop
        2
    smalljop  
       2023-12-15 20:13:49 +08:00
    那读一下 go 的源码
    xuanbg
        3
    xuanbg  
       2023-12-15 20:28:22 +08:00
    值得学习的是设计思想,源码真的没必要去读,除非遇到了 bug
    jeesk
        4
    jeesk  
       2023-12-15 20:53:42 +08:00
    什么叫做错误的? 应该说很多代码是为了兼容和历史遗留问题。 并且文件命名晦涩难懂。
    awalkingman
        5
    awalkingman  
       2023-12-15 20:56:15 +08:00
    netty 吧如果一定要推荐
    Leviathann
        6
    Leviathann  
       2023-12-15 21:18:27 +08:00
    学下整体架构设计就行了,具体代码写法就别学了,基本都是屎山

    spring 那代码我看着就想吐
    securityCoding
        7
    securityCoding  
       2023-12-15 21:47:43 +08:00
    可以找个 rpc 框架看看 ,比如 dubbo,motan 都很不错
    imanW
        8
    simanW  
       2023-12-15 22:44:32 +08:00
    mybatis 的设计还不错,自我感觉
    chenqh
        9
    chenqh  
       2023-12-15 23:05:47 +08:00
    开源项目的源代码维护得越久,就越是屎山,我至今记得我读 celery 那个配置的代码看得我好像被人用大锤猛锤几百下
    followNew
        10
    followNew  
       2023-12-15 23:24:06 +08:00
    商业项目的源码,迭代了很多年,是各种妥协的结果。
    看它们只能粗读,细读会进死胡同。

    程序员都有点理想化,代码不完美就看成是屎山。
    kuituosi
        11
    kuituosi  
       2023-12-15 23:26:32 +08:00   1
    jdk 有历史原因和兼容原因,不可能很优雅
    但是无脑挑战 spring 就是脑袋进水了
    值得读的源码都是经常用的框架啊
    jdk spring tomcat mybatis netty rocketmq dubbo guava
    zookeeper nacos
    L0L
        12
    L0L  
       2023-12-15 23:33:36 +08:00 via Android
    jdk 里面有两个 concurrentHashMap ,感觉值得看一看
    trzzzz
        13
    trzzzz  
       2023-12-16 15:07:54 +08:00 via iPhone
    @L0L 是的 我看过 jdk 里面的线程池,还是可以的
    pengtdyd
        14
    pengtdyd  
       2023-12-16 18:52:34 +08:00
    netty
    gowk
        15
    gowk  
       2023-12-16 20:15:40 +08:00
    自荐一下我 Star 过的 Repo: https://github.com/gowk?tab=stars
    逛 GitHub 这些年积攒下来的,有些还不错
    前几天听说淘宝竟然有打包卖书签的
    不知道 Star 的代码库可不可以卖
    ychost
        16
    ychost  
       2023-12-16 21:29:59 +08:00
    Netty 不错,没那么多设计模式,且无论是性能还是易读性都还可以
    midsolo
        17
    midsolo  
       2023-12-16 23:38:37 +08:00   2
    入门:MyBatis
    进阶:Netty ,Disruptor
    精读:Tomcat ,Dubbo
    ikas
        18
    ikas  
       2023-12-16 23:41:30 +08:00
    自己哪个用的多,就优先读哪个

    为啥读源码一定就要是无暇的?还是要自己体会与思考

    还有,不一定要读最新的版本,成熟的框架往往都会加入非常多的兼容与妥协,直接选择旧版本看反而更容易理解意图
    jiakme
        19
    jiakme  
       2023-12-17 10:35:47 +08:00
    底层: JUC 包
    设计模式:
    - https://github.com/iluwatar/java-design-patterns
    - Spring/SpringBoot: 主要关注 Bean 初始化, SPI, 拓展性设计
    网络: Netty
    RPC: Dubbo
    看完以上, 再结合自身需求看一些其它项目
    acerphoenix
        20
    acerphoenix  
       2023-12-17 10:42:15 +08:00
    上来先简单的,apache 的一些包,
    dddys
        21
    dddys  
       2023-12-17 15:22:01 +08:00
    apache doris ,时序数据库
    fkdog
        22
    fkdog  
       2023-12-18 09:58:09 +08:00
    没有明确目的的读源码行为,跟 xx 没什么区别。
    卷也没个卷的正确方法,跟个无头苍蝇一样乱撞,笑死个人。
    aoxg2019
        23
    aoxg2019  
       2023-12-18 09:59:20 +08:00 via iPhone
    一定要读一个的话可以选择 netty
    nolog
        24
    nolog  
       2023-12-18 10:15:08 +08:00
    @fkdog 那应该带着怎样的目的去读源码才是有意义的?
    errorMsg0xff
        25
    errorMsg0xff  
    OP
       2023-12-18 11:19:27 +08:00
    @jeesk 他的意思是这样,举个例子: 命名是 Adapter 适配器模式,但实际是其他的设计模式
    LoNeZ
        26
    LoNeZ  
       2023-12-18 13:25:08 +08:00
    Netty 是最值得看的,别的可以参看一些 Java 实现的中间件的.
    Aresxue
        27
    Aresxue  
       2023-12-18 16:38:58 +08:00
    值得的:Netty
    架构设计的好看的:Dubbo
    理念完善的:Spring
    实现巧妙的:AQS 、ConcurrentHashMap
    贴近业务的:Rocketmq
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2193 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:44 PVG 08:44 LAX 17:44 JFK 20:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86