Skip to content

Latest commit

 

History

History
61 lines (39 loc) · 2.46 KB

5-即时通信.md

File metadata and controls

61 lines (39 loc) · 2.46 KB

Java 第五轮考核

知识点

  • 掌握Http协议和Web工作原理
  • 掌握 WebSocket 原理与实践
  • 掌握关系型或非关系型数据库的基本操作
  • 掌握消息队列的使用场景,使用方式(RabbitMQ、RocketMQ、Kafka等)

背景

众所周知,FanOne是个家喻户晓的Aquaman,她经常在社交软件上找小哥哥们聊天,以至于被多个平台封杀,请你写一个IM即时通信系统,让FanOne能聊天自由吧!

任务

在第四轮的视频网站上添加聊天室功能,和视频审核功能,并优化第四轮的Sql语句

编写一个 IM 即时通信系统 支持单聊,群聊,并且支持查找一定时间内的聊天记录

除了优化重构第四轮的模块,你还需要编写以下模块

websocket模块,联系人模块,会话模块,信息模块

  • 重构好友列表逻辑,即为联系人模块

  • 对于聊天内容,请使用Redis + Mysql的方式实现

  • 对于消息的存储,请使用消息队列异步提交

  • 会话列表,支持文字,图片交流,屏蔽功能

  • 请使用SpringSecurity的身份功能,完成视频的审核模块

  • 除此之外,本轮禁止使用mybatisPlus,请使用mybatis优化你的sql

请思考并回答以下问题

  1. 请描述比起http协议,WebSocket协议在聊天模块里都有哪些优势

  2. 使用消息队列带来的哪些好处,多角度回答

  3. 由于网络问题、生产者重试机制等原因,可能会导致同一条消息被生产者重复发送。造成聊天室出现重复的信息,该如何解决

  4. 为了保护用户被骚扰,bilibili和抖音在互相关注,或对方回复之前只允许发送一条信息,我们不需要执行这么复杂的逻辑,但请在一定程度上保护用户的权益

  5. 比起网络上的在线聊天室,我们更希望你能思考如何处理离线消息的推送

Bonus

  1. 请考虑你的聊天系统的性能(例如使用Benchmark测试)
  2. 使用netty自己实现一个websocket
  3. 考虑聊天传输的安全性(可以学习一下Telegram是如何保证传输安全性的,但是现阶段是做不到的,可以尝试做一些小的安全性优化)
  4. 敏感词功能
  5. ip获取+归属地
  6. 未读消息数

参考