2019 java中高級 面試題匯總


答題的要點  1. 概念  2. 原理  3. 優點 

 

Spring

一、說說你對spring的理解

首先spring是一個開源框架,為了解決企業應用程序開發復雜性而創建的,它完成了大量開發中的通用步驟,留給開發者的僅僅是與特定應用相關的部分,從而大大提高了企業應用的開發效率。

其次spring架構是一個分層架構,由7大模塊組成

1.spring IOC

2.spring AOP

3.spring 上下文

4.springDao

5.springMVC

6.springWeb

7.springORM

然后spring自己也有幾大框架

spring MVC、spring Boot丶spring cloud丶spring data丶spring security

 

二丶說一下springIOC

IOC控制反轉也叫依賴注入,我理解的是它就是一個生產和管理bean的一個容器,你自己不需要通過new去生成對象而是通過spring bean的工廠來生成所需要的對象。

原理

將對象交給容器管理,你只需要在spring配置文件中配置對應的bean以及設置相關的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啟動的時候,spring會把你在配置文件中配置的bean都初始化好,然后在你需要調用的時候,就把它已經初始化好的那些bean分配給你需要調用這些bean的類(假設這個類名是A),分配的方法就是調用A的setter方法來注入,而不需要你在A里面new這些bean了。

 

三丶說一下springIOC的幾種注入方式

1.通過注解注入

2.調用set方法注入

3.通過構造方法注入

 

四丶說一下springAOP

簡單來說,就是將那些與業務無關,卻為業務模塊共同調用的邏輯封裝起來,減少重復代碼降低了代碼的耦合度。並有利於未來對代碼的可操作性和可維護性。

原理

實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼

 

五丶說一下springMVC

M-Model 模型(完成業務邏輯:有javaBean構成,service+dao+entity)

V-View 視圖(做界面的展示  jsp,html……)

C-Controller 控制器(接收請求—>調用模型—>根據結果派發頁面)

 

六丶spring常用接口

1.ApplicationListener:當需要監聽自定義事件時,可以新建一個實現ApplicationListener接口的類,並將該類配置到Spring容器中。

2.FactoryBean:用於創建特定的對象,對象的類型由getObject方法的返回值決定。

3.ApplicationContextAware:當一個類需要獲取ApplicationContext實例時,可以讓該類實現ApplicationContextAware接口。

4.ApplicationEvent:當需要創建自定義事件時,可以新建一個繼承自ApplicationEvent抽象類的類。

 

七丶spring cloud有哪些組件

https://blog.csdn.net/yejingtao703/article/details/78331442/

spring cloud常見面試題

https://blog.csdn.net/moakun/article/details/82817757

 

JVM

 

 

集合

一丶HashMap底層原理

 https://www.cnblogs.com/java-jun-world2099/p/9258605.html

二丶List面試題

https://www.cnblogs.com/chanshuyi/p/4998776.html

 

 

MQ

一丶為什么使用MQ

面試官問這個問題的期望之一的回答是,你們公司有什么業務場景,這個業務場景有什么技術挑戰,如果不用MQ可能會很麻煩,但是再用了之后帶來了很多好處。

消息隊列的常見使用場景有很多但是核心的有三個:解耦、異步、削峰

 

二丶消息隊列的優點和缺點?

優點:特殊場景下解耦、異步、削峰。

缺點:

系統可用性降低:系統引入的外部依賴越多,越容易掛掉,本來你就是A系統調用BCD三個系統的接口就好了,人ABCD四個系統好好的沒什么問題,你偏加個MQ進來,萬一MQ掛了怎么辦,整套系統崩潰了,就完蛋了

系統復雜性提高:硬生生加個MQ進來,你怎么保證消息沒有重復消費?怎么處理消息丟失的情況?怎么保證消息傳遞的順序性?

一致性問題:系統A處理完了直接返回成功了,人家都認為你這個請求成功了;但問題是,要是BCD三個系統哪里BD系統成功了,結果C系統寫庫失敗了,咋整?數據就不一致了。

 

三丶如何保證消息不被重復消費(如何保證消息消費時的冪等性)?

在消息生產時,MQ內部針對每條生產者發送的消息生成一個inner-msg-id,作為去重的依據(消息投遞失敗並重傳),避免重復的消息進入隊列;

在消息消費時,要求消息體中必須要有一個bizId(對於同一業務全局唯一,如支付ID、訂單ID、帖子ID等)作為去重的依據,避免同一條消息被重復消費。

四丶如何處理消息丟失的問題 (如何保證消息的可靠傳輸)?

這個丟數據,mq一般分為兩種,要么是mq自己弄丟了,要么是我們消費的時候弄丟了。

用rabbit舉例

(1)消息持久化

(2)ACK確認機制

(3)消息補償機制

(4)設置集群鏡像模式

五丶消息如何分發?

若該隊列至少有一個消費者訂閱,消息將以循環(round-robin)的方式發送給消費者。每條消息只會分發給一個訂閱的消費者(前提是消費者能夠正常處理消息並進行確認)。

 

六丶消息隊列有哪些配置

<beans  xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/rabbit  http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">  
<!-- 定義RabbitMQ的連接工廠 -->  
<rabbit:connection-factory id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
    <constructor-arg value="10.130.202.12"><!--服務器ip地址-->  
    <property name="username" value="tele-onlineYa">
    <property name="password" value="tele-onlineYa">
    <property name="port" value="5678">
    <property name="channelCacheSize" value="50"> <!--通道緩存大小-->
<property name="virtualHost" value="tele-onlineYa"> </bean> <!--通過指定admin信息,當前producer中的exchange和queue會在rabbitmq服務器上自動生成。 --> 

<rabbit:admin connection-factory="connectionFactory" /> <!-- 隊列queue,自動聲明 -->

<rabbit:queue name="ZL.SALETRACE" exclusive="false" auto-declare="false" durable="true" /> <!--自定義消息接受者-->

<bean id="messageReceiver" class="com.zlf.cn.api.RabbitMqConsumerListener"> <!-- queue監聽器,觀察監聽模式。當有消息到達本應用時會通知監聽在對應隊列queue上的監聽對象 -->

<rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener queues="ZL.SALETRACE" ref="messageReceiver" />
</rabbit:listener-container>

</beans>

 

 

dubbo

一丶簡單說一下dubbo

Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,就是個遠程服務調用的分布式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上注冊)

 

其核心部分包含:

1. 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。

2. 集群容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。

3. 自動發現: 基於注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

 

二丶dubbo調用關系說明

(1)服務提供者在啟動時,向注冊中心注冊自己提供的服務。

(2)服務消費者在啟動時,向注冊中心訂閱自己所需的服務。

(3)注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。

(4)服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。

(5)服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心。

三丶你配置過dubbo哪些東西

# 應用名
dubbo.application.name = dubbodemo-consumer
# 注冊中心地址
dubbo.registry.address = zookeeper://localhost:2181
# 調用協議地址 dubbo.protocol.name = dubbo dubbo.protocol.port = 28080
# 設置服務端和消費端連接超時時間
spring.dubbo.consumer.timeout=30000
spring.dubbo.provider.timeout=30000
服務端要聲明暴露的服務接口
消費端要配置調用哪些服務


MySQL

一丶MYSQL有哪些索引?
https://blog.csdn.net/liutong123987/article/details/79384395



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM