1、servlet執行流程
客戶端發出http請求,web服務器將請求轉發到servlet容器,servlet容器解析url並根據web.xml找到相對應的servlet,並將request、response對象傳遞給找到的servlet,servlet根據request就可以知道是誰發出的請求,請求信息及其他信息,當servlet處理完業務邏輯後會將信息放入到response並響應到客戶端。
2、對ajax的理解
a)Ajax為異步請求,即局部刷新技術,在傳統的頁面中,用戶需要點擊按鈕或者事件觸發請求,到刷新頁面,而異步技術為不需要點擊即可觸發事件,這樣使得用戶體驗感增強,比如商城購物車的異步加載,當你點擊商品時無需請求後臺而直接動態修改參數。
3、內部類與外部類的調用
a)內部類可以直接調用外部類包括private的成員變量,使用外部類引用的this.關鍵字調用即可
b)而外部類調用內部類需要建立內部類對象
4、多線程
a)一個進程是一個獨立的運行環境,可以看做是一個程序,而線程可以看做是進程的一個任務,比如QQ是一個進程,而一個QQ窗口是一個線程。
b)在多線程程序中,多線程併發可以提高程序的效率,cpu不會因為某個線程等待資源而進入空閒狀態,它會把資源讓給其他的線程。
c)用戶線程就是我們開發程序是創建的線程,而守護線程為系統線程,如JVM虛擬中的GC
d)線程的優先級別:每一個線程都有優先級別,有限級別高的可以先獲取CPU資源使該線程從就緒狀態轉為運行狀態。也可以自定義線程的有限級別
e)死鎖:至少兩個以上線程爭取兩個以上cpu資源,避免死鎖就避免使用嵌套鎖,只需要在他們需要同步的地方加鎖和避免無限等待
5、HTTP協議
a)常用的請求方法有get、post
b)Get與post的區別:傳送數據,get攜帶參數與訪問地址傳送,用戶可以看見,這的話信息會不安全,導致信息洩露。而post則將字段與對應值封裝在實體中傳送,這個過程用戶是不可見的。Get傳遞參數有限制,而post無限制。
6、事物的理解
a)事物具有原子性,一致性,持久性,隔離性
b)原子性:是指在一個事物中,要麼全部執行成功,要麼全部失敗回滾。
c)一致性:事物執行之前和執行之後都處於一致性狀態
d)持久性:事物多數據的操作是永久性
e)隔離性:當一個事物正在對數據進行操作時,另一個事物不可以對數據進行操作,也就是多個併發事物之間相互隔離。
7.Java中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java編譯器會為這個類創建一個默認的構造函數。
Java中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java不支持像C++中那樣的複製構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java不會創建默認的複製構造函數。
8.hashCode()和equals()方法的重要性體現在什麼地方?
Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當根據鍵獲取值的時候也會用到這兩個方法。如果沒有正確的實現這兩個方法,兩個不同的鍵可能會有相同的hash值,因此,可能會被集合認為是相等的。而且,這兩個方法也用來發現重複元素。所以這兩個方法的實現對HashMap的精確性和正確性是至關重要的。
9.數組(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同點:
·Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
·Array大小是固定的,ArrayList的大小是動態變化的。
·ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
·對於基本類型數據,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。
·10.Java中Exception和Error有什麼區別?
·
·Exception和Error都是Throwable的子類。Exception用於用戶程序可以捕獲的異常情況。Error定義了不期望被用戶程序捕獲的異常。
·
·11.throw和throws有什麼區別?
·
·throw關鍵字用來在程序中明確的拋出異常,相反,throws語句用來表明方法不能處理的異常。每一個方法都必須要指定哪些異常不能處理,所以方法的調用者才能夠確保處理可能發生的異常,多個異常是用逗號分隔的。
·
·12.異常處理的時候,finally代碼塊的重要性是什麼?(譯者注:作者標題的序號弄錯了)
·
·無論是否拋出異常,finally代碼塊總是會被執行。就算是沒有catch語句同時又拋出異常的情況下,finally代碼塊仍然會被執行。最後要說的是,finally代碼塊主要用來釋放資源,比如:I/O緩衝區,數據庫連接
·13.什麼是Servlet?
·
·Servlet是用來處理客戶端請求併產生動態網頁內容的Java類。Servlet主要是用來處理或者是存儲HTML表單提交的數據,產生動態內容,在無狀態的HTTP協議下管理狀態信息。
·
·14.說一下Servlet的體系結構。
·
·所有的Servlet都必須要實現的核心的接口是javax.servlet.Servlet。每一個Servlet都必須要直接或者是間接實現這個接口,或者是繼承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最後,Servlet使用多線程可以並行的為多個請求服務
·15.GenericServlet和HttpServlet有什麼區別?
·
·GenericServlet是一個通用的協議無關的Servlet,它實現了Servlet和ServletConfig接口。繼承自GenericServlet的Servlet應該要覆蓋service()方法。最後,為了開發一個能用在網頁上服務於使用HTTP協議請求的Servlet,你的Servlet必須要繼承自HttpServlet。這裡有Servlet的例子。
·
·16.解釋下Servlet的生命週期。
·
·對每一個客戶端的請求,Servlet引擎載入Servlet,調用它的init()方法,完成Servlet的初始化。然後,Servlet對象通過為每一個請求單獨調用service()方法來處理所有隨後來自客戶端的請求,最後,調用Servlet(譯者注:這裡應該是Servlet而不是server)的destroy()方法把Servlet刪除掉。
·
17.什麼是cookie?session和cookie有什麼區別?
cookie是Web服務器發送給瀏覽器的一塊信息。瀏覽器會在本地文件中給每一個Web服務器存儲cookie。以後瀏覽器在給特定的Web服務器發請求的時候,同時會發送所有為該服務器存儲的cookie。下面列出了session和cookie的區別:
· 無論客戶端瀏覽器做怎麼樣的設置,session都應該能正常工作。客戶端可以選擇禁用cookie,但是,session仍然是能夠工作的,因為客戶端無法禁用服務端的session。
· 在存儲的數據量方面session和cookies也是不一樣的。session能夠存儲任意的Java對象,cookie只能存儲String類型的對象。
18.JSP請求是如何被處理的?
瀏覽器首先要請求一個以.jsp擴展名結尾的頁面,發起JSP請求,然後,Web服務器讀取這個請求,使用JSP編譯器把JSP頁面轉化成一個Servlet類。需要注意的是,只有當第一次請求頁面或者是JSP文件發生改變的時候JSP文件才會被編譯,然後服務器調用servlet類,處理瀏覽器的請求。一旦請求執行結束,servlet會把響應發送給客戶端。這裡看下如何在JSP中獲取請求參數。
19.JSP有什麼優點?
下面列出了使用JSP的優點:
· JSP頁面是被動態編譯成Servlet的,因此,開發者可以很容易的更新展現代碼。
· JSP頁面可以被預編譯。
· JSP頁面可以很容易的和靜態模板結合,包括:HTML或者XML,也可以很容易的和產生動態內容的代碼結合起來。
· 開發者可以提供讓頁面設計者以類XML格式來訪問的自定義的JSP標籤庫。
·20.接口和抽象類的區別是什麼?
·從設計層面來說,抽象是對類的抽象,是一種模板設計,接口是行為的抽象,是一種行為的規範。
Java提供和支持創建抽象類和接口。它們的實現有共同點,不同點在於:
接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個接口,但是隻能繼承一個抽象類
抽象類可以在不提供接口方法實現的情況下實現接口。
Java接口中的成員函數默認是public的。抽象類的成員函數可以是private,protected或者是public。
接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。
也可以參考JDK8中抽象類和接口的區別
·21.Java中的HashMap的工作原理是什麼?
·我們知道在Java中最常用的兩種結構是數組和模擬指針(引用),幾乎所有的數據結構都可以利用這兩種來組合實現,HashMap也是如此。實際上HashMap是一個“鏈表散列”,如下是它數據結構:最左側是一個數組,數組中的每一個元素都是一個鏈表,鏈表的每一個元素都是entry。
·HashMap是基於hashing的原理,我們使用put(key, value)存儲對象到HashMap中,使用get(key)從HashMap中獲取對象。當我們給put()方法傳遞鍵和值時,我們先對鍵調用hashCode()方法,返回的hashCode用於找到bucket位置來儲存Entry對象。
·22、訪問修飾符public,private,protected,以及不寫(默認)時的區別?
·答:區別如下:
·作用域 當前類 同包子類其他
·public √ √ √ √
·protected √ √ √ ×
·default √ √ × ×
·private √ × × ×
·類的成員不寫訪問修飾時默認為default。默認對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關係的類相當於私有。
·23、int 和Integer 有什麼區別
·答:Java是一個近乎純潔的面向對象編程語言,但是為了編程的方便還是引入不是對象的基本數據類型,但是為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對應的包裝類型(wrapper class),int的包裝類就是Integer,從JDK 1.5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。
·Java 為每個原始類型提供了包裝類型:
·原始類型: boolean,char,byte,short,int,long,float,double
·包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
·24、構造器(constructor)是否可被重寫(override)
·答:構造器不能被繼承,因此不能被重寫,但可以被重載。
·25、重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分
·26、靜態變量和實例變量的區別?
·答:靜態變量是被static修飾符修飾的變量,也稱為類變量,它屬於類,不屬於類的任何一個對象,一個類不管創建多少個對象,靜態變量在內存中有且僅有一個拷貝;實例變量必須依存於某一實例,需要先創建對象然後通過對象才能訪問到它。靜態變量可以實現讓多個對象共享內存。在Java開發中,上下文類和工具類中通常會有大量的靜態成員。
·31、String s=new String(“xyz”);創建了幾個字符串對象?
·答:兩個對象,一個是靜態存儲區的"xyz",一個是用new創建在堆上的對象。
·36、Java 中的final關鍵字有哪些用法?
·
·答:(1)修飾類:表示該類不能被繼承;(2)修飾方法:表示方法不能被重寫;(3)修飾變量:表示變量只能一次賦值以後值不能被修改(常量)
·49、列出一些你常見的運行時異常?
·答:
·ArithmeticException(算術異常)
·ClassCastException (類轉換異常)
·IllegalArgumentException (非法參數異常)
·IndexOutOfBoundsException (下表越界異常)
·NullPointerException (空指針異常)
·SecurityException (安全異常)
·
7、request.getParameter()和request.getAttribute()的區別?·答:
·a、request.getParameter()獲取的類型是String;
· request.getAttribute()獲取的類型是Object
·b、request.getPrameter()獲取的是POST/GET傳遞的參數值和URL中的參數;
· request.getAttribute()獲取的是對象容器中的數據值/對象
·c、request.setAttribute()和request.getAttribute()可以發送、接收對象;
· request.getParamter()只能接收字符串,官方不開放request.setParamter()(也就是沒有這個方法)
· setAttribute()和getAttribute()的傳參原理:
· setAttribute()是應用服務器把這個對象放在該頁面所對應的一塊內存中去,當你的頁面服務器重定向到另外一個頁面時,
· 應用服務器會把這塊內存拷貝到另一個頁面所對應的那塊內存中。這個就可以通過getAttribute()獲取到相應的參數值或者對象。
·13、JSP和Servlet有哪些相同點和不同點,他們之間的聯繫是什麼?
·答:JSP是Servlet的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類Servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在java文件中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是java和HTML可以組合成一個擴展名為.jsp的文件。JSP偏重於視圖,Servlet偏重於業務邏輯。
·14、詳細描述MVC。
·答:基於java的web應用系統採用MVC設計模型,即用Model(模型)、View(視圖)和Controller(控制)分離設計,這是目前web應用服務系統的主流設置方向。
· Model:處理業務邏輯的模塊。
· View:負責頁面顯示,顯示Model的處理結果給用戶,主要實現數據到頁面的轉換過程。
· Controller:負責每個請求的分發,把Form數據傳遞給Model進行處理,處理完成後,把處理結果返回給相應的View顯示給用戶。
·20、JSP的四種範圍?
·答:a、page是代表一個頁面相關的對象和屬性。一個頁面由一個編譯好的java servlet類(可以帶有include指令,但不可以帶有include動作)表示。這既包括servlet又包括編譯成servlet的jsp頁面。
· b、request是代表與web客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個web組件(由於forware指令和include動作的關係)
· c、session是代表與用於某個web客戶機的一個用戶體驗相關的對象和屬性。一個web回話也可以經常跨域多個客戶機請求。
· d、application是代表與整個web應用程序相關的對象和屬性。這實質上是跨域整個web應用程序,包括多個頁面、請求和回話的一個全局作用域。
·30、JSP頁面是如何被執行的?JSP執行效率比Servlet低嗎?
·答:當客戶端向一個JSP頁面發出請求時,Web Container將JSP轉換成Servlet的源代碼(只是第一次請求時),然後編譯轉化後的Servlet並加載到內存中執行,執行的結果Response到客戶端。
·JSP只在第一次執行的時候會轉化為Servlet,以後的每次執行Web容器都是直接執行編譯後的Servlet,所有JSP和Servlet只有第一次執行的時候不一樣,JSP慢一點,以後的執行都是相同的。
閱讀更多 IT生涯 的文章