關於JAVA

資料1:html

 

1、單繼承java

1.1Java類是否支持多重繼承?spring

答:繼承的基本原則是:
子類繼承父類的全部成員變量(包括靜態成員);
子類繼承除父類構造方法外的全部成員方法(包括靜態方法);
子類不能繼承父類的構造方法,但在其構造方法中會隱含調用父類的默認構造方法。
Java的類是單繼承的,不支持多繼承,即extends關鍵字後只能有一個類名稱,即直接父類。所以Java的類繼承關係造成一個樹型結構,而不是網狀結構。
要想實現相似於C++的多繼承關係,Java是經過接口間接實現的,即多個父類實現某一接口,每一個父接口有子接口,子類實現子接口。

 

1.2Java類是否能夠同時實現多個接口?編程

答:能夠,用逗號分隔多個接口便可。接口只能繼承多個接口。java中接口其實裏面全是抽象類 ,抽象類就是隻有方法名,方法體沒有 ,也就是說方法沒有實現, 接口能夠繼承多個接口,而類能夠實現多個接口,你實現一個接口,至關於從它那裏能夠獲得它的抽象方法。而本身也能夠增長本身的方法。瀏覽器

Interface 子接口 extends 父接口1,父接口2,。。。。。。。。安全

 

1.3一個接口是否能夠同時繼承多個接口?服務器

答:一個接口能夠繼承多個接口.interface C extends A, B {}是能夠的.
一個類能夠實現多個接口:class D implements A,B,C{}
可是一個類只能繼承一個類,不能繼承多個類class Bextends A{}
在繼承類的同時,也能夠繼承接口:class E extendsD implements A,B,C{}網絡

 

1.4爲何類只能單繼承,接口能夠多繼承?session

答:不容許類多重繼承的主要緣由是,若是A同時繼承B和C,而b和c同時有一個D方法,A如何決定該繼承那一個呢?
但接口不存在這樣的問題,接口全都是抽象方法繼承誰都無所謂,因此接口能夠繼承多個接口。socket

 

2、靜態和成員

 

2.1成員方法是否能夠訪問靜態變量?

2.2爲何靜態方法不能訪問成員變量?

答:類中的靜態方法與靜態變量都是在類加載的時候進行初始化的,而類中普通方法跟普通變量都是在類實例化的時候才初始化。

由此你的問題就顯而易見了,普通成員方法能夠訪問靜態變量是由於普通方法初始化的時候說明類已經在實例化了,此時靜態變量、靜態方法都已經初始化完畢,因此能夠訪問。而靜態方法不能訪問普通成員變量是由於靜態方法初始化的時候類並無實例化,也就是說此時普通成員變量尚未初始化,因此不能訪問。

 

3、內部類

3.1內部類分爲幾種?

答:內部類包括靜態嵌套類,成員內部類,方法內部類和匿名內部類四種類型。

 

3.2匿名內部類是否能夠訪問所在方法的參數有什麼要求?

答:參數必須是常量

3.三、爲何匿名內部類只能訪問常量參數?

答:(由於雖然匿名內部類在方法的內部,但實際編譯的時候,內部類編譯成Outer.Inner,這說明內部類所處的位置和外部類中的方法處在同一個等級上,外部類中的方法中的變量或參數只是方法的局部變量,這些變量或參數的做用域只在這個方法內部有效。由於編譯的時候內部類和方法在同一級別上,因此方法中的變量或參數只有爲final,內部類才能夠引用。)

4、StringBuffer與StringBuilder 

4.一、如下語句會建立幾個字符串對象? 

String str = 「Hello」 + 「world」 + 「have a nice day」; 

答:五個 ,三個標紅的毋庸置疑。另外兩個也會在字符串緩衝池中被創建哦。詳見 關於Java中equal函數和==的一些區別作一個總結

「Hello」、「world」、「Hello world」、「have a nice day」、「Hello world have a nice day」 

4.二、以上代碼有什麼缺點?有哪些方式能夠優化?

(在程序中這樣的語句多的話,會很費內存,優化方式是:將其改成String str += 「Hello」的格式)

4.三、StringBuffer與StringBuilder的區別是什麼?

(StringBuilder一個可變的字符序列。此類提供一個與 StringBuffer 兼容的API,但不保證同步。該類被設計用做 StringBuffer 的一個簡易替換,用在字符串緩衝區被單個線程使用的時候(這種狀況很廣泛)。若是可能,建議優先採用該類,由於在大多數實現中,它比 StringBuffer 要快。 StringBuffer 線程安全,StringBuilder 線程不安全)

 

5、覆蓋

5.一、什麼是方法的覆蓋?

(在Java中,子類可繼承父類中的方法,而不須要從新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想做必定的修改,這就須要採用方法的重寫。方法重寫又稱方法覆蓋。 若子類中的方法與父類中的某一方法具備相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。)

 

5.二、方法的覆蓋的語法要求是什麼?

答:1.覆蓋的方法的標誌必需要和被覆蓋的方法的標誌徹底匹配,才能達到覆蓋的效果; 

2.覆蓋的方法的返回值必須和被覆蓋的方法的返回一致; 

3.覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;

4.被覆蓋的方法不能爲private,不然在其子類中只是新定義了一個方法,並無對其進行覆蓋。

 

5.3爲何訪問控制符要求愈來愈寬泛,異常類型要愈來愈具體?

答:java類的訪問控制符主要是爲了體現面向對象的封裝和繼承的特性的,對於封裝來講越小越好,繼承的話就用protocted關鍵詞,越小別人對你的耦合度就越小,好比private,只有本身能訪問到,這樣若是有變化你能夠很好的改變,如今通常的屬性都是private

在java語言中,Exception是全部異常的父類。任何異常都擴展於Exception類。Exception就至關於一個錯誤類型。若是要定義一 個新的錯誤類型就擴展一個新的Exception子類。採用異常的好處還在於能夠精確的定位到致使程序出錯的源代碼位置,並得到詳細的錯誤信息。Java異常處理經過五個關鍵字來實現,try,catch,throw ,throws, finally。具體的異常處理結構由try….catch….finally塊來實現。try塊存放可能出現異常的java語句,catch用來捕獲發 生的異常,並對異常進行處理。Finally塊用來清除程序中未釋放的資源。無論理try塊的代碼如何返回,finally塊都老是被執行。

 

6、網絡層編程 

6.一、Socket工做在TCP/IP協議棧是哪一層?

(socket的實現部分,就是系統協議棧部分,應該包含了網絡層(ip),傳輸層(tcp/udp)等等。用socket寫程序的人,就要看用socket那部分了。若是你直接用ip層,rawsocket,假如你本身寫個tcp協議,那你應該作的就是傳輸層。 若是你是用tcp/udp等協議,作網絡應用,那應該是應用層。

 

6.二、傳輸層常見編程協議有哪些?並說出各自的特色。

TCP,UDP,SPX,NetBIOS,NetBEUI

☆ SPX:順序包交換協議,是Novell NetWare網絡的傳輸層協議。

☆ TCP:傳輸控制協議,是TCP/IP參考模型的傳輸層協議。

6.三、同一臺機器上的兩個Server程序是否可使用同一端口?(不能夠)
6.四、同一臺機器上的不一樣協議的兩個Server是否可使用同一端口?爲何?
(能夠,端口的惟一性的標識不是端口號,而是端口號和協議名稱的組合,應用程序和協議尋址時就是靠的這個組合)


7、Web編程
7.一、JSP中的聲明腳本,普通腳本、表達式腳本分別用什麼標籤表示?
( 聲明腳本<%! %>;普通腳本<% %>;表達式腳本<%= %>)

7.二、 聲明腳本中定義的變量和普通腳本定義的變量有什麼區別?使用時要注意什麼? 
全局變量處處能夠用,例如<%!%>聲明的,局部變量就是隻有函數內部能夠用普通腳本<%%>。 注意:普通腳本<% %> 裏面的是java代碼,和普通java類的語法同樣,而在兩個符號外面的都做爲html處理。<% java 代碼 %>在 JSP Scriptlet 裏可直接嵌入任何有效的java語言代碼。能夠在 scriptlet 內部可使用java。 <%! 聲明 %>在聲明部分能夠聲明變量和方法,它們只當前JSP頁面有效。

8、Hibenrate
8.一、一對一關係有哪幾種映射方式? 
3種共享主鍵,外鍵和關聯表
1.共享主鍵的一對一關聯映射
2.外鍵映射方式(使用外鍵進行實體一對一關聯)
3..關聯表映射方式
相互關聯關係上的劃分:1)一對一外鍵關聯映射(單向) 2)一對一外鍵關聯映射(雙向)3)一對一主鍵關聯映射(不重要)
Hibernate Annotation幾種關聯映射 一對一(One-To-One) 使用@OneToOne註解創建實體Bean之 間的一對一關聯。一對一關聯有三種狀況:(1).關聯的實體都共享一樣的主鍵,(2).其中一個實體經過外鍵關聯到另外一個實體的主鍵(注意要模擬一對一關 聯必須在外鍵列上添加惟一約束),(3).經過關聯表來保存兩個實體之間的鏈接關係(要模擬一對一關聯必須在每個外鍵上添加惟一約束)。

8.二、何時採用共享主鍵,何時採用惟一外鍵?
共享主鍵方式:就是限制兩個數據表的主鍵使用相同的值。
惟一外鍵方式:就是一個表的外鍵和另外一個表的惟一主鍵對應造成一對一映射關係。
一、共享主鍵方式:
在註冊時,每每不但要填寫 登陸帳戶和密碼,還要填寫其餘的詳細信息,這兩部分信息一般會放在不一樣的表中。這時登陸表和詳細信息表屬於典型的一對一關係,能夠按共享主鍵方式進行。
在進行該關聯時要對POJO類的ORM映射文件*.hbm.xml 進行修改:
如:
Login 表 與 Login 類的ORM映射文件 Login.hbm.xml 文件在<class...></class>標籤中添加: <!-- name 表示屬性名字,class表示被關聯的類的名字 -->
<one-to-one name = "detail" class = "org.model.Detail" constrained = "true" /> 而 detail 表 與 Detail 類的 ORM 映射文件 Detail.hbm.xml 文件中添加:
<!-- name 表示屬性名,class 表示被 關聯類的名字,cascade = "all" 代表 主控類的全部操做,對關聯類也執行一樣的操做,lazy="false"表示此關聯爲當即加載 -->
<one-to-one name = "login" class = "org.model.Login" cascade = "all" lazy = "false" />
二、惟一外鍵方式:
多對一的特殊狀況。

9、OpenSession與getCurrentSession
9.一、OpenSession() 與getCurrentSession() 兩個方法的區別是什麼?
getCurrentSession的話會自動關閉,而openSession須要你手動關閉。
若是你正在查詢,使用的openSession而沒有手動關閉,屢次以後會致使鏈接池溢出,系
統會掛掉的~
1 getCurrentSession建立的session會和綁定到當前線程,而openSession不會。
2 getCurrentSession建立的線程會在事務回滾或事物提交後自動關閉,而openSession必須手動關閉(調用session的close()方法)
3.getCurrentSession () 使用當前的session
openSession() 從新創建一個新的session
四、使用getCurrentSession()須要在hibernate.cfg.xml文件中加入以下配置:
* 若是使用的是本地事務(jdbc事務) <property name="hibernate.current_session_context_class">thread</property> * 若是使用的是全局事務(jta事務)
<property name="hibernate.current_session_context_class">jta</property>
9.二、getCurrentSession() 的實現原理是什麼?(ThreadLocal綁定到線程)

10、spring
10.一、簡述面向切面編程(AOP)的好處。
1.每一個業務邏輯放在一個地方(事務管理,日誌管理,安全,其餘),避免代碼分散到各 個角落 2. 業務邏輯更加清晰。AOP只是一種編程範式,用於提供從另外一角度來考慮程序結構以完善面向對象編程。主要優勢有:1-下降模塊之間的耦合度。2-使系統容 易擴展。3-更好的代碼複用。解耦合,高內下降耦合。
10.二、Spring中場勇敢的基礎切面有哪些?
權限判斷、異常處理,日誌記錄,事務管理,安全,性能監測,訪問控制,
10.三、spring切面的實現原理是什麼?
反射實現AOP動態代理模式

 

 

資料2:

 

1.類通常都存儲在本身的文件中,而且這個文件仍是和類名一致的。可是嵌套類之間是存儲在一塊兒的。對於嵌套在內部的類,不能夠在外部定義一個類去調用它!

 

2.三種狀況下方法不能被覆蓋?

答:static方法,final方法和final類中的方法。

 

3.this關鍵字:

答:能夠調用本類中的屬性即成員變量以及其它構造方法。加上this.name=name;說明是形參中的name賦值給this.name屬性。

 

4.Super關鍵字:

答:完成子類在覆蓋了父類中的方法後,調用子類所複製的父類的字段和方法。

 

5.靜態方法和非靜態方法:

答:(字段也分爲靜態和非靜態倆種)區別以下:

(1)非靜態方法必須在類實例化以後經過對象來調用,即:對象名.方法名

靜態方法能夠在類實例化以前調用,便可以對象名.方法名;也能夠類名.方法名

(2)靜態方法訪問本類成員時,只容許訪問靜態方法;而非靜態方法則能夠訪問靜態方法和非靜態方法;

(ps類實例化以後就是對象)

 

6.類的實例化----------對象

答:類是抽象的不能賦值。實例化以後的類便是對象,可以賦值,並且能夠經過對象直接調用函數。對象聲明以下:

類名 對象名 = new 類名();

New爲實例化對象的關鍵字。

 

7.抽象類:

答:專門看成父類,其中的方法均爲抽象方法---一種只聲明而爲實現的方法。抽象方法以及包含抽象方法的類必須用abstract關鍵字修飾。

規則以下:1)用abstract修飾。2)抽象類不能被實例化。3)抽象方法只需聲明,不須要實現。4)含有抽象方法的類必須被稱爲抽象類,抽象類的子類必須覆蓋全部的抽象方法後才能被實例化,不然這個子類仍是個抽象類。

在抽象類中聲明構造方法後,在子類中必須明確調用,不然就出錯。

 

8.HTTPS和HTTP的區別

超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提 供任何方式的數據加密,若是攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就能夠直接讀懂其中的信息,所以HTTP協議不適合傳輸一些敏感信息, 好比信用卡號、密碼等。

爲了解決HTTP協議的這一缺陷,須要使用另外一種協議:安全套接字層超文本傳輸協議HTTPS。爲了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密。

HTTPS和HTTP的區別主要爲如下四點:

1、https協議須要到ca申請證書,通常免費證書不多,須要交費。

2、http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性ssl加密傳輸協議。

3、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。

4、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

相關文章
相關標籤/搜索