Java、Java Web面试题(来源于MLDN、北方网)
來源于MLDN:
1.垃圾回收的優點和原理。
???????將無用的對象空間進行釋放。兩種回收:自動回收和手動回收。手動回收實際上就是調用System.gc(),調用此方法于調用了Runtime.getRuntime().gc()方法。
2.Error與Exception的區別。
?????? Error由JVM進行處理,是JVM出錯。Exception是可以由程序進行處理的。
3.匿名內部類是否可以extends其他類,是否可以實現interface?
允許繼承或者實現,因為匿名內部類是在抽象類或者接口的基礎上發展起來的。
4.Static Nested Class和Inner Class的不同
???????使用static聲明的內部類就是外部類,可以通過外部類.內部類直接進行訪問
???????普通的內部類是不能直接被外部所訪問的,需要通過外部類實例在找到內部類的實例。
5.HashMap和HashTable的區別。
?????? HashMap:采用異步處理方式,性能高,但是屬于非線程安全。允許設置null。
HashTable:采用同步處理方式,性能較低,線程安全,不允許設置null。
6.GC是什么?為什么要GC?
?????? GC是垃圾收集。使用GC可以進行垃圾空間的釋放操作。
7.sleep()和wait()的區別
?????? sleep()是Thread類中定義的方法,表示線程的休眠,會自動喚醒。Sleep不釋放鎖。
?????? Wait是object中定義的方法,需要使用notify或者notifyAll方法喚醒。Wait釋放鎖。
8.Java中的那些類是滿足單例模式?
?????? Class類和Runtime類。
9.char能不能存中文?
???????能,因為使用的是Unicode編碼。
10.多線程有幾種實現方法?同步有幾種方法?
???????多線程有兩種方法:繼承Thread類和實現Runnable接口。Thread類是Runnable接口的子類,使用Runnable接口可以實現資源共享的目的,所有的線程操作都必須使用Thread類的start方法啟動。
實現同步的方法有兩種:synchronized代碼塊和synchronized方法。
11.String和StringBuffer的區別?
?????? String不能修改,StringBuffer能夠修改。
12.Class.forName的作用是什么?
?????? Class.forName屬于向容器之中加載驅動程序。
13.說出類集合框架的完整結構。
???????類集框架最大的幾個接口:Connection、Map、Interator、Enumeration
?????? |-Connection:存放單值的:
????????????? |-List:允許有重復內容
???????????????????? |-ArrayList:異步處理,新的操作類,非線程安全
???????????????????? |-Vector:同步處理,舊的操作類,線程安全,支持Enumeration輸出
???????????? |-Set:不允許有重復內容,依靠hashCode和equals記性重復的驗證
???????????????????? |-HashSet:無序存放
???????????????????? |-TreeSet:有序排列,按照Comparable排序
?????? |-Map:存放一對值
????????????? |-HashMap:新的類,異步處理,非線程安全,允許null
????????????? |-HashTable:舊的類,同步處理,線程安全,不允許為null
???????????????????? |-Properties:屬性操作類
????????????? |-TreeMap:有序排列,按照key排序,根據Comparaable指定排序規則
?????? |-Iterator:迭代輸出,依靠Collection接口中的iterator方法輸出,是新的輸出標準。
?????? |-Enumeration:舊的輸出操作。
14.Sting能不能繼承?
???????不能,因為使用final修飾。
15.JSP有哪些內置對象?(ROSEAPPRC(玫瑰應用發行版))
???????一共九個內置對象。
?????? 1.pageContext->javax.servlet.jsp.PageContet.表示頁容器
2.request->javax.servlet.http.HttpServletRequest.服務器端取得客戶端的信息
3.response->javax.servlet.http.HttpServletResponse.服務器端回應給客戶端的信息
4.session->javax.servlet.http.HttpSession.表示每一個用戶用于登錄驗證
5.application->javax.servlet.ServletContext.可以通過this.getServletContext()方法替代.表示整個服務器的上下文,常用方法是getRealPath()。????
6.config->javax.servletServletConfig.取得初始化參數,在web.xml中配置
7.exception->java.lang.Throwable.表示錯誤頁的處理操作
8.page->java.lang.Object.如同this一樣,表示整個JSP頁面。
9.out->javax.servlet.jsp.JspWriter.輸出,盡量使用表達式輸出。
16.JSP有哪些動作?
???????所謂的動作,指的是標簽指令。
?????? 1.<jsp:include>:包含
?????? 2.<jsp:forward>:跳轉
?????? 3.<jsp:useBean>:使用JavaBean
?????? 4.<jsp:setProperty>:設置屬性,通過反射調用方法
?????? 5.<jsp:getProperty>:取得屬性
?????? 6.<jsp:plugin>:插入Applet程序的代碼
17.JSP中動態include與靜態include的區別
???????動態include:<jsp:include>,如果包含的是動態頁,則先編譯之后再進行處理
???????靜態include:<@include%>:直接將內容先包含后處理
18.兩種跳轉的方式分別是什么,什么區別?
???????服務器跳轉:<jsp:forward>,跳轉之后地址欄不改變,可以傳遞request屬性,實際上是ResquestDispatch接口的封裝。
???????客戶端跳轉:response.sendRedirect(),跳轉之后地址欄改變。
19.總結Web開發中會話跟蹤的實現。
?????? 1.session,最常用的一種
?????? 2.Cookie
?????? 3.地址重寫
?????? 4.表單隱藏域
20.說明JSP中的errorPage的作用,應用范圍。
???????表示錯誤頁的操作,在一般的站點中,只要一個程序出現錯誤或者一行,則可以進行顯示。簡單的錯誤頁基本上都是在JSP的開發中使用。要先使用errorPage需要滿足:
1.???????在錯誤處理的頁面上的page指令中,增加isErrorPage=”true”
2.???????在每個頁面中指定errorPage,指定isErrorPage為true的頁面
如果想要建立全局的錯誤處理,需要在web.xml中進行配置。
21.寫JDBC連接Oracle的程序,實現查詢。
?????? 1.定義一系列的全局常量:驅動路徑、連接地址、用戶名、密碼
?????? 2.加載驅動程序
?????? 3.連接數據庫
?????? 4.操作數據庫,更新或查詢
?????? 5.關閉數據庫
| Public static final String DBDRIVER = “oracle.jdbc.driver.OracleDriver”; Public static final String DBURL = “jdbc:oracle:thin:@loalhost:1521:CONAN”; Public static final String DBUSER = “scott”; Public static final String DBPASSWORD = “tiger”; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = “SELECT empno,ename,job FROM emp”; Class.forName(DBDRIVER); Conn.Drever,Manager.getConnection(DBURL,DBUSER,DBPASSWORD); Pstmt=conn.prepareStatement(sql); rs=pstmt.executeQuery(); { Int empno = rs.getInt(1); String ename = rs.getString(2); String job = rs.getString(3); } Rs.close(); Pstmt.close(); Conn.close();//正著打開,反著關閉 |
22.JSP中如何實現分頁操作?
???????分頁分為真分頁和假分頁。
???????真分頁:性能高,基于數據庫的操作,只是從數據庫中去純白虎部分的數據進行顯示,但可移植性低。
???????假分頁:性能低,查詢全部結果,之后依靠算法分頁,可移植性高。
???????實現原理:
1.???????定義一些列的變量:curruentPage、lineSize,計算出pageSize和allRecorders
2.???????pageSize=(allRecords+lineSize-1)/lineSize
3.???????之后的數據查詢執行lineSize和currentPage進行數據的查詢
4.???????通過表單不斷的修改currentPage和lineSize就可以實現分頁顯示
23.Servlet聲明周期。
?????? 0.加載
?????? 1.初始化。正常一次,對應init()方法,有兩個inti()方法,其中一個是ServletConfig對象,此方法存在則無參不調用,正常情況下在第一次使用Servlet的時候才進行初始化操作。當然,也可以通過在容器啟動的時候自動進行初始化:<load-on-startup>
?????? 2.服務。服務多次。所有的服務都由services方法分配,主要由doGet和doPost。
?????? 3.銷毀。正常一次,調用destroy方法。如果一個servlet長時間不使用,也會自動銷毀,而當再次使用時也會重新初始化。
?????? 4.卸載。加載和卸載有容器處理。
24.Servlet中的forward和redirect的區別
?????? Forward是RequestDispatcher接口定義的,而redirect是response定義的。一個是服務器端跳轉,一個是客戶端跳轉。
25.MVC各部分的技術,如何實現。
?????? MVC:MODEL、VIEW、CONTROLLER
?????? |-Mode:JavaBean:業務處理、數據處理
?????? |-View:最好不存在Scriptlet,可使用標簽消除
|-Controller:控制,接受View傳遞的內容和調用JavaBean,并根據JavaBean的處理結果進行跳轉。
實現原理:所有的JSP將內容提交給Servlet,Servlet接受這些內容并調用相應的JavaBean進行業務及數據的處理,JavaBean完成業務的操作。之后Servlet將其提交給JSP顯示。
26.實現國際化的思路。
?????? Local、屬性文件、ResourceBundle
???????國際化程序的實現,是根據本機操作系統的語言類型,根據不同的屬性文件,所有的程序代碼基本一樣,但是文字顯示不一樣,所以將內容作為屬性文件出現之后,可以值顯示屬性文件中的字。
27.描述JSP和Servlet的區別、共同點、各自應用的范圍。
?????? JSP:先有Servlet,再有JSP。Servlet是在Java中嵌入HTML,JSP是在HTML中嵌入Java代碼。
JSP可以完成的,Servlet都可以完成,但是對于過濾器、監聽器只能由Servlet完成。
應用范圍:JSP用于顯示,Servlet用于控制。
28.簡述web.xml的作用
???????稱為部署描述符,在整個Java中是容器都會存在部署描述符,此部署描述符可以控制整個web中各個組件的運行狀態。
北風網筆試面試精講
1.????找奇數:public static Boolean isOdd(int i){return i%2==1;}
忽略了對負數進行考慮。比如-1%2就是false,但是-1是奇數。應該為return i%2!=0;
2.????浮點數想加減:System.out.pirntln(2.0-1.1);輸出結果為0.9999999999
Java默認為double,因此輸出的小數位數長。可改為System.out.printf(“%.2f”,2.0-1.1);輸出為0.9.
3.????長整除:final long MICRO = 24*60*60*1000*1000;final MILL = 24*60*60*1000;System.out.println(MICRO/MILL);結果不為1000;
應該為:final long MICRO = 24L*60*60*1000*1000;final MILL = 24L*60*60*1000;因為之前都是int型,最終MICRO和MILL都是int型,計算式溢出??梢酝ㄟ^在其中一個數加上L提升整體的類型為long型。
4.????交換變量:int x =1948;int y = 2001; x^=y^=x^y=y;
C/C++中可以這樣,但是Java中應該改為:y=(x^=(y^=x))^y
?????? 5.??? System.out.proint(‘H’+’a’);
??????????????輸出結果為169。因為單引號表示字符char,相加的會自動提升為int型。
6.????字符數組:char[] numbers = {’1’,’2’};System.out.println(number);輸出為12.而如下語句System.out.println(“number”+number);輸出為number@2342.
???????因為跟字符串運算時默認調用toStirng方法,數組的toString默認為Object的toString,打印出來的是hashCode。
7.?????????轉義字符:System.out.println(“a\u0022.length()+\u0022b”.length());
輸出結果為2。因為\u0022表示的是雙引號的轉義字符。
8.?????????打印輸出類名:MyClass.class.getName().replaceAll(“.”,”/”+”.class”);
還是需要注意轉義字符的使用。“.”應該改為“\\.”。
?????? 9.??? StringBuffer的使用;
StringBuffer構造時有StringBuffer(int capacity),因此使用StringBuffer sb = new StringBuffer(‘p’);需要格外注意,?‘P’表示的是int類型的數!!!可改為“P”。
?????? 10.?? Math.rand(-11.5)=-11.四舍五入往前如!
?????? 11.?? I/O時finally中其實也不能寫close關閉語句,因為close關閉語句也會拋出異常。
總結
以上是生活随笔為你收集整理的Java、Java Web面试题(来源于MLDN、北方网)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 为什么伪类的content
- 下一篇: [css] 头部设置meta也可以做到