Java面試基礎部分合集

來源:互聯網
上載者:User

標籤:ica   目標   elf   inpu   就會   copyright   並且   pad   buffer   

1.物件導向的三大特性

 

繼承、封裝、多態

 

什麼是繼承?

 

①繼承是物件導向程式設計能夠提高軟體開發效率的重要原因之一。

②繼承是具有傳遞性的,就像現實中孫子不僅長得像爸爸而且還像他爺爺。

③繼承來的屬性和方法是隱式的,也就是在本類裡面是看不見的。

④一個類只能有一個父類,也就是類只能是單繼承。

⑤一個介面可以有多個父類,也就是介面可以是多繼承。

實際項目開發中,一個類繼承於另一個類,那麼前者就是後者的子類,反則反之。

 

什麼是封裝?

 

對象資料和操作該對象的指令都是對象自身的一部分,能夠實現儘可能對外部隱藏資料。

實際項目開發中,使用封裝最多的就是實體類,常常和JavaBean(類必須是具體的和公用的,並且具有無參數的構造器)一起使用。

那麼,實體類有那些東西呢?

答:私人的成員變數、無參數的構造器、有參數的構造器、setter和getters方法、重寫tostring方法、重寫hashCode和equals方法。

 

什麼是多態?

 

①多態就是對象擁有多種形態:引用多態和方法多態。

②引用多態:父類的引用可以指向本類對象、父類的引用可以指向子類的對象。

③方法多態:建立本類對象時,調用的方法為本類的方法;建立子類對象時,調用的方法為子類重寫的方法或者繼承的方法。

④存在多態的必要條件:繼承、重寫。

⑤多態的作用是消除類型之間的耦合關係。

在實際項目開發中,A類繼承B類,如果在A類中不重寫B類的方法的時候,輸出的仍舊是B類方法裡面的資訊(B b=new A());如果在A類中重寫B類的方法的時候,輸出的是A類方法裡面的資訊(B b=new A())。

 

2.Java集合架構樹

 

 

 

 

Collection介面:它是Java集合架構的一個根介面,也是List、Set和Queue介面的父介面。同時它定義了可用於操作List、Set和Queue的方法—增刪改查。

 

Map介面:它提供了一種映射關係,其中的元素是以索引值對(key-value)的形式儲存的。Map介面有一個重要的實作類別HashMap。

①在Map介面中的索引值對是以Entry類型的對象執行個體形式存在。

②在Map介面中索引值(Key值)是不可以重複的,value值卻可以重複,也就是存在多對一的關係。

③在Map介面中提供了分別返回Key值的集合、value值的集合以及Entry集合的方法。

④Map支援泛型,同時Key值和value值都是可以為null的。

⑤在HashMap中的Entry對象是無序排序的,這點特性和List介面是相反的。

⑥在HashMap中有且只能有一個Key值為null的映射。(註:key值是不能重複的)

 

List介面:List介面有一個重要的實作類別ArrayList(數組序列)。

①List是元素有序並且可以重複的集合。

②List可以精確的控制每個元素的插入位置,或刪除某個元素的位置。

 

Comparator介面:臨時的比較規則。如果某一個類要實現這個介面,那必然要實現它的Compare()方法。

 

Comparable介面:預設的比較規則。當實現了這個介面,則表示這個類的執行個體可以比較大小,可以進行自然排序。如果某一個類要實現這個介面,那必然要實現它的CompareTo()方法。

 

3.Java中的IO流

 

位元組流:

 

//一個位元組一個位元組的讀寫

FileInputStream in=new FileInputStream("源檔案");

FileOutputStream out=new FileOutputStream("目標檔案");

......

in.close();

out.close();

 

首先要記住,一旦使用了IO流最後一定要記得關閉,這是常識。

 

//利用緩衝區,高效的讀取位元組

BufferedInputStream in=new BufferedInputStream(new FileInputStream("源檔案");

BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("目標檔案");

......

in.close();

out.close();

 

字元流:

 

InputStreamReader isr=new InputStreamReader(new FileInputStream("源檔案路徑"),"設定編碼");

OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("目標檔案路徑"),"設定編碼");

......

osw.close();

isr.close();

 

也可以這樣寫:

 

FileReader fr=new FileReader("源檔案路徑");

FileWriter fw=new FileWriter("目標檔案路徑");

......

fr.close();

fw.close();

 

//利用緩衝區,高效的讀取字元

BufferedReader br=new BufferedReader(new FileReade("源檔案路徑");

PrintWriter pw=new PrintWriter("目標檔案路徑");

......

br.close();

pw.close();

 

序列化和還原序列化:

 

//對象的序列化

ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(file));

 

這裡的file指的是String file="檔案在項目中的路徑";

 

//對象的還原序列化

ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));

 

4.Java的Socket通訊(多線程)

 

 

思路:

①首先建立伺服器端Socket,指定並偵聽某一個連接埠,然後迴圈監聽開始等待用戶端的串連….

②建立用戶端socket,指定伺服器位址和連接埠,然後擷取輸出資料流,向伺服器端發送請求,並關閉socket輸出資料流。

③服務端接收到用戶端的請求後,建立新線程並啟動。

④建立線程處理類,執行線程操作,擷取輸入資料流,服務端讀取用戶端使用者詳情,關閉資源。

⑤執行線程操作,擷取輸出資料流,響應用戶端請求,用戶端接受到服務端的響應,關閉資源。

 

簡單點講,就相當於我跟你說話(用戶端→服務端),你收到我說的話(服務端→線程處理類),大腦進行思考後(線程處理類),做出回答我的話(線程處理類→用戶端)。

 

5.關係型資料庫

 

資料庫的三範式:

①欄位不可分。

②有主鍵,非主鍵欄位依賴主鍵。

③非主鍵欄位不能互相依賴。

 

T-SQL:

 

在整個資料庫中,查詢操作佔據增刪改查的80%,而說到查詢,T-SQL語句自然不能少。上示。

 

增:

①插入單行

 

insert into <表名> (列名) values (列值)

 

②將現有的表資料添加到一個已有表

 

insert into <已有的新表> (列名) select <源表列名> from <源表名>

 

③直接拿現有表資料建立一個新表並填充

 

select <建立表列名> into <建立表名> from <源表名>

 

刪:

①刪除滿足條件的行

 

delete from <表名> where <刪除條件>

 

②刪除整個表

 

truncate table <表名>

 

註:刪除表的所有行,但表的結構、列、約束、索引等不會被刪除;不能用語有外建約束引用的表。

 

改:

①更新

 

update <表名> set <列名=更新值> where <更新條件>

 

子查詢:

 

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

 

其中:

①SELECT * FROM t1 …稱為外查詢。

②SELECT column1 FROM t2 稱為子查詢。

所以,我們就說子查詢是嵌套在外查詢內部的。而事實上它也有可能在子查詢內部再嵌套一個或者多個子查詢。這裡要注意,子查詢必須出現在圓括弧之間哦。

 

 

JavaWeb

JavaSpring 總結

 

JSP

思路:當使用者使用用戶端瀏覽器向伺服器發送一個請求訪問index.jsp頁面,當伺服器接收到客戶的請求之後,開始判斷使用者所訪問的這個資源是否是第一次訪問?

①如果是第一次請求,那麼Tomcat的JSP引擎就把這個JSP檔案轉換成一個Servlet(一個Servlet從本質上而言也是一個Java類),既然是一個Java類就需要通過編譯,產生相應的位元組碼檔案,然後執行jspInit這個初始化方法。再產生JSP頁面的位元組碼檔案,轉到③。

②直接存取所產生的JSP頁面的位元組碼檔案,轉到③。

③最後解析執行這個Java類當中的jspService方法,這個方法就是專門用來處理使用者的請求。

 

JSP九大內建對象:

 

out對象:它是JspWriter類的執行個體,是向用戶端輸出內容常用的對象。

request對象:它表示用戶端的一次請求,這個請求裡面的資訊是被封裝在request對象中的。同時它也是HttpServletRequest類的執行個體,並且具有請求域,也就是在完成用戶端的請求之前,該對象是一直有效。

常用方法:

 

request.setCharacterEncoding("UTF-8");//設定編碼,解決中文亂碼問題。

 

request.setAttribute("","");//前者為需要設定的屬性,後者為需要的值。

request.getAttribute();

 

request.getRequestDispatcher("index.jsp").forward(request, response);//請求轉寄到index.jsp頁面,該請求對象是一直有效。

 

response對象:它包含了響應客戶請求的相關資訊,它也是HttpServletResponse類的執行個體。和request一樣,它具有頁面的範圍,也就是在訪問一個頁面的時候,該頁面的response對象只對這次訪問有效,往後執行是不存在、無效的。

常用方法:

 

response.setContentType("text/html","charset="utf-8");//設定響應的MIMI類型。

 

response.sendRedirect("index.jsp");//請求重新導向,如果存在多次重新導向,那麼對象資料是不會儲存下來的,即為null。

 

請求轉寄和請求重新導向的區別分析:

 

  • 請求重新導向:用戶端行為,response.sendRedirect(),從本質上講等同於兩次請求,前一次的請求對象不會儲存,地址欄的URL地址會改變。

  • 請求轉寄:伺服器行為,request.getRequestDispatcher().forward(req, resp);是一次請求,轉寄後請求對象會儲存,地址欄的URL地址不會改變。

 

session對象:當我們第一次訪問頁面的時候,session對象就會被自動裝載和建立。它是HttpSession類的執行個體對象。

什麼是會話?為什麼要用session對象?

 

  • 會話:當一個用戶端開啟瀏覽器串連到伺服器開始,到用戶端關閉瀏覽器伺服器結束這個過程,我們稱為一個會話。

  • 在實際情況下,客戶在訪問伺服器的過程中,避免不了會在伺服器的幾個頁面之間切換,這時候服務端有必要知道當前操作的客戶是不是操作前幾個頁面的客戶,也就是必須要清楚知道是否同一個人在進行操作。所以就引入了session對象這個概念。

 

application對象:它實現了使用者間資料的共用,可以存放全域變數,它是ServletContext類的執行個體。它的生命週期開始於伺服器的啟動,終止於伺服器的關閉。

 

註:

①在使用者的前後串連或不同使用者之間的串連中,可以對application對象的同一屬性進行操作。

②在任何地方對application對象屬性的操作,都將影響到其他使用者對此的訪問。

 

JSP的指令和動作:

 

①三個編譯指令:page、include、taglib。

②七個動作指令:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getPProperty。

 

JSP指令:

 

include指令和include動作指令區別:

 

Session的生命週期

 

Session生命週期的“活動”思路:

①某次會話當中通過超連結開啟的新頁面屬於同一次會話。

②只有當前會話頁面沒有全部關閉,重新開啟新的瀏覽器視窗訪問同一項目資源時屬於同一次會話。

③除非本次會話的所有頁面都關閉後再重新訪問某個Jsp或者Servlet將會建立新的會話。

 

註:

注意原有會話是還存在的,只是這箇舊的SessionId仍然存在於服務端,只不過再也沒有用戶端會攜帶它然後交予服務端校正。

 

 

註:

①當Web容器啟動的時候,過濾器就已經載入並啟動了。

②執行個體化只會執行個體化一次,也就是說在Web容器中只會使用一次。

 

 

思路:

①首先判斷Servlet執行個體是否存在,如果存在則跳入第③步。

②初始化階段,init初始化方法是在建立執行個體之後完成的。

③響應階段,響應用戶端的請求,調用service()方法。由service()方法根據提交方式選擇性執行doGet()方法或者doPost()方法。

④終止階段,調用Destroy()方法銷毀,伺服器關閉。

 

Web監聽器

 

Web監聽器是有Servlet規範定義的一種特殊類,它可以監聽用戶端的請求和服務端的操作,同時它還可以監聽,包括ServletContext、HttpSession、ServletRequest等對象。

 

 

 

監聽器的分類

 

HttpSession的事件監聽器

 

ServletContext的事件監聽器

 

ServletRequest的事件監聽器

註:

這三個監聽事件,分別實現對應的介面,也就是圖示的1..N。既然實現了介面,即必然要實現其對應的方法,。主要用途也。

 

綁定到HttpSession域中的對象狀態的事件監聽器

註:

為什麼要用session鈍化?

首先,正常情況下,我們的session是存放在伺服器的session當中的,但是如果我們的使用者很多的時候,仍然把session存放在伺服器裡,這時伺服器的開銷是很大的,會直接影響我們Web應用的使用。所以就需要使用到session鈍化機制,它的本質就是將伺服器未使用到的session對象暫時序列化到系統檔案當中,當要使用的時候再還原序列化到伺服器記憶體當中。

 

Model1和Model2

註:

Model1是最早的能體現分層思想的一種開發模式,簡單來說Model1就是一種Jsp+JavaBean的一種開發模式。

缺點:可維護性和可擴充性是比較差的。

 

思路:

①首先由Jsp頁面向Servlet提交一個請求。

②然後在我們的控制層Servlet執行個體化一個模型層的對象或者調用模型層的一些功能。

③然後由模型層來訪問讀取我們的資料庫層。

④當得到讀取到結果後,再將結果返回到我們的控制層。

⑤控制層得到這個結果後,會根據這個結果給使用者展示不同的Jsp頁面。

 

Java面試基礎部分合集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.