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 河北

相关推荐

07-24 09:51
已编辑
The University of Warwick 后端
0java有哪些集合,讲讲底层实现1hashmap的源码有看过吗,hashmap的put方法有哪些流程,扩容为什么是二倍而不是一或三倍2hashset为什么要重写hashcode和equals方法,如果不重写会出现什么问题3juc包下用过哪些类,说下reentrantlock的底层实现原理4线程池有没有用过,说下核心参数,tomcat线程池有了解过吗5volatile的原理是什么,可以单用volatile可以实现线程安全的逻辑吗6mysql的事务隔离级别,read view在第二第三级别的生成时机是一样的吗7索引失效的情况,用or会导致索引失效8输入一条select语句mysql的流程是什么样的,优化器了解吗9有实习过吗,说一下常用的redis的数据结构,说一下string的底层实现,sds相比于c的字符串有什么特点,创建或者释放的时候sds比c有什么优点10hash的扩容是怎么做的11redis的内存的淘汰策略12redis为什么这么快,redis6.0后面是多线程的,你有了解过13数据库和缓存一致性的问题有没有解决过,还有什么其他的解决方案吗14说下spring的ioc15jwt如何生成解析和刷新的,存在缓存对吧,考虑过token过期和篡改的问题吗16怎么解决的session的共享问题的17线程池参数是怎么配置的,任务的提交速率是什么样的,怎么避免线程池资源耗尽或者任务堆积,说一下四种限流算法,说一下每个的优缺点和适用常用场景,如果你选一个用到你的项目你会使用哪种18最长回文子串,先讲思路然后本地ide测试反问建议:面试官建议我再多看看底层,评价总体还是非常不错的当天约二面
查看19道真题和解析
点赞 评论 收藏
分享
评论
19
64
分享

创作者周榜

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