京東java面試題
1.
final關鍵字,修飾類,方法,或者成員變數為最終的,使其不可被修改
finally可跟在try catch語句或者try語句後使用,表示這個方法一定會被執行
finalize通知垃圾回收機制回收被finalize標示的對象,但不保證馬上就會執行
2.
可以繼承也可以實現介面
由於構造方法必須與類型一致,所以其沒有構造方法,繼承有參構造方法必須調用父類的
直接new interface就是實現介面
3.
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。
Java內部類與C++嵌套類最大的不 同就在於是否有指向外部的引用上
4.
&&短路與,當兩個條件,如a>b&&b>c,中a>b為假時b>c這個語句不會被執行而直接返回false
&兩個條件都會被執行
5.
最重要區別是hashtable是線程安全的(同步)而hashMap不是。。
6.
Collection 層次結構中的根介面,而Collections是一個工具類,它包含有各種有關集合操作的靜態方法
7.
系統測試的時候
8.
垃圾回收機制,因為java不能手動清理內存,而內存不清理系統資源會被耗盡,所以要有GC
9.
兩個,String pool一個"xyz",堆裡面一個String 對象
10.
11 -11
11.
s1+1,s1自動轉換成int類型,其結果返回一個int,所以報錯
12.
sleep在睡眠一段時間後會自己醒來,而wait不能,它必須別的線程喚醒它(notify或者notifyAll)
13.
java有標簽但是沒goto
14.
數組沒length()方法只有length這個屬性,String有
15.
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
16.
用equals ==只判斷內存地址是否一致,而equals判斷是否引用的是同一個對象
17.
IndexOutOfBoundsException 數組越界
NullPointerException 空指針異常
SystemException 系統異常
18.
error表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況
19.
List,Set是 Map不是
20.
abstract class可以有實現方法interface不能
21.
都不能
22.
都可以
23.
start()
24.
可以
25.
不可以,String 是final
26.
不能
27.
會,先執行finally里的,再return
28.
2<<3
29.
如果不重寫方法是不可以,但是重寫了就難說
30.
引用
31.
byte可以,因為其可以自動轉換成int類型,其他都不可以
32.
public class Singleton
{
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
B. 京東面試題 java 動態代理主要怎麼實現的
在目前的Java開發包中包含了對動態代理的支持,但是其實現只支持對介面的的實現。
其實現主要通過是java.lang.reflect.Proxy類和java.lang.reflect.InvocationHandler介面。
Proxy
類主要用來獲取動態代理對象,InvocationHandler介面用來約束調用者實現,如下,HelloWorld介面定義的業務方
法,HelloWorldImpl是HelloWorld介面的實現,HelloWorldHandler是InvocationHandler介面實
現。代碼如下:
業務介面:
public interface HelloWorld {
void sayHelloWorld() ;
}
業務介面實現:
public class HelloWorldImpl implements HelloWorld {
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
InvocationHandler實現,需要在介面方法調用前後加入一部份處理工作,這里僅僅在方法調用前後向後台輸出兩句字元串,其代碼如下:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloWorldHandler implements InvocationHandler {
//要代理的原始對象
private Object objOriginal;
/**
* 構造函數。
* @param obj 要代理的原始對象。
*/
public HelloWorldHandler(Object obj) {
this.objOriginal = obj ;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result ;
//方法調用之前
doBefore();
//調用原始對象的方法
result = method.invoke(this.objOriginal ,args);
//方法調用之後
doAfter();
return result ;
}
private void doBefore() {
System.out.println("before method invoke!");
}
private void doAfter() {
System.out.println("after method invoke!");
}
}
測試代碼:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
HelloWorld hw = new HelloWorldImpl();
InvocationHandler handler = new HelloWorldHandler(hw);
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
}
}
?? 首先獲取一個業務介面的實現對象;
?? 獲取一個InvocationHandler實現,此處是HelloWorldHandler對象;
?? 創建動態代理對象;
?? 通過動態代理對象調用sayHelloWorld()方法,此時會在原始對象HelloWorldImpl. sayHelloWorld()方法前後輸出兩句字元串。
運行測試類輸出如下:
before method invoke!
Hello World!
after method invoke!
此處Test類中的方法調用代碼比較多,在我們的實際應用中可以通過配置文件來來簡化客戶端的調用實現。另外也可以通過動態代理來實現簡單的AOP
C. java面試題 大蝦們請進
1.Map介面在JDK中有兩個實現,HashMap和HashTable。HashMap可以使用null值的鍵,HashTable不能使用空值的鍵,但是value都可以是空。
Map map = new HashMap();
map.put(null,null);//可以鍵和值都為空。但是只能添加一個為null的鍵
2.排序和遍歷和調用不調用remove方法沒關系。排序可以通過Collections下的sort方法排序,遍歷可以通過for循環或者Iterator迭代器遍歷。
List list = new ArrayList();
list.add(8);
list.add(5);
list.add(12);
list.add(3);
list.remove(12);//刪除12這個元素
Collections.sort(list);//對集合排序
for(Integer num:list)
{
System.out.println(num);
}
3.JSP會被容器,在第一個請求時轉換為Servlet,所以本質上JSP和Servlet沒有區別。但是,在表現形式上有區別:
a.JSP是HTML、CSS等靜態頁面技術和Java腳本代碼組成的,以文本方式存在。而Servlet是程序,不是文本。
b.Servlet需要編譯成class後才能部署到容器中,而JSP以源文本文件形式部署到容器中。
c.客戶端通過JSP文件名對JSP發送訪問請求,而Servlet需要在web.xml中描述其URI地址,並且客戶端必須通過配置好的地址才能訪問到Servlet,而不是通過Servlet的文件名訪問。
D. java面試題。大家好,今天我去面試了,看到了這樣一題:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
if (list.contains("xkhd")) {
list.remove("xkhd");
}
if (list.contains("time")) {
list.add("time" + System.currentTimeMillis());
}
}
E. java兩年經驗面試都會問什麼問題
個人介紹:
首先介紹下我面試時的自身條件情況,我把自己的情況分為優勢和劣勢來說可能更有利於你們比較自身情況。
劣勢:
1.15年7月畢業後開始到上海工作,面試的時候是17年3月到4月,一年多的經驗,勉強算兩年經驗。分析:一年多經驗我認為是比較尷尬的,處於一個不上不下的位置,很多公司比較喜歡招三年經驗的,或者直接招應屆生來培養。
2.畢業於一個非985/211,勉強上一本的高校。分析:這個相對影響較小,因為有工作經驗後,公司對學校的要求就沒那麼高了,只要是本科就基本沒問題,但是還是有個別叼毛公司只要985/211。
3.前一家公司是傳統電信行業,加入項目組時,項目已經上線有段時間了,我們的任務就是有需求就開發,有bug就優化,其他時間就聊騷,各干各的,工作一年多跟在養老一樣,用一句話說就是編程5分鍾,扯淡2小時,項目經驗嚴重不足,沒開發過很難的需求。分析:這一點是最傷的,公司招有經驗的就想看你都幹了些什麼牛批的東西,結果你告訴面試官我寫的需求都是垃圾。
優勢:
1.大學時拿過比較多的獎,每年都是校級優秀學生,畢業時是市級優秀畢業生,拿過省級ACM二等獎等。分析:大學的榮譽對一個有工作經驗的人來說,公司不一定會看重,但是可能會對面試官產生微妙的影響,特別是ACM獎,我碰到過有的面試官也是搞過ACM的,有共同的話題聊起來總是比較容易的,但是也要注意不能把這一欄篇幅寫的過於多,只能當作點綴用,我當時是放在簡歷最後一欄,簡要的寫了最主要的幾個獎。
2.良好的溝通交流能力。分析:這個能力不會是關鍵性的,但是可以加分。
3.較強的學習能力和邏輯思維能力。分析:有些公司和面試官還是比較看重一個人的學習能力的,經驗代表著你現在在什麼級別,而學習能力則代表著你將來能到達什麼級別。
學習過程:
看了我的優劣勢介紹,你會發現我的優勢相對於我的劣勢來說,簡直不值一提。我自己對此也有清晰的認識,因此從過完年之後,我就開始抓緊空閑時間學習。學習的過程如下:
1.看面試題
正常人第一步肯定都會看面試題,我也不例外,在看的過程中,我發現有些文章寫的不錯,對我幫助不小值得推薦,如下:
Java面試題全集(上)很多基礎的東西,建議先看。
各大公司Java後端開發面試題總結
面試心得與總結—BAT、網易、蘑菇街
關於Java面試,你應該准備這些知識點
2.深入學習
在看面試題的過程,你會遇到一些自己沒接觸過的或者以前沒深入學習過的知識,例如最常問的HashMap內部實現原理,這就促使你得開始去看jdk的源碼或者是學習一些新的東西。看源碼是很重要的一步,起步很難,但是會讓你收益良多,看源碼的過程如果碰到無法理解的地方,可以網路看下別人的理解。我學習源碼的過程中,看過幾個人的關於源碼的文章寫的很不錯,如下:
五月的倉頡
佔小狼
zhangshixi的Core java系列
3.熟悉項目
找出自己工作以來開發過的最叼的功能,將整個功能的流程和涉及的東西吃透。項目是面試中必問的環節,一般是以一個功能點為基礎展開問,因此你必須對這個功能有很深的認識,不能有模糊的地方。如果有時間,能把涉及到的知識點也搞懂最好。
4.做面試題
有不少公司是有面試的,如果你沒有準備過,很容易在各種小地方犯錯,建議去一些面試題網站多做些題目,我自己是用的牛客網。
5.學習記錄
把自己每天的學習時間和學習內容記錄下來,可以讓自己更有動力的學習,學習是一個枯燥的過程,你必須讓自己時刻保持有動力。
投簡歷、約面試環節
1.在哪些網站投?
拉勾網、BOSS直聘、獵聘網。
2.是否該海投?
投簡歷分為兩個情況。
1)沒有社招面試經驗:建議採取海投的方式,只要職位要求跟自己比較匹配都可以投,累計面試經驗。這個環節可以把投簡歷的網站增加兩家:智聯和無憂。
2)自認為社招面試經驗已經足夠:投那些職位匹配、公司滿意的職位。公司評價可以去看準網、網路、知乎等查詢。
3.一天約幾家面試合適?
最理想的情況為2家面試,上午一般在10點左右,下午一般在2點左右。建議把理想的公司放下午,因為下午的時間比較充足,可以讓公司更充分的了解你。我開始面的時候,每次都是上午面的不好,下午面的不錯。
4.投簡歷經常沒下文?
我當初也沒想到簡歷篩選這關有這么難,可能是我的簡歷確實亮點不多,再者HR很多都不是行內人,因此他們看得最直接的就是你上家的公司和你畢業的學校,如果你不是從牛逼的公司/學校出來,可能會碰到和我一樣的情況,應對的辦法就是多投。
5.是否該裸辭?
我一開始是邊上班邊投,然後利用調休時間,或者請假去面試。後來,面試機會越來越多,請假太頻繁了,自己都不好意思了,並且自己也已經有足夠的信心,這個時候我選擇了裸辭。裸辭還有一個原因是,在面試過程中你會發現,有的公司要人要的緊,如果你的辭職流程過長可能會導致你錯過這個公司。
6.注意事項
1)面試前一天把路線和時間算好,最好別遲到。
2)背個書包,帶好簡歷、充電寶、紙巾、雨傘。
面試環節
1.筆試常見的問題?
面試常見的問題上面給的面試題鏈接基本都有。我只提幾點:1)寫sql:寫SQL很常考察group by、內連接和外連接。2)手寫代碼:手寫代碼一般考單例、排序、線程、消費者生產者。我建議排序演算法除了冒泡排序,最好還能手寫一種其他的排序代碼。試想:如果一般面試者都寫的冒泡排序,而你寫的是快速排序/堆排序,肯定能給面試官留下不錯的印象。
2.面試流程?
1)讓你自我介紹
2)問Java基礎知識
3)問項目
4)情景問題,例如:你的一個功能上了生產環境後,伺服器壓力驟增,該怎麼排查。
5)你有什麼想問面試官的
3.面試常問的知識點?
1)集合相關問題(必問):
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底層實現。
HashMap和Hashtable的區別。
ArrayList、LinkedList、Vector的區別。
HashMap和ConcurrentHashMap的區別。
HashMap和LinkedHashMap的區別。
HashMap是線程安全的嗎。
ConcurrentHashMap是怎麼實現線程安全的。
2)線程相關問題(必問):
創建線程的3種方式。
什麼是線程安全。
Runnable介面和Callable介面的區別。
wait方法和sleep方法的區別。
synchronized、Lock、ReentrantLock、ReadWriteLock。
介紹下CAS(無鎖技術)。
什麼是ThreadLocal。
創建線程池的4種方式。
ThreadPoolExecutor的內部工作原理。
分布式環境下,怎麼保證線程安全。
3)JVM相關問題:
介紹下垃圾收集機制(在什麼時候,對什麼,做了什麼)。
垃圾收集有哪些演算法,各自的特點。
類載入的過程。
雙親委派模型。
有哪些類載入器。
能不能自己寫一個類叫java.lang.String。
4)設計模式相關問題(必問):
先問你熟悉哪些設計模式,然後再具體問你某個設計模式具體實現和相關擴展問題。
5)資料庫相關問題,針對Mysql(必問):
給題目讓你手寫SQL。
有沒有SQL優化經驗。
Mysql索引的數據結構。
SQL怎麼進行優化。
SQL關鍵字的執行順序。
有哪幾種索引。
什麼時候該(不該)建索引。
Explain包含哪些列。
Explain的Type列有哪幾種值。
6)框架相關問題:
Hibernate和Mybatis的區別。
Spring MVC和Struts2的區別。
Spring用了哪些設計模式。
Spring中AOP主要用來做什麼。
Spring注入bean的方式。
什麼是IOC,什麼是依賴注入。
Spring是單例還是多例,怎麼修改。
Spring事務隔離級別和傳播性。
介紹下Mybatis/Hibernate的緩存機制。
Mybatis的mapper文件中#和$的區別。
Mybatis的mapper文件中resultType和resultMap的區別。
Mybatis中DAO層介面沒有寫實現類,Mapper中的方法和DAO介面方法是怎麼綁定到一起的,其內部是怎麼實現的。
7)其他遇到問題:
介紹下棧和隊列。
IO和NIO的區別。
介面和抽象類的區別。
int和Integer的自動拆箱/裝箱相關問題。
常量池相關問題。
==和equals的區別。
重載和重寫的區別。
String和StringBuilder、StringBuffer的區別。
靜態變數、實例變數、局部變數線程安全嗎,為什麼。
try、catch、finally都有return語句時執行哪個。
介紹下B樹、二叉樹。
ajax的4個字母分別是什麼意思。
xml全稱是什麼。
分布式鎖的實現。
分布式session存儲解決方案。
常用的linux命令。
一些經驗:
1.先投一些普通公司,等面出了心得再去投理想的公司。
2.不熟悉的技術不要主動提。
3.對於那種實習期6個月還打8折的公司,除非你沒有其他選擇了,否則不要去。
4.小公司喜歡在薪水上壓你,開的時候適當提高。
5.不要去參加招聘會,純粹是浪費時間。
6.把面試當作一次技術的交流,不要太在意是否能被錄取。
7.公司一般面完就決定是否錄取了,讓你回去等消息這種情況一般沒戲,無論你自己覺得面的有多好。
8.盡量少通過電話面試,效果不好。
9.在面試的日子裡,要保持每天學習,無論是學習新東西還是復習舊東西。
10.拿到offer了,問問自己這個公司讓自己100%滿意了嗎,如果不是,請繼續努力找更好的。
11.通過面試官可以大概判斷這家公司的情況。
12.拉勾投的簡歷很多會被篩掉,但是拉勾還是面試機會的最主要來源。
13.理想的公司可以多投幾次,我有好幾次都是第一次投被篩掉,多投幾次就過的經驗。
14.問到自己有深入研究過的知識,抓住機會好好表現,不要輕易放過。
F. Java開發面試題
1、面向對象的特徵有哪些方面?
答:面向對象的特徵主要有以下幾個方面:
- 抽象:抽象是將一類對象的共同特徵總結出來構造類的過程,包括數據抽象和行為抽象兩方面。抽象只關注對象有哪些屬性和行為,並不關注這些行為的細節是什麼。
- 繼承:繼承是從已有類得到繼承信息創建新類的過程。提供繼承信息的類被稱為父類(超類、基類);得到繼承信息的類被稱為子類(派生類)。繼承讓變化中的軟體系統有了一定的延續性,同時繼承也是封裝程序中可變因素的重要手段(如果不能理解請閱讀閻宏博士的《Java與模式》或《設計模式精解》中關於橋梁模式的部分)。
- 封裝:通常認為封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的介面。面向對象的本質就是將現實世界描繪成一系列完全自治、封閉的對象。我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對數據和數據操作的封裝。可以說,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的編程介面(可以想想普通洗衣機和全自動洗衣機的差別,明顯全自動洗衣機封裝更好因此操作起來更簡單;我們現在使用的智能手機也是封裝得足夠好的,因為幾個按鍵就搞定了所有的事情)。
- 多態性:多態性是指允許不同子類型的對象對同一消息作出不同的響應。簡單的說就是用同樣的對象引用調用同樣的方法但是做了不同的事情。多態性分為編譯時的多態性和運行時的多態性。如果將對象的方法視為對象向外界提供的服務,那麼運行時的多態性可以解釋為:當A系統訪問B系統提供的服務時,B系統有多種提供服務的方式,但一切對A系統來說都是透明的(就像電動剃須刀是A系統,它的供電系統是B系統,B系統可以使用電池供電或者用交流電,甚至還有可能是太陽能,A系統只會通過B類對象調用供電的方法,但並不知道供電系統的底層實現是什麼,究竟通過何種方式獲得了動力)。方法重載(overload)實現的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實現的是運行時的多態性(也稱為後綁定)。運行時的多態是面向對象最精髓的東西,要實現多態需要做兩件事:1). 方法重寫(子類繼承父類並重寫父類中已有的或抽象的方法);2). 對象造型(用父類型引用引用子類型對象,這樣同樣的引用調用同樣的方法就會根據子類對象的不同而表現出不同的行為)。
2、訪問修飾符public,private,protected,以及不寫(默認)時的區別?
答:
修飾符
當前類
同 包
子 類
其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
類的成員不寫訪問修飾時默認為default。默認對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關系的類相當於私有。Java中,外部類的修飾符只能是public或默認,類的成員(包括內部類)的修飾符可以是以上四種。
3、String 是最基本的數據類型嗎?
答:不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。
4、float f=3.4;是否正確?
答:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F;。
5、short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?
答:對於short s1 = 1; s1 = s1 + 1;由於1是int類型,因此s1+1運算結果也是int 型,需要強制轉換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因為s1+= 1;相當於s1 = (short)(s1 + 1);其中有隱含的強制類型轉換。
6、Java有沒有goto?
答:goto 是Java中的保留字,在目前版本的Java中沒有使用。(根據James Gosling(Java之父)編寫的《The Java Programming Language》一書的附錄中給出了一個Java關鍵字列表,其中有goto和const,但是這兩個是目前無法使用的關鍵字,因此有些地方將其稱之為保留字,其實保留字這個詞應該有更廣泛的意義,因為熟悉C語言的程序員都知道,在系統類庫中使用過的有特殊意義的單詞或單詞的組合都被視為保留字)
7、int和Integer有什麼區別?
答:Java是一個近乎純潔的面向對象編程語言,但是為了編程的方便還是引入了基本數據類型,但是為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對應的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。
G. 二叉搜索樹java 京東金融java面試題 紅黑樹有什麼用java紅黑樹 java trie樹 快速
java8不是用紅黑樹來管理hashmap,而是在hash值相同的情況下(且重復數量大於8),用紅黑樹來管理數據。 紅黑樹相當於排序數據。可以自動的使用二分法進行定位。性能較高。
一般情況下,hash值做的比較好的話基本上用不到紅黑樹。
H. 京東商城的筆試題:用java語言列印出a,b,c,d的所有可能組合……求指點……
abcd都要用上?長度為4?
如果是這樣,那代碼如下,其中心思想就是遞歸
import java.util.ArrayList;
import java.util.List;
public class Permutation {
private char initial;
private char last;
List<Character> chars=new ArrayList<Character>();
public static void main(String[] args) {
new Permutation('a','d').start();
}
public Permutation(char initial,char last) {
this.initial=initial;
this.last=last;
for (char c = this.initial; c <= this.last; c++) {
chars.add(c);
}
}
public void start(){
next(chars,new ArrayList<Character>());
}
private void next(List<Character> unused,List<Character> used){
if(unused.isEmpty()){
System.out.println(used);
}else{
for(int i=0;i<unused.size();i++){
List<Character> cur=new ArrayList<Character>(unused);
List<Character> curUsed=new ArrayList<Character>(used);
curUsed.add(cur.remove(i));
next(cur,curUsed);
}
}
}
}
如果你想長度不固定,就是會出現abc,dc,c這樣的
只需修改next函數
private void next(List<Character> unused,List<Character> used){
if(!unused.isEmpty()){
for(int i=0;i<unused.size();i++){
List<Character> cur=new ArrayList<Character>(unused);
List<Character> curUsed=new ArrayList<Character>(used);
curUsed.add(cur.remove(i));
System.out.println(curUsed);
next(cur,curUsed);
}
}
}
沒有仔細驗證,有什麼問題可以交流 ,格式我沒有改,你可以自己做個輸出函數去遍歷輸出List即可
I. java面試題
1. List 以特定次序來持有元素,可有重復元素。 Set 無法擁有重復元素 , 內 部
排序。 Map 保存 key-value 值, value 可多值。
2. ArrayList 是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入 元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢, 而LinkedList 使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷 ,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
3.try 用來指定一塊預防所有 「 異常 」 的程序;
catch 子句緊跟在 try 塊後面,用來指定你想要捕捉的 「 異常 」 的類型;
throw 語句用來明確地拋出一個 「 異常 」 ;
throws 用來標明一個成員函數可能拋出的各種 「 異常 」 ;
Finally 為確保一段代碼不管發生什麼 「 異常 」 都被執行一段代碼;
可以在一個成員函數調用的外面寫一個 try 語句,在這個成員函數內部寫另 一
個 try 語句保護其他代碼。每當遇到一個 try 語句, 「 異常 」 的框架就放到堆 棧
上面,直到所有的 try 語句都完成。如果下一級的 try 語句沒有對某種 「 異常 」
進行處理,堆棧就會展開,直到遇到有處理這種 「 異常 」 的 try 語句。
4. Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在 Java 中,每個異常都是一個對象,它是 Throwable 類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含 有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。 Java 的異常處理是通過 5 個關鍵詞來實現的: try 、 catch 、 throw 、 throws 和 finally 。一般情況下是用 try 來執行一段程序,如果出現異常,系統會拋出( throws )一 個異常,這時候你可以通過它的類型來捕捉( catch )它,或最後( finally )由 預設處理器來處理。