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

下載本文檔

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

文檔簡(jiǎn)介

JavaWeb程序員面試真題匯編43簡(jiǎn)答題1.

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

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

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

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

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

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

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

2.

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

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

3.

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

4.

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

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

publicenumSingleton{

INSTANCE;

publicvoiddo(){}

}

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

publicclassSingleton{

privateSingleton(){)

privatestaticclassSingletonCreator{

privatestaticSingletoninstance=newSingleton();

}

publicstaticSingletongetInstance(){

returnSingletonCreator.instance;

}

}

3)最簡(jiǎn)單的實(shí)現(xiàn)。不足是無論是否會(huì)用到都會(huì)創(chuàng)建這個(gè)對(duì)象。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance=newSingleton();

publicstaticSingletongetInstance(){

returninstance;

}

}

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

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance;

publicstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

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

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance;

publicsynchronizedstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

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

publicclassSingleton{

privateSingleton(){}

privatestaticvolatileSingletoninstance;

publicstaticSingletongetInstance(){

if(instance==null){

synchronized(Singleton.class){

if(instance==null){

instance=newSingleton();

}

}

}

returninstance;

}

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

5.

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

1)singleton:?jiǎn)卫J?,在SpringIoC容器中,使用singleton作用域的Bean將只有一個(gè)實(shí)例。

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

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

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

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

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

6.

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

7.

在服務(wù)提供方可以配置的消費(fèi)者端的屬性有哪些?正確答案:有如下四個(gè)屬性:

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

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

loadbalance:負(fù)載均衡策略,默認(rèn)隨機(jī)策略。

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

8.

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

9.

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

10.

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

11.

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

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

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

12.

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

防范CSRF攻擊的主要手段是識(shí)別請(qǐng)求者身份。這里推薦幾種方法。

●表單提交Token驗(yàn)證。

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

●驗(yàn)證碼驗(yàn)證。[考點(diǎn)]軟件安全知識(shí)

13.

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

●$(document).ready(function).

●$().ready(function).

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

14.

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

//先創(chuàng)建實(shí)現(xiàn)t_users表與User對(duì)象映射的RowMapper實(shí)現(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());[考點(diǎn)]SpringJDBC框架

15.

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

16.

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

17.

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

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

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

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

18.

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

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論