对于项目的困惑

一直在做项目,整体的技术栈还是Spring这一套,各种中间件的话也就是普通的redis,ES,MQ这些,但是问题是平常这些东西的运维,docker脚本编写啥的也都有运维团队去负责,自己对于底层也是一知半解。整体上还是忙于业务交付,那现在就是面试总会这样问到:那讲讲你项目中做的比较好的地方,我自己回答的总感觉面试官对我的回答不感兴趣,麻烦大家给些建议。

总体是分这几个方面

    1.介绍我们的需求,就是将一个比较大的原始数据入库然后根据业务需求进行计算,得到一个数据的过程,最后根据这个数据会做展示。

 2.介绍遇到的问题:我们遇到的问题有三个:第一个是几百万将近千万级别的csv导入入库会非常慢,几百万的数据入库偶现卡死,第二个问题是百万级别的数据我们做处理的时候遇到OOM问题,第三个就是整体的效率优化。

    对于第一个问题我们使用的是PG数据库,最开始我们使用的是读取入库的操作,然后批插入的方法,后面采用了pg的copy from命令,直接将数据映射进数据库,这个节省了大约。。。时间。

第二个问题就是我们的服务器的4c8t的一个服务器,8G内存,当数据过大7 8g的时候会oom。我们的做法是拿到dump文件,然后去分析整个的内存占用,会看到具体的内存哪个对象的占用过大,然后我们具体分析,比如过String+= 操作为stringbuffer,在for循环里面将不用的对象==null等操作,最后采用生产消费者线程,多个生产者多个消费者维护一个查询的对象的数据在合理的范围内就可以。

第三个问题整体的效率优化我们就是加了缓存,对于一些计算比较大的数据先查缓存有没有,再就是优化数据库的表,一个是对于数据量大的表我们使用中间件进行分表操作,把一个一千万的数据分为三个几百万的,优化查询性能,优化索引。

基本上就三个方向,但是感觉面试总体不是很理想,所有想知道是哪里的问题,是不够细节?说的太宽泛 还是不够突出,里面也有很多大佬面试经验很丰富 求建议。

2024/2/29更新 

以前的问题是对于一个问题没有追根到底的,所以导致问题处理事浮于表面的,现在就是基于jvm的优化详细说,好了不少。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值