03776,专注php入门案例

 找回密码
 免费注册

QQ登录

只需一步,快速开始

搜索
热搜: 验证码
查看: 2765|回复: 0

化妆品电商聚美优品的PHP面试题 - PHP高级开发职位必做

[复制链接]

61

主题

0

好友

317

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2012-11-27 19:05:30 |显示全部楼层
化妆品电商聚美优品的PHP面试题 ,据说是设计选做,高级开发职位必做。

考题如下:
假设我们需要做一个用户金币系统。用户每天第一次登录可以获得1个金币,用户下单购买东西后会获得20个金币。但是这两种金币有不同的性质。对于登录获得的金币(简记为类型A),用户获得之后就可以消费——例如可以用金币买东西。对于下单购买获得的金币(简记为类型B),有一个月的冻结期。在冻结期内类型B的金币不能被消费,如果冻结期内用户发生了退货,则这些类型B的金币会被回收,将来也不让给用户消费。

请设计一个系统(数据库结构和逻辑流程),满足以下要求:
1、  用户可以正确的获得上述类型金币
2、用户随时可以知道自己有多少金币可以消费,有多少金币被冻结
3、被冻结的金币在冻结期后成为可以消费的金币
4、用户可以消费自己的可用的金币

只需要设计一种可行方案,描述数据库结构和逻辑算法:
1、发放A金币、发放B金币
2、获取当前有多少可用金币、消费可用金币、获取当前有冻结金币的冻结情况、冻结金币转为可用金币、回收冻结金币

供参考的回答:

1、这里先说说只用一个表的操作方法,这里只考虑满足上面的需求,不考虑优化神马的,如下:
金币表记录表
id          自增
uid        用户uid
coin        金币数
dateline    金币发放时间
type        金币类型 a|b
status    -2: 已回收;-1:已消费;0:冻结期;1:可用;
操作逻辑:
1、发放:插入记录,区分type;
2、
    a. 根据uid , sum计算:status=1  为可用金币 、type=b and status=1 为消费可用金币;
    b. 根据uid, 筛选status=0的记录,  再拿发放时间和当前时间对比,确定金币冻结情况;
    c. 冻结金币转为可用:更新该金币记录status=1;
    d. 回收冻结金币:更新status=-1 (或者直接删除)

欢迎完善。实际中可能需要把可用和不可用的总数更新到用户资料表里,方便读取用户信息时直接得到总数。




李小龙:“I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times.”
(我不怕遇到练习过10000种腿法的对手,但害怕遇到只将一种腿法练习10000次的强敌。)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

手机版|在博客与论坛间短暂徘徊ing……

GMT+8, 2017-11-24 02:45 , Processed in 0.056747 second(s), 26 queries .

强劲动力 Discuz! X3.0 Beta

© 2012-2115 03776.CN

回顶部