程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> java 面試總結

java 面試總結

編輯:JAVA綜合教程

java 面試總結


1、static變量與實體變量的區別?
static是靜態變量,static可以通過類名直接訪問
內存方面的不同:static在定義的時候jvm就會分配空間,
而實體變量只有在創建對象的時候才會去分配空間

2、int Integer的區別?
Integer 是int的包裝類。
Integer 是對象,默認為null,int 的默認值是0

3、public protected friendly private 之間的區別?
當前類 同一包 繼承類 不同包
public √ ok ok ok
protected √ ok ok no
friendly √ ok no no
private √ no no no

4、重載與重寫的區別?
overload重載:方法名稱相同,參數不同
overwrite重寫:父類方法的重新寫

5、數據庫分頁查詢
oracle:select * from (select * from table where romnum >0) where romnum <20;
mysql:select * from table limit 0,20

6、webservice ?
企業發布的服務能夠通過internet訪問並且調用的現在服務。
實現服務的硬件平台、操作系統和編程語言
主要構成有wsdl:web服務描述語言

7、SOA的特點?
可重用
松耦合

8、webservice
JAX-WS
CXF

9、抽象類與普通類的區別:
抽象類與普通類的唯一區別就是不能創建實例對象和允許有abstract方法;

10、抽象類與接口的區別:
abstract class和interface是Java語言中的兩種定義抽象類的方式,它們之間有很大的相似性。
但是對於它們的選擇卻又往往反映出對於問題領域中的概 念本質的理解、對於設計意圖的反映是否正確、
合理,因為它們表現了概念間的不同的關系(雖然都能夠實現需求的功能)。
這其實也是語言的一種的慣用法。
總結幾句話來說:
抽象類和接口都不能直接實例化,如果要實例化,抽象類變量必須指向實現所有抽象方法的子類對象,
接口變量必須指向實現所有接口方法的類對象。
抽象類要被子類繼承,接口要被類實現。
接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實現
接口裡定義的變量只能是公共的靜態的常量,抽象類中的變量是普通變量。
抽象類裡的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那麼該子類只能是抽象類。
同樣,一個實現接口的時候,如不能全部實現接口方法,那麼該類也只能為抽象類。
抽象方法只能申明,不能實現。abstract void abc();不能寫成abstract void abc(){}。
抽象類裡可以沒有抽象方法
如果一個類裡有抽象方法,那麼這個類只能是抽象類
抽象方法要被實現,所以不能是靜態的,也不能是私有的。
接口可繼承接口,並可多繼承接口,但類只能單根繼承。

控制反轉:要消除應用程序對插件實現的依賴,依賴注入並不是唯一的選擇
IOC:依賴注入:依賴注入的形式主要有三種,
我分別將它們叫做構造函數注入(Constructor Injection)、
設值方法注入(Setter Injection)
和接口注入(Interface Injection)。
如果讀過最近關於IoC的一些討論材料,你不難看出:
這三種注入形式分別就是type 1 IoC(接口注入)、type 2 IoC(設值方法注入)和type 3 IoC(構造函數注入)。

所謂AOP,即Aspect orientied program,就是面向方面的編程,
2.解釋什麼是方面:貫穿到系統的各個模塊中的系統一個功能就是一個方面,
比如,記錄日志,統一異常處理,事務處理,全限檢查,這些功能都是軟件系統
的一個面,而不是一點,在各個模塊中都要出現。
3.什麼是面向方面編程:把系統的一個方面的功能封裝成對象的形式來處理
4.怎麼進行面向方面編程:把功能模塊對應的對象作為切面嵌入到原來的各個系統模塊中,
采用代理技術,代理會調用目標,同時把切面功能的代碼(對象)加入進來,所以,
用spring配置代理對象時只要要配兩個屬性,分別表示目標和切面對象(Advisor)。

Ioc就是實例接口或者實例類交給IOC容器去做(如果把工廠模式理解成一個IOC也沒什麼問題)

AOP就是織入技術,說白了,想實現的效果就是在方法執行前,執行中,執行後動態插入方法
首先說AOP,其實原理很簡單,就是對你返回的實例進行包裝,把這個實例的每個方法前中後加入方法,
在這裡沒有IOC的話,那麼這個實現就會對程序員暴露出來,在加入IOC後,就完美了
流程就是,IOC去實例對象,在實例的時候再調用AOP的程序對這個對象再包裝,
返回給編程人員的最終對象就是經過包裝後的對象了,就這麼簡單。至於怎麼實現,有很多方法
最典型的就是Sprint.net,它是用反射中Emit實現的

IOC:控制反轉也叫依賴注入。利用了工廠模式
將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啟動的時候,spring會把你在配置文件中配置的bean都初始化好,然後在你需要調用的時候,就把它已經初始化好的那些bean分配給你需要調用這些bean的類(假設這個類名是A),分配的方法就是調用A的setter方法來注入,而不需要你在A裡面new這些bean了。
注意:面試的時候,如果有條件,畫圖,這樣更加顯得你懂了
AOP:面向切面編程。(Aspect-Oriented Programming)
AOP可以說是對OOP的補充和完善。OOP引入封裝、繼承和多態性等概念來建立一種對象層次結構,用以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但並不適合定義從左到右的關系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。在OOP設計中,它導致了大量代碼的重復,而不利於各個模塊的重用。
將程序中的交叉業務邏輯(比如安全,日志,事務等),封裝成一個切面,然後注入到目標對象(具體業務邏輯)中去。

實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼
簡單點解釋,比方說你想在你的biz層所有類中都加上一個打印‘你好’的功能這你經可以用aop思想來做,你先寫個類寫個方法,方法經實現打印‘你好’讓後你Ioc這個類 ref=“biz.*”讓每個類都注入。

數據庫各種連接區別:
left join,right join,inner join(join)
left join與right join之間是相對的:
基本的例子:select * from table1 t1 left join table2 t2 on t1.col1 = t2.col2;
這個時候查出來的結果是:table1 的全部集合,table2的部分集合
如果想查找table2的全部集合:則可以使用right join:
select * from table1 t1 right join table2 t2 on t1.col1 = t2.col2;
inner join 與join是完全相同的,查找的是兩個表的交集。
select * from table1 t1 inner join table2 t2 on t1.col1 = t2.table2 where t1.id = 1;

基本數據類型包括byte、int、char、long、float、double、boolean和short。
九大封裝類:Byte,Integer,Char,Long,Float,Double,Boolean,Short,String;

線程的實現方式:
繼承Thread類,實現Runnable接口,通過線程池的方式去實現

sleep(),wait()方法的區別:
sleep() 當前線程暫停執行,讓出CPU資源給其他的線程去執行,監控狀態依然不變,但是sleep()不會放棄對象鎖。
wait() 當前線程放棄對象鎖,進入等待狀態,只有在notify的時候才能被喚醒,
但是sleep(),在線程執行完之後會立刻進入執行狀態。

java 基本類型與封裝類的區別
1.基本類型只能按值傳遞,而每個基本類型對應的封裝類是按引用傳遞的。
2.從性能上說java中的基本類型是在棧上創建的,而所有的對象類型都是在堆上創建的,(對象的引用在棧上創建)。
3.封裝類的出現,是為了更方便的使用一些基本類型不具備的方法,比如valueOf(),toString()等等。
4.如果想傳遞一個int對象的引用,而不是值,那只能用封裝類。
5.基本數據可以自動封裝成封裝類,基本數據類型的好處就是速度快(不涉及到對象的構造和回收),封裝類的目的主要是更好的處理數據之間的轉換,方法很多,用起來也方便。

[在棧上分配內存的調用效率和在堆上分配內存的效率差太多了。雖然在棧上分配內存效率高,不過在棧上分配內存有內存洩露的問題。]

Java中的23種設計模式:
Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),
Adapter(適配器模式), Bridge(橋梁模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),
Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例後,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved