大家好,我是冰川~ ~
随着互联网在高速,的发展,互联网行业已经从信息时代逐渐进入数据传输时代。对Java程序员的要求越来越高,但仅仅掌握CRUD还不足以胜任互联网公司的相关岗位,大量招聘岗位表明,如果是面试高级Java岗位,基本上需要了解绩效优化的相关知识今天,我们来谈谈如何执行绩效优化
如果你的朋友觉得文章不错,喜欢,收藏,评论,分享,一起去,记得给冰川一键三连~ ~
好了,让我们开始今天的课文。
在这里,我根据我平时工作的总结,把优化的表现总结如下图。
也就是说,我们可以从数据方面回答聚合优化,资源冲突优化,算法优化, JVM优化,复用优化,计算优化和快速实现。接下来,我们将解释每一点。
数据聚合优化主要是针对优化的数据整合和传输。例如,我们从数据库中查询的数据将通过程序的聚合处理返回给客户端,而不是客户端调用多个接口分别获取数据。
再比如:我们在项目中使用的Nginx通常开启GZIP压缩,使得传输的数据更加紧凑,同时也使得传输的数据量更小。
细心的朋友会发现,我们的优化数据聚合主要是让传输的数据量变小。因此,当我们使用SQL语句查询数据库中的数据时,我们尽量查询必填字段,不需要的字段直接忽略,以避免在SQL语句中出现select *
在我们的日常工作中,尤其是在高并发场景中,经常会发生锁冲突,这是一种典型的资源冲突场景。
关于锁可以与行锁、表锁、同步锁和Java锁等相关联。如果它对应于系统操作级别,那么在中央处理器命令级别会有一个锁,在JVM指令级别会有一个锁,在系统操作级别会有一个内部锁
在这里,朋友们需要注意一点:只有在并发场景下,才会出现资源冲突。也就是说,同时只有一个请求可以得到被请求的资源,解决冲突的办法就是锁定。
我们需要在日常工作中避免锁冲突的问题。请参考关于如何锁定优化优化的文章《【高并发】面试官:讲讲高并发场景下如何优化加锁方式?》
在大型,的一个互联网项目中,经常涉及分布式和微技术,其中也使用了大量的数据结构和算法。算法的优化可以显著提高系统性能。与差的实现相比,好的实现在改善系统的性能方面有很大的不同
比如作为List的实现,LinkedList和ArrayList在随机访问性能上差几个数量级;比如CopyOnWriteList采用写时复制的方法,在读多写少的场景下可以显著减少锁冲突。什么时候使用同步,什么时候线程安全,对我们的编码能力也有更高的要求。
因此,我们需要在日常工作中积累更多关于数据结构和算法的知识。
不用说,JVM调优是每个Java工程师必须掌握的标准技能。所有的Java程序最终都在JVM中运行,JVM的优化也可以提高Java程序的性能。但是需要注意的是,如果在优化JVM中参数设置不当,可能会导致内存溢出等严重问题。
目前广泛使用的垃圾回收是G1,配置CMS垃圾回收的参数很少就能高效内存回收已经从Java 14中移除,其GC时间不可控,如果可能应该避免。
重用优化,你可以通过名字知道,说白了就是可以重用。估计很多小伙伴都有这样的经历。在编写代码时,他们可以将大量重复的代码抽象出来,做成常用的方法。这样就不用每次都写重复的逻辑代码了。这是代码级重用。
如果是数据级,我们可以使用缓冲区和缓存来重用数据。
这里,朋友们需要注意一个知识点:缓冲区主要用于写操作,缓存主要用于读操作。
重用优化的另一个典型场景是池化技术,例如数据库连接池和线程池。
为了计算优化,我们可以从以下几个小方面来解释它。
并行计算
不难理解,就是多个计算同时进行。这里,又可以将并行计算分为:多机并行计算、多进程并行计算和多线程并行计算。
多机并行计算: 将一个大的计算任务,拆分成N个小的计算任务,分发到不同的机器进行处理。典型的场景就是Hadoop的MapReduce极端。
多进程计算: 比如,Nginx采用的NIO模型,采用的是进程调度的策略,由Master进程调度Worker进程,Worker进行来处理具体的请求。
多线程计算: 对于多线程计算来说,也是我们平时接触最多的一种计算方式,我们可以使用多线程技术,将复杂的逻辑计算拆分成一个个小的计算任务,分发到不同的线程中去执行。
同步变异步
同步和异步的区别就是:同步需要等待返回结果,异步不需要等待返回结果。如果我们在业务程序中,不需要等待返回结果数据,则我们可以将同步调用优化为异步调用,从而提升我们系统的性能。
懒加载
最典型的场景就是Spring中的懒加载,只有第一次获取bean的时候,才会创建bean实例。
对于快速实现来说,不仅包含我们需要利用相关的程序框架迅速开发出我们想要的业务,也需要我们在进行技术选型时,尽量使用一些性能优良的组件。比如,在进行网络开发时,尽量选择Netty,结合轻量级的数据传输,就不要使用WebService等技术了。
很多公司喜欢使用适配器模式,在一些现有的开源组件之上,再抽象一层自己的组件,这样就能够做到切换底层组件的时候,对上层应用无感。
如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~
推荐阅读:
《三天撸完了MyBatis,各位随便问!!(冰河吐血整理,建议收藏)》《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些核心技能是你必须要掌握的!完整学习路线!!(建议收藏)》《奉劝那些刚参加工作的学弟学妹们:这些计算机与操作系统基础知识越早知道越好!万字长文太顶了!!(建议收藏)》《我用三天时间开发了一款老少皆宜的国民级游戏,支持播放音乐,现开放完整源代码和注释(建议收藏)!!》《我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)》《毕业五年,从月薪3000到年薪百万,我掌握了哪些核心技能?(建议收藏)》《我入侵了隔壁妹子的Wifi,发现。。。(全程实战干货,建议收藏)》《千万不要轻易尝试“熊猫烧香”,这不,我后悔了!》《清明节偷偷训练“熊猫烧香”,结果我的电脑为熊猫“献身了”!》《7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)》《在业务高峰期拔掉服务器电源是一种怎样的体验?》《全网最全Linux命令总结!!(史上最全,建议收藏)》
好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~