81、以下哪句是對索引的錯(cuò)誤描述(C)
A.選擇性差的索引只會(huì)降低 DML 語句的執(zhí)行速度
B.選擇性強(qiáng)的索引只有被 Access Path 使用到才是有用的索引
C.過多的索引只會(huì)阻礙性能的提升,而不是加速性能
D.在適當(dāng)?shù)臅r(shí)候?qū)⒆畛S玫牧蟹旁趶?fù)合索引的最前面
E.索引和表的數(shù)據(jù)都存儲(chǔ)在同一個(gè) Segment 中
A.當(dāng)一個(gè)事務(wù)在表上防止了共享鎖(shared lock),其他事務(wù),能閱讀表里的數(shù)據(jù)
B.當(dāng)一個(gè)事務(wù)在表上防止了共享鎖(shared lock),其他事務(wù),能更新表里的數(shù)據(jù)
C.當(dāng)一個(gè)事務(wù)在表上防止了排他鎖(exclusive lock),其他事務(wù),能閱讀表里的數(shù)據(jù)
D.當(dāng)一個(gè)事務(wù)在表上防止了排他鎖(exclusive lock),其他事務(wù),能更新表里的數(shù)據(jù)
A.缺乏索引,特別是在列上使用了函數(shù),如果要利用索引,則需要使用函數(shù)索引。
B.當(dāng)訪問的數(shù)據(jù)占整個(gè)表中的大部分?jǐn)?shù)據(jù)時(shí)。
C.如果時(shí)一個(gè)表的 high water mark 數(shù)據(jù)塊數(shù)少于初始化參數(shù) DB_FILE_MULTIBLOCK_READ_COUNT。
D.本次查詢可以用到該張表的一個(gè)引用,但是該表具有多個(gè)索引包含用于過濾的字段。
1
1.5
1.5
攔截器:是指通過統(tǒng)一攔截從瀏覽器發(fā)往服務(wù)器的請求來完成功能的增強(qiáng)。使用場景:解決請求的共性問題(亂碼問題、權(quán)限驗(yàn)證問題)。
過濾器:Servlet中的過濾器Filter是實(shí)現(xiàn)了javax.servlet.Filter接口的服務(wù)器端程序,主要的用途是過濾字符編碼、做一些業(yè)務(wù)邏輯判斷等。其工作原理是只要你在web.xml文件配置好要攔截的客戶端請求,它都會(huì)幫你攔截到請求,此時(shí)你就可以對請求或響應(yīng)(Request、Response)統(tǒng)一設(shè)置編碼,簡化操作;同時(shí)還可進(jìn)行邏輯判斷,如用戶是否已經(jīng)登錄、有沒有權(quán)限訪問該頁面等等工作。它是隨你的web應(yīng)用啟動(dòng)而啟動(dòng)的,只初始化一次,以后就可以攔截相關(guān)請求,只有當(dāng)你的web應(yīng)用停止或重新部署的時(shí)候才銷毀。
監(jiān)聽器:現(xiàn)在來說說 Servlet 的監(jiān)聽器 Listener,其中有一個(gè)監(jiān)聽器是監(jiān)聽上下文的,它實(shí)現(xiàn)了javax.servlet.ServletContextListener接口,它也是隨web應(yīng)用的啟動(dòng)而啟動(dòng),只初始化一次,隨web應(yīng)用的停止而銷毀。主要作用是:做一些初始化的內(nèi)容、設(shè)置一些基本的內(nèi)容、比如一些參數(shù)或者是一些固定的對象等等。
每一個(gè)ThreadLocal能夠放一個(gè)線程級別的變量,可是它本身能夠被多個(gè)線程共享使用,并且又能夠達(dá)到線程安全的目的,且絕對線程安全。
ThreadLocal的應(yīng)用場景:最常見的ThreadLocal使用場景為用來解決數(shù)據(jù)庫連接、Session 管理等
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。
● 第一次握手:建立連接時(shí),客戶端發(fā)送 syn 包(syn=j)到服務(wù)器,并進(jìn)入 SYN_SEND 狀態(tài), 等待服務(wù)器確認(rèn); SYN:同步序列編號(hào)(Synchronize Sequence Numbers)。
● 第二次握手:服務(wù)器收到 syn 包,必須確認(rèn)客戶的 SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè) SYN 包(syn=k),即SYN+ACK 包,此時(shí)服務(wù)器進(jìn)入 SYN_RECV 狀態(tài)。
● 第三次握手:客戶端收到服務(wù)器的 SYN+ACK 包,向服務(wù)器發(fā)送確認(rèn)包 ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入 ESTABLISHED 狀態(tài),完成三次握手。完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)
是線程安全的,request、response 以及 requestContext 在使用時(shí)不需要進(jìn)行同步。而根據(jù) spring的默認(rèn)規(guī)則,controller對于BeanFactory而言是單例的。即controller只有一個(gè), controller 中的request等實(shí)例對象也只有一個(gè)。
● compile: 編譯依賴范圍(默認(rèn)),對其三種都有效。
● test: 測試依賴范圍,只對測試 classpath 有效。
● runtime: 運(yùn)行依賴范圍,只對測試和運(yùn)行有效,編譯主代碼無效,例如 JDBC。
● provided: 已提供依賴范圍,只對編譯和測試有效,運(yùn)行時(shí)無效,例如 selvet-api。
● system: 系統(tǒng)依賴范圍.謹(jǐn)慎使用.例如本地的,maven 倉庫之外的類庫文件。
● import(maven2.0.9 以上): 導(dǎo)入依賴范圍,不會(huì)對其他三種有影響。
Mybatis使用#{}經(jīng)過預(yù)編譯的,是安全的,防止sql 注入。
Mybatis攔截器只能攔截四種類型的接口:Executor、StatementHandler、ParameterHandler和ResultSetHandler。這是在Mybatis的Configuration中寫死了的,如果要支持?jǐn)r截其他接口就需要我們重寫Mybatis的Configuration。
Mybatis可以對這四個(gè)接口中所有的方法進(jìn)行攔截。
Mybatis攔截器常常會(huì)被用來進(jìn)行分頁處理。
91、簡單解釋自動(dòng)裝配的各種模式,或者叫裝配方式
在Spring框架中共有5種自動(dòng)裝配:
● no:這是 Spring 框架的默認(rèn)設(shè)置,在該設(shè)置下自動(dòng)裝配是關(guān)閉的,開發(fā)者需要自行在bean定義中用標(biāo)簽明確的設(shè)置依賴關(guān)系。
● byName:該選項(xiàng)可以根據(jù)bean名稱設(shè)置依賴關(guān)系。當(dāng)向一個(gè)bean中自動(dòng)裝配一個(gè)屬性時(shí),容器將根據(jù)bean的名稱自動(dòng)在在配置文件中查詢一個(gè)匹配的bean。如果找到的話,就裝配這個(gè)屬性,如果沒找到的話就報(bào)錯(cuò)。
● byType:該選項(xiàng)可以根據(jù)bean類型設(shè)置依賴關(guān)系。當(dāng)向一個(gè)bean中自動(dòng)裝配一個(gè)屬性時(shí),容器將根據(jù)bean的類型自動(dòng)在在配置文件中查詢一個(gè)匹配的 bean。如果找到的話,就裝配這個(gè)屬性,如果沒找到的話就報(bào)錯(cuò)。
● constructor:造器的自動(dòng)裝配和 byType 模式類似,但是僅僅適用于與有構(gòu)造器相同參數(shù) 的bean,如果在容器中沒有找到與構(gòu)造器參數(shù)類型一致的bean,那么將會(huì)拋出異常。
● autodetect:該模式自動(dòng)探測使用構(gòu)造器自動(dòng)裝配或者 byType 自動(dòng)裝配。首先,首先會(huì)嘗試找合適的帶參數(shù)的構(gòu)造器,如果找到的話就是用構(gòu)造器自動(dòng)裝配,如果在bean內(nèi)部沒有找到相應(yīng)的構(gòu)造器或者是無參構(gòu)造器,容器就會(huì)自動(dòng)選擇byTpe的自動(dòng)裝配方式。
MVC是Model-View-Controller的簡寫。Model代表的是應(yīng)用的業(yè)務(wù)邏輯(通過 JavaBean,EJB組件實(shí)現(xiàn)),View 是應(yīng)用的表示面(由JSP頁面產(chǎn)生),Controller是提供應(yīng)用的處理過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
● 逆向代碼,例如反編譯
● 與注解相結(jié)合的框架,例如Retrofit
● 單純的反射機(jī)制應(yīng)用框架,例如EventBus 2.x
● 動(dòng)態(tài)生成類框架,例如Gson
class Buy {
public static void main(String[] args) {
int n = 50;
int i = 0;
while (true) {
n -= 3;
n++;
if (n < 3) {
System.out.println("共喝了" + (50 + i) + "瓶");
break;
}
}
}
}
95、根據(jù)某年某月某日,輸出這是一年中第幾天。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("請輸入3個(gè)整數(shù),分別表示年月日:");
int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();
int sum = 0;
int[][] a = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
for (int i = 0; i < month - 1; i++) {
if (year % 4 == 0 & year % 100 != 0 | year % 400 == 0)
sum = sum + a[1][i];
else
sum = sum + a[0][i];
}
sum = sum + day;
System.out.println(year + "年" + month + "月" + day + "是這一年的第" + sum + "天");
}
96、利潤與獎(jiǎng)金,某公司銷售 10 萬元到 20 萬元的獎(jiǎng)金 10%,在 20 萬元的獎(jiǎng)金 10 萬元以上的獎(jiǎng)金 7.5%,到 40 萬元超出 20 萬元的部分獎(jiǎng)金為 5%,到 60 萬元的超出 40 萬元的部分獎(jiǎng)金 3%,到 100 萬元的超出 60 萬元部分獎(jiǎng)金 1%,請輸出說的獎(jiǎng)金。
public class Test {
public static void main(String[] args) {
float money = 0;
Scanner scan = new Scanner(System.in);
System.out.print("請輸入利潤:");
float num = scan.nextInt();
if (num <= 100000) {
money = (float) (num * 0.1);
} else if (num <= 200000) {
money = (float) ((num - 100000) * 0.075 + 100000 * 0.1);
} else if (num <= 400000) {
money = (float) ((num - 200000) * 0.5 + 100000 * 0.175);
} else if (num <= 600000) {
money = (float) ((num - 400000) * 0.3 + 100000 * 0.175 + 200000 * 0.5);
} else if (num <= 1000000) {
money = (float) ((num - 600000) * 0.015 + 100000 * 0.175 + 200000 * 0.5 + 200000 * 0.3);
} else {
money = (float) ((num - 1000000) * 0.01 + 100000 * 0.175 + 200000 * 0.5 + 200000 * 0.3 + 400000 * 0.015);
}
System.out.println("獎(jiǎng)金:" + money);
}
}
97、除了懶漢式和餓漢式你還了解那些單例模式?
//雙重檢查鎖模式
public class DoubleCheckLock {
private static DoubleCheckLock instance = null;
private DoubleCheckLock() {
}
public static DoubleCheckLock getInstance() {
if (instance == null) {
synchronized (DoubleCheckLock.class) {
if (instance == null) {
instance = new DoubleCheckLock();
}
}
}
return instance;
}
}
//靜態(tài)內(nèi)部類方式
public class StaticInner {
private static StaticInner instance;
public static StaticInner getInstance() {
return SingletonHolder.STATIC_INNER;
}
private static class SingletonHolder {
private static final StaticInner STATIC_INNER = new StaticInner();
}
}
98、簡述SSH的概念以及主要的設(shè)計(jì)思想?
SSH是Struts+Spring+Hibernate的一個(gè)集成框架,是目前比較流行的一種Web應(yīng)用程序開源框架。
集成SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的 Web 應(yīng)用程序。
其中使用Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負(fù)責(zé)MVC的分離,在Struts框架的模型部分,控制業(yè)務(wù)跳轉(zhuǎn),利用Hibernate框架對持久層提供支持,Spring做管理,管理Struts和Hibernate。
具體做法是:用面向?qū)ο蟮姆治龇椒ǜ鶕?jù)需求提出一些模型,將這些模型實(shí)現(xiàn)為基本的 Java對象,然后編寫基本的DAO(Data Access Objects)接口,并給出 Hibernate的DAO實(shí)現(xiàn),采用Hibernate架構(gòu)實(shí)現(xiàn)的DAO類來實(shí)現(xiàn)Java類與數(shù)據(jù)庫之間的轉(zhuǎn)換和訪問,最后由Spring 做管理。
要讓程序在后臺(tái)執(zhí)行,只需在命令行的最后加上“&”符號(hào)。例如:$ find . -name abc -print&
rm –i: 交互模式刪除文件,刪除文件前給出提示。
rm -r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理。
悲觀鎖(Pessimistic Lock),顧名思義,就是很悲觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)block直到它拿到鎖。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。它指的是對數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度,因此,在整個(gè)數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)。悲觀鎖的實(shí)現(xiàn),往往依靠數(shù)據(jù)庫提供的鎖機(jī)制(也只有數(shù)據(jù)庫層提供的鎖機(jī)制才能真正保證數(shù)據(jù)訪問的排他性,否則,即使在本系統(tǒng)中實(shí)現(xiàn)了加鎖機(jī)制,也無法保證外部系統(tǒng)不會(huì)修改數(shù)據(jù))。
樂觀鎖(Optimistic Lock),顧名思義,就是很樂觀,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù),可以使用版本號(hào)等機(jī)制。樂觀鎖適用于多讀的應(yīng)用類型,這樣可以提高吞吐量,像數(shù)據(jù)庫如果提供類似于write_condition機(jī)制的其實(shí)都是提供的樂觀鎖。
兩種鎖各有優(yōu)缺點(diǎn),不可認(rèn)為一種好于另一種,像樂觀鎖適用于寫比較少的情況下,即沖突真的很少發(fā)生的時(shí)候,這樣可以省去了鎖的開銷,加大了系統(tǒng)的整個(gè)吞吐量。但如果經(jīng)常產(chǎn)生沖突,上層應(yīng)用會(huì)不斷的進(jìn)行retry,這樣反倒是降低了性能,所以這種情況下用悲觀鎖就比較合適。
答案:%t 輸出產(chǎn)生該日志事件的線程名。
擴(kuò)展:%M 是輸出方法的名字、%m 是輸出代碼指定的日志信息。指定的打印信息的具體格式 ConversionPattern,具體參數(shù):
● %m輸出代碼中指定的消息
● %p輸出優(yōu)先級,即 DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
● %r輸出自應(yīng)用啟動(dòng)到輸出該 log 信息耗費(fèi)的毫秒數(shù)
● %c輸出所屬的類目,通常就是所在類的全名
● %t輸出產(chǎn)生該日志事件的線程名
● %n輸出一個(gè)回車換行符,Windows 平臺(tái)為"rn”,Unix 平臺(tái)為"n”
● %d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為 ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS}
● %l輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)
● %x輸出和當(dāng)前線程相關(guān)聯(lián)的 NDC(嵌套診斷環(huán)境),尤其用到像 java servlets 這樣的多客戶多線程的應(yīng)用中。
● %%輸出一個(gè)”%”字符
● %F輸出日志消息產(chǎn)生時(shí)所在的文件名稱
● %M輸出執(zhí)行方法
● %L輸出代碼中的行號(hào)
出現(xiàn)NotWritablePropertyException異常的原因一般是在ApplicationContext.xml中 property name的錯(cuò)誤等相關(guān)問題。
A. WEB-INF目錄存在于web應(yīng)用的根目錄下
B. WEB-INF目錄與classes目錄平行
C. web.xml在WEB-INF目錄下
D. Web應(yīng)用程序可以打包為war文件
A. Servlet 的生命周期由 Servlet 實(shí)例控制
B. init()方法在創(chuàng)建完 Servlet 實(shí)例后對其進(jìn)行初始化,傳遞的參數(shù)為實(shí)現(xiàn) ServletContext 接口的對象
C. service()方法響應(yīng)客戶端發(fā)出的請求
D. destroy()方法釋放Servlet實(shí)例
A. Cookie是Web服務(wù)器發(fā)送給客戶端的一小段信息,客戶端請求時(shí),可以讀取該信息發(fā)送到服務(wù)器端
B. 關(guān)閉瀏覽器意味著會(huì)話 ID 丟失,但所有與原會(huì)話關(guān)聯(lián)的會(huì)話數(shù)據(jù)仍保留在服務(wù)器上,直至?xí)掃^期
C. 在禁用 Cookie 時(shí)可以使用 URL 重寫技術(shù)跟蹤會(huì)話
D. 隱藏表單域?qū)⒆侄翁砑拥?HTML 表單并在客戶端瀏覽器中顯示
A.
<init-param>
<param-name>MAX</param-name>
<param-value>100</param-value>
</init-param>
B.
<context-param>
<param name="MAX" value="100" />
<context-param>
C.
<context>
<param name="MAX" value="100" />
<context>
D.
<context-param>
<param-name>MAX</param-name>
<param-value>100</param-value>
<context-param>
A. session. getAttribute (“userid”);
B. session. setAttribute (“userid”);
C. request. getParameter (“userid”);
D. request. getAttribute (“userid”);
<html>
<body>
<%
for(int i = 0; i < 10; i++) {
//1
}
%>
</body>
</html>
A. <%= i %>
B. <b>i</b>
C. %><%= i %><%
D. 不寫任何內(nèi)容
● test1.jsp:
<HTML>
<BODY>
<% pageContext.setAttribute(“ten”,new Integer(10));%>
//1
</BODY>
</HTML>
● test2.jsp:
數(shù)字為:<%= pageContext.getAttribute(”ten”)%>
以下(C)放置在 test1.jsp 中的//1 處,當(dāng)請求 test1.jsp 時(shí)正確輸出 test2.jsp 中的內(nèi)容。
A. <jsp:include page=”test2.jsp” />
B. <jsp:forword page=”test2.jsp” />
C. <%@ include file=”test2.jsp” %>
D. pageContext對象的scope屬性為page,所以test2.jsp不能訪問 test1.jsp定義的屬性
A. 隱式對象是 WEB 容器加載的一組類的實(shí)例,可以直接在 JSP 頁面使用
B. 不能通過config對象獲取 ServletContext 對象
C. response對象通過sendRedirect方法實(shí)現(xiàn)重定向
D. 只有在出錯(cuò)處理頁面才有 exception 對象
解釋:jsp 的九大內(nèi)置對象分別是:config、request、response、out、page、pageContext、session、exception、application。其中exception 是特殊的內(nèi)置對象,只有當(dāng)在 jsp 中添加 isErrorPage="true"屬性時(shí)如下配置時(shí)才可以使用。該屬性一般出現(xiàn)在設(shè)定的錯(cuò)誤界面。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" isErrorPage="true" %>
112、???????考慮下面 JSP 文件代碼片斷:
<HTML>
<BODY>
<jsp:include page=”test2.jsp”>
<jsp:param name=”username” value=”zhangsan”/>
</jsp:include>
</BODY>
</HTML>
以下(C)代碼片斷放置在 test2.jsp 中不會(huì)導(dǎo)致錯(cuò)誤。
A. <jsp:getParam name=”username”/>
B. <jsp:include param =”username”/>
C. <%=request.getParameter(“username”)%>
D. <%=request.getAttribute(“username”)%>
解釋:<jsp:include page=”test2.jsp”>屬于動(dòng)態(tài)調(diào)用test2.jsp界面,相當(dāng)于動(dòng)態(tài)去請求test2.jsp 所生成的Servlet,在請求的同時(shí)攜帶了請求參數(shù)“username”,我們知道在Servlet中獲取請求攜帶的參數(shù)就是通過request.getParameter(key)來獲取的,因此C正確。
<%@ page isELIgnored="false"%>
<html>
<body>
<FORM action="login.jsp" method="GET">
<input type="text" name="name" value="${param['name']}">
<input type="submit" value="提交">
</FORM>
<P>
用戶名為: ${param.name}
</body>
</html>