自定义博客皮肤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)
  • 收藏
  • 关注

原创 复杂业务代码要怎么写

了解我的人都知道,我一直在致力于应用架构和代码复杂度的治理。这两天在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,我有了一些新的思考,在此分享给大家。我相信,同样的方法论可以复制到大部分复杂业务场景。一个复杂业务的处理过程业务背景简单的介绍下业务背景,零售通是给线下小店供货的B2B模式,我们希望通过数字化重构传统供应链渠道,提升供应链效率,为新零售助力。...

2019-08-01 18:33:14 17814 18

原创 应用架构之道:分离业务逻辑和技术细节

架构什么是架构?关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。硬是要给一个概述,我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。架构始于建筑,是因为人类发展(原始人自给自足住在树上,也就不需要架构),分工协作的需要,将目标系统按某个原则进行切分,切分的原则,是要便于不同的角色进行并行工作。为什么需要架构?有系统的地方就需要架构,大到航空飞机,小到一个电商...

2019-07-04 07:28:00 10396 7

原创 复杂性应对之道——抽象

写本文的原因是,抽象是软件设计中最重要的概念。但抽象这个概念本身又很抽象,我们有必要花一些时间深入理解抽象、抽象的层次性,以及不遗余力的不断提升我们抽象能力。抽象的力量没...

2019-06-23 17:33:34 2751 1

原创 《代码精进之路:从码农到工匠》——抽象

写本文的原因是,抽象是软件设计中最重要的概念,但抽象这个概念本身又很抽象,值得我们花时间去好好探究一番。抽象的力量没有抽象思维,就没有人类光辉灿烂的现代文明。原始人看到一片树林,不会给它们一个名字,比如叫“松树”。他们会给每一棵树取一个独特的名字,可能叫“silisiba”。原始人只知道某棵具体的树。随着意识水平的发展,人类开始有意识地将具有相同特征的事物归并到一起,从“silisiba”...

2019-06-21 11:08:43 4826 2

原创 《代码精进之路:从码农到工匠》

我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。这种带有一点洁癖的完美主义就像一把达摩克利斯之剑,时刻提醒我不能将就、不能妥协。完美主义的代价是在很长时间里持续的迷茫和焦虑。甚至一度,我对软件行业是失望的,怀疑在软件的世界里,到底还有没有优雅的代码和整洁的架构。如果有的话,为什么所有的业务代码都像一座座“屎山”,既不优雅也不整洁,既晦涩又...

2019-06-21 10:59:51 11299 10

原创 阻碍你发展的是《能力陷阱》

读书的一大乐趣就是可以颠覆认知,让不同的思想在你这里汇聚,拓展你的思维,丰富你看问题的角度,让你在变化中成长。最近这本《能力陷阱》无疑是给我在认知上带来冲击很大的一本书,读完这本书,我自己也被惊出一身汗,这些陷阱真实存在,但自己却浑然不知。对了,这本书的作者是埃米尼亚·伊贝拉(Herminia Ibarra),全球50大管理思想家(Thinkers50)之一,哈佛商学院巡视委员会成员,欧洲工商管...

2019-06-17 16:07:21 1730 1

原创 万物流变:从辩证法看互联网架构和人生

辩证法这两天在学习辩证法,发现辩证法的思想非常有意思。辩证法简单的说就是事物都是运动、变化和发展的,事物的对立面在某些情况下是可以互相转换的,而且正是这种矛盾推动着事物向前发展。辩证法的思想自古有之,也是系统化思维和思辨思维的重要方法论,我们先简单看下其历史和脉络。中国古代朴素辩证法“祸兮福所倚,福兮祸所伏”“物极必反”, “否极泰来”“天下大势,分久必合,合久必分”。希腊古代辩...

2019-06-14 14:49:32 874

原创 结构化思维,让你的工作有条不紊

在日常工作中,我们时常会碰到这样的情况,有的人讲一件事情的时候逻辑非常混乱,前后没有逻辑性关联,不能把一件事情说清楚。这种思维混乱是缺少结构化思维的典型表现。实际上,我们不仅在表达上要结构化,在分析问题的时候更要有结构化思维,这样才能分析的更全面、更深刻。什么是结构化思维那么到底是什么是结构化思维呢?我给结构化思维的定义就是逻辑+套路。表达要有逻辑所谓逻辑是指我们的结构之间必须是有逻辑关系...

2019-06-14 14:35:10 3285 2

原创 使用结构化思维,让工作有条不紊

在日常工作中,我们时常会碰到这样的情况,有的人讲一件事情的时候逻辑非常混乱,前后没有逻辑性关联,不能把一件事情说清楚。这种思维混乱是缺少结构化思维的典型表现。实际上,我们...

2019-06-14 14:20:57 1616

原创 世界上唯一不变的就是变化:互联网架构的辩证发展

辩证法这两天在学习辩证法,发现辩证法的思想非常有意思。辩证法简单的说就是事物都是运动、变化和发展的,事物的对立面在某些情况下是可以互相转换的,而且正是这种矛盾推动着实物向...

2019-06-10 09:23:17 784

原创 技术人自己的KPI

为什么需要技术KPI在业务技术团队,有一个不好的趋势,就是团队越来越业务,越来越没有技术味道。每个人都在谈业务,技术大会上在谈业务,周会上在聊业务,周报里写的是业务项目....

2019-06-09 21:00:06 1878 2

原创 复杂度应对之道 - COLA应用架构

前言从业这么多年,接触过银行的应用,Apple的应用,eBay的应用和现在阿里的应用,虽然分属于不同的公司,使用了不同的架构,但有一个共同点就是都很复杂。导致复杂性的原因有很多,如果从架构的层面看,主要有两点,一个是架构设计过于复杂,层次太多能把人绕晕。另一个是根本就没架构,ServiceImpl作为上帝类包揽一切,一杆捅到DAO(就简单场景而言,这种Transaction Script也还凑合...

2019-01-04 17:04:44 50926 18

原创 Synchronized和Lock该如何选择

本文将从Synchronized和Lock的线程状态和同步算法的比较为切入点,深入探讨Java的并发处理和锁的机制。线程状态BLOCKED vs WAITING我们使用jstack将JVM的线程stack打印出来的时候,如果采用的是Synchronized进行并发同步的话会看到如下的日志: 如果采用的是Lock进行并发同步的话,会看到如下的日志: 类似的如果是调用j...

2018-05-21 22:36:04 8593 7

原创 复杂性应对之道 - 领域建模

为什么要领域建模软件的世界里没有银弹,是用事务脚本还是领域模型没有对错之分,关键看是否合适。就像自营和平台哪个模式更好?答案是都很好,所以亚马逊可以有三方入住,阿里也可以有自建仓嘛。实际上,CQRS就是对事务脚本和领域模型两种模式的综合,因为对于Query和报表的场景,使用领域模型往往会把简单的事情弄复杂,此时完全可以用奥卡姆剃刀把领域层剃掉,直接访问Infrastructure。我个人也是坚...

2018-03-19 17:39:07 29955 25

原创 SOFA企业应用框架

前言从业这么多年,接触过银行的应用,Apple的应用,eBay的应用和现在阿里的应用,虽然分属于不同的公司,使用了不同的架构,但有一个共同点就是都很复杂。导致复杂性的原因有很多,如果从架构的层面看,主要有两点,一个是架构设计过于复杂,层次太多能把人绕晕。另一个是根本就没架构,ServiceImpl作为上帝类包揽一切,一杆捅到DAO(就简单场景而言,这种Transaction Script也还凑合,...

2018-02-08 10:37:29 28142 12

原创 观察者设计模式

观察者模式 Observer  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。  这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。 观察者模式的组成  抽象主题角色 - Subject:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增

2015-03-23 14:48:34 1400

原创 Maven Archetype

1. 从project创建archetype在项目根目录下,运行 mvn generate:create-from-project 创建的archetype工程在app_folder/target/generated-sources/archetype 目录下,其中archetype-resources包含用来创建原型项目的文件,META-INF/maven/archetype-

2014-12-08 20:01:34 2011

原创 负载均衡

http://lyp0909.blog.51cto.com/508999/546865/

2014-07-22 09:47:16 1330

原创 Maven

Maven ArcheTypeArcheType is a Maven project templa

2014-07-19 15:22:06 1265

原创 一个工程师的工程文化

软件作为一本新兴学科,只有短短几十年的历史,如果说我们还处在软件开发的chu

2014-06-30 17:04:48 1542

原创 统一语言

正在阅读《发现你的优势》,

2014-06-27 16:50:52 1289

原创 HTTPS (HTTP Secure)

什么是HTTPSHypertext Transfer Protocol Secure (HTTPS) is acommunications protocol for secure communication over a computer network, with especially wide deployment on the Internet. Technica

2014-06-09 22:00:06 1663

原创 NIO vs. BIO

测试对象:1. 一个

2014-06-04 16:28:12 1729

原创 关于NIO

什么是NIO为什么要NIO

2014-05-28 11:19:29 1318

原创 大型分布式系统架构

本文主要是从软件的质量属性的角度

2014-05-17 10:42:16 2012 2

原创 监控和日志

监控(Monitoring)和日志(Logging)是大型分布式系统中最关键的基础设施(infrastructure)之一,因为没有监控,就没办法知晓服务的运行情况,就没办法知道集群中有没有Down机,机器的CPU使用率、负载是否正常,网站的Traffic是否正常,服务的出错率是不是在可容忍范围之内。 简而言之,监控使得我们可以实时的了解网站的运营情况和可用性(Availability)情况。

2014-05-14 11:15:08 2943

原创 反向代理及如何获得原始IP

在现代网站架构中,scalability

2014-04-11 10:06:25 2230

原创 摄影扫盲

Sony微单,已经买了一年了,但是每天只会用iAuto扫射,昨天现在家,花了点时间琢磨了下。终于搞懂了 ISO Sensitivity (感光度),Aperture (光圈),Shutter Speed(快门速度,也就是曝光时间)这三个最基本要素。不过这还要得益于下面这三篇非常非常好的文章:ISOhttp://photographylife.com/what-is-iso-in-p

2014-02-17 10:23:43 1253

原创 JQuery this 和 $(this) 详解

this this 在面向对象语言中,指代调用上下文对象,在js中,也是一模一样的概念,所以不管这个this出现在什么地方,只要追踪到当前调用对象是什么,那么this是什么也就一目了然了。先看一个简单示例 (function(){ console.log("Normal function being invoked by: "+ this); })();输出: Normal

2014-01-24 16:02:27 1472

原创 了解自己

正在看一本书《Brilliant Psychology》,里面提供了智商和情商的测试,去测了下, 发现自己智商和情商都还可以智商测试:http://www.iqtestexperts.com/iq-test/instructions.php My IQ is 118 130 and above:Gifted115–130:High intel

2014-01-15 08:52:45 1285

原创 程序员的生产力

刚刚看到一篇文章,说是好的程序员生产力是普通程序员的几倍,甚至上百倍。 文章是一个台湾人写的:http://blog.vgod.tw/2009/12/18/divine-code-10/对里面关于“工具” 和 “自动化” 的描述,有顿悟的感觉,故记录于此。公司总是在强调,完成本职工作,只是meet,如果想meet some 或是 meet most, 一定要有创新思维或者积

2014-01-13 10:16:35 1496

原创 Javascript函数、构造函数、原型、类和对象

函数函数是JavaScript中特殊的对象,对函数执行typeof运算会返回字符串"function", 因为函数也是对象,他们可以拥有属性和方法。静态方法直接在函数对象上定义新函数,起到Java里面static method的效果: var foo = function(){}; foo.printLog = function(){ if (arguments.len

2013-12-06 12:35:53 1258

原创 BES

自主开发一套消息中间件系统。需求:1、保证能在大规模分布式环境下发送接收消息。2、消息发送者(Producer)能够简单、容易的发送Event。3、所有的Event都能被注册监听该Event的消息接收者(Consumer)处理至少一次。思路:

2013-11-29 11:36:07 1865

原创 JQuery Object vs. DOM element

JQuery Object 和 DOM的区别HTML DOM 定义了访问和操作HTML文档的标准方法。其中 document 是DOM 树的根对象 ,在JS中,我们可以用DOM操作HTML,例如:document.getElementById("intro").innerHTML;如果将DOM element alert 出来,其显示为 [object HTMLFormEl

2013-11-22 10:58:42 1166

原创 创建自己的taglib 并打包入jar

1. Create a TLD (tag library descriptor) file namedmy-tags.tld. For more information, see Creating a Tag Library Descriptor.例如: Raptor JSP Taglib 1.0 2.0 r http://ebay.co

2013-11-14 14:34:00 1027

原创 基于中间件/构件的开发

定义:中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统和用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行和开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件,中间件是一类软件,中间件不仅要实现互联,还要实现应用之间的互操作;中间件是基于分布式处理的软件,最突出的特点

2013-10-20 21:29:05 1603

原创 如何创建RESTFul Web服务

想写这篇文章很久了,这是个大话题,不是一时半会就能说清楚的。 所以准备花个一星期整理资料,把思路理清楚,然后再在Team里做个sharing:)其实RESTFul是架构风格,并不是实现规范,也不一定非要用HTTP,但鉴于HTTP的ubiquity和SOA的实现基本都基于HTTP实现,可以这样说,HTTP就是Restful的实际实现协议。一、HTTP 协议二、什么是Restful三、

2013-09-03 17:04:28 1758

原创 企业级API设计

最近对service的API设计,在team内有些讨论,主要集中在API是足够抽象、通用好呢, 还是具体、易用好?其实这个是要折衷的,通用的好处是以后更改API的可能性小,但坏处是想要通用,里面的字段就不能定义太死,不定义死,极端的例子是全部用Name/Value Pair,最通用,但client面对这些NV,根本不知道怎么去设值,这样的API很明显是不友好,难用的。 所以需要折衷。当然一

2013-09-03 16:44:34 1395

原创 我的面试库

算法题公司现在的面试对算法要求很高,不妨开个贴,整理一下,弄出几个自己很熟悉又很有代表性的算法题,免得每次都要重新准备。参考: http://blog.csdn.net/v_july_v/article/details/65434381. 有1000万条查询字符串记录,找出top 10 出现次数最多查询串。用Hash Table,详细:http://blog.csdn.ne

2013-08-26 23:07:11 1997

原创 架构师在敏捷中是猪还是鸡

刚刚在InfoQ上看到这边文章,还挺有意思http://www.infoq.com/cn/news/2013/08/architecture-scrum猪、鸡是什么意思?http://en.wikipedia.org/wiki/The_Chicken_and_the_PigThe fable of the Chicken and the Pig is used to illustr

2013-08-19 12:55:22 1344

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

书中关于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关注的人

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