Java Web程序員面試真題匯編43_第1頁
Java Web程序員面試真題匯編43_第2頁
Java Web程序員面試真題匯編43_第3頁
Java Web程序員面試真題匯編43_第4頁
Java Web程序員面試真題匯編43_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

JavaWeb程序員面試真題匯編43簡答題1.

Kafka與傳統(tǒng)消息系統(tǒng)的區(qū)別是什么?正確答案:Kafka與傳統(tǒng)消息系統(tǒng)之間有如下區(qū)別。

1)Kafka持久化日志,這些日志可以被重復讀取和(江南博哥)長期保留。

2)Kafka是一個分布式系統(tǒng),它以集群的方式運行,具有高擴展性,在內(nèi)部通過復制數(shù)據(jù)提升容錯能力和高可用性。

3)Kafka支持對數(shù)據(jù)的實時流式處理。

4)Kafka每秒消息處理速度達到十萬級以上。其他消息系統(tǒng)遠沒有如此高的性能。

5)消息保留:傳統(tǒng)的隊列系統(tǒng)通常從隊列末尾處理完成后刪除消息。而Kafka中的消息即使在處理后仍然存在。這意味著Kafka中的消息不會因消費者收到消息而被刪除。

6)基于邏輯的處理:傳統(tǒng)隊列系統(tǒng)不允許基于類似消息或事件處理邏輯。ApacheKafka允許基于類似消息或事件處理邏輯。[考點]消息隊列綜合

2.

如何處理可以讓某個方法請求的參數(shù)中始終包含特定字符串如"my=dev"?正確答案:可以通過在方法的@RequestMapping注解中進行參數(shù)屬性配置來實現(xiàn),示例如下:

@RequestMapping(params="my=dev")[考點]SpringMVC

3.

Mongodb哪個命令可以切換、創(chuàng)建數(shù)據(jù)庫?正確答案:Mongodb用use命令可以切換及創(chuàng)建數(shù)據(jù)庫,命令格式:use數(shù)據(jù)庫名稱。如果不存在該數(shù)據(jù)庫,use會創(chuàng)建一個新的數(shù)據(jù)庫,如果該數(shù)據(jù)庫存在,則切換到這個數(shù)據(jù)庫,并返回這個數(shù)據(jù)庫。[考點]Mongodb

4.

請寫出單例模式的具體Java代碼實現(xiàn)。正確答案:單例模式總結(jié)起來有很多種寫法,最簡單、高效的是用枚舉法,這里介紹6種寫法,使用哪一種寫法,讀者朋友可以根據(jù)自己的需要來選擇。

1)枚舉實現(xiàn)。

publicenumSingleton{

INSTANCE;

publicvoiddo(){}

}

2)用靜態(tài)內(nèi)部類來實現(xiàn),保證了只會在調(diào)用時初始化,并且只會初始化一次。

publicclassSingleton{

privateSingleton(){)

privatestaticclassSingletonCreator{

privatestaticSingletoninstance=newSingleton();

}

publicstaticSingletongetInstance(){

returnSingletonCreator.instance;

}

}

3)最簡單的實現(xiàn)。不足是無論是否會用到都會創(chuàng)建這個對象。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance=newSingleton();

publicstaticSingletongetInstance(){

returninstance;

}

}

4)滿足了使用時才創(chuàng)建實例的條件,但多線程訪問時可能會產(chǎn)生創(chuàng)建多個實例問題。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance;

publicstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

5)解決了多線程的問題,但是會造成同步阻塞。降低了性能。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance;

publicsynchronizedstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

6)使用volatile關(guān)鍵字,并只有在判斷實例為空真正創(chuàng)建對象時加用同步鎖。

publicclassSingleton{

privateSingleton(){}

privatestaticvolatileSingletoninstance;

publicstaticSingletongetInstance(){

if(instance==null){

synchronized(Singleton.class){

if(instance==null){

instance=newSingleton();

}

}

}

returninstance;

}

}[考點]關(guān)于設(shè)計模式

5.

Spring中Bean有哪幾種作用域?正確答案:Spring支持5種作用域。singleton與prototype是基本作用域,適用于所有Bean,singleton是Spring默認的作用域;Request、Session和globalSession是Web作用域,只有在Web應用中使用Spring時,這三個作用域才有效?,F(xiàn)分別介紹如下。

1)singleton:單例模式,在SpringIoC容器中,使用singleton作用域的Bean將只有一個實例。

2)prototype:原型模式,每次注入,SpringIoC容器都將創(chuàng)建一個新的Bean實例。

3)request:對于每次HTTP請求,使用request作用域的Bean都會創(chuàng)建一個新實例,即每次HTTP請求將會產(chǎn)生不同的Bean實例。

4)session:對于每次HTTPSession,使用session作用域的Bean都會創(chuàng)建一個新實例。

5)globalSession:同一個全局的HTTPSession,只會創(chuàng)建一個新實例。典型情況下,僅在使用portletcontext時有效。

比較常用的是singleton和prototype兩種作用域。Spring默認使用singleton作用域,容器會管理Bean的整個生命周期。而使用prototype作用域時,容器創(chuàng)建實例交給調(diào)用組件后,將不再管理維護該實例。使用singleton作為作用域的好處是可以節(jié)省頻繁創(chuàng)建與銷毀實例的開銷。但要注意,在單例模式下,Bean是線程不安全的。[考點]Spring基礎(chǔ)

6.

在Java開發(fā)中如何獲取數(shù)據(jù)庫的元信息?正確答案:數(shù)據(jù)庫連接的getMetaData()方法可以取得數(shù)據(jù)庫的元信息對象DatabaseMetaData,DatabaseMetaData中有很多方法,通過它們可以獲取到數(shù)據(jù)庫的產(chǎn)品名稱、版本號、配置信息等。[考點]JDBC相關(guān)

7.

在服務提供方可以配置的消費者端的屬性有哪些?正確答案:有如下四個屬性:

timeout:方法調(diào)用超時時間。

retries:調(diào)用失敗重試次數(shù),默認重試2次。

loadbalance:負載均衡策略,默認隨機策略。

actives:消費者端最大并發(fā)調(diào)用限制。[考點]Dubbo框架

8.

在Java中如何創(chuàng)建一個JDBC數(shù)據(jù)庫連接?正確答案:創(chuàng)建連接,首先要注冊目標數(shù)據(jù)庫的驅(qū)動(Class.forName),然后通過DriverManager來創(chuàng)建并管理連接。DriverManager類是JDBC的管理類,該類負責加載、注冊JDBC驅(qū)動程序,創(chuàng)建和管理數(shù)據(jù)庫連接。獲取連接方法:DriverManager.getConnection(StringURL,Stringuser,Stringpassword),有三個參數(shù),后面是數(shù)據(jù)庫的用戶名和密碼,URL是數(shù)據(jù)庫連接字符串。[考點]JDBC相關(guān)

9.

JDBC中的CLOB和BLOB數(shù)據(jù)類型分別代表什么?正確答案:BLOB和CLOB都是大字段類型,BLOB是以二進制來存儲的,CLOB可以直接存儲文字。[考點]JDBC相關(guān)

10.

如何使用iQuery設(shè)置一個屬性值?正確答案:iQuery設(shè)置一個屬性值也是用attr()方法。形如attr(name,value),它得有兩個參數(shù),前面為屬性名,后面是屬性值。假定有<img/>元素,id為imgid,示例代碼為$('#imgid').attr('src','/img/test.jpg'),這樣就給<img/>的src屬性進行了賦值。[考點]AJAX與JavaScript

11.

SpringBoot自動配置原理是什么?正確答案:SpringBoot的核心就是自動配置,自動配置又是基于條件判斷來配置Bean。而自動配置的源碼在spring-boot-autoconfigure-*.jar中。

1)開啟自動配置的注解是@EnableAutoConfiguration,已包含在啟動類的注解@SpringBootApplication中,所以SpringBoot默認已開啟自動配置功能。

2)只要用戶已經(jīng)添加了相關(guān)jar依賴項,@EnableAutoConfiguration這個注解會“猜”用戶將如何配置Spring。如果spring-boot-starter-web已經(jīng)添加Tomcat和SpringMVC,這個注釋就會自動假設(shè)用戶在開發(fā)一個Web應用程序并添加相應的Spring配置,會自動去Maven依賴中讀取每個starter中的spring.factories文件,該文件中配置了所有需要被創(chuàng)建的Spring容器中的Bean。[考點]SpringBoot

12.

什么是CSRF攻擊?如何防范CSRF攻擊?正確答案:CSRF(Cross—SiteRequestForgery),即跨站點請求偽造,攻擊者通過跨站請求,在合法用戶不知情的情況下,以合法用戶的身份偽造請求進行非法操作。其核心是利用了瀏覽器Cookie或服務器Session策略,盜取用戶身份。

防范CSRF攻擊的主要手段是識別請求者身份。這里推薦幾種方法。

●表單提交Token驗證。

●HTTP請求頭的Referer域檢查(Referer記錄著請求來源,可以通過檢查請求來源來驗證請求是否合法,如很多網(wǎng)站用此方法來實現(xiàn)圖片防盜鏈)。

●驗證碼驗證。[考點]軟件安全知識

13.

$(document).ready()函數(shù)的作用是什么?正確答案:ready()函數(shù)僅能用于當前文檔,它規(guī)定當ready事件發(fā)生時執(zhí)行的代碼。當DOM(文檔對象模型)已經(jīng)加載,并且頁面(包括圖像)已經(jīng)完全呈現(xiàn)時,會發(fā)生ready事件。由于該事件在文檔就緒后發(fā)生,因此把所有其他的iQuery事件和函數(shù)置于該事件中是非常好的做法。ready()函數(shù)有三種語法。

●$(document).ready(function).

●$().ready(function).

●$(function)。[考點]AJAX與JavaScript

14.

SpringJDBC如何把ResultSet對象中的數(shù)據(jù)映射為Java對象?正確答案:通過使用RowMapper可以做到??墒褂媒涌趯崿F(xiàn)類或匿名內(nèi)部類(如果只使用一次)來實現(xiàn)RowMapper。示例如下:

//先創(chuàng)建實現(xiàn)t_users表與User對象映射的RowMapper實現(xiàn)類

publicclassUserRowMapperimplementsRowMapper<User>{

@Override

PublicUsermapRow(ResultSetrs,introwNum)throwsSQLException{

Useruser=newUser();

user.setUserId(rs.getInt("id"));

user.setUserName(rs.getString("user_name"));

returnuser;

}

}

然后就可以使用SpringJDBC執(zhí)行SQL查詢了:

Stringsql="select*fromt_users";

List<user>list=jdbcTemplate.query(sql,newUserRowMapper());[考點]SpringJDBC框架

15.

什么是復制?正確答案:復制是將數(shù)據(jù)同步到多個服務器的過程,通過多個數(shù)據(jù)副本存儲到多個服務器上,增加數(shù)據(jù)可用性。復制可以保障數(shù)據(jù)的安全性,災難恢復,無須停機維護(如備份、重建索引、壓縮),分布式讀取數(shù)據(jù)。[考點]MongoDB

16.

Producer是否直接將數(shù)據(jù)發(fā)送到Broker的Leader?正確答案:Producer只需要將數(shù)據(jù)發(fā)送到Broker的Leader,為了幫助Producer做到這點,所有的Broker都可以及時的告知:哪些是活動的,目標Topic目標分區(qū)的Leader在哪。這樣Producer就可以直接將消息發(fā)送到目的地了。[考點]Kafka

17.

什么是TPS、QPS?正確答案:QPS和TPS是衡量網(wǎng)站性能和吞吐量的指標。

QPS(QueriesPerSecond),即每秒查詢率是一臺服務器每秒能夠響應的查詢次數(shù),是對一個特定的查詢服務器在規(guī)定時間內(nèi)所處理流量多少的衡量標準。也就是最大吞吐能力。

TPS(TransactionsPerSecond),即每秒事務數(shù)。它是軟件測試結(jié)果的測量單位。一個事務是指一個客戶機向服務器發(fā)送請求然后服務器做出響應的過程,客戶機在發(fā)送請求時開始計時,收到服務器響應后結(jié)束計時,以此來計算使用的時間和完成的事務個數(shù)。

QPS與TPS兩者有所不同,一個TPS可能對應一個QPS,也可能對應多個QPS。對于一個頁面的一次訪問請求,形成一個TPS,但一次頁面請求,如果發(fā)生多次對服務器的請求,那服務器完成的每一次請求,就是一個QPS。[考點]電商與互聯(lián)網(wǎng)相關(guān)知識

18.

Kafka的使用場景有哪些?正確答案:Kafka由于它的眾多優(yōu)點,有著廣泛的應用場景。如下所述。

日志聚合:收集各種服務的日志寫入Kafka的消息隊列進行存儲,各種日志處理應用通過Consumer訂閱并獲取隊列中的消息進行處理。因為在生產(chǎn)環(huán)境中,為了監(jiān)控日志,會有大量的日志需要傳輸存儲檢索(很多公司采用著名的日志系統(tǒng)ELK),在分布式應用中由于日志的數(shù)量級越來越大,存儲起來對速度的要求也越來越高,這時使用消息隊列作為中間件能解決大量日志傳輸?shù)膯栴}。

消息系統(tǒng):由于其高吞吐量、高可靠性、高擴展性等特點,被廣泛用作消息中間件。

網(wǎng)站活動跟蹤:經(jīng)常有互聯(lián)網(wǎng)系統(tǒng)用Kafka來記錄Web用戶或App用戶的各種活動數(shù)據(jù),如瀏覽網(wǎng)頁、搜索、點擊等,將這些活動信息發(fā)布到Kafka的Topic中,然后Consumer通過訂閱這些Topic來做實時處理或監(jiān)控分析,或者加載到大數(shù)據(jù)系統(tǒng)做離線分析和數(shù)據(jù)挖掘。

運營指標監(jiān)控:Kafka也適合用來記錄生產(chǎn)運營監(jiān)控數(shù)據(jù)。從各分布式應用中聚合數(shù)據(jù)然后集中處理。

系統(tǒng)解耦:在重要操作完成后,發(fā)送消息,由別的服務系統(tǒng)來完成其他操作。如訂單系統(tǒng)下單完成后給短信系統(tǒng)發(fā)送消息,訂單系統(tǒng)只需要將消息發(fā)送到分布式消息隊列即可。短信系統(tǒng)從消息隊列獲取消息后,根據(jù)消息內(nèi)容給用戶發(fā)送下單成功短信。短信系統(tǒng)與訂單系統(tǒng)相互不直接耦合交互,甚至不需要知道對方系統(tǒng)的存在,都只單獨與消息隊列發(fā)生關(guān)系。這樣就發(fā)揮了分布式系統(tǒng)的優(yōu)點,從而提高了系統(tǒng)整體性能,也實現(xiàn)了應用系統(tǒng)之間的解耦合。同時,在消息隊列兩端,新增相關(guān)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論