自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我的新书《代码精进之路:从码农到工匠》

微信公众号搜索“从码农到工匠”关注我最新的文章。

  • 博客(120)
  • 资源 (11)
  • 收藏
  • 关注

原创 这才是单元测试,也许我们之前都理解错了

我今天要捅一个火药桶问题:如何进行单测。因为关于这个话题的争论实在太多了。为了减少非议,首先,我要界定一下问题范围,我这里所说的测试是针对分布式系统服务(微服务)的单元测试,不同的产品形态,测试方法差异很大,比如嵌入式系统、office软件的测试不是我们要讨论的范围。其次,我直接给观点,我认为微服务的单元测试的最佳实践就是:粗粒度单元测试优先,细粒度单元测试补足,关注测试效率(执行效率、代码效率)...

2024-04-07 15:27:43 757 1

原创 这才是单元测试,之前我们都错了

我今天要捅一个火药桶问题:如何进行单测。因为关于这个话题的争论实在太多了。为了减少非议,首先,我要界定一下问题范围,我这里所说的测试是针对分布式系统服务(微服务)的单元测试,不同的产品形态,测试方法差异很大,比如嵌入式系统、office软件的测试不是我们要讨论的范围。其次,我直接给观点,我认为微服务的单元测试的最佳实践就是:粗粒度单元测试优先,细粒度单元测试补足,关注测试效率(执行效率、代码效率)...

2024-04-06 15:21:16 1044 2

原创 关于深度学习和大模型的基础认知

这年头,作为一个技术人,话头里没有“大模型”,和人聊天都聊不下去。为了让自己和大家能更好的参与话头,特撰写此文,提供一些对大模型的基础认知能力(门外汉,浅尝辄止)。旨在解自己的一些困惑,比如,模型是什么意思?千亿/万亿参数意味着什么?为什么大模型如此耗费算力?什么是机器学习?关于什么是机器学习,李宏毅老师在其课程中说地很精辟,即 机器学习 ≈ 机器自动找一个函数f( )函数(function)就是...

2024-02-19 09:16:46 2478 3

原创 Google云的平台工程

GCP(Google Cloud Platform)是Google云,为其内部(Google search、Gmail、YouTube等)和外部客户提供IaaS、PaaS以及Serverless computing等云服务的平台。本文将带领你走进GCP,并深入体验其产品功能,感受Google云的产品设计理念以及相关架构思想。从而可以淬其精华,为我所用。本文的主要内容如下:1. 注册Free Tri...

2023-11-14 09:43:52 4128

原创 Coding只是基础,思维能力才是关键

Software engineering isn't just about keystrokes; it's fundamentally about problem-solving and critical thinking.(软件工程不只是敲键盘,其本质是解决问题的能力和批判性思维的能力)这也是我写《程序员的底层思维》这本书的初衷,coding能力和经验固然很重要,但更重要的是如何从这些经验中提...

2023-08-11 15:37:45 5514

原创 深入Spring配置内核,感受抽象的力量

我在《程序员的底层思维》中说过,抽象思维是程序员必须要掌握的重要思维能力。好的软件设计离不开抽象和抽象层次的权衡。比如你说配置就是properties文件,这个抽象层次就很低,因为yaml也可以是配置文件。好的抽象能为系统提供必要的扩展性和可维护性。本文通过深入剖析Spring配置的抽象设计,以及讲解这套抽象是如何支撑Spring,以及持续支撑SpringBoot和Spring Cloud Config的功能扩展。带你一起感受抽象的力量。

2022-12-08 11:44:15 8679 1

原创 深入浅出日志体系(logback最佳实践)

日志是影响研发效能的关键因素之一,没有好的日志规范、日志框架、日志系统、日志实践,就不可能有高的研发效率。本文我会介绍一些这些年,我积累的一些我认为比较好的日志实践。

2022-11-23 09:50:50 8529 2

原创 软件设计的三重境界:守-破-离

规矩礼仪,务必先尽守之,然后破之,离之,然皆不可忘本矣。理解守破离“守破离”最初起源于日本剑道,是一种学习剑道的方法,后来,这种方法被发展到了整个日本武术界,乃至其他各个行业,成为一种崇高的工作精神和态度,也是“工匠精神”的一个核心。在理解了守破离之后,你会发现,我们的学习都要经历守——破——离三个阶段。所谓“守”,就是最初阶段须遵从老师教诲,认真练习基础,达到熟练的境界;“破”是在基础熟练后,试...

2022-10-01 09:32:21 8780 4

原创 软件设计的中庸之道

反者道之动,过犹不及,物极必反。做人如此,做事如此,软件设计也不例外。从业的时间长了,看到过、经历过太多教条式的错误。所以特意写此文告诉大家,软件设计无其他,唯有中庸之道。1. 理解中庸在进入技术讨论之前,让我们先理解一下什么是中庸。中者,不偏不倚、无过不及之名。庸,平常也。中庸的要义在于执两用中。我们知道走极端肯定不是中庸,然而正中间也不一定就是中庸。中,不是数学和物理的绝对中间、一半、百分之五...

2022-09-08 10:23:11 7805 2

原创 微服务到底要多微?

我经常会被问到一个问题:我们的微服务边界要怎么划分?怎样的粒度才算合适?面对这样没头没脑的问题,标准答案只有一个:看情况(It depends)。这不是我故意耍小聪明,而是事实情况的确就是如此。因为微服务划分并不是单纯的技术问题,它更是业务问题,甚至是组织问题。因此,脱离业务上下文和组织边界讨论服务边界是没有意义的。 说实在的,即使你把背景都和说清楚了,我也...

2022-08-17 11:36:43 7889 4

原创 如何减少软件设计和实现之间鸿沟

在软件领域,有一个古老的神话:即我能保证设计和代码实现完全一致。这的确是一个非常有价值的目标。试想下,如果我们的系统毫无设计,或者设计和代码实现毫无关联,在当今软件如此复杂的情况下,其实现和维护难度可想而知。本文将结合我最近给ICT做软件设计培训的一些感悟,尝试介绍一些减少设计和实现之间鸿沟的方法,这些方法包括语言一致,设计一致和代码一致。除了介绍方法之外,我会以运营商计...

2022-06-27 19:50:39 8352 3

原创 跨越DDD从理论到工程落地的鸿沟

DDD作为一种优秀的设计思想,的确为复杂业务治理带来了曙光。然而因为DDD本身难以掌握,很容易造成DDD从理论到工程落地之间出现巨大的鸿沟。就像电影里面的桥段,只谈DDD理论姿势很优美,一...

2022-03-03 17:42:36 14696 35

原创 Clean Code之封装:把野兽关进笼子

如何把复杂这头野兽关进笼子,的确是我们程序员面临的巨大挑战。正如Dijkstra所说:“软件是唯一的职业,人的思维要从一个字节大幅跨越到几百兆字节,也就是九个数量级(放在今天的话,恐怕还要...

2022-01-27 11:03:07 8956 1

原创 一文教会你领域建模

我们软件工程师实际上只在做一件事情,即把现实中的问题搬到计算机上,通过信息化提升生产力。信息化的过程就是从“问题空间”到“解决方案空间”的过程。然而,“问题空间”和“解决方案空间”之间有一...

2021-12-30 12:26:13 18413 4

转载 从七个维度教你进行业务分析和软件设计

1 为什么要写技术方案回顾软件开发的历史进程,我们可以将其分为程序设计时代、程序系统时代和软件工程时代三大历史阶段。在程序设计时代(1946-1956),软件开发主要依赖于个人编程技巧,技...

2021-12-25 11:43:05 13911

原创 强大的wrapper

最近在看大数据和容器相关的东西,发现有一个模式被反复使用到,关键是被用的很恰当且优雅,并能在这些关键技术中都发挥着至关重要的核心作用。我想你已经猜到了,他就是Eminem——强大的rapp...

2021-12-22 18:42:51 11817 3

转载 DDD的模式与实践案例

花名:神帅,毕业5年,混迹于大小厂打怪刷实战经验。资深Java开发工程师。在企业服务领域和电商领域均有积累,最近一直在研究DDD和低代码领域,对后端微服务业务平台架构的实践和发展比较感兴...

2021-12-07 09:31:59 13117 1

原创 关于上下文映射看这篇就够了

本文摘自《程序员必备的思维能力》限界上下文任何问题都是有边界的,这个问题的边界也叫这领域边界。也就是说,我们要对一个问题进行分析或者建模,一定是在一个特定的上下文(Bounded Cont...

2021-08-17 11:39:43 9674 1

原创 程序员的底层思维:逻辑思维

更多关于思维能力的内容,尽在我的新书《程序员必备的思维能力》“你讲话要有逻辑!”“你这逻辑不对!”“你的底层逻辑是什么?”“说说你的逻辑思维能力体现在哪儿?”在日常交流中,我们会频繁的使用“逻辑”这个词。但能够清晰的说出逻辑的定义(什么是逻辑)应该不多,能够正确的掌握逻辑推理的人就应该更少了。对于大部分人来说,逻辑更像是一个“熟悉的陌生人”。举个例子。小王说:“Frank真不是男人,竟然会怕老鼠。”小张说:“Frank怎么不是男人,他不是男人,怎么会有鼓鼓的二头肌呢?”你觉得小张的反驳.

2021-07-31 11:48:21 16825 13

原创 业务中台的困境、及可能的解

有一个事情已经困扰我很久了——大中台、小前台作为战略已经提出很久了,在业界也掀起了不小的波澜,可是反观阿里的业务中台,为什么总觉得旁边有朵小乌云,感觉哪里不对劲。业务中台小乌云建一所房子,你要挖坑打地基,铺钢筋,然后一块砖头一块砖头的往上磊。没办法,原子世界就是这么物质,一块砖头都少不了。软件是比特世界,软件开发很少是从买服务器开始,特别是在这个Cloud Native的时代,很多基建的事情云厂商都已经帮我们做好了。IaaS是对算力、网络、存储、操作系统等基础设施的复用;PaaS是对中间件的复用;基

2021-06-29 16:11:26 10705 7

原创 程序员必备的思维能力:结构化思维

在日常工作中,我们时常会碰到这样的情况,有的人讲一件事情的时候逻辑非常混乱,说了很多事情的罗列,却说不到重点。有的人写代码,本身的业务逻辑并没有多复杂,但呈现出的代码缺像一堆线团,混乱不堪,无法理解。这些都是典型的缺少结构化思维的表现,导致我们在写作(包括写代码)、沟通、表达的时候,思维混乱,逻辑不清。结构化思维是一种从无序到有序、从混乱到清晰的思维能力,可以帮助我们快速加工处理繁杂的信息,提炼要点,从而更加清晰的表达。 本文作为思维能力的第二篇,我会系统的跟大家说说结构化思维。什么是结构结构可以说是

2021-05-08 14:25:09 11549 8

原创 程序员必备的思维能力:抽象思维

若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。——大卫·林奇抽象思维是我们工程师最重要的思维能力。因为软件技术 本质上就是一门抽象的艺术。我们的工作是存思维...

2021-02-12 18:03:28 28937 61

原创 一文教你认清领域模型和数据模型

依稀记得我第一次设计一个系统的时候,画了一堆UML图,面对Class Diagram(其实就是领域模型),纠结了好久,不知道如何落地。因为,如果按照这个类图去落数据库的话,看起来很奇怪,有点繁琐。可是不按照这个类图落库的话,又不知道这个类图画了有什么用。现在回想起来,我当时的纠结源自于我对领域模型和数据模型这两个重要概念的不清楚。最近,我发现对这两个概念的混淆不是个例,而是非常普遍的现象。其结果就是,小到会影响一些模块设计的不合理性,大到会影响像业务中台这样重大技术决策,因为如果底层的逻辑、概念、理论基础

2021-01-13 15:57:30 15688 3

原创 COLA 4.0:应用架构的最佳实践

前几天和几个饿了么的同学聊天,一听说他们还在使用COLA 1.0,我二话没说,90度鞠躬,赔礼道歉,虚心聆听他们的吐槽。COLA的初衷旨在控制复杂度,救码农于水火,惭愧的是,早期的思想不成熟,设计也多有缺陷,不仅没帮到他们,反而坑了他们,实在抱歉。实际上,我在COLA 3.0迭代的时候,已经举起奥卡姆剃刀,砍掉了很多东西。然而还不够,主要体现在对架构的思考还不够透彻。因此,经过仔细反思,有了这一版最新的COLA 4.0,期望回归初心,让COLA真正成为应用架构的最佳实践,帮助广大的业务技术同学,脱离酱缸

2020-12-09 19:27:54 202700 228

转载 为什么说应用架构需要分类思维?

阿里妹导读:如何定义架构?应用架构的要素有哪些?什么是应用架构中的分类思维?开源应用架构COLA的作者张建飞介绍他在COLA架构设计中的一些思想经验,分享他的应用架构之道。模块(Modu...

2020-11-26 11:59:52 3311 3

原创 年轻人不讲code(抠德)

年轻人不讲code(抠德)看到需求,嗖,就干起来了,很快啊!左边一个if,右边一个else。我说,小朋友,你们这样不行,写代码不能用死劲,要学会四两拨千斤,Martin、Eric、Robert、Frank都不是这么做事的。他们不服气,又搬出了微服务、中台、codeless… 一个左正蹬,一个右边腿,再加一套组合拳…一开始系统都防出去了,艰难抗住,但很快,招架不住,被整的“噼里啪啦,天女散花”。这样好吗?不好。看着奄奄一息的系统,我流泪了,这是在做工程?来——骗!来——偷袭!代码界,当以好代码

2020-11-25 20:02:00 2440 5

原创 应用架构COLA 3.1:分类思维

模块(Module)、组件(Component)、包(Package),这些概念对于我们技术同学并不陌生,但并不是所有人都能理解其要义。深入理解之后,我才发现,其背后的深意是分类思维。而这种分类也是应用架构的核心所在,通过不同粒度、不同层次的分类,把复杂的软件系统实现控制在可以被理解、被维护的程度。否则,对于动则上100万行代码的软件,人类根本没有办法理解和维护。试想一个极端情况,假如没有这些概念协助我们分类,我们把所有业务逻辑都写在一个类里面,会是什么样的结果呢?我们很多的“非人类”系统,正是因为没有

2020-11-10 19:22:10 10886 10

原创 复杂性应对之道——维度思维

You should not be a if-else coder, should be a complexity conquer. -Frank这篇文章,是对之前我在《一文教会你如何写复杂业务代码》说的“自上而下的结构化分解 + 自下而上的抽象建模”方法论的升级。因为在之前的方法论中,我们缺少一个多维度看问题的视角,这种维度思维的缺失,可能会导致miss掉一些重要的业务信息,从而使我们制定软件设计策略的时候,陷入困难。有了维度思维,我们便可以更加方面的去看清业务的全貌,更加全面的掌握业务信息,从而.

2020-09-25 13:36:08 4345 3

原创 35岁是技术人的天花板吗?

35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上...

2020-09-16 10:22:33 1827 1

原创 35岁就是技术人的天花板吗?

35岁是技术人天花板了吗? 35岁不是技术人的职业终点 面试造火箭,入职拧螺丝,我该怎么办?[video(video-tlgcBWfX-1600154998139)(type-youku)(url-https://player.youku.com/embed/XNDg1ODQ0NDc2OA==)(image-https://vthumb.ykimg.com/054106015F605E

2020-09-15 15:32:49 10925 35

原创 奥卡姆剃刀:让事情回归简单

最近,阿里云的同学告诉我,COLA作为应用架构,已经被选入阿里云的Java应用初始化的应用架构选项之一。This is really something,于是,在这个里程碑节点上,我开始回...

2020-06-26 23:59:13 1701 1

原创 应用架构COLA3.0:让事情回归简单

最近,阿里云的同学告诉我,COLA作为应用架构,已经被选入阿里云的Java应用初始化的应用架构选项之一。This is really something,于是,在这个里程碑节点上,我开始回过头来,重新审视COLA一路走来的得与失。COLA作为一种架构思想无疑是成功的。但是作为框架,个人感觉有点鸡肋之嫌。 特别是在简洁性上做的不好,感觉做了不少画蛇添足的事情。试想一下,有些功能我作为作者都很少去使用,我实在想不到,它为什么还有存在的理由。基于上面的思考,我做了这一次COLA 2.0 到 COLA 3

2020-06-26 23:45:46 19271 12

原创 人人都是架构师:架构是一种能力,不是头衔!

架构是一种能力,它不是头衔。 换句话说,我们需要具备架构能力,但不一定要成为架构师。就像邓公,他被称为改革开放的总设计师,但他不是设计师。既然这样,那我们还需要架构师吗?还需要架构部门吗...

2020-06-16 10:05:05 2409

转载 DSL初探之“无状态”的状态机

最近在一个项目中,因为涉及很多状态的流转,我们选择使用状态机引擎来表达状态流转。因为状态机DSL(Domain Specific Languages)带...

2020-03-30 14:52:07 3682 1

原创 实现一个状态机引擎,教你看清DSL的本质

最近在一个项目中,因为涉及很多状态的流转,我们选择使用状态机引擎来表达状态流转。因为状态机DSL(Domain Specific Languages)带来的表达能力,相比较于if-else的代码,要更优雅更容易理解。另一方面,状态机很简单,不像流程引擎那么华而不实。一开始我们选用了一个开源的状态机引擎,但我觉得不好用,就自己写了一个能满足我们要求的简洁版状态机,这样比较KISS(Keep It ...

2020-03-20 18:53:54 39461 33

原创 关于面向接口编程,你真的弄懂了吗?

什么是接口(What)百度说:接口泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。人类与电脑等信息机器或人类与程序之间的接口称为UI(User Interface ,用户界面)。电脑等信息机器硬件组件间的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。牛津字典说:Interface: A p...

2019-11-02 23:23:35 10119 7

原创 解决问题黄金三步:定义问题—分解问题—归类分组

我们经常说软件开发中,没有银弹。的确,单看软件领域,很少有什么方法论是普适的。然而再拔高一些,跳出软件的范畴,是有一些东西是普世的,比如老子说的“道”。好吧,“道”说的有点大。不过,最近我的确有一个新发现——我发现“归类分组”在我们解决问题中起着巨大的作用。而这里的“问题”不仅仅限于软件设计,从日常生活、产品设计到公司战略、生物分类。都有它的身影。这是为什么呢?究其原因可能有两个:一、归类分...

2019-09-03 19:52:00 13006 3

原创 应用架构COLA 2.0

很多同学不止一次和我反馈,我们的系统很混乱,主要表现在:应用的层次结构混乱:不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么;缺少规范的指导和约束:新加一段业务逻辑不知道放在什么地方(哪个类,哪个包)、应该起什么名字比较合适?解决这些问题,正是我创建COLA的初心之一——试图探索一套切实可行的应用架构规范,这个规范不是高高在上的纸上谈兵,而是可以复制、可以理解、可以落地、可...

2019-08-26 11:58:28 78184 25

转载 被提拔成主管后如何提升自己的管理能力?

作者:空白白白白 来自:知乎我是26岁当上数据总监的,当时完成了公司的数字化转型,帮助公司带来盈利。就被提拔上成为管理者了。我一下子从专注于自己的事的工程师到搭建团队还要...

2019-08-21 18:00:03 2763

原创 一文教会你如何写复杂业务的代码

了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理。这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。针对该...

2019-08-02 10:45:21 6877 7

实现领域驱动设计精华版(英文)

书中关于Ubiquitous Language,Bounded Context,Domain Event,以及基于DDD的战略设计和战术设计有非常精辟的阐述

2018-11-12

Domain Driven Design by Eric(有目录版)

是的,不管你承认与否,很多时候,我们都是操着面向对象的语言干着面向过程的勾当。面向对象不仅是一个语言,更是一种思维方式。在我们追逐云计算、深度学习、区块链这些技术热点的时候,静下心来问问自己我们是不是真的掌握了OOD;在我们强调工程师要具备业务Sense,产品Sense,数据Sense,算法Sense,XXSense的时候,是不是忽略了对工程能力的要求。据我观察大部分工程师(包括我自己)的OO能力还远没有达到精通的程度,这种OO思想的缺乏主要体现在两个方面,一个是很多同学不了解SOLID原则,不懂设计模式,不会画UML图,或者只是知道,但从来不会运用到实践中;另一个是不会进行领域建模,关于领域建模争论已经很多了,我的观点是DDD很好,但不是银弹,用和不用取决于场景。但不管怎样,请你抛开偏见,好好的研读一下Eric Evans的《领域驱动设计》,如果有认知升级的感悟,恭喜你,你进阶了。我个人认为DDD最大的好处是将业务语义显现化,把原先晦涩难懂的业务算法逻辑,通过领域对象(Domain Object),统一语言(Ubiquitous Language)将领域概念清晰的显性化表达出来。相信我,这种表达带来的代码可读性的提升,会让接手你代码的人对你心怀感恩的。

2017-12-16

亚马孙文化争议(Amazon Controversy)

在“纽约时报”刊登了⼀篇「揭秘亚⻢逊:撕出来的伟⼤创意」,声称记录了该公 司的实验,如何能透过推动⽩领使其实现不断扩⼤的野⼼。 Science House 从来没有 在星期六收到那么多的客户信息。 同事,客户和朋友们都询问我们本⽂所述的动态, 如何与他们的企业⽂化产⽣关联。 原计划私下向我们的客户提交这份报告 - 但是在周 末⼯作之后,詹姆斯·乔拉斯(James Jorasch)和我决定公开分享。

2017-11-02

漂亮登陆界面+Struts2 验证码 完整实现

开发环境: eclipse Kepler JEE IDE + Tomcat v6.0 + Struts-2.3.15(最新版) 步骤: 1. 下载后解压,import to eclipse as a project. 2. 启动 Tomcat v6.0 3. 打开http://localhost:8080/RandomChecker/Login.html 不能用,找我!

2013-08-07

淘宝私有云

淘宝私有云技术分享。

2012-11-08

eBay技术平台解析

eBay是怎么支持掌控十亿级交易数据的。

2012-11-08

Manning EJB3 in Action

大名鼎鼎的in Action系列,我从头看到尾,真的是非常的棒,资源里包括每章的实例代码,非常容易调试,理论结合实际,做到真正的in Action

2009-08-24

EJB3 实例教程(JBoss+Eclipse+Ant)

一个完整的EJB3教程,通俗易懂,只要你按照步骤走完,就会很快了解并掌握EJB3的精髓。

2009-01-04

J2EE Tutoria in EJB

J2EE is the most popular tech and framework used in world wide, what is j2ee? how ejb works? is ejb obsolete? This book will address all the questions

2008-12-24

EJB Design Pattern

Most Well-Architred EJB projects make use of design patterns. Whether or not a developer is actually aware that he is useing design patterns is another story

2008-08-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除