如何进行Java项目构建?

最新版本可见:https://github.com/superhj1987/pragmatic-java-engineer/blob/master/book/chapter2-project/build.md

对于一个完整的项目来说,一般都有很多的类、很多的包,如果是Web工程那么还有很多jsp、资源文件。这时候如果只用JDK自带的工具编译和运行,是非常困难的一件事前。再者,编译源代码只是软件开发过程的一个方面,更重要的是要把软件发布到生产环境中来产生商业价值。所以,代码编译之后,还有测试、分析代码质量、部署等步骤要做。整个过程进行自动化操作是很有必要的。

这时候就需要一个Java的工程/项目构建工具。这里所谓的项目构建就是指的完成工程发布流程需要的一系列步骤,包括编译、测试、打包、部署等等。虽然用Eclipse和Intellij这些IDE能解决这个问题,但是受限于这些IDE体积庞大且基本上都是GUI的,而后端应用的运行环境基本都是没有显示器的,所以很多时候还是需要一些专门做项目构建的工具来支持这些工作。

管理的一些要点

去年以及今年由于工作需要,参加了公司请的美国管理协会的《高价值经理人》及敏捷OKR绩效管理的培训课程,此外也阅读了《格鲁夫给管理人的第一课》、《架构即未来》、《技术管理之巅》、《OKR:源于英特尔和谷歌的目标管理利器》几本书。总体来看很多管理的理论其实日常自己也在实践,不过这些书的确让自己形成了自己的管理体系,能够有序有法的进行一些管理实践。本文从通用管理和技术管理两部分总结其中最让自己感到受用的几点心得。

架构简明指南

最新版本可见:https://github.com/superhj1987/pragmatic-java-engineer/blob/master/book/appendix/arch-usage.md

之前的《谈谈架构》讲述了架构的概念、原则等等,这里择出其中的设计原则部分供大家随手参考。

《Clean Architecture》一书中对于软件架构目的的解释:

The goal of software architecture is to miminize the human resources required to build and maintain the required system.

即:软件架构的目的就是将构建和维护系统需要的人力成本降到最低。

因此,可以得出架构设计的关键思维就是判断和取舍(程序设计的关键思维是逻辑和实现),即如何选择技术、组合技术使得需要的人力资源最少。

需要注意的一点是,脱离业务谈架构是不合理的,技术架构及其演进都是业务目标驱动的。

如何学习后端技术?

最新内容见:https://github.com/superhj1987/pragmatic-java-engineer/blob/master/book/chapter1-servertech/how-to-study.md

学习后端技术和学习其他的技术并没有什么大的不同。因此,题目换做如何学习技术也是讲的通的。概括来讲,有以下几点建议:

  • 扎实的计算机基础知识
  • 知其然更要知其所以然
  • 动手实践、频繁练习
  • 持续学习
  • 计算机思维
  • 自我总结
  • 学会规划

如何成为一名合格的Java工程师?

Java开发一直是当前互联网领域最火热的开发技能之一,Java工程师也一直是需求量非常大的开发职位。那么如何成为一名合格的Java工程师呢?一名合格的Java工程师又应该具有哪些技能呢?针对这些,笔者的新书《Java工程师修炼之道》做了一些经验性的阐述和讲解。

浅析区块链

从去年开始,区块链突然如火如荼起来,相关的新闻席卷微博、朋友圈、科技论坛、门户网站等各大媒体。业界大佬们更是频频发言,有宣称不做区块链就会被时代淘汰的,有说坚决不碰区块链的。国家队也是频频出手,管制、定性、做应用,央行更是默默地把区块链专利数量做到了世界前列。面对众多纷杂的信息、众多的技术分析文章,很容易让人脑袋嗡嗡,怕不懂,更怕懂了啥也都做不了。于是决定梳理一下相关的信息,看看这区块链到底是什么东西。

开篇之前,先抛出笔者的一个观点:区块链最合适的应用场景只有虚拟资产,除了虚拟资产的其他场景都是在蹭概念或者不是真正意义上的区块链,而且只要有人参与的业务流程都无法满足区块链设计的初衷。

正则表达式简明指南

公司使用的markdown解析类库一直有一些解析上的问题,最近给fix了。而markdown解析主要是对正则表达式的使用。中间恶补了一下相关知识,在此梳理一下。

什么是正则表达式

正则表达式就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。简单的一个例子:用字符串”a”来验证字符串s是否是”a”,形如s.match(“a”)。概括来说有以下作用:

  • 验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
  • 查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活。
  • 替换字符串,比普通的基于字符串的替换更灵活。