19年3月份面試題集合【Spring、設計模式】

重點 看看【設計模式】和【算法】的java基礎
【設計模式】
創建型模式
    1、單例模式 2、工廠模式(抽象工廠模式) 3、建造者模式
結構型模式
      適配模式
行爲型模式
      觀察者模式
【算法】
冒泡排序,快速排序

SpringBoot
Spring Boot使用了約定大於配置(PS:很多博客寫的是默認大於配置,嚴格來說,約定更精確)的理念,1、集成了快速開發的spring多個插件,同時自動過濾不需要配置的多餘的插件,2、簡化了項目的開發配置流程,一定程度上取消xml配置,是一套快速配置開發的腳手架,能快速開發單個微服務;

SpringCloud
Spring Cloud大部分的功能插件都是基於Spring Boot去實現的,Spring Cloud關注於全局的微服務整合和管理,將多個Spring Boot單體微服務進行整合以及管理; Spring Cloud依賴於Spring Boot開發,而Spring Boot可以獨立開發;

HashMap的原理
HashMap基於hashing原理,我們通過put()和get()方法儲存和獲取對象。當我們將鍵值對傳遞給put()方法時,它調用鍵對象的hashCode()方法來計算hashcode,讓後找到bucket位置來儲存值對象。當獲取對象時,通過鍵對象的equals()方法找到正確的鍵值對,然後返回值對象。HashMap使用鏈表來解決碰撞問題,當發生碰撞了,對象將會儲存在鏈表的下一個節點中。 HashMap在每個鏈表節點中儲存鍵值對對象。
“當兩個對象的hashcode相同會發生什麼?”
“如果兩個鍵的hashcode相同,你如何獲取值對象?”

float和double的區別
小數默認是double類型
單精度浮點數有效數字8位 雙精度浮點數有效數字16位
float a=1.3; 會編譯報錯,正確的寫法 float a = (float)1.3;或者float a = 1.3f;(f或F都可以不區分大小寫)

下面Integer類型的數值比較輸出的結果爲

public class Test{
	public static void main(){
		Integer f1 = 100,f2 = 100,f3 = 150, f4 = 150 
		System.out.println(f1 == f2);
		System.out.println(f3 ==f4);
	}
}

簡單的說,如果整型字面量的值在-128 到 127 之間,那麼不會 new 新的 Integer 對象,而是直接引用常量池
中的 Integer 對象,所以上面的面試題中 f1== f2 的結果是 true,而 f3== f4 的結果是 false。

數據類型之間的轉換
字符串如何轉基本數據類型?
調用基本數據類型對應的包裝類中的方法parseXXX(String)或valueOf(String)即可返回相應基本類型。

final修飾類、方法、成員變量的特點
//編譯錯誤,final的類不能被繼承
//編譯錯誤,final的方法不能被重寫
//編譯錯誤,final的變量不能被改變

MySQL內連接和左外連接有什麼區別?
內鏈接取交集 外連接肯定查出一張完整的表內容,沒有的取null

事務的隔離級別 傳播行爲
四種,傳播應該是其中,mysql默認隔離級別第三級,杜絕不可重複讀,幻讀,傳播用的最多的support和requered

Jsp和Servlet的區別
JSP在本質上就是SERVLET,但是兩者的創建方式不一樣.
Servlet完全是JAVA程序代碼構成,擅長於流程控制和事務處理,通過Servlet來生成動態網頁很不直觀.
JSP由HTML代碼和JSP標籤構成,可以方便地編寫動態網頁.
因此在實際應用中採用Servlet來控制業務流程,而採用JSP來生成動態網頁.

Lock和Synchronized的區別,公平鎖和非公平鎖

mybatis的動態sql

<if>單條件分支判斷
<choose>(when、otherwise)多條件分支判斷
<foreach item="item" index="index" collection="list">  循環

springboot 監視器–actuator

mybatis接口綁定

springboot相對於SpringMVC有什麼優點?
因爲 Spring 的配置非常複雜,各種XML 、JavaConfig處理起來比較繁瑣。於是爲了簡化開發者的使用,從而創造性地推出了Spring boot,約定優於配置,簡化了spring的配置流程。

什麼是springboot,springboot的特點?
1用來簡化spring應用的初始搭建以及開發過程 使用特定的方式來進行配置(properties或yml文件)
2 創建獨立的spring引用程序 main方法運行
3 嵌入的Tomcat 無需部署war文件
4 簡化maven配置
5 自動配置spring添加對應功能starter自動化配置

什麼是微服務
以前的模式是 所有的代碼在同一個工程中 部署在同一個服務器中 同一個項目的不同模塊不同功能互相搶佔資源
微服務 將工程根據不同的業務規則拆分成微服務 微服務部署在不同的機器上 服務之間進行相互調用
Java微服務的框架有 dubbo(只能用來做微服務),spring cloud(提供了服務的發現,斷路器等)

springboot常用的starter有哪些

    spring-boot-starter-web 嵌入tomcat和web開發需要servlet與jsp支持

    spring-boot-starter-data-jpa 數據庫支持

    spring-boot-starter-data-redis redis數據庫支持

    spring-boot-starter-data-solr solr支持

    mybatis-spring-boot-starter 第三方的mybatis集成starter

springboot如何添加修改代碼【自動重啓】功能,熱加載

添加開發者工具集=====spring-boot-devtools

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

springboot自動配置的原理
在spring程序main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration
會自動去maven中讀取每個starter中的spring.factories文件 該文件裏配置了所有需要被創建spring容器中的bean

springcloud如何實現服務的註冊和發現
服務在發佈時 指定對應的服務名(服務名包括了IP地址和端口) 將服務註冊到註冊中心(eureka或者zookeeper)
這一過程是springcloud自動實現 只需要在main方法添加@EnableDisscoveryClient 同一個服務修改端口就可以啓動多個實例
調用方法:傳遞服務名稱通過註冊中心獲取所有的可用實例 通過負載均衡策略調用(ribbon和feign)對應的服務

ribbon和feign區別

    Ribbon添加maven依賴 spring-starter-ribbon 使用@RibbonClient(value="服務名稱") 使用RestTemplate調用遠程服務對應的方法

    feign添加maven依賴 spring-starter-feign 服務提供方提供對外接口 調用方使用 在接口上使用@FeignClient("指定服務名")

Ribbon和Feign的區別:

    Ribbon和Feign都是用於調用其他服務的,不過方式不同。

    1.啓動類使用的註解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。

    2.服務的指定位置不同,Ribbon是在@RibbonClient註解上聲明,Feign則是在定義抽象方法的接口中使用@FeignClient聲明。

    3.調用方式不同,Ribbon需要自己構建http請求,模擬http請求然後使用RestTemplate發送給其他服務,步驟相當繁瑣。

    Feign則是在Ribbon的基礎上進行了一次改進,採用接口的方式,將需要調用的其他服務的方法定義成抽象方法即可,

    不需要自己構建http請求。不過要注意的是抽象方法的註解、方法簽名要和提供服務的方法完全一致。

springcloud斷路器的作用

    當一個服務調用另一個服務由於網絡原因或者自身原因出現問題時 調用者就會等待被調用者的響應 當更多的服務請求到這些資源時

            導致更多的請求等待 這樣就會發生連鎖效應(雪崩效應) 斷路器就是解決這一問題

            斷路器有完全打開狀態

                    一定時間內 達到一定的次數無法調用 並且多次檢測沒有恢復的跡象 斷路器完全打開,那麼下次請求就不會請求到該服務

            半開

                    短時間內 有恢復跡象 斷路器會將部分請求發給該服務 當能正常調用時 斷路器關閉

            關閉

                    當服務一直處於正常狀態 能正常調用 斷路器關閉

eureka和zookeeper的區別
1.Eureka和Zookepper都可以作爲註冊中心
2.Eureka取CAP中的AP,注重可用性。Zookepper取CAP理論中的CP強調高的一致性
4.Eureka常用於SpringCloud下產物的註冊中心,如:微服務的註冊中心
Zookepper是分佈式下的註冊中心,如:Dubbo、Hadoop類似的集羣的服務註冊中心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章