一、static變量與實體變量的差異?
static是靜態變量,static可以經過類名直接訪問
內存方面的不一樣:static在定義的時候jvm就會分配空間,
而實體變量僅僅有在建立對象的時候纔會去分配空間java
二、int Integer的差異?
Integer 是int的包裝類。
Integer 是對象。默以爲null,int 的默認值是0mysql
三、public protected friendly private 之間的差異?
當前類 同一包 繼承類 不一樣包
public √ ok ok ok
protected √ ok ok no
friendly √ ok no no
private √ no no noweb
四、重載與重寫的差異?
overload重載:方法名稱一樣,參數不一樣
overwrite重寫:父類方法的又一次寫面試
五、數據庫分頁查詢
oracle:select * from (select * from table where romnum >0) where romnum <20;
mysql:select * from table limit 0,20spring
六、webservice ?
企業公佈的服務可以經過internet訪問並且調用的現在服務。
實現服務的硬件平臺、操做系統和編程語言
主要構成有wsdl:web服務描寫敘述語言sql
七、SOA的特色?
可重用
鬆耦合數據庫
八、webservice
JAX-WS
CXF編程
九、抽象類與普通類的差異:
抽象類與普通類的惟一差異就是不能建立實例對象和贊成有abstract方法;設計模式
十、抽象類與接口的差異:
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,事實上原理很是easy,就是對你返回的實例進行包裝,把這個實例的每個方法前中後增長方法,
在這裏沒有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(責任鏈模式) 工廠模式:工廠模式是一種經常被使用到的模式。依據工廠模式實現的類可以依據提供的數據生成一組類中某一個類的實例,一般這一組類有一個公共的抽象父類並且實現了一樣的方法,但是這些方法針對不一樣的數據進行了不一樣的操做。首先需要定義一個基類,該類的子類經過不一樣的方法實現了基類中的方法。而後需要定義一個工廠類,工廠類可以依據條件生成不一樣的子類實例。當獲得子類的實例後。開發者可以調用基類中的方法而沒必要考慮究竟返回的是哪個子類的實例。