Java项目分析-面试官会问那些问题

#我的失利项目复盘##java##java面试题##java项目##项目#
在给别人做模拟面试时,看到的项目

某某商城
某某商城为某某APP 首页核心业务之一,用户通过首页可直接接入到商城进行浏览、购物行为。商城团队历经了历次大促、活动促销的考验,我司作为合作方与某某大厂架构团队一起完成商城平台的开发建设;我作为核心开发人员参与了商城商品中台建设、库存中心、微服务改造升级、子系统接入、分库分表、拼团营销、金币抽签、合并支付等业务与架构工作。

·技术难点:库存中心

·技术挑战:商城经常做促销活动、秒杀场景, 商品瞬时进行库存扣减造成 redis 机器流量倾斜问题。 【秒杀场景需不需要单独的服务器,秒杀场景是否需要加锁;促销活动中,活动资源如何评定;】

·技术方案:实现了一个高性能,可支撑分桶多分片的库存中心,提供单库存分片不足扣减的合并库存功能,提供商品操作库存入库的渐进性入缓存的实现。【如何保证数据的一致性;分桶多分片的库存扣减完整业务/时序图】

·技术难点:数据迁移平台

·技术挑战:分库分表方案敲定,为了实现数据迁移、数据同步需要完善可靠的数据迁移系统【数据量有多大?分库分表后,如何保证数据闭环,业务是否需要修改】

·技术方案:研发数据迁移系统,包括了业务表(订单、订单详情等),迁移表、迁移配置表等。实现了全量同步滚动拉取、增量同步(基于 Cancal+MQ)防止数据丢失和高效写入方案。实现了单库到八库八表的实践。 【binlog和redolog的区别,binlog异步迁移是否存在风险,是否会造成查询过程卡顿】

社交分享平台 【刚培训结束,自己做的面试项目】
项目介绍 :社交分享电商平台旨在为用户提供分享购物心得,并可以直接购买相关商品。该项目分为管理端和用户端。

用户端核心业务有:查看附近门店、发布笔记(获取积分)、签到、点赞和收藏,以此带动用户的活跃度。还可以发放一些优惠券,促进用户消费。

管理端核心业务有:用户的笔记、评论、商品、优惠券的管理。

使用技术 SpringBoot、SpringCloud、RabbitMQ、Redis、XXL-JOB、Redisson、Mybatis-plus、分库分表等。 【接口性能主要在哪些地方消耗较大:IO】

工作职责

1、采用百度地址编码和路线规划服务,为用户和商家地址提供查找附近门店的功能。

2、采用Redis位图 ,优化用户签到功能,减少内存消耗。 

【按照每周讲解一下位图怎么使用:0000000---》0000001---->0000011】

3、采用Redis SortedSet数据结构存储用户本月积分排行,使用MySQL分表存储历史积分排行。 【积分排行持久化的作用】

4、采用XXL-JOB实现分布式任务调度,定时持久化上赛季积分排行,根据当月和历史积分排行发送优惠券。 【历史数据较多时,如何进行数据对比?】

5、开发可扩展和通用的点赞/踩模块,利用Redis Set数据结构存储用户点赞明细, SortedSet数据结构存储特定业务项的点赞总数,增加用户互动性。 【为什么要用有序集合存储点赞明细】

6、采用RabbitMQ实现消息队列,将点赞总数放入消息队列,实现系统解耦和异步处理, 提升系统响应速度。【点赞总数在什么场景下会被持久化DB层;场景如何界定】 

7、设计支持多类型配置的优惠券系统,采用策略模式选择不同类型的优惠券。

8、解决了超发和超领问题。使用JMeter工具进行压测,确保并发安全和提高用户体验和平台性能。

9、采用乐观锁思想解决优惠券超发问题,利用关系型数据库写锁排他性保证并发安全。 【如何不使用锁解决超发问题?】

10、采用Redisson分布式锁解决优惠券超领问题,结合SPEL表达式、工厂模式、策略模式和AOP思想,封装自定义分布式锁注解。

个人成就

1、查询点赞状态使用 ,从单命令执行,改为RedisTemplate 的 executePipelined 方法进行批量处理,优化系统响应时间( 40s->100ms)。 

2、多线程优化大批量数据插入速度:由于cdk的生成需要将这批码插入数据库中保存,当创建十万条cdk记录时,耗时达到了十几秒。使用@Async+自定义线程池的方式,异步生成cdk,优化后执行耗时2.5秒,执行时间缩短了6倍。 【批量插入的数据是否会受到间隙锁的影响;数据在插入过程中,如何避免/减少页分裂/页合并的产生/受到间隙锁的影响】

3 、基于Redis异步领券响应速度:在兌换资格校验的时候,或者领券资格校验的时候,会有多次与Redis的交互,每一次交互都需要发起一次网络请求。在并发较高的情况下导致网络拥堵,导致业务变慢。通过编写LUA脚本,在脚本中编写复杂业务判断,通过一次请求,完成对脚本的调用。提高接口响应速度。
全部评论
学完就是自己的哈哈
点赞 回复 分享
发布于 2024-09-15 19:06 河北

相关推荐

不愿透露姓名的神秘牛友
06-25 17:22
有无友友推荐Java 好的项目的知识星球呀  打广告的不要来
程序员小白条:你本质上还是跟做的话,加任何星球都没啥用,主要还是能够自己在项目上拓展,所以最好是全栈
点赞 评论 收藏
分享
1.自从上次实习发布之后就再没发过动态了,主要是秋招经历太难搞了,一整个人麻了,不过还是要感谢实习经历,因为有两段找实习的经历,所以才会有现在最终的互联网offer。趁着现在在动车上闲着,写点反馈牛油们!加油!2.小结就是:合理评估自己找实习或者校招成功与否的原因,自身原因占比与运气成分占比。3.之所以秋招能坚持下来是因为第一段实习的经历,当时由于没有一个合理的判断加上没有坚定自己的想法导致没有去到互联网实习,这也给后续互联网之路埋下了一个很大的隐患。从有机会打牌到进入互联网需要好运相伴。4.从秋招到春招,首先第一个一定不要不想投,该投的都要投,不管是国企还是互联网,有时间都去面试,这不仅可以积累很多经验(虽然三五次面试之后,这些经验的作用就不一定大了,但是可以让你保持手感口感hh)。其次就是,有句话说得好,有心摘花花不开,无心插柳柳成荫。这在秋招阶段是很常见的,但是需要你猛猛投简历,这句话在我身边很多同学上都应验了,而且都是去的很好的单位。5.国企面试,对于国企面试来说,第一第二次的体验很重要,因为我们去面体制内的劣势在于不熟悉面试流程,刚开始嘴笨放不开,所以第一次第二次就是给你体验的,最好是那些你不想去的国企用来练兵升级。我第一次就去的一个省级挺不错的国企的,由于第一次毫无疑问挂了。如果是后续让我面,我有信心可以过的。因为后续的国企,只要是不是招聘个位数的,我都表现的游刃有余了,只不过时间太晚了,醒的太晚了呜呜呜。6.互联网岗位投递,互联网面试真的需要天时地利人和。这个岗位有hc,这个岗位目前还没有待定的候选人,你刚好遇上这个岗位并且处于流程初阶段。大多数情况下,很多人面到三面挂,并不是因为你实力不行,只不过你的流程比别人晚了一些,这个岗位已经有候选人了。所以到你这只能是流程结束了。7.互联网面试,面试主要就是手撕,八股,实习和项目。如果你的实习经历比较丰富或者面试官比较感兴趣,基本上就是手撕加实习项目,最多加一些八股随意问问。在这里面,需要的就是每天刷刷题保持手感是很重要的,我就是断断续续,导致有时候手撕忘记了所以没及时接收面试导致第六点的失败。然后就是实习或者项目,亮点很重要,超级重要,你和别人的区别就是这个亮点的区别。最后,加油,祝好!希望每一个努力的人都能找到自己心仪的工作。找工作不难,难的是自己的心态控制,塞翁失马,焉知非福。后续也许有时间再慢慢更新具体的面试吧·
点赞 评论 收藏
分享
评论
19
64
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务