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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

什么是多租戶技術?Kafka是否支持多租戶?正確答案:多租戶技術(multi-tenancytechnology)是一種軟件架構技術,它是實現如(江南博哥)何在多用戶的環境下共用相同的系統或程序組件,并且仍可確保各用戶間數據的隔離性。

我們可以將Kafka部署為多租戶解決方案。做法是:通過配置哪個主題可以生產或消費數據來啟用多租戶,也有對配額的操作支持。管理員可以對請求定義和強制配額,以控制客戶端使用的Broker資源。[考點]Kafka

2.

Rest和RPC各有什么優缺點?正確答案:RPC最大的缺點是服務提供方和調用方之間存在強依賴,需要為每一個服務進行接口的定義,需要嚴格的版本控制才能防止因為版本不一致而在服務提供方和調用方之間產生沖突。RPC的優點是可以使請求報文體積更小,一般以二進制傳輸,性能比較高。

而Rest是輕量級的解耦合的接口,服務的提供方和調用方不存在代碼之間的依賴問題,雙方可以通過約定好的規則進行獨立開發,但是要避免出現文檔和接口不一致而導致的服務集成問題。Rest相對也更容易上手。

Rest接口一般是用JSON格式的文本傳遞報文,體積相對較大,性能相對較低。[考點]SpringCloud與微服務架構

3.

如何使用IK中文分詞器?如何實現詞庫熱更新?正確答案:IK分詞器有兩種分詞模式:ik_max_word和ik_smart模式。ik_max_word會將文本做最細粒度的拆分,ik_smart會將文本做最粗粒度的拆分。兩種分詞器使用的最佳實踐是:索引時用ik_max_word模式,搜索時用ik_smart模式,即索引時最大化地將文章內容分詞,搜索時更精確地搜索到想要的結果。

IK分詞器有良好的擴展性,支持添加自定義詞庫和停用詞庫。詞庫文件的擴展名是.dic,在配置文件IKAnalyzer.cfg.xml進行簡單配置就能做到擴展或停止詞庫,配置示例如下:

<properties>

<comment>IKAnalyzer擴展配置</comment>

<!--用戶可以在這里配置自己的擴展詞庫-->

<entrykey="ext_dict">myext.dic</entry>

<!--用戶可以在這里配置自己的擴展停止詞詞庫-->

<entrykey="ext_stopwords"></entry>

<!--用戶可以在這里配置遠程擴展詞詞庫-->

<!--<entrykey="remote_ext_dict">words_location</entry>-->

<!--用戶可以在這里配置遠程擴展停止詞詞庫-->

<!--<entrykey="remote_ext_stopwords">words_location</entry>-->

</properties>

當然,完成配置后,需要重啟ES服務才行。更新完成后,以后就可以進行詞庫的熱更新了,只要修改已配置的詞庫文件,無須重啟ES服務,大約一分鐘左右就可以看到更新效果了。[考點]Elasticsearch

4.

如何避免Jsp頁面自動生成Session對象?為什么要這么做?正確答案:默認情況下,對一個Jsp頁面發出請求,如果Session還沒有建立,那么Jsp頁面會自動為請求創建一個Session對象。但是Session是比較消耗資源的,如果不需要使用Session,就不應該創建Session,例如一些只用來宣傳產品的網頁,往往無需使用Session,這時可在Jsp中使用page指令進行設置,代碼如:<%@pageSession="false"%>,就可避免Jsp頁面為每個請求自動創建Session。[考點]JavaWeb基礎

5.

什么是緩存預熱?正確答案:緩存預熱就是系統上線時,提前將相關的緩存數據直接加載到緩存系統。而不是等到用戶請求時,才將查詢數據進行緩存,這樣用戶請求可直接查詢事先被預熱的緩存數據。

緩存預熱的方式可以有如下幾種。

●直接編寫緩存刷新頁面,上線時手工操作。

●數據量不大時,可以在項目啟動時自動進行加載。

●定時刷新緩存。[考點]NoSQL與緩存綜合

6.

什么是重定向攻擊?正確答案:重定向攻擊是指受害者的計算機被定向到其他網站而非目標網站,這可通過操縱DNS服務器中的緩存、本地系統中的DNS緩存或者修改本地系統中主機文件來完成。

鏈接操控的釣魚攻擊其實也是一種重定向攻擊。

常見的防范措施是白名單,將合法的要重定向的URL加到白名單中,非白名單上的域名重定向時拒之,第二種解決方案是重定向Token,在合法的URL上加上Token,重定向時進行驗證。[考點]軟件安全知識

7.

如何保證數據讀寫的原子性?正確答案:進行數據庫讀寫操作時,利用數據庫引擎提供的事務和回滾機制,可以保證數據庫跨表操作的原子性。[考點]關系型數據庫知識

8.

SpringCloudConfig如何實現自動刷新?正確答案:SpringCloudConfig客戶端結合消息總線SpringCloudBus可以實現自動刷新。以RabbitMQ為例,首先添加依賴spring-cloud-starter-bus-amqp,spring-boot-starter-actuator也必不可少,并在配置文件中配置好RabbitMQ相關屬性參數。暴露bus-refresh端點(1.*版是/bus/refresh),即配置Management.endpoints.Web.exposure.include的屬性值要包含bus-refresh,或者是'*'。也可以只刷新指定應用如/bus-refresh?destination=micro-provider:**,這樣只會刷新S為micro-provider的所有實例。

配置好后,需要刷新配置信息,在類上添加注解@RefreshScope,修改config服務端配置后,使用curl(或其他方式)執行Post請求。

curl-XPosthttp://localhost:8080/actuator/bus-refresh

注意:localhost:8000是某一Config客戶端的服務地址。[考點]SpringCloud與微服務架構

9.

Myisamchk是用來做什么的?正確答案:使用Myisamchk實用程序,可以檢查、修復或優化Myisam表。如果你使用Myisamchk修復或優化表,你必須總是保證MySQL服務器不在使用表(如果你正在使用--skip-locking,這也適用)。如果你不停掉MySQL,在你運行Myisamchk前,你至少應該做一個mysqladminflush-tables。

也可使用命令optimizetables優化并修復表,但是這不如Myisamchk快或可靠(在真正的致命錯誤的情況下)。但optimizetables的好處是較易使用并且不必關心清空表。[考點]MySQL數據庫

10.

頁面導入樣式時,使用link和@import有什么區別?正確答案:兩者主要有以下四點區別。

1)link是XHtml標簽,除了加載CSS外,還可以定義RSS等其他事務,@import屬于CSS范疇,只能加載CSS。

2)link引用CSS時,在頁面載入時同時加載,@import需要頁面網頁完全載入以后加載。

3)link是XHtml標簽,無兼容問題;@import是在CSS2.1提出的,低版本的瀏覽器不支持。

4)link支持使用JavaScript控制DOM去改變樣式,而@import不支持。[考點]HTML5與Web編程綜合

11.

Struts2的常用注解有哪些?正確答案:@ParentPackage注解,對應xml配置文件中的package的父包,一般需要繼承struts-default。

@Action注解,對應<action>節點。創建Action,這個注解可以應用于Action類上,也可以應用于方法上。

@Actions注解,配置一個類為多個Action。

@Namespace注解,用于創建不同的模塊,對應<package>的namespace屬性。

@Result注解,對應了<result>節點,用于結果頁面。[考點]Struts2

12.

SpringBoot加密組件jasypt如何使用?正確答案:加密組件jasypt的使用方法如下:

1)在SpringBoot項目中使用jasypt組件對敏感信息加密,使用jasypt組件首先添加依賴項jasypt-spring-boot-starter,不同JDK版本也要選擇不同版本的Starter(JDK6對應版本為1.5-Java6,JDK7對應版本為1.5-Java7,JDK8可使用1.8或以上版本)。

2)然后在配置文件中配置加密密鑰:

jasypt.encryptor.password=yourjasypt

當然,在配置文件中配置加密密鑰是不太安全的,可以在啟動參數傳入:

-Djasypt.encryptor.password=yourjasypt-jarxxx.jar

也可以寫在啟動類中,在啟動類的main函數中增加一行代碼如下:

System.setProperty("jasypt.encryptor.password","yourjasypt");

另外,如果是在Tomcat中啟動,也可以在Tomcat的啟動文件中的JAVA_OPTS中設置加密參數,在Windows環境下,在catalina.bat文件頭部加入:

set"JAVA_OPTS=%JAVA_OPTS%-Djasypt.encryptor.password=yourjasypt"

在Linux環境下,在Tomcat啟動文件catalina.sh文件頭部加入:

JAVA_OPTS="$JAVA_OPTS-Djasypt.encryptor.password=yourjasypt"

3)使用組件提供的工具類PooledPBEStringEncryptor可生成加密串:

/**

*這個方法是直接使用加密密鑰生成加密串

*@parampassword加密密鑰

*@paramvalue加密值

*/

publicstaticStringencyptPwd(Stringpassword,Stringvalue){

PooledPBEStringEncryptorencryptor=newPooledPBEStringEncryptor();

encryptor.setConfig(cryptor(password));

returnencryptor.encrypt(value);

}

如果不想通過工具類來獲取加密后的字符串,也可以在項目中編寫測試類來獲取:

@RestController

publicclassIndexController{

@Autowired

privateStringEncryptorencryptor;

@GetMapping("/myjasypt")

publicvoidtestMyjasypt(){

Stringpassword="111111";

StringencryptPwd=encryptor.encrypt(password);

System.out.println("加密后:"+encryptPwd);

System.out.println("解密后:"+encryptor.decrypt(encryptPwd));

}

}

啟動后通過瀏覽器訪問該地址,就會在控制臺輸出字符串"111111"進行加密后和解密后的值。

生成加密字符串的方式很多,也可以用命令行生成,讀者可自行了解。

4)然后將生成的加密字符串配置到配置文件對應的參數即可,要加上約定的關鍵字ENC,格式如:

password=ENC(ln6hgzpDZItgjjojAntHqsYPFjkkkTew==)

只要帶上約定關鍵字的屬性,都會被用加密密鑰去解密。假定之前生成的是數據庫密碼,并將加密字符串配置到配置文件的參數spring.mysql.datasource.password中,這時可以通過測試類來驗證加密字符串的正確性:

@RestController

publicclassIndexController{

@Value("${spring.mysql.datasource.password}")

privateStringdbPassword;

@GetMapping("/password")

publicStringpassword(){

returndbPassword;

}

}

啟動項目后,訪問該地址,返回的結果就是數據庫密碼的明文"111111"。[考點]SpringBoot

13.

Spring支持哪些事務管理方式?實現原理是什么?正確答案:Spring的事務管理方式有編程式事務管理和聲明式事務管理兩種。編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對于編程式事務管理,Spring推薦使用TransactionTemplate管理事務。

Spring聲明式事務管理建立在AOP之上的。其本質是對方法前后進行攔截,然后在目標方法開始之前創建或者加入一個事務,在執行完目標方法之后根據執行情況提交或者回滾事務。聲明式事務最大的優點就是不需要通過編程的方式管理事務,程序員只需要專注于業務邏輯的實現,只需在配置文件中做相關的事務規則聲明(或通過基于注解的方式),便可以將事務規則應用到業務邏輯中。

Spring實現聲明式事務管理主要有兩種方式。

1)基于XML方式的聲明式事務管理。

2)通過Annotation注解方式的事務管理。注解方式管理事務時所用的注解為@Transactional。注解可用在類上和方法上。

注解標注在類前,標示類中所有方法都進行事務處理。

注解標注在接口、實現類的方法前,標示方法進行事務處理。[考點]Spring基礎

14.

MongoDB中的命名空間是什么意思?正確答案:MongoDB內部有預分配空間的機制,每個預分配的文件都用0進行填充。

數據文件每新分配一次,它的大小都是上一個數據文件大小的兩倍,每個數據文件最大2GB。

MongoDB每個集合和每個索引都對應一個命名空間,這些命名空間的元數據集中在16M的*.ns文件中,平均每個命名占用約628字節,也即整個數據庫的命名空間的上限約為24000。

如果每個集合有一個索引(如默認的_id索引),那么最多可以創建12000個集合。如果索引數更多,則可創建的集合數就更少了。同時,如果集合數太多,一些操作也會變慢。

要建立更多的集合,MongoDB也是支持的,只需要在啟動時加上“--nssize”參數,這樣對應數據庫的命名空間文件就可以變得更大以便保存更多的命名。這個命名空間文件(.ns文件)最大可以為2G。

每個命名空間對應的盤區不一定是連續的。與數據文件增長相同,每個命名空間對應的盤區大小都是隨分配次數不斷增長的。目的是為了平衡命名空間浪費的空間與保持一個命名空間數據的連續性。

需要注意的一個命名空間是$freelist,這個命名空間用于記錄不再使用的盤區(被刪除的Collection或索引)。每當命名空間需要分配新盤區時,會先查看$freelist是否有大小合適的盤區可以使用,如果有就回收空閑的磁盤空間。[考點]MongoDB

15.

如何防止表單重復提交?正確答案:可以通過使用Session來實現。

1)在進入JSP頁面時生成一個隨機值并保存到Session中,同時將其設置為表單的一個隱藏域的值,隨表單提交。

2)在處理表單提交請求時,獲取Session中的值,獲取提交表單對應隱藏域的參數值,比較兩者是否相同,如果相同說明不是重復提交,則繼續執行請求且刪除Session中保存的值,如果不相同則是重復提交,返回提示不能重復提交。[考點]JavaWeb基礎

16.

Redis執行AOF持久化執行時調用了哪個函數?AOF文件的內容是什么?正確答案:Redis執行AOF持久化時會調用flushAppendOnlyFile函數,這個函數執行以下兩個工作來寫入保存。

write:根據條件將aof_buf中的緩存寫入AOF文件。

save:根據條件調用fsync或fdatasync函數,將AOF文件保存到磁盤中。

AOF文件以日志的形式記錄Redis服務端每一個寫、刪除操作,不包括查詢操作。記錄內容是Redis通信協議(RESP)格式的命令文本。RESP是Redis客戶端和服務端之前使用的一種通信協議,RESP實現簡單、快速解析、可讀性好。[考點]Redis

17.

AJAX和JavaScript有什么區別?正確答案:AJAX是一種創建交互式網頁應用的開發技術,JavaScript是其中的關鍵技術。AJAX可以實現網頁的無跳轉異步刷新,給用戶帶來良好的操作體驗,在Web前端開發中被廣泛使用。

JavaScript是一種解釋性腳本語言(代碼不進行預編譯),可以在瀏覽器端和服務端(Node.js)執行,是一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分。被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。[考點]AJAX與JavaScript

18.

代理的優點有哪些?代理有哪些實現方式?兩者有何不同?正確答案:代理分為靜態代理和動態代理。

靜態代理就是代理類在程序運行前就已經存在的代理方式,在運行前要編寫好代碼。靜態代理中的代理類和委托類會實現同一接口或是派生自相同的父類

溫馨提示

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

評論

0/150

提交評論