1. 程式人生 > >2018java基礎面試題(我自己用的,面試好多家公司基本會問到的問題和技術)

2018java基礎面試題(我自己用的,面試好多家公司基本會問到的問題和技術)

1,webservice是什麼? webservice是一種跨程式語言和跨作業系統的遠端呼叫技術,遵循SOPA/WSDL規範。

2,springCloud是什麼? springcloud是一個微服務框架,並提供全套分散式系統解決方案。支援配置管理,熔斷機制,leader選舉,服務治理,分散式session,微代理,控制匯流排,智慧路由,一次性token。

Java中堆和棧有什麼不同? 每個執行緒都有自己的棧記憶體,用於儲存本地變數,方法引數和棧呼叫,一個執行緒中儲存的變數對其它執行緒是不可見的。而堆是所有執行緒共享的一片公用記憶體區域。物件都在堆裡建立,為了提升效率執行緒會從堆中弄一個快取到自己的棧,如果多個執行緒使用該變數就可能引發問題,這時volatile 變數就可以發揮作用了,它要求執行緒從主存中讀取變數的值。

堆:(物件)

引用型別的變數,其記憶體分配在堆上或者常量池(字串常量、基本資料型別常量),需要通過new等方式來建立。

堆記憶體主要作用是存放執行時建立(new)的物件。

(主要用於存放物件,存取速度慢,可以執行時動態分配記憶體,生存期不需要提前確定)

棧:(基本資料型別變數、物件的引用變數)

基本資料型別的變數(int、short、long、byte、float、double、boolean、char等)以及物件的引用變數,其記憶體分配在棧上,變量出了作用域就會自動釋放。

Spring的Scope有以下幾種,通過@Scope註解來實現:   (1)Singleton:一個Spring容器中只有一個Bean的例項,此為Spring的預設配置,全容器共享一個例項。

  (2)Prototype:每次呼叫新建一個Bean例項。

  (3)Request:Web專案中,給每一個 http request 新建一個Bean例項。

  (4)Session:Web專案中,給每一個 http session 新建一個Bean例項。

  (5)GlobalSession:這個只在portal應用中有用,給每一個 global http session 新建一個Bean例項。

Spring事務傳播行為       所謂事務的傳播行為是指,如果在開始當前事務之前,一個事務上下文已經存在,此時有若干選項可以指定一個事務性方法的執行行為。在TransactionDefinition定義中包括瞭如下幾個表示傳播行為的常量:

TransactionDefinition.PROPAGATION_REQUIRED:如果當前存在事務,則加入該事務;如果當前沒有事務,則建立一個新的事務。這是預設值。 TransactionDefinition.PROPAGATION_REQUIRES_NEW:建立一個新的事務,如果當前存在事務,則把當前事務掛起。 TransactionDefinition.PROPAGATION_SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。 TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式執行,如果當前存在事務,則把當前事務掛起。 TransactionDefinition.PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則丟擲異常。 TransactionDefinition.PROPAGATION_MANDATORY:如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。 TransactionDefinition.PROPAGATION_NESTED:如果當前存在事務,則建立一個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於TransactionDefinition.PROPAGATION_REQUIRED。

Spring的宣告式事務管理力度是什麼級別? Struts2是類級別的,Spring是方法級別的 spring事務可以分為程式設計式事務和宣告式事務

spring MVC與struts2的區別:     參考:  http://blog.csdn.net/chenleixing/article/details/44570681

   1、Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截

   2、SpringMVC的方法之間基本上獨立的,獨享request response資料

  3、由於Struts2需要針對每個request進行封裝,把request,session等servlet生命週期的變數封裝成一個一個

Map,供給每個Action使用,並保證執行緒安全,所以在原則上,是比較耗費記憶體的

   4、攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式

   5、SpringMVC的入口是servlet,而Struts2是filter

  6、SpringMVC集成了Ajax

  7、SpringMVC驗證支援JSR303,處理起來相對更加靈活方便,而Struts2驗證比較繁瑣,感覺太煩亂

  8、Spring MVC和Spring是無縫的。從這個專案的管理和安全上也比Struts2高

   9、Struts2更加符合OOP的程式設計思想, SpringMVC就比較謹慎,在servlet上擴充套件

  10、SpringMVC開發效率和效能高於Struts2

  11、SpringMVC可以認為已經100%零配置

Spring框架中的核心思想包括什麼?

主要思想是IOC控制反轉,DI依賴注入,AOP面向切面

ArrayList和LinkedList的大致區別如下:

1.ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構。  2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。  3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。

ArrayList,Vector主要區別為以下幾點:  (1):Vector是執行緒安全的,原始碼中有很多的synchronized可以看出,而ArrayList不是。導致Vector效率無法和ArrayList相比; 

(2):ArrayList和Vector都採用線性連續儲存空間,當儲存空間不足的時候,ArrayList預設增加為原來的50%,Vector預設增加為原來的一倍; 

HashSet與HashMap的區別:

HashMap    HashSet 實現了Map介面    實現Set介面 儲存鍵值對    僅儲存物件 呼叫put()向map中新增元素    呼叫add()方法向Set中新增元素 HashMap使用鍵(Key)計算Hashcode     HashSet使用成員物件來計算hashcode值,

對於兩個物件來說hashcode可能相同,

所以equals()方法用來判斷物件的相等性,

如果兩個物件不同的話,那麼返回false

HashMap相對於HashSet較快,因為它是使用唯一的鍵獲取物件    HashSet較HashMap來說比較慢

HashMap和Hashtable的區別: HashMap和Hashtable都實現了Map介面,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區別有:執行緒安全性,同步(synchronization),以及速度。

HashMap幾乎可以等價於Hashtable,除了HashMap是非synchronized的,並可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。 HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是執行緒安全的,多個執行緒可以共享一個Hashtable;而如果沒有正確的同步的話,多個執行緒是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴充套件性更好。 另一個區別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它執行緒改變了HashMap的結構(增加或者移除元素),將會丟擲ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會丟擲ConcurrentModificationException異常。但這並不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。 由於Hashtable是執行緒安全的也是synchronized,所以在單執行緒環境下它比HashMap要慢。如果你不需要同步,只需要單一執行緒,那麼使用HashMap效能要好過Hashtable。 HashMap不能保證隨著時間的推移Map中的元素次序是不變的。 執行緒安全是什麼?執行緒不安全是什麼?

執行緒安全就是多執行緒訪問時,採用了加鎖機制,當一個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。(Vector,HashTable)  執行緒不安全就是不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒資料。(ArrayList,LinkedList,HashMap等)

執行緒和程序的區別?

       程序和執行緒都是一個時間段的描述,是CPU工作時間段的描述,不過是顆粒大小不同;

       (1)程序是資源的分配和排程的一個獨立單元,而執行緒是CPU排程的基本單元           (2)同一個程序中可以包括多個執行緒,並且執行緒共享整個程序的資源(暫存器、堆疊、上下文),一個進行至少包括一個執行緒。           (3)程序的建立呼叫fork或者vfork,而執行緒的建立呼叫pthread_create,程序結束後它擁有的所有執行緒都將銷燬,而執行緒的結束不會影響同個程序中的其他執行緒的結束           (4)執行緒是輕兩級的程序,它的建立和銷燬所需要的時間比程序小很多,所有作業系統中的執行功能都是建立執行緒去完成的           (5)執行緒中執行時一般都要進行同步和互斥,因為他們共享同一程序的所有資源           (6)執行緒有自己的私有屬性TCB,執行緒id,暫存器、硬體上下文,而程序也有自己的私有屬性程序控制塊PCB,這些私有屬性是不被共享的,用來標示一個程序或一個執行緒的標誌

黑盒測試、灰盒測試、白盒測試、單元測試有什麼區別?

黑盒測試關注程式的功能是否正確,面向實際使用者;

白盒測試關注程式原始碼的內部邏輯結構是否正確,面向程式設計人員;

灰盒測試是介於白盒測試與黑盒測試之間的一種測試。

單元測試(Unit Testing)是對軟體基本組成單元進行的測試,如函式或是一個類的方法。這裡的單元,就是軟體設計的最小單位。

怎麼對資料庫百萬級資料進行優化?

使用讀寫分離技術(

讓主資料庫(master)處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫(slave)處理SELECT查詢操作 )

Spring Bean的生命週期: Bean的建立, 由BeanFactory讀取Bean定義檔案,並生成各個例項 Setter注入,執行Bean的屬性依賴注入 BeanNameAware的setBeanName(), 如果實現該介面,則執行其setBeanName方法 BeanFactoryAware的setBeanFactory(),如果實現該介面,則執行其setBeanFactory方法 BeanPostProcessor的processBeforeInitialization(),如果有關聯的processor,則在Bean初始化之前都會執行這個例項的processBeforeInitialization()方法 InitializingBean的afterPropertiesSet(),如果實現了該介面,則執行其afterPropertiesSet()方法 Bean定義檔案中定義init-method BeanPostProcessors的processAfterInitialization(),如果有關聯的processor,則在Bean初始化之前都會執行這個例項的processAfterInitialization()方法 DisposableBean的destroy(),在容器關閉時,如果Bean類實現了該介面,則執行它的destroy()方法 Bean定義檔案中定義destroy-method,在容器關閉時,可以在Bean定義檔案中使用“destory-method”定義的方法    

簡單回答springbean生命週期:

(1)例項化(必須的)建構函式構造物件

(2)裝配(可選的)為屬性賦值

(3)回撥(可選的)(容器-控制類和元件-回撥類)

(4)初始化(init-method=" ")

(5)就緒

(6)銷燬(destroy-method=" ")

springmvc生命週期: 1A)客戶端發出http請求,只要請求形式符合web.xml 檔案中配置的*.action的話,就由DispatcherServlet 來處理。

1B)DispatcherServlet再將http請求委託給對映器 的物件來將http請求交給對應的Action來處理

2)對映器根據客戶的http請求,再對比<bean name="/hello.action 如果匹配正確,再將http請求交給程式設計師寫的Action

3)執行Action中的業務方法,最終返回一個名叫ModelAndView 的物件,其中封裝了向檢視傳送的資料和檢視的邏輯名

4)ModelAndView物件隨著響應到到DispatcherServlet中了

5)這時DispatcherServlet收到了ModelAndView物件, 它也不知道檢視邏輯名是何意,又得委託一個名叫 檢視解析器的物件去具體解析ModelAndView物件 中的內容

6)將檢視解析器解析後的內容,再次交由DispatcherServlet 核心控制器,這時核心控制器再將請求轉發到具體的 檢視頁面,取出資料,再顯示給使用者

servlet生命週期?

Servlet 通過呼叫 init () 方法進行初始化。 Servlet 呼叫 service() 方法來處理客戶端的請求。 Servlet 通過呼叫 destroy() 方法終止(結束)。 最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的

ajax怎麼解決跨域?     參考:http://blog.csdn.net/u014727260/article/details/72793459

    1,代理(通過後臺操作)

    2,JSONP(新增響應頭,允許跨域 )

              addHeader(‘Access-Control-Allow-Origin:*’);//允許所有來源訪問 

               addHeader(‘Access-Control-Allow-Method:POST,GET’);//允許訪問的方式

    3,在ajax的dataType方式改為“jsonp”

Mysql資料型別:     1.普通索引     2.唯一索引     3.主鍵索引     4.組合索引

    5.全文索引

    參考:https://www.cnblogs.com/luyucheng/p/6289714.html

Eureka和zookeeper的區別? 1,做分散式下的服務發現還是使用eureka更好,也就是AP特性的分散式協調工具(zookeeper因為網路故障就無法返回可用的主機)

2,zookeeper技術更加成熟,資料更多

3,Eureka。是spring cloud之下一個專門負責微服務服務註冊和發現的元件,Eureka就是為了服務發現而設計的

4,Zookeeper。是用來保證分散式一致性的一個軟體。不是為了服務發現註冊而設計的,只不過它的特性也可以被二次開發成服務發現註冊中心罷了

SpringCloud都有哪些元件?       Spring Cloud為微服務架構開發涉及的配置管理,服務治理,熔斷機制,智慧路由,微代理,控制匯流排,一次性token,全域性一致性鎖,leader選舉,分散式session,叢集狀態管理等操作提供了一種簡單的開發方式。

    元件列:

Spring Cloud Config:配置管理工具,支援使用Git儲存配置內容,支援應用配置的外部化儲存,支援客戶端配置資訊重新整理、加解密配置內容等 Spring Cloud Bus:事件、訊息匯流排,用於在叢集(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。 Spring Cloud Netflix:針對多種Netflix元件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。                       Netflix Eureka:一個基於rest服務的服務治理元件,包括服務註冊中心、服務註冊與服務發現機制的實現,實現了雲端負載均衡和中間層伺服器的故障轉移。                       Netflix Hystrix:容錯管理工具,實現斷路器模式,通過控制服務的節點,從而對延遲和故障提供更強大的容錯能力。                       Netflix Ribbon:客戶端負載均衡的服務呼叫元件。                       Netflix Feign:基於Ribbon和Hystrix的宣告式服務呼叫元件。                       Netflix Zuul:微服務閘道器,提供動態路由,訪問過濾等服務。                       Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態型別化屬性、執行緒安全配置操作、輪詢框架、回撥機制等功能。 Spring Cloud for Cloud Foundry:通過Oauth2協議繫結服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平臺。 Spring Cloud Sleuth:日誌收集工具包,封裝了Dapper,Zipkin和HTrace操作。 Spring Cloud Data Flow:大資料操作工具,通過命令列方式操作資料流。 Spring Cloud Security:安全工具包,為你的應用程式新增安全控制,主要是指OAuth2。 Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫整合。 Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。 Spring Cloud Stream:資料流操作開發包,封裝了與Redis,Rabbit、Kafka等傳送接收訊息。 Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令列方式快速建立雲元件 Hibernate的三種狀態是什麼?怎麼將遊離狀態轉換為持久化狀態? transient(瞬時狀態),persistent(持久化狀態)以及detached(離線狀態)

轉換:update()    saveOrUpdate()       lock()

---------------------  作者:一念永恆  來源:CSDN  原文:https://blog.csdn.net/u013305864/article/details/79383225  版權宣告:本文為博主原創文章,轉載請附上博文連結!