Java面試更新

一、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 no程序員

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

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

六、webservice ?
企業發佈的服務可以經過internet訪問而且調用的如今服務。
實現服務的硬件平臺、操做系統和編程語言
主要構成有wsdl:web服務描述語言spring

七、SOA的特色?
可重用
鬆耦合sql

八、webservice
JAX-WS
CXF數據庫

九、抽象類與普通類的區別:
抽象類與普通類的惟一區別就是不能建立實例對象和容許有abstract方法;編程

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

十一、運行時異常與通常異常的區別?
異常分類兩類:運行時異常,和檢查異常【RuntimeException,CheckException】.
檢查異常就是編譯器必需要求方法拋出的異常,好比IO異常,線程異常
運行時異常是程序在運行是拋出的異常,程序會將異常交給JVM,又jVM負責異常的拋出,好比:nopointerException ,分母不爲0 的異常等等。

十二、Servlet的生命週期?
Servlet的生命週期分爲:init(),doXxx(),destroy(); 在Servlet容器初始化的時候,執行init()方法,請求到達的時候執行Service方法,去請求doGet(),doPost()方法,在服務器決定要銷燬實例的時候

1三、ArrayList,Vector,LinkList的存儲性能和特性?
首先話說:容器頂層的接口:Iterator,Collection,Map
Collection:Set List Queue ArrayList繼承與List接口,存儲的方式是以數組方式來存儲,非多線程安全,查找速度快,可是插入速度慢 LinkList也是繼承了List接口,存儲的方式是:雙向鏈表的方式,非多線程安全,插入刪除速度快,可是查找速度慢
Vector繼承List接口,存儲方式是數組的方式,多線程安全

1四、Collection 和 Collections的區別。
Collection是集合的頂層接口,Collections是集合的工具類
Collections工具類提供了搜索,排序,線程安全,添加,移除等一些通用的方法。

1五、& 與 && 的區別:
&按位與 &&邏輯與:有短路功能

1六、heap和stack有什麼區別。
棧是一種線形集合,其添加和刪除元素的操做應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素
1.棧(stack)與堆(heap)都是Java用來在Ram中存放數據的地方。與C++不一樣,Java自動管理棧和堆,程序員不能直接地設置棧或堆。
2.棧的優點是,存取速度比堆要快,僅次於直接位於CPU中的寄存器。但缺點是,存在棧中的數據大小與生存期必須是肯定的,缺少靈活性。另外,棧數據能夠共享,詳見第3點。堆的優點是能夠動態地分配內存大小,生存期也沒必要事先告訴編譯器,Java的垃圾收集器會自動收走這些再也不使用的數據。但缺點是,因爲要在運行時動態分配內存,存取速度較慢。

1七、轉發與重定向的區別?forward and redirect的區別?
forward是服務器請求資源,服務器直接去請求訪問目標地址,把URL響應的內容發送給瀏覽器,瀏覽器不知道服務發送的內容是哪裏來的。
redirect是服務器端根據邏輯,發送一個狀態碼,告訴瀏覽器去從新請求的地址。

控制反轉:要消除應用程序對插件實現的依賴,依賴注入並非惟一的選擇
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.*」讓每一個類都注入。

基本數據類型包括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中內存分析
  棧(Stack):存放基本類型的變量數據和對象的引用,但對象自己不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字符串常量對象存放在常量池中)。
  堆(heap):存放全部new出來的對象。
  常量池(constant pool):在堆中分配出來的一塊存儲區域,存放儲顯式的String常量和基本類型常量(float、int等)。另外,能夠存儲不常常改變的東西(public static final)。常量池中的數據能夠共享。
  靜態存儲:存放靜態成員(static定義的)。

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

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

數據庫面試題

一、sql語言包括:數據定義,數據操縱數據控制
數據庫定義:主要是對數據庫表的操做,create,drop,alert
數據庫操縱:主要是對數據庫表數據的操做,select,insert ,update detele
數據庫控制:主要是對數據庫權限的控制,grant
二、完整性約束:實體完整性,參照完整性,用戶定義完整性

三、數據庫的三大範式
1nf:屬性不可拆分
2nf:主鍵惟一性
3nf:非主屬性不依賴於任何候選字

四、事務的四大特性
A:原子性(Atomicity)
事務是數據庫的邏輯工做單位,事務中包括的諸操做要麼全作,要麼全不作。
B:一致性(Consistency)
事務執行的結果必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。一致性與原子性是密切相關的。
C:隔離性(Isolation)
一個事務的執行不能被其餘事務干擾。
D:持續性/永久性(Durability)
一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。

五、數據庫各類鏈接區別: 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;

相關文章
相關標籤/搜索