面试官偷偷告诉我:原来这样优化提升接口的性能

简介: 面试官偷偷告诉我:原来这样优化提升接口的性能

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云星级博主

📌 擅长领域:全栈工程师、爬虫、ACM算法

💒 公众号:知识浅谈

🔥 联系方式vx:zsqtcc

🤞面试官偷偷告诉我:如何优化提升接口的性能🤞

正菜来了⛳⛳⛳

🎈索引优化

  1. 这个接口对应的sql是否加了索引
  2. 这个接口对应的sql加的索引是否生效
  3. 这个接口对应的sql是否选错了索引
  • 使用explain进行分析
explain select * from `table1` where id=1;

🎈sql语句改进

  • 避免使用 select * ,因为网络IO和文件IO以及回表的原因
  • 小表驱动大表
  • 批量操作,foeach的多条语句换成Batch处理,
  • limit分页查询,避免查询过多数据
  • 连接查询代替子查询
  • 尽量使用索引

🎈接口中业务并行执行

如需要查询用户信息,积分信息,成长值信息

在原来串行的基础上改为并行执行,可以使用多线程的方式执行。

🎈数据缓存优化

对于缓存,我们可以使用多级缓存。

  1. 客户端缓存:使用浏览器缓存css,js,图片等静态资源
  2. 负载均衡缓存/CDN缓存:基于Nginx的负载均衡节点处进行缓存。
  3. 进程内缓存:如springmvc的缓存,mybatis的一二级缓存,可以使用Encache,cafein这些工具。
  4. 分布式缓存:如redis缓存。

🎈禁止重复调用

  1. 重复调用mysql
    Eg:
    searchList.forEach(user -> result.add(userMapper.getUserById(user.getId())));
    业务层使用for循环与mysql数据库频繁交互。
    改进:可以对语句及进行优化,把id的集合放到一起,然后查询优化。
  2. 重复调用缓存
    和mysql一样进行优化即可。
  3. 禁止使用while(true) 和 递归 ,在某些场景下就可能出现死循环的问题。

🎈异步优化

  1. 使用阻塞/消息队列
  2. 使用线程池

🎈锁的粒度优化

public void test(String a1,String b1,String c1) {
    synchronized(this) {
          sout(a1); 
          sout(b1); 
        sout(c1); 
    }
}

优化后

public void test(String a1,String b1,String c1) {
    synchronized(this) {
          sout(a1); 
    }
    sout(b1); 
    sout(c1); 
}

🎈分库分表

当用户数量逐渐变多的时候,数据表里存储的数据也越来越多,单表或者单库有可能存不下。由于数据量太大,sql语句查询数据时,就算是走了索引也会非常耗时就需要分库分表处理了。

🍚总结

上边也是我整理的一些优化的方法,不行了肝不动了,休息了休息了。

相关文章
|
7天前
|
SQL 分布式计算 监控
Sqoop数据迁移工具使用与优化技巧:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入解析Sqoop的使用、优化及面试策略。内容涵盖Sqoop基础,包括安装配置、命令行操作、与Hadoop生态集成和连接器配置。讨论数据迁移优化技巧,如数据切分、压缩编码、转换过滤及性能监控。此外,还涉及面试中对Sqoop与其他ETL工具的对比、实际项目挑战及未来发展趋势的讨论。通过代码示例展示了从MySQL到HDFS的数据迁移。本文旨在帮助读者在面试中展现Sqoop技术实力。
22 2
|
2月前
|
SQL 存储 数据库
面试题19: 如何优化SQL查询?
面试题19: 如何优化SQL查询?
面试题19: 如何优化SQL查询?
|
2月前
|
缓存 数据库 索引
面试题17: 数据库优化
面试题17: 数据库优化
|
4月前
|
算法 安全 索引
【面试小知识】Collection(接口)集合
【面试小知识】Collection(接口)集合
|
5月前
|
算法
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
单链表(算法面试题2)---单链表进阶2 一题多解,逐步优化
28 0
|
11天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
33 0
|
4月前
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
18 0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
|
29天前
|
缓存 算法 编译器
【C/C++ 泡沫精选面试题01】提高c++性能,你用过哪些方式去提升?
【C/C++ 泡沫精选面试题01】提高c++性能,你用过哪些方式去提升?
35 1
|
5月前
|
Arthas 监控 算法
JVM调优篇:探索Java性能优化的必备种子面试题
本文将带你深入了解JVM调优的重要性、常见问题以及一些实用的调优工具和方法,助你在面试的过程中轻松应对
131 0
JVM调优篇:探索Java性能优化的必备种子面试题
|
2月前
|
SQL 关系型数据库 MySQL