跳转至

问题集

1、公司代码一堆的for循环里面执行SQL语句,怎么优化?

这个其实很简单,批量插入是有MyBatis-Plus集成好的API可以使用的,如果是有一点并发的插入数据量多的,也是可以使用 线程池来异步调用,分批插入数据,使用JDBC的executeBatch()方法(参考开源框架easyQuery),分多少批次是需要测试的,考虑到的很多 是一个数学上的问题,最后是一个泊松分布。

但是这是技术上的,当一个项目到处都是这样的代码,大家都不怎么注意去优化,怎么快实现功能即可,而你无权也没有时间搞重构代码的活, 自己要做的是什么呢?其实也不能怪同事,怪架构,项目功能排期紧,大领导又不知道啥是技术的,和合作伙伴的合同也是拖在那里迟迟不签约, 代码质量确实难好,这本就是相悖的——好的代码有一个致命缺点:花时间。

而这个问题for循环问题,是历史遗留么?它其实是举手之劳的事,但是版本代码到处都充斥着,只能说还是个人不注意吧。

2、for循环里面执行openfeign远程调用其他服务的接口,怎么优化?

只能是优化被调用接口逻辑,参数传全,不分批次传

3、for循环里面调用第三方接口,该接口会保存数据,怎么优化?

能和第三方交流改善一下接口就交流。

4、线程池执行任务

5、代码结构优化

客户 供应商 开发商

策略模式优化服务,Map+函数式接口改善

IDEA自带工具分析火焰图,查看方法执行效率

6、没法集成搜索引擎的情况下,怎么实现一个类似于淘宝搜索的搜索服务。

只能用MySQL的like来实现了,但是要好用,还要搞全文索引,倒排索引,做分词处理,还要做缓存,怎么样都是难活。

7、一个很简单的分页查询功能,进行5表联查,入参出参均涉及5张表的不同字段,其中有2张表几万数据,有两张表超过100多万,主表的数据以每天5000左右数据增长。

如何写这个功能呢?最简单的就是left join,很简单一句SQL搞定了,加一些基础索引完事。但是结果就是效率不好,SQL走的很慢(3s-4s)。 如果不走SQL,采用在内存中整理数据,内存就有一点吃不消。也可以仔细分析SQL执行计划,看看在某些条件的查询下,索引有没有失效情况。 这个功能当时不搞缓存,也就是直接走数据库。