Java IO 和 NIO 的面試題
IO 是 Java 面試中一個(gè)非常重要的點(diǎn)。你應(yīng)該很好掌握 Java IO,NIO,NIO2 以 及與操作系統(tǒng),磁盤 IO 相關(guān)的基礎(chǔ)知識(shí)。下面是 Java IO 中經(jīng)常問的問題。
66、在我 Java 程序中,我有三個(gè) socket,我需要多少個(gè)線 程來(lái)處理?
67、Java 中怎么創(chuàng)建 ByteBuffer?
byte[] bytes = new byte[10];
ByteBuffer buf = ByteBuffer.wrap(bytes);
68、Java 中,怎么讀寫 ByteBuffer ?
69、Java 采用的是大端還是小端?
70、ByteBuffer 中的字節(jié)序是什么?
71、Java 中,直接緩沖區(qū)與非直接緩沖器有什么區(qū)別?
72、Java 中的內(nèi)存映射緩存區(qū)是什么?
答案 http://javarevisited.blogspot.sg/2012/01/memorymapped-file-and-io-in-j ava.html
73、socket 選項(xiàng) TCP NO DELAY 是指什么?
74、TCP 協(xié)議與 UDP 協(xié)議有什么區(qū)別?
答案 http://javarevisited.blogspot.com/2014/07/9-difference-between-tcp-and -udp-protocol.html
75、Java 中,ByteBuffer 與 StringBuffer 有什么區(qū)別?(答 案)
Java 最佳實(shí)踐的面試問題
包含 Java 中各個(gè)部分的最佳實(shí)踐,如集合,字符串,IO,多線程,錯(cuò)誤和異常 處理,設(shè)計(jì)模式等等。
76、Java 中,編寫多線程程序的時(shí)候你會(huì)遵循哪些最佳實(shí)踐?
這是我在寫 Java 并發(fā)程序的時(shí)候遵循的一些最佳實(shí)踐:
a)給線程命名,這樣可以幫助調(diào)試。
b)最小化同步的范圍,而不是將整個(gè)方法同步,只對(duì)關(guān)鍵部分做同步。
c)如果可以,更偏向于使用 volatile 而不是 synchronized。
d)使用更高層次的并發(fā)工具,而不是使用 wait() 和 notify() 來(lái)實(shí)現(xiàn)線程間通 信,如 BlockingQueue,CountDownLatch 及 Semeaphore。
e)優(yōu)先使用并發(fā)集合,而不是對(duì)集合進(jìn)行同步。并發(fā)集合提供更好的可擴(kuò)展性。
77、說(shuō)出幾點(diǎn) Java 中使用 Collections 的最佳實(shí)踐
這是我在使用 Java 中 Collectionc 類的一些最佳實(shí)踐:
a)使用正確的集合類,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector。
b)優(yōu)先使用并發(fā)集合,而不是對(duì)集合進(jìn)行同步。并發(fā)集合提供更好的可擴(kuò)展性。
c)使用接口代表和訪問集合,如使用 List 存儲(chǔ) ArrayList,使用 Map 存儲(chǔ) HashMap 等等。
d)使用迭代器來(lái)循環(huán)集合。
e)使用集合的時(shí)候使用泛型。
78、說(shuō)出至少 5 點(diǎn)在 Java 中使用線程的最佳實(shí)踐。
答案 http://java67.blogspot.com/2014/01/10-points-about-thread-and-javalan gthread-in-java.html
這個(gè)問題與之前的問題類似,你可以使用上面的答案。對(duì)線程來(lái)說(shuō),你應(yīng)該:
a)對(duì)線程命名
b)將線程和任務(wù)分離,使用線程池執(zhí)行器來(lái)執(zhí)行 Runnable 或 Callable。
c)使用線程池
79、說(shuō)出 5 條 IO 的最佳實(shí)踐(答案)
IO 對(duì) Java 應(yīng)用的性能非常重要。理想情況下,你不應(yīng)該在你應(yīng)用的關(guān)鍵路徑上 避免 IO 操作。下面是一些你應(yīng)該遵循的 Java IO 最佳實(shí)踐:
a)使用有緩沖區(qū)的 IO 類,而不要單獨(dú)讀取字節(jié)或字符。
b)使用 NIO 和 NIO2
c)在 finally 塊中關(guān)閉流,或者使用 try-with-resource 語(yǔ)句。
d)使用內(nèi)存映射文件獲取更快的 IO。
80、列出 5 個(gè)應(yīng)該遵循的 JDBC 最佳實(shí)踐
答案 http://javarevisited.blogspot.sg/2012/08/top-10-jdbc-best-practices-for-j ava.html)
有很多的最佳實(shí)踐,你可以根據(jù)你的喜好來(lái)例舉。下面是一些更通用的原則:
a)使用批量的操作來(lái)插入和更新數(shù)據(jù)
b)使用 PreparedStatement 來(lái)避免 SQL 異常,并提高性能。
c)使用數(shù)據(jù)庫(kù)連接池
d)通過列名來(lái)獲取結(jié)果集,不要使用列的下標(biāo)來(lái)獲取。
81、說(shuō)出幾條 Java 中方法重載的最佳實(shí)踐?
下面有幾條可以遵循的方法重載的最佳實(shí)踐來(lái)避免造成自動(dòng)裝箱的混亂。
a)不要重載這樣的方法:一個(gè)方法接收 int 參數(shù),而另個(gè)方法接收 Integer 參 數(shù)。
b)不要重載參數(shù)數(shù)量一致,而只是參數(shù)順序不同的方法。
c)如果重載的方法參數(shù)個(gè)數(shù)多于 5 個(gè),采用可變參數(shù)。
Date、Time 及 Calendar 的面試題
82、在多線程環(huán)境下,SimpleDateFormat 是線程安全的嗎?
不是,非常不幸,DateFormat 的所有實(shí)現(xiàn),包括 SimpleDateFormat 都不是 線程安全的,因此你不應(yīng)該在多線程序中使用,除非是在對(duì)外線程安全的環(huán)境中 使用,如 將 SimpleDateFormat 限制在 ThreadLocal 中。如果你不這么做, 在解析或者格式化日期的時(shí)候,可能會(huì)獲取到一個(gè)不正確的結(jié)果。因此,從日期、 時(shí)間處理的所有實(shí)踐來(lái)說(shuō),我強(qiáng)力推薦 joda-time 庫(kù)。
83、Java 中如何格式化一個(gè)日期?如格式化為 ddMMyyyy 的形式?
答案http://javarevisited.blogspot.com/2011/09/convert-date-to-string-simple dateformat.html
Java 中,可以使用 SimpleDateFormat 類或者 joda-time 庫(kù)來(lái)格式日期。 DateFormat 類允許你使用多種流行的格式來(lái)格式化日期。參見答案中的示例代 碼,代碼中演示了將日期格式化成不同的格式,如 dd-MM-yyyy 或 ddMMyyyy。
84、Java 中,怎么在格式化的日期中顯示時(shí)區(qū)?
答案 http://java67.blogspot.sg/2013/01/how-to-format-date-in-java-simpledat eformat-example.html
## 85、Java 中 java.util.Date 與 java.sql.Date 有什么區(qū)別?
答案 http://java67.blogspot.sg/2014/02/how-to-convert-javautildate-to-javasq ldate-example.html
86、Java 中,如何計(jì)算兩個(gè)日期之間的差距?
程序 http://javarevisited.blogspot.sg/2015/07/how-to-find-number-of-days-be tween-two-dates-in-java.htm
87、Java 中,如何將字符串 YYYYMMDD 轉(zhuǎn)換為日期?
答案 http://java67.blogspot.sg/2014/12/string-to-date-example-in-java-multit hreading.html
單元測(cè)試 JUnit 面試題
89、如何測(cè)試靜態(tài)方法?(答案)
可以使用 PowerMock 庫(kù)來(lái)測(cè)試靜態(tài)方法。
90、怎么利用 JUnit 來(lái)測(cè)試一個(gè)方法的異常?
答案 http://javarevisited.blogspot.sg/2013/04/JUnit-tutorial-example-test-exce ption-thrown-by-java-method.html
91、你使用過哪個(gè)單元測(cè)試庫(kù)來(lái)測(cè)試你的 Java 程序?
92、@Before 和 @BeforeClass 有什么區(qū)別?
答案http://javarevisited.blogspot.sg/2013/04/JUnit-tutorial-example-test-exce ption-thrown-by-java-method.html
編程和代碼相關(guān)的面試題
93、怎么檢查一個(gè)字符串只包含數(shù)字?解決方案
http://java67.blogspot.com/2014/01/java-regular-expression-to-check-nu mbers-in-String.html
94、Java 中如何利用泛型寫一個(gè) LRU 緩存?
95、寫一段 Java 程序?qū)?byte 轉(zhuǎn)換為 long?
96、在不使用 StringBuffer 的前提下,怎么反轉(zhuǎn)一個(gè)字符串?
解決方案 http://java67.blogspot.com/2012/12/how-to-reverse-string-in-java-string buffer-stringbuilder.htm
97、Java 中,怎么獲取一個(gè)文件中單詞出現(xiàn)的最高頻率?
解決方案http://java67.blogspot.com/2015/10/java-program-to-find-repeated-wor ds-and-count.html
98、如何檢查出兩個(gè)給定的字符串是反序的?
解決方案 http://javarevisited.blogspot.sg/2013/03/Anagram-how-to-check-if-two-s tring-are-anagrams-example-tutorial.html
99、Java 中,怎么打印出一個(gè)字符串的所有排列?
解決方案 http://javarevisited.blogspot.com/2015/08/how-to-find-all-permutationsof-string-java-example.html
100、Java 中,怎樣才能打印出數(shù)組中的重復(fù)元素?
解決方案 http://javarevisited.blogspot.com/2015/06/3-ways-to-find-duplicate-elem ents-in-array-java.html
101、Java 中如何將字符串轉(zhuǎn)換為整數(shù)?
String s="123";
int i;
第一種方法:i=Integer.parseInt(s);
第二種方法:i=Integer.valueOf(s).intValue();
102、在沒有使用臨時(shí)變量的情況如何交換兩個(gè)整數(shù)變量的值?
解決方案 https://blog.csdn.net/zidane_2014/article/details/34180223