Skip to content

Instantly share code, notes, and snippets.

@simonwoo
Last active March 8, 2016 08:21
Show Gist options
  • Select an option

  • Save simonwoo/0fb8ef93192d15f9965a to your computer and use it in GitHub Desktop.

Select an option

Save simonwoo/0fb8ef93192d15f9965a to your computer and use it in GitHub Desktop.

基础

  • 核心概念
    • 对象模型
    • 接口设计
  • 类库
    • lang(String)
    • collections
    • concurrent
    • io

理解

  • String 这个核心对象发散出去关于字符的编码,字符的字节表达(大端、小端、网络字节序),对 GC的影响,正则表达,模式匹配,这可能是 Java 里内涵最丰富的对象了.
  • Collections 框架提供了大量常用的数据结构封装,基本让 Java程序员告别了手动实现你从数据结构课程上学来的绝大部分常用数据结构。 正确理解不同数据结构的适用场景比自己能手动实现它们有用的多,没事多看看 Collections 中的代码,都是大师级的实现啊。
  • concurrent 又一个大师级的类库实现,也是可以没事多看看,多揣摩。
  • IO 库,不论是文件 IO 还是网络 IO 都是 Java 程序员最常打交道的,熟悉它的 API 固然重要, 但更重要的是理解是如何对 IO 操作的抽象和建模,理解不同的 IO 模型其背后的本质与原理。

框架

Java 的框架越来越多,生态越来越大,初学者面对如此庞杂的框架,想必也是内心茫然,感觉真是学无止境,没完没了。 其实真实的项目中,真正用到的框架并不多,SSH/SSI 基本作为 Java Web 项目的核心框架,是你上手的核心利器,自需熟练掌握。 但知其然还需知其所以然,Spring 接管了对象创建和相互依赖管理的工作,把设计模式隐藏在框架的运用中,很多人只知用而未曾思。 Web 开发从早期的 JSP 一大乱炖(HTML + CSS + JS + Java + SQL,早期我就是把所有这些都放一个 JSP 里,想想有多难维护),到 MVC 的职责划分。 仅仅一个 View 层也经历了从标签库到页面模版(Velocity、Freemarker)的进化,如今更彻底的前后端分离模型我更喜欢。 曾几何时调几个页面的 CSS 样式杀死了我多少时间,专业化分工是有利于效率和深度的,互联网和移动互联网大发展引发的 Web 版本进化,让如今的前端复杂度已不在后端之下。

通用类库和框架让我们解放出来专注业务逻辑与效率,这很可能是你的代码最有价值的部分,有程序员可能会抱怨这些没技术含量,而我认为能用最有效的技术实现业务价值最大化才是最有技术含量的事。

延伸

进入互联网公司后这几年,Java 技术的发展开始从 J2EE 容器化的单一应用向 SOA 和微服务发展变迁。 规模化的分布式系统成为常态,所以我更多的相关工作便集中于此领域。 一方面纵深挖掘继续补全知识盲区,比如分布式程序的基础是 RPC 调用,RPC 的本质是网络加对象序列化。 相应就去彻底搞懂 TCP 的原理,Unix/Linux 下网络编程模型,几种不同的网络 IO 模型。 然后再上升到 Java 基于此提供的网络编程模型,BIO(阻塞)、NIO(非阻塞)和 AIO(异步IO),并结合实际工作实践去深入理解。

在这个过程接触了大量不同的 RPC 技术,从 Java 自带的 RMI 到 WebService 技术规范。 之后一些更简洁、性能更强大的 RPC 框架层出不穷,如 Hessian、Thrift 等等。 不同框架的本质依然如一,随着服务化的发展基于 RPC 框架又进一步衍生出提供额外增值功能的服务框架,如阿里开源的 Dubbo。 随着工作实践的深入,向下有可能又会进入 JVM 层面去分析对象的内存使用,线程的调度运行和延时情况。 这个阶段发挥核心作用的依然是前面说的快速学习并应用于工作实践的能力。

与纵深的另一面是横向扩展,随着工作性质的变化也可能需要更宽广的技术知识面。 比如成为架构师后,对技术知识面的广度要求某些方面会更高。 有方法的技术学习和涉猎技巧让你能更快扩张技术宽度,站在更高维度来审视不同的技术方向和产品,最有效的做出合适的技术决策。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment