1. 程式人生 > >Java基礎面試知識點總結

Java基礎面試知識點總結


    1 Java專案一般從src目錄開始有com.*.*.A.java這樣的目錄結構。這就是包結構。所以一般編譯後的結構是跟包結構一模一樣的,這樣的結構保證了import時能找到正確的class引用包訪問許可權就是指同包下的類可見。
    
    import 一般加上全路徑,並且使用.*時只包含當前目錄的所有類檔案,不包括子目錄。
    
    2 外部類只有public和default兩種修飾,要麼全域性可訪問,要麼包內可訪問。
    
    3 內部類可以有全部訪問許可權,因為它的概念就是一個成員變數,所以訪問許可權設定與一般的成員變數相同。
    
    非靜態內部類是外部類的一個成員變數,只跟外部類的例項有關。
    
    靜態內部類是獨立於外部類存在的一個類,與外部類例項無關,可以通過外部類.內部類直接獲取Class型別。


異常


    1 異常體系的最上層是Throwable類
    子類有Error和Exception
    Exception的子類又有RuntimeException和其他具體的可檢查異常。
    
    2 Error是jvm完全無法處理的系統錯誤,只能終止執行。
    
    執行時異常指的是編譯正確但執行錯誤的異常,如陣列越界異常,一般是人為失誤導致的,這種異常不用try catch,而是需要程式設計師自己檢查。
    
    可檢查異常一般是jvm處理不了的一些異常,但是又經常會發生,比如Ioexception,Sqlexception等,是外部實現帶來的異常。
    
    3 多執行緒的異常流程是獨立的,互不影響。
    大型模組的子模組異常一般需要重新封裝成外部異常再次丟擲,否則只能看到最外層異常資訊,難以進行除錯。
    
    日誌框架是異常報告的最好幫手,log4j,slf4j中,在工作中必不可少。


泛型



    Java中的泛型是偽泛型,只在編譯期生效,執行期自動進行泛型擦除,將泛型替換為實際上傳入的型別。
    
    泛型類用class <T> A {
        
    }這樣的形式表示,裡面的方法和成員變數都可以用T來表示型別。泛型介面也是類似的,不過泛型類實現泛型介面時可以選擇注入實際型別或者是繼續使用泛型。
    
    泛型方法可以自帶泛型比如void <E> E go();
    
    泛型可以使用?萬用字元進行泛化 Object<?>可以接受任何型別
    
    也可以使用 <? extends Number> <? super Integer>這種方式進行上下邊界的限制。


Class類和Object類



    Java反射的基礎是Class類,該類封裝所有其他類的型別資訊,並且在每個類載入後在堆區生成每個類的一個Class<類名>例項,用於該類的例項化。
    
    Java中可以通過多種方式獲取Class型別,比如A.class,new A().getClass()方法以及Class.forName("com.?.?.A")方法。
    
    Object是所有類的父類,有著自己的一些私有方法,以及被所有類繼承的9大方法。
    
    有人討論Object和Class型別誰先載入誰後加載,因為每個類都要繼承Object,但是又得先被載入到堆區,事實上,這個問題在JVM初始化時就解決了,沒必要多想。


javac和java


    javac 是編譯一個java檔案的基本命令,通過不同引數可以完成各種配置,比如匯入其他類,指定編譯路徑等。
    
    java是執行一個java檔案的基本命令,通過引數配置可以以不同方式執行一個java程式或者是一個jar包。
    
    javap是一個class檔案的反編譯程式,可以獲取class檔案的反編譯結果,甚至是jvm執行程式的每一步程式碼實現。
    
    


反射


    Java反射包reflection提供對Class,Method,field,constructor等資訊的封裝型別。
    
    通過這些api可以輕易獲得一個類的各種資訊並且可以進行例項化,方法呼叫等。
    
    類中的private引數可以通過setaccessible方法強制獲取。
    
    反射的作用可謂是博大精深,JDK動態代理生成代理類的位元組碼後,首先把這個類通過defineclass定義成一個類,然後用class.for(name)會把該類載入到jvm,之後我們就可以通過,A.class.GetMethod()獲取其方法,然後通過invoke呼叫其方法,在呼叫這個方法時,實際上會通過被代理類的引用再去呼叫原方法。
 
列舉類


    列舉類繼承Enum並且每個列舉類的例項都是唯一的。
    
    列舉類可以用於封裝一組常量,取值從這組常量中取,比如一週的七天,一年的十二個月。
    
    列舉類的底層實現其實是語法糖,每個例項可以被轉化成內部類。並且使用靜態程式碼塊進行初始化,同時保證內部成員變數不可變。
    
序列化


    序列化的類要實現serializable介面
    
    transient修飾符可以保證某個成員變數不被序列化
    
    readObject和writeOject來實現例項的寫入和讀取。
    
    待更新。
    
    事實上,一些擁有陣列變數的類都會把陣列設為transient修飾,這樣的話不會對整個陣列進行序列化,而是利用專門的方法將有資料的陣列範圍進行序列化,以便節省空間。


動態代理


    jdk自帶的動態代理可以代理一個已經實現介面的類。
    
    cglib代理可以代理一個普通的類。
    
    動態代理的基本實現原理都是通過位元組碼框架動態生成位元組碼,並且在用defineclass載入類後,獲取代理類的例項。
    
    一般需要實現一個代理處理器,用來處理被代理類的前置操作和後置操作。在JDK動態代理中,這個類叫做invocationHandler。
    
    JDK動態代理首先獲取被代理類的方法,並且只獲取在介面中宣告的方法,生成代理類的位元組碼後,首先把這個類通過defineclass定義成一個類,然後把該類載入到jvm,之後我們就可以通過,A.class.GetMethod()獲取其方法,然後通過invoke呼叫其方法,在呼叫這個方法時,實際上會通過被代理類的引用再去呼叫原方法。
    
    而對於cglib動態代理,一般會把被代理類設為代理類的父類,然後獲取被代理類中所有非final的方法,通過asm位元組碼框架生成代理類的位元組碼,這個代理類很神奇,他會保留原來的方法以及代理後的方法,通過方法陣列的形式儲存。
    
    cglib的動態代理需要實現一個enhancer和一個interceptor,在interceptor中配置我們需要的代理內容。如果沒有配置interceptor,那麼代理類會呼叫被代理類自己的方法,如果配置了interceptor,則會使用代理類修飾過的方法。
    


多執行緒

相關推薦

Java基礎面試知識點總結

    1 Java專案一般從src目錄開始有com.*.*.A.java這樣的目錄結構。這就是包結構。所以一般編譯後的結構是跟包結構一模一樣的,這樣的結構保證了import時能找到正確的class引用包訪問許可權就是指同包下的類可見。          import 一般加上全路徑,並且使用.*時只包含當

Java基礎零碎知識點總結(持續補充)

多態 java基礎 引用類型 ram object 轉換 安全 特性 翻譯 1.重載:同名不同參 重寫:同名同參同返回類型(方法體與父類一致),只存在於繼承關系中(多態),需要父類原有方法可用super(),子類函數訪問修飾權限不能少於父類。 2.OOP(Object

這些Java基礎面試知識點,你都掌握了嗎?

本文主要是我最近複習Java基礎原理過程中寫的Java基礎學習總結。Java的知識點其實非常多,並且有些知識點比較難以理解,有時候我們自以為理解了某些內容,其實可能只是停留在表面上,沒有理解其底層實現原理。 紙上得來終覺淺,絕知此事要躬行。筆者之前對每部分的內容 對做了比較深入的學習以及程式碼實

Java面試知識點總結

可見 一點 增強 但我 link 應對 pen sleep executors 本篇文章會對面試中常遇到的Java技術點進行全面深入的總結,幫助我們在面試中更加得心應手,不參加面試的同學也能夠借此機會梳理一下自己的知識體系,進行查漏補缺(閱讀本文需要有一定的Java基礎;

JAVA面試知識點總結--資料型別

一、資料型別 基本資料型別 數值型別: 運算and型別轉換 自動裝拆箱and比較 bool

java基礎面試常考總結

1.陣列名稱.length 屬性 取得陣列長度 2.java.util.Arrays.sort(陣列名稱) 對基本資料型別進行排序。 3. “==” java提供的關係運算符,用於進行數值判斷,不能用於引用型別判斷, 4. 物件判斷用equals()(

Java面試知識點總結(牛客網)

---------------------https://blog.csdn.net/u012456528/article/details/79759487?utm_source=copy 1. 什麼是Java虛擬機器?為什麼Java被稱作是“平臺無關的程式語言”?

Java 面向物件(基礎知識點總結I

1、   類與物件的區別,類是物件的模板,物件是類的例項 2、   建立類的語法:class 類名稱{},類中由屬性及方法組成 3、   物件的建立語法:          · 宣告物件:類名稱 物件

常見Java面試知識點總結

截止到2018年3月30日,牛客網提供了120道Java面試題,這裡整理了部分較為重點的內容,而且對於答案有困惑,補充瞭解釋內容,便於理解。全部Java題目可參考:https://www.nowcoder.com/ta/review-java 1. 什麼是

Java集合類常見面試知識點總結

Java集合類學習總結 這篇總結是基於之前部落格內容的一個整理和回顧。 這裡先簡單地總結一下,更多詳細內容請參考我的專欄:深入淺出Java核心技術  https://blog.csdn.net/column/details/21930.html 裡面有包括Java集合類在內的眾多Java核心技術系列

Java基礎面試:集合、內部類、線程

public 死鎖 exceptio read 多線程 三種 xtend arraylist 表示 package test; import java.util.Hashtable; import java.util.Map; public class test {

關於Java的一些知識點總結

知識點總結 自己 pool 順序 堆棧 子類 model 架構 深入   本篇文章會對面試中常遇到的Java技術點進行全面深入的總結,幫助我們在面試中更加得心應手,不參加面試的同學也能夠借此機會梳理一下自己的知識體系,進行查漏補缺(閱讀本文需要有一定的Java基礎)。本

java基礎知識積累總結

發生 數據 相互轉換 移動智能終端 產生 包含 dep while 順序 參考:http://www.importnew.com/22083.html 參考:http://www.importnew.com/22087.html 十分感謝原作者的匯總,我在這個基礎上,有所改

JAVA基礎面試(四)

object 共享 {} 回收對象 我們 ret cat bsp 文件 31、String s = new String("xyz");創建了幾個StringObject?是否可以繼承String類? 兩個或一個都有可能,”xyz”對應一個對象,這個對象放在

JAVA基礎面試(五)

錯誤 equal lin 道理 區別 方式 釋放 分配 針對 41、a.hashCode() 有什麽用?與 a.equals(b) 有什麽關系? hashCode() 方法對應對象整型的 hash 值。它常用於基於 hash 的集合類,如 Hashtable、

java基礎學習_day01總結

ase 運行程序 ctrl direct pat 建議 流程 lips 文件夾 =================================================================================================

PYTHON 一些基礎面試題目總結

外部 刪除一個文件 tel 信息 mpi seq break list 請求 PYTHON 一些基礎面試題目總結http://www.bieryun.com/1191.html1. Python是如何進行內存管理的?答:從三個方面來說,一對象的引用計數機制,二垃

C#入門基礎語法知識點總結(變量、運算符、類型轉換)

add rem 靜態變量 問題: orm 年齡 指定 com oval 一、C#中的變量 變量的命名: 1、變量名的組成要求 組成:英文字母(A~Z,a~z)、數字(0~9)、下劃線(_),除此之外不能包含有其他字符 開頭:只能以字母或下劃線開頭 禁用:C#關鍵字(int、

Java基礎學習內容總結

byw999Java基礎內容; 1)Java中的關鍵字:以後常見的關鍵字:class,public,static(面向對象部分講),流程控制語句中關鍵字:if,else..基本數據類型:int,byte,short…synchronized(多線程中的)2)標識符:給類,接口,變量,方法起名字的字符序列3)

java中反射知識點總結

個數 etc tst generated forname 意義 getclass 數據類型 object 1 package Demo; 2 3 import java.lang.reflect.Constructor; 4 import java.la