- 博客(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
原创 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
原创 监控和日志
监控(Monitoring)和日志(Logging)是大型分布式系统中最关键的基础设施(infrastructure)之一,因为没有监控,就没办法知晓服务的运行情况,就没办法知道集群中有没有Down机,机器的CPU使用率、负载是否正常,网站的Traffic是否正常,服务的出错率是不是在可容忍范围之内。 简而言之,监控使得我们可以实时的了解网站的运营情况和可用性(Availability)情况。
2014-05-14 11:15:08 2943
原创 摄影扫盲
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
实现领域驱动设计精华版(英文)
2018-11-12
Domain Driven Design by Eric(有目录版)
2017-12-16
亚马孙文化争议(Amazon Controversy)
2017-11-02
漂亮登陆界面+Struts2 验证码 完整实现
2013-08-07
Manning EJB3 in Action
2009-08-24
J2EE Tutoria in EJB
2008-12-24
EJB Design Pattern
2008-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人