请设计并实现一个简易微博系统,让用户可以发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近15条推文,并实现“热门微博”功能。具体要求如下:
1)发送推文功能(15分):实现postContent(userId: int, contentId: int) -> None接口,根据给定userId和contentId,创建一条微博内容,注意contentId全局唯一。
2)关注/取消关注(15分):实现follow(followerId: int, followeeId: int) -> None接口,让followerId关注followeeId;同理,实现unfollow(followerId: int, followeeId: int) -> None接口,取消followerId对followeeId的关注。
3)主Feed信息流功能(20分):实现getFeed(userId: int) -> List[int]接口,检索当前用户新闻推送中最近15条推文的ID 。新闻推送中的每一项都必须是由用户关注的人或者是用户自己发布的推文。推文按照时间顺序由最近到最远排序。
4)点赞和取消(10分):实现like(userId:int,contentId:int)->Integer点赞功能,注意该操作的原子性和幂等性,返回当前的点赞数量。并实现取消点赞unLike。
5)热门微博功能(15分):实现getHotContents() -> List[int]接口,检索微博系统中所有微博内容,返回当日访问量最高的前15条微博内容ID。请注意检索性能,考虑性能优化者,额外奖励5分。
6) 推文更新机制(20):假定每个用户可以存储的推文数量是有限的,最大为100,请用 LRU 实现用户推文的更新淘汰策略。
7)服务化(15分):请将上述所有接口进行服务化,遵循RESTful协议,并提供shell脚本启动服务。
答题要求:
1、独立完成。
2、从Java/Python/C++中选择自己熟悉的语言进行作答,其中:
Java,建议OpenJDK1.8及以上版本
Python,建议3.6及以上版本
C++,建议11及以上版本
3、各语言在变量函数命名及代码风格等方面,均需遵循各自的编码规范(建议参考谷歌关于各个语言的编码规范),逻辑清晰,功能拆分合理。
4、选择合适的编程框架实现本系统。包括但不限于:
Java,SpringBoot,MyBatis等
Python,Flask/Django,sqlalchemy等
5、程序可运行,可测试。