導航:首頁 > 程序命令 > spring程序員面試題目

spring程序員面試題目

發布時間:2023-02-04 06:11:23

㈠ 如何面試後端程序員

不需要寫代碼就能衡量候選人的方法可能有一萬種。我常用的三個主要方法可以覆蓋許多不同的技能。在面試過程中,我們會談論候選人的經驗,要求他們做一些代碼審查,並與別人合作設計一個系統。

下面我會詳細解釋這個過程。

我試圖通過這些方法找到真正能夠勝任技術工作的候選人,並且他們必須能在單純的編程技能之外給團隊帶來價值。通常在一次面試中我能在大約一個小時內覆蓋所有三個部分。我有信心這些信息能讓我找到好的候選人。

1、深入挖掘他們的經驗

許多團隊已經這樣做了。他們會在面試一開始花幾分鍾,詢問候選人之前的工作,他們對工作的態度,等等。大多時候這就像隨意談話一樣。

但這是不對的。

記住這是面試。你需要盡可能地理解他們構建系統時使用的技術。

為了做好這一點,你需要在面試開始之前仔細閱讀他們的簡歷。這不是開玩笑,在面試開始之前至少花上10分鍾仔細閱讀(不是略讀)簡歷,如果花30分鍾時間則最好。要從簡歷中盡可能多了解些他們之前的項目,Google一下看看能否找到他們項目的公開信息。面試時挖掘背景信息所花的時間越少,就越能獲得好的效果。

在面試中,要求候選人談談他最近最感興趣的項目。要練習主動的傾聽,要學會參與。假裝你是他團隊中的一員,或者假裝你們是在做架構審查。你要努力了解他們構建的東西以及構建的方法。這樣做的好處和壞處是什麼?要讓候選人知道,不知道答案無所謂,但重要的是能勾起你的好奇心。

下面是我認為能獲得好的答案的問題:

㈡ 面試必問之spring 面試題

什麼是 Spring Boot?

多年來,隨著新功能的增加,spring 變得越來越復雜。只需訪問 https://spring.io/projects 頁面,我們就會看到可以在我們的應用程序中使用的所有 Spring 項目的不同功能。如果必 須啟動一個新的 Spring 項目,我們必須添加構建路徑或添加 Maven 依賴關系,配置應用程 序伺服器,添加 spring 配置。因此,開始一個新的 spring 項目需要很多努力,因為我們現 在必須從頭開始做所有事情。

Spring Boot 是解決這個問題的方法Spring Boot 已經建立在現有 spring 框架之上使用

spring 啟動,我們避免了之前我們必須做的所有樣板代碼和配置。因此,Spring 幫助我們以最少的工作量,更加健壯地使用現有的 Spring 功能。

Spring Boot 有哪些優點? Spring Boot 的優點有:

Boot 可以

減少開發,測試時間和努力。

使用 JavaConfig 有助於避免使用 XML。

避免大量的 Maven 導入和各種版本沖突。

提供意見發展方法。

通過提供默認值快速開始開發

沒有單獨的 Web 伺服器需要這意味著你不再需要啟動 TomcatGlassfish 或其他任何東 西

需要更少的配置 因為沒有 web.xml 文件。只需添加用@ Configuration 注釋的類,然後添加 用@Bean 注釋的方法,Spring 將自動載入對象並像以前一樣對其進行管理。您甚至可以將 @Autowired 添加到 bean 方法中,以使 Spring 自動裝入需要的依賴關系中。 基於環境的配置 使用這些屬性,您可以將您正在使用的環境傳遞到應用程序:- Dspring.profiles.active = {enviornment}。在載入主應用程序屬性文件後,Spring 將在 (application{environment} .properties)中載入後續的應用程序屬性文件。

什麼是 Spring Profiles?

Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來注冊 bean。因此,當應用 程序在開發中運行時,只有某些 bean 可以載入,而在 PRODUCTION 中,某些其他 bean 可 以載入。假設我們的要求是 Swagger 文檔僅適用於 QA 環境,並且禁用所有其他文檔。這 可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。

什麼是 Spring Batch?

Spring Boot Batch提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日誌/跟 蹤,事務管理,作業處理統計信息,作業重新啟動,跳過和資源管理。它還提供了更先進 的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。簡單 以及復雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

什麼是 FreeMarker 模板?

FreeMarker 是一個基於 Java 的模板引擎,最初專注於使用 MVC 軟體架構進行動態網頁生 成。使用 Freemarker 的主要優點是表示層和業務層的完全分離。程序員可以處理應用程序 代碼,而設計人員可以處理 html 頁面設計。最後使用 freemarker 可以將這些結合起來,給 出最終的輸出頁面。

如何使用 Spring Boot 實現異常處理?

Spring提供了一種使用ControllerAdvice處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類拋出的所有異常。

㈢ 你要面試一個程序員,應該問他什麼問題

首先面試程序員分有沒有經驗
面試沒有經驗的程序員就隨便問問點ssm,ssh五大框架問題,多線程什麼的,再問問是否會點前端技術
有經驗就看看他的簡歷,問他簡歷項目上的問題,可以圍繞著簡歷上的項目問,通過他的回答涉及到的技術點之類的,拓展出去問其他的

㈣ 面試一年經驗的程序員,會問哪些問題

在當今的互聯網大軍中,不少人順應時代潮流,選擇了PHP開發作為自己的發展方向,進行PHP培訓。技術很重要,面試技巧也很重要,講一下:Java程序員面試失敗的5大原因。

一、說得太少

尤其是那些開放式的問題,如「請介紹下你自己」或「請講一下你曾經解決過的復雜問題」。面試官會通過你對這些技術和非技術問題的回答來評估你的激情。他們也會通過模擬團隊氛圍和與你的交流互動來判斷你的經驗和能力。

所以,僅僅只用兩三句話來回答不但不能顯示出你對這個專業的興趣,還會讓整個面試過程顯得非常無聊。如果你不能很好地說明你的經驗、成就和技能可以給企業帶來的價值,那麼你的競爭力毫無疑問就高不起來。所以,你需要對一些最常見的開放式問答作充分的准備,學會推銷自己。

二、說得太多

不斷地說,不斷地說,卻並沒有什麼實質性的內容。換句話說,就是廢話連篇,言之無物。如果你不能簡潔的解釋問題,那麼面試官就會懷疑你在工作時的表現是不是也會像你的談話一樣拖泥帶水?可以先問問面試官,確定是否真的需要詳細解釋。

解釋也是一門藝術,關鍵是確定重點,如果需要的話再深入到細節。當聊到業務的時候,就應該從業務的角度看問題,不要涉及任何技術術語。學會用簡潔明了的方式解釋問題。如果你能時刻把握主旨,那麼這一點也不是問題。

三、回答不出一些必知的基本技術問題

面試不是技術競賽,不是看誰答對的問題多,但是有一些「必須知道」的核心Java和Web基礎知識,你不能不知。例如,對於Java開發人員

1)不知道「==」和equals()之間的區別。

2)不知道equals()和hashCode()方法被隱式調用時的約定。

3)不知道OO的概念和設計原則。

4)不能很好地處理多線程。

5)不知道如何在HTTP客戶端與伺服器端之間保持狀態。

6)不能解釋曾投入精力過的應用程序的高層體系結構。

7)不知道SQL。

四、既寫不好簡單的代碼,又回答不出如何解決棘手的問題

作為一個開發人員,你應該根據自己的經驗水平,來針對給定的問題和情況編寫代碼。特別是如果碰到一個比較棘手的問題,那麼即使你還沒有解決方案,也應該將你的思路講給面試官聽。當然這在面試時會讓人特別緊張,尤其是在還有時間限制的情況下,但是你也必須保持冷靜,至少應該說明你將如何試著去解決問題的方法。

五、糟糕的禮儀和態度

遲到,不適宜的著裝,抖手抖腳,沒有眼神接觸,過於緊張,沒有提問,顯示不出對這份職業的興趣,「我什麼都知道」的高傲態度,貶低你的現在和以前的僱主,遇到技術問題時煩躁不安或者垂頭喪氣,為自己找理由而不是虛心接受錯誤,與面試官發生爭執,不好的肢體語言,隨波逐流而沒有自己的看法,過於呆板,撒謊,嗓門太大,無法成為良好的傾聽者,等等。

提示:面試官要找的不是技術明星,而是實實在在具備了合適的技術技能、軟技能、端正的態度以及能為企業獲取利益、全面的專業人才。因此,不妨先研究下想要應聘的機構,深入了解其工作規范以調整回答問題時的方向和重點。將每一場面試都當作免費的培訓課程,積極調整心態,不但能達到一個雙贏的局面,還可以減少緊張的情緒,從而獲得更好的表現。這樣即使你並沒有得到那份工作,也可以由此學到點什麼,獲得進步。

㈤ 聊聊Spring Boot面試相關問題

Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啟動器,開發者能快速上手。

Spring Boot 主要有如下優點:

啟動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,主要組合包含了以下 3 個註解:

@SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。

@EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能:

@SpringBootApplication(exclude= { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring組件掃描。

Spring JavaConfig 是 Spring 社區的產品,它提供了配置 Spring IoC 容器的純Java 方法。因此它有助於避免使用 XML 配置。使用 JavaConfig 的優點在於:

(1) 面向對象的配置。由於配置被定義為 JavaConfig 中的類,因此用戶可以

充分利用 Java 中的面向對象的功能。一個配置類可以繼承另一個,重寫它的

@Bean 方法等。

(2) 減少或消除 XML 配置。基於依賴注入原則的外化配置的好處已被證明。

但是,許多開發人員不希望在 XML 和 Java 之間來回切換。JavaConfig 為開發人員提供了一種純粹 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從

技術角度來講,只是使用 JavaConfig 配置類來配置容器是可行的,但實際上很多人認為將JavaConfig 與 XML 混合匹配是理想的。(3)類型安全和重構友好。JavaConfig 提供了一種類型安全的方法來配置

Spring容器。由於 Java 5.0 對泛型的支持,現在可以按類型而不是按名稱檢索 bean,不需要任何強制轉換或基於字元串的查找。

BFPP:BeanFactoryPostProcessor

BPP:BeanPostProcessor

BDRPP:

表達的總體思路是:總-分-總

1、springboot自動裝配是什麼,解決了什麼問題

2、自動裝配實現的原理:

1、當啟動springboot應用程序的時候, 會先創建SpringApplication的對象,在對象的構造方法中會進行某些參數的初始化工作,最主要的是判斷當前應用程序的類型以及初始化器和監聽器,在這個過程中會載入整個應用程序中的spring.factories文件,將文件的內容放到緩存對象中,方便後續獲取。

2、SpringApplication對象創建完成之後,開始執行run方法,來完成整個啟動,啟動過程中最主要的有兩個方法,第一個叫做prepareContext,第二個叫做refreshContext,在這兩個關鍵步驟中完整了自動裝配的核心功能,前面的處理邏輯包含了上下文對象的創建,banner的列印,異常報告期的准備等各個准備工作,方便後續來進行調用。

3、在prepareContext方法中主要完成的是對上下文對象的初始化操作,包括了屬性值的設置,比如環境對象,在整個過程中有一個非常重要的方法,叫做load,load主要完成一件事,將當前啟動類做為一個beanDefinition注冊到registry中,方便後續在進行BeanFactoryPostProcessor調用執行的時候,找到對應的主類,來完成@SpringBootApplicaiton,@EnableAutoConfiguration等註解的解析工作

4、在refreshContext方法中會進行整個容器刷新過程,會調用中spring中的refresh方法,refresh中有13個非常關鍵的方法,來完成整個spring應用程序的啟動,在自動裝配過程中,會調用方法,在此方法中主要是對類的處理,這次是BFPP的子類也是BDRPP的子類,在調用的時候會先調用BDRPP中的方法,然後調用postProcessBeanFactory方法,在執行的時候回解析處理各種註解,包含@PropertySource,@ComponentScan,@ComponentScans,@Bean,@Import等註解,最主要的是@Import註解的解析。

5、在解析@Import註解的時候,會有一個getImports的方法,從主類開始遞歸解析註解,把所有包含@Import的註解都解析到,然後在processImport方法中對Import的類進行分類,此處主要識別的時候AutoConfigurationImportSelect歸屬於ImportSelect的子類,在後續過程中會調用deferredImportSelectorHandler中的process方法,來完整EnableAutoConfiguration的載入。

6、上面是我對springboot自動裝配的簡單理解,面試官您看一下,我回答有沒有問題,幫我指點一下!

在 Spring Boot 裡面,可以使用以下幾種方式來載入配置。

1) properties文件;

2) YAML文件;

3) 系統環境變數;

等等……

YAML 是一種人類可讀的數據序列化語言。它通常用於配置文件。與屬性文件相比,如果我們想要在配置文件中添加復雜的屬性,YAML 文件就更加結構化,而且更少混淆。可以看出 YAML 具有分層配置數據。

YAML 現在可以算是非常流行的一種配置文件格式了,無論是前端還是後端,都可以見到 YAML 配置。那麼 YAML 配置和傳統的 properties 配置相比到底有哪些優勢呢?

相比 properties 配置文件,YAML 還有一個缺點,就是不支持 @PropertySource 註解導入自定義的 YAML 配置。

Spring Boot 推薦使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通過 @ImportResource 註解可以引入一個 XML 配置。 spring boot 核心配置文件是什麼?

bootstrap.properties 和 application.properties 有何區別 ?

單純做 Spring Boot 開發,可能不太容易遇到 bootstrap.properties 配置文

件,但是在結合 Spring Cloud 時,這個配置就會經常遇到了,特別是在需要載入一些遠程配置文件的時侯。

spring boot 核心的兩個配置文件:

bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 載入的,比 applicaton 優先載入,配置在應用程序上下文的引導階段生效。一般來說我們在 Spring Cloud Config 或者 Nacos 中會用到它。且 boostrap 裡面的屬性不

能被覆蓋;

application (. yml 或者 . properties): 由ApplicatonContext 載入,用於 spring boot 項目的自動化配置。

Spring Profiles 允許用戶根據配置文件(dev,test,prod 等)來注冊 bean。因此,當應用程序在開發中運行時,只有某些 bean 可以載入,而在

PRODUCTION中,某些其他 bean 可以載入。假設我們的要求是 Swagger 文檔僅適用於 QA 環境,並且禁用所有其他文檔。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。

為了在自定義埠上運行 Spring Boot 應用程序,您可以在

application.properties 中指定埠。server.port = 8090

為了實現 Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項,並且必須添加安全配置。它只需要很少的代碼。配置類將必須擴展

WebSecurityConfigurerAdapter 並覆蓋其方法。

跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發送 GET 請求,無法發送其他類型的請求,在 RESTful 風格的應用中,就顯得非常雞肋,因此我們推薦在後端通過 (CORS,Cross-origin resource sharing) 來解決跨域問題。這種解決方案並非 Spring Boot 特有的,在傳統的 SSM 框架中,就可以通過 CORS 來解決跨域問題,只不過之前我們是在 XML 文件中配置 CORS ,現在可以通過實現WebMvcConfigurer介面然後重寫addCorsMappings方法解決跨域問題。

項目中前後端分離部署,所以需要解決跨域的問題。

我們使用cookie存放用戶登錄的信息,在spring攔截器進行許可權控制,當許可權不符合時,直接返回給用戶固定的json結果。

當用戶登錄以後,正常使用;當用戶退出登錄狀態時或者token過期時,由於攔截器和跨域的順序有問題,出現了跨域的現象。

我們知道一個http請求,先走filter,到達servlet後才進行攔截器的處理,如果我們把cors放在filter里,就可以優先於許可權攔截器執行。

CSRF 代表跨站請求偽造。這是一種攻擊,迫使 終用戶在當前通過身份驗證的 Web 應用程序上執行不需要的操作。CSRF 攻擊專門針對狀態改變請求,而不是數據竊取,因為攻擊者無法查看對偽造請求的響應。

Spring boot actuator 是 spring 啟動框架中的重要功能之一。Spring boot 監視器可幫助您訪問生產環境中正在運行的應用程序的當前狀態。有幾個指標必須在生產環境中進行檢查和監控。即使一些外部應用程序可能正在使用這些服務來向相關人員觸發警報消息。監視器模塊公開了一組可直接作為 HTTP URL 訪問 的REST 端點來檢查狀態。

如何在 Spring Boot 中禁用 Actuator 端點安全性?

默認情況下,所有敏感的 HTTP 端點都是安全的,只有具有 ACTUATOR 角色

的用戶才能訪問它們。安全性是使用標準的 HttpServletRequest.isUserInRole 方法實施的。 我們可以使用來禁用安全性。只有在執行機構端點在防火牆後訪問時,才建議禁用安全性。

Spring Boot 提供監視器端點以監控各個微服務的度量。這些端點對於獲取有關應用程序的信息(如它們是否已啟動)以及它們的組件(如資料庫等)是否正常運行很有幫助。但是,使用監視器的一個主要缺點或困難是,我們必須單獨打開應用程序的知識點以了解其狀態或 健康 狀況。想像一下涉及 50 個應用程序的微服務,管理員將不得不擊中所有 50 個應用程序的執行終端。為了幫助我們處理這種情況,我們將使用位於的開源項目。 它建立在 Spring Boot Actuator 之上,它提供了一個 Web UI,使我們能夠可視化多個應用程序的度量。

WebSocket 是一種計算機通信協議,通過單個 TCP 連接提供全雙工通信信道。

1、 WebSocket 是雙向的 -使用 WebSocket 客戶端或伺服器可以發起消息發送。

2、 WebSocket 是全雙工的 -客戶端和伺服器通信是相互獨立的。

3、 單個 TCP 連接 -初始連接使用 HTTP,然後將此連接升級到基於套接字的連接。然後這個單一連接用於所有未來的通信

4、 Light -與 http 相比,WebSocket 消息數據交換要輕得多。

什麼是 Spring Data ?

Spring Data 是 Spring 的一個子項目。用於簡化資料庫訪問,支持NoSQL 和 關系數據存儲。其主要目標是使資料庫的訪問變得方便快捷。Spring Data 具有如下特點:

SpringData 項目支持 NoSQL 存儲:

SpringData 項目所支持的關系數據存儲技術:

Spring Boot Batch 提供可重用的函數,這些函數在處理大量記錄時非常重要,包括日誌/跟蹤,事務管理,作業處理統計信息,作業重新啟動,跳過和資源管理。它還提供了更先進的技術服務和功能,通過優化和分區技術,可以實現極高批量和高性能批處理作業。簡單以及復雜的大批量批處理作業可以高度可擴展的方式利用框架處理重要大量的信息。

FreeMarker 是一個基於 Java 的模板引擎, 初專注於使用 MVC 軟體架構進行動態網頁生成。使用 Freemarker 的主要優點是表示層和業務層的完全分離。程序員可以處理應用程序代碼,而設計人員可以處理 html 頁面設計。 後使用 freemarker 可以將這些結合起來,給出 終的輸出頁面。

對於集成 Spring Boot 和 ActiveMQ,我們使用依賴關系。 它只需要很少的配置,並且不需要樣板代碼。

Swagger 廣泛用於可視化 API,使用 Swagger UI 為前端開發人員提供在線沙箱。Swagger 是用於生成 RESTful Web 服務的可視化表示的工具,規范和完整框架實現。它使文檔能夠以與伺服器相同的速度更新。當通過 Swagger 正確定義時,消費者可以使用 少量的實現邏輯來理解遠程服務並與其進行交互。因此,Swagger消除了調用服務時的猜測。

前後端分離,如何維護介面文檔 ?

前後端分離開發日益流行,大部分情況下,我們都是通過 Spring Boot 做前後端分離開發,前後端分離一定會有介面文檔,不然會前後端會深深陷入到扯皮中。一個比較笨的方法就是使用 word 或者 md 來維護介面文檔,但是效率太低,介面一變,所有人手上的文檔都得變。在 Spring Boot 中,這個問題常見

的解決方案是 Swagger ,使用 Swagger 我們可以快速生成一個介面文檔網

站,介面一旦發生變化,文檔就會自動更新,所有開發工程師訪問這一個在線網站就可以獲取到 新的介面文檔,非常方便。

這可以使用 DEV 工具來實現。通過這種依賴關系,您可以節省任何更改,嵌入式tomcat 將重新啟動。Spring Boot 有一個開發工具(DevTools)模塊,它有助於提高開發人員的生產力。Java 開發人員面臨的一個主要挑戰是將文件更改自動部署到伺服器並自動重啟伺服器。開發人員可以重新載入 Spring Boot 上的更改,而無需重新啟動伺服器。這將消除每次手動部署更改的需要。

Spring Boot 在發布它的第一個版本時沒有這個功能。這是開發人員 需要的功能。DevTools 模塊完全滿足開發人員的需求。該模塊將在生產環境中被禁用。

它還提供 H2 資料庫控制台以更好地測試應用程序。

使用了下面的一些依賴項

spring-boot-starter-activemq

spring-boot-starter-security

這有助於增加更少的依賴關系,並減少版本的沖突。

Spring Boot 中的 starter 到底是什麼 ?

首先,這個 Starter 並非什麼新的技術點,基本上還是基於 Spring 已有功能來實現的。首先它提供了一個自動化配置類,一般命名為 XXXAutoConfiguration

,在這個配置類中通過條件註解來決定一個配置是否生效(條件註解就是

Spring 中原本就有的),然後它還會提供一系列的默認配置,也允許開發者根據實際情況自定義相關配置,然後通過類型安全的屬性注入將這些配置屬性注入進來,新注入的屬性會代替掉默認屬性。正因為如此,很多第三方框架,我們只需要引入依賴就可以直接使用了。當然,開發者也可以自定義 Starter spring-boot-starter-parent 有什麼用 ?

我們都知道,新創建一個 Spring Boot 項目,默認都是有 parent 的,這個

parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

Spring Boot 打成的 jar 和普通的 jar 有什麼區別 ?

Spring Boot 項目 終打包成的 jar 是可執行 jar ,這種 jar 可以直接通過 java jar xxx.jar 命令來運行,這種 jar 不可以作為普通的 jar 被其他項目依賴,即使依賴了也無法使用其中的類。

Spring Boot 的 jar 無法被其他項目依賴,主要還是他和普通 jar 的結構不同。普通的 jar 包,解壓後直接就是包名,包里就是我們的代碼,而 Spring Boot

打包成的可執行 jar 解壓後,在 BOOT-INFclasses 目錄下才是我們的代碼,因此無法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,將 Spring Boot 項目打包成兩個 jar ,一個可執行,一個可引用。

1) 打包用命令或者放到容器中運行

2) 用 Maven/ Gradle 插件運行

3)直接執行 main 方法運行

1) 繼承spring-boot-starter-parent項目

2) 導入spring-boot-dependencies項目依賴

Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實現一個 ControlerAdvice 類,來處理控制器類拋出的所有異常。

使用 Spring Boot 實現分頁非常簡單。使用 Spring Data-JPA 可以實現將可分頁的傳遞給存儲庫方法。

微服務中如何實現 session 共享 ?

在微服務中,一個完整的項目被拆分成多個不相同的獨立的服務,各個服務獨立部署在不同的伺服器上,各自的 session 被從物理空間上隔離開了,但是經

常,我們需要在不同微服務之間共享 session ,常見的方案就是 Spring

Session + Redis 來實現 session 共享。將所有微服務的 session 統一保存在 Redis 上,當各個微服務對 session 有相關的讀寫操作時,都去操作 Redis 上的 session 。這樣就實現了 session 共享,Spring Session 基於 Spring 中的代理過濾器實現,使得 session 的同步操作對開發人員而言是透明的,非常簡便。

定時任務也是一個常見的需求,Spring Boot 中對於定時任務的支持主要還是來自 Spring 框架。

在 Spring Boot 中使用定時任務主要有兩種不同的方式,一個就是使用 Spring 中的 @Scheled 註解,另一個則是使用第三方框架 Quartz。

使用 Spring 中的 @Scheled 的方式主要通過 @Scheled 註解來實現。

使用 Quartz ,則按照 Quartz 的方式,定義 Job 和 Trigger 即可。

㈥ Java編程常見面試題目,要求正確答案

第一,談談final, finally, finalize的區別。

final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。

finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。

第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?

匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。

第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。

Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.ASP?id=704&page=1

註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象

第四,&和&&的區別。

&是位運算符。&&是布爾邏輯運算符。

第五,HashMap和Hashtable的區別。

都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。

HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。

Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。

第六,Collection 和 Collections的區別。

Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。

第七,什麼時候用assert。

斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 AssertionError。它用於調試目的:

assert(a > 0); // throws an AssertionError if a <= 0

斷言可以有兩種形式:

assert Expression1 ;
assert Expression1 : Expression2 ;

Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:

Javac -source 1.4 Test.java

要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。

可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。

第八,GC是什麼? 為什麼要有GC? (基礎)。

GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:

System.gc()
Runtime.getRuntime().gc()

第九,String s = new String("xyz");創建了幾個String Object?

兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?

short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。

第十二,sleep() 和 wait() 有什麼區別? 搞線程的最愛

sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有更高的優先順序,(b)正在運行的線程因為其它原因而阻塞。

wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。

第十三,Java有沒有goto?

Goto?java中的保留字,現在沒有在java中使用。

第十四,數組有沒有length()這個方法? String有沒有length()這個方法?

數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。

第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?

方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。

第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?

Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。

equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。

第十七,給我一個你最常見到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

第十八,error和exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。

exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。

第十九,List, Set, Map是否繼承自Collection介面?

List,Set是

Map不是。

第二十,abstract class和interface有什麼區別?

聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。

介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。

第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

都不能

第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?

介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。

第二十三,啟動一個線程是用run()還是start()?

啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。

第二十四,構造器Constructor是否可被override?

構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

第二十五,是否可以繼承String類?

String類是final類故不可以繼承。

第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?

不能,一個對象的一個synchronized方法只能由一個線程訪問。

第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?

會執行,在return前執行。

第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?

有C背景的程序員特別喜歡問這種問題。

2 << 3

第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?

不對,有相同的hash code。

第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?

是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。

第三十二,編程題: 寫一個Singleton出來。

Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。

一般Singleton模式通常有幾種種形式:

第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。

public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}

第二種形式:

public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}

其他形式:

定義一個類,它的構造函數為private的,所有方法為static的。

一般認為第一種形式要更加安全些

第三十三 Hashtable和HashMap

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現

HashMap允許將null作為一個entry的key或者value,而Hashtable不允許

還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。

Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。

㈦ java程序員面試的問題

java面試題大全-基礎方面Java基礎方面:
1、作用域public,private,protected,以及不寫時的區別
答:區別如下:
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認為friendly
2、Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)
答:匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現
3、Static Nested Class 和 Inner Class的不同
答:Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
4、&和&&的區別
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)
5、Collection 和 Collections的區別
答:Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作
6、什麼時候用assert
答:assertion(斷言)在軟體開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟體發布後,assertion檢查通常是關閉的
7、String s = new String("xyz");創建了幾個String Object
答:兩個,一個字元對象,一個字元對象引用對象
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數最接近的長整數,參數加1/2後求其floor
9、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯
答:short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)short s1 = 1; s1 += 1;(可以正確編譯)
10、Java有沒有goto
答:java中的保留字,現在沒有在java中使用
11、數組有沒有length()這個方法? String有沒有length()這個方法
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法
12、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型
13、Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別
答:Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值
14、給我一個你最常見到的runtime exception
答:常見的運行時異常有如下這些ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
15、error和exception有什麼區別
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況
16、List, Set, Map是否繼承自Collection介面
答: List,Set是,Map不是
17、abstract class和interface有什麼區別
答:聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面
18、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized
答:都不能
19、介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)
答:介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數
20、構造器Constructor是否可被override
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading
21、是否可以繼承String類
答:String類是final類故不可以繼承
22、try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後
答:會執行,在return前執行
23、用最有效率的方法算出2乘以8等於幾
答:2 << 3
24、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
答:不對,有相同的hash code
25、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞
答:是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的
26、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich
27、ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
28、char型變數中能不能存貯一個中文漢字?為什麼?
答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一個中文是沒問題的
29、GC是什麼? 為什麼要有GC
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
30、float型float f=3.4是否正確?
答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4
31、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的映射
32、抽象類與介面?
答:抽象類與介面都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而介面則完全是一個標識(同時有多重繼承的功能)。
JAVA類實現序例化的方法是實現java.io.Serializable介面
Collection框架中實現比較要實現Comparable 介面和 Comparator 介面
33、STRING與STRINGBUFFER的區別。
答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字元串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法
34、談談final, finally, finalize的區別
答:final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally?再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)
finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的
35、面向對象的特徵有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。
4. 多態性:
多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
36、String是最基本的數據類型嗎
答:基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
37、int 和 Integer 有什麼區別
答:Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。
原始類型封裝類,booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble
引用類型和原始類型的行為完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的預設值。對象引用實例變數的預設值為 null,而原始類型實例變數的預設值與它們的類型有關
38、運行時異常與一般異常有何異同
答:異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
39、說出ArrayList,Vector, LinkedList的存儲性能和特性
答:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
40、HashMap和Hashtable的區別
答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。

閱讀全文

與spring程序員面試題目相關的資料

熱點內容
我的電腦文件夾打開方式 瀏覽:931
東莞加密u盤公司 瀏覽:137
graphvizlinux 瀏覽:438
智能手錶藍牙怎麼下載app 瀏覽:293
女程序員下班菜譜 瀏覽:260
加密貨幣買什麼比較靠譜 瀏覽:277
用圖片的地圖再編譯的地方 瀏覽:462
python監控系統進程 瀏覽:236
群暉怎麼取消照片共享文件夾 瀏覽:156
程序員那麼可愛第幾集陸璃懷孕 瀏覽:615
西門子st編程手冊 瀏覽:59
mt4編程書籍 瀏覽:21
單片機模擬實驗設置電壓 瀏覽:948
如何用電腦打開安卓手機內存 瀏覽:860
java數據訪問層 瀏覽:181
代碼優化是編譯程序的必要階段 瀏覽:623
程序員那麼可愛孩子還在嗎 瀏覽:513
以下哪些是資料庫編程技術 瀏覽:164
水冷壓縮冷凝機組 瀏覽:177
小米路由器app怎麼加黑名單 瀏覽:433