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

相关推荐

09-22 20:49
武汉大学 Java
1. 电商商品详情页的进程内本地缓存,应用什么数据结构实现?命中率如何?2. Caffeine、Guava 等本地缓存与 Java 普通哈希方法的区别是什么?3. ConcurrentHashMap 实现缓存的时间复杂度是多少?如何做到的?4. 单机场景下,商户商品持续增加导致缓存不停 put 键,数组可能不够用,该如何解决?5. 实现 LRU 淘汰策略后,查询、淘汰操作的时间复杂度是多少?6. LRU 实现中,查询时会修改链表,如何保证并发安全?7. 并发安全解决中提到的异步操作,具体步骤是什么?8. 用线程池或多线程扫描缓存淘汰数据,会为系统带来多少额外开销?有其他更好的方法吗?9. 将本地缓存扩展为 Redis 集群后,如何确定某个 key 存储在哪个机器上?10. 面对大量商户及产品描述,如何快速查询某关键词出现在哪些商品中?11. Elasticsearch 构建倒排索引时,文档和分词数量多导致内存占用大,有哪些节省空间、提高性能的办法?12. Redis 为何能表现出高性能?其网络 IO 瓶颈指什么?13. Redis 引入多线程主要解决哪块的问题?14. 从 Redis 视角,接收“get key”请求时,网络及操作系统层面的处理过程是怎样的?15. 如何设计商户点评排行榜,支持评分实时更新并快速查询前5名商家?16. Redis 的 zset 中删除并重新插入数据的时间复杂度是多少?17. 实现全排列的核心方法思路是什么?
查看17道真题和解析
点赞 评论 收藏
分享
评论
20
64
分享

创作者周榜

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