1. 程式人生 > >做最好的自己,做最好的設計。

做最好的自己,做最好的設計。

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(責任鏈模式)
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某一個類的例項,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類例項。當得到子類的例項後,開發人員可以呼叫基類中的方法而不必考慮到底返回的是哪一個子類的例項。