天天看點

Java開發八月七号下午筆試+面試

筆試

1、SpringBoot有哪幾種配置方式?有什麼差別?

SpringBoot有兩種配置方式,properties和yml,兩種配置方式隻是格式上不同,功能是一緻的,比如

properties:

server.port=8080      

對應的yml:

server:
        port:8080      

就實際開發而言,yml更簡潔一些,但是properties出錯率更低一些。

2、SpringBoot怎麼修改啟動時的端口号?

(1)、在配置檔案中修改端口号:

server.port=8888      

(2)、.可以通過實作EmbeddedServletContainerCustomizer接口來實作

public class Application extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {  
  
    @Override  
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  
        return builder.sources(Application.class);  
    }  
      
    public static void main(String[] args) {  
        SpringApplication.run(Application.class, args);  
    }  
  
  
    @Override  
    public void customize(ConfigurableEmbeddedServletContainer container) {  
        container.setPort(8081);  
    }  
}        

3、mysql有幾種鎖?怎麼建立一個帶鎖的sql語句?

從資料庫的角度來看,鎖可以分為共享鎖、獨占鎖和更新鎖。

共享鎖:共享鎖鎖住的資源可以被其它資源讀取,但不能被修改。

獨占鎖:獨占鎖鎖住的資源隻允許進行鎖定操作的程式使用。

更新鎖:是為了防止死鎖設立的。

從程式員的角度來看,鎖可以分為樂觀鎖、悲觀鎖。

參考【6】講的不錯。

4、JVM加載class檔案的原理機制是什麼?

JVM裝載class檔案都是由ClassLoader(類加載器)實作的,Java中的類加載器是一個重要的Java運作時系統元件,它負責在運作時查找和裝入類檔案中的類。

類加載器中,BootstrapClassloader是Java無關的,是由C/C++編寫的類加載器,其它的類加載器都直接或間接繼承自它。

5、分布式鎖應當具備哪些條件?

為了防止分布式系統之間的多個程序互相幹擾,需要一種分布式協調技術來對這些程序進行排程,而這個分布協調技術的核心就是分布式鎖。

分布式鎖需要具備的條件:

.在分布式系統環境下,一個方法在同一時間隻能被一個機器的一個線程執行

.高可用的擷取鎖與釋放鎖

.高性能的擷取鎖與釋放鎖

.具備可重入特性(可了解為重新進入,由多于一個任務并發使用,而不必擔心資料錯誤)

.具備鎖失效機制,防止死鎖

.具備非阻塞鎖特性,即沒有擷取到鎖将直接傳回擷取鎖失敗

6、SpringCloud和Dubbo有什麼差別?

SpringCloud Dubbo
底層實作 底層是使用Netty這樣的NIO架構,是基于TCP協定傳輸的,配合以Hession序列化完成RPC通信。 基于Http協定+rest接口調用遠端過程的通信
背景 來源于Spring團隊,可以保證穩定的更新和維護 Dubbo是來源于阿裡團隊,曾被阿裡棄用,後來又低調重新開機
定位 Dubbo 是 SOA 時代的産物,它的關注點主要在于服務的調用,流量分發、流量監控和熔斷。定位是服務治理。 SpirngCloud誕生于微服務架構時代,考慮的微服務治理的方方面面。依托于Spring和SpringBoot,SpringCloud定位的是生态
子產品 完整的一站式分布式架構,子產品包括服務注冊中心,服務提供者,服務消費者,管控台,斷路器,分布式配置服務,消息總線,以及服務追蹤等 主要是四個子產品:服務注冊中心,服務提供者,服務消費者,還有管控中心

7、SpringMVC是單例模式嗎?如果是,存在什麼問題?該怎麼解決?

SpringMVC是單例模式。

在多線程通路時存在安全問題。

解決辦法:不需要同步,在控制器中不能寫字段。如果在特殊情況需要定義屬性的時候,那麼就在類上面加上注解@Scope(“prototype”)改為多例的模式

7、List、Map、Set是否繼承Collection?

List和Set繼承Collection,Map是基本映射表接口,沒有繼承Collection。

8、線程有幾種實作方式?

三種:

(1)、繼承Thread類

(2)、實作Runnable接口,Thread類其實也是一個實作了Runable接口的類。

(3)、實作Callable接口,可以建立一個帶傳回值的線程,可以看作是對Runnable接口的補充。

面試

面試比較快,随便問問,了解一下個人情況,技術上問的不多,有幾個很基礎的問題,就不寫了。

1、講講Spring中的事務?

事務管理是企業級應用程式開發中必不可少的技術,用來確定資料的完整性和一緻性。

事務就是一系列的動作,它們被當作一個單獨的工作單元。這些動作要麼全部完成,要麼全部不起作用。

在Spring在不同的事務管理API之上定義了一個抽象層,而應用程式開發人員不必了解底層的事務管理API,就可以使用Spring的事務管理機制。

Spring既支援程式設計式事務管理(也稱編碼式事務),也支援聲明式的事務管理。

程式設計式事務管理:将事務代碼嵌入到業務方法中來控制事務的送出和復原,在程式設計式事務中,必須在每個業務操作中包含額外的事務管理代碼。

聲明式事務管理:大多數情況下比程式設計是事務管理好用。它将事務管理代碼從業務方法中分離出來,以聲明的方式以聲明的方式來實作事務管理。事務管理作為一種橫切事務點,可以通過AOP方式子產品化。Spring通過Spring AOP架構支援聲明式事務管理。

Spring并不直接管理事務,而是提供了多種事務管理器,它們将事務管理的職責委托給JTA或其他持久化機制所提供的平台相關的事務實作。每個事務管理器都會充當某一特定平台的事務實作的門面,這使得使用者在Spring中使用事務時,幾乎不用關注實際的事務實作是什麼。

比如針對Spring JDBC抽象架構、iBATIS或MyBatis架構的事務管理器DataSourceTransactionManager,

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>      

2、你眼中的高并發?

看參考四,一些概念沒有接觸過,不是太能了解。

3、Spring AOP原理是什麼?

Spring AOP的底層都是通過代理來實作的

.一種是基于JDK的動态代理

.一種是基于CgLIB的動态代理

參考:

【1】、

https://www.cnblogs.com/Javacxf/p/7100995.html

【2】、

https://www.cnblogs.com/longshiyVip/p/5061637.html

【3】、

【4】、

https://zhuanlan.zhihu.com/p/38636111

【5】、

https://www.cnblogs.com/javazhiyin/p/10101044.html

【6】、

https://www.cnblogs.com/zhouqianhua/archive/2011/04/15/2017049.html

​​