日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java面试题_阿里大厂流出的数百道 Java 经典面试题

發(fā)布時(shí)間:2023/12/4 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java面试题_阿里大厂流出的数百道 Java 经典面试题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

BAT 常問的 Java基礎(chǔ)39道常見面試題

1.八種基本數(shù)據(jù)類型的大小,以及他們的封裝類

2.引用數(shù)據(jù)類型

3.Switch能否用string做參數(shù)

4.equals與==的區(qū)別

5.自動(dòng)裝箱,常量池

6.Object有哪些公用方法

7.Java的四種引用,強(qiáng)弱軟虛,用到的場景

8.Hashcode的作用

9.HashMap的hashcode的作用

10.為什么重載hashCode方法?

11.ArrayList、LinkedList、Vector的區(qū)別

12.String、StringBuffer與StringBuilder的區(qū)別

13.Map、Set、List、Queue、Stack的特點(diǎn)與用法

14.HashMap和HashTable的區(qū)別

15.JDK7與JDK8中HashMap的實(shí)現(xiàn)

16.HashMap和ConcurrentHashMap的區(qū)別,HashMap的底層源碼

17.ConcurrentHashMap能完全替代HashTable嗎

18.為什么HashMap是線程不安全的

19.如何線程安全的使用HashMap

20.多并發(fā)情況下HashMap是否還會(huì)產(chǎn)生死循環(huán)

21.TreeMap、HashMap、LindedHashMap的區(qū)別

22.Collection包結(jié)構(gòu),與Collections的區(qū)別

23.try?catch?finally,try里有return,finally還執(zhí)行么

24.Excption與Error包結(jié)構(gòu),OOM你遇到過哪些情況,SOF你遇到過哪些情況

25.Java(OOP)面向?qū)ο蟮娜齻€(gè)特征與含義

26.Override和Overload的含義去區(qū)別

27.Interface與abstract類的區(qū)別

28.Static?class?與non?static?class的區(qū)別

29.foreach與正常for循環(huán)效率對比

30.Java?IO與NIO

31.java反射的作用于原理

32.泛型常用特點(diǎn)

33.解析XML的幾種方式的原理與特點(diǎn):DOM、SAX

34.Java1.7與1.8,1.9,10 新特性

35.設(shè)計(jì)模式:單例、工廠、適配器、責(zé)任鏈、觀察者等等

36.JNI的使用

37.AOP是什么

38.OOP是什么

39.AOP與OOP的區(qū)別

Java 多線程面試題

1、多線程有什么用?

2、創(chuàng)建線程的方式

3、start()方法和run()方法的區(qū)別

4、Runnable接口和Callable接口的區(qū)別

5、CyclicBarrier和CountDownLatch的區(qū)別

6、volatile關(guān)鍵字的作用

7、什么是線程安全

8、Java中如何獲取到線程dump文件

9、一個(gè)線程如果出現(xiàn)了運(yùn)行時(shí)異常會(huì)怎么樣

10、如何在兩個(gè)線程之間共享數(shù)據(jù)

11、sleep方法和wait方法有什么區(qū)別

12、生產(chǎn)者消費(fèi)者模型的作用是什么

13、ThreadLocal有什么用

14、為什么wait()方法和notify()/notifyAll()方法要在同步塊中被調(diào)用

15、wait()方法和notify()/notifyAll()方法在放棄對象監(jiān)視器時(shí)有什么區(qū)別

16、為什么要使用線程池

17、怎么檢測一個(gè)線程是否持有對象監(jiān)視器

18、synchronized和ReentrantLock的區(qū)別

19、ConcurrentHashMap的并發(fā)度是什么

20、ReadWriteLock是什么

21、FutureTask是什么

22、Linux環(huán)境下如何查找哪個(gè)線程使用CPU最長

23、Java編程寫一個(gè)會(huì)導(dǎo)致死鎖的程序

24、怎么喚醒一個(gè)阻塞的線程

25、不可變對象對多線程有什么幫助

26、什么是多線程的上下文切換

27、如果你提交任務(wù)時(shí),線程池隊(duì)列已滿,這時(shí)會(huì)發(fā)生什么

28、Java中用到的線程調(diào)度算法是什么

29、Thread.sleep(0)的作用是什么

30、什么是自旋

31、什么是Java內(nèi)存模型

32、什么是CAS

33、什么是樂觀鎖和悲觀鎖

34、什么是AQS

35、單例模式的線程安全性

36、Semaphore有什么作用

37、Hashtable的size()方法中明明只有一條語句"return count",為什么還要做同步?

38、線程類的構(gòu)造方法、靜態(tài)塊是被哪個(gè)線程調(diào)用的

39、同步方法和同步塊,哪個(gè)是更好的選擇

40、高并發(fā)、任務(wù)執(zhí)行時(shí)間短的業(yè)務(wù)怎樣使用線程池?并發(fā)不高、任務(wù)執(zhí)行時(shí)間長的業(yè)務(wù)怎樣使用線程池?并發(fā)高、業(yè)務(wù)執(zhí)行時(shí)間長的業(yè)務(wù)怎樣使用線程池?


跳槽必備的100道 Java 面試題

多線程、并發(fā)及線程的基礎(chǔ)問題

1)Java 中能創(chuàng)建 volatile 數(shù)組嗎?

2)volatile 能使得一個(gè)非原子操作變成原子操作嗎?

3)volatile 修飾符的有過什么實(shí)踐?

4)volatile 類型變量提供什么保證?

5) 10 個(gè)線程和 2 個(gè)線程的同步代碼,哪個(gè)更容易寫?

6)你是如何調(diào)用 wait()方法的?使用 if 塊還是循環(huán)?為什么?

7)什么是多線程環(huán)境下的偽共享(false sharing)?

有經(jīng)驗(yàn)程序員的 Java 面試題

8)什么是 Busy spin?我們?yōu)槭裁匆褂盟?#xff1f;

9)Java 中怎么獲取一份線程 dump 文件?

10)Swing 是線程安全的?

11)什么是線程局部變量?

12)Java 中 sleep 方法和 wait 方法的區(qū)別?

13)什么是不可變對象(immutable object)?Java 中怎么創(chuàng)建一個(gè)不可變對象?

14)我們能創(chuàng)建一個(gè)包含可變對象的不可變對象嗎?

15)Java 中應(yīng)該使用什么數(shù)據(jù)類型來代表價(jià)格?

16)怎么將 byte 轉(zhuǎn)換為 String?

17)Java 中怎樣將 bytes 轉(zhuǎn)換為 long 類型?

18)我們能將 int 強(qiáng)制轉(zhuǎn)換為 byte 類型的變量嗎?如果該值大于 byte 類型的范圍,將會(huì)出現(xiàn)什么現(xiàn)象?

19)哪個(gè)類包含 clone 方法?是 Cloneable 還是 Object?

20)Java 中 ++ 操作符是線程安全的嗎?

21)不是線程安全的操作。它涉及到多個(gè)指令,如讀取變量值,增加,

22)a = a + b 與 a += b 的區(qū)別

23)我能在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類型的變量嗎?

24)3*0.1 == 0.3 將會(huì)返回什么?true 還是 false?

25)int 和 Integer 哪個(gè)會(huì)占用更多的內(nèi)存?

26)為什么 Java 中的 String 是不可變的(Immutable)?

27)我們能在 Switch 中使用 String 嗎?

28)Java 中的構(gòu)造器鏈?zhǔn)鞘裁?#xff1f;

JVM 底層 與 GC(Garbage Collection) 的面試問題

29)64 位 JVM 中,int 的長度是多數(shù)?

30)Serial 與 Parallel GC之間的不同之處?

31)32 位和 64 位的 JVM,int 類型變量的長度是多數(shù)?

32)Java 中 WeakReference 與 SoftReference的區(qū)別?

33)WeakHashMap 是怎么工作的?

34)JVM 選項(xiàng) -XX:+UseCompressedOops 有什么作用?為什么要使

35)怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64 位?

36)32 位 JVM 和 64 位 JVM 的最大堆內(nèi)存分別是多數(shù)?

37)JRE、JDK、JVM 及 JIT 之間有什么不同?

3 年工作經(jīng)驗(yàn)的 Java 面試題

38)解釋 Java 堆空間及 GC?

39)你能保證 GC 執(zhí)行嗎?

40)怎么獲取 Java 程序使用的內(nèi)存?堆使用的百分比?

41)Java 中堆和棧有什么區(qū)別?

Java 基本概念面試題

42)“a==b”和”a.equals(b)”有什么區(qū)別?

43)a.hashCode() 有什么用?與 a.equals(b) 有什么關(guān)系?

44)final、finalize 和 finally 的不同之處?

45)Java 中的編譯期常量是什么?使用它又什么風(fēng)險(xiǎn)?

Java 集合框架的面試題

46) List、Set、Map 和 Queue 之間的區(qū)別(答案)

47)poll() 方法和 remove() 方法的區(qū)別?

48)Java 中 LinkedHashMap 和 PriorityQueue 的區(qū)別是什么?

49)ArrayList 與 LinkedList 的不區(qū)別?

50)用哪兩種方式來實(shí)現(xiàn)集合的排序?

51)Java 中怎么打印數(shù)組?

52)Java 中的 LinkedList 是單向鏈表還是雙向鏈表?

53)Java 中的 TreeMap 是采用什么樹實(shí)現(xiàn)的?(答案)

54) Hashtable 與 HashMap 有什么不同之處?

55)Java 中的 HashSet,內(nèi)部是如何工作的?

56)寫一段代碼在遍歷 ArrayList 時(shí)移除一個(gè)元素?

57)我們能自己寫一個(gè)容器類,然后使用 for-each 循環(huán)碼?

58)ArrayList 和 HashMap 的默認(rèn)大小是多數(shù)?

59)有沒有可能兩個(gè)不相等的對象有有相同的 hashcode?

60)兩個(gè)相同的對象會(huì)有不同的的 hash code 嗎?

61)Java 中,Comparator 與 Comparable 有什么不同?

62)為什么在重寫 equals 方法的時(shí)候需要重寫 hashCode 方法?

Java IO 和 NIO 的面試題

63)Java 中怎么創(chuàng)建 ByteBuffer?

Java 最佳實(shí)踐的面試問題

64)Java 中,編寫多線程程序的時(shí)候你會(huì)遵循哪些最佳實(shí)踐?

65)說出幾點(diǎn) Java 中使用 Collections 的最佳實(shí)踐

66)說出 5 條 IO 的最佳實(shí)踐(答案)

67)說出幾條 Java 中方法重載的最佳實(shí)踐?

Date、Time 及 Calendar 的面試題

68)在多線程環(huán)境下,SimpleDateFormat 是線程安全的嗎?

單元測試 JUnit 面試題

69)如何測試靜態(tài)方法?

70)Java 中如何將字符串轉(zhuǎn)換為整數(shù)?

關(guān)于 OOP 和設(shè)計(jì)模式的面試題

71)接口是什么?為什么要使用接口而不是直接使用具體類?

72)Java 中,抽象類與接口之間有什么不同?

73)除了單例模式,你在生產(chǎn)環(huán)境中還用過什么設(shè)計(jì)模式?

74) 什么情況下會(huì)違反迪米特法則?為什么會(huì)有這個(gè)問題?

75)適配器模式是什么?什么時(shí)候使用?

76)什么是“依賴注入”和“控制反轉(zhuǎn)”?為什么有人使用?

77)抽象類是什么?它與接口有什么區(qū)別?你為什么要使用過抽象類?

78)構(gòu)造器注入和 setter 依賴注入,那種方式更好?

79)依賴注入和工程模式之間有什么不同?

80)適配器模式和裝飾器模式有什么區(qū)別?

81)適配器模式和代理模式之前有什么不同?

82)什么是模板方法模式?

83)什么時(shí)候使用訪問者模式?

84)什么時(shí)候使用組合模式?

85)繼承和組合之間有什么不同?

86)描述 Java 中的重載和重寫?

87)Java 中,嵌套公共靜態(tài)類與頂級類有什么不同?

88) OOP 中的 組合、聚合和關(guān)聯(lián)有什么區(qū)別?

89)給我一個(gè)符合開閉原則的設(shè)計(jì)模式的例子?

90)抽象工廠模式和原型模式之間的區(qū)別?

91)什么時(shí)候使用享元模式?

Java 面試中其他各式各樣的問題

92)嵌套靜態(tài)類與頂級類有什么區(qū)別?

93)你能寫出一個(gè)正則表達(dá)式來判斷一個(gè)字符串是否是一個(gè)數(shù)字嗎?

94)Java 中,受檢查異常 和 不受檢查異常的區(qū)別?

95)Java 中,throw 和 throws 有什么區(qū)別

96)Java 中,Serializable 與 Externalizable 的區(qū)別?

97)Java 中,DOM 和 SAX 解析器有什么不同?

98)說出 JDK 1.7 中的三個(gè)新特性?

99)說出 5 個(gè) JDK 1.8 引入的新特性?

100)Java 中,Maven 和 ANT 有什么區(qū)別?

115道Java經(jīng)典面試題(面中率高、全)

Java是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)編程語言。下面列出了面向?qū)ο筌浖_發(fā)的優(yōu)點(diǎn):

  • 代碼開發(fā)模塊化,更易維護(hù)和修改。

  • 代碼復(fù)用。

  • 增強(qiáng)代碼的可靠性和靈活性。

  • 增加代碼的可理解性。

面向?qū)ο缶幊逃泻芏嘀匾奶匦?#xff0c;比如:封裝,繼承,多態(tài)和抽象。下面的章節(jié)我們會(huì)逐個(gè)分析這些特性。

封裝

封裝給對象提供了隱藏內(nèi)部特性和行為的能力。對象提供一些能被其他對象訪問的方法來改變它內(nèi)部的數(shù)據(jù)。在Java當(dāng)中,有3種修飾符:public,private和protected。每一種修飾符給其他的位于同一個(gè)包或者不同包下面對象賦予了不同的訪問權(quán)限。

下面列出了使用封裝的一些好處:

  • 通過隱藏對象的屬性來保護(hù)對象內(nèi)部的狀態(tài)。

  • 提高了代碼的可用性和可維護(hù)性,因?yàn)閷ο蟮男袨榭梢员粏为?dú)的改變或者是擴(kuò)展。

  • 禁止對象之間的不良交互提高模塊化。

參考這個(gè)文檔獲取更多關(guān)于封裝的細(xì)節(jié)和示例。

多態(tài)

多態(tài)是編程語言給不同的底層數(shù)據(jù)類型做相同的接口展示的一種能力。一個(gè)多態(tài)類型上的操作可以應(yīng)用到其他類型的值上面。

繼承

繼承給對象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也可以在不修改類的情況下給現(xiàn)存的類添加新特性。

抽象

抽象是把想法從具體的實(shí)例中分離出來的步驟,因此,要根據(jù)他們的功能而不是實(shí)現(xiàn)細(xì)節(jié)來創(chuàng)建類。Java支持創(chuàng)建只暴漏接口而不包含方法實(shí)現(xiàn)的抽象的類。這種抽象技術(shù)的主要目的是把類的行為和實(shí)現(xiàn)細(xì)節(jié)分離開。

抽象和封裝的不同點(diǎn)

抽象和封裝是互補(bǔ)的概念。一方面,抽象關(guān)注對象的行為。另一方面,封裝關(guān)注對象行為的細(xì)節(jié)。一般是通過隱藏對象內(nèi)部狀態(tài)信息做到封裝,因此,封裝可以看成是用來提供抽象的一種策略。

常見的Java問題

1.什么是Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無關(guān)的編程語言”?

Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。

Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫或者是重新編譯。Java虛擬機(jī)讓這個(gè)變?yōu)榭赡?#xff0c;因?yàn)樗赖讓佑布脚_(tái)的指令長度和其他特性。

2.JDK和JRE的區(qū)別是什么?

Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java開發(fā)工具包(JDK)是完整的Java軟件開發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行Java應(yīng)用程序。

3.”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法?

“static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒有所屬的類的實(shí)例變量的情況下被訪問。

Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。

4.是否可以在static環(huán)境中訪問非static變量?

static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時(shí)候,會(huì)對static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來訪問非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒有被創(chuàng)建出來,還沒有跟任何實(shí)例關(guān)聯(lián)上。

5.Java支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?

Java語言支持的8中基本數(shù)據(jù)類型是:

  • byte

  • short

  • int

  • long

  • float

  • double

  • boolean

  • char

自動(dòng)裝箱是Java編譯器在基本數(shù)據(jù)類型和對應(yīng)的對象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。

6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?

Java中的方法重載發(fā)生在同一個(gè)類里面兩個(gè)或者是多個(gè)方法的方法名相同但是參數(shù)不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪問。

7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?

當(dāng)新對象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒有給類提供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。

Java中構(gòu)造函數(shù)重載和方法重載很相似??梢詾橐粋€(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。

Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩憳?gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。

8.Java支持多繼承么?

不支持,Java不支持多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。

9.接口和抽象類的區(qū)別是什么?

Java提供和支持創(chuàng)建抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:

  • 接口中所有的方法隱含的都是抽象的。而抽象類則可以同時(shí)包含抽象和非抽象的方法。

  • 類可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類

  • 類如果要實(shí)現(xiàn)一個(gè)接口,它必須要實(shí)現(xiàn)接口聲明的所有方法。但是,類可以不實(shí)現(xiàn)抽象類聲明的所有方法,當(dāng)然,在這種情況下,類也必須得聲明成是抽象的。

  • 抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。

  • Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。

  • Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。

  • 接口是絕對抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。

也可以參考JDK8中抽象類和接口的區(qū)別

10.什么是值傳遞和引用傳遞?

對象被值傳遞,意味著傳遞了對象的一個(gè)副本。因此,就算是改變了對象副本,也不會(huì)影響源對象的值。

對象被引用傳遞,意味著傳遞的并不是實(shí)際的對象,而是對象的引用。因此,外部對引用對象所做的改變會(huì)反映到所有的對象上。

Java線程

11.進(jìn)程和線程的區(qū)別是什么?

進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程。線程又叫做輕量級進(jìn)程。

12.創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?

有三種方式可以用來創(chuàng)建線程:

  • 繼承Thread類

  • 實(shí)現(xiàn)Runnable接口

  • 應(yīng)用程序可以使用Executor框架來創(chuàng)建線程池

實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread類。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實(shí)現(xiàn)接口。同時(shí),線程池也是非常高效的,很容易實(shí)現(xiàn)和使用。

13.概括的解釋下線程的幾種可用狀態(tài)。

線程在執(zhí)行過程中,可以處于下面幾種狀態(tài):

  • 就緒(Runnable):線程準(zhǔn)備運(yùn)行,不一定立馬就能開始執(zhí)行。

  • 運(yùn)行中(Running):進(jìn)程正在執(zhí)行線程的代碼。

  • 等待中(Waiting):線程處于阻塞的狀態(tài),等待外部的處理結(jié)束。

  • 睡眠中(Sleeping):線程被強(qiáng)制睡眠。

  • I/O阻塞(Blocked on I/O):等待I/O操作完成。

  • 同步阻塞(Blocked on Synchronization):等待獲取鎖。

  • 死亡(Dead):線程完成了執(zhí)行。

14.同步方法和同步代碼塊的區(qū)別是什么?

在Java語言中,每一個(gè)對象有一把鎖。線程可以使用synchronized關(guān)鍵字來獲取對象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級別(粗粒度鎖)或者是代碼塊級別(細(xì)粒度鎖)。

15.在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級別的同步?

監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個(gè)線程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。

16.什么是死鎖(deadlock)?

兩個(gè)進(jìn)程都在等待對方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無限的等待中。

17.如何確保N個(gè)線程可以訪問N個(gè)資源同時(shí)又不導(dǎo)致死鎖?

使用多線程的時(shí)候,一種非常簡單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖了。

Java集合類

18.Java集合類框架的基本接口有哪些?

集合類接口指定了一組叫做元素的對象。集合類接口的每一種具體的實(shí)現(xiàn)類都可以選擇以它自己的方式對元素進(jìn)行保存和排序。有的集合類允許重復(fù)的鍵,有些不允許。

Java集合類提供了一套設(shè)計(jì)良好的支持對一組對象進(jìn)行操作的接口和類。Java集合類里面最基本的接口有:

  • Collection:代表一組對象,每一個(gè)對象都是它的子元素。

  • Set:不包含重復(fù)元素的Collection。

  • List:有順序的collection,并且可以包含重復(fù)元素。

  • Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復(fù)。

19.為什么集合類沒有實(shí)現(xiàn)Cloneable和Serializable接口?

克隆(cloning)或者是序列化(serialization)的語義和含義是跟具體的實(shí)現(xiàn)相關(guān)的。因此,應(yīng)該由集合類的具體實(shí)現(xiàn)來決定如何被克隆或者是序列化。

20.什么是迭代器(Iterator)?

Iterator接口提供了很多對集合元素進(jìn)行迭代的方法。每一個(gè)集合類都包含了可以返回迭代器實(shí)例的

迭代方法。迭代器可以在迭代的過程中刪除底層集合的元素。

21.Iterator和ListIterator的區(qū)別是什么?

下面列出了他們的區(qū)別:

  • Iterator可用來遍歷Set和List集合,但是ListIterator只能用來遍歷List。

  • Iterator對集合只能是前向遍歷,ListIterator既可以前向也可以后向。

  • ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,比如:增加元素,替換元素,獲取前一個(gè)和后一個(gè)元素的索引,等等。

22.快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)別是什么?

Iterator的安全失敗是基于對底層集合做拷貝,因此,它不受源集合上修改的影響。java.util包下面的所有的集合類都是快速失敗的,而java.util.concurrent包下面的所有的類都是安全失敗的??焖偈〉牡鲿?huì)拋出

ConcurrentModificationException異常,而安全失敗的迭代器永遠(yuǎn)不會(huì)拋出這樣的異常。

23.Java中的HashMap的工作原理是什么?

Java中的HashMap是以鍵值對(key-value)的形式存儲(chǔ)元素的。HashMap需要一個(gè)hash函數(shù),它使用hashCode()和equals()方法來向集合/從集合添加和檢索元素。當(dāng)調(diào)用put()方法的時(shí)候,HashMap會(huì)計(jì)算key的hash值,然后把鍵值對存儲(chǔ)在集合中合適的索引上。如果key已經(jīng)存在了,value會(huì)被更新成新值。

HashMap的一些重要的特性是它的容量(capacity),負(fù)載因子(load factor)和擴(kuò)容極限(threshold resizing)。

24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方?

Java中的HashMap使用hashCode()和equals()方法來確定鍵值對的索引,當(dāng)根據(jù)鍵獲取值的時(shí)候也會(huì)用到這兩個(gè)方法。如果沒有正確的實(shí)現(xiàn)這兩個(gè)方法,兩個(gè)不同的鍵可能會(huì)有相同的hash值,因此,可能會(huì)被集合認(rèn)為是相等的。而且,這兩個(gè)方法也用來發(fā)現(xiàn)重復(fù)元素。所以這兩個(gè)方法的實(shí)現(xiàn)對HashMap的精確性和正確性是至關(guān)重要的。

25.HashMap和Hashtable有什么區(qū)別?

HashMap和Hashtable都實(shí)現(xiàn)了Map接口,因此很多特性非常相似。但是,他們有以下不同點(diǎn):

  • HashMap允許鍵和值是null,而Hashtable不允許鍵或者值是null。

  • Hashtable是同步的,而HashMap不是。因此,HashMap更適合于單線程環(huán)境,而Hashtable適合于多線程環(huán)境。

  • HashMap提供了可供應(yīng)用迭代的鍵的集合,因此,HashMap是快速失敗的。另一方面,Hashtable提供了對鍵的列舉(Enumeration)。

  • 一般認(rèn)為Hashtable是一個(gè)遺留的類。

26.數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時(shí)候應(yīng)該使用Array而不是ArrayList?

下面列出了Array和ArrayList的不同點(diǎn):

  • Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。

  • Array大小是固定的,ArrayList的大小是動(dòng)態(tài)變化的。

  • ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

  • 對于基本類型數(shù)據(jù),集合使用自動(dòng)裝箱來減少編碼工作量。但是,當(dāng)處理固定大小的基本數(shù)據(jù)類型的時(shí)候,這種方式相對比較慢。

27.ArrayList和LinkedList有什么區(qū)別?

ArrayList和LinkedList都實(shí)現(xiàn)了List接口,他們有以下的不同點(diǎn):

  • ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)(1)時(shí)間復(fù)雜度對元素進(jìn)行隨機(jī)訪問。與此對應(yīng),LinkedList是以元素列表的形式存儲(chǔ)它的數(shù)據(jù),每一個(gè)元素都和它的前一個(gè)和后一個(gè)元素鏈接在一起,在這種情況下,查找某個(gè)元素的時(shí)間復(fù)雜度是O(n)。

  • 相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因?yàn)楫?dāng)元素被添加到集合任意位置的時(shí)候,不需要像數(shù)組那樣重新計(jì)算大小或者是更新索引。

  • LinkedList比ArrayList更占內(nèi)存,因?yàn)長inkedList為每一個(gè)節(jié)點(diǎn)存儲(chǔ)了兩個(gè)引用,一個(gè)指向前一個(gè)元素,一個(gè)指向下一個(gè)元素。

也可以參考ArrayList vs. LinkedList。

28.Comparable和Comparator接口是干什么的?列出它們的區(qū)別。

Java提供了只包含一個(gè)compareTo()方法的Comparable接口。這個(gè)方法可以個(gè)給兩個(gè)對象排序。具體來說,它返回負(fù)數(shù),0,正數(shù)來表明輸入對象小于,等于,大于已經(jīng)存在的對象。

Java提供了包含compare()和equals()兩個(gè)方法的Comparator接口。compare()方法用來給兩個(gè)輸入?yún)?shù)排序,返回負(fù)數(shù),0,正數(shù)表明第一個(gè)參數(shù)是小于,等于,大于第二個(gè)參數(shù)。equals()方法需要一個(gè)對象作為參數(shù),它用來決定輸入?yún)?shù)是否和comparator相等。只有當(dāng)輸入?yún)?shù)也是一個(gè)comparator并且輸入?yún)?shù)和當(dāng)前comparator的排序結(jié)果是相同的時(shí)候,這個(gè)方法才返回true。

29.什么是Java優(yōu)先級隊(duì)列(Priority Queue)?

PriorityQueue是一個(gè)基于優(yōu)先級堆的無界隊(duì)列,它的元素是按照自然順序(natural order)排序的。在創(chuàng)建的時(shí)候,我們可以給它提供一個(gè)負(fù)責(zé)給元素排序的比較器。PriorityQueue不允許null值,因?yàn)樗麄儧]有自然順序,或者說他們沒有任何的相關(guān)聯(lián)的比較器。最后,PriorityQueue不是線程安全的,入隊(duì)和出隊(duì)的時(shí)間復(fù)雜度是O(log(n))。

30.你了解大O符號(big-O notation)么?你能給出不同數(shù)據(jù)結(jié)構(gòu)的例子么?

大O符號描述了當(dāng)數(shù)據(jù)結(jié)構(gòu)里面的元素增加的時(shí)候,算法的規(guī)?;蛘呤切阅茉谧顗牡膱鼍跋掠卸嗝春谩?/p>

大O符號也可用來描述其他的行為,比如:內(nèi)存消耗。因?yàn)榧项悓?shí)際上是數(shù)據(jù)結(jié)構(gòu),我們一般使用大O符號基于時(shí)間,內(nèi)存和性能來選擇最好的實(shí)現(xiàn)。大O符號可以對大量數(shù)據(jù)的性能給出一個(gè)很好的說明。

31.如何權(quán)衡是使用無序的數(shù)組還是有序的數(shù)組?

有序數(shù)組最大的好處在于查找的時(shí)間復(fù)雜度是O(log n),而無序數(shù)組是O(n)。有序數(shù)組的缺點(diǎn)是插入操作的時(shí)間復(fù)雜度是O(n),因?yàn)橹荡蟮脑匦枰笠苿?dòng)來給新元素騰位置。相反,無序數(shù)組的插入時(shí)間復(fù)雜度是常量O(1)。

32.Java集合類框架的最佳實(shí)踐有哪些?

根據(jù)應(yīng)用的需要正確選擇要使用的集合的類型對性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我們就應(yīng)該用Array而不是ArrayList。

有些集合類允許指定初始容量。因此,如果我們能估計(jì)出存儲(chǔ)的元素的數(shù)目,我們可以設(shè)置初始容量來避免重新計(jì)算hash值或者是擴(kuò)容。

為了類型安全,可讀性和健壯性的原因總是要使用泛型。同時(shí),使用泛型還可以避免運(yùn)行時(shí)的ClassCastException。

使用JDK提供的不變類(immutable class)作為Map的鍵可以避免為我們自己的類實(shí)現(xiàn)hashCode()和equals()方法。

編程的時(shí)候接口優(yōu)于實(shí)現(xiàn)。

底層的集合實(shí)際上是空的情況下,返回長度是0的集合或者是數(shù)組,不要返回null。

33.Enumeration接口和Iterator接口的區(qū)別有哪些?

Enumeration速度是Iterator的2倍,同時(shí)占用更少的內(nèi)存。但是,Iterator遠(yuǎn)遠(yuǎn)比Enumeration安全,因?yàn)槠渌€程不能夠修改正在被iterator遍歷的集合里面的對象。同時(shí),Iterator允許調(diào)用者刪除底層集合里面的元素,這對Enumeration來說是不可能的。

34.HashSet和TreeSet有什么區(qū)別?

HashSet是由一個(gè)hash表來實(shí)現(xiàn)的,因此,它的元素是無序的。add(),remove(),contains()方法的時(shí)間復(fù)雜度是O(1)。

另一方面,TreeSet是由一個(gè)樹形的結(jié)構(gòu)來實(shí)現(xiàn)的,它里面的元素是有序的。因此,add(),remove(),contains()方法的時(shí)間復(fù)雜度是O(logn)。

垃圾收集器(Garbage Collectors)

35.Java中垃圾回收有什么目的?什么時(shí)候進(jìn)行垃圾回收?

垃圾回收的目的是識別并且丟棄應(yīng)用不再使用的對象來釋放和重用資源。

36.System.gc()和Runtime.gc()會(huì)做什么事情?

這兩個(gè)方法用來提示JVM要進(jìn)行垃圾回收。但是,立即開始還是延遲進(jìn)行垃圾回收是取決于JVM的。

37.finalize()方法什么時(shí)候被調(diào)用?析構(gòu)函數(shù)(finalization)的目的是什么?

在釋放對象占用的內(nèi)存之前,垃圾收集器會(huì)調(diào)用對象的finalize()方法。一般建議在該方法中釋放對象持有的資源。

38.如果對象的引用被置為null,垃圾收集器是否會(huì)立即釋放對象占用的內(nèi)存?

不會(huì),在下一個(gè)垃圾回收周期中,這個(gè)對象將是可被回收的。

39.Java堆的結(jié)構(gòu)是什么樣子的?什么是堆中的永久代(Perm Gen space)?

JVM的堆是運(yùn)行時(shí)數(shù)據(jù)區(qū),所有類的實(shí)例和數(shù)組都是在堆上分配內(nèi)存。它在JVM啟動(dòng)的時(shí)候被創(chuàng)建。對象所占的堆內(nèi)存是由自動(dòng)內(nèi)存管理系統(tǒng)也就是垃圾收集器回收。

堆內(nèi)存是由存活和死亡的對象組成的。存活的對象是應(yīng)用可以訪問的,不會(huì)被垃圾回收。死亡的對象是應(yīng)用不可訪問尚且還沒有被垃圾收集器回收掉的對象。一直到垃圾收集器把這些對象回收掉之前,他們會(huì)一直占據(jù)堆內(nèi)存空間。

40.串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?

吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等規(guī)模和大規(guī)模數(shù)據(jù)的應(yīng)用程序。而串行收集器對大多數(shù)的小應(yīng)用(在現(xiàn)代處理器上需要大概100M左右的內(nèi)存)就足夠了。

41.在Java中,對象什么時(shí)候可以被垃圾回收?

當(dāng)對象對當(dāng)前使用這個(gè)對象的應(yīng)用程序變得不可觸及的時(shí)候,這個(gè)對象就可以被回收了。

42.JVM的永久代中會(huì)發(fā)生垃圾回收么?

垃圾回收不會(huì)發(fā)生在永久代,如果永久代滿了或者是超過了臨界值,會(huì)觸發(fā)完全垃圾回收(Full GC)。如果你仔細(xì)查看垃圾收集器的輸出信息,就會(huì)發(fā)現(xiàn)永久代也是被回收的。這就是為什么正確的永久代大小對避免Full GC是非常重要的原因。請參考下Java8:從永久代到元數(shù)據(jù)區(qū)

(譯者注:Java8中已經(jīng)移除了永久代,新加了一個(gè)叫做元數(shù)據(jù)區(qū)的native內(nèi)存區(qū))

異常處理

43.Java中的兩種異常類型是什么?他們有什么區(qū)別?

Java中有兩種異常:受檢查的(checked)異常和不受檢查的(unchecked)異常。不受檢查的異常不需要在方法或者是構(gòu)造函數(shù)上聲明,就算方法或者是構(gòu)造函數(shù)的執(zhí)行可能會(huì)拋出這樣的異常,并且不受檢查的異??梢詡鞑サ椒椒ɑ蛘呤菢?gòu)造函數(shù)的外面。相反,受檢查的異常必須要用throws語句在方法或者是構(gòu)造函數(shù)上聲明。這里有Java異常處理的一些小建議。

44.Java中Exception和Error有什么區(qū)別?

Exception和Error都是Throwable的子類。Exception用于用戶程序可以捕獲的異常情況。Error定義了不期望被用戶程序捕獲的異常。

45.throw和throws有什么區(qū)別?

throw關(guān)鍵字用來在程序中明確的拋出異常,相反,throws語句用來表明方法不能處理的異常。每一個(gè)方法都必須要指定哪些異常不能處理,所以方法的調(diào)用者才能夠確保處理可能發(fā)生的異常,多個(gè)異常是用逗號分隔的。

45.異常處理的時(shí)候,finally代碼塊的重要性是什么?(譯者注:作者標(biāo)題的序號弄錯(cuò)了)

無論是否拋出異常,finally代碼塊總是會(huì)被執(zhí)行。就算是沒有catch語句同時(shí)又拋出異常的情況下,finally代碼塊仍然會(huì)被執(zhí)行。最后要說的是,finally代碼塊主要用來釋放資源,比如:I/O緩沖區(qū),數(shù)據(jù)庫連接。

46.異常處理完成以后,Exception對象會(huì)發(fā)生什么變化?

Exception對象會(huì)在下一個(gè)垃圾回收過程中被回收掉。

47.finally代碼塊和finalize()方法有什么區(qū)別?

無論是否拋出異常,finally代碼塊都會(huì)執(zhí)行,它主要是用來釋放應(yīng)用占用的資源。finalize()方法是Object類的一個(gè)protected方法,它是在對象被垃圾回收之前由Java虛擬機(jī)來調(diào)用的。

Java小應(yīng)用程序(Applet)

48.什么是Applet?

java applet是能夠被包含在HTML頁面中并且能被啟用了java的客戶端瀏覽器執(zhí)行的程序。Applet主要用來創(chuàng)建動(dòng)態(tài)交互的web應(yīng)用程序。

49.解釋一下Applet的生命周期

applet可以經(jīng)歷下面的狀態(tài):

  • Init:每次被載入的時(shí)候都會(huì)被初始化。

  • Start:開始執(zhí)行applet。

  • Stop:結(jié)束執(zhí)行applet。

  • Destroy:卸載applet之前,做最后的清理工作。

50.當(dāng)applet被載入的時(shí)候會(huì)發(fā)生什么?

首先,創(chuàng)建applet控制類的實(shí)例,然后初始化applet,最后開始運(yùn)行。

51.Applet和普通的Java應(yīng)用程序有什么區(qū)別?

applet是運(yùn)行在啟用了java的瀏覽器中,Java應(yīng)用程序是可以在瀏覽器之外運(yùn)行的獨(dú)立的Java程序。但是,它們都需要有Java虛擬機(jī)。

進(jìn)一步來說,Java應(yīng)用程序需要一個(gè)有特定方法簽名的main函數(shù)來開始執(zhí)行。Java applet不需要這樣的函數(shù)來開始執(zhí)行。

最后,Java applet一般會(huì)使用很嚴(yán)格的安全策略,Java應(yīng)用一般使用比較寬松的安全策略。

52.Java applet有哪些限制條件?

主要是由于安全的原因,給applet施加了以下的限制:

  • applet不能夠載入類庫或者定義本地方法。

  • applet不能在宿主機(jī)上讀寫文件。

  • applet不能讀取特定的系統(tǒng)屬性。

  • applet不能發(fā)起網(wǎng)絡(luò)連接,除非是跟宿主機(jī)。

  • applet不能夠開啟宿主機(jī)上其他任何的程序。

53.什么是不受信任的applet?

不受信任的applet是不能訪問或是執(zhí)行本地系統(tǒng)文件的Java applet,默認(rèn)情況下,所有下載的applet都是不受信任的。

54.從網(wǎng)絡(luò)上加載的applet和從本地文件系統(tǒng)加載的applet有什么區(qū)別?

當(dāng)applet是從網(wǎng)絡(luò)上加載的時(shí)候,applet是由applet類加載器載入的,它受applet安全管理器的限制。

當(dāng)applet是從客戶端的本地磁盤載入的時(shí)候,applet是由文件系統(tǒng)加載器載入的。

從文件系統(tǒng)載入的applet允許在客戶端讀文件,寫文件,加載類庫,并且也允許執(zhí)行其他程序,但是,卻通不過字節(jié)碼校驗(yàn)。

55.applet類加載器是什么?它會(huì)做哪些工作?

當(dāng)applet是從網(wǎng)絡(luò)上加載的時(shí)候,它是由applet類加載器載入的。類加載器有自己的java名稱空間等級結(jié)構(gòu)。類加載器會(huì)保證來自文件系統(tǒng)的類有唯一的名稱空間,來自網(wǎng)絡(luò)資源的類有唯一的名稱空間。

當(dāng)瀏覽器通過網(wǎng)絡(luò)載入applet的時(shí)候,applet的類被放置于和applet的源相關(guān)聯(lián)的私有的名稱空間中。然后,那些被類加載器載入進(jìn)來的類都是通過了驗(yàn)證器驗(yàn)證的。驗(yàn)證器會(huì)檢查類文件格式是否遵守Java語言規(guī)范,確保不會(huì)出現(xiàn)堆棧溢出(stack overflow)或者下溢(underflow),傳遞給字節(jié)碼指令的參數(shù)是正確的。

56.applet安全管理器是什么?它會(huì)做哪些工作?

applet安全管理器是給applet施加限制條件的一種機(jī)制。瀏覽器可以只有一個(gè)安全管理器。安全管理器在啟動(dòng)的時(shí)候被創(chuàng)建,之后不能被替換覆蓋或者是擴(kuò)展。

Swing

57.彈出式選擇菜單(Choice)和列表(List)有什么區(qū)別

Choice是以一種緊湊的形式展示的,需要下拉才能看到所有的選項(xiàng)。Choice中一次只能選中一個(gè)選項(xiàng)。List同時(shí)可以有多個(gè)元素可見,支持選中一個(gè)或者多個(gè)元素。

58.什么是布局管理器?

布局管理器用來在容器中組織組件。

59.滾動(dòng)條(Scrollbar)和滾動(dòng)面板(JScrollPane)有什么區(qū)別?

Scrollbar是一個(gè)組件,不是容器。而ScrollPane是容器。ScrollPane自己處理滾動(dòng)事件。

60.哪些Swing的方法是線程安全的?

只有3個(gè)線程安全的方法:repaint(), revalidate(), and invalidate()。

61.說出三種支持重繪(painting)的組件。

Canvas, Frame, Panel,和Applet支持重繪。

62.什么是裁剪(clipping)?

限制在一個(gè)給定的區(qū)域或者形狀的繪圖操作就做裁剪。

63.MenuItem和CheckboxMenuItem的區(qū)別是什么?

CheckboxMenuItem類繼承自MenuItem類,支持菜單選項(xiàng)可以選中或者不選中。

64.邊緣布局(BorderLayout)里面的元素是如何布局的?

BorderLayout里面的元素是按照容器的東西南北中進(jìn)行布局的。

65.網(wǎng)格包布局(GridBagLayout)里面的元素是如何布局的?

GridBagLayout里面的元素是按照網(wǎng)格進(jìn)行布局的。不同大小的元素可能會(huì)占據(jù)網(wǎng)格的多于1行或一列。因此,行數(shù)和列數(shù)可以有不同的大小。

66.Window和Frame有什么區(qū)別?

Frame類繼承了Window類,它定義了一個(gè)可以有菜單欄的主應(yīng)用窗口。

67.裁剪(clipping)和重繪(repainting)有什么聯(lián)系?

當(dāng)窗口被AWT重繪線程進(jìn)行重繪的時(shí)候,它會(huì)把裁剪區(qū)域設(shè)置成需要重繪的窗口的區(qū)域。

68.事件監(jiān)聽器接口(event-listener interface)和事件適配器(event-adapter)有什么關(guān)系?

事件監(jiān)聽器接口定義了對特定的事件,事件處理器必須要實(shí)現(xiàn)的方法。事件適配器給事件監(jiān)聽器接口提供了默認(rèn)的實(shí)現(xiàn)。

69.GUI組件如何來處理它自己的事件?

GUI組件可以處理它自己的事件,只要它實(shí)現(xiàn)相對應(yīng)的事件監(jiān)聽器接口,并且把自己作為事件監(jiān)聽器。

70.Java的布局管理器比傳統(tǒng)的窗口系統(tǒng)有哪些優(yōu)勢?

Java使用布局管理器以一種一致的方式在所有的窗口平臺(tái)上擺放組件。因?yàn)椴季止芾砥鞑粫?huì)和組件的絕對大小和位置相綁定,所以他們能夠適應(yīng)跨窗口系統(tǒng)的特定平臺(tái)的不同。

71.Java的Swing組件使用了哪種設(shè)計(jì)模式?

Java中的Swing組件使用了MVC(視圖-模型-控制器)設(shè)計(jì)模式。

JDBC

72.什么是JDBC?

JDBC是允許用戶在不同數(shù)據(jù)庫之間做選擇的一個(gè)抽象層。JDBC允許開發(fā)者用JAVA寫數(shù)據(jù)庫應(yīng)用程序,而不需要關(guān)心底層特定數(shù)據(jù)庫的細(xì)節(jié)。

73.解釋下驅(qū)動(dòng)(Driver)在JDBC中的角色。

JDBC驅(qū)動(dòng)提供了特定廠商對JDBC API接口類的實(shí)現(xiàn),驅(qū)動(dòng)必須要提供java.sql包下面這些類的實(shí)現(xiàn):Connection, Statement, PreparedStatement,CallableStatement, ResultSet和Driver。

74.Class.forName()方法有什么作用?

這個(gè)方法用來載入跟數(shù)據(jù)庫建立連接的驅(qū)動(dòng)。

75.PreparedStatement比Statement有什么優(yōu)勢?

PreparedStatements是預(yù)編譯的,因此,性能會(huì)更好。同時(shí),不同的查詢參數(shù)值,PreparedStatement可以重用。

76.什么時(shí)候使用CallableStatement?用來準(zhǔn)備CallableStatement的方法是什么?

CallableStatement用來執(zhí)行存儲(chǔ)過程。存儲(chǔ)過程是由數(shù)據(jù)庫存儲(chǔ)和提供的。存儲(chǔ)過程可以接受輸入?yún)?shù),也可以有返回結(jié)果。非常鼓勵(lì)使用存儲(chǔ)過程,因?yàn)樗峁┝税踩院湍K化。準(zhǔn)備一個(gè)CallableStatement的方法是:

1CallableStament.prepareCall();

77.數(shù)據(jù)庫連接池是什么意思?

像打開關(guān)閉數(shù)據(jù)庫連接這種和數(shù)據(jù)庫的交互可能是很費(fèi)時(shí)的,尤其是當(dāng)客戶端數(shù)量增加的時(shí)候,會(huì)消耗大量的資源,成本是非常高的??梢栽趹?yīng)用服務(wù)器啟動(dòng)的時(shí)候建立很多個(gè)數(shù)據(jù)庫連接并維護(hù)在一個(gè)池中。連接請求由池中的連接提供。在連接使用完畢以后,把連接歸還到池中,以用于滿足將來更多的請求。

遠(yuǎn)程方法調(diào)用(RMI)

78.什么是RMI?

Java遠(yuǎn)程方法調(diào)用(Java RMI)是Java API對遠(yuǎn)程過程調(diào)用(RPC)提供的面向?qū)ο蟮牡葍r(jià)形式,支持直接傳輸序列化的Java對象和分布式垃圾回收。遠(yuǎn)程方法調(diào)用可以看做是激活遠(yuǎn)程正在運(yùn)行的對象上的方法的步驟。RMI對調(diào)用者是位置透明的,因?yàn)檎{(diào)用者感覺方法是執(zhí)行在本地運(yùn)行的對象上的??聪翿MI的一些注意事項(xiàng)。

79.RMI體系結(jié)構(gòu)的基本原則是什么?

RMI體系結(jié)構(gòu)是基于一個(gè)非常重要的行為定義和行為實(shí)現(xiàn)相分離的原則。RMI允許定義行為的代碼和實(shí)現(xiàn)行為的代碼相分離,并且運(yùn)行在不同的JVM上。

80.RMI體系結(jié)構(gòu)分哪幾層?

RMI體系結(jié)構(gòu)分以下幾層:

存根和骨架層(Stub and Skeleton layer):這一層對程序員是透明的,它主要負(fù)責(zé)攔截客戶端發(fā)出的方法調(diào)用請求,然后把請求重定向給遠(yuǎn)程的RMI服務(wù)。

遠(yuǎn)程引用層(Remote Reference Layer):RMI體系結(jié)構(gòu)的第二層用來解析客戶端對服務(wù)端遠(yuǎn)程對象的引用。這一層解析并管理客戶端對服務(wù)端遠(yuǎn)程對象的引用。連接是點(diǎn)到點(diǎn)的。

傳輸層(Transport layer):這一層負(fù)責(zé)連接參與服務(wù)的兩個(gè)JVM。這一層是建立在網(wǎng)絡(luò)上機(jī)器間的TCP/IP連接之上的。它提供了基本的連接服務(wù),還有一些防火墻穿透策略。

81.RMI中的遠(yuǎn)程接口(Remote Interface)扮演了什么樣的角色?

遠(yuǎn)程接口用來標(biāo)識哪些方法是可以被非本地虛擬機(jī)調(diào)用的接口。遠(yuǎn)程對象必須要直接或者是間接實(shí)現(xiàn)遠(yuǎn)程接口。實(shí)現(xiàn)了遠(yuǎn)程接口的類應(yīng)該聲明被實(shí)現(xiàn)的遠(yuǎn)程接口,給每一個(gè)遠(yuǎn)程對象定義構(gòu)造函數(shù),給所有遠(yuǎn)程接口的方法提供實(shí)現(xiàn)。

82.java.rmi.Naming類扮演了什么樣的角色?

java.rmi.Naming類用來存儲(chǔ)和獲取在遠(yuǎn)程對象注冊表里面的遠(yuǎn)程對象的引用。Naming類的每一個(gè)方法接收一個(gè)URL格式的String對象作為它的參數(shù)。

83.RMI的綁定(Binding)是什么意思?

綁定是為了查詢找遠(yuǎn)程對象而給遠(yuǎn)程對象關(guān)聯(lián)或者是注冊以后會(huì)用到的名稱的過程。遠(yuǎn)程對象可以使用Naming類的bind()或者rebind()方法跟名稱相關(guān)聯(lián)。

84.Naming類的bind()和rebind()方法有什么區(qū)別?

bind()方法負(fù)責(zé)把指定名稱綁定給遠(yuǎn)程對象,rebind()方法負(fù)責(zé)把指定名稱重新綁定到一個(gè)新的遠(yuǎn)程對象。如果那個(gè)名稱已經(jīng)綁定過了,先前的綁定會(huì)被替換掉。

85.讓RMI程序能正確運(yùn)行有哪些步驟?

為了讓RMI程序能正確運(yùn)行必須要包含以下幾個(gè)步驟:

  • 編譯所有的源文件。

  • 使用rmic生成stub。

  • 啟動(dòng)rmiregistry。

  • 啟動(dòng)RMI服務(wù)器。

  • 運(yùn)行客戶端程序。

86.RMI的stub扮演了什么樣的角色?

遠(yuǎn)程對象的stub扮演了遠(yuǎn)程對象的代表或者代理的角色。調(diào)用者在本地stub上調(diào)用方法,它負(fù)責(zé)在遠(yuǎn)程對象上執(zhí)行方法。當(dāng)stub的方法被調(diào)用的時(shí)候,會(huì)經(jīng)歷以下幾個(gè)步驟:

  • 初始化到包含了遠(yuǎn)程對象的JVM的連接。

  • 序列化參數(shù)到遠(yuǎn)程的JVM。

  • 等待方法調(diào)用和執(zhí)行的結(jié)果。

  • 反序列化返回的值或者是方法沒有執(zhí)行成功情況下的異常。

  • 把值返回給調(diào)用者。

87.什么是分布式垃圾回收(DGC)?它是如何工作的?

DGC叫做分布式垃圾回收。RMI使用DGC來做自動(dòng)垃圾回收。因?yàn)镽MI包含了跨虛擬機(jī)的遠(yuǎn)程對象的引用,垃圾回收是很困難的。DGC使用引用計(jì)數(shù)算法來給遠(yuǎn)程對象提供自動(dòng)內(nèi)存管理。

88.RMI中使用RMI安全管理器(RMISecurityManager)的目的是什么?

RMISecurityManager使用下載好的代碼提供可被RMI應(yīng)用程序使用的安全管理器。如果沒有設(shè)置安全管理器,RMI的類加載器就不會(huì)從遠(yuǎn)程下載任何的類。

89.解釋下Marshalling和demarshalling。

當(dāng)應(yīng)用程序希望把內(nèi)存對象跨網(wǎng)絡(luò)傳遞到另一臺(tái)主機(jī)或者是持久化到存儲(chǔ)的時(shí)候,就必須要把對象在內(nèi)存里面的表示轉(zhuǎn)化成合適的格式。這個(gè)過程就叫做Marshalling,反之就是demarshalling。

90.解釋下Serialization和Deserialization。

Java提供了一種叫做對象序列化的機(jī)制,他把對象表示成一連串的字節(jié),里面包含了對象的數(shù)據(jù),對象的類型信息,對象內(nèi)部的數(shù)據(jù)的類型信息等等。因此,序列化可以看成是為了把對象存儲(chǔ)在磁盤上或者是從磁盤上讀出來并重建對象而把對象扁平化的一種方式。反序列化是把對象從扁平狀態(tài)轉(zhuǎn)化成活動(dòng)對象的相反的步驟。

Servlet

91.什么是Servlet?

Servlet是用來處理客戶端請求并產(chǎn)生動(dòng)態(tài)網(wǎng)頁內(nèi)容的Java類。Servlet主要是用來處理或者是存儲(chǔ)HTML表單提交的數(shù)據(jù),產(chǎn)生動(dòng)態(tài)內(nèi)容,在無狀態(tài)的HTTP協(xié)議下管理狀態(tài)信息。

92.說一下Servlet的體系結(jié)構(gòu)。

所有的Servlet都必須要實(shí)現(xiàn)的核心的接口是javax.servlet.Servlet。每一個(gè)Servlet都必須要直接或者是間接實(shí)現(xiàn)這個(gè)接口,或者是繼承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最后,Servlet使用多線程可以并行的為多個(gè)請求服務(wù)。

93.Applet和Servlet有什么區(qū)別?

Applet是運(yùn)行在客戶端主機(jī)的瀏覽器上的客戶端Java程序。而Servlet是運(yùn)行在web服務(wù)器上的服務(wù)端的組件。applet可以使用用戶界面類,而Servlet沒有用戶界面,相反,Servlet是等待客戶端的HTTP請求,然后為請求產(chǎn)生響應(yīng)。

94.GenericServlet和HttpServlet有什么區(qū)別?

GenericServlet是一個(gè)通用的協(xié)議無關(guān)的Servlet,它實(shí)現(xiàn)了Servlet和ServletConfig接口。繼承自GenericServlet的Servlet應(yīng)該要覆蓋service()方法。最后,為了開發(fā)一個(gè)能用在網(wǎng)頁上服務(wù)于使用HTTP協(xié)議請求的Servlet,你的Servlet必須要繼承自HttpServlet。這里有Servlet的例子。

95.解釋下Servlet的生命周期。

對每一個(gè)客戶端的請求,Servlet引擎載入Servlet,調(diào)用它的init()方法,完成Servlet的初始化。然后,Servlet對象通過為每一個(gè)請求單獨(dú)調(diào)用service()方法來處理所有隨后來自客戶端的請求,最后,調(diào)用Servlet(譯者注:這里應(yīng)該是Servlet而不是server)的destroy()方法把Servlet刪除掉。

96.doGet()方法和doPost()方法有什么區(qū)別?

doGet:GET方法會(huì)把名值對追加在請求的URL后面。因?yàn)閁RL對字符數(shù)目有限制,進(jìn)而限制了用在客戶端請求的參數(shù)值的數(shù)目。并且請求中的參數(shù)值是可見的,因此,敏感信息不能用這種方式傳遞。

doPOST:POST方法通過把請求參數(shù)值放在請求體中來克服GET方法的限制,因此,可以發(fā)送的參數(shù)的數(shù)目是沒有限制的。最后,通過POST請求傳遞的敏感信息對外部客戶端是不可見的。

97.什么是Web應(yīng)用程序?

Web應(yīng)用程序是對Web或者是應(yīng)用服務(wù)器的動(dòng)態(tài)擴(kuò)展。有兩種類型的Web應(yīng)用:面向表現(xiàn)的和面向服務(wù)的。面向表現(xiàn)的Web應(yīng)用程序會(huì)產(chǎn)生包含了很多種標(biāo)記語言和動(dòng)態(tài)內(nèi)容的交互的web頁面作為對請求的響應(yīng)。而面向服務(wù)的Web應(yīng)用實(shí)現(xiàn)了Web服務(wù)的端點(diǎn)(endpoint)。一般來說,一個(gè)Web應(yīng)用可以看成是一組安裝在服務(wù)器URL名稱空間的特定子集下面的Servlet的集合。

98.什么是服務(wù)端包含(Server Side Include)?

服務(wù)端包含(SSI)是一種簡單的解釋型服務(wù)端腳本語言,大多數(shù)時(shí)候僅用在Web上,用servlet標(biāo)簽嵌入進(jìn)來。SSI最常用的場景把一個(gè)或多個(gè)文件包含到Web服務(wù)器的一個(gè)Web頁面中。當(dāng)瀏覽器訪問Web頁面的時(shí)候,Web服務(wù)器會(huì)用對應(yīng)的servlet產(chǎn)生的文本來替換Web頁面中的servlet標(biāo)簽。

99.什么是Servlet鏈(Servlet Chaining)?

Servlet鏈?zhǔn)前岩粋€(gè)Servlet的輸出發(fā)送給另一個(gè)Servlet的方法。第二個(gè)Servlet的輸出可以發(fā)送給第三個(gè)Servlet,依次類推。鏈條上最后一個(gè)Servlet負(fù)責(zé)把響應(yīng)發(fā)送給客戶端。

100.如何知道是哪一個(gè)客戶端的機(jī)器正在請求你的Servlet?

ServletRequest類可以找出客戶端機(jī)器的IP地址或者是主機(jī)名。getRemoteAddr()方法獲取客戶端主機(jī)的IP地址,getRemoteHost()可以獲取主機(jī)名??聪逻@里的例子。

101.HTTP響應(yīng)的結(jié)構(gòu)是怎么樣的?

HTTP響應(yīng)由三個(gè)部分組成:

狀態(tài)碼(Status Code):描述了響應(yīng)的狀態(tài)??梢杂脕頇z查是否成功的完成了請求。請求失敗的情況下,狀態(tài)碼可用來找出失敗的原因。如果Servlet沒有返回狀態(tài)碼,默認(rèn)會(huì)返回成功的狀態(tài)碼HttpServletResponse.SC_OK。

HTTP頭部(HTTP Header):它們包含了更多關(guān)于響應(yīng)的信息。比如:頭部可以指定認(rèn)為響應(yīng)過期的過期日期,或者是指定用來給用戶安全的傳輸實(shí)體內(nèi)容的編碼格式。如何在Serlet中檢索HTTP的頭部看這里。

主體(Body):它包含了響應(yīng)的內(nèi)容。它可以包含HTML代碼,圖片,等等。主體是由傳輸在HTTP消息中緊跟在頭部后面的數(shù)據(jù)字節(jié)組成的。

102.什么是cookie?session和cookie有什么區(qū)別?

cookie是Web服務(wù)器發(fā)送給瀏覽器的一塊信息。瀏覽器會(huì)在本地文件中給每一個(gè)Web服務(wù)器存儲(chǔ)cookie。以后瀏覽器在給特定的Web服務(wù)器發(fā)請求的時(shí)候,同時(shí)會(huì)發(fā)送所有為該服務(wù)器存儲(chǔ)的cookie。下面列出了session和cookie的區(qū)別:

  • 無論客戶端瀏覽器做怎么樣的設(shè)置,session都應(yīng)該能正常工作??蛻舳丝梢赃x擇禁用cookie,但是,session仍然是能夠工作的,因?yàn)榭蛻舳藷o法禁用服務(wù)端的session。

  • 在存儲(chǔ)的數(shù)據(jù)量方面session和cookies也是不一樣的。session能夠存儲(chǔ)任意的Java對象,cookie只能存儲(chǔ)String類型的對象。

103.瀏覽器和Servlet通信使用的是什么協(xié)議?

瀏覽器和Servlet通信使用的是HTTP協(xié)議。

104.什么是HTTP隧道?

HTTP隧道是一種利用HTTP或者是HTTPS把多種網(wǎng)絡(luò)協(xié)議封裝起來進(jìn)行通信的技術(shù)。因此,HTTP協(xié)議扮演了一個(gè)打通用于通信的網(wǎng)絡(luò)協(xié)議的管道的包裝器的角色。把其他協(xié)議的請求掩蓋成HTTP的請求就是HTTP隧道。

105.sendRedirect()和forward()方法有什么區(qū)別?

sendRedirect()方法會(huì)創(chuàng)建一個(gè)新的請求,而forward()方法只是把請求轉(zhuǎn)發(fā)到一個(gè)新的目標(biāo)上。重定向(redirect)以后,之前請求作用域范圍以內(nèi)的對象就失效了,因?yàn)闀?huì)產(chǎn)生一個(gè)新的請求,而轉(zhuǎn)發(fā)(forwarding)以后,之前請求作用域范圍以內(nèi)的對象還是能訪問的。一般認(rèn)為sendRedirect()比forward()要慢。

106.什么是URL編碼和URL解碼?

URL編碼是負(fù)責(zé)把URL里面的空格和其他的特殊字符替換成對應(yīng)的十六進(jìn)制表示,反之就是解碼。

JSP

107.什么是JSP頁面?

JSP頁面是一種包含了靜態(tài)數(shù)據(jù)和JSP元素兩種類型的文本的文本文檔。靜態(tài)數(shù)據(jù)可以用任何基于文本的格式來表示,比如:HTML或者XML。JSP是一種混合了靜態(tài)內(nèi)容和動(dòng)態(tài)產(chǎn)生的內(nèi)容的技術(shù)。這里看下JSP的例子。

108.JSP請求是如何被處理的?

瀏覽器首先要請求一個(gè)以.jsp擴(kuò)展名結(jié)尾的頁面,發(fā)起JSP請求,然后,Web服務(wù)器讀取這個(gè)請求,使用JSP編譯器把JSP頁面轉(zhuǎn)化成一個(gè)Servlet類。需要注意的是,只有當(dāng)?shù)谝淮握埱箜撁婊蛘呤荍SP文件發(fā)生改變的時(shí)候JSP文件才會(huì)被編譯,然后服務(wù)器調(diào)用servlet類,處理瀏覽器的請求。一旦請求執(zhí)行結(jié)束,servlet會(huì)把響應(yīng)發(fā)送給客戶端。這里看下如何在JSP中獲取請求參數(shù)。

109.JSP有什么優(yōu)點(diǎn)?

下面列出了使用JSP的優(yōu)點(diǎn):

  • JSP頁面是被動(dòng)態(tài)編譯成Servlet的,因此,開發(fā)者可以很容易的更新展現(xiàn)代碼。

  • JSP頁面可以被預(yù)編譯。

  • JSP頁面可以很容易的和靜態(tài)模板結(jié)合,包括:HTML或者XML,也可以很容易的和產(chǎn)生動(dòng)態(tài)內(nèi)容的代碼結(jié)合起來。

  • 開發(fā)者可以提供讓頁面設(shè)計(jì)者以類XML格式來訪問的自定義的JSP標(biāo)簽庫。

  • 開發(fā)者可以在組件層做邏輯上的改變,而不需要編輯單獨(dú)使用了應(yīng)用層邏輯的頁面。

110.什么是JSP指令(Directive)?JSP中有哪些不同類型的指令?

Directive是當(dāng)JSP頁面被編譯成Servlet的時(shí)候,JSP引擎要處理的指令。Directive用來設(shè)置頁面級別的指令,從外部文件插入數(shù)據(jù),指定自定義的標(biāo)簽庫。Directive是定義在 之間的。下面列出了不同類型的Directive:

  • 包含指令(Include directive):用來包含文件和合并文件內(nèi)容到當(dāng)前的頁面。

  • 頁面指令(Page directive):用來定義JSP頁面中特定的屬性,比如錯(cuò)誤頁面和緩沖區(qū)。

  • Taglib指令:用來聲明頁面中使用的自定義的標(biāo)簽庫。

111.什么是JSP動(dòng)作(JSP action)?

JSP動(dòng)作以XML語法的結(jié)構(gòu)來控制Servlet引擎的行為。當(dāng)JSP頁面被請求的時(shí)候,JSP動(dòng)作會(huì)被執(zhí)行。它們可以被動(dòng)態(tài)的插入到文件中,重用JavaBean組件,轉(zhuǎn)發(fā)用戶到其他的頁面,或者是給Java插件產(chǎn)生HTML代碼。下面列出了可用的動(dòng)作:

  • jsp:include-當(dāng)JSP頁面被請求的時(shí)候包含一個(gè)文件。

  • jsp:useBean-找出或者是初始化Javabean。

  • jsp:setProperty-設(shè)置JavaBean的屬性。

  • jsp:getProperty-獲取JavaBean的屬性。

  • jsp:forward-把請求轉(zhuǎn)發(fā)到新的頁面。

  • jsp:plugin-產(chǎn)生特定瀏覽器的代碼。

112.什么是Scriptlets?

JSP技術(shù)中,scriptlet是嵌入在JSP頁面中的一段Java代碼。scriptlet是位于標(biāo)簽內(nèi)部的所有的東西,在標(biāo)簽與標(biāo)簽之間,用戶可以添加任意有效的scriplet。

113.聲明(Decalaration)在哪里?

聲明跟Java中的變量聲明很相似,它用來聲明隨后要被表達(dá)式或者scriptlet使用的變量。添加的聲明必須要用開始和結(jié)束標(biāo)簽包起來。

114.什么是表達(dá)式(Expression)?

【列表很長,可以分上、中、下發(fā)布】

JSP表達(dá)式是Web服務(wù)器把腳本語言表達(dá)式的值轉(zhuǎn)化成一個(gè)String對象,插入到返回給客戶端的數(shù)據(jù)流中。表達(dá)式是在這兩個(gè)標(biāo)簽之間定義的。

115.隱含對象是什么意思?有哪些隱含對象?

JSP隱含對象是頁面中的一些Java對象,JSP容器讓這些Java對象可以為開發(fā)者所使用。開發(fā)者不用明確的聲明就可以直接使用他們。JSP隱含對象也叫做預(yù)定義變量。下面列出了JSP頁面中的隱含對象:

  • application

  • page

  • request

  • response

  • session

  • exception

  • out

  • config

  • pageContext

Java開發(fā)崗位面試題歸類匯總

一、Java基礎(chǔ)

1. String類為什么是final的

2. HashMap的源碼,實(shí)現(xiàn)原理,底層結(jié)構(gòu)。

3. 說說你知道的幾個(gè)Java集合類:list、set、queue、map實(shí)現(xiàn)類。

4. 描述一下ArrayList和LinkedList各自實(shí)現(xiàn)和區(qū)別

5. Java中的隊(duì)列都有哪些,有什么區(qū)別。

6. 反射中,Class.forName和classloader的區(qū)別。

7. Java7、Java8的新特性

8. Java數(shù)組和鏈表兩種結(jié)構(gòu)的操作效率,在哪些情況下(從開頭開始,從結(jié)尾開始,從中間開始),哪些操作(插入,查找,刪除)的效率高。

9. Java內(nèi)存泄露的問題調(diào)查定位:jmap,jstack的使用等等。

10. string、stringbuilder、stringbuffer區(qū)別

11. hashtable和hashmap的區(qū)別

13 .異常的結(jié)構(gòu),運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常,各舉個(gè)例子。

14. String 類的常用方法

16. Java 的引用類型有哪幾種

17. 抽象類和接口的區(qū)別

18. java的基礎(chǔ)類型和字節(jié)大小

19. Hashtable,HashMap,ConcurrentHashMap底層實(shí)現(xiàn)原理與線程安全問題。

20. 如果不讓你用Java Jdk提供的工具,你自己實(shí)現(xiàn)一個(gè)Map,你怎么做。說了好久,說了HashMap源代碼,如果我做,就會(huì)借鑒HashMap的原理,說了一通HashMap實(shí)現(xiàn)。

21. Hash沖突怎么辦?哪些解決散列沖突的方法?

22. HashMap沖突很厲害,最差性能,你會(huì)怎么解決?從O(n)提升到log(n)。

23. rehash

24. hashCode() 與 equals() 生成算法、方法怎么重寫。

二、Java IO

1. 講講IO里面的常見類,字節(jié)流、字符流、接口、實(shí)現(xiàn)類、方法阻塞。

2. 講講NIO

3. String 編碼UTF-8 和GBK的區(qū)別?

4. 什么時(shí)候使用字節(jié)流、什么時(shí)候使用字符流?

5. 遞歸讀取文件夾下的文件,代碼怎么實(shí)現(xiàn)?

三、Java Web

1. session和cookie的區(qū)別和聯(lián)系,session的生命周期,多個(gè)服務(wù)部署時(shí)session管理。

2. servlet的一些相關(guān)問題

3. webservice相關(guān)問題

4. jdbc連接,forname方式的步驟,怎么聲明使用一個(gè)事務(wù)。

5. 無框架下配置web.xml的主要配置內(nèi)容

6. jsp和servlet的區(qū)別

四、JVM

1. Java的內(nèi)存模型以及GC算法

2. jvm性能調(diào)優(yōu)都做了什么

3. 介紹JVM中7個(gè)區(qū)域,然后把每個(gè)區(qū)域可能造成內(nèi)存的溢出的情況說明。

4. 介紹GC 和GC Root不正常引用

5. 自己從classload 加載方式,加載機(jī)制說開去,從程序運(yùn)行時(shí)數(shù)據(jù)區(qū),講到內(nèi)存分配,講到String常量池,講到JVM垃圾回收機(jī)制,算法,hotspot。

6. jvm 如何分配直接內(nèi)存, new 對象如何不分配在堆而是棧上,常量池解析。

7. 數(shù)組多大放在JVM老年代

8. 老年代中數(shù)組的訪問方式

9. GC 算法,永久代對象如何 GC , GC 有環(huán)怎么處理。

10. 誰會(huì)被 GC ,什么時(shí)候 GC。

11. 如果想不被 GC 怎么辦

12. 如果想在 GC 中生存 1 次怎么辦

五、開源框架

1. hibernate和ibatis的區(qū)別

2. 講講mybatis的連接池

3. spring框架中需要引用哪些jar包,以及這些jar包的用途

4. springMVC的原理

5. springMVC注解的意思

6. spring中beanFactory和ApplicationContext的聯(lián)系和區(qū)別

7. spring注入的幾種方式

8. spring如何實(shí)現(xiàn)事物管理的

9. springIOC

10. spring AOP的原理

11. hibernate中的1級和2級緩存的使用方式以及區(qū)別原理(Lazy-Load的理解)

12. Hibernate的原理體系架構(gòu),五大核心接口,Hibernate對象的三種狀態(tài)轉(zhuǎn)換,事務(wù)管理。

六、多線程

1. Java創(chuàng)建線程之后,直接調(diào)用start()方法和run()的區(qū)別

2. 常用的線程池模式以及不同線程池的使用場景

3. newFixedThreadPool此種線程池如果線程數(shù)達(dá)到最大值后會(huì)怎么辦,底層原理。

4. 多線程之間通信的同步問題,synchronized鎖的是對象,衍伸出和synchronized相關(guān)很多的具體問題,例如同一個(gè)類不同方法都有synchronized鎖,一個(gè)對象是否可以同時(shí)訪問?;蛘咭粋€(gè)類的static構(gòu)造方法加上synchronized之后的鎖的影響。

5. 了解可重入鎖的含義,以及ReentrantLock 和synchronized的區(qū)別

6. 同步的數(shù)據(jù)結(jié)構(gòu),例如concurrentHashMap的源碼理解以及內(nèi)部實(shí)現(xiàn)原理,為什么他是同步的且效率高。

7. atomicinteger和Volatile等線程安全操作的關(guān)鍵字的理解和使用

8. 線程間通信,wait和notify

9. 定時(shí)線程的使用

10. 場景:在一個(gè)主線程中,要求有大量(很多很多)子線程執(zhí)行完之后,主線程才執(zhí)行完成。多種方式,考慮效率。

11. 進(jìn)程和線程的區(qū)別

12. 什么叫線程安全?

13. 線程的幾種狀態(tài)

14. 并發(fā)、同步的接口或方法

15. HashMap 是否線程安全,為何不安全。ConcurrentHashMap,線程安全,為何安全。底層實(shí)現(xiàn)是怎么樣的。

16. J.U.C下的常見類的使用。ThreadPool的深入考察;BlockingQueue的使用。(take,poll的區(qū)別,put,offer的區(qū)別);原子類的實(shí)現(xiàn)。

17. 簡單介紹下多線程的情況,從建立一個(gè)線程開始。然后怎么控制同步過程,多線程常用的方法和結(jié)構(gòu)

18. volatile的理解

19. 實(shí)現(xiàn)多線程有幾種方式,多線程同步怎么做,說說幾個(gè)線程里常用的方法。

七、網(wǎng)絡(luò)通信

1. http是無狀態(tài)通信,http的請求方式有哪些,可以自己定義新的請求方式么。

2. socket通信,以及長連接,分包,連接異常斷開的處理。

3. socket通信模型的使用,AIO和NIO。

4. socket框架netty的使用,以及NIO的實(shí)現(xiàn)原理,為什么是異步非阻塞。

5. 同步和異步,阻塞和非阻塞。

6. OSI七層模型,包括TCP,IP的一些基本知識

7. http中,get post的區(qū)別

8. 說說http,tcp,udp之間關(guān)系和區(qū)別。

9. 說說瀏覽器訪問www.taobao.com,經(jīng)歷了怎樣的過程。

10. HTTP協(xié)議、 HTTPS協(xié)議,SSL協(xié)議及完整交互過程;

11. tcp的擁塞,快回傳,ip的報(bào)文丟棄

12. https處理的一個(gè)過程,對稱加密和非對稱加密

13. head各個(gè)特點(diǎn)和區(qū)別

14. 說說瀏覽器訪問www.taobao.com,經(jīng)歷了怎樣的過程。

八、數(shù)據(jù)庫MySql

1. MySql的存儲(chǔ)引擎的不同

2. 單個(gè)索引、聯(lián)合索引、主鍵索引

3. Mysql怎么分表,以及分表后如果想按條件分頁查詢怎么辦

4. 分表之后想讓一個(gè)id多個(gè)表是自增的,效率實(shí)現(xiàn)

5. MySql的主從實(shí)時(shí)備份同步的配置,以及原理(從庫讀主庫的binlog),讀寫分離。

6. 寫SQL語句和SQL優(yōu)化

7. 索引的數(shù)據(jù)結(jié)構(gòu),B+樹

8. 事務(wù)的四個(gè)特性,以及各自的特點(diǎn)(原子、隔離)等等,項(xiàng)目怎么解決這些問題。

9. 數(shù)據(jù)庫的鎖:行鎖,表鎖;樂觀鎖,悲觀鎖

10. 數(shù)據(jù)庫事務(wù)的幾種粒度

11. 關(guān)系型和非關(guān)系型數(shù)據(jù)庫區(qū)別

九、設(shè)計(jì)模式

1. 單例模式:飽漢、餓漢。以及餓漢中的延遲加載,雙重檢查。

2. 工廠模式、裝飾者模式、觀察者模式。

3. 工廠方法模式的優(yōu)點(diǎn)(低耦合、高內(nèi)聚,開放封閉原則)

十、算法

1. 使用隨機(jī)算法產(chǎn)生一個(gè)數(shù),要求把1-1000W之間這些數(shù)全部生成。

2. 兩個(gè)有序數(shù)組的合并排序

3. 一個(gè)數(shù)組的倒序

4. 計(jì)算一個(gè)正整數(shù)的正平方根

5. 說白了就是常見的那些查找、排序算法以及各自的時(shí)間復(fù)雜度。

6. 二叉樹的遍歷算法

7. DFS,BFS算法

9. 比較重要的數(shù)據(jù)結(jié)構(gòu),如鏈表,隊(duì)列,棧的基本理解及大致實(shí)現(xiàn)。

10. 排序算法與時(shí)空復(fù)雜度(快排為什么不穩(wěn)定,為什么你的項(xiàng)目還在用)

11. 逆波蘭計(jì)算器

12. Hoffman 編碼

13. 查找樹與紅黑樹

十一、并發(fā)與性能調(diào)優(yōu)

1. 有個(gè)每秒鐘5k個(gè)請求,查詢手機(jī)號所屬地的筆試題,如何設(shè)計(jì)算法?請求再多,比如5w,如何設(shè)計(jì)整個(gè)系統(tǒng)?

2. 高并發(fā)情況下,我們系統(tǒng)是如何支撐大量的請求的

3. 集群如何同步會(huì)話狀態(tài)

4. 負(fù)載均衡的原理

5 .如果有一個(gè)特別大的訪問量,到數(shù)據(jù)庫上,怎么做優(yōu)化(DB設(shè)計(jì),DBIO,SQL優(yōu)化,Java優(yōu)化)

6. 如果出現(xiàn)大面積并發(fā),在不增加服務(wù)器的基礎(chǔ)上,如何解決服務(wù)器響應(yīng)不及時(shí)問題“。

7. 假如你的項(xiàng)目出現(xiàn)性能瓶頸了,你覺得可能會(huì)是哪些方面,怎么解決問題。

8. 如何查找 造成 性能瓶頸出現(xiàn)的位置,是哪個(gè)位置照成性能瓶頸。

9. 你的項(xiàng)目中使用過緩存機(jī)制嗎?有沒用用戶非本地緩存

十二、其他

Linux 基本操作命令

文件和目錄管理

創(chuàng)建和刪除

創(chuàng)建:mkdir

刪除:rm

刪除非空目錄:rm -rf file 目錄

刪除日志 rm log (等價(jià): $find ./-name “l(fā)og” -exec rm {} ; )

移動(dòng):mv

復(fù)制:cp (復(fù)制目錄:cp -r)

創(chuàng)建文件 touch

查看

顯示當(dāng)前目錄下的文件 ls

按時(shí)間排序,以列表的方式顯示目錄項(xiàng) ls -lrt

ls -l

查看文件內(nèi)容 cat 可以加 more 、less 控制輸出的內(nèi)容的大小

cat a.text

cat a.text | more

cat a.text| less

權(quán)限

改變文件的擁有者 chown

改變文件讀、寫、執(zhí)行等屬性 chmod

遞歸子目錄修改:chown -R tuxapp source/

增加腳本可執(zhí)行權(quán)限:chmod a+x myscript

管道和重定向

把前一個(gè)命令的執(zhí)行結(jié)果當(dāng)做后一個(gè)命令的輸入 |

串聯(lián):使用分號 ;

前面成功,則執(zhí)行后面一條,否則,不執(zhí)行: &&

前面失敗,則后一條執(zhí)行: ||

ls /proc && echo suss! || echo failed.

文本處理


文件查找 find

find 參數(shù)很多,本文只介紹幾個(gè)常用的

-name 按名字查找

-type 按類型

-atime 訪問時(shí)間

find . -atime 7 -type f -print

find . -type d -print //只列出所有目錄

find / -name "hello.c" 查找hello.c文件

文本查找 grep

grep match_patten file // 默認(rèn)訪問匹配行

常用參數(shù)

-o 只輸出匹配的文本行 VS -v 只輸出沒有匹配的文本行

-c 統(tǒng)計(jì)文件中包含文本的次數(shù)

grep -c “text” filename

-n 打印匹配的行號

-i 搜索時(shí)忽略大小寫

-l 只打印文件名

grep "class" . -R -n # 在多級目錄中對文本遞歸搜索(程序員搜代碼的最愛)

cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b #將日志中的所有帶where條件的sql查找查找出來

文本替換 sed

sed [options] 'command' file(s)

首處替換

sed 's/text/replace_text/' file //替換每一行的第一處匹配的text

全局替換

sed 's/text/replace_text/g' file

默認(rèn)替換后,輸出替換后的內(nèi)容,如果需要直接替換原文件,使用 -i:

sed -i 's/text/repalce_text/g' file

移除空白行

sed '/^$/d' file

sed 's/book/books/' file #替換文本中的字符串:

sed 's/book/books/g' file

sed '/^$/d' file #刪除空白行

數(shù)據(jù)流處理 awk

詳細(xì)教程可以查看 http://awk.readthedocs.io/en/latest/chapte...

awk ' BEGIN{ statements } statements2 END{ statements } '

工作流程

1. 執(zhí)行 begin 中語句塊;

2. 從文件或 stdin 中讀入一行,然后執(zhí)行 statements2,重復(fù)這個(gè)過程,直到文件全部被讀取完畢;

3. 執(zhí)行 end 語句塊;

特殊變量

NR: 表示記錄數(shù)量,在執(zhí)行過程中對應(yīng)當(dāng)前行號;

NF: 表示字段數(shù)量,在執(zhí)行過程總對應(yīng)當(dāng)前行的字段數(shù);

$0: 這個(gè)變量包含執(zhí)行過程中當(dāng)前行的文本內(nèi)容;

$1: 第一個(gè)字段的文本內(nèi)容;

$2: 第二個(gè)字段的文本內(nèi)容;

awk '{print $2, $3}' file

# 日志格式:'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"'

#統(tǒng)計(jì)日志中訪問最多的10個(gè)IP

awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log

排序 sort

-n 按數(shù)字進(jìn)行排序 VS -d 按字典序進(jìn)行排序

-r 逆序排序

-k N 指定按第 N 列排序

sort -nrk 1 data.txt

sort -bd data // 忽略像空格之類的前導(dǎo)空白字符

去重 uniq

消除重復(fù)行

sort unsort.txt | uniq

統(tǒng)計(jì) wc

wc -l file // 統(tǒng)計(jì)行數(shù)

wc -w file // 統(tǒng)計(jì)單詞數(shù)

wc -c file // 統(tǒng)計(jì)字符數(shù)

Java 知識點(diǎn)

1Java 基礎(chǔ)

1、HashMap的源碼,實(shí)現(xiàn)原理,JDK8中對HashMap做了怎樣的優(yōu)化。

2、HaspMap擴(kuò)容是怎樣擴(kuò)容的,為什么都是2的N次冪的大小。

3、HashMap,HashTable,ConcurrentHashMap的區(qū)別。

4、極高并發(fā)下HashTable和ConcurrentHashMap哪個(gè)性能更好,為什么,如何實(shí)現(xiàn)的。

5、HashMap在高并發(fā)下如果沒有處理線程安全會(huì)有怎樣的安全隱患,具體表現(xiàn)是什么。

6、java中四種修飾符的限制范圍。

7、Object類中的方法。

8、接口和抽象類的區(qū)別,注意JDK8的接口可以有實(shí)現(xiàn)。

9、動(dòng)態(tài)代理的兩種方式,以及區(qū)別。

10、Java序列化的方式。

11、傳值和傳引用的區(qū)別,Java是怎么樣的,有沒有傳值引用。

12、一個(gè)ArrayList在循環(huán)過程中刪除,會(huì)不會(huì)出問題,為什么。

2JVM

1、JVM的內(nèi)存結(jié)構(gòu)。

2、JVM方法棧的工作過程,方法棧和本地方法棧有什么區(qū)別。

3、JVM的棧中引用如何和堆中的對象產(chǎn)生關(guān)聯(lián)。

4、可以了解一下逃逸分析技術(shù)。

5、GC的常見算法,CMS以及G1的垃圾回收過程,CMS的各個(gè)階段哪兩個(gè)是Stop the world的,CMS會(huì)不會(huì)產(chǎn)生碎片,G1的優(yōu)勢。

6、標(biāo)記清除和標(biāo)記整理算法的理解以及優(yōu)缺點(diǎn)。

7、eden survivor區(qū)的比例,為什么是這個(gè)比例,eden survivor的工作過程。

8、JVM如何判斷一個(gè)對象是否該被GC,可以視為root的都有哪幾種類型。

9、強(qiáng)軟弱虛引用的區(qū)別以及GC對他們執(zhí)行怎樣的操作。

10、Java是否可以GC直接內(nèi)存。

11、Java類加載的過程。

12、雙親委派模型的過程以及優(yōu)勢。

13、常用的JVM調(diào)優(yōu)參數(shù)。

14、dump文件的分析。

15、Java有沒有主動(dòng)觸發(fā)GC的方式(沒有)。

3數(shù)據(jù)結(jié)構(gòu)與算法

1、B+樹

2、快速排序,堆排序,插入排序(八大排序算法)

3、一致性Hash算法,一致性Hash算法的應(yīng)用

4多線程

1、Java實(shí)現(xiàn)多線程有哪幾種方式。

2、Callable和Future的了解。

3、線程池的參數(shù)有哪些,在線程池創(chuàng)建一個(gè)線程的過程。

4、volitile關(guān)鍵字的作用,原理。

5、synchronized關(guān)鍵字的用法,優(yōu)缺點(diǎn)。

6、Lock接口有哪些實(shí)現(xiàn)類,使用場景是什么。

7、可重入鎖的用處及實(shí)現(xiàn)原理,寫時(shí)復(fù)制的過程,讀寫鎖,分段鎖(ConcurrentHashMap中的segment)。

8、悲觀鎖,樂觀鎖,優(yōu)缺點(diǎn),CAS有什么缺陷,該如何解決。

9、ABC三個(gè)線程如何保證順序執(zhí)行。

10、線程的狀態(tài)都有哪些。

11、sleep和wait的區(qū)別。

12、notify和notifyall的區(qū)別。

13、ThreadLocal的了解,實(shí)現(xiàn)原理。

5分布式

1、分布式事務(wù)的控制。分布式鎖如何設(shè)計(jì)。

2、分布式session如何設(shè)計(jì)。

3、dubbo的組件有哪些,各有什么作用。

4、zookeeper的負(fù)載均衡算法有哪些。

5、dubbo是如何利用接口就可以通信的。

6框架相關(guān)

1、SpringMVC的Controller是如何將參數(shù)和前端傳來的數(shù)據(jù)一一對應(yīng)的。

2、Mybatis如何找到指定的Mapper的,如何完成查詢的。

3、Quartz是如何完成定時(shí)任務(wù)的。自定義注解的實(shí)現(xiàn)。

4、Spring使用了哪些設(shè)計(jì)模式。Spring的IOC有什么優(yōu)勢。

5、Spring如何維護(hù)它擁有的bean。

6、一些較新的東西JDK8的新特性,流的概念及優(yōu)勢,為什么有這種優(yōu)勢。

7、區(qū)塊鏈了解如何設(shè)計(jì)雙11交易總額面板,要做到高并發(fā)高可用

Java面試題之:Java中的幾種線程池

Java 通過 Executors 提供四種線程池

  • CachedThreadPool():可緩存線程池。

  • FixedThreadPool():定長線程池。

  • ScheduledThreadPool():定時(shí)線程池。

  • SingleThreadExecutor():單線程化的線程池。

  • ThreadPoolExecutor 的執(zhí)行流程

  • 線程數(shù)量未達(dá)到 corePoolSize,則新建一個(gè)線程 (核心線程) 執(zhí)行任務(wù)。

  • 線程數(shù)量達(dá)到了 corePools,則將任務(wù)移入隊(duì)列等待。

  • 隊(duì)列已滿,新建線程 (非核心線程) 執(zhí)行任務(wù)。

  • 隊(duì)列已滿,總線程數(shù)又達(dá)到了 maximumPoolSize,就會(huì)由 (RejectedExecutionHandler) 拋出異常 (拒絕策略)

  • 新建線程 -> 達(dá)到核心數(shù) -> 加入隊(duì)列 -> 新建線程(非核心) -> 達(dá)到最大數(shù) -> 觸發(fā)拒絕策略

    ThreadPoolExecutor 的幾個(gè)參數(shù)

  • corePoolSize:核心池的大小,這個(gè)參數(shù)跟后面講述的線程池的實(shí)現(xiàn)原理有非常大的關(guān)系。在創(chuàng)建了線程池后,默認(rèn)情況下,線程池中并沒有任何線程,而是等待有任務(wù)到來才創(chuàng)建線程去執(zhí)行任務(wù),除非調(diào)用了 prestartAllCoreThreads () 或者 prestartCoreThread () 方法,從這 2 個(gè)方法的名字就可以看出,是預(yù)創(chuàng)建線程的意思,即在沒有任務(wù)到來之前就創(chuàng)建 corePoolSize 個(gè)線程或者一個(gè)線程。默認(rèn)情況下,在創(chuàng)建了線程池后,線程池中的線程數(shù)為 0,當(dāng)有任務(wù)來之后,就會(huì)創(chuàng)建一個(gè)線程去執(zhí)行任務(wù),當(dāng)線程池中的線程數(shù)目達(dá)到 corePoolSize 后,就會(huì)把到達(dá)的任務(wù)放到緩存隊(duì)列當(dāng)中。

  • maximumPoolSize:線程池最大線程數(shù),這個(gè)參數(shù)也是一個(gè)非常重要的參數(shù),它表示在線程池中最多能創(chuàng)建多少個(gè)線程;如果當(dāng)前阻塞隊(duì)列滿了,且繼續(xù)提交任務(wù),則創(chuàng)建新的線程執(zhí)行任務(wù),前提是當(dāng)前線程數(shù)小于 maximumPoolSize;當(dāng)阻塞隊(duì)列是無界隊(duì)列, 則 maximumPoolSize 不起作用,因?yàn)闊o法提交至核心線程池的線程會(huì)一直持續(xù)地放入 workQueue (工作隊(duì)列) 中。

  • keepAliveTime:表示線程沒有任務(wù)執(zhí)行時(shí)最多保持多久時(shí)間會(huì)終止。默認(rèn)情況下,只有當(dāng)線程池中的線程數(shù)大于 corePoolSize 時(shí),keepAliveTime 才會(huì)起作用,直到線程池中的線程數(shù)不大于 corePoolSize,即當(dāng)線程池中線程數(shù)大于 corePoolSize 時(shí), 如果一個(gè)線程空閑的時(shí)間達(dá)到 keepAliveTime,則會(huì)終止,直到線程池中的線程數(shù)不超過 corePoolSize。但是如果調(diào)用了 allowCoreThreadTimeOut (boolean) 方法,在線程池中的線程數(shù)不大于 corePoolSize 時(shí),keepAliveTime 參數(shù)也會(huì)起作用, 直到線程池中的線程數(shù)為 0。

  • allowCoreThreadTimeout:默認(rèn)情況下超過 keepAliveTime 的時(shí)候,核心線程不會(huì)退出,可通過將該參數(shù)設(shè)置為 true,讓核心線程也退出。

  • unit:可以指定 keepAliveTime 的時(shí)間單位。

  • workQueue

  • ArrayBlockingQueue 有界隊(duì)列,需要指定隊(duì)列大小。

  • LinkedBlockingQueue 若指定大小則和 ArrayBlockingQueue 類似,若不指定大小則默認(rèn)能存儲(chǔ) Integer.MAX_VALUE 個(gè)任務(wù),相當(dāng)于無界隊(duì)列,此時(shí) maximumPoolSize 值其實(shí)是無意義的。

  • SynchronousQueue 同步阻塞隊(duì)列,當(dāng)有任務(wù)添加進(jìn)來后,必須有線程從隊(duì)列中取出,當(dāng)前線程才會(huì)被釋放,newCachedThreadPool 就使用這種隊(duì)列。

  • RejectedExecutionHandler:線程數(shù)和隊(duì)列都滿的情況下,線程池會(huì)執(zhí)行的拒絕策略,有四個(gè) (也可以使用自定義的策略)。

  • 線程池的四種拒絕策略

  • AbortPolicy:不執(zhí)行新任務(wù),直接拋出異常,提示線程池已滿,線程池默認(rèn)策略。

  • DiscardPolicy:不執(zhí)行新任務(wù),也不拋出異常,基本上為靜默模式。

  • DisCardOldSetPolicy:將消息隊(duì)列中的第一個(gè)任務(wù)替換為當(dāng)前新進(jìn)來的任務(wù)執(zhí)行。

  • CallerRunPolicy:拒絕新任務(wù)進(jìn)入,如果該線程池還沒被關(guān)閉,那么這個(gè)新的任務(wù)在執(zhí)行線程中被調(diào)用。

  • Executors 和 ThreadPoolExecutor 創(chuàng)建線程的區(qū)別

    • Executors

  • newFixedThreadPool 和 newSingleThreadExecutor: 主要問題是堆積的請求處理隊(duì)列可能會(huì)耗費(fèi)非常大的內(nèi)存,甚至 OOM。

  • newCachedThreadPool 和 newScheduledThreadPool: 主要問題是線程數(shù)最大數(shù)是 Integer.MAX_VALUE (2 的 31 次方 - 1,int 類型最大值),可能會(huì)創(chuàng)建數(shù)量非常多的線程,甚至 OOM。

    • ThreadPoolExecutor

  • 創(chuàng)建線程池方式只有一種,就是走它的構(gòu)造函數(shù),參數(shù)自己指定。

  • 為什么使用線程池

  • 減少了創(chuàng)建和銷毀線程的次數(shù),每個(gè)工作線程都可以被重復(fù)利用,可執(zhí)行多個(gè)任務(wù)。

  • 運(yùn)用線程池能有效的控制線程最大并發(fā)數(shù),可以根據(jù)系統(tǒng)的承受能力,調(diào)整線程池中工作線線程的數(shù)目,防止因?yàn)橄倪^多的內(nèi)存,而把服務(wù)器累趴下 (每個(gè)線程需要大約 1MB 內(nèi)存,線程開的越多,消耗的內(nèi)存也就越大,最后死機(jī))。

  • 對線程進(jìn)行一些簡單的管理,比如:延時(shí)執(zhí)行、定時(shí)循環(huán)執(zhí)行的策略等,運(yùn)用線程池都能進(jìn)行很好的實(shí)現(xiàn)。

  • 如何向線程池中提交任務(wù)

    可以通過 execute () 或 submit () 兩個(gè)方法向線程池提交任務(wù)。

  • execute () 方法沒有返回值,所以無法判斷任務(wù)知否被線程池執(zhí)行成功。

  • submit () 方法返回一個(gè) future, 那么我們可以通過這個(gè) future 來判斷任務(wù)是否執(zhí)行成功,通過 future 的 get 方法來獲取返回值。

  • 如何關(guān)閉線程池

    可以通過 shutdown () 或 shutdownNow () 方法來關(guān)閉線程池。

  • shutdown 的原理是只是將線程池的狀態(tài)設(shè)置成 SHUTDOWN 狀態(tài),然后中斷所有沒有正在執(zhí)行任務(wù)的線程。

  • shutdownNow 的原理是遍歷線程池中的工作線程,然后逐個(gè)調(diào)用線程的 interrupt 方法來中斷線程,所以無法響應(yīng)中斷的任務(wù)可能永遠(yuǎn)無法終止。shutdownNow 會(huì)首先將線程池的狀態(tài)設(shè)置成 STOP,然后嘗試停止所有的正在執(zhí)行或暫停任務(wù)的線程,并返回等待執(zhí)行任務(wù)的列表。

  • 萬萬沒想到,JVM內(nèi)存結(jié)構(gòu)的面試題可以問的這么難?

    大家嘗試著回答一下以下問題:

    1、JVM管理的內(nèi)存結(jié)構(gòu)是怎樣的?
    2、不同的虛擬機(jī)在實(shí)現(xiàn)運(yùn)行時(shí)內(nèi)存的時(shí)候有什么區(qū)別?
    3、運(yùn)行時(shí)數(shù)據(jù)區(qū)中哪些區(qū)域是線程共享的?哪些是獨(dú)享的?
    4、除了JVM運(yùn)行時(shí)內(nèi)存以外,還有什么區(qū)域可以用嗎?
    5、堆和棧的區(qū)別是什么?
    6、Java中的數(shù)組是存儲(chǔ)在堆上還是棧上的?
    7、Java中的對象創(chuàng)建有多少種方式?
    8、Java中對象創(chuàng)建的過程是怎么樣的?
    9、Java中的對象一定在堆上分配內(nèi)存嗎?
    10、如何獲取堆和棧的dump文件?

    以上10道題,如果您可以全部準(zhǔn)確無誤的回答的話,那說明你真的很了解JVM的內(nèi)存結(jié)構(gòu)以及內(nèi)存分配相關(guān)的知識了,如果有哪些知識點(diǎn)是不了解的,那么本文正好可以幫你答疑解惑。

    JVM管理的內(nèi)存結(jié)構(gòu)是怎樣的?

    Java虛擬機(jī)在執(zhí)行Java程序的過程中會(huì)把他所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域?!禞ava虛擬機(jī)規(guī)范》中規(guī)定了JVM所管理的內(nèi)存需要包括一下幾個(gè)運(yùn)行時(shí)區(qū)域:

    主要包含了PC寄存器(程序計(jì)數(shù)器)、Java虛擬機(jī)棧、本地方法棧、Java堆、方法區(qū)以及運(yùn)行時(shí)常量池。

    各個(gè)區(qū)域有各自不同的作用,關(guān)于各個(gè)區(qū)域的作用就不在本文中相信介紹了。

    但是,需要注意的是,上面的區(qū)域劃分只是邏輯區(qū)域,對于有些區(qū)域的限制是比較松的,所以不同的虛擬機(jī)廠商在實(shí)現(xiàn)上,甚至是同一款虛擬機(jī)的不同版本也是不盡相同的。

    不同的虛擬機(jī)在實(shí)現(xiàn)運(yùn)行時(shí)內(nèi)存的時(shí)候有什么區(qū)別?

    前面提到過《Java虛擬機(jī)規(guī)范》定義的JVM運(yùn)行時(shí)所需的內(nèi)存區(qū)域,不同的虛擬機(jī)實(shí)現(xiàn)上有所不同,而在這么多區(qū)域中,規(guī)范對于方法區(qū)的管理是最寬松的,規(guī)范中關(guān)于這部分的描述如下:

    方法區(qū)在虛擬機(jī)啟動(dòng)的時(shí)候創(chuàng)建,雖然方法區(qū)是堆的邏輯組成部分,但是簡單的虛擬機(jī)實(shí)現(xiàn)可以選擇在這個(gè)區(qū)域不實(shí)現(xiàn)垃圾收集與壓縮。本版本的規(guī)范也不限定實(shí)現(xiàn)方法區(qū)的內(nèi)存位置和代碼編譯的管理策略。方法區(qū)的容量可以是固定的,也可以隨著程序執(zhí)行的需求動(dòng)態(tài)擴(kuò)展,并在不需要過多的空間時(shí)自行收縮。方法區(qū)在實(shí)際內(nèi)存空間站可以是不連續(xù)的。

    這一規(guī)定,可以說是給了虛擬機(jī)廠商很大的自由。

    虛擬機(jī)規(guī)范對方法區(qū)實(shí)現(xiàn)的位置并沒有明確要求,在最著名的HotSopt虛擬機(jī)實(shí)現(xiàn)中(在Java 8 之前),方法區(qū)僅是邏輯上的獨(dú)立區(qū)域,在物理上并沒有獨(dú)立于堆而存在,而是位于永久代中。所以,這時(shí)候方法區(qū)也是可以被垃圾回收的。

    實(shí)踐證明,JVM中存在著大量的聲明短暫的對象,還有一些生命周期比較長的對象。為了對他們采用不同的收集策略,采用了分代收集算法,所以HotSpot虛擬機(jī)把的根據(jù)對象的年齡不同,把堆分位新生代、老年代和永久代。

    在Java 8中 ,HotSpot虛擬機(jī)移除了永久代,使用本地內(nèi)存來存儲(chǔ)類元數(shù)據(jù)信息并稱之為:元空間(Metaspace)

    運(yùn)行時(shí)數(shù)據(jù)區(qū)中哪些區(qū)域是線程共享的?哪些是獨(dú)享的?

    在JVM運(yùn)行時(shí)內(nèi)存區(qū)域中,PC寄存器、虛擬機(jī)棧和本地方法棧是線程獨(dú)享的。

    而Java堆、方法區(qū)是線程共享的。但是值得注意的是,Java堆其實(shí)還未每一個(gè)線程單獨(dú)分配了一塊TLAB空間,這部分空間在分配時(shí)是線程獨(dú)享的,在使用時(shí)是線程共享的。

    除了JVM運(yùn)行時(shí)內(nèi)存以外,還有什么區(qū)域可以用嗎?

    除了我們前面介紹的虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)以外,還有一部分內(nèi)存也被頻繁使用,他不是運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是Java虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域,他就是——直接內(nèi)存。

    直接內(nèi)存的分配不受Java堆大小的限制,但是他還是會(huì)收到服務(wù)器總內(nèi)存的影響。

    在JDK 1.4中引入的NIO中,引入了一種基于Channel和Buffer的I/O方式,他可以使用Native函數(shù)直接分配堆外內(nèi)存,然后通過一個(gè)存儲(chǔ)在Java堆中的DirectByteBuffer對象作為這塊內(nèi)存的應(yīng)用進(jìn)行操作。

    堆和棧的區(qū)別是什么?

    堆和棧(虛擬機(jī)棧)是完全不同的兩塊內(nèi)存區(qū)域,一個(gè)是線程獨(dú)享的,一個(gè)是線程共享的,二者之間最大的區(qū)別就是存儲(chǔ)的內(nèi)容不同:

    堆中主要存放對象實(shí)例。
    棧(局部變量表)中主要存放各種基本數(shù)據(jù)類型、對象的引用。

    Java中的數(shù)組是存儲(chǔ)在堆上還是棧上的?

    在Java中,數(shù)組同樣是一個(gè)對象,所以對象在內(nèi)存中如何存放同樣適用于數(shù)組;

    所以,數(shù)組的實(shí)例是保存在堆中,而數(shù)組的引用是保存在棧上的。

    Java中的對象創(chuàng)建有多少種方式?

    Java中有很多方式可以創(chuàng)建一個(gè)對象,最簡單的方式就是使用new關(guān)鍵字。

    User user = new User();
    復(fù)制代碼

    除此以外,還可以使用反射機(jī)制創(chuàng)建對象:

    User user = User.class.newInstance();
    復(fù)制代碼

    或者使用Constructor類的newInstance:

    Constructor constructor = User.class.getConstructor();
    User user = constructor.newInstance();復(fù)制代碼

    除此之外還可以使用clone方法和反序列化的方式,這兩種方式不常用并且代碼比較復(fù)雜,就不在這里展示了,感興趣的可以自行了解下。

    Java中對象創(chuàng)建的過程是怎么樣的?

    對于一個(gè)普通的Java對象的創(chuàng)建,大致過程如下:

    1、虛擬機(jī)遇到new指令,到常量池定位到這個(gè)類的符號引用。
    2、檢查符號引用代表的類是否被加載、解析、初始化過。
    3、虛擬機(jī)為對象分配內(nèi)存。
    4、虛擬機(jī)將分配到的內(nèi)存空間都初始化為零值。
    5、虛擬機(jī)對對象進(jìn)行必要的設(shè)置。
    6、執(zhí)行方法,成員變量進(jìn)行初始化。

    Java中的對象一定在堆上分配內(nèi)存嗎?

    前面我們說過,Java堆中主要保存了對象實(shí)例,但是,隨著JIT編譯期的發(fā)展與逃逸分析技術(shù)逐漸成熟,棧上分配、標(biāo)量替換優(yōu)化技術(shù)將會(huì)導(dǎo)致一些微妙的變化,所有的對象都分配到堆上也漸漸變得不那么“絕對”了。

    其實(shí),在編譯期間,JIT會(huì)對代碼做很多優(yōu)化。其中有一部分優(yōu)化的目的就是減少內(nèi)存堆分配壓力,其中一種重要的技術(shù)叫做逃逸分析。

    如果JIT經(jīng)過逃逸分析,發(fā)現(xiàn)有些對象沒有逃逸出方法,那么有可能堆內(nèi)存分配會(huì)被優(yōu)化成棧內(nèi)存分配。

    10、如何獲取堆和棧的dump文件?

    Java Dump,Java虛擬機(jī)的運(yùn)行時(shí)快照。將Java虛擬機(jī)運(yùn)行時(shí)的狀態(tài)和信息保存到文件。

    可以使用在服務(wù)器上使用jmap命令來獲取堆dump,使用jstack命令來獲取線程的調(diào)用棧dump。

    來自:【https://juejin.im/post/5d4789afe51d453b386a62ac】

    10 道基礎(chǔ)面試題

    1.什么是B/S架構(gòu)?C/S架構(gòu)?

    • B/S(Browser/Server),瀏覽器/服務(wù)器程序;

    • C/S(Client/Server),客戶端/服務(wù)端,桌面應(yīng)用程序。

    2.網(wǎng)絡(luò)協(xié)議有哪些?

    • HTTP:超文本傳輸協(xié)議;

    • SMPT:簡單郵件協(xié)議;

    • TELNET:遠(yuǎn)程終端協(xié)議;

    • POP3:郵件讀取協(xié)議 ;

    • FTP:文件傳輸協(xié)議;

    3. Java的四種引用及應(yīng)用場景?

    • 強(qiáng)引用: 通常我們使用new操作符創(chuàng)建一個(gè)對象時(shí)所返回的引用即為強(qiáng)引用;

    • 軟引用: 若一個(gè)對象只能通過軟引用到達(dá),那么這個(gè)對象在內(nèi)存不足時(shí)會(huì)被回收,可用于圖片緩存中,內(nèi)存不足時(shí)系統(tǒng)會(huì)自動(dòng)回收不再使用的Bitmap;

    • 弱引用: 若一個(gè)對象只能通過弱引用到達(dá),那么它就會(huì)被回收(即使內(nèi)存充足),同樣可用于圖片緩存中,這時(shí)候只要Bitmap不再使用就會(huì)被回收;

    • 虛引用: 虛引用是Java中最“弱”的引用,通過它甚至無法獲取被引用的對象,它存在的唯一作用就是當(dāng)它指向的對象回收時(shí),本身會(huì)被加入到引用隊(duì)列中,這樣我們可以知道它指向的對象何時(shí)被銷毀。

    4.Java是否需要開發(fā)人員回收內(nèi)存垃圾嗎?

    多情況下是不需要。Java提供了一個(gè)系統(tǒng)級的線程來跟蹤內(nèi)存分配,不再使用的內(nèi)存區(qū)將會(huì)自動(dòng)回收。

    5. ArrayList, Vector,LinkedList,的區(qū)別是什么?

    • ArrayList: 內(nèi)部采用數(shù)組存儲(chǔ)元素,支持高效隨機(jī)訪問,支持動(dòng)態(tài)調(diào)整大小;

    • Vector: 可以看作線程安全版的ArrayList;

    • LinkedList: 內(nèi)部采用鏈表來存儲(chǔ)元素,支持快速插入/刪除元素,但不支持高效地隨機(jī)訪問。

    6.Java中的包裝類都是那些?

    • byte:Byte;

    • short:Short;

    • int:Integer;

    • double:Double;

    • char:Character;

    • boolean:Boolean;

    • long:Long;

    • float:Float。

    7. String, StringBuilder, StringBuffer的區(qū)別是什么?

    • String: 不可變的字符序列,若要向其中添加新字符需要?jiǎng)?chuàng)建一個(gè)新的String對象;

    • StringBuilder: 可變字符序列,支持向其中添加新字符;

    • StringBuffer: 可以看作線程安全版的StringBuilder。

    8.一個(gè)java類中包含那些內(nèi)容?

    屬性、方法、內(nèi)部類、構(gòu)造方法、代碼塊。

    9. 靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類的區(qū)別

    靜態(tài)內(nèi)部類不會(huì)持有外圍類的引用,而非靜態(tài)內(nèi)部類會(huì)隱式持有外圍類的一個(gè)引用。

    10. Java中多態(tài)的實(shí)現(xiàn)原理

    所謂多態(tài),指的就是父類引用指向子類對象,調(diào)用方法時(shí)會(huì)調(diào)用子類的實(shí)現(xiàn)而不是父類的實(shí)現(xiàn)。多態(tài)的實(shí)現(xiàn)的關(guān)鍵在于“動(dòng)態(tài)綁定”。

    Java多線程基礎(chǔ)面試題

    1、進(jìn)程是什么?

    進(jìn)程是程序在處理機(jī)中的一次運(yùn)行。一個(gè)進(jìn)程既包括其所要執(zhí)行的指令,也包括了執(zhí)行指令所需的系統(tǒng)資源,不同進(jìn)程所占用的系統(tǒng)資源相對獨(dú)立。所以進(jìn)程是重量級的任務(wù),它們之間的通信和轉(zhuǎn)換都需要操作系統(tǒng)付出較大的開銷。

    2、線程是什么?

    線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。線程自己基本上不擁有系統(tǒng)資源,但它可以與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。所以線程是輕量級的任務(wù),它們之間的通信和轉(zhuǎn)換只需要較小的系統(tǒng)開銷。

    還有哪些常問的面試題呢?

    1、并行和并發(fā)有什么區(qū)別?

    答:兩者區(qū)別:一個(gè)是交替執(zhí)行,一個(gè)是同時(shí)執(zhí)行。

    2、創(chuàng)建線程有哪幾種方式?

    答:繼承Thread類、實(shí)現(xiàn)Runnable接口和實(shí)現(xiàn)Callable接口。

    3、線程有哪些狀態(tài)?

    答:線程可以正在運(yùn)行(Running),只要獲得了CPU時(shí)間它就可以運(yùn)行;

    運(yùn)行的線程可以被掛起(Suspend),并臨時(shí)中斷它的執(zhí)行;

    一個(gè)掛起的線程可以被恢復(fù)(Resume),允許它從停止的地方繼續(xù)運(yùn)行;

    一個(gè)線程可以在等待資源時(shí)被阻塞(Block);

    在任何時(shí)候,線程可以被終止(Terminate),這將立即中斷運(yùn)行。一旦終止,線程不能被恢復(fù)。

    有的說六種的是算上初始的狀態(tài),即:初始(New):新創(chuàng)建了一個(gè)線程對象,但還沒有調(diào)用start()方法。

    4、sleep() 和 wait() 有什么區(qū)別?

    答:(1)同步鎖的對待不同:

    sleep()后,程序并不會(huì)不釋放同步鎖。

    wait()后,程序會(huì)釋放同步鎖。

    (2)用法的不同:

    sleep()可以用時(shí)間指定來使他自動(dòng)醒過來。如果時(shí)間不到你只能調(diào)用interreput()來強(qiáng)行打斷。

    wait()可以用notify()直接喚起。

    (3)屬于不同的類:

    sleep()的類是Thread。

    wait()的類是Object。

    5、線程的 run()和 start()有什么區(qū)別?

    答:調(diào)用start方法方可啟動(dòng)線程,而run方法只是thread的一個(gè)普通方法調(diào)用,還是在主線程里執(zhí)行。

    6、什么是死鎖?怎么防止死鎖?

    答:當(dāng)某一進(jìn)程提出資源的使用要求后,使得系統(tǒng)中一些進(jìn)程處于無休止的阻塞狀態(tài),在無外力的作用下,這些進(jìn)程永遠(yuǎn)也不能繼續(xù)前進(jìn)。我們稱這種現(xiàn)象為死鎖。

    (1) 盡量使用 tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),設(shè)置超時(shí)時(shí)間,超時(shí)可以退出防止死鎖。

    (2)盡量使用 Java. util. concurrent 并發(fā)類代替自己手寫鎖。

    (3)盡量降低鎖的使用粒度,盡量不要幾個(gè)功能用同一把鎖。

    (4)盡量減少同步的代碼塊。

    7、synchronized 和 ReentrantLock 區(qū)別是什么?

    答:一個(gè)可重入的互斥鎖 Lock,它具有與使用 synchronized 方法和語句所訪問的隱式監(jiān)視器鎖相同的一些基本行為和語義,但功能更強(qiáng)大。

    ReentrantLock更加靈活,提供了超時(shí)獲取鎖,可中斷鎖。提供了非公平鎖和非公平鎖,而synchronized僅僅是非公平鎖。

    用法上,ReentrantLock必須手動(dòng)釋放鎖,并且只能修飾代碼塊。而synchronized不用手動(dòng)釋放鎖,除此之外可以修飾方法。

    使用synchronized的線程會(huì)被block住,而ReentrantLock的線程則是進(jìn)入waiting狀態(tài)。

    阿里高級java面試題和答案

    一面面試題目:

    1、你比較了解的機(jī)器學(xué)習(xí)的算法有哪些,說一下這些算法的過程和區(qū)別

    2、網(wǎng)絡(luò)的體系結(jié)構(gòu)分為哪五層,每層分別有哪些協(xié)議

    3、TCP和UDP的區(qū)別是什么,如果想發(fā)送即時(shí)消息應(yīng)該用哪種協(xié)議

    4、TCP的連接建立和斷開的過程(三次握手和四次揮手),如何保證TCP發(fā)送的信息是正確的,且保證其先后順序不被篡改

    5、對HTTP協(xié)議了解多少,HTTP和HTTPS有什么區(qū)別,HTTPS的安全性是怎么實(shí)現(xiàn)的

    6、平時(shí)用mysql用什么引擎

    7、數(shù)據(jù)庫事務(wù)的特性有哪些

    8、事務(wù)并發(fā)可能會(huì)導(dǎo)致哪些問題,數(shù)據(jù)庫的隔離級別有哪些,mysql默認(rèn)的是哪種級別,這種默認(rèn)的隔離級別能夠避免哪些問題(復(fù)習(xí)的太久了,有一些忘記了,這個(gè)問題居然答得不全)

    9、如何判斷SQL查詢操作是不是慢sql,如何優(yōu)化

    10、進(jìn)程和線程的區(qū)別,進(jìn)程之間的通信方法

    11、死鎖是什么,處理死鎖的方法有哪些

    12、進(jìn)程同步中的臨界區(qū)有什么處理方法

    13、spring MVC,spring AOP源碼

    14、spring循環(huán)引用

    15、spring事務(wù)傳播機(jī)制

    16、java nio,bio,aio,操作系統(tǒng)底層nio實(shí)現(xiàn)原理

    17、java線程編程了解嗎?

    18、hashmap的數(shù)據(jù)結(jié)構(gòu)是什么,具體是怎么實(shí)現(xiàn)的,是不是線程安全的(不是),那么它的線程安全的替代有哪些?

    二面面試題目和參考答案:

    你在項(xiàng)目中遇到哪些有挑戰(zhàn)性的點(diǎn)?

    參考:參與了秒殺的高并發(fā)項(xiàng)目。

    1.流量在某一時(shí)刻暴漲,然后又猛跌如何應(yīng)對?

    參考答案:

    • 流量削峰填谷

    • 在客戶端與服務(wù)器加入消息隊(duì)列作為緩存機(jī)制

    • 接入層與各模塊都采用cache增加QPS

    2.redis 消息隊(duì)列如何對過期信息/無效信息進(jìn)行刪除

    參考答案:

    • 添加過期時(shí)間上限

    • 不同組團(tuán)信息采用不同隊(duì)列,當(dāng)該組團(tuán)滿額之后刪除隊(duì)列

    3.redis 的持久化機(jī)制?

    • 參考答案:RDB和AOF

    4. 為什么JAVA類加載要用雙親委派

    • 實(shí)例:Object類唯一

    5.怎么實(shí)現(xiàn)同步

    • Synchronized關(guān)鍵字

    • Volatile變量

    • Lock對象

    6. JAVA鎖有哪幾種

    • Sychronized

    • ReentrantLock

    7. 兩種鎖的區(qū)別

    • Synchronized 由JVM實(shí)現(xiàn)

    • ReentrantLock 由JDK實(shí)現(xiàn)

    6. 了解過AQS嗎?

    • AQS(Abstract Queue Synchronizer)隊(duì)列同步器

    • 由一個(gè)Valotaile變量標(biāo)記狀態(tài)State,以及一個(gè)CLH(同步、FIFO)隊(duì)列構(gòu)成

    具體實(shí)現(xiàn)類:

    • CountdownLatch: 等待多個(gè)線程完成;

    • CyclicBarrier:同步屏障;

    • Semaphore:控制并發(fā)線程數(shù)。

    7. 場景題:給一個(gè)方法加上超時(shí)異常

    • 使用AspectJ進(jìn)行AOP開發(fā)

    • 將方法調(diào)用進(jìn)行Around切入

    • 采用Future對象創(chuàng)建一個(gè)線程,在調(diào)用方法同時(shí)進(jìn)行計(jì)時(shí)

    • 若Future率先返回值則拋出超時(shí)異常

    • 否則則正常調(diào)用

    英雄帖-Alibaba-企業(yè)智能事業(yè)部-技術(shù)專家/高級開發(fā)工程師

    前言

    如題,本文是招賢納士帖。
    崗位和博主一個(gè)團(tuán)隊(duì),歡迎大家一起過來搞事情!
    如果你對我有想法,簡歷甩過來吧,我們可以成為同事;
    如果你對Alibaba 有想法,簡歷也請甩過來吧,我來給你內(nèi)推!
    如果面試通過,我請你吃大餐 ,大餐,大餐~

    職位 :技術(shù)專家/高級Java工程師-杭州(P6/P7)

    工作地點(diǎn):?杭州

    工作年限:三年以上

    所屬部門:阿里集團(tuán)

    招聘人數(shù):若干

    團(tuán)隊(duì)介紹:

    企業(yè)智能部,是阿里巴巴集團(tuán)協(xié)同辦公和運(yùn)營平臺(tái)的建設(shè)者,為阿里集團(tuán)及生態(tài)公司提供生態(tài)化、國際化、數(shù)據(jù)化、移動(dòng)化以及安全穩(wěn)定的企業(yè)信息化服務(wù);負(fù)責(zé)協(xié)同門戶平臺(tái)、工作流平臺(tái)、數(shù)據(jù)平臺(tái)、iHR、財(cái)務(wù)、IT、行政、賬戶權(quán)限等核心系統(tǒng),是企業(yè)信息化服務(wù)能力輸出的強(qiáng)大引擎;我們專注于賦能業(yè)務(wù),以嚴(yán)謹(jǐn)理念和互聯(lián)網(wǎng)的創(chuàng)新精神,致力打造企業(yè)運(yùn)營最佳效能!

    崗位描述:

    1. 作為核心工程師參與阿里大腦的建設(shè)工作,通過云計(jì)算和人工智能的手段助力組織升級。

    2. 主導(dǎo)業(yè)務(wù)及技術(shù)改造類項(xiàng)目的系統(tǒng)分析和設(shè)計(jì)工作,承擔(dān)核心功能及公共模塊的代碼編寫工作。

    3. 維護(hù)和升級現(xiàn)有軟件產(chǎn)品,快速定位并修復(fù)現(xiàn)有產(chǎn)品的缺陷。

    崗位要求:

    1. 本科以上學(xué)歷,計(jì)算機(jī)相關(guān)專業(yè)畢業(yè)。

    2. 精通Web編程,Java基礎(chǔ)扎實(shí);熟悉Spring、MyBatis等開源框架;熟悉常用消息和存儲(chǔ)中間件;熟悉Oracle、Mysql等關(guān)系數(shù)據(jù)庫,熟悉Linux操作系統(tǒng)。

    3. 有4年以上使用Java語言進(jìn)行web開發(fā)的經(jīng)驗(yàn),熟悉常用設(shè)計(jì)模式。在公司擔(dān)任過架構(gòu)師或核心技術(shù)骨干,有主導(dǎo)大型系統(tǒng)架構(gòu)設(shè)計(jì)和核心代碼開發(fā)的經(jīng)驗(yàn)。

    4. 對技術(shù)有強(qiáng)烈的興趣,喜歡鉆研;同時(shí)需要具備良好的溝通協(xié)作能力。

    5. 熟悉SOA,有平臺(tái)化實(shí)施經(jīng)驗(yàn),有大數(shù)據(jù)、高并發(fā)系統(tǒng)和大型網(wǎng)站構(gòu)建經(jīng)驗(yàn)者優(yōu)先。

    6. 有企業(yè)服務(wù)業(yè)務(wù)系統(tǒng)開發(fā)經(jīng)驗(yàn)者優(yōu)先。

    注意:這是P7職級的要求,P6職級的要求會(huì)相對降低。

    咨詢&聯(lián)系方式

    簡歷可直接發(fā)送到郵箱:guangjian.cgj@alibaba-inc.com

    微信:?universskyoh

    歡迎大家騷擾!


    Kotlin 開發(fā)者社區(qū)

    國內(nèi)第一Kotlin 開發(fā)者社區(qū)公眾號,主要分享、交流 Kotlin 編程語言、Spring Boot、Android、React.js/Node.js、函數(shù)式編程、編程思想等相關(guān)主題。

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Kotlin 開發(fā)者社區(qū)

    更多文章閱讀:

    如何進(jìn)行思考? 產(chǎn)品經(jīng)理思維模型參考(學(xué)習(xí)筆記)

    系統(tǒng)架構(gòu)設(shè)計(jì)方法論——Zachman框架模型

    編程藝術(shù)是,而且一直以來都是 —— 語言設(shè)計(jì)藝術(shù)。

    什么樣的代碼是好讀的?

    《代碼整潔之道》細(xì)節(jié)之中自有天地,整潔成就卓越代碼 讀書筆記

    架構(gòu)設(shè)計(jì)模式—6大設(shè)計(jì)原則

    《Kotlin Contract 契約》極簡教程

    Kotlin 編碼規(guī)約

    英雄帖-Alibaba-企業(yè)智能事業(yè)部-技術(shù)專家/高級開發(fā)工程師

    番外篇:

    Kotlin 是一門現(xiàn)代編程語言(1.0 版本是在 2016 年 2 月發(fā)布的)。它最初的目標(biāo)是彌補(bǔ) Java 的缺點(diǎn),像 Scala 語言所做的那樣,但解決了一些存在的問題(例如,編譯時(shí)間)。

    JetBrains 對 Kotlin 作了了不起的優(yōu)化工作,在最近一個(gè)版本中 Kotlin 的編譯時(shí)間得到了顯著的提升。作為一個(gè) Kotlin 新手,下面是最初我想到的一些問題的答案:

    • 和 Java 的可互操作性:Kotlin 可以直接和 Java 類進(jìn)行交互,當(dāng)然也有其他方式。最基礎(chǔ)的一點(diǎn):我確實(shí)想重用老的代碼倉庫,并引入 Kotlin。

    • 轉(zhuǎn)換工具:雖然不能盲目的信任 Java 到 Kotlin 的自動(dòng)轉(zhuǎn)換,但這個(gè)功能確實(shí)很棒。當(dāng)我將 Java 類轉(zhuǎn)換為 Kotlin 類時(shí),我可以很容易的復(fù)用 60%~70% 的結(jié)果代碼。我的做法是不要一次性將整個(gè)代碼庫從 Java 轉(zhuǎn)換為 Kotlin,而是遵循小步迭代。這樣審查轉(zhuǎn)換后的代碼所花的時(shí)間也會(huì)很少。

    回到 Kotlin 本身,在使用 Java 進(jìn)行多年的開發(fā)后,嘗試使用 Kotlin 這種新鮮東西感覺很棒。如果你是一名 Java 開發(fā)者,Kotlin 的語法對你而言是非常自然的。如果你是一名 Swift 開發(fā)者,也會(huì)有同樣的感覺,而且你會(huì)很容易理解 Kotlin 的一些關(guān)鍵概念例如空類型。Kotlin 其他吸引我注意的特性如下:

    • 空類型:告訴你公司的業(yè)務(wù)人員你可以避免產(chǎn)品中三分之二的異常,這將是一件令人心動(dòng)的事情。直到開始使用 Kotlin,你才意識到在 Java 中沒有空類型是多么糟糕的一件事情。

    • 函數(shù)式編程:是的,Kotlin 正如 Scala 一樣,支持函數(shù)式編程。

    • 默認(rèn)和命名參數(shù):再次的,如果你之前沒有嘗試過這種特性,你將永遠(yuǎn)不會(huì)知道它的可貴之處。在 Kotlin 中,你可以為一個(gè)函數(shù)的參數(shù)設(shè)置默認(rèn)值,并為每個(gè)參數(shù)命名。這成倍的增加代碼的可讀性和易讀性。

    • 智能的強(qiáng)制轉(zhuǎn)換:厭倦了使用?instanceof?進(jìn)行類型判斷然后進(jìn)行類型轉(zhuǎn)換吧?它似乎總是非常多余的步驟,本應(yīng)該很容易防止的。Kotlin 自動(dòng)為你實(shí)現(xiàn)這些步驟。

    Koltin 還有一堆的特性,可能需要幾篇文章的篇幅來進(jìn)行列舉和深入介紹??偨Y(jié)來說:Koltin 是一門用于補(bǔ)充和完善 Java 不足的語言。對于 Java 開發(fā)者而言學(xué)習(xí)曲線很平緩。這不是一個(gè)非此即彼的問題,因?yàn)槟憧梢栽谀愕?Java 代碼倉庫中同時(shí)使用 Java 和 Kotlin。Kotlin 將會(huì)提高您的工作效率,從中長期來看,它將使你成為一名更好的程序員。

    總結(jié)

    以上是生活随笔為你收集整理的java面试题_阿里大厂流出的数百道 Java 经典面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    国产剧情在线一区 | www.超碰97.com| 天天射天天干天天操 | 00av视频 | 97日日碰人人模人人澡分享吧 | av网站免费看 | 国产精品免费看久久久8精臀av | 久久好看 | 美女视频黄免费 | 97超碰人人爱 | av福利在线| 亚洲精品资源在线 | 超碰在线9| 亚洲国产成人久久综合 | 久久狠狠一本精品综合网 | 免费精品视频在线观看 | 久久久久久久久久久久久国产精品 | 999在线精品| 一区二区不卡在线观看 | 国产黄色av网站 | 欧美999 | 粉嫩一区二区三区粉嫩91 | 91视频免费播放 | av电影一区二区三区 | 国产日韩精品一区二区三区在线 | 国产精品久久久久久久久费观看 | 国产手机在线播放 | 狠狠操狠狠干天天操 | 97电影在线 | 日韩欧美第二页 | 在线有码中文字幕 | 在线日本看片免费人成视久网 | 久久a久久| 免费看高清毛片 | 日韩精品一区二区三区第95 | 天天草av | 激情在线网址 | 99tvdz@gmail.com | 韩日色视频 | 亚洲国产精品第一区二区 | 久久久久久久久国产 | 午夜久久电影网 | 视频国产一区二区三区 | av免费在线免费观看 | 久久免费美女视频 | 深爱婷婷久久综合 | 欧美日韩在线视频观看 | 亚洲一级片在线看 | 欧美乱码精品一区 | 天天射天天艹 | 国产在线观看国语版免费 | 9幺看片 | 欧美日韩免费看 | 91福利视频免费 | 国产一区视频导航 | 西西www4444大胆在线 | 69夜色精品国产69乱 | 久久精品视频4 | 在线观看免费高清视频大全追剧 | 色福利网 | 国产视频日韩 | 一区二区激情视频 | 国产黄av| 欧美成人aa | 91亚洲精品久久久蜜桃网站 | 久久免费视频播放 | 国产黄色免费在线观看 | 成人精品在线 | 97小视频 | www.五月天激情 | 在线视频欧美精品 | 亚洲精品国产精品国自产在线 | 99久久日韩精品视频免费在线观看 | 成人播放器| 亚洲综合色视频在线观看 | 久久欧美在线电影 | 日本精品va在线观看 | 日韩中文免费视频 | 91视频高清完整版 | 国产69精品久久久久99 | 亚洲欧美日韩国产一区二区 | 欧美在线视频免费 | 又黄又爽又刺激视频 | 国产精品乱码久久久久 | 国产亚洲精品久久久久久电影 | 欧美日韩调教 | 992tv人人网tv亚洲精品 | 亚洲成人在线免费 | 欧美一二三区在线播放 | 欧美日韩性 | 亚洲动漫在线观看 | 久久婷婷开心 | 激情av资源 | 91精品免费在线观看 | 综合婷婷丁香 | 天天躁日日躁狠狠躁av麻豆 | 欧美 亚洲 另类 激情 另类 | 黄色动态图xx | 天天操,夜夜操 | 四虎在线永久免费观看 | 成人欧美日韩国产 | 亚洲一区二区精品视频 | 欧美男女爱爱视频 | 国产精品久久9 | 国产精品电影一区二区 | 天堂网av在线 | 四虎成人精品永久免费av | 午夜精品久久久久久久99热影院 | 91精品色| 成人小视频在线播放 | 精品国产一区二区三区日日嗨 | 成年人视频在线免费 | 天天操偷偷干 | 久久亚洲私人国产精品 | 国产黑丝一区二区 | 91九色免费视频 | 一区精品久久 | 欧美综合久久久 | 日韩专区av | 久久久久久久久久久久久久免费看 | 国产午夜精品久久久久久久久久 | 国产精品99久久久久的智能播放 | 日韩成人免费电影 | 国产婷婷精品av在线 | 黄污污网站 | 久久久久麻豆v国产 | 91精品视频在线观看免费 | 四虎影视4hu4虎成人 | 久久在线影院 | 婷婷在线播放 | 午夜手机电影 | www.黄色 | 欧美一区二区三区在线视频观看 | 外国av网 | 国产精品成人一区二区三区 | 国产精品久久久久久久久久白浆 | 99在线精品免费视频九九视 | 久久另类视频 | 人成免费网站 | 日本一区二区高清不卡 | 亚洲欧美激情插 | 九九爱免费视频在线观看 | 久久精品这里精品 | 97在线影院 | 狠狠狠狠狠狠狠狠 | 最新中文字幕视频 | 成人国产精品久久久 | 66av99精品福利视频在线 | 欧美成a人片在线观看久 | 最近中文字幕免费av | 91最新地址永久入口 | 偷拍福利视频一区二区三区 | 免费在线观看午夜视频 | 免费看三级黄色片 | 狠狠色狠狠综合久久 | 一区 在线 影院 | 久久视频在线观看免费 | 一区二区三区中文字幕在线 | 久久99视频精品 | 精品欧美一区二区精品久久 | 天天色综合三 | 国产九色在线播放九色 | 免费在线黄色av | 久久久久久黄 | japanesefreesexvideo高潮 | 91中文字幕永久在线 | 99国产视频 | 97国产大学生情侣酒店的特点 | 国产这里只有精品 | 亚洲国产欧美在线看片xxoo | 日本性生活免费看 | 少妇bbb搡bbbb搡bbbb′ | 最近中文字幕国语免费av | 久久精品欧美一区二区三区麻豆 | 国产一卡久久电影永久 | 亚洲国产免费网站 | 91亚·色| 国产精品国产自产拍高清av | 久久久精品国产免费观看一区二区 | 人人超碰97| 亚洲一区二区三区精品在线观看 | 丁香综合| 免费视频97 | 久草在线观看视频免费 | avhd高清在线谜片 | 在线看中文字幕 | 色狠狠综合 | 四虎国产精品永久在线国在线 | 国产精品1区2区3区 久久免费视频7 | 午夜影院一级片 | 欧美另类一二三四区 | av丝袜在线 | 免费看的黄色录像 | 99久久婷婷国产综合精品 | 激情动态 | 黄色小网站免费看 | 国产一区精品在线观看 | 久久精品视频免费观看 | 色婷婷激情网 | 激情五月婷婷综合网 | 国产亚洲精品日韩在线tv黄 | 91在线麻豆 | 成年人视频免费在线 | 欧美另类亚洲 | 大胆欧美gogo免费视频一二区 | av软件在线观看 | 久久亚洲私人国产精品va | 黄色午夜 | 91自拍视频在线观看 | 国产精品一区二区在线 | 成人在线视频网 | 国产黄色精品 | 超碰国产97 | 国产黄av| 免费福利在线播放 | 少妇做爰k8经典 | 国产一级黄色免费看 | 日韩在线视频线视频免费网站 | 午夜av一区二区三区 | 成人一级电影在线观看 | 免费黄色a网站 | 国产一区在线不卡 | 亚洲欧美日韩国产 | 国产又粗又长的视频 | 久久久久亚洲精品男人的天堂 | 中文字幕精品一区二区精品 | 国产一级大片免费看 | 天天干天天拍天天操 | 狠狠操狠狠干天天操 | 色干干| 国产一区成人在线 | 最新中文字幕在线资源 | 国产精品高清在线 | 久久99热这里只有精品 | 青春草视频在线播放 | 欧美人交a欧美精品 | 亚洲乱码精品久久久 | 国产一二三四在线观看视频 | 国产小视频在线免费观看 | 精品国产乱码久久久久久1区2匹 | 国产精品成人aaaaa网站 | 国产精品免费不 | 欧美成人影音 | 国产精品va在线观看入 | 日韩精品视频免费 | 日日干av| 五月开心激情 | 免费日韩电影 | 国产精品自产拍在线观看 | 久草在线视频资源 | 九九久久婷婷 | 91av视频在线播放 | 亚洲天堂激情 | 成人综合婷婷国产精品久久免费 | 亚洲精品麻豆视频 | 亚洲九九九在线观看 | 综合久久久久久久久 | 国产精品欧美久久久久无广告 | 精品国产1区2区3区 国产欧美精品在线观看 | 综合激情av | 亚洲成人精品 | 久久久国产一区二区三区 | 日本性动态图 | 综合铜03| 久久99精品波多结衣一区 | 在线观看小视频 | 国产精品免费久久久久久久久久中文 | 久久精品成人 | 国产精品国产精品 | 日韩中出在线 | 一区二区视频电影在线观看 | 日本色小说视频 | 日韩免费专区 | 五月婷婷毛片 | 日韩大片在线 | 干干操操 | 在线观看亚洲电影 | 美女免费黄视频网站 | 久久综合九色综合97_ 久久久 | 日韩精品高清视频 | 在线亚洲高清视频 | 中文字幕观看视频 | 黄色片网站av | 伊人天堂av | 欧美成人在线网站 | 午夜在线免费观看视频 | 日韩精品一二三 | 波多野结衣电影一区 | 久久视频这里有精品 | 亚洲天堂网在线视频 | 亚洲精品天天 | 正在播放国产91 | 六月丁香社区 | 国产视频在线观看一区 | 国产精品一区二区在线看 | 精品资源在线 | 国产精品成人自产拍在线观看 | 久久视频这里只有精品 | 日韩精选在线 | 天天爽天天射 | 精品 激情 | 国产精品国产三级国产不产一地 | 99视频精品全部免费 在线 | 激情欧美一区二区免费视频 | 久热av在线 | 91粉色视频| 日韩午夜电影 | 美女福利视频 | 日本精品视频网站 | av成人在线观看 | 久久看毛片 | 久久只精品99品免费久23小说 | 亚洲手机天堂 | 日韩精品资源 | 久久久久免费网站 | 欧洲一区二区三区精品 | 国产特级毛片aaaaaa高清 | 午夜精品视频免费在线观看 | 免费人做人爱www的视 | 91视频黄色 | 日韩av免费在线看 | 国产一级大片在线观看 | 一本一本久久a久久精品牛牛影视 | 91经典在线 | 麻豆91网站 | 国产欧美日韩视频 | 91福利影院在线观看 | 91在线视频| 狠狠操狠狠干天天操 | 黄色a三级 | 国产精品69久久久久 | 天天爱天天射天天干天天 | 天堂久久电影网 | 九九视频在线观看视频6 | 丁香九月婷婷综合 | 久久夜视频| 日韩激情av在线 | 亚洲一区二区三区在线看 | 久久国产亚洲精品 | 一区二区三区四区久久 | 天天操操操操操 | 黄色免费在线视频 | www.久久久 | 国产精品一区二区av | 在线免费色视频 | 最近中文国产在线视频 | 久久久久麻豆 | 久久成人高清 | 国产精品11 | 天天综合网在线观看 | 天天视频色版 | 久久亚洲二区 | 狠狠躁18三区二区一区ai明星 | 正在播放一区 | 日韩免费一区二区三区 | 特级黄色视频毛片 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | www狠狠| 国产韩国精品一区二区三区 | 成人av在线亚洲 | 天天爱综合 | 天堂av最新网址 | 看全黄大色黄大片 | 欧美国产高清 | 久草网在线 | 中文字幕在线国产 | a黄色大片 | 久久久黄色免费网站 | 奇米先锋 | 九色porny真实丨国产18 | 亚洲 欧美日韩 国产 中文 | 91精品久| 久草网站在线 | 少妇视频在线播放 | 久草在线视频首页 | 国产在线视频资源 | 在线观看视频黄色 | 国产福利91精品张津瑜 | 91亚洲精品在线观看 | 欧美精品午夜 | 手机av在线网站 | 亚洲成人影音 | 日日夜夜草 | 在线免费观看涩涩 | 精品国产乱码久久久久久1区2匹 | 欧美精品xx| 日韩一区二区免费播放 | 波多野结衣在线观看一区 | 久草爱| 国产精品一级视频 | 国产在线观看你懂得 | 国内丰满少妇猛烈精品播放 | 六月色| 9热精品| 国产视频欧美视频 | 黄色软件在线观看视频 | 欧美男男激情videos | 国产一区二区久久久久 | 欧美一区二区在线 | 成人资源在线 | 亚洲成人黄色 | 九九久久影院 | 亚洲动漫在线观看 | 99免费国产| 麻豆一区在线观看 | 国产h在线播放 | 91一区一区三区 | 国产精品女同一区二区三区久久夜 | 午夜电影久久 | 日韩在线观看av | 人人爽人人爽人人爽 | 午夜视频在线观看一区二区三区 | 日本三级国产 | 国产精品久久二区 | 91av电影网 | 亚洲综合激情网 | 国产主播大尺度精品福利免费 | 在线观看91视频 | 狠狠色丁香久久综合网 | 久久久久夜色 | 在线精品视频免费播放 | 在线免费日韩 | 美女视频黄网站 | 久草视频免费看 | 久久久网 | 在线播放精品一区二区三区 | 国产一区二区在线免费观看 | 97品白浆高清久久久久久 | 啪啪动态视频 | 蜜臀av网址 | 黄色av三级在线 | 99国产精品一区二区 | 公与妇乱理三级xxx 在线观看视频在线观看 | 天堂av免费看 | 九九视频精品在线 | 欧美日韩高清一区二区 国产亚洲免费看 | 欧美作爱视频 | 在线观看国产高清视频 | 国产精品久久电影网 | 在线视频欧美精品 | 国内一级片在线观看 | 在线精品观看国产 | 免费情缘| 探花视频免费观看 | 免费情趣视频 | 伊人狠狠 | 综合铜03| 日韩在线精品 | 精品久久一区 | 亚洲精品在线网站 | 精品99久久 | 五月婷婷综合在线视频 | 日本视频不卡 | 久草视频在线播放 | 久草久草在线观看 | 麻豆国产精品va在线观看不卡 | 久久精品91视频 | 夜夜躁狠狠躁日日躁视频黑人 | 国产中文视 | 91中文字幕网 | 六月丁香婷 | 人人插人人爱 | 最近免费中文字幕大全高清10 | 色婷婷天天干 | 国产福利电影网址 | 在线一二区 | 91在线永久 | 在线观看一区二区精品 | 免费黄色a级毛片 | 午夜成人免费电影 | 一区二区三区高清在线观看 | 97色在线视频 | 天天摸天天干天天操天天射 | 亚洲国产中文字幕 | 91九色视频观看 | 国产精品免费久久久久 | 久久精品99国产精品日本 | 亚洲永久国产精品 | 日本久久成人中文字幕电影 | 欧美91av| 一区二区高清在线 | 日韩欧美在线视频一区二区三区 | 国产视频资源在线观看 | 久久久久美女 | 久久网页 | 欧美日韩国产亚洲乱码字幕 | 成人精品视频久久久久 | 欧美久久成人 | 亚州黄色一级 | 99视频这里有精品 | 精品国产免费观看 | 免费观看www视频 | 日韩一级理论片 | av在线播放中文字幕 | 亚洲精品99 | 一区二区三区四区影院 | 五月婷色| 中文字幕在线久一本久 | 欧美日韩免费观看一区二区三区 | 蜜臀aⅴ国产精品久久久国产 | 久久国产网站 | 久久9视频| 久青草电影 | 成人a级免费视频 | 2021国产视频 | 欧美色一色| 香蕉视频91| 四虎永久免费网站 | 丁香在线视频 | 色资源网在线观看 | 国产一级一级国产 | 国产午夜在线观看 | 亚州av网站 | 久久不射电影网 | 国产精品私人影院 | 国产精品色 | 欧美精品一区二区三区四区在线 | 国产原创在线 | 国产成人精品一区二 | 九九热在线播放 | 99久久99久久精品国产片 | 在线观看完整版 | 97超碰免费在线 | 日韩视频精品在线 | 人人插人人爱 | 操操操影院 | 国产高清一级 | 久久艹国产视频 | 国产精品伦一区二区三区视频 | 青草视频在线免费 | 在线视频中文字幕一区 | 97超碰人人模人人人爽人人爱 | se视频网址 | 亚洲三级影院 | 欧美日韩裸体免费视频 | 亚洲欧美视频在线观看 | 美女网站视频久久 | 最近日本中文字幕 | 久久久国产影视 | 色偷偷88888欧美精品久久 | 欧美日本啪啪无遮挡网站 | 色噜噜噜噜| 亚洲免费在线 | 国产精品成人a免费观看 | 欧美a在线看 | 国产精品福利无圣光在线一区 | 中文字幕亚洲综合久久五月天色无吗'' | 九色91在线视频 | 久久超级碰| 丁香午夜 | 色狠狠综合天天综合综合 | 色就干| 在线看v片| 成人午夜精品久久久久久久3d | 久久久亚洲成人 | 亚洲日本一区二区在线 | 亚洲欧美视频在线 | 国产亚洲综合在线 | 一区二区免费不卡在线 | 六月婷婷久香在线视频 | 国产九色在线播放九色 | 欧美日韩一区二区久久 | 91免费在线| 久久精品国产一区二区三 | 久久久久一区二区三区四区 | 国产精品久久久久久久久久久久午夜片 | 一本之道乱码区 | 久久九九免费视频 | 欧美一区二区在线刺激视频 | 亚洲二级片| 国语自产偷拍精品视频偷 | 国产精品观看在线亚洲人成网 | 久久久久久久久久久免费av | 久久9999久久免费精品国产 | 国产69精品久久app免费版 | 精品亚洲视频在线观看 | 亚州天堂 | 99国产免费网址 | 玖玖999 | 麻豆91小视频 | 免费看黄色小说的网站 | 午夜91在线 | 日韩理论 | 天天色 天天 | 国产精品久久毛片 | 99久久婷婷国产 | av不卡免费在线观看 | 亚洲 欧美 国产 va在线影院 | 精品国产自在精品国产精野外直播 | 在线日韩视频 | 中文字幕精品三区 | 999久久精品| 国产又粗又猛又爽又黄的视频免费 | 五月激情站| 中文字幕在线视频精品 | 国产原厂视频在线观看 | 成人免费av电影 | 黄色一级在线免费观看 | 日韩精品免费在线视频 | 操老逼免费视频 | 亚洲一区二区天堂 | 欧美日韩久久不卡 | 免费日韩 精品中文字幕视频在线 | a级片韩国 | 99视屏 | 免费中文字幕在线观看 | 激情综合色图 | 亚洲精品一区二区三区新线路 | 国内精品久久久久久久久 | 91香蕉视频在线下载 | av大全在线看 | 日韩精品无 | 久久精品伊人 | 日韩高清av在线 | 手机看片国产日韩 | 日韩黄色免费电影 | 91理论片午午伦夜理片久久 | 一区二区视 | 久久成人综合视频 | 日韩中文在线电影 | 久草a在线| 激情网站五月天 | 91桃色在线播放 | 亚洲女欲精品久久久久久久18 | 免费a网站 | 久久精品中文字幕免费mv | 人人狠狠 | 超碰资源在线 | 久久五月网 | 国产在线观看av | 天天色.com| 日韩免费电影一区二区三区 | 国产99久久九九精品免费 | 欧美一二三区在线播放 | 国产一级在线免费观看 | 久久久久激情电影 | 亚洲免费视频在线观看 | 久久国产二区 | 久久激情视频免费观看 | 亚洲在线视频免费 | 九九热视频在线免费观看 | 国产精品高清在线 | 国产美女视频免费 | 日韩和的一区二在线 | 国产一区二区不卡视频 | 欧美亚洲成人免费 | 91精品国产成人www | 在线视频 亚洲 | 欧美三级免费 | 中文字幕高清 | 麻豆视传媒官网免费观看 | 久久综合久久综合久久综合 | 99热这里是精品 | 在线中文字幕观看 | 成人免费一级片 | 精品久久久国产 | 夜夜夜夜操 | 91黄色在线视频 | 一级电影免费在线观看 | 国产热re99久久6国产精品 | 国产一级大片在线观看 | 国产午夜精品一区二区三区嫩草 | 亚洲国产欧美一区二区三区丁香婷 | 精品日本视频 | 色播五月婷婷 | 96视频免费在线观看 | 大片网站久久 | 伊人天天色 | 免费视频久久久 | 激情视频在线高清看 | 久久激情综合网 | 久久激情小视频 | 国产精品免费一区二区三区在线观看 | 国产91精品看黄网站在线观看动漫 | 欧美成亚洲 | 少妇bbb好爽 | 成人黄色视 | 欧美一级黄色网 | 国产一级黄色电影 | 免费看搞黄视频网站 | 精品久久视频 | 久久久久99精品成人片三人毛片 | 黄色大片av | 又湿又紧又大又爽a视频国产 | 人人插人人插 | 亚洲精品久久久久久中文传媒 | 亚洲 综合 国产 精品 | 欧美激情片在线观看 | 夜夜躁狠狠躁 | 久久久久久久久久久国产精品 | 亚洲影院天堂 | 中文字幕在线看 | 黄色一级大片在线观看 | 九九热视频在线播放 | 在线91视频 | 五月婷婷视频 | 日韩国产精品毛片 | 91免费在线看片 | 免费在线观看视频一区 | 九九涩涩av台湾日本热热 | 超碰在线最新地址 | 狠狠狠狠狠狠 | 在线成人小视频 | 欧美成人高清 | 久久综合精品一区 | 国产在线小视频 | 玖玖玖国产精品 | 色就是色综合 | 亚洲女人av | 国产精在线| 五月婷婷开心 | 五月天高清欧美mv | 麻豆91精品91久久久 | 久久久久免费精品国产 | 狠狠操电影网 | 综合色综合| 最新亚洲视频 | 天天操夜 | 久草精品视频在线播放 | 婷婷国产在线观看 | 中文字幕精品一区二区精品 | 99在线国产| 91午夜精品 | 97夜夜澡人人双人人人喊 | 中文字幕在线观看第一区 | 国产精品自在线拍国产 | 久久国内免费视频 | 亚洲欧洲日韩 | 欧美日本不卡视频 | 人人要人人澡人人爽人人dvd | 午夜精品久久久 | 国产成人av综合色 | 亚洲精品视频免费在线 | www.天堂av | 激情视频免费在线 | 99爱这里只有精品 | 国产精品久久中文字幕 | 国产二区视频在线 | 亚洲午夜av电影 | 综合av在线 | 免费网站色 | 国产视频精选在线 | 欧美国产日韩一区二区三区 | 国产剧情在线一区 | 久久精品亚洲精品国产欧美 | 香蕉网在线观看 | 日韩在线精品视频 | 国产精品成人免费 | 在线免费中文字幕 | 怡红院av| 久久久亚洲影院 | 五月综合在线观看 | 欧美成人性战久久 | 亚洲区精品视频 | 麻豆91小视频 | 97香蕉视频 | 成人av一区二区兰花在线播放 | 国产精品久久久久久久久免费 | 欧美日韩在线网站 | 亚洲成a人片77777kkkk1在线观看 | 国产成人一区二区三区影院在线 | 精品一区三区 | 欧美二区在线播放 | 99久久婷婷国产综合精品 | 久久免费国产电影 | 国产日韩欧美在线影视 | 91在线91拍拍在线91 | 日日天天| 久久久久久久久久毛片 | 亚洲美女在线一区 | 中文字幕在线观看第一页 | 精品99在线观看 | 开心激情网五月天 | 亚洲一级黄色 | 国产精品一区二区久久国产 | 久久久久免费视频 | 在线看av的网址 | www.com.黄| 久久网站av | 欧美成人精品xxx | 黄色av成人在线观看 | 午夜少妇av | 在线 高清 中文字幕 | 久草在线看片 | 久久久久久久免费观看 | 在线v | 中文字幕 91 | 日韩精品久久久久久久电影99爱 | 免费黄色一区 | 婷婷色视频 | 国产亚洲精品无 | 制服丝袜一区二区 | 久碰视频在线观看 | 欧美在线观看视频 | 99久久精品费精品 | 欧美精品一区二区在线播放 | 性日韩欧美在线视频 | 色网站中文字幕 | 天天操天天操天天 | 日韩精品视频免费 | 欧美一区二区在线 | 久久免费视频一区 | 午夜婷婷在线播放 | av不卡中文 | 在线只有精品 | 亚洲在线成人精品 | 亚洲 欧洲 国产 日本 综合 | av中文天堂在线 | 中文字幕在线一区观看 | 午夜的福利 | 四虎成人精品永久免费av | 欧美日韩视频网站 | 久久成人人人人精品欧 | 麻豆一精品传二传媒短视频 | 久久久国产电影 | 这里只有精品视频在线 | 在线你懂的视频 | 国产自制av| 成人 国产 在线 | 久久老司机精品视频 | 亚洲综合色激情五月 | 午夜视频色| .国产精品成人自产拍在线观看6 | 日本乱视频 | 四月婷婷在线观看 | 美女久久99 | 中文字幕成人在线 | 一区二区av| 欧美大荫蒂xxx | 中文字幕一区二区在线播放 | 制服丝袜亚洲 | 亚洲电影毛片 | 免费a v在线 | 久久艹精品 | 99r在线播放 | 欧美福利视频 | 人人爽人人爽人人片av | 午夜av免费看 | 久久九九国产视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 中字幕视频在线永久在线观看免费 | 91精品国自产在线偷拍蜜桃 | 成人a免费 | 日韩欧美在线视频一区二区三区 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲一区二区精品 | 午夜国产一区二区三区四区 | 激情av一区二区 | 精品在线一区二区 | 日韩一区在线免费观看 | 99久久精品免费看国产一区二区三区 | 黄色大片视频网站 | 久久人人97超碰精品888 | 国产亚洲一区二区在线观看 | 黄色小说在线观看视频 | 激情综合狠狠 | 亚洲激情 欧美激情 | 天天插夜夜操 | 精品美女视频 | 色姑娘综合网 | 成人小视频免费在线观看 | 日韩在线欧美在线 | 日p视频在线观看 | 欧美一级黄色视屏 | 日本三级人妇 | 91麻豆精品国产 | 久久久国产精华液 | 人人爱人人舔 | 国产亚洲激情视频在线 | 精品亚洲va在线va天堂资源站 | 亚洲最新av在线网站 | 国产中文字幕亚洲 | 天天插综合 | 日韩1页 | 在线亚洲成人 | 国产精品原创在线 | 丁香花在线视频观看免费 | 日本在线观看黄色 | 国产不卡在线观看 | av天天澡天天爽天天av | 99av国产精品欲麻豆 | av一级片在线观看 | 亚洲免费a | 国产日韩欧美自拍 | av看片在线 | 在线观看视频三级 | 永久免费观看视频 | 在线国产高清 | 久久久影视 | 色综合天天射 | 国产日韩精品欧美 | 精品亚洲欧美一区 | 久久欧美精品 | 国产精品入口麻豆 | 亚洲国内在线 | 国产亚洲精品久久久久久电影 | 一级片黄色片网站 | 国产精品久久久久免费观看 | 久久久99精品免费观看 | 国产亚洲在线 | 亚洲精品日韩av | 高清精品在线 | 午夜av在线免费 | 国产精品99久久久久久宅男 | 欧美黄在线 | 亚洲精品自在在线观看 | 精品国产网址 | 在线免费色视频 | 色婷婷欧美 | 婷婷资源站 | 人操人| 国产精品k频道 | 亚洲精品字幕在线观看 | 亚洲在线高清 | 亚洲成av人片在线观看香蕉 | 亚洲综合视频在线播放 | 日韩欧美在线免费 | 欧美综合在线视频 | 一区二区三区手机在线观看 | 免费在线观看不卡av | 国产精品网址在线观看 | 欧美xxxxx在线视频 | 免费一级特黄毛大片 | 日本激情动作片免费看 | www.com久久 | a在线免费观看视频 | 国产中文在线视频 | 久操视频在线观看 | 精品国产美女在线 | 最新av电影网址 | 美女免费视频一区 | 久久久久一区 | 9i看片成人免费看片 | 青草视频在线看 | 在线天堂亚洲 | 久久99视频免费观看 | 手机在线永久免费观看av片 | 日本久久电影网 | 黄a在线看 | 色94色欧美 | 亚洲最大免费成人网 | 偷拍久久久 | 婷婷色中文 | 国产69精品久久久久久 | 一区二区视频免费在线观看 | 日韩免费观看一区二区三区 | 亚洲国产av精品毛片鲁大师 | 久久午夜精品影院一区 | 亚洲视频aaa| 黄污网站在线观看 | www.午夜色.com| 欧美一区三区四区 | 亚洲国产婷婷 | 999国产精品视频 | 国产成人精品一区二三区 | 婷婷伊人综合亚洲综合网 | 九九热只有这里有精品 | 五月婷婷婷婷婷 | 一区二区三区视频 | 波多野结衣在线播放视频 | 91精品国产一区二区三区 | 中文字幕4 | 婷婷丁香色 | 亚洲国产中文字幕在线观看 | 在线观看中文字幕网站 | 免费在线黄网 | 国产成人精品一区二三区 | 国产精品第52页 | 黄色三级免费网址 | 在线观看国产www | 国产精品视频地址 | .国产精品成人自产拍在线观看6 | 在线观看欧美成人 | 黄色影院在线免费观看 | 欧美午夜一区二区福利视频 | 亚洲黄色激情小说 | 国产男女免费完整视频 | 在线免费看黄色 | 黄色片视频免费 | 日韩在线观看一区 | 在线有码中文字幕 | 99国产情侣在线播放 | 美女在线免费视频 | 91在线视频观看免费 | 久草网在线 | 国产无区一区二区三麻豆 | 毛片视频网址 | 99热最新精品 | 97色在线视频| 亚洲电影图片小说 | 久久乐九色婷婷综合色狠狠182 | 久久久亚洲精华液 | 国产精品久久久久久久免费 | 欧美在线视频a | 中文字幕在线免费 | 日本性生活一级片 | 激情深爱.com | 久久伊人爱 |