最新文章
解析微服务架构(一)单块架构系统以及其面临的挑战 软件设计
概述 多年来,我们一直在技术的浪潮中乘风破浪,扬帆奋进,寻找更优秀的方法来构建IT系统,也一直在积极的学习并观察先进的公司如何以不同的架构方式构建或者优化其IT系统,来积极应对市场的变化,迅速做出响应,从而为客户提供更多的价值。 微服务架构模式(Microservice Architect ...
说说领域驱动设计和贫血、失血、充血模型 软件设计
原文发布于2013年12月6日 工作地点转换成家中后,最近都没什么心情写博客了(好吧我承认是我懒)。之前的几篇都比较水,今天来个(对于我来说)难度略高的内容吧。 这次想讨论的话题是有关领域驱动设计,和领域驱动设计中使用贫血、失血or充血模型的。在这之前我想讨论下当前很多应用的问题,想起这个话...
贫血,充血模型的解释以及一些经验 软件设计
为了补大家的遗憾,在此总结下ROBBIN的领域模型的一些观点和大家的补充,在网站和演讲中,robbin将领域模型初步分为4大类: 1,失血模型 2,贫血模型 3,充血模型 4,胀血模型 那么让我们看看究竟有这些领域模型的具体内容,以及他们的优缺点: 一、失血模型 失血模型简单来说,...
如何避免软件工程中最昂贵错误的发生 软件设计
英文原文:The Effective Engineer 影响软件工程进度的原因有很多种,而代码重写无疑是最耗费时间的变更之一。那么重写的时候需要注意哪些细节才能把资源开销控制到最低或可接受的程度呢?本文作者Edmond Lau在其博文中进行了阐述。以下为译文。 前几周,一位年轻的初创企业工程...
面向服务体系和遗留系统 软件设计
英文原文:Service-Oriented Architecture and Legacy Systems 企业系统已经从单片孤岛(monolithic silos)快速发展为使用机制灵活、面向服务的分布式应用系统。为了跟上这一趋势,IT组织必须近乎实时地调整他们的遗留系统,以面对商业变化的挑...
运维的本质——可视化 软件工程
没有比“可视化”更好的一个词能概括运维的本质,而“可视化”又应该分成两部分:可视化的服务交付和可视化的服务度量! 第一部分:可视化的服务交付 早期的运维是从ITIL开始的,那个时候大家都不知道运维是什么,幸好找到了一个IT服务最佳实践——ITIL。开始了互联网运维的摸索之路,从CMDB、服务...
携程App的网络性能优化实践 手机开发
首先介绍一下携程App的网络服务架构。由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现。网络通讯属于基础&业务框架层中基础设施的一部分,为App提供统一的网络服务:Native端的网络服务 Native模块是携程的核心业务模块(酒店...
技术领导力:作为技术团队领导经常为人所忽略的技能和职责 软件工程
英文原文:Technical Leadership: The Often Overlooked Skills and Responsibilities of a Technical Team 因为团队的存在,每个软件团队都会设置一位团队领导的角色。这一职位在不同的组织中的具体名称或许会有所不同...
在LinkedIn做面试官的故事 求职面试
问题:硅谷公司的招人的渠道有哪些,跟国内有何不同? 一般公司都有自己的Refer和面试系统,HR人员寻找候选人,在LinkedIn上就有丰富全面的简历库,通过对毕业学校,就职公司的过滤去挖掘潜在员工。还有一些高水平的学术会议,工业界愿意支持和参与,像SIGMOD,VLDB顶级数据库大会;也喜欢...
架构之重构的12条军规(上) 软件设计
对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子。在遍地App的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴。 但是,随着应用的不断发展,最初的架构往往面临着各种问题,比如无法满足客户的需求、无法实现应用的扩展、无法实现新的特性等等。...
序列化和反序列化 编程基础
摘要 序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计...
尾调用优化 编程基础
尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的含义和用法。 一、什么是尾调用? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。function f(x){ return g(x);} 上面代码中,函数f的最后一步是调用函数g,这...
淘宝搜索算法现状 互联网
淘宝搜索排序的目的是帮助用户快速的找到需要的商品。从技术上来说,就是在用户输入关键词匹配到的商品中,把最符合用户需求的商品排到第一位,其它的依次排在后续相应的位置。为了更好的实现这个目标,算法排序系统基本按三个方面来推进: 一、算法模型 当用户输入关键词进行搜索的时候,系统依据算法模型来给匹...
对象的职责 软件设计
对象和数据的主要差别就是对象有行为,行为可以看成责任职责(responsibilities以下简称职责)的一种,理解职责是实现好的OO设计的关键。“Understanding responsibilities is key to good object-oriented design”—Mart...
好对象的7大美德 编程基础
英文原文:Seven Virtues of a Good Object Marin Folwer 说过:“库本质上是一组可以调用的函数,这些函数现在经常被组织到类中。” 函数组织到类中?恕我冒昧,这个观点是错误的。而且这是对面向对象编程中类的非常普遍的误解。类不是函数的组织者,对象也不是数据...
iOS应用架构谈(一):架构设计的方法论 手机开发
缘由 之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验。在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 当时看到这个问题正好在乘公车回家的路上,闲来无聊就答了一把。在zzz在微...
在团队中如何带领新手 程序人生
目标 通过引导、任务分配和沟通反馈等方式,让他逐步适应团队正常工作面临的压力、节奏和不确定性。对于一些心理预期过高的领导者,在此阶段应该明白,对于一个新手,还暂时谈不上能力判断和机会给予。 方式 创造良好的工作气氛:信任是第一位的。只有相互信任,才能把工作放手交给新手去做;另一方面,在他们...
微博背后的那些算法 编程基础
引言 微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针对的是用户之间的关系,关注某个人就意味着你成为他的粉丝,而他成为你的好友;@某个人意味着你想要他看到你的微博信息。 微博被人们认为...
谈“测试驱动的开发” 软件设计
现在的很多公司,包括 Google 和我现在的公司 Coverity,都喜欢一种“测试驱动的开发”(test-driven development)。它的原理是,在写程序的时候同时写上自动化的“单元测试”(unit test)。在代码修改之后,这些测试可以批量的被运行,这样就可以避免不应该出现的...
好团队不可能凭空出现,赢在Leader的可行规划 项目管理
《西游记》中的唐僧团队历经千难万险,终于求得真经,目标明确、分工合理为这支队伍最终走向成功奠定了基础。唐僧从一开始,就为这个团队设定了西天取经的目标,虽然经历各种挫折与磨难,但目标从未动摇。悟空探路、八戒牵马、沙僧挑担,几位徒弟一起肩负着保护唐僧的任务。虽然性格迥异、各有缺点,但目标分解合理及成...