剑指BAT

手把手带你项目实战《迷你微信红包》秒杀一线企业

2018-01-02  本文已影响80人  batbattle

项目在当下校招面试中越来越受面试官的喜爱了,俗话说:“是骡子是马拉出来溜溜就知道了”,你到底学了哪些知识,深度如何,解决过什么问题,收获是什么,通过一个项目就说明一切了。

可是,

有木有感觉学了很多知识,可都是一盘散沙?

有木有好奇在企业是如何从立项到上线发布的?

有木有羡慕别人有丰富的项目经验,而自己只能裸装上阵面试?

有木有觉得自己做的其实只是课后作业,而一直想从零参与并开发完成一个完整项目?

一个较完整且有含金量的项目在面试一线企业过程中具有很大优势。由于核心功能流程和技术实现都游刃有余,通过做项目遇到问题并最终决解问题,从而获得质的成长。一个好的项目好比打仗(面试)时的一座城墙,事先准备好自己的武器,把面试官“引进城里”,在你的适当引导下,把你所学、所得、所思考的知识一一展示出来。

好吧,来这里。给你想要的一切!

除了一个完整的企业级别项目实战,还收买了身边众多好友和优秀结业学员,帮助大家完成国内30多家知名企业招聘内推,免笔试,直接进入面试环节,剑指Offer!梦想不先人一步,谁人分得一杯羹?

加入一线一企业,成就更好的自己!剑指BAT,为你铺路


项目一:

名称:迷你微信红包

功能:注册、登陆、添加好友/群、收发红包、红包过期自动退还、离线消息持久化、消息确认;

扩展功能:支持表情、语音、视频等富媒体聊天。

技术难点:千万级别好友、群关系的数据库(表)设计;百万级别高并发设计与实现;消息订阅与发布;单聊、群聊;应用层消息确认机制实现;亿级别数量里寻找下一秒需过期红包;

核心技术:加密算法(RSA/MD5/DES/ECC)、多线程编程及同步机制(读写锁/CAS)、IO复用函数、零拷贝;MySQL、红包随机算法、红包过期处理算法、应用层亿级别消息确认机制;


功能分析

登陆注册

好友管理

用户管理 : 见下文注册登陆

注册一个用户、查找好友、添加好友、删除好友;

群管理

创建群、群搜索(根据群号找到一个群)、邀请人、剔除人/主动退出、解散群(删除群);

发红包

定向红包(一对一)、群(一个或多个)红包( 随机(尽量均分, 统计最佳手气);

拆红包

同一个红包用户只能领取一次、24小时过期判断;

红包管理

超时未领取;

查看红包历史记录(包括发出去和拆到的);

消息类型

普通文本(文字、特殊字符、红包信息)、图片、语音/视频;


设计分析

||客户端||

登陆与注册

用户名与密码

        用户名校验

        用户名格式 : 正则表达式

        密码强度判断

        纯数字: 正则

        数字和字母组合 : 正则

        数字和大小写字面组合 : 正则

        验证码

        随机数 : 略 图片 : 数值运算 : 略 短信验证 : 略 拖动验证 : 略

    加密

    加密: Https (TLS SSL) ?

    实现: HTTP GET + POST

    备注 : HTTP : GET POST PUT DELTE

其他功能和交互设计,暂略。


||服务器||

登陆与注册

用户名与密码 

用户名校验

用户名格式 : 正则表达式 重名检查 : 检查

密码强度判断

纯数字: 正则

数字和字母组合 : 正则

数字和大小写字面组合 : 正则

验证码

随机数 : 略 图片 : 数值运算 : 略 短信验证 : 略 拖动验证 : 略

注册

用户名检验(格式, 是否存在等)

密码强度判断

校验码验证

保存注册用户数据(数据库, 用户名, 密码, 创建时间等等)

登陆

用户名 + 密码验证(格式, 是否存在等)

校验码验证

微信红包

关键属性 : 用户名, 密码, 余额, 好友列表, 群列表, 红包列表(已发, 已收), 消息列表

红包管理

创建一个红包 : 未领取金额队列, 已领取金额队列, 创建时间, 有效时间

超时未领取 : 当前时间超过过期时间(创建时间+有效时间), 余额返回给用户

群红包

创建群: 群成员列表, 群主, 消息列表地址

拉群 : 把好友加到一个群里面

加群 : 群主审核(可选), 根据群号搜索到群, 发送加群请求给群主, 审核, 过/不过

退群 : 更新用户和群的对应列表

被踢 : 群主发送要删除用户, 更新用户和群的对应列表

群发 :

随机 : 根据总金额和个数随机分配每个红包; 一分钱下限, 红包算法(公平!!!!)

发红包: 从用户余额扣除, 创建红包; 分红包: 计算红包为领取金额列表: [0 - M/N * 2] : M 剩余金额; N 剩余红包个数(数学证明) 抢红包: 打乱顺序放到红包队列, 先到先服务, 前 N 个从红包金额列表 依次取金额, 加入对应用户的余额中, 将该金额加入红包的已领取 队列, 后续没有抢到用户返回 统一消息(优化点)

注意点: 参加单用户只能领取一个红包

超时未领取 : 当前时间超过过期时间(创建时间+有效时间), 余额返回给用户

定额分配 : M/N 见上(优化点, 缓存)

定向红包

一对一发 : 定额

发红包: 从用户余额扣除, 创建红包; 收红包: 如果好友收红包, 好友余额加指定金额 超时未领取 : 当前时间超过过期时间(创建时间+有效时间), 余额返回给用户

超时未领取精确时间返回给用户? 排序队列+线程池 (用户检查过期时间, 给服务器发消息, 服务器 epoll 监听)

群搜索功能 : 遍历群列表(少 HashMap, 分布式存储), (优化点)。

其他功能模块设计请参考,点击我撒

上一篇下一篇

猜你喜欢

热点阅读