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

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

🍁 作者:知识浅谈,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语句查询数据时,就算是走了索引也会非常耗时就需要分库分表处理了。

🍚总结

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

相关文章
|
3月前
|
Java
【Java基础面试三十四】、接口中可以有构造函数吗?
这篇文章讨论了Java中接口不能包含构造函数的原因,主要解释了接口中的成员变量默认是public static final类型的常量,不需要通过构造函数初始化,且接口本身不能被实例化,因此构造函数在接口中没有意义。
|
2月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
64 20
Android经典面试题之图片Bitmap怎么做优化
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
405 37
|
2月前
|
SQL 关系型数据库 MySQL
面试官:limit 100w,10为什么慢?如何优化?
面试官:limit 100w,10为什么慢?如何优化?
190 2
面试官:limit 100w,10为什么慢?如何优化?
|
3月前
|
Java
【Java基础面试三十八】、请介绍Java的异常接口
这篇文章介绍了Java的异常体系结构,主要讲述了Throwable作为异常的顶层父类,以及其子类Error和Exception的区别和处理方式。
【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?
serialVersionUID用于标识类的序列化版本,确保在反序列化时类的版本一致性,避免因类定义变更导致的不兼容问题。
|
3月前
|
Java
【Java基础面试三十五】、谈谈你对面向接口编程的理解
这篇文章讨论了面向接口编程的概念,强调接口作为一种规范和实现分离的设计哲学,可以降低程序模块间的耦合度,提高系统的可扩展性和可维护性。
|
3月前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
3月前
|
SQL 安全 测试技术
[go 面试] 接口测试的方法与技巧
[go 面试] 接口测试的方法与技巧
|
3月前
|
存储 前端开发 JavaScript
面试时让你手写一个防抖和节流优化,你能写出来吗?(二)
面试时让你手写一个防抖和节流优化,你能写出来吗?(二)