網際網路公司校招Java面試題總結及答案——招銀科技
阿新 • • 發佈:2019-02-05
1.pubilc A{ public void test(){} }
public B extends A{ protected void test(){} }
這樣有問題嗎?為什麼?
錯,
2.public A{ public long test(){} }
public B extends A{ public int test(){} }
這樣有問題嗎?為什麼?
錯。子類重寫父類方法時不能更改返回值型別。
3.多型
多型的定義:指允許不同類的物件對同一訊息做出響應。即同一訊息可以根據傳送物件的不同而採用多種不同的行為方式。(傳送訊息就是函式呼叫)。
實現多型的技術稱為:動態繫結(dynamic binding),是指在執行期間判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。
多型的作用:消除型別之間的耦合關係。
Java中多型的實現方式:介面實現,繼承父類進行方法重寫,同一個類中進行方法過載。
多型存在的三個必要條件
一、要有繼承;
二、要有重寫;
三、父類引用指向子類物件。
父類的引用指向了自己的子類物件。
父類的引用也可以接收自己的子類物件。
4.int i=0; Integer i1=0; Integer i2=new Integer(0); 輸出i==i1;i==i2;i1==i2
分別是true,true,false
5.輸出使用者表裡重名的使用者,說sql語句
select myname, count(*) from tab group by myname having count(*) > 1
7.說一下ajax
是指一種建立互動式 網頁應用的網頁開發技術。通過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。
優點:因為是非同步的,所以不會阻塞使用者操作;
區域性重新整理,這樣就可使網頁從伺服器請求少量的資訊,而不是整個頁;
8.就你專案中使用的 MyBatis,有哪些標籤?
<configuration>,<typeAliases>,<plugins>,<mappers>,<resultMap>,
9.查詢語句使用 MyBatis 框架中的 where 標籤和不使用 MyBatis 框架的sql語句有啥不同?
where
<foreach item="item" index="index" collection="list"
separator="or">
( classify_id = #{item.classify_id}
and program_id =
#{item.program_id})
</foreach>
<where>
<if test="id != null ">id=#{id}</if>
10.new 例項化過程
尋找類定義 ;
載入類定義,jvm啟動時,會用啟動類載入器載入,對於使用者的class,則會用應用程式類載入器實時載入,所謂實時載入,指的是遇到的時候再載入,而不是預先一次 性載入。關於類載入器,有三級,jvm嚴格的限制了每一級的載入許可權,載入模式為“雙親委託模式”,載入任何類,都先由父載入器載入。
給物件分配記憶體空間;jvm在記憶體“堆”中,開闢一個空間,該空間按照MyObject類定義開闢,並將該空間中的各個記憶體段設定預設值,對應的就是物件的屬性初始化預設值。
物件的初始化順序 ;給父類靜態變數預設值,對父類靜態變數賦值,執行父類靜態塊;給當前類靜態變數預設值 ,對當前類靜態變數賦值,執行當前類靜態塊;給父類變數預設值,對父類變數賦值, 執行父類建構函式;給當前類變數預設值,對當前類變數賦值,執行當前類建構函式。
物件構造完成 ;
11.socket實現過程,具體用的方法;怎麼實現非同步socket.(不會)
Socket程式設計基本就是create,listen,accept,connect,read和write等等。在建立連線前,必須知道對方的IP地址和埠號。一個指定的埠號不能被多個程式共用。
1:載入套接字型檔,建立套接字(WSAStartup()/socket());
2:繫結套接字到一個IP地址和一個埠上(bind());
3:將套接字設定為監聽模式等待連線請求(listen());
4:請求到來後,接受連線請求,返回一個新的對應於此次連線的套接字(accept());
5:用返回的套接字和客戶端進行通訊(send()/recv());
6:返回,等待另一連線請求;
7:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。
客戶端程式設計的步驟:
1:載入套接字型檔,建立套接字(WSAStartup()/socket());
2:向伺服器發出連線請求(connect());
3:和伺服器端進行通訊(send()/recv());
4:關閉套接字,關閉載入的套接字型檔(closesocket()/WSACleanup())。
12.反射的所有包,怎實現反射
java中反射的三種方法:
1. 通過Object類的getClass方法來獲取
2.使用.class的方式,使用類名加“.class”的方式即會返回與該類對應的Class物件。
3. 使用Class.forName方法,Class有一個著名的static方法forName
13.網路重定向,說下流程
重定向(Redirect)就是通過各種方法將各種網路請求重新定個方向轉到其它位置。
流程:客戶端瀏覽器訪問一個URL,得到的響應狀態是3xx的時候,會在響應資訊中包含重定向的URL,客戶端瀏覽器需要再向重定向的URL傳送HTTP請求,並獲得響應資料。
15. servlet是單例麼?
是
16.多執行緒共享變數的問題?
17.Tomcat的結構
就按server.xml中的層次結構來答
Tomcat 體系結構中的六個主要概念:
19.繼承的好處和壞處 優點:1.可以使用父類的所有非私有方法;而且單繼承可由介面來彌補。 2.可以繼承父類中定義的成員方法以及成員變數,使得子類可以減少程式碼的書寫。還可以重寫父類的方法以增加子類的功能。 缺點:1.耦合性太大 2.就是破壞了類的封裝性,其實繼承一般多用於抽象方法的繼承和介面的實現
21.靜態類與單例模式的區別 單例模式比靜態類有很多優勢: (1)單例可以繼承類,實現介面,而靜態類不能(可以整合類,但不能整合例項成員); (2)單例可以被延遲初始化,靜態類一般在第一次載入是初始化; (3)單例類可以被整合,他的方法可以被覆寫; (4)或許最重要的是,單例類可以被用於多型而無需強迫使用者只假定唯一的例項。舉個例子,你可能在開始時只寫一個配置,但是以後你可能需要支援超過一個配置集,或者可能需要允許使用者從外部檔案中載入一個配置物件,或者編寫自己的。你的程式碼不需要關注全域性的狀態,因此你的程式碼會更加靈活。 觀點二:(靜態方法)靜態方法中產生的物件,會隨著靜態方法執行完畢而釋放掉,而且執行類中的靜態方法時,不會例項化靜態方法所在的類。如果是用singleton, 產生的那一個唯一的例項,會一直在記憶體中,不會被GC清除的(原因是靜態的屬性變數不會被GC清除),除非整個JVM退出了。這個問題我之前也想幾天,並 且自己寫程式碼來做了個實驗。 觀點三:(Good!) 由於DAO的初始化,會比較佔系統資源的,如果用靜態方法來取,會不斷地初始化和釋放,所以我個人認為如果不存在比較複雜的事務管理,用singleton會比較好。 22.面向物件的設計規範 是五大基本原則嗎?
- Server:Server代表整個容器(Container)。它可以包含一個或多個Service,還可以包含一個GlobalNamingResources。Server支援className,port和shutdown三個公共屬性。
- Service:Service中可以含有一個或多個Connector,但只能含有一個Engine。這使得不同的Connector可以共享同一個Engine。同一個Server中的多個Service之間沒有相關性。Service支援className和name兩個公共屬性。
- Engine:Engine負責接收和處理來自它所屬的Service中的所有Connector的請求。Engine支援backgroundProcessorDelay、className、defaultHost、jvmRoute和name五個公共屬性。
- Host:Host表示一個虛擬主機,並和一個伺服器的網路名關聯。注意Engine中必須有一個Host的名字和Engine的defaultHost屬性匹配。Host支援appBase、autoDeploy、backgroundProcessorDelay、className、deployOnStartup和name六個公共屬性。
- Connector:Connector負責接收來自客戶端(Client)的請求。比較常見的兩個是HTTP Connector和AJP Connector。
- Context:Context表示在虛擬主機中執行的web應用程式。一個虛擬主機中能夠執行多個Context,它們通過各自的Context Path進行相互區分。如果Context Path為"",那麼該web應用為該虛擬主機的預設的web應用。Context支援backgroundProcessorDelay、className、cookies、crossContext、docBase、override、privileged、path、reloadable和wrapperClass十個公共屬性。
19.繼承的好處和壞處 優點:1.可以使用父類的所有非私有方法;而且單繼承可由介面來彌補。 2.可以繼承父類中定義的成員方法以及成員變數,使得子類可以減少程式碼的書寫。還可以重寫父類的方法以增加子類的功能。 缺點:1.耦合性太大 2.就是破壞了類的封裝性,其實繼承一般多用於抽象方法的繼承和介面的實現
21.靜態類與單例模式的區別 單例模式比靜態類有很多優勢: (1)單例可以繼承類,實現介面,而靜態類不能(可以整合類,但不能整合例項成員); (2)單例可以被延遲初始化,靜態類一般在第一次載入是初始化; (3)單例類可以被整合,他的方法可以被覆寫; (4)或許最重要的是,單例類可以被用於多型而無需強迫使用者只假定唯一的例項。舉個例子,你可能在開始時只寫一個配置,但是以後你可能需要支援超過一個配置集,或者可能需要允許使用者從外部檔案中載入一個配置物件,或者編寫自己的。你的程式碼不需要關注全域性的狀態,因此你的程式碼會更加靈活。 觀點二:(靜態方法)靜態方法中產生的物件,會隨著靜態方法執行完畢而釋放掉,而且執行類中的靜態方法時,不會例項化靜態方法所在的類。如果是用singleton, 產生的那一個唯一的例項,會一直在記憶體中,不會被GC清除的(原因是靜態的屬性變數不會被GC清除),除非整個JVM退出了。這個問題我之前也想幾天,並 且自己寫程式碼來做了個實驗。 觀點三:(Good!) 由於DAO的初始化,會比較佔系統資源的,如果用靜態方法來取,會不斷地初始化和釋放,所以我個人認為如果不存在比較複雜的事務管理,用singleton會比較好。 22.面向物件的設計規範 是五大基本原則嗎?