代码改变世界

大型网站系统架构的演化

2014-09-26 00:59 by 飘扬的红领巾, 59848 阅读, 217 推荐, 收藏, 编辑
摘要:前言 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海... 阅读全文

订单系统中并发问题和锁机制的探讨

2014-05-06 14:33 by 飘扬的红领巾, 11198 阅读, 5 推荐, 收藏, 编辑
摘要:问题由来 假设在一个订单系统中(以火车票订单系统为例),用户A,用户B都要预定从成都到北京的火车票,A、B在不同的售票窗口均同时查询到了某车厢卧铺中、下铺位有空位。用户A正在犹豫订中铺还是下铺,这时用户B果断订购了下铺。当用户A决定订下铺时,系统提示下铺已经被预订,请重新选择铺位。在这个系统场景中,... 阅读全文

利用log4j+mongodb实现分布式系统中日志统一管理

2014-03-27 23:06 by 飘扬的红领巾, 13184 阅读, 1 推荐, 收藏, 编辑
摘要:背景 在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出。为了方便对这些日志进行统一管理和分析。我们可以将日志统一输出到指定的数据库系统中,而再由日志分析系统去管理。而这个储存日志的数据库目前最适合的还是mongodb,一是因为它轻便、简单,与log4j整合方便,对系统的侵入性低。二是因为它与大型的关系型数据库相比有不少优势... 阅读全文

怎样编写高质量的java代码

2014-03-11 16:55 by 飘扬的红领巾, 13388 阅读, 11 推荐, 收藏, 编辑
摘要:代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码质量相关经验的朋友提出宝贵的意见。 代码质量所涉及的5个方面,编码标准、代码重复、代码覆盖率、依赖项分析、复杂度分析。这5方面很大程序上决定了一份代码的质量高低。我们分别来看一下这5方面: 编码标准:... 阅读全文

十五分钟学会用Hessian

2014-01-03 23:33 by 飘扬的红领巾, 1302 阅读, 0 推荐, 收藏, 编辑
摘要:了解Hessian Hessian是远程调用的一种技术,和WebService类似,但不同的是较WebService而言,它更轻量级,更简单,更快速。关于Hessian更详细全面的介绍可以查看http://hessian.caucho.com/。下面可以花十五分钟的时间,学会怎么简单的使用Hessian。 使用Hessian 在Eclipse建立一个Maven webapp项目... 阅读全文

Apache Mina实战

2013-09-18 11:07 by 飘扬的红领巾, 1219 阅读, 0 推荐, 收藏, 编辑
摘要:Mina介绍 Mina可以用于快速的开发基于网络通信的应用,特别是在开发手机端的游戏应用时,使用的较为普遍。本文简单介绍了一个用Mina搭建的一个简易讨论组,通过该应用可以对Mina的基本用法用途有个大致的了解。 界面效果 界面元素不多,使用了两个AWT组件。 客户端1: 客户端2: 服务端日志: 核心代码 服务端Handler 1: /** ... 阅读全文

Hibernate 延迟加载原理

2013-08-29 16:14 by 飘扬的红领巾, 1389 阅读, 0 推荐, 收藏, 编辑
摘要:如何简单的理解延迟加载?开发中常见的org.hibernate.LazyInitializationException no session错误又是怎么产生的?下面通过一个简单的例子来解析一下。 load VS. get load是Hibernate利用延迟加载获取对象的方法,当调用load时返回的是一个代理对象,并且该对象只包含主键ID。只有当你想主动获取该对象的其他非主键属... 阅读全文

Hibernate的三种状态及对象生命周期

2013-08-29 15:00 by 飘扬的红领巾, 2459 阅读, 0 推荐, 收藏, 编辑
摘要:理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助。 三种状态 临时状态(Transient):在通过new关键字,实例化一个对象开始,该对象就进入了临时状态,但它还没有被持久化,没有保存在Session当中。 持久化状态(Persistent):对象被加入到Session缓存当中,如通过session.sa... 阅读全文

为什么质疑Java中的Stack

2013-05-16 18:36 by 飘扬的红领巾, 4583 阅读, 4 推荐, 收藏, 编辑
摘要:问题由来 曾经遇到过一条面试题,“Java中的Stack是通过Vector来实现的,这种设计被认为是不良的设计,说说你的看法?”解析Java中的Stack 众所周知Stack(栈)是一种先进后出的数据结构。当中有两个重要的方法:push(进栈)和pop(出栈)。几乎所有语言在实现栈时,都会实现这两个方法,进栈和出栈。而栈这种数据结构在多数时候用来插入和删除元素(进栈则是在顶部插入元素,出栈则是从顶部删除元素),较少情况会用来查找元素。所以从实现方式上,大多是以链表方式实现而非数值方式实现(在插入删除方法上,链表效率优于数组效率)。反观Java中的Stack,查看源代码: 1: publi... 阅读全文

Maven实战(Maven+Nexus建立私服【Linux系统】)

2013-04-03 17:11 by 飘扬的红领巾, 8700 阅读, 0 推荐, 收藏, 编辑
摘要:准备工作下载及配置Maven3:http://www.cnblogs.com/leefreeman/archive/2013/03/05/2944519.html下载Nexus:http://nexus.sonatype.org/downloads/安装配置NexusNexus提供了两种安装方式,一种是内嵌Jetty的bundle,只要你有JRE就能直接运行。第二种方式是WAR,你只须简单的将其发布到web容器中即可使用。建议下载上面这个,下载完成之后,解压到linux的相应位置:上图中的 nexus-2.3.1-01和sonatype-work目录就是解压tar包后的两个目录,nexus-2 阅读全文