互聯(lián)網(wǎng) Java 工程師面試題(Java 面試題六)

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ū)別?

答案 http://javarevisited.blogspot.sg/2015/08/difference-between-direct-nondirect-mapped-bytebuffer-nio-java.html

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容