- 博客(19)
- 收藏
- 关注
原创 SNS用户关系网络合并
在线社交网络相关应用的基本实现思路是将用户通过关系连接成关系网络,用数据结构中的图来对关系网络建模。有句话叫一个人可以通过六个中间人认识世界上任一陌生人。所以社交网络会随着参与者的增加而急速膨胀,最终所有用户将关联在一张超大图中。当两个独立用户群组A和B产生交集时,如何才能快速,有效地将两个图合并为一?假设A包含10个用户,B包含100个用户,那么将A图合并入B
2015-10-12 21:01:23
8058
1
原创 SNS关系分析系统
前段时间做了一个SNS用户关系分析系统,维护用户的人际关系,提供用户添加好友,删除好友,查询好友,推荐好友,和指定人关系查询,计算结果缓存等功能。1、包含功能点1.1好友查询 查询出和特定用户互相添加为好友的用户,按照姓名排序列表形式返回。1.2好友推荐 查询出和特定用户不是好友,但是用户好友的好友,通过关系远近排序,关系远近相同时通过姓名排序。1.3两人关系查询
2015-10-10 18:03:50
10439
原创 服务上下文建造者模式构造实践
系统服务处理过程通常会有很多透传参数,每次请求实际使用到的参数不尽相同。将透传参数以服务处理上下文的形式存储在Threadlocal中,可以简化代码内部逻辑,避免参数的显示传递。服务处理上下文包含所有需要的参数,通过建造者模式在每次请求处理前只需构造当次需要的参数。public class ServiceProcessContext { /** requestId */ p
2015-10-02 12:25:08
5528
原创 线程池最优大小的估算方法实践
线程池的理想大小取决于被提交任务的类型以及所部署系统的特性。线程池应该避免设置的过大或过小,如果线程池过大,大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内存使用量,而且还可能耗尽资源。如果线程池过小,那么将导致许多空闲处理器无法执行任务,降低了系统吞吐率。要正确设置线程池的大小,必须分析计算环境、资源预算和任务特性。包括所部署系统的CPU个数、内存大小、任务类型(计算
2015-10-02 09:40:45
5047
1
原创 hessian和xfire序列化反序列化使用注意
1、hessian1)序列化hessian序列化一个对象时,默认的序列化类是com.caucho.hessian.io.JavaSerializer。JavaSerializer的writeObject方法代码片段如下:try { out.writeMapBegin(cl.getName()); for (int i = 0; i
2015-10-02 08:13:26
9030
原创 本地事务异步恢复机制实现多数据源最终一致性
在传统关系型数据库的事务模型中必须遵守ACID原则,在单数据库业务下,ACID模型有效保障了数据的完整性,但是在大规模分布式环境下,一个业务往往会跨越多个数据库,如何保证这多个数据库之间的数据一致性,在JavaEE规范中使用2PC两阶段提交来处理跨DB环境下的事务问题,这套规范叫JTA,但是2PC是反可伸缩模式,事务处理过程中,参与者需要一直持有资源直到整个分布式事务结束,当业务规模达到千万级,2
2015-10-01 09:17:46
11969
原创 状态机模式下的领域模型
当对象的行为取决于它的状态,并且必须在运行时判断状态,做对应操作时,适合使用状态模式为对象设计状态机。以领域模型为例,为领域模型增加状态位图,并提供注册合法状态签转,判断状态签转是否合法的能力。为程序运行时操作提供判断依据。示例代码://领域模型public class DomainModel extends StateGraph { /** 状态位图间隔符 */
2015-09-30 16:21:00
5868
原创 TOP K+LRU缓存刷新
本地缓存机制常被用来存储系统中变化频率不高的数据,常见的变化频率不高数据有:比如商品配置,可能商家的商品描述信息基本不变化,价格变化也不是很频繁,那可以存在缓存里减少访问数据库。又比如某类计算存在热数据,即某些问题的计算入参在短时间内频繁重,则可以把计算结果缓存起来。设计了类似LRU+TOP K的思路,针对新来的请求先查缓存,若没有实时计算,并把结果添加到缓存,之后对缓存按照请求次数和最近访问
2015-09-30 15:04:20
4173
原创 分库分表实践
1、为什么要分库分表?数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,表中的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外一个DB所能承载的数据量、数据处理能力都会成为瓶颈。2、 分库分表实施策略分库分表有垂直切分和水平切分两种1)垂直切分即将表按照功能模块、关系密切程度划分,并部署到不同的库上。例如,商
2015-09-30 11:36:37
12094
1
原创 常用java代理方法
1、jdk proxyjdk proxy是java自带的,不需要依赖其他第三方jar包。但是它只能对接口做代理。示例代码:class ServiceProxy implements InvocationHandler { /** proxy target service */ private Object target; /
2015-09-30 10:54:59
5245
原创 spring事务隔离级别和传播行为
1、spring事务隔离级别事务隔离级别描述ISOLATION_DEFAULTRead Committed,提交后可见,可避免脏读,但无法避免不可重复读和幻读IOSLATION_READ_COMMITTEDRead Committed,提交后可见,可避免脏读,但无法避免不可重复读和幻读
2015-09-30 10:40:21
5607
原创 java应用fullgc时如何排查问题
Java程序经常 FullGC 时如何解决问题?查看jvm内存使用情况,看是否存在如下特征(jvm查看工具如jmap,jhat,jprofier,zprofier等):1)年老代是否被写满2)持久代是否被写满3)System.gc()是否在应用代码中被显式调用1、如何做垃圾回收?由于不同对象的生命周期不同,JVM垃圾回收通过分代策略来便提高回收效率。Java程序
2015-09-30 08:01:49
9916
原创 本地事务使用注意事项
为了确保本地多项数据操作的一致性,需要使用本地事务,本地事务的使用有一些需要注意的点:示例代码如下:/** * 执行退款请求 * * @param request 请求参数 * @return 服务处理结果 */ private Result processRefundRequest(final Request req
2015-09-29 11:20:27
8406
1
原创 工厂模式实现仓储模版
系统内部存在多种单据时仓储层必然要实现很多XXDAO,XXDO之类的,用工厂方法将所有的数据层接口统一封装起来,可以让仓储层代码更具表达力,让使用仓储层的代码更简洁清晰。仓储服务接口,对外暴漏基本增删改查方法。public interface OrderRepository { /** * insert order * *
2015-09-29 10:44:22
4912
原创 幂等策略-尝试插入
系统对外提供的服务应该满足幂等特性,同一次请求多次处理得到的结果应该相同。介绍一种简单的幂等策略:1、请求到来时根据幂等关键字构造幂等记录,幂等关键字在数据表中应该满足唯一约束2、尝试插入幂等记录3、插入失败时,根据幂等关键字捞取记录,若已存在则将已存在记录的状态返回,若不存在则抛异常出去等待下次请求。/** * try insert idempotent
2015-09-29 09:55:30
7203
原创 java周期调度几种实现
写代码的时候有些任务需要做周期处理,例如每天9点解析文件并落地到数据库。这时候就需要选择合适的任务调度策略。以下是java里常用的几个任务调度方法:1、java.util.Timer, java.util.TimerTasktimer启动一个异步线程执行任务,周期执行任务策略对应方法scheduleAtFixedRate(TimerTask task, long delay, long
2015-09-28 21:21:35
7804
原创 统计多台服务器日志
Q:当某应用部署了多台服务器时,一次请求可能被路由到其中任意一台做处理,如何通过日志查询一次请求的处理结果?A:每台服务器都去找找总能找到吧。。。ok,思路是对的,但是人工去操作好麻烦,写个shell脚本跑一下。1、创建一个应用服务器ip列表文件prodIpList,如下 10.174.88.199 10.174.88.172、创建shell脚本chec
2015-09-28 21:19:14
8731
原创 平时用到的日志分析命令
cat -n显示行号more Enter 显示下一行Space 显示下一页F 显示下一屏B 显示上一屏tail-f 持续显示-n 显示文件最后n行head-n 显示文件开始n行sort-r 逆序排序-n 按照数字排序-k 指定派序列cut -fn -d "w" 根据w分割,选取第n列wc-l 统计行
2015-09-28 21:11:48
2666
原创 平时用到的eclipse快捷键
平时用到的eclipse快捷键,写代码再也不用鼠标啦。。。编辑Ctrl+1 快速修复(显示待修复问题的解决方案,比如import类、try catch包围等)Ctrl+Shift+F 格式化当前代码Ctrl+Shift+O 组织类的import导入(既有Ctrl+Shift+M的作用,又可以去除冗余导入)Ctrl+Y 重做(与撤销Ctrl+Z相反)Alt+/ 内容辅助(
2015-09-28 20:59:47
2772
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人