![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术
sole_ghost
这个作者很懒,什么都没留下…
展开
-
架构师书单 2nd Edition zz
作者:江南白衣,原文出处: http://blog.csdn.net/calvinxiu/archive/2007/03/06/1522032.aspx,转载请保留。 为了2007年的目标,列了下面待读或重读的书单。 "其实中国程序员,现在最需要的是一张安静的书桌。",的确,中国架构师大多缺乏系统的基础知识,与其自欺欺人的宣扬"读书无用,重在实践变通,修身立命哲学书更重要",把大好时...原创 2008-07-15 18:04:12 · 80 阅读 · 0 评论 -
缓存小技巧--缓存key的分组
这篇没有任何技术含量,仅仅是一个良好的编程习惯 随着应用中缓存的业务数据越来越多,为了防止不同业务的key相互覆盖的情况,有个简单的办法,对不用的业务的数据分组,比如:业务1 prefix1+key业务3 prefix2+key业务2 prefix3+key 这样之后,即时各个业务的key相同,也可以防止数据被相互覆盖的情况 ...原创 2010-07-19 22:15:44 · 444 阅读 · 0 评论 -
缓存小技巧--缓存的分级
在大型的互联网应用中,如果缓存的是大量的数据,可以考虑多级缓存数据1.第一级cache:本地线程cache 每次将数据放入线程cache(利用ThreadLocal)中,可以避免同一个线程中对同一个缓存数据的访问 2.第二级cache:本地内存cache 利用appserver的内存,将数据放入本地的内存缓存,可以用的工具有EHCache 3.第三级cache:...原创 2010-07-19 22:22:19 · 865 阅读 · 0 评论 -
缓存小技巧--实现cache的锁
在有些业务背景下,需要cache防止并发的情况,然后cache却不能提供锁的功能,可以由应用代为实现 1.第一次存入cache的数据时,加一个modifiedTime的时间戳2.下次更新的时候,必须保证取到当前的时间戳和cache中数据的时间戳一致,这样才可以更新;否则直接removecache,不要影响到正常业务。 其实,这种乐观锁的实现,和DB层的乐观锁实现原理是一样的,即...原创 2010-07-19 22:34:47 · 498 阅读 · 0 评论 -
大资源的分配与控制
在应用中,总有一些业务操作可能会引起大数据量的查询,基于应用健壮性的考虑,需要对这些业务控制起来。 思路:外围业务每次请求时,应用每次申请一个资源,当超过限定的资源总数时,不允许业务继续进行. try{ applyResource(); do业务(); } finally{ r...原创 2010-07-19 23:13:32 · 119 阅读 · 0 评论 -
我们需要什么样的logger
在生产环境中,针对具体问题的追踪,没有debug,只有利用logger排查问题,这就要求我们打印logger,具体有哪些logger呢? 1.摘要日志 同步service层摘要日志,打印调用服务,入参,执行时间,执行结果 异步事件接收摘要日志,打印调用服务,入参,执行时间,执行结果 dal层摘要日志 intergration摘要日志 摘要日志,一般由...原创 2010-07-19 23:28:33 · 185 阅读 · 0 评论 -
logger的功能
1.最明显的功能,排查线上问题。 平时遇到bug时,要相信“人走过,必留下痕迹”,没有什么事情是没有原因的。 2.报警 我们的系统越来越多,业务越来越多,不可能靠人肉每天查询日志以发现问题,还是要利用机器。 针对具体的业务,打印具体格式的日志,通过日志收集系统的规则,发现问题则向相关人员报警。怎么实现日志收集系统呢,可以每隔一段时间,从生产环境中获取指定日志,每次读...原创 2010-07-19 23:40:15 · 228 阅读 · 0 评论 -
AOP应用
AOP应用已经很广了,谈一谈平时工作用到的地方:1. 打印摘要日志 打印调用服务时的调用的服务、方法、参数、执行结果、消耗时间2. 详细的入参出参 打印调用服务时调用的参数列表,以及返回结果。基于日志量的考虑,对于频繁调用的查询类可能不需要打印;对于操作类服务,可以打印出入参出参3. 性能监控 对于每个服务的调用、异步消息的处理、DAO的调用,以及对外围系...原创 2010-06-26 15:51:59 · 101 阅读 · 0 评论 -
转载:面向程序员的数据库访问性能优化法则
http://blog.csdn.net/yzsind/archive/2010/12/06/6059209.aspx原创 2010-12-22 00:06:11 · 164 阅读 · 0 评论 -
缓存小技巧--key的关联性
如果我们对一个比较复杂的模型做cache,会有如下需求:1. 利用多个key去查询这一模型的cache2. 继而要求可以利用多个key去删除cache时 如果按照最简单的模型,每个key对应一个cache数据,这样当某一个key对应cache中的数据变动时,另外一个key对应的cache数据必定成为脏数据。举例:key1->cacheObject,key2->cac...原创 2010-07-19 22:11:20 · 231 阅读 · 0 评论 -
缓存小技巧--NullObject模式&&表识cache
在我们的应用中,有一张表的查询量非常之大,高峰期时6000次/second查询,而且更新很少,于是我们的改造来了: 第一次优化:方法:每次从cache中读取,如果cache中没有命中,则从DB读取,如果有值将此值放入cache中。效果:上线后效果并不是特别明显,高峰期仍有3000次/second的查询,原因在哪里呢?此表只有700w的数据量,但是对于3亿用户,每个用户都要查询此表,...原创 2010-07-19 22:01:52 · 171 阅读 · 0 评论 -
缓存小技巧--异步更新缓存时remove cache数据
在支撑大规模、高并发、高可用的互联网应用中,异步更新分布式缓存的应用已经越来越多了(为什么是异步更新缓存,因为异步不仅可以提高系统性能,而且提高系统的伸缩性和可用性),由于缓存的更新是异步的,可能由于多个更新缓存的并发线程而导致的脏数据。 举例,有下面2个线程A、B同时执行业务,执行完业务之后,会产生2个异步的线程A1、B1去更新缓存,在理想情况下,A1和B1应该保持顺序性,即A1先更新缓...原创 2010-07-12 23:24:22 · 443 阅读 · 0 评论 -
java序列化总结
1.Serializable接口只是一个表识接口,仅仅是告诉jvm这是一个可以序列化的接口。2.serialVersionUID只要这个UID的值不变,在序列化的版本中增加属性或者减少属性就不会报错;否则当版本变更后,再反序列会报错;如果自己不定义,每次在编译的时候,编译器会自动生成一个值,但是不能保证每次编译时的值都一样,所以务必自己定义! 3.readResolve、rea...原创 2009-10-26 23:10:54 · 77 阅读 · 0 评论 -
复杂对象的输出--定制toString
先来看一个类public class ComplexObject implements Serializable { private static final long serialVersionUID = -3986831089858789914L; private int id; private...2009-10-28 20:50:13 · 218 阅读 · 0 评论 -
Java对象的强、软、弱和虚引用
在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。 但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜。这...原创 2009-11-12 20:03:40 · 72 阅读 · 0 评论 -
Don’t Ask, Tell
Don’t Ask, Tell 先举一个计算工资的老例子. 不同的员工有各种不同的工资计算方法, 这种情况下如何为全公司的员工计算呢? 想想现实中的情况, 在公司可能有一个会计部,每到发薪的日子. 会计部就会把全公司的员工资料集中到一起, 看看张三是什么类型的员工, 如果是小时工就按小时工来计算,如果是办公室主任就按主任的方法来计算. 基于这样的考虑, 我们在建模的时候也会相应的建立一个类...原创 2009-11-17 02:55:57 · 95 阅读 · 0 评论 -
一些实用命令
1.windows下的删除还在为windows下删除大文件夹的弹出框烦恼吗?这里有个cmd下的rd命令,系统会在后台自动删除,免除弹出框的烦恼用法: rd /s /q 文件夹名称 2.linux下删除rm -rf * 3.linux下的rz和sz命令rz(receive):上传文件到linux服务器sz(send):从linux服务器下载文件到本地 4...2009-05-26 11:05:45 · 68 阅读 · 0 评论 -
探寻ThoughtWorks的敏捷实践,专访ThoughtWorks咨询师 <摘要>
敏捷包括TDD、重构、简单设计、持续集成等。TDD确保编码前理解需要,并保持简单设计;同时TDD自身的大量自动化测试为持续集成提供了保证;在重构代码时保证代码质量,达到简单设计。 敏捷思想提倡以人为本,持续改进,通过快速迭代实现频繁交互,保证与客户的沟通,减少对需求理解的不一致,客户也可以及时调整需求来满足业务的变化。每一个迭代过程都是一个完整的瀑布流程,包括分析、设计、编...原创 2009-11-24 13:52:23 · 189 阅读 · 0 评论 -
可伸缩性的艺术(1)
本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:)原文链接:http://www.hfadeel.com/Blog/?p=120 可伸缩性的艺术(1)我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及下一篇文章准备介绍的一些可伸缩性准则。我们现在开始吧...2009-07-26 16:36:25 · 162 阅读 · 0 评论 -
可伸缩性的艺术(2)
本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:) 原文地址http://www.hfadeel.com/Blog/?p=122可伸缩性的艺术(2)我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及一些指南。我们现在开始吧!Go to : 第一篇-...2009-07-26 16:41:28 · 131 阅读 · 0 评论 -
系统的性能优化--记项目总结
项目过去都3个多月了,也没系统的总结,今天总结一下 系统背景:1.访问量大:每天承受20亿+服务调用2.海量数据:核心表都是5亿条数据,而且每天还在以几十万的速度增加3.之前架构:由于读写比例很高,已经采用分布式cache--db单点的架构4.db负载高:在小机上,业务高峰期时,db的cpu的占用率曾达到70%-80%,响应明显变慢5.业务特性:读写比例高,大部分业务可...原创 2011-09-06 00:40:20 · 180 阅读 · 0 评论