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

下載本文檔

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

文檔簡介

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

SpringProfiles的作用是什么?正確答案:SpringProfiles允許用戶根據(jù)不同的配置文件來注冊bean。指定不同的sprin(江南博哥)files.active值就可以加載不同的配置文件,例如,在測試環(huán)境中啟動服務(wù),在工程的perties中或在啟動參數(shù)中指定files.active值為test,就會加載perties中的配置參數(shù),同理,在生產(chǎn)環(huán)境啟動時,只需要指定files.active為prod,就會加載perties文件的配置參數(shù)。這樣就可以預(yù)先在不同的配置文件中配置好相應(yīng)參數(shù),在啟動時根據(jù)不同環(huán)境指定files.active的值來啟動,就可以加載需要的配置文件。讓服務(wù)在不同環(huán)境中使用不同的配置文件變得更簡單。[考點(diǎn)]SpringBoot

2.

SpringDataJPA與JPA的區(qū)別?正確答案:JPA(JavaPersistenceAPI)是一種持久層規(guī)范,也是EJB3規(guī)范的一部分,并不是一個ORM框架,只是定義了一些API,但沒提供具體實(shí)現(xiàn),它的作用是使得應(yīng)用程序以統(tǒng)一的方式訪問持久層。

SpringDataJPA是在JPA規(guī)范的基礎(chǔ)上提供了一個JPA數(shù)據(jù)訪問抽象,同時也大大簡化了持久層的CRUD操作。但它并不是一個JPA的實(shí)現(xiàn),Hibernate才是JPA的一個實(shí)現(xiàn)。

3.

如何理解網(wǎng)頁標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)的重要性?正確答案:網(wǎng)頁標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)都是為了能讓W(xué)eb發(fā)展的更健康,開發(fā)者遵循統(tǒng)一的標(biāo)準(zhǔn),降低開發(fā)難度和開發(fā)成本,有利于SEO,減少因?yàn)闉E用代碼導(dǎo)致各種BUG、安全問題,最終提高網(wǎng)站易用性。[考點(diǎn)]Html5與Web編程綜合

4.

SpringJDBC如何與Springboot集成?正確答案:在pom.xml文件添加SpringJDBC的starter依賴spring-boot-starter-jdbc,配置好數(shù)據(jù)源。在DAO類中注入JdbcTemplate,就完成了SpringJDBC與SpringBoot的集成。[考點(diǎn)]SpringJDBC框架

5.

Nginx是如何處理一個請求的?正確答案:首先,Nginx在啟動時,會解析配置文件,得到需要監(jiān)聽的端口與lP地址,然后在Nginx的Master進(jìn)程里面先初始化好這個監(jiān)控的Socket,再進(jìn)行Listen。然后再Fork出多個子進(jìn)程,子進(jìn)程會競爭Accept新的連接。此時,客戶端就可以向Nginx發(fā)起連接了。

當(dāng)客戶端與Nginx進(jìn)行三次握手,與Nginx建立好一個連接后,此時,某一個子進(jìn)程會Accept成功,然后創(chuàng)建Nginx對連接的封裝,即ngx_connection_t結(jié)構(gòu)體。接著,根據(jù)事件調(diào)用相應(yīng)的事件處理模塊,如HTTP模塊與客戶端進(jìn)行數(shù)據(jù)的交換。

最后,Nginx或客戶端來主動關(guān)掉連接,到此,一個連接請求就處理完成。[考點(diǎn)]Nginx

6.

什么是SpringCloud?使用SpringCloud有什么優(yōu)勢?正確答案:SpringCloud基于SpringBoot實(shí)現(xiàn),整合并管理各個微服務(wù),為各個微服務(wù)之間提供協(xié)調(diào)與配置管理、服務(wù)注冊與發(fā)現(xiàn)、熔斷限流、路由、事件消息總線、消息隊(duì)列、負(fù)載均衡、監(jiān)控、鏈路追蹤等集成服務(wù),是微服務(wù)架構(gòu)的完整解決方案。它整合了諸多被廣泛實(shí)踐和證明過的框架作為實(shí)施的基礎(chǔ)部件,并且自身也提供了很多優(yōu)秀的功能組件,從而形成一個完整的微服務(wù)架構(gòu)體系。[考點(diǎn)]SpringCloud與微服務(wù)架構(gòu)

7.

如何獲取瀏覽器與操作系統(tǒng)等信息?正確答案:HttpServletRequest提供了getHeader("User-Agent")來獲取瀏覽器的完整信息,想知道簡明的信息,仍然需要自己去處理。這里推薦一個好的工具類UserAgentUtils,能夠更容易地獲取更多更全面的信息。首先要引入依賴:

<dependency>

<groupId>eu.bitwalker</groupId>

<artifactId>UserAgentUtils</artifactId>

<version>1.21</version>

</dependency>

引入依賴后,就可以使用UserAgentUtils這個工具類了,它提供了很多方法來獲取信息。當(dāng)然也可以通過UserAgent來獲取很多信息。如:

UserAgentuserAgent=UserAgent.parseUserAgentString(request.getHeader("User-Agent"));

Browserbrowser=userAgent.getBrowser();

Versionversion=browser.getVersion(request.getHeader("User-Agent"));

這樣就獲取了瀏覽器信息與瀏覽器的版本信息。更多方法,讀者可以自行了解。這里主要是拋磚引玉。[考點(diǎn)]HTML5與Web編程綜合

8.

在Mongodb中如何刪除文檔?正確答案:Mongodb利用remove()方法刪除集合中的文檔??梢詮囊粋€集合中刪除所有文檔,刪除匹配一個條件的所有文檔,或者限制操作只刪除一條文檔。remove()方法有兩個可選參數(shù):

remove()方法參數(shù)名參數(shù)的含義deletioncriteria(可選)刪除文檔的標(biāo)準(zhǔn)。JustOne(可選)如果設(shè)為true或1,則只刪除一個文檔。默認(rèn)值false。刪除匹配條件的文檔,方法格式如:

>db.collection.remove({Key:value})

如果要刪除集合中的所有文檔,方法格式如:

>db.collection.remove({})

但是這時不會刪除索引,如果用drop()方法,則會刪除整個集合和所有索引。

刪除一條匹配條件的文檔,則只要將justOne參數(shù)設(shè)為1或true便可。如:

>db.collection.remove({Key:value},1)[考點(diǎn)]Mongodb

9.

如何禁用某個自動配置類?正確答案:使用注解@EnableAutoConfiguration的exclude屬性,可以禁用一個或多個特定的自動配置類。例如:

@EnableAutoConfiguration(exclude=(MyAutoConfig.class))

如果類不在類路徑上,開發(fā)者可以使用注解的excludeName屬性并指定完全限定名稱。例如:

@EnableAutoConfiguration(excludeName={Cat.class})

另外,在SpringBoot中使用spring.autoconfigure.exclude屬性可以配置要排除的自動配置類列表。在perties中如下配置(如多個用逗號分隔):

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration[考點(diǎn)]SpringBoot

10.

RabbitMQ消息基于什么傳輸?它的Message最大可達(dá)多大?正確答案:RabbitMQ使用信道的方式來傳輸數(shù)據(jù)。信道是建立在真實(shí)的TCP連接內(nèi)的虛擬連接,且每條TCP連接上的信道數(shù)量沒有限制。之所以不是直接基于TCP連接來傳輸數(shù)據(jù),是由于TCP連接的創(chuàng)建和銷毀開銷較大,且并發(fā)數(shù)受系統(tǒng)資源限制,會造成性能瓶頸。

根據(jù)AMQP協(xié)議規(guī)定,RabbitMQ消息體的大小由64-bit的值來指定,所以可以由此得出最大能發(fā)多大的數(shù)據(jù)了。[考點(diǎn)]消息隊(duì)列綜合

11.

下面是一道綜合題,要求寫出多種條件下的查詢SQL語句,這里仍以MySQL數(shù)據(jù)庫為基礎(chǔ),其他數(shù)據(jù)庫可參考實(shí)現(xiàn)。

假定公司有員工表employee和部門表department。employee表結(jié)構(gòu)如下:

createtableemployee(

idintprimarykey,

first_namevarchar(30),

last_namevarchar(30),

salaryfloat(8,2),//薪資

hireddatedate,//雇用日期

depidint);

department表結(jié)構(gòu)如下:

createtabledepartment(depidintprimarykey,depnamevarchar(50));

1)基于employee表寫出查詢:查出雇用日期在今年、工資在[1000,2000]之間、或員工姓名(last_name)以“Fu”開頭的所有員工的全部個人信息。

答案:查詢SQL為:

select*fromemployeewhereYear(hiredDate)=Year(now())or(salarybetween1000and200)orleft(last_name,3)='Fu';

2)基于上述employee表寫出查詢:查出部門平均工資大于1800元的部門的所有員工的全部個人信息。

答案:查詢SQL為:

select*fromemployeeawheredepidin(selectdepidfromemployeegroupbydepidhavingavg(salary)>1800);

3)基于employee表寫出查詢:查出個人工資高于其所在部門平均工資的員工,列出這些員工的全部個人信息及該員工工資高出部門平均工資的百分比。正確答案:查詢SQL為:

selecta.*,(a.salary-t.avgSalary)*100/a.salaryfromemployeea,(selectdepid,avg(salary)avgSalaryfromemployeegroupbydepid)twherea.depid=t.depidanda.salary>t.avgSalary;[考點(diǎn)]SQL語法與實(shí)戰(zhàn)

12.

什么是MVC模式?正確答案:MVC即模型(Model)-視圖(View)-控制器(Controller),MVC模式將一個應(yīng)用分成三個層即模型層、視圖層、控制層。視圖(View)層是與用戶交互界面,負(fù)責(zé)數(shù)據(jù)展現(xiàn)。業(yè)務(wù)流程的處理由模型層處理。控制層負(fù)責(zé)視圖層與模型層的交互(一般是一個Servlet)。MVC模式有助于管理復(fù)雜的應(yīng)用程序,可以在一個時間內(nèi)專門關(guān)注于程序?qū)崿F(xiàn)的一個方面。例如,開發(fā)人員可以在不依賴業(yè)務(wù)邏輯的情況下專注于視圖設(shè)計。同時也讓應(yīng)用程序的測試更加容易。MVC模式實(shí)現(xiàn)了數(shù)據(jù)展現(xiàn)與業(yè)務(wù)邏輯的分離,提高了系統(tǒng)的可移植性、維護(hù)性。

最典型的MVC模式就是JSP+Servlet+JavaBean的模式。

MVC框架處理請求的過程:首先控制器接受用戶的請求,調(diào)用相應(yīng)的模型來進(jìn)行業(yè)務(wù)處理,并返回數(shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來顯示處理的結(jié)果,并通過視圖呈現(xiàn)給用戶。[考點(diǎn)]綜合

13.

MyBatis如何獲取自增長主鍵?正確答案:MyBatis的insert方法默認(rèn)是返回一個代表插入行數(shù)的int值,自動生成的鍵值在方法執(zhí)行完后可以被賦值到傳入的參數(shù)對象中。但默認(rèn)是不傳入的,需要配置。如果是XML映射文件,則如下配置。

<insertid="insert"useGeneratedKeys="true"keyProperty="id">

如果是注解,則如下配置。

@Options(useGeneratedKeys=true,keyProperty="id")

intinsert();

兩種方式其實(shí)是一樣的,useGeneratedKeys指定是否獲取自增長主鍵,keyProperty指定主鍵列。[考點(diǎn)]MyBatis

14.

Struts2框架里創(chuàng)建Action類有幾種方法?正確答案:創(chuàng)建Action類有三種方法:

1)實(shí)現(xiàn)Action接口。

2)繼承ActionSupport類,這時必須實(shí)現(xiàn)execute()方法。

3)使用Struts2的元注解@Action。[考點(diǎn)]Struts2

15.

Nginx如何根據(jù)擴(kuò)展名限制程序和文件訪問?正確答案:出于安全性,Web項(xiàng)目需要限制對一些特定文件(如模板文件,配置文件等)的直接訪問。這些可以通過在Nginx中增加特定配置來做到。如下所示:

location~*\.(cfg|template|txt)${#cfg|template|txt就是需要限制訪問的文件擴(kuò)展名

denyall;

}[考點(diǎn)]Nginx

16.

定制Dockerfile需要注意些什么?正確答案:下面是一些定制Dockerfile的經(jīng)驗(yàn),與大家共享。

1)盡量讓每個鏡像的用途都比較集中、單一,避免構(gòu)造大而復(fù)雜、多功能的鏡像。

2)盡量選擇精簡小巧的基礎(chǔ)鏡像,否則鏡像可能很臃腫。例如,使用Java作為基礎(chǔ)鏡像,如果使用Java:8為基礎(chǔ)鏡像,工程鏡像可能達(dá)到600多MB大小;而使用Java:openJdk-8-jre只有100多MB大小。

3)提供詳細(xì)的注釋和維護(hù)者信息,方便別人使用。

4)不要使用latest,盡量使用明確的具體數(shù)字信息的版本號,這樣可以避免無法確認(rèn)具體版本號,利于統(tǒng)一環(huán)境。

5)使用.dockeringore文件來排除構(gòu)建鏡像時不需要的文件或目錄(如臨時和緩存文件等),讓鏡像更精簡。

6)調(diào)整合理的指令順序,在開啟緩存的情況下,內(nèi)容不變的指令盡量放在前面,這樣可以提高指令的復(fù)用性。

7)要讓Dockerfile文件盡量少受到外部源的干擾,盡量具有通用性,可通過定制接受合適的外部參數(shù)來增強(qiáng)文件的通用性。

8)盡量合并RUN指令,可以將多條RUN指令的內(nèi)容通過&&連接,這樣可以減少鏡像層數(shù)。[考點(diǎn)]Docker

17.

profile有何作用?具體如何使用?正確答案:profile可用來分析SQL性能的消耗分布情況。當(dāng)用explain無法解決SQL慢時,需要用profile來對SQL進(jìn)行更細(xì)致地分析,找出SQL所花的時間大部分消耗在了哪個部分,確認(rèn)SQL的性能瓶頸。

profile是在MySQL5.0.3版本以后才開放的,在MySQL5.7之后,profile信息將逐漸被廢棄,MySQL推薦使用performanceschema。

下面簡單介紹一下它的具體使用,推薦在MySQL的命令行工具下操作。

打開分析命令:

setprofiling=1;

然后可以執(zhí)行查詢SQL,可以一條或多條。

查看SQL語句的匯總分析命令:

showprofiles;

找到查詢所對應(yīng)的Query_ID,查看具體情況:

showprofileforquery2;

想查看完整的分析情況,執(zhí)行命令:

showprofileALLforquery2;

會顯示更多列的信息,可以重點(diǎn)看CPU和I/O等的具體信息,這里相關(guān)的信息太多,不一一介紹。

關(guān)閉分析命令:

setprofiling=0;

關(guān)閉之后,不再監(jiān)控后面的操作,但關(guān)閉之前的監(jiān)控信息會存在,也是可以用查看命令查看的。[考點(diǎn)]MySQL數(shù)據(jù)庫

18.

什么是SQL注入攻擊?如何防范SQL注入攻擊?正確答案:SQL注入(SQLInjection)是在輸入?yún)?shù)中添加SQL代碼,傳遞到服務(wù)器,這些輸入?yún)?shù)被拼接到SQL語句中,并能被數(shù)據(jù)庫解

溫馨提示

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

評論

0/150

提交評論