- 博客(17)
- 资源 (12)
- 收藏
- 关注
原创 浅谈优惠券系统设计
一.概述利用闲暇时间总结下优惠券系统的一些业务与技术方案的设计及其注意事项。从业务与技术角度构建一个安全的高可用的优惠券系统我们的目标:安全,可扩展,高可用二.优惠券业务架构优惠券的种类:满减券:如满100-10,满2件减10元 折扣券:如满100打9折优惠券相关概念:规则定义:涉及计算的部分,作用范围:商品、商户、类目,计算方式:是否累加,是否互斥等 优惠券定义、模板:发放有效期,使用有效期,使...
2018-03-09 10:51:54 21712 3
原创 多个事务并发执行update出现的数据库死锁问题排除
现象:死锁,时间:2017-08-3100:00:00.841,故障解决:按最小代价自行回滚事由:退优惠券,并发执行update语句.死锁日志(详细): Expand source** (1) TRANSACTION:TRANSACTION 6648945293, ACTIVE 0 sec starting index readmysql tables in use 3, locked 3LOCK...
2018-03-09 10:40:33 8416
原创 预防变更数据库导致缓存不一致问题
预防变更数据库导致缓存不一致问题坑重现:在做一个数据库结构变更时,表tableA增加了一个字段columnA,原先的缓存与当前缓存实体的结构不一致事件还原:优惠券模板表spec实体类specDO有属性值fileldA,fileldB等若干字段,则缓存中的实体cachedSpecDO中也有这些属性,缓存过期时间为1小时。新需求过来需要增加一个字段app_show字段,并且不为空,有这样一
2018-03-09 10:38:11 508
原创 选择性的暴露业务字段
为了安全,在不影响交互的情况下,在一些查询接口的返回值中应该选择性的将某些敏感字段屏蔽,防止用户伪造请求在开发中,遇到几个场景:1.在其他查询券详情的时候如果模板id暴露出去,而领券接口需要接受的参数是券模板id,这时候用户就可以变更券模板id领取其他券了。2.查询用户账户的优惠券列表,返回优惠券code值,在下单页,用户可以伪造请求,传入该code,计算接口未做进一步的校
2017-09-28 17:26:55 656
原创 快速计算两个List的不同元素
public class ListUtil { /** * 利用map计算两个list的不同元素 * 时间复杂度2(n+m) * 如果long List在前,map#get次数较多,影响性能 * * @param longList 长度大的列表 * @param shortList 长度小的列表 * @param T>
2017-09-28 13:53:00 459
原创 集群中使用session的注意事项
目前项目都会用集群环境来部署,相比日访问量低传统网站,集群环境在一些技术上多了些注意事项。针对本次促销中心新后台中就遇到session一致性的问题。开发一个具有访问控制的服务端,我们需要登陆验证,而相比那些直接提供登陆界面的应用来说,目前大部分公司往往采用sso登陆方式,即单点登陆。而从单点登陆系统登陆之后客户端会拿到一个具有登陆信息的cookie,往往是加密的。而需要知道登陆信息
2017-04-05 18:09:11 1165
原创 编码中关于mysql DateTime类型字段的注意事项
在编码过程中,经常需要对时间类型为DateTime的字段进行时间先后的校验,比如校验开始时间是否在当前时间之前,可能出现当前时间小于之前插入数据库中的值,比如某些业务下单的时候,调用发券接口,拿到发券接口返回的code,然后进行调用下单接口,最后的结果是一半用户成功下单,一半用户下单失败。对于这种“一半一半”的现象出现的原因主要是因为数据库时间类型选择DateTim
2017-04-05 18:06:51 406
原创 关于AOP无法切入同类调用方法的问题
我们知道缓存方法的调用是通过springaop切入的调用的。在一个类调用另一个类中的方法可以直接的简单调用,但是如果在同一个类中调用自己已经通过spring托管的类中的方法该如何实现呢?先来段代码:public List getSkuIdsBySpuId(long spuId) { ItemComposite itemComposite = this.getItemComposi
2017-04-05 18:00:51 1687
原创 关于spring mvc拦截器拦截js文件等导致无法正常使用问题的解决
在用spring mvc提供的拦截器做登录拦截的时候,我们经常需要编写自定义的登录拦截器,经常会发现拦截器无法使用或者是exclude-mapping无法起作用,总是被拦截,其原因主要是由于静态资源文件被拦截的原因,chrome浏览器中按f12,在network会发现js文件或者css文件等报红色的情况,这个时候虽然在spring-servlet里面配置了类似下面的资源mvc:intercep
2016-01-11 11:15:22 8121
转载 struts2--文件上传和uploadFile拦截器
单文件上传1. 通过HTML表单上传文件时, 需要将表单的enctype属性设置为multipart/form-data, method属性设置为post. jsp页面代码:Html代码 form action="${pageContext.request.contextPath}/upload/uploadAction_saveFile.action
2013-08-20 16:22:14 635
原创 用ajax技术读取数据库内容实现二级联动下拉选择菜单
—————————————————————这是ajax(javascript)代码———————————————————————————function send_request(callback, urladdress, isReturnData){ var xmlhttp = getXMLHttpRequest(); xmlhttp.onread
2013-07-26 17:24:26 1498
原创 javax.servlet.ServletException: Servlet execution threw an exception
Servlet.service() for servlet [action] in context with path...javax.servlet.ServletException: Servlet execution threw an exception..的解决办法:在web.xml中注释掉过滤器即可。
2013-04-10 22:36:43 995
原创 ClassCastException: $Proxy0 cannot be cast to (com......) 的解决办法
Spring的AOP代理时出现的ClassCastException: $Proxy0 cannot be cast to (com......) 的解决办法这是我的测试文件代码,EmployeeService类实现了EmployeeServiceInter的接口,一下这段代码是创建的EmployeeService对象,结果报错。public class MyTest { /**
2013-04-09 09:33:37 1210
转载 antlr.collections.AST.getLine()I异常
坑爹啊,弄了一下午,以为是代码问题呢!在网上搜了之后原来是这个原因,记下来以备后用!我用的myeclipse8.6, E:\Program Files (x86)\MyEclipse 8.6,SSH组合完成后,执行hibernate的HQL查询时,报错:java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
2013-03-27 16:54:03 919
转载 struts标签之bean:write用法
首先要想使用struts的标签库,则必须在jsp中指定所使用的标签库地uri,即标签库的标准。引入方法如下: 接下来就可使用该标签库中的标签了,前缀是bean。我们这篇文章主要介绍write标签,bean:write相当于 其中something是属性的名字。下面bean:write的详细介绍如下:bean:write常用的属性有如下几个:1。name,用来指定属性的名字2
2013-03-16 22:47:53 717
android反编译软件
2013-01-07
3G网络与4G网络之我见
2012-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人