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

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

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

🍚总结

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

相关文章
|
8月前
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
12月前
|
监控 Kubernetes Java
阿里面试:5000qps访问一个500ms的接口,如何设计线程池的核心线程数、最大线程数? 需要多少台机器?
本文由40岁老架构师尼恩撰写,针对一线互联网企业的高频面试题“如何确定系统的最佳线程数”进行系统化梳理。文章详细介绍了线程池设计的三个核心步骤:理论预估、压测验证和监控调整,并结合实际案例(5000qps、500ms响应时间、4核8G机器)给出具体参数设置建议。此外,还提供了《尼恩Java面试宝典PDF》等资源,帮助读者提升技术能力,顺利通过大厂面试。关注【技术自由圈】公众号,回复“领电子书”获取更多学习资料。
|
10月前
|
机器学习/深度学习 人工智能 JSON
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
Resume Matcher 是一款开源AI简历优化工具,通过解析简历和职位描述,提取关键词并计算文本相似性,帮助求职者优化简历内容,提升通过自动化筛选系统(ATS)的概率,增加面试机会。
1299 18
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
|
9月前
|
人工智能 算法 数据库
美团面试:LLM大模型存在哪些问题?RAG 优化有哪些方法?_
美团面试:LLM大模型存在哪些问题?RAG 优化有哪些方法?_
|
消息中间件 存储 Java
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
45岁资深架构师尼恩在其读者群中分享了关于如何提升RocketMQ顺序消费性能的高并发面试题解析。面对10W QPS的高并发场景,尼恩详细讲解了RocketMQ的调优策略,包括专用方案如增加ConsumeQueue数量、优化Topic设计等,以及通用方案如硬件配置(CPU、内存、磁盘、网络)、操作系统调优、Broker配置调整、客户端配置优化、JVM调优和监控与日志分析等方面。通过系统化的梳理,帮助读者在面试中充分展示技术实力,获得面试官的认可。相关真题及答案将收录于《尼恩Java面试宝典PDF》V175版本中,助力求职者提高架构、设计和开发水平。
招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?
|
人工智能 自然语言处理 架构师
字节面试: es怎么提升性能和精准度?(尼恩独家,史上最全)
本文由40岁老架构师尼恩撰写,针对ES(Elasticsearch)提升搜索性能和精准度的面试题进行详细解析。文章首先指出,提升ES速度和精准度是两个独立的问题,分别涉及性能优化和精准度优化。这些内容不仅有助于应对面试中的难题,还能帮助开发者在实际项目中构建更高效的搜索系统。尼恩强调,掌握这些知识后可以在面试中“吊打”面试官,轻松获得理想Offer。同时,他还提供了《尼恩Java面试宝典PDF》等资源供读者学习参考。
|
并行计算 算法 安全
面试必问的多线程优化技巧与实战
多线程编程是现代软件开发中不可或缺的一部分,特别是在处理高并发场景和优化程序性能时。作为Java开发者,掌握多线程优化技巧不仅能够提升程序的执行效率,还能在面试中脱颖而出。本文将从多线程基础、线程与进程的区别、多线程的优势出发,深入探讨如何避免死锁与竞态条件、线程间的通信机制、线程池的使用优势、线程优化算法与数据结构的选择,以及硬件加速技术。通过多个Java示例,我们将揭示这些技术的底层原理与实现方法。
850 3
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
241 20
Android经典面试题之图片Bitmap怎么做优化
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
933 37