java后端面试回答

问题一:商品推荐列表城市动态变化

增加人员与查询城市关系表,存储:主键,用户ID、访问城市ID、访问时间。

用户登录页面时。通过这张表的用户id按照时间顺序查询相应的城市热销产品,同时返回到页面,通过页面显示。

用户查询城市商品信息时,查询此表数据,如果没有这个城市id,新增入此表,如果已存在与表中,刷新这个城市访问时间。

这张表使用定时任务每天随机访问数据,超过两个月没有访问的记录即可删除。

问题二:线上秒杀削峰访问

使用微服务将秒杀部分独立出来,秒杀模块如果宕机不会影响整体系统的使用。
使用redis创建一个对象 key为access_token ,value初始值为1000作为令牌数量。

每次访问秒杀程序时,首先增加正常访问用户验证,比如滑动模块或者文字校验。对正常用户进行分流。通过访问验证的用户,先查询redis中的access_token 的值是否大于0,如果大于零access_token 自减1,代表令牌消耗一个,用户session增加令牌标识,可以继续付款流程。如果access_token 为0代表令牌已消耗完毕,阻止访问,返回信息空。

设置access_token 字段每秒刷新一次,刷新为初始值1000,控制每秒至多只有一千的并发量。秒杀成功的用户信息,将秒杀商品相关的字段存入消息队列,成功入队的返回给用户秒杀成功等待发货中。付款流程和发货流程使用多线程去消费消息队列中的信息。消费完的用户显示付款成功已出货。

问题三:防止刷单和恶意注水

考虑到用户数量较多使用一个新的redis缓存,用户下单或者访问需要防止恶意注水的接口前,在redis中存入key为Mac地址value为list的对象。list存入当前访问时间,访问次数,是否能访问。如果对象已存在使用当前时间与缓存中的时间比对,如果间隔不超过五秒,访问次数加一,超过五秒则不做修改。如果访问次数超过五次将能否访问的标识修改为不能访问,并设置五分钟过期。页面提示请五分钟以后再付款或者评论。下一次该用户登录或者评论时需要进行真人验证,比如图案或者滑动验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值