




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JavaWeb程序員面試真題匯編40簡(jiǎn)答題1.
SpringProfiles的作用是什么?正確答案:SpringProfiles允許用戶根據(jù)不同的配置文件來(lái)注冊(cè)bean。指定不同的sprin(江南博哥)files.active值就可以加載不同的配置文件,例如,在測(cè)試環(huán)境中啟動(dòng)服務(wù),在工程的perties中或在啟動(dòng)參數(shù)中指定files.active值為test,就會(huì)加載perties中的配置參數(shù),同理,在生產(chǎn)環(huán)境啟動(dòng)時(shí),只需要指定files.active為prod,就會(huì)加載perties文件的配置參數(shù)。這樣就可以預(yù)先在不同的配置文件中配置好相應(yīng)參數(shù),在啟動(dòng)時(shí)根據(jù)不同環(huán)境指定files.active的值來(lái)啟動(dòng),就可以加載需要的配置文件。讓服務(wù)在不同環(huán)境中使用不同的配置文件變得更簡(jiǎn)單。[考點(diǎn)]SpringBoot
2.
SpringDataJPA與JPA的區(qū)別?正確答案:JPA(JavaPersistenceAPI)是一種持久層規(guī)范,也是EJB3規(guī)范的一部分,并不是一個(gè)ORM框架,只是定義了一些API,但沒(méi)提供具體實(shí)現(xiàn),它的作用是使得應(yīng)用程序以統(tǒng)一的方式訪問(wèn)持久層。
SpringDataJPA是在JPA規(guī)范的基礎(chǔ)上提供了一個(gè)JPA數(shù)據(jù)訪問(wèn)抽象,同時(shí)也大大簡(jiǎn)化了持久層的CRUD操作。但它并不是一個(gè)JPA的實(shí)現(xiàn),Hibernate才是JPA的一個(gè)實(shí)現(xiàn)。
3.
如何理解網(wǎng)頁(yè)標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)的重要性?正確答案:網(wǎng)頁(yè)標(biāo)準(zhǔn)和標(biāo)準(zhǔn)制定機(jī)構(gòu)都是為了能讓W(xué)eb發(fā)展的更健康,開(kāi)發(fā)者遵循統(tǒng)一的標(biāo)準(zhǔn),降低開(kāi)發(fā)難度和開(kāi)發(fā)成本,有利于SEO,減少因?yàn)闉E用代碼導(dǎo)致各種BUG、安全問(wèn)題,最終提高網(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是如何處理一個(gè)請(qǐng)求的?正確答案:首先,Nginx在啟動(dòng)時(shí),會(huì)解析配置文件,得到需要監(jiān)聽(tīng)的端口與lP地址,然后在Nginx的Master進(jìn)程里面先初始化好這個(gè)監(jiān)控的Socket,再進(jìn)行Listen。然后再Fork出多個(gè)子進(jìn)程,子進(jìn)程會(huì)競(jìng)爭(zhēng)Accept新的連接。此時(shí),客戶端就可以向Nginx發(fā)起連接了。
當(dāng)客戶端與Nginx進(jìn)行三次握手,與Nginx建立好一個(gè)連接后,此時(shí),某一個(gè)子進(jìn)程會(huì)Accept成功,然后創(chuàng)建Nginx對(duì)連接的封裝,即ngx_connection_t結(jié)構(gòu)體。接著,根據(jù)事件調(diào)用相應(yīng)的事件處理模塊,如HTTP模塊與客戶端進(jìn)行數(shù)據(jù)的交換。
最后,Nginx或客戶端來(lái)主動(dòng)關(guān)掉連接,到此,一個(gè)連接請(qǐng)求就處理完成。[考點(diǎn)]Nginx
6.
什么是SpringCloud?使用SpringCloud有什么優(yōu)勢(shì)?正確答案:SpringCloud基于SpringBoot實(shí)現(xiàn),整合并管理各個(gè)微服務(wù),為各個(gè)微服務(wù)之間提供協(xié)調(diào)與配置管理、服務(wù)注冊(cè)與發(fā)現(xiàn)、熔斷限流、路由、事件消息總線、消息隊(duì)列、負(fù)載均衡、監(jiān)控、鏈路追蹤等集成服務(wù),是微服務(wù)架構(gòu)的完整解決方案。它整合了諸多被廣泛實(shí)踐和證明過(guò)的框架作為實(shí)施的基礎(chǔ)部件,并且自身也提供了很多優(yōu)秀的功能組件,從而形成一個(gè)完整的微服務(wù)架構(gòu)體系。[考點(diǎn)]SpringCloud與微服務(wù)架構(gòu)
7.
如何獲取瀏覽器與操作系統(tǒng)等信息?正確答案:HttpServletRequest提供了getHeader("User-Agent")來(lái)獲取瀏覽器的完整信息,想知道簡(jiǎn)明的信息,仍然需要自己去處理。這里推薦一個(gè)好的工具類UserAgentUtils,能夠更容易地獲取更多更全面的信息。首先要引入依賴:
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
引入依賴后,就可以使用UserAgentUtils這個(gè)工具類了,它提供了很多方法來(lái)獲取信息。當(dāng)然也可以通過(guò)UserAgent來(lái)獲取很多信息。如:
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()方法刪除集合中的文檔。可以從一個(gè)集合中刪除所有文檔,刪除匹配一個(gè)條件的所有文檔,或者限制操作只刪除一條文檔。remove()方法有兩個(gè)可選參數(shù):
remove()方法參數(shù)名參數(shù)的含義deletioncriteria(可選)刪除文檔的標(biāo)準(zhǔn)。JustOne(可選)如果設(shè)為true或1,則只刪除一個(gè)文檔。默認(rèn)值false。刪除匹配條件的文檔,方法格式如:
>db.collection.remove({Key:value})
如果要?jiǎng)h除集合中的所有文檔,方法格式如:
>db.collection.remove({})
但是這時(shí)不會(huì)刪除索引,如果用drop()方法,則會(huì)刪除整個(gè)集合和所有索引。
刪除一條匹配條件的文檔,則只要將justOne參數(shù)設(shè)為1或true便可。如:
>db.collection.remove({Key:value},1)[考點(diǎn)]Mongodb
9.
如何禁用某個(gè)自動(dòng)配置類?正確答案:使用注解@EnableAutoConfiguration的exclude屬性,可以禁用一個(gè)或多個(gè)特定的自動(dòng)配置類。例如:
@EnableAutoConfiguration(exclude=(MyAutoConfig.class))
如果類不在類路徑上,開(kāi)發(fā)者可以使用注解的excludeName屬性并指定完全限定名稱。例如:
@EnableAutoConfiguration(excludeName={Cat.class})
另外,在SpringBoot中使用spring.autoconfigure.exclude屬性可以配置要排除的自動(dòng)配置類列表。在perties中如下配置(如多個(gè)用逗號(hào)分隔):
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration[考點(diǎn)]SpringBoot
10.
RabbitMQ消息基于什么傳輸?它的Message最大可達(dá)多大?正確答案:RabbitMQ使用信道的方式來(lái)傳輸數(shù)據(jù)。信道是建立在真實(shí)的TCP連接內(nèi)的虛擬連接,且每條TCP連接上的信道數(shù)量沒(méi)有限制。之所以不是直接基于TCP連接來(lái)傳輸數(shù)據(jù),是由于TCP連接的創(chuàng)建和銷毀開(kāi)銷較大,且并發(fā)數(shù)受系統(tǒng)資源限制,會(huì)造成性能瓶頸。
根據(jù)AMQP協(xié)議規(guī)定,RabbitMQ消息體的大小由64-bit的值來(lái)指定,所以可以由此得出最大能發(fā)多大的數(shù)據(jù)了。[考點(diǎn)]消息隊(duì)列綜合
11.
下面是一道綜合題,要求寫出多種條件下的查詢SQL語(yǔ)句,這里仍以MySQL數(shù)據(jù)庫(kù)為基礎(chǔ),其他數(shù)據(jù)庫(kù)可參考實(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”開(kāi)頭的所有員工的全部個(gè)人信息。
答案:查詢SQL為:
select*fromemployeewhereYear(hiredDate)=Year(now())or(salarybetween1000and200)orleft(last_name,3)='Fu';
2)基于上述employee表寫出查詢:查出部門平均工資大于1800元的部門的所有員工的全部個(gè)人信息。
答案:查詢SQL為:
select*fromemployeeawheredepidin(selectdepidfromemployeegroupbydepidhavingavg(salary)>1800);
3)基于employee表寫出查詢:查出個(gè)人工資高于其所在部門平均工資的員工,列出這些員工的全部個(gè)人信息及該員工工資高出部門平均工資的百分比。正確答案:查詢SQL為:
selecta.*,(a.salary-t.avgSalary)*100/a.salaryfromemployeea,(selectdepid,avg(salary)avgSalaryfromemployeegroupbydepid)twherea.depid=t.depidanda.salary>t.avgSalary;[考點(diǎn)]SQL語(yǔ)法與實(shí)戰(zhàn)
12.
什么是MVC模式?正確答案:MVC即模型(Model)-視圖(View)-控制器(Controller),MVC模式將一個(gè)應(yīng)用分成三個(gè)層即模型層、視圖層、控制層。視圖(View)層是與用戶交互界面,負(fù)責(zé)數(shù)據(jù)展現(xiàn)。業(yè)務(wù)流程的處理由模型層處理。控制層負(fù)責(zé)視圖層與模型層的交互(一般是一個(gè)Servlet)。MVC模式有助于管理復(fù)雜的應(yīng)用程序,可以在一個(gè)時(shí)間內(nèi)專門關(guān)注于程序?qū)崿F(xiàn)的一個(gè)方面。例如,開(kāi)發(fā)人員可以在不依賴業(yè)務(wù)邏輯的情況下專注于視圖設(shè)計(jì)。同時(shí)也讓應(yīng)用程序的測(cè)試更加容易。MVC模式實(shí)現(xiàn)了數(shù)據(jù)展現(xiàn)與業(yè)務(wù)邏輯的分離,提高了系統(tǒng)的可移植性、維護(hù)性。
最典型的MVC模式就是JSP+Servlet+JavaBean的模式。
MVC框架處理請(qǐng)求的過(guò)程:首先控制器接受用戶的請(qǐng)求,調(diào)用相應(yīng)的模型來(lái)進(jìn)行業(yè)務(wù)處理,并返回?cái)?shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來(lái)顯示處理的結(jié)果,并通過(guò)視圖呈現(xiàn)給用戶。[考點(diǎn)]綜合
13.
MyBatis如何獲取自增長(zhǎng)主鍵?正確答案:MyBatis的insert方法默認(rèn)是返回一個(gè)代表插入行數(shù)的int值,自動(dòng)生成的鍵值在方法執(zhí)行完后可以被賦值到傳入的參數(shù)對(duì)象中。但默認(rèn)是不傳入的,需要配置。如果是XML映射文件,則如下配置。
<insertid="insert"useGeneratedKeys="true"keyProperty="id">
如果是注解,則如下配置。
@Options(useGeneratedKeys=true,keyProperty="id")
intinsert();
兩種方式其實(shí)是一樣的,useGeneratedKeys指定是否獲取自增長(zhǎng)主鍵,keyProperty指定主鍵列。[考點(diǎn)]MyBatis
14.
Struts2框架里創(chuàng)建Action類有幾種方法?正確答案:創(chuàng)建Action類有三種方法:
1)實(shí)現(xiàn)Action接口。
2)繼承ActionSupport類,這時(shí)必須實(shí)現(xiàn)execute()方法。
3)使用Struts2的元注解@Action。[考點(diǎn)]Struts2
15.
Nginx如何根據(jù)擴(kuò)展名限制程序和文件訪問(wèn)?正確答案:出于安全性,Web項(xiàng)目需要限制對(duì)一些特定文件(如模板文件,配置文件等)的直接訪問(wèn)。這些可以通過(guò)在Nginx中增加特定配置來(lái)做到。如下所示:
location~*\.(cfg|template|txt)${#cfg|template|txt就是需要限制訪問(wèn)的文件擴(kuò)展名
denyall;
}[考點(diǎn)]Nginx
16.
定制Dockerfile需要注意些什么?正確答案:下面是一些定制Dockerfile的經(jīng)驗(yàn),與大家共享。
1)盡量讓每個(gè)鏡像的用途都比較集中、單一,避免構(gòu)造大而復(fù)雜、多功能的鏡像。
2)盡量選擇精簡(jiǎn)小巧的基礎(chǔ)鏡像,否則鏡像可能很臃腫。例如,使用Java作為基礎(chǔ)鏡像,如果使用Java:8為基礎(chǔ)鏡像,工程鏡像可能達(dá)到600多MB大??;而使用Java:openJdk-8-jre只有100多MB大小。
3)提供詳細(xì)的注釋和維護(hù)者信息,方便別人使用。
4)不要使用latest,盡量使用明確的具體數(shù)字信息的版本號(hào),這樣可以避免無(wú)法確認(rèn)具體版本號(hào),利于統(tǒng)一環(huán)境。
5)使用.dockeringore文件來(lái)排除構(gòu)建鏡像時(shí)不需要的文件或目錄(如臨時(shí)和緩存文件等),讓鏡像更精簡(jiǎn)。
6)調(diào)整合理的指令順序,在開(kāi)啟緩存的情況下,內(nèi)容不變的指令盡量放在前面,這樣可以提高指令的復(fù)用性。
7)要讓Dockerfile文件盡量少受到外部源的干擾,盡量具有通用性,可通過(guò)定制接受合適的外部參數(shù)來(lái)增強(qiáng)文件的通用性。
8)盡量合并RUN指令,可以將多條RUN指令的內(nèi)容通過(guò)&&連接,這樣可以減少鏡像層數(shù)。[考點(diǎn)]Docker
17.
profile有何作用?具體如何使用?正確答案:profile可用來(lái)分析SQL性能的消耗分布情況。當(dāng)用explain無(wú)法解決SQL慢時(shí),需要用profile來(lái)對(duì)SQL進(jìn)行更細(xì)致地分析,找出SQL所花的時(shí)間大部分消耗在了哪個(gè)部分,確認(rèn)SQL的性能瓶頸。
profile是在MySQL5.0.3版本以后才開(kāi)放的,在MySQL5.7之后,profile信息將逐漸被廢棄,MySQL推薦使用performanceschema。
下面簡(jiǎn)單介紹一下它的具體使用,推薦在MySQL的命令行工具下操作。
打開(kāi)分析命令:
setprofiling=1;
然后可以執(zhí)行查詢SQL,可以一條或多條。
查看SQL語(yǔ)句的匯總分析命令:
showprofiles;
找到查詢所對(duì)應(yīng)的Query_ID,查看具體情況:
showprofileforquery2;
想查看完整的分析情況,執(zhí)行命令:
showprofileALLforquery2;
會(huì)顯示更多列的信息,可以重點(diǎn)看CPU和I/O等的具體信息,這里相關(guān)的信息太多,不一一介紹。
關(guān)閉分析命令:
setprofiling=0;
關(guān)閉之后,不再監(jiān)控后面的操作,但關(guān)閉之前的監(jiān)控信息會(huì)存在,也是可以用查看命令查看的。[考點(diǎn)]MySQL數(shù)據(jù)庫(kù)
18.
什么是SQL注入攻擊?如何防范SQL注入攻擊?正確答案:SQL注入(SQLInjection)是在輸入?yún)?shù)中添加SQL代碼,傳遞到服務(wù)器,這些輸入?yún)?shù)被拼接到SQL語(yǔ)句中,并能被數(shù)據(jù)庫(kù)解
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC TS 17022:2012 RU Conformity assessment - Requirements and recommendations for content of a third-party audit report on management systems
- 【正版授權(quán)】 IEC 60641-2:2004 FR-D Pressboard and presspaper for electrical purposes - Part 2: Methods of tests
- 【正版授權(quán)】 IEC 60227-7:1995+AMD1:2003 CSV EN-D Polyvinyl chloride insulated cables of rated voltages up to and including 450/750 V - Part 7: Flexible cables screened and unscree
- 定位課程內(nèi)容課件
- 鄉(xiāng)鎮(zhèn)護(hù)理工作總結(jié)
- 2025年社區(qū)護(hù)士工作方案
- 怎樣制定2025年工作銷售方案
- 2025年國(guó)慶節(jié)創(chuàng)意活動(dòng)策劃方案
- 2025年元旦團(tuán)日活動(dòng)方案
- 直腸癌的護(hù)理查房
- 配料記錄表(標(biāo)準(zhǔn)樣本)
- 芯片手冊(cè)盛科sdk用戶開(kāi)發(fā)指南
- TCSAE 178-2021 電動(dòng)汽車高壓連接器技術(shù)條件
- 海淀八模語(yǔ)文
- GB/T 29312-2022低壓無(wú)功功率補(bǔ)償投切器
- YS/T 429.2-2000鋁幕墻板 氟碳噴漆鋁單板
- 機(jī)臺(tái)操作指導(dǎo)書(shū)(注塑機(jī)安全操作規(guī)程)
- GB/T 12579-2002潤(rùn)滑油泡沫特性測(cè)定法
- GB 16325-2005干果食品衛(wèi)生標(biāo)準(zhǔn)
- 第八章工程倫理的應(yīng)用 工程倫理學(xué)課件
- 《真善美的小世界》-課件
評(píng)論
0/150
提交評(píng)論