1. 程式人生 > >Java知識複習(四)

Java知識複習(四)

最近準備跳槽,又要好好複習基本知識了。過了個年,前面剛接觸的springboot也只能先放放了。就先把自己複習了哪些羅列出來吧。

Set裡的元素是不能重複的那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?contains來區分是否有重複的物件。還是都不用。

在比較時先呼叫hashCode方法,如果不相同,證明不相等。

如果相同,再呼叫equals方法,如果equals方法相同,證明相等,不相同,證明不相等。

==:主要用在基本資料型別及引用

Equals:主要是物件或物件引用的比較。

集合中是否包含某一個元素用contains來判斷。

sleep() 和 wait() 有什麼區別?

— 擁有物件不同 

— wait可以釋放物件鎖,sleep保留物件鎖 

— wait可以是任意物件來呼叫,sleep只能當前執行緒呼叫 

— wait可以通過notify隨時喚醒,sleep只能等待設定時間結束後自然喚醒,否則將引發異常 

— wait必須在同步方法或同步塊中進行呼叫,sleep可以在任意位置呼叫

JSP的九大內建物件及方法

Request request表示HttpServletRequest物件。取客戶端表單域資訊及cookie, header, 和session

response response表示HttpServletResponse物件,對客戶端的響應返回文字、寫cookies。

out out 向客戶端列印html文字.

pageContext :當前jsp頁面的上下文環境,可以得到session、request、application等內建物件,在自定義標籤中使用的很多。

session session表示一個請求的javax.servlet.http.HttpSession物件。Session一個使用者多個頁面共享同一變數。

application applicaton 表示一個javax.servle.ServletContext物件。存放容器級的變數。

config config表示一個javax.servlet.ServletConfig物件。該物件用於存取servlet例項的初始化引數。

page page表示從該頁面產生的一個servlet例項

exception:異常,當iserrorpage=true表示為發生異常時顯示的頁面,正常頁面中<%@page erropage="error.jsp"%>來指定發生異常跳轉到哪個異常頁面

jdbc、hibernate、ibatis的區別

jdbc:手動

手動寫sql

delete、insert、update要將物件的值一個一個取出傳到sql中,不能直接傳入一個物件。

select:返回的是一個resultset,要從ResultSet中一行一行、一個欄位一個欄位的取出,然後封裝到一個物件中,不直接返回一個物件。

ibatis的特點:半自動化

sql要手動寫

delete、insert、update:直接傳入一個物件

select:直接返回一個物件

hibernate:全自動

不寫sql,自動封裝

delete、insert、update:直接傳入一個物件

select:直接返回一個物件

spring中的核心類有那些,各有什麼作用?

BeanFactory:產生一個新的例項,可以實現單例模式

BeanWrapper:提供統一的get及set方法

ApplicationContext:提供框架的實現,包括BeanFactory的所有功能

Spring的 IOC和AOP指的是什麼?

IOC ,全稱 (Inverse Of Control) ,中文意思為:控制反轉, Spring 框架的核心基於控制反轉原理。 
控制反轉是一種將元件依賴關係的建立和管理置於程式外部的技術。 
由容器控制程式之間的關係,而不是由程式碼直接控制 

由於控制權由程式碼轉向了容器,所以稱為反轉 

AOP面向切面程式設計(AOP是Aspect Oriented Program的首字母縮寫),就是一種在執行時,動態地將程式碼切入到類的指定方法、指定位置上的程式設計思想就是面向切面的程式設計。

Spring IOC的三種注入方式

1.    介面注入

2.    getter,setter方式注入

3.    構造器注入

1.介面注入

public class ClassA {
  private InterfaceB clzB;
  public void doSomething() {
    Ojbect obj = Class.forName(Config.BImplementation).newInstance();
    clzB = (InterfaceB)obj;
    clzB.doIt(); 
  }
……
}

上面程式碼中,ClassA依賴於InterfaceB的實現,如何獲得InterfaceB實現類的例項?傳統的方法是在程式碼中建立 InterfaceB實現類的例項,並將賦予clzB.這樣一來,ClassA在編譯期即依賴於InterfaceB的實現.為了將呼叫者與實現者在編譯 期分離,於是有了上面的程式碼.
我們根據預先在配置檔案中設定的實現類的類名(Config.BImplementation),動態載入實現類,並通過InterfaceB強制轉型後為ClassA所用,這就是介面注入的一個最原始的雛形.

public class ClassA {
  private InterfaceB clzB;
  public Object doSomething(InterfaceB b) {
    clzB = b;
    return clzB.doIt();
  }
……
}

上面程式碼中,載入介面實現並建立其例項的工作由容器完成.
在執行期,InterfaceB例項將由容器提供.即使在IOC的概念尚未確立時,這樣的方法也已經頻繁出現在我們的程式碼中.

public class MyServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
    ……
  }
}

HttpServletRequest和HttpServletResponse例項由Servlet Container在執行期動態注入.

2.Setter設定注入
基於設定模式的依賴注入機制更加直觀,也更加自然.

public class ClassA {
  private InterfaceB clzB;
  public void setClzB(InterfaceB clzB) {
    this.clzB = clzB;
  }
……
}

3.構造器注入

public class DIByConstructor {
  private final DataSource dataSource;
  public DIByConstructor(DataSource ds) {
    this.dataSource = ds;
  }
……
}

構造器注入,即通過建構函式完成依賴關係的設定,容器通過呼叫類的構造方法將其所需的依賴關係注入其中.

相關推薦

Java知識複習

最近準備跳槽,又要好好複習基本知識了。過了個年,前面剛接觸的springboot也只能先放放了。就先把自己複習了哪些羅列出來吧。 Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?用contains來區分是否有重複的物件。還是都不用。 在比較時先呼叫h

Java基礎知識複習-- 對二維陣列排序+求質數的個數

1.練習-二維陣列排序 首先定義一個5X8的二維陣列,然後使用隨機數填充滿。 藉助Arrays的方法對二維陣列進行排序。 參考思路: 先把二維陣列使用System.arraycopy進行陣列複製到一個一維陣列 然後使用sort進行排序 最後再複製回到二維陣列。 pack

JAVA基礎複習異常和IO

1、不應該讓方法來終止程式,應該由呼叫者決定是否終止程式,但是又要儘量使用if來進行簡單測試而不是異常處理來測試 2、異常是物件,而物件都採用類來定義,異常的根類是java.lang.Throwable 3、異常類主要分為三種類型:系統錯誤(JAVA虛擬機器丟擲,免檢異常)、異常(要被被捕獲

JAVA基礎複習

1、不應該讓方法來終止程式,應該由呼叫者決定是否終止程式,但是又要儘量使用if來進行簡單測試而不是異常處理來測試 2、異常是物件,而物件都採用類來定義,異常的根類是java.lang.Throwable 3、異常類主要分為三種類型:系統錯誤(JAVA虛擬機器丟擲,免檢異常

JAVA面試常問知識總結——集合

先附一張java集合框架圖   下面根據面試中常問的關於集合的問題進行了梳理: Arraylist 與 LinkedList 有什麼不同? 1. 是否保證執行緒安全: ArrayList 和 LinkedList 都是不同步的,也就是不保證執行緒安全; 2. 底

java基礎知識-面試

輸入輸出流 java.io.Serializable介面? java序列化:java提供了一種物件序列化的機制,該機制中,一個物件可以被表示為一個位元組序列(位元組流),將序列化物件寫入檔案,也可以從檔案中讀取出來,並且對它進行反序列化,物件的型別資訊,物

Java基礎知識複習-- 位元組流 && 字元流

一、位元組流 InputStream位元組輸入流 ,OutputStream位元組輸出流 ,用於以位元組的形式讀取和寫入資料 所有的資料存放在計算機中都是以數字的形式存放的。 所以字母就需要轉換為數字才能夠存放。 比如A就對應的數字65,a對應的數字97. 不同的字母和符號對應不

Java基礎知識複習--陣列

1.冒泡法排序 冒泡法排序的思路: 第一步:從第一位開始,把相鄰兩位進行比較,如果發現前面的比後面的大,就把大的資料交換在後面,迴圈比較完畢後,                 最後一位就是最大的

Java基礎知識複習--流程控制

1.練習-黃金分割點 尋找某兩個數相除,其結果 離黃金分割點 0.618最近 分母和分子不能同時為偶數 分母和分子 取值範圍在[1-20] package review2; public class Test1 { public static void main(S

Java基礎知識複習

一、算術操作符 1.練習-求和:             要求: 使用Scanner從控制檯獲取兩個數字,然後計算這兩個數字的和 import java.util.Scanner; public class Test1 {

Java基礎知識複習-- 簡單加密檔案

1.題目 加密演算法: 數字: 如果不是9的數字,在原來的基礎上加1,比如5變成6, 3變成4,如果是9的數字,變成0 字母字元: 如果是非z字元,向右移動一個,比如d變成e, G變成H,如果是z,z->a, Z-A,字元需要保留大小寫 非字母字元 比如’,&^ 保

Java基礎知識複習-- 二叉樹排序

二叉樹 二叉樹由各種節點組成 二叉樹特點: 每個節點都可以有左子節點,右子節點 每一個節點都有一個值 二叉樹排序 假設通過二叉樹對如下10個隨機數進行排序 67,7,30,73,10,0,78,81,10,74 排序的第一個步驟是把資料插入到該二叉樹中,

Java基礎知識複習 -- 刪除ArrayList中的資料

首先初始化一個Hero集合,裡面放100個String物件,名稱分別是從 str 0 str 1 str 2 … str 99. 通過遍歷的手段,刪除掉名字編號是8的倍數的物件 若最簡單的使用位置查詢的方式來刪除對應物件會發現,若每次查詢並刪除,後面的物件會自動前移

Java基礎知識複習-- 遍歷ArrayList的三種方法

第一種遍歷 普通for迴圈 可以用size()和get()分別得到大小,和獲取指定位置的元素,結合for迴圈就可以遍歷出ArrayList的內容 第二種遍歷,使用迭代器 從最開始的位置判斷"下一個"位置是否有資料,如果有就通過next取出來,並且把指標向

Java基礎知識複習-- 中文編碼問題

一、練習-數字對應的中文 找出 E5 B1 8C 這3個十六進位制對應UTF-8編碼的漢字 參考程式碼1 // 找出 E5 B1 8C 這3個十六進位制對應UTF-8編碼的漢字 byte[] bs = new byte[3]; bs[0] = (by

java 基礎知識複習

(八)1. 當遍歷集合或陣列時,如果需要訪問集合或陣列的下標,那麼最好使用舊式的方式來實現迴圈或遍歷,而不要使用增強的for迴圈,因為它丟失了下標資訊。 2. Integer類有一個快取,它會快取介於-128~127之間的整數。 3. 可變引數:可變引數本質上就是一個數組,對

java線程

讀寫 img 其他 手動 dem com 字段 只讀 停止線程 java5線程並發庫   線程並發庫是JDK 1.5版本級以上才有的針對線程並發編程提供的一些常用工具類,這些類被封裝在java.concurrent包下。   該包下又有兩個子包,分別是atomic和lock

jdk源碼閱讀筆記之java集合框架LinkedList

ray private array public 源碼閱讀 jdk源碼閱讀 oid color 解釋 關於LinkedList的分析,會從且僅從其添加(add)方法入手。 因為上一篇已經分析過ArrayList,相似的地方就不再敘述,關註點在LinkedList的特點。 屬

自制Java虛擬機-對象、new、invokespecial

utf pool tar 字節 can run 可見 frame 屬性 自制Java虛擬機(四)-對象、new、invokespecial 一、對象的表示 剛開始學Java的時候,圖書館各種教程,書名往往都是“Java面向對象高級編程”,通常作者都會與C++做個比較,列出的

Java基礎——Servlet

服務 興趣 .com coo 容易 log 日常 信心 文件 最近一直在學習Servlet,真的有煩躁,一下子要創建好幾個文件,服務端、客戶端、html頁面。。。。學習進度蠻慢的,很容易失掉信心。當學習到cookie時,發現有好多實現是在我們日常生活中可以會遇得到的,於是又