色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql查詢創(chuàng)建代碼,Java面試題目網(wǎng)站有哪些

江奕云2年前20瀏覽0評論
mysql查詢創(chuàng)建代碼,Java面試題目網(wǎng)站有哪些?

關于贏在面試的Java題系列基本收集整理完成了,所有題目都是經(jīng)過精心挑選的,很基礎又考驗求職者的基本功,應該說被面試到的幾率很大。這里整理挑選出來供大家面試前拿來看一看。

1、a.hashCode() 有什么用?與 a.equals(b) 有什么關系?

hashCode() 方法對應對象整型的 hash 值。它常用于基于 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。它與 equals() 方法關系特別緊密。根據(jù) Java 規(guī)范,兩個使用 equal() 方法來判斷相等的對象,必須具有相同的 hash code。

2、字節(jié)流與字符流的區(qū)別

要把一段二進制數(shù)據(jù)數(shù)據(jù)逐一輸出到某個設備中,或者從某個設備中逐一讀取一段二進制數(shù)據(jù),不管輸入輸出設備是什么,我們要用統(tǒng)一的方式來完成這些操作,用一種抽象的方式進行描述,這個抽象描述方式起名為IO流,對應的抽象類為OutputStream和InputStream,不同的實現(xiàn)類就代表不同的輸入和輸出設備,它們都是針對字節(jié)進行操作的。

計算機中的一切最終都是二進制的字節(jié)形式存在。對于經(jīng)常用到的中文字符,首先要得到其對應的字節(jié),然后將字節(jié)寫入到輸出流。讀取時,首先讀到的是字節(jié),可是我們要把它顯示為字符,我們需要將字節(jié)轉換成字符。由于這樣的需求很廣泛,Java專門提供了字符流包裝類。

底層設備永遠只接受字節(jié)數(shù)據(jù),有時候要寫字符串到底層設備,需要將字符串轉成字節(jié)再進行寫入。字符流是字節(jié)流的包裝,字符流則是直接接受字符串,它內部將串轉成字節(jié),再寫入底層設備,這為我們向IO設備寫入或讀取字符串提供了一點點方便。

字符向字節(jié)轉換時,要注意編碼的問題,因為字符串轉成字節(jié)數(shù)組,其實是轉成該字符的某種編碼的字節(jié)形式,讀取也是反之的道理。

3、什么是Java序列化,如何實現(xiàn)Java序列化?或者請解釋Serializable接口的作用。

我們有時候將一個Java對象變成字節(jié)流的形式傳出去或者從一個字節(jié)流中恢復成一個Java對象,例如,要將Java對象存儲到硬盤或者傳送給網(wǎng)絡上的其他計算機,這個過程我們可以自己寫代碼去把一個Java對象變成某個格式的字節(jié)流再傳輸。

但是,jre本身就提供了這種支持,我們可以調用OutputStream的writeObject方法來做,如果要讓Java幫我們做,要被傳輸?shù)膶ο蟊仨殞崿F(xiàn)serializable接口,這樣,Javac編譯時就會進行特殊處理,編譯的類才可以被writeObject方法操作,這就是所謂的序列化。需要被序列化的類必須實現(xiàn)Serializable接口,該接口是一個mini接口,其中沒有需要實現(xiàn)方法,implements Serializable只是為了標注該對象是可被序列化的。

例如,在web開發(fā)中,如果對象被保存在了Session中,tomcat在重啟時要把Session對象序列化到硬盤,這個對象就必須實現(xiàn)Serializable接口。如果對象要經(jīng)過分布式系統(tǒng)進行網(wǎng)絡傳輸,被傳輸?shù)膶ο缶捅仨殞崿F(xiàn)Serializable接口。

4、描述一下JVM加載class文件的原理機制?

JVM中類的裝載是由ClassLoader和它的子類來實現(xiàn)的,Java ClassLoader是一個重要的Java運行時系統(tǒng)組件。它負責在運行時查找和裝入類文件的類。

5、heap和stack有什么區(qū)別。

Java的內存分為兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入一個方法時,會為這個方法單獨分配一塊私屬存儲空間,用于存儲這個方法內部的局部變量,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。

堆是與棧作用不同的內存,一般用于存放不在當前方法棧中的那些數(shù)據(jù),例如,使用new創(chuàng)建的對象都放在堆里,所以,它不會隨方法的結束而消失。方法中的局部變量使用final修飾后,放在堆中,而不是棧中。

6、GC是什么?為什么要有GC?

GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內存回收會導致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

7、垃圾回收的優(yōu)點和原理。并考慮2種回收機制。

Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由于垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。

垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經(jīng)死亡的或者長時間沒有使用的對象進行清除和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。

回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。

8、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?

對于GC來說,當程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象為"不可達"時,GC就有責任回收這些內存空間。

程序員可以手動執(zhí)行System.gc(),通知GC運行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行。

9、Java中throw和throws有什么區(qū)別?

throw 用于拋出 Java.lang.Throwable 類的一個實例化對象,意思是說你可以通過關鍵字 throw 拋出一個Exception,如:

throw new IllegalArgumentException(“XXXXXXXXX″)

而throws 的作用是作為方法聲明和簽名的一部分,方法被拋出相應的異常以便調用者能處理。Java 中,任何未處理的受檢查異常強制在 throws 子句中聲明。

10、Java中會存在內存泄漏嗎,請簡單描述。

先解釋什么是內存泄漏:所謂內存泄露就是指一個不再被程序使用的對象或變量一直被占據(jù)在內存中。Java中有垃圾回收機制,它可以保證當對象不再被引用的時候,對象將自動被垃圾回收器從內存中清除掉。

由于Java使用有向圖的方式進行垃圾回收管理,可以消除引用循環(huán)的問題,例如有兩個對象,相互引用,只要它們和根進程不可達,那么GC也是可以回收它們的。

Java中的內存泄露的情況:長生命周期的對象持有短生命周期對象的引用就很可能發(fā)生內存泄露,盡管短生命周期對象已經(jīng)不再需要,但是因為長生命周期對象持有它的引用而導致不能被回收,這就是Java中內存泄露的發(fā)生場景,通俗地說,就是程序員可能創(chuàng)建了一個對象,以后一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是Java中可能出現(xiàn)內存泄露的情況,例如,緩存系統(tǒng),我們加載了一個對象放在緩存中(例如放在一個全局map對象中),然后一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。

11 、說一說Servlet的生命周期?

Servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由Javax.servlet.Servlet接口的init(),service()和destroy方法表達。

Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。

web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現(xiàn),根據(jù)請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。

12、Servlet API中forward()與redirect()的區(qū)別?

(1).從地址欄顯示來說

forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發(fā)給瀏覽器.瀏覽器根本不知道服務器發(fā)送的內容從哪里來的,所以它的地址欄還是原來的地址.

redirect是服務端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所以redirect等于客戶端向服務器端發(fā)出兩次request,同時也接受兩次response。

(2).從數(shù)據(jù)共享來說

forward:轉發(fā)頁面和轉發(fā)到的頁面可以共享request里面的數(shù)據(jù).

redirect:不能共享數(shù)據(jù).

redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源.

forward方法只能在同一個Web應用程序內的資源之間轉發(fā)請求.forward 是服務器內部的一種操作.

redirect 是服務器通知客戶端,讓客戶端重新發(fā)起請求.

所以,你可以說 redirect 是一種間接的請求, 但是你不能說"一個請求是屬于forward還是redirect "

(3).從運用地方來說

forward:一般用于用戶登陸的時候,根據(jù)角色轉發(fā)到相應的模塊.

redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網(wǎng)站等.

(4).從效率來說

forward:高.

redirect:低.

13、request.getAttribute()和 request.getParameter()有何區(qū)別?

(1),request.getParameter()取得是通過容器的實現(xiàn)來取得通過類似post,get等方式傳入的數(shù)據(jù)。

request.setAttribute()和getAttribute()只是在web容器內部流轉,僅僅是請求處理階段。

(2),getAttribute是返回對象,getParameter返回字符串

(3),getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()設置之后,才能夠通過getAttribute()來獲得值,它們傳遞的是Object類型的數(shù)據(jù)。而且必須在同一個request對象中使用才有效。,而getParameter()是接收表單的get或者post提交過來的參數(shù)

14、jsp靜態(tài)包含和動態(tài)包含的區(qū)別

(1)、<%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發(fā)生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發(fā)生在編譯時期,也就是將Java文件編譯為class文件的時期

(2)、使用靜態(tài)包含只會產(chǎn)生一個class文件,而使用動態(tài)包含會產(chǎn)生多個class文件

(3)、使用靜態(tài)包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態(tài)包含只是將被包含的頁面的內容復制到包含的頁面中去;而動態(tài)包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數(shù)范圍要相對大些,不僅可以取到傳遞到包含頁面的參數(shù),同樣也能取得在包含頁面向下傳遞的參數(shù)。

15 、MVC的各個部分都有那些技術來實現(xiàn)?如何實現(xiàn)?

MVC是Model-View-Controller的簡寫。Model代表的是應用的業(yè)務邏輯(通過JavaBean,EJB組件實現(xiàn)),View是應用的表示面(由JSP頁面產(chǎn)生),Controller是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現(xiàn)。這些組件可以進行交互和重用。

16、jsp有哪些內置對象?作用分別是什么?

JSP共有以下9個內置的對象:

(1),request 用戶端請求,此請求會包含來自GET/POST請求的參數(shù)

(2),response 網(wǎng)頁傳回用戶端的回應

(3),pageContext 網(wǎng)頁的屬性是在這里管理

(4),session 與請求有關的會話期

(5),application servlet 正在執(zhí)行的內容

(6),out 用來傳送回應的輸出

(7),config servlet的構架部件

(8),page JSP網(wǎng)頁本身

(9),exception 針對錯誤網(wǎng)頁,未捕捉的例外

17 、Http中,get和post方法的區(qū)別

(1),Get是向服務器發(fā)索取數(shù)據(jù)的一種請求,而Post是向服務器提交數(shù)據(jù)的一種請求

(2),Get是獲取信息,而不是修改信息,類似數(shù)據(jù)庫查詢功能一樣,數(shù)據(jù)不會被修改

(3),Get請求的參數(shù)會跟在url后進行傳遞,請求的數(shù)據(jù)會附在URL之后,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連,%XX中的XX為該符號以16進制表示的ASCII,如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送,如果是空格,轉換為+,如果是中文/其他字符,則直接把字符串用BASE64加密。

(4),Get傳輸?shù)臄?shù)據(jù)有大小限制,因為GET是通過URL提交數(shù)據(jù),那么GET可提交的數(shù)據(jù)量就跟URL的長度有直接關系了,不同的瀏覽器對URL的長度的限制是不同的。

(5),GET請求的數(shù)據(jù)會被瀏覽器緩存起來,用戶名和密碼將明文出現(xiàn)在URL上,其他人可以查到歷史瀏覽記錄,數(shù)據(jù)不太安全。

在服務器端,用Request.QueryString來獲取Get方式提交來的數(shù)據(jù)Post請求則作為http消息的實際內容發(fā)送給web服務器,數(shù)據(jù)放置在HTML Header內提交,Post沒有限制提交的數(shù)據(jù)。Post比Get安全,當數(shù)據(jù)是中文或者不敏感的數(shù)據(jù),則用get,因為使用get,參數(shù)會顯示在地址,對于敏感數(shù)據(jù)和不是中文字符的數(shù)據(jù),則用post。

(6),POST表示可能修改變服務器上的資源的請求,在服務器端,用Post方式提交的數(shù)據(jù)只能用Request.Form來獲取。

(僅供參考,如果有更好的回答,歡迎探討)

18 、什么是cookie?Session和cookie有什么區(qū)別?

Cookie是會話技術,將用戶的信息保存到瀏覽器的對象.

區(qū)別:

(1)cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務器上

(2)cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙,如果主要考慮到安全應當使用session

(3)session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用COOKIE

(4)單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。

結論:

將登陸信息等重要信息存放為SESSION;其他信息如果需要保留,可以放在COOKIE中。

19 、jsp和servlet的區(qū)別、共同點、各自應用的范圍?

JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯后是“類servlet”。

Servlet和JSP最主要的不同點在于:Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。

JSP側重于視圖,Servlet主要用于控制邏輯。在struts框架中,JSP位于MVC設計模式的視圖層,而Servlet位于控制層.

20 、tomcat容器是如何創(chuàng)建servlet類實例?用到了什么原理?

當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然后對xml文件進行解析,并讀取servlet注冊信息。然后,將每個應用中注冊的servlet類都進行加載,并通過反射的方式實例化。(有時候也是在第一次請求時實例化)在servlet注冊時加上<load-on-startup>1</load-on-startup>如果為正數(shù),則在一開始就實例化,如果不寫或為負數(shù),則第一次請求實例化。

21、JDBC訪問數(shù)據(jù)庫的基本步驟是什么?

(1),加載驅動

(2),通過DriverManager對象獲取連接對象Connection

(3),通過連接對象獲取會話

(4),通過會話進行數(shù)據(jù)的增刪改查,封裝對象

(5),關閉資源

22 、說說preparedStatement和Statement的區(qū)別

(1),效率:預編譯會話比普通會話對象,數(shù)據(jù)庫系統(tǒng)不會對相同的sql語句不會再次編譯

(2),安全性:可以有效的避免sql注入攻擊!sql注入攻擊就是從客戶端輸入一些非法的特殊字符,而使服務器端在構造sql語句的時候仍然能夠正確構造,從而收集程序和服務器的信息和數(shù)據(jù)。比如:“select * from t_user where userName = ‘” + userName + “ ’ and password =’” + password + “’”如果用戶名和密碼輸入的是’1’ or ‘1’=’1’ ; 則生產(chǎn)的sql語句是:“select * from t_user where userName = ‘1’ or ‘1’ =’1’ and password =’1’ or ‘1’=’1’ 這個語句中的where 部分沒有起到對數(shù)據(jù)篩選的作用。

23 、說說事務的概念,在JDBC編程中處理事務的步驟。

(1) 事務是作為單個邏輯工作單元執(zhí)行的一系列操作。

(2),一個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和持久性 (ACID) 屬性,只有這樣才能成為一個事務

事務處理步驟:

(3),conn.setAutoComit(false);設置提交方式為手工提交

(4),conn.commit()提交事務

(5),出現(xiàn)異常,回滾 conn.rollback();

24 、數(shù)據(jù)庫連接池的原理。為什么要使用連接池。

(1),數(shù)據(jù)庫連接是一件費時的操作,連接池可以使多個操作共享一個連接。

(2),數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。我們可以通過設定連接池最大連接數(shù)來防止系統(tǒng)無盡的與數(shù)據(jù)庫連接。更為重要的是我們可以通過連接池的管理機制監(jiān)視數(shù)據(jù)庫的連接的數(shù)量、使用情況,為系統(tǒng)開發(fā),測試及性能調整提供依據(jù)。

(3),使用連接池是為了提高對數(shù)據(jù)庫連接資源的管理

25 、JDBC的臟讀是什么?哪種數(shù)據(jù)庫隔離級別能防止臟讀?

當我們使用事務時,有可能會出現(xiàn)這樣的情況,有一行數(shù)據(jù)剛更新,與此同時另一個查詢讀到了這個剛更新的值。這樣就導致了臟讀,因為更新的數(shù)據(jù)還沒有進行持久化,更新這行數(shù)據(jù)的業(yè)務可能會進行回滾,這樣這個數(shù)據(jù)就是無效的。數(shù)據(jù)庫的TRANSACTIONREADCOMMITTED,TRANSACTIONREPEATABLEREAD,和TRANSACTION_SERIALIZABLE隔離級別可以防止臟讀。

26 、什么是幻讀,哪種隔離級別可以防止幻讀?

幻讀是指一個事務多次執(zhí)行一條查詢返回的卻是不同的值。假設一個事務正根據(jù)某個條件進行數(shù)據(jù)查詢,然后另一個事務插入了一行滿足這個查詢條件的數(shù)據(jù)。之后這個事務再次執(zhí)行了這條查詢,返回的結果集中會包含剛插入的那條新數(shù)據(jù)。這行新數(shù)據(jù)被稱為幻行,而這種現(xiàn)象就叫做幻讀。

只有TRANSACTION_SERIALIZABLE隔離級別才能防止產(chǎn)生幻讀。

27 、JDBC的DriverManager是用來做什么的?

JDBC的DriverManager是一個工廠類,我們通過它來創(chuàng)建數(shù)據(jù)庫連接。當JDBC的Driver類被加載進來時,它會自己注冊到DriverManager類里面然后我們會把數(shù)據(jù)庫配置信息傳成DriverManager.getConnection()方法,DriverManager會使用注冊到它里面的驅動來獲取數(shù)據(jù)庫連接,并返回給調用的程序。

28、execute,executeQuery,executeUpdate的區(qū)別是什么?

(1),Statement的execute(String query)方法用來執(zhí)行任意的SQL查詢,如果查詢的結果是一個ResultSet,這個方法就返回true。如果結果不是ResultSet,比如insert或者update查詢,它就會返回false。我們可以通過它的getResultSet方法來獲取ResultSet,或者通過getUpdateCount()方法來獲取更新的記錄條數(shù)。

(2),Statement的executeQuery(String query)接口用來執(zhí)行select查詢,并且返回ResultSet。即使查詢不到記錄返回的ResultSet也不會為null。我們通常使用executeQuery來執(zhí)行查詢語句,這樣的話如果傳進來的是insert或者update語句的話,它會拋出錯誤信息為 “executeQuery method can not be used for update”的java.util.SQLException。

(3),Statement的executeUpdate(String query)方法用來執(zhí)行insert或者update/delete(DML)語句,或者 什么也不返回,對于DDL語句,返回值是int類型,如果是DML語句的話,它就是更新的條數(shù),如果是DDL的話,就返回0。只有當你不確定是什么語句的時候才應該使用execute()方法,否則應該使用executeQuery或者executeUpdate方法。

29、SQL查詢出來的結果分頁展示一般怎么做?

Oracle:

MySQL:

sql server:

30、JDBC的ResultSet是什么?

在查詢數(shù)據(jù)庫后會返回一個ResultSet,它就像是查詢結果集的一張數(shù)據(jù)表。ResultSet對象維護了一個游標,指向當前的數(shù)據(jù)行。開始的時候這個游標指向的是第一行。如果調用了ResultSet的next()方法游標會下移一行,如果沒有更多的數(shù)據(jù)了,next()方法會返回false。可以在for循環(huán)中用它來遍歷數(shù)據(jù)集。默認的ResultSet是不能更新的,游標也只能往下移。也就是說你只能從第一行到最后一行遍歷一遍。不過也可以創(chuàng)建可以回滾或者可更新的ResultSet

當生成ResultSet的Statement對象要關閉或者重新執(zhí)行或是獲取下一個ResultSet的時候,ResultSet對象也會自動關閉。可以通過ResultSet的getter方法,傳入列名或者從1開始的序號來獲取列數(shù)據(jù)。

以上就是我總結的這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值。