一帆磨砺

生活所迫,一叶孤舟

0%

写在开头

  1. 本文基于《Ruby on Rails最强教科书》中第7章 Rails的最佳实践,其中有部分因为版本迭代问题有所改动
    • 图片上传组件paperclip已过期不再维护,选择了rails新版本自带的Active Storage
  2. 学习资源
  3. Ruby on Rails 似乎是通过大量的组件库,来减少开发的周期(DRY(Don’t Repeat Yourself)不重复造轮子),但是开放通用的组件必然会与定制化的业务有冲突(这样也导致了一定的学习门槛),可能深入学习后,可以较为轻松的定制化
  4. 基于个人入门学习的一些经验,感觉 Ruby on Rails 像是乐高,有丰富的零部件,你可以按照自己的想法快速的搭建出你需要的东西,但是如果没有足够的经验的话,你的成品就仅仅只是玩具
  5. 本文最终产物甚至于连玩具都算不上,仅仅是浅尝辄止的初步了解
  6. 环境安装参考RVM 实用指南
  7. 需要注意的是rails是充血模型,与Java的贫血模型是完全相反的设计理念
  8. 环境依赖数据库:PostgreSQL、缓存:Redis,个人推荐使用docker安装,其他方式也可,只要可以使用
  9. ruby国内官网ruby-china.org
  10. 如果是找工作不推荐学习ruby,个人兴趣多学一门语言是推荐的,ruby的一些设计理念还是很不错的

引用博文

  1. part-1-rails-active-storage-1ikh
  2. Ruby学习指南
  3. Rails 入门-官方指导手册
阅读全文 »

写在开头

  1. 需要重点理解的点是增强SPI和适配器(所有@SPI注解会生成Adaptive适配类),这两点关乎于核心的protocol和invoker的加载和多态控制
  2. 主要关心服务发布流程与消费端启动和调用流程,服务降级、集群容错、负载均衡、线程模型和线程池策略等可以之后单独了解,它们内容多但是代码结构和调用并不复杂
  3. Dubbo自封装的netty模块可以不用深究,主要分 handler 和 Dubbo自定义的数据协议
  4. zookeeper主要扮演配置中心和注册中心使用,服务提供者的变动会触发zk节点变动,从而通知到消费者及时变更内存缓存的服务提供者
  5. 注释代码
  6. 设计模式多用装饰模式、代理模式、责任链模式、策略模式
  7. 书中有部分内容在阅读时产生了理解歧义,可惜没有联系书籍作者的途径,此处作保留,希望有读者可以交流理解
阅读全文 »

写在开头

  1. 建议先学习不使用Netty的网络编程(即Java内置的Socket/IO/NIO),这样才能更好的学习Netty
  2. NIO学习推荐java-nio-all,不过有几篇还没有人翻译,需要看原文学习
  3. 代码可以从GitHub上直接下载netty-in-action
  4. 整本书的内容是针对Netty的学习,不同的业务场景中Netty的用法未涉及,最后两个章节的案例研究更多的是讨论选择Netty的业务背景,对于Netty的使用细节基本不涉及
  5. 可以的话建议是手动跟着敲一遍,可以加深一些映像
  6. 本书虽然是说实战,但是局限比较大,基本上是相关组件的基本使用,属于入门,推荐通过项目NettyGameServer/vert.x/cim加深熟练度
阅读全文 »

引用链接

  1. RocketMQ定时消息实现原理分析:时序图
  2. RocketMQ 实战(四) - 订阅机制和定时消息:关于correctDeliverTimestamp的理解
  3. 深入了解 RocketMQ 之过滤器:BloomFilter
  4. Bloom Filter概念和原理:BloomFilter
  5. Filter Messages By SQL92 In RocketMQ
  6. RocketMQ源码 — 七、 RocketMQ高可用(2):主从同步时序图

写在开头

  1. 本书存在较多的错误,主要问题是代码片段与文字描述的衔接对不上,并且存在少量的代码注释错误(可能是我看的代码分支与作者看的分支版本不同导致理解产生偏差),但是不能否认这本书的价值,尤其是一些关键地方的逻辑描述,能够帮助减少很多源码阅读理解的时间

  2. 建议以源码阅读为主,如果已经买了,可以同步对照书籍中的文字描述确认自己理解是否正确

  3. 个人已上传RocketMQ(release-4.9.4)DLedger(tag:dledger-0.2.6)带注释版本,部分核心入口已在工程的 ReadME 文档中标注

  4. 建议提前熟悉多线程编码以及异步编码(如Future),其中异步编码建议多练习,在RocketMQ和Dledger中使用较多,如果未能掌握该知识点,则会较难理解整体的流程

  5. 需要提前学习网络编程相关知识,最少也要熟悉Socket NIO编码,未开启DLedger时的主从同步主要依靠 NIO解决

  6. 关键点:NameServer路由管理、消息发送(客户端、Broker端)、消息存储(刷盘、主从同步)、消息消费(客户端、Broker端)、ACL控制、消息轨迹、主从切换(DLedger)

  7. 下方思维导图仅可用作个人回顾,无法作为学习材料(不成系统,仅仅是记录了源码阅读总结,其中DLedger部分的流程图主要参考书中对应流程图)

  8. 发现源码阅读不适合弄思维导图,流程图和时序图时非常合适作为源码阅读的总结,以后不再把代码的细节放到思维导图里了,以后估计是概述+一些关键点描述,然后加上流程图和时序图(本质上是最近几本书的阅读体验产生的总结,阅读源码有个大致的概念,知道大体的框架就可以开始阅读了,把源码的细节展示出来反而会增加理解难度)

    阅读全文 »

写在开头

  1. 不建议购买中文版,有些地方的翻译瑕疵会让你十分难受,让人很难继续读下去
  2. 这本书的内容算是经验总结,如果没有对应的编码经验的话,阅读也会十分难受,如果看不懂,可以先停下去敲一些相关的代码熟悉相关的类,或者跳过也可以,不用死磕在那
  3. 英文不好的同学可以去看Effective-Java-3rd-edition-Chinese-English(如果觉得这种行为和盗版无异良心过不去的同学可以买本英文版/中文版的然后看这个)
  4. 英文还可以的同学建议购买原版书籍Effective Java(第3版)(英文版)
  5. 不推荐购买并阅读中文翻译版本,痛,太痛了(半价买我都觉得亏)
  6. 思维导图就是目录+个人总结

引用博文

  1. 依赖注入的简单理解
  2. 深度理解依赖注入
  3. Deprecate Finalization for Removal
  4. 静态内部类的使用场景
  5. 抽象泄漏(Leaky Abstractions)
  6. JAVA 8 函数式接口( java.util.function 详解)
阅读全文 »

写在开头

  1. 本书难度比较简单,属于实践类,难度不高建议跟随书中代码敲一遍,有兴趣的可以点到源码看一看
  2. 正版定价129,建议京东活动时买入,半价还是可以的
  3. 本书大量的代码案例都是简单的Api使用,原理与源码讲解较少,深入理解需要自己看源码或者搜索相关知识点的博文
  4. 推荐入手,整本书如果代码都跟着敲一遍,预计有10-20个小时的工作量
  5. 下方的思维导图可以用作知识点大纲,有感兴趣的知识点可以额外单独搜索或者阅读对应书中章节细节内容
  6. 多线程相关实践代码可以参考我的练习代码
    阅读全文 »

写在开头

  1. 书中主要内容是源码解读,因为是黑白印刷,阅读体验会有所影响
  2. 书中关于大顶堆/小顶堆/红黑树/管程(Object Monitor/AQS)建议单独拎出来阅读
  3. 并发部分对于没有足够编程经验的同学门槛会有一些高,建议同时搜索相关博文多方参考学习
  4. 因为是源码解读,建议读者先使用相关类做简单的编码demo,可以更容易理解解读内容(最好可以先自己阅读一遍源码),可以先阅读《Java多线程编程核心技术》再来看本书
  5. 因书中主要内容是源码解析,因此不建议作为系统化学习的教材使用,可以用作学习过程中的辅助教材
  6. 打折时推荐入手,原价不推荐
  7. 下方思维导图仅是个人的简单记录,可以用作知识点列表按图索骥的单独去学习,图中无任何具体知识内容
    阅读全文 »

引用参考文档链接

  1. jdk18特性列表
  2. 迁移到JDK18为何写一个空的finalize()方法?
  3. Java-SE 安全编码指南
  4. Finalization对GC的影响

写在开头

  1. 反射核心重新实现,从API的维护成本和性能都有所提升
  2. 互联网地址解析器可自定义
  3. switch针对case覆盖范围和sealed类的检测进行了加强
  4. Finalization标注弃用,因目前仍默认启用,因此迁移成本暂时无变化,后期该特性正式删除后,迁移的成本估计需要仔细评估。
    阅读全文 »

引用参考文档链接

  1. jdk17特性列表
  2. Java 随机数相关 API 的演进与思考(上)
  3. Java 随机数相关 API 的演进与思考(下)
  4. 支持上下文的序列化过滤器,又一次给序列化打补丁

写在开头

  1. 浮点数计算将跨系统平台结果统一,不过float这个坑已经几乎所有人都知道,这个改动即便知道大部分也会遵循之前的安全习惯
  2. switch的匹配模式增强虽然还没开放,但可以直观的看出对简化代码的帮助很大
  3. 密封类sealed将会让多态环境更好控制,避免代码的无序扩张
  4. 反序列化过滤器没有想到使用场景,但是从介绍到demo可以直观的感受到它的重要性,一个是安全性,一个是反序列化过程的可控性
  5. 调用本地方法和操作堆外内存是非常重要的点,只是平时接触和使用的机会太少,这个特性未来能够正式使用一定能绽放精彩
    阅读全文 »