当前位置: 首页 > 后端技术 > Java

【Java面试】大厂裁员,小厂倒闭,面试官怎么搞懂什么是JavaSPI?有什么用?

时间:2023-04-01 14:41:11 Java

《什么是JavaSPI?有什么用?》这是阿里p6面试过程第二面遇到的真题。如果你不了解SPI,我建议你观看整个视频。大家好,我是Mic,一名工作了14年的Java程序员。我把这个面试题的文字版整理成20万字的文档。如果你需要,可以在文末获取。这个问题的目的是调查目标。本题难度适中。对于没怎么研究过源码的同学来说,SPI是一个很陌生的概念。3~5年属于中高端Java开发群体,所以考察的目的也很明显:了解求职者对技术领域的理解,实现高级开发。Java行业没有人才等级标准,所以在面试的时候,面试官也比较难界定你的等级。所以在互联网公司,技术考察会更加深入。所以,要想很好地回答这个问题,我们还是需要一些自己的看法。问题分析JavaSPI,全称是ServiceProviderInterface。它是一种基于接口的动态扩展机制,相当于在Java中提供了一套接口。然后第三方就可以实现这个接口来完成功能的扩展和实现。举一个简单的例子。在JavaSDK中,提供了一个数据库驱动接口java.sql.Driver。它的作用是提供对数据库的访问。但是Java没有提供实现,因为不同的数据库厂商有不同的语法和实现。所以只能通过第三方数据库厂商实现,比如Oracle的oracle.jdbc.OracleDriver,mysql的com.mysql.jdbc.Driver。然后在应用开发时,根据集成的驱动连接到相应的数据库。Java中SPI机制的主要思想是将程序集的控制权移出程序,实现标准与实现的解耦,提供动态可插拔能力。这个思想在模块化的建立中是非常重要的。JavaSPI的实现需要满足几种基本格式:需要先定义接口,在classpath目录下创建META-INF/service文件目录作为扩展标准。在该目录下,有一个以接口全限定名命名的配置文件,文件内容为该接口在应用程序中的实现类。使用ServiceLoad,可以根据接口名找到classpath的所有扩展时间,然后根据上下文选择实现类完成函数调用。JavaSPI有一定的不足。例如,它不能按要求加载扩展实现。每次都会加载并实例化扩展接口的所有实现类。实例化会造成性能开销,加载一些不需要使用的实现。类,这会导致内存资源的浪费。硕士:JavaSPI是Java中提供的一种接口扩展机制。我认为它有两个作用:将标准定义与接口实现分离,在模块化开发中很好地实现解耦实现功能的扩展,更好的满足定制化需求。除了Java的SPI,基于SPI思想的扩展实现还有很多,比如Spring中的SpringFactoriesLoader。Dubbo中的ExtensionLoader,Dubbo在SPI的基础上进一步优化,提供激活扩展点和自适应扩展点。总结你知道怎么回答吗?喜欢我的作品记得点赞收藏关注哦!!!版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!