当前位置: 首页 > news >正文

【天机学堂】面试总结

写在前面,首先要将天机学堂包装一下,智慧教育平台,暂时就想到这个。天机学堂文档

1.包装简历

在这里插入图片描述

2.简单介绍一下你的项目

智慧教育平台是一个基于微服务架构的生产级在线教育项目,我们的核心用户是面向15-22岁的C端的学生和非学历职业技能培训平台。智慧教育平台是一个B2C类型(企业对消费者的电子商务模式,一般以网络零售业为主,主要借助于Internet开展在线销售活动)的教育网站,因此分为管理端和也用户端(PC网站)。用户端包括:学习中心(例如学习记录,学习计划等),个人中心(例如信息管理和登录等),交易中心(购物车,支付和退款等),管理端包括:课程管理,用户管理,交易管理,营销活动,学习管理。我主要负责的是点赞功能,用户学习模块中的学习进度管理,用户积分系统中的排行榜管理,优惠券管理。该项目技术包括:SSM+SpringBoot+Redis+MySQL+MyBatisPlus+RabbitMQ+xxl-job等。
在这里插入图片描述

3.你在开发中参与了哪些功能开发让你觉得比较有挑战性?

  • 我参与了整个学习中心的功能开发,其中有很多的学习辅助功能都很有特色。比如视频播放的进度记录。我们网站的课程是以录播视频为主,位了提供用户的学习体验,需要实现视频的续播功能。这个功能实现逻辑本身不复杂,但是我们产品提出的要求比较高:首先续播时间误差要控制在30秒以内。然后要做到用户突然断开或者切换设备,都可以继续上一次播放。要达到这个目的,我们必须把播放进度保存在服务端。其次要做到续播误差不超过30秒,那播放进度的记录频率就需要比较高。我们会在前端每隔15秒发起一次心跳请求,提交最新的播放进度,记录到服务端。这样用户下一次续播时直接读取服务端的播放进度,就可以将时间误差控制在15秒左右。
  • 现在面试官可能会追问,如果把播放数据存入到数据库,当用户量比较大时,前端每隔15秒就要提交一次请求,如果直接写入数据库,会对数据库造成的压力很大。请问你们是怎么解决的?我们当时也考虑到了这样的情况,我们思考了整个流程发现有问题没有解决。
    • 每个用户提交的播放记录数据,只有在视频关闭之前的那个提交才有效,其他的视频播放效率是无效的。
      • 解决办法:我们当时定义了一个延时任务类,将播放记录加入到延时队列里,每个任务倒计时20秒,20秒过后就会弹出,我们当时是这样想的一个逻辑,当用户在播放视频时,前端每隔15秒会提交一次请求,我们将前端提交的请求存到缓存中,然后再提交延时任务,延时任务每次出来的播放记录都会与缓存中的播放记录做一个比较,如果不相同,则播放记录在一直提交,如果相同则未提交,也就是视频暂停了。(我们使用JDK自带的DelayQueue,因为这种方案使用成本最低,而且不依赖任何第三方服务,减少了网络交互。但缺点也很明显,就是需要占用JVM内存,在数据量非常大的情况下可能会有问题。但考虑到任务存储时间比较短(只有20秒),因此也可以接收。)
    • 每个用户是同步提交的视频播放记录,所以整个播放记录的缓存业务的响应时间就是每一次数据库写业务的响应时间之和,并发能力肯定不会太好。
      • 解决办法:我们利用MQ将同步业务编程异步,我们将每个用户的播放记录先缓存到Redis中,然后定义一个定时任务,将这些数据合并写到数据库中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 繁简之争:为什么手机芯片都是 ARM
  • 【Material-UI】Autocomplete 组件的局限性(Limitations)详解
  • [最短路SPFA]--启动!!!!!
  • 微信小程序开发优惠券制作源码
  • 分享一个基于人脸识别的小区物业管理系统Spring Boot(源码、调试、LW、开题、PPT)
  • Cocos Creator2D游戏开发(10)-飞机大战(8)-计分和结束
  • Oracle的RAC集群安装和配置 NFS 共享存储(NAS共享存储)
  • pytest之fixture
  • 过期知识:thinkphp5 使用migrate给现有的数据表新增表字段
  • 爬虫数据模拟真实设备请求头User-Agent生成(fake_useragent:一个超强的Python库)
  • 【第四章】测试理论与方法 - 黑盒测试
  • 最全面的Python重点知识汇总,建议收藏!
  • 销量激增难解奇瑞焦虑:新能源短板与加班文化引争议
  • 【PyTorch】安装pytorch方法总结
  • 【C++】C++应用案例-通讯录管理系统
  • 「译」Node.js Streams 基础
  • 【EOS】Cleos基础
  • Django 博客开发教程 16 - 统计文章阅读量
  • Python连接Oracle
  • React中的“虫洞”——Context
  • SpriteKit 技巧之添加背景图片
  • underscore源码剖析之整体架构
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue.js源码(2):初探List Rendering
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 算法系列——算法入门之递归分而治之思想的实现
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 微信小程序设置上一页数据
  • 小程序 setData 学问多
  • 原生Ajax
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • #AngularJS#$sce.trustAsResourceUrl
  • #if #elif #endif
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2020)Java后端开发----(面试题和笔试题)
  • (26)4.7 字符函数和字符串函数
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (回溯) LeetCode 40. 组合总和II
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net Web窗口页属性
  • .net 发送邮件
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @NestedConfigurationProperty 注解用法
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [asp.net core]project.json(2)
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟