亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 Java Java面試題 2020年JAVA最常見面試題彙總(收藏)

2020年JAVA最常見面試題彙總(收藏)

Nov 11, 2019 pm 05:47 PM
java面試題

2020年JAVA最常見面試題彙總(收藏)

java基礎(chǔ)以及多個(gè)「比較」


1.Collections.sort排序內(nèi)部原理

在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,內(nèi)部實(shí)作換成了TimSort,其對(duì)物件間比較的實(shí)作要求更嚴(yán)格

2.hashMap原理,java8做的改變

從結(jié)構(gòu)實(shí)作來講,HashMap是陣列鍊錶紅黑樹(JDK1.8增加了紅黑樹部分)實(shí)現(xiàn)的。 HashMap最多只允許一筆記錄的鍵為null,允許多筆記錄的值為null。

HashMap非線程安全。 ConcurrentHashMap線程安全。解決碰撞:當(dāng)發(fā)生衝突時(shí),運(yùn)用拉鍊法,將關(guān)鍵字為同義詞的結(jié)點(diǎn)連結(jié)在一個(gè)單鍊錶中,散列表長m,則定義一個(gè)由m個(gè)頭指標(biāo)組成的指標(biāo)數(shù)組T,位址為i的結(jié)點(diǎn)插入以T(i)為頭指標(biāo)的單鍊錶中。 Java8中,衝突的元素超過限制(8),用紅黑樹取代鍊錶。

3.String 和StringBuilder 的區(qū)別

1)可變與不可變:String不可變,每次執(zhí)行「 」都會(huì)新產(chǎn)生一個(gè)新對(duì)象,所以頻繁改變字串的情況中不用String,以節(jié)省記憶體。

2)是否多執(zhí)行緒安全:StringBuilder並沒有對(duì)方法進(jìn)行加同步鎖,所以是非執(zhí)行緒安全的。 StringBuffer和String均線程安全。

4.Vector 與 Array 的差異

1)ArrayList在記憶體不夠時(shí)預(yù)設(shè)是擴(kuò)充50% 1個(gè),Vector是預(yù)設(shè)擴(kuò)充1倍。

2)Vector屬於執(zhí)行緒安全性等級(jí)的,但大多數(shù)情況下不使用Vector,因?yàn)閳?zhí)行緒安全性需要更大的系統(tǒng)開銷。

5.HashMap 與Hashtable 的區(qū)別

1) 歷史原因: Hashtable繼承Dictonary類別, HashMap繼承自abstractMap

2) HashMap允許空的鍵值對(duì), 但最多只有一個(gè)空對(duì)象,而HashTable不允許。

3) HashTable同步,而HashMap非同步,效率上比HashTable要高

6.ConncurrentHashMap和hashtable比較(兩個(gè)執(zhí)行緒並發(fā)存取map同一條鏈,一個(gè)線程在尾部刪除,一個(gè)線程在前面遍歷查找,問為什麼前面的線程還能正確的查找到後面被另一個(gè)線程刪除的節(jié)點(diǎn))

ConcurrentHashMap融合了hashtable和hashmap二者的優(yōu)勢。 hashtable是做了同步的,即線程安全,hashmap未考慮同步。所以hashmap在單線程情況下效率較高。 hashtable在的多執(zhí)行緒情況下,同步操作能確保程式執(zhí)行的正確性。但是hashtable是阻塞的,每次同步執(zhí)行的時(shí)候都要鎖住整個(gè)結(jié)構(gòu),ConcurrentHashMap正是為了解決這個(gè)問題而誕生的,

ConcurrentHashMap允許多個(gè)修改操作並發(fā)進(jìn)行,其關(guān)鍵在於使用了鎖定分離技術(shù)(一個(gè)Array保存多個(gè)Object,使用這些物件的鎖作為分離鎖,get/put時(shí)隨機(jī)使用任一個(gè))。它使用了多個(gè)鎖來控制對(duì)hash表的不同部分的修改。在JDK 1.6中,有HashEntry結(jié)構(gòu)存在,每次插入將新新增節(jié)點(diǎn)作為鏈的頭節(jié)點(diǎn)(同HashMap實(shí)作),而且每次刪除一個(gè)節(jié)點(diǎn)時(shí),會(huì)將刪除節(jié)點(diǎn)之前的所有節(jié)點(diǎn)拷貝一份組成一個(gè)新的鏈,而將當(dāng)前節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)的next指向當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn),從而在刪除以後有兩條鏈存在,因而可以保證即使在同一條鏈中,有一個(gè)線程在刪除,而另一個(gè)執(zhí)行緒在遍歷,它們都能運(yùn)作良好,因?yàn)楸闅v的執(zhí)行緒能繼續(xù)使用原有的鏈。

Java8中,採用volatile HashEntry保存數(shù)據(jù),table元素作為鎖定;從table數(shù)組 單向鍊錶加上了紅黑樹。紅黑樹是一種特別的二元查找樹,特性為:1.節(jié)點(diǎn)為紅或黑2.根節(jié)點(diǎn)為黑3.葉節(jié)點(diǎn)為黑4.一節(jié)點(diǎn)為紅,則葉節(jié)點(diǎn)為黑5.一節(jié)點(diǎn)到其子孫節(jié)點(diǎn)所有路徑上的黑節(jié)點(diǎn)數(shù)目相同。

7.ArrayList與 LinkedList 的差別?

最明顯的差異是

ArrrayList 底層的資料結(jié)構(gòu)是數(shù)組,支援隨機(jī)訪問,而 LinkedList 的底層資料結(jié)構(gòu)書鍊錶,不支援隨機(jī)存取。使用下標(biāo)存取一個(gè)元素,ArrayList 的時(shí)間複雜度是 O(1),而 LinkedList 是 O(n)。 LinkedList是雙向鍊錶

8.Java 中,Comparator 與Comparable 有什麼不同?

Comparable 接口用於定義物件的自然順序,是排序接口,而 comparator 通常用於定義使用者自訂的順序,是比較接口。我們?nèi)绻枰刂颇硞€(gè)類別的順序,而該類別本身不支援排序(即沒有實(shí)作Comparable介面),那麼我們就可以建立一個(gè)「該類別的比較器」來進(jìn)行排序。 Comparable 總是只有一個(gè),但可以有多個(gè) comparator 定義物件的順序。

9.抽象類別是什麼?它與介面有什麼區(qū)別?為什麼要使用過抽象類別?

抽象類別是指不允許被實(shí)例化的類別;一個(gè)類別只能使用一次繼承關(guān)係。但是,一個(gè)類別卻可以實(shí)作多個(gè)interface。

abstract class和interface所反映的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是"is-a"關(guān)係,interface表示的是"like-a"關(guān)係

實(shí)作抽象類別和介面的類別必須實(shí)作其中的所有方法。抽象類別中可以有非抽象方法。接口中則不能有實(shí)作方法。但在Java8中允許介面中有靜態(tài)預(yù)設(shè)的方法。

介面中定義的變數(shù)預(yù)設(shè)是public static final 型,且必須給其初步值,所以實(shí)作類別中不能重新定義,也不能改變其值。抽象類別中的變數(shù)預(yù)設(shè)是 friendly 型,其值可以在子類別中重新定義,也可以重新賦值。

子類別中實(shí)作父類別中的抽象方法時(shí),可見性可以大於等於父類別中的;而介面實(shí)作類別中的介面 方法的可見性只能與介面中相同(public)。

用抽象類別是為了重複使用。減少編碼量,降低耦合性。

10.描述 Java 中的重載與重寫?

重載和重寫都允許你用相同的名稱來實(shí)現(xiàn)不同的功能,但是重載是編譯時(shí)活動(dòng),而重寫是運(yùn)行時(shí)活動(dòng)。你可以在同一個(gè)類別中重載方法,但是只能在子類別中重寫方法。重寫必須要有繼承

重寫:1、在子類別中可以根據(jù)需要對(duì)從基底類別繼承來的方法進(jìn)行重寫。 2、重寫的方法和被重寫的方法必須具有相同方法名稱、參數(shù)清單和傳回類型。 3.重寫方法不能使用比被重寫的方法更嚴(yán)格的存取權(quán)限。

重載的時(shí)候,方法名稱要一樣,但是參數(shù)型別和個(gè)數(shù)不一樣,回傳值型別可以相同也可以不相同。無法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。

11.Collection與Collections的差異是什麼?

Collection是Java集合框架中的基本介面;

Collections是Java集合框架提供的工具類,其中包含了大量用於操作或傳回集合的靜態(tài)方法。

12.Java中多態(tài)的實(shí)作原理

所謂多態(tài),指的就是父類別引用指向子類別對(duì)象,呼叫方法時(shí)會(huì)呼叫子類別的實(shí)作而不是父類別的實(shí)作。多態(tài)的實(shí)現(xiàn)的關(guān)鍵在於「動(dòng)態(tài)綁定」。

13.object中定義了哪些方法?

clone(), equals(), hashCode(), toString(), notify(), notifyAll(),

wait(), finalize(), getClass()

14.Java泛型和型別擦除?

泛型即參數(shù)化類型,在建立集合時(shí),指定集合元素的類型,此集合只能傳入該類型的參數(shù)。類型擦除:java編譯器產(chǎn)生的字節(jié)碼不包含泛型訊息,所以在編譯時(shí)擦除:1.泛型用最頂級(jí)父類替換;2.移除。

15.說出 5 個(gè) JDK 1.8 引進(jìn)的新特性?

Java 8 在Java 歷史上是一個(gè)開創(chuàng)新的版本,下面JDK 8 中5 個(gè)主要的特性:

Lambda 表達(dá)式;允許像物件一樣傳遞匿名函數(shù)Stream API,充分利用現(xiàn)代多核心CPU,可以寫出很簡潔的程式碼;Date 與Time API,最終,有一個(gè)穩(wěn)定、簡單的日期和時(shí)間庫可供你使用擴(kuò)充方法,現(xiàn)在,介面中可以有靜態(tài)、預(yù)設(shè)方法; 重複註解,現(xiàn)在你可以將相同的註解在同一類型上使用多次。

16.java中public,private,protected以及預(yù)設(shè)關(guān)鍵字的存取範(fàn)圍:

Protected可在包內(nèi)及包外子類別訪問,default只能同一包內(nèi)訪問,prvate只能同一類

17. 常用資料結(jié)構(gòu):

集合,線性結(jié)構(gòu)(數(shù)組,佇列,鍊錶和棧),樹形結(jié)構(gòu),圖狀結(jié)構(gòu)

18.Java 中的TreeMap 是採用什麼樹實(shí)現(xiàn)的? (答案)

Java 中的 TreeMap 是使用紅黑樹實(shí)現(xiàn)的。

19. 匿名內(nèi)部類別是什麼?如何存取在其外面定義的變數(shù)?

匿名內(nèi)部類別也就是沒有名字的內(nèi)部類,匿名內(nèi)部類別只能使用一次,它通常用來簡化程式碼編寫。

匿名內(nèi)部類別只能存取外部類別的Final變數(shù). Java 8更聰明:如果局部變數(shù)被匿名內(nèi)部類別訪問,那麼該局部變數(shù)相當(dāng)於自動(dòng)使用了final修飾。

20. 如何建立單例模式?說了雙重檢查,他說不是線程安全的。如何高效的創(chuàng)建一個(gè)線程安全的單例?

一種是透過枚舉,一種是透過靜態(tài)內(nèi)部類別。

21.poll() 方法和 remove() 方法的差別?

poll() 和

remove() 都是從佇列中取出一個(gè)元素,但poll() 在取得元素失敗的時(shí)候會(huì)回傳空,但remove() 失敗的時(shí)候會(huì)拋出異常。

22.寫一段程式碼在遍歷 ArrayList 時(shí)移除一個(gè)元素

使用迭代器。

Iterator itr = list.iterator();

while(itr.hasNext()) {if(…) { itr.remove();} }

JVM


1.JVM如何載入一個(gè)類別的過程,雙親委派模型中有哪些方法

類別加載流程:載入、驗(yàn)證(驗(yàn)證階段作用是確保Class檔案的位元組流包含的資訊符合JVM規(guī)範(fàn),不會(huì)造成JVM危害)、準(zhǔn)備(準(zhǔn)備階段為變數(shù)分配記憶體並設(shè)定類別變數(shù)的初始化)、解析(解析過程是將常數(shù)池內(nèi)的符號(hào)引用替換成直接引用)、初始化。

雙親委派模型中方法:雙親委派是指如果一個(gè)類別收到了類別載入的請(qǐng)求,不會(huì)自己先嘗試加載,先找父類別載入器去完成。當(dāng)頂層啟動(dòng)類別載入器表示無法載入這個(gè)類別的時(shí)候,子類別才會(huì)嘗試自己去載入。當(dāng)回到最開的發(fā)起者載入器還無法載入時(shí),並不會(huì)往下找,而是拋出ClassNotFound異常。

方法:啟動(dòng)(Bootstrap)類別載入器,標(biāo)準(zhǔn)擴(kuò)充(Extension)類別載入器,應(yīng)用程式類別載入器(Application ),上下文(Custom)類別載入器。意義是防止記憶體中出現(xiàn)多份相同的字節(jié)碼 。

2.GC演算法(什麼樣的對(duì)象算是可回收對(duì)象,可達(dá)性分析),CMS收集器

jvm是如何判斷一個(gè)物件已經(jīng)變成了可回收的“垃圾”,一般是兩個(gè)方法:引用記數(shù)法和根搜尋演算法。引用記數(shù)法沒辦法解決循環(huán)引用的問題,所以用根搜尋。從一系列的」GC Roots「物件開始向下搜索,搜尋走過的路徑稱為引用鏈。當(dāng)一個(gè)物件到”GC Roots「之間沒有引用鏈時(shí),稱為引用不可達(dá)。引用不可到的物件被認(rèn)為是可回收的物件。

幾種垃圾收集器:1,Serial New/Serial Old(串行),2,Parrallel New (並行),3,Parrallel Scavenge,4,Parrallel Old,5,CMS(CMS收集器是以獲得最短回收停頓時(shí)間為目標(biāo)的收集器,它是一種並發(fā)收集器,採用的是Mark-sweep演算法。),6,G1(是一款並行與並發(fā)收集器,並且可建立可預(yù)測的停頓時(shí)間模型,整體上是基於標(biāo)記清理,局部採用複製)

3.JVM分為哪些區(qū),每一個(gè)區(qū)幹嗎的?

1)方法區(qū)(method):被所有的執(zhí)行緒共用。方法區(qū)包含所有的類別資訊和靜態(tài)變數(shù)。

2)堆(heap):被所有的執(zhí)行緒共享,存放物件實(shí)例以及數(shù)組,Java堆是GC的主要區(qū)域。

3)堆疊(stack):每個(gè)執(zhí)行緒包含一個(gè)堆疊區(qū),堆疊中保存一些局部變數(shù)等。

4)程式計(jì)數(shù)器:是目前執(zhí)行緒執(zhí)行的字節(jié)碼的行指示器。

4.JVM新生代,老年代,持久代,都儲(chǔ)存哪些東西?

持久代主要存放的是Java類別的類別訊息,與垃圾收集要收集的Java物件關(guān)係不大。所有新生成的物件首先都是放在年輕代的,年老代中存放的都是一些生命週期較長的物件。

5.記憶體溢位與記憶體洩漏:

記憶體溢位:程式申請(qǐng)記憶體時(shí),沒有足夠的記憶體,out of memory;記憶體洩漏值垃圾物件無法回收,可以使用memory analyzer工具查看洩漏。

6.進(jìn)程與執(zhí)行緒:

進(jìn)程值運(yùn)行中的程式(獨(dú)立性,動(dòng)態(tài)性,並發(fā)性),執(zhí)行緒指進(jìn)程中的順序執(zhí)行流。差別是:1.進(jìn)程間不共享記憶體 2.創(chuàng)建進(jìn)程進(jìn)行資源分配的代價(jià)要大得多,所以多執(zhí)行緒在高並發(fā)環(huán)境中效率高。

7.序列化與反序列化:

序列化指將java物件轉(zhuǎn)換為位元組序列,反序列化相反。主要是為了java線程間通訊,實(shí)現(xiàn)物件傳遞。只有實(shí)作了Serializable或Externalizable介面類別物件才可被序列化。

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

Java 中,int 型別變數(shù)的長度是固定值,與平臺(tái)無關(guān),都是 32 位元。意思是說,在 32 位元 和 64 位元 的Java 虛擬機(jī)器中,int 類型的長度是相同的。

9.Java 中 WeakReference 與 SoftReference的差異?

Java中一共有四種類型的引用。 StrongReference、 SoftReference、 WeakReference 以及 PhantomReference。

StrongReference 是Java 的預(yù)設(shè)參考實(shí)作, 它會(huì)盡可能長時(shí)間的存活於JVM 內(nèi),當(dāng)沒有任何物件指向它時(shí)將會(huì)被GC回收

WeakReference,顧名思義, 是一個(gè)弱引用, 當(dāng)所引用的物件在

JVM 內(nèi)不再有強(qiáng)引用時(shí), 將被GC回收

雖然WeakReference 與SoftReference 都有利於提高GC 和記憶體的效率,但是WeakReference ,一旦失去最後一個(gè)強(qiáng)引用,就會(huì)被GC 回收,而SoftReference 會(huì)盡可能長的保留引用直到JVM 內(nèi)存不足時(shí)才會(huì)被回收(虛擬機(jī)保證), 這一特性使得

SoftReference 非常適合快取應(yīng)用

10.解釋Java 堆空間及GC?

當(dāng)透過 Java 指令啟動(dòng)

Java 進(jìn)程的時(shí)候,會(huì)為它分配記憶體。記憶體的一部分用於創(chuàng)建堆空間,當(dāng)程式中創(chuàng)建物件的時(shí)候,就從對(duì)空間中分配記憶體。 GC 是 JVM 內(nèi)部的一個(gè)進(jìn)程,回收無效物件的記憶體用於將來的分配。

11.Java 中堆疊和堆疊有什麼不同?

JVM 中堆疊和堆疊屬於不同的記憶體區(qū)域,使用目的也不同。棧常用於保存方法幀和局部變量,而物件總是在堆上分配。棧通常都比堆小,也不會(huì)在多個(gè)執(zhí)行緒之間共享,而堆被整個(gè) JVM 的所有執(zhí)行緒共享。

並發(fā),鎖定


1.volatile關(guān)鍵字,在 Lock

並發(fā)程式設(shè)計(jì)中:原子性問題,可見性問題,有序性問題。

volatile關(guān)鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性??梢娦灾荒鼙WC每次讀取的是最新的值,但是volatile沒辦法保證對(duì)變數(shù)的操作的原子性。在產(chǎn)生的會(huì)變語句中加入Lock關(guān)鍵字和記憶體屏障。

Lock 實(shí)作提供了比使用synchronized 方法和語句可獲得的更廣泛的鎖定操作,它能以更優(yōu)雅的方式處理線程同步問題。用sychronized修飾的方法或語句塊在程式碼執(zhí)行完之後鎖自動(dòng)釋放,而用Lock需要我們手動(dòng)釋放鎖定

2.MYSQL常用優(yōu)化(sql優(yōu)化,表結(jié)構(gòu)優(yōu)化等)

SQL最佳化、表機(jī)構(gòu)最佳化、索引最佳化、快取參數(shù)最佳化

3.java每改一點(diǎn)都需要重新編譯打包部署,有沒有更好的方法

可以使用熱載入

4.進(jìn)程間通訊有哪幾種方式?

1)管道(Pipe),2)命名管道(named pipe),3)訊號(hào)(Signal),4)訊息(Message)佇列,5)共享內(nèi)存,6)記憶體映射( mapped memory),7)信號(hào)量(semaphore),8)套介面(Socket)

5.Sychronized修飾靜態(tài)方法,鎖定類別本身而不是實(shí)例,非靜態(tài)方法鎖定實(shí)例。

6. 作業(yè)系統(tǒng)在什麼情況下會(huì)死鎖?

所謂死鎖:是指多個(gè)行程在運(yùn)作過程中因爭奪資源而造成的一種僵局。產(chǎn)生的原因:競爭資源:當(dāng)系統(tǒng)中多個(gè)進(jìn)程使用共享資源,且資源不足以滿足需要,會(huì)造成進(jìn)程對(duì)資源的競爭而產(chǎn)生死鎖。進(jìn)程間推進(jìn)的順序非法:請(qǐng)求和釋放資源的順序不當(dāng),也同樣會(huì)導(dǎo)致產(chǎn)生進(jìn)程死鎖

7.產(chǎn)生死鎖的四個(gè)條件:

#1.互斥條件(進(jìn)程獨(dú)佔(zhàn)資源)2.請(qǐng)求與保持(進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放) 3.不剝奪條件(進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪) 4.循環(huán)等待(若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)係)

8. 如何理解分散式鎖定?

由於在平時(shí)的工作中,線上伺服器是分散式多臺(tái)部署的,經(jīng)常會(huì)面臨解決分散式場景下資料一致性的問題,那麼就要利用分散式鎖定來解決這些問題。

9. 執(zhí)行緒同步與阻塞的關(guān)係?同步一定阻塞嗎?阻塞一定同步嗎?

執(zhí)行緒同步與否 跟 阻塞非阻塞沒關(guān)係,同步是個(gè)過程,阻塞是執(zhí)行緒的一種狀態(tài)。多個(gè)執(zhí)行緒操作共享變數(shù)時(shí)可能會(huì)出現(xiàn)競爭。這時(shí)需要同步來防止兩個(gè)以上的執(zhí)行緒同時(shí)進(jìn)入臨界區(qū)內(nèi),在這個(gè)過程中後進(jìn)入臨界區(qū)的執(zhí)行緒將會(huì)阻塞,等待先進(jìn)入的執(zhí)行緒走出臨界區(qū)。

10. 同步和非同步有什麼不同?

同步和非同步最大的差別就在於。一個(gè)需要等待,一個(gè)不需要等待。同步可以避免出現(xiàn)死鎖,讀取髒數(shù)據(jù)的發(fā)生,一般共享某一資源的時(shí)候用,如果每個(gè)人都有修改權(quán)限,同時(shí)修改一個(gè)文件,有可能使一個(gè)人讀取另一個(gè)人已經(jīng)刪除的內(nèi)容,就會(huì)出錯(cuò),同步就會(huì)依照順序來修改。

11. 執(zhí)行緒池

根據(jù)系統(tǒng)本身的環(huán)境情況,有效的限制執(zhí)行緒的數(shù)量,使得運(yùn)行效果達(dá)到最佳。執(zhí)行緒主要是透過控制執(zhí)行的執(zhí)行緒的數(shù)量,超出數(shù)量的執(zhí)行緒排隊(duì)等候,等待有任務(wù)執(zhí)行完畢,再從佇列最前面取出任務(wù)執(zhí)行

12. 如何呼叫 wait()方法?使用 if 區(qū)塊還是循環(huán)?為什麼?

wait() 方法應(yīng)該在循環(huán)調(diào)用,因?yàn)楫?dāng)線程獲取到 CPU 開始執(zhí)行的時(shí)候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會(huì)更好。

wait(),notify()和notifyall()方法是java.lang.Object類別為執(zhí)行緒提供的實(shí)作執(zhí)行緒間通訊的同步控制方法。等待或喚醒

13. 實(shí)作執(zhí)行緒的幾種方法

(1)繼承Thread類,重寫run函數(shù)

(2)實(shí)現(xiàn)Runnable接口,重寫run函數(shù)

(3)實(shí)作Callable接口,重寫call函數(shù)

14. 什麼是多執(zhí)行緒環(huán)境下的偽共享(false sharing)?

偽共享是多執(zhí)行緒系統(tǒng)(每個(gè)處理器有自己的局部快?。┲幸粋€(gè)眾所周知的效能問題。快取系統(tǒng)中是以快取行(cache line)為單位儲(chǔ)存的。快取行是2的整數(shù)冪個(gè)連續(xù)位元組,一般為32-256個(gè)位元組。最常見的快取行大小是64個(gè)位元組。當(dāng)多執(zhí)行緒修改互相獨(dú)立的變數(shù)時(shí),如果這些變數(shù)共享同一個(gè)快取行,就會(huì)無意中影響彼此的效能,這就是偽共享。

網(wǎng)路、資料庫


1.TCP如何保證可靠傳輸?三次握手過程?

在TCP的連線中,資料流必須以正確的順序送達(dá)對(duì)方。 TCP的可靠性是透過順序編號(hào)和確認(rèn)(ACK)來實(shí)現(xiàn)的。 TCP 連線是透過三次握手進(jìn)行初始化的。三次握手的目的是同步連接雙方的序號(hào)和確認(rèn)號(hào)並交換 TCP 視窗大小資訊。第一次是客戶端發(fā)起連線;第二次表示伺服器收到了客戶端的請(qǐng)求;第三次表示客戶端收到了伺服器的回饋。

2. Linux下你常用的指令有哪些?

1. cd指令用來改變所在目錄。 cd / 轉(zhuǎn)到根目錄中cd ~ 轉(zhuǎn)到使用者目錄下

2. ls指令用來查看目錄的內(nèi)容。

3. cp指令用來拷貝檔案 cp

4.mv指令 mv t.txt Document 把檔案t.txt 移到目錄Document。

3. 常用的hash演算法有哪些?

1.加法hash:所謂的加法Hash就是把輸入元素一個(gè)一個(gè)的加起來構(gòu)成最後的結(jié)果。

2.位元運(yùn)算hash:這類型Hash函數(shù)透過利用各種位元運(yùn)算(常見的是移位和異或)來充分的混合輸入元素

3.乘法hash:33 *hash key.charAt(i)

4. 什麼是一致性雜湊?

設(shè)計(jì)目標(biāo)是為了解決因特網(wǎng)中的熱點(diǎn)(Hot spot)問題,一致性hash演算法提出了在動(dòng)態(tài)變化的Cache環(huán)境中,判定哈希演算法好壞的四個(gè)定義:1 、平衡(Balance) 2、單調(diào)性(Monotonicity) 3、分散性(Spread) 4、負(fù)載(Load)

5. 資料庫中的範(fàn)式有哪些?

第一範(fàn)式----資料庫中的表(所有欄位值)都是不可分割的原子資料項(xiàng)。

第二範(fàn)式----資料庫表中的每一列都和主鍵相關(guān),而不能只和主鍵的某一部分相關(guān)。

第三範(fàn)式----資料庫表中每一列資料都和主鍵直接相關(guān),不能間接相關(guān)。範(fàn)式是為了減小資料冗餘。

6. 資料庫中的索引的結(jié)構(gòu)?什麼情況下適合建索引?

資料庫中索引的結(jié)構(gòu)是一種排序的資料結(jié)構(gòu),資料庫索引是透過B樹和變形的B 樹實(shí)現(xiàn)的。什麼情況下不適合建立索引:1.對(duì)於在查詢過程中很少使用或參考的列;對(duì)於那些只有很少資料值的列;對(duì)於那些定義為image,text和bit資料類型的列;當(dāng)修改效能遠(yuǎn)大於檢索效能。

根據(jù)系統(tǒng)本身的環(huán)境狀況,有效的限制執(zhí)行緒的數(shù)量,使得運(yùn)行效果達(dá)到最佳。線程主要是透過控制執(zhí)行的線程的數(shù)量,超出數(shù)量的線程排隊(duì)等候,等待有任務(wù)執(zhí)行完畢,再從隊(duì)列最前面取出任務(wù)執(zhí)行

7. concurrent包下面,都用過什麼?

java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.lock

8. 常用的資料庫有哪些? redis用過嗎?

MySQL、SQL Server、Oracle資料庫。

9. 你知道的開源協(xié)定有哪些?

GPL(GNU General Public License) :GNU通用公共授權(quán)協(xié)議

LGPL (GNU Lesser General Public License) :GNU寬通用公共授權(quán)協(xié)議

BSD

(Berkeley Software Distribution) :柏克萊軟體分發(fā)授權(quán)協(xié)議

MIT(Massachusetts Institute of Technology):MIT之名源自麻省理工學(xué)院

Apache (Apache License ) :Apache許可協(xié)議

MPL (Mozilla Public License) :Mozilla公共授權(quán)協(xié)議

10. 在表單提交中,get和post區(qū)別

1.get從伺服器取得訊息,post傳送訊息

2.get傳送資料量比較小,post可以比較大

3.get安全比較低

#11. TCP 協(xié)定與UDP 協(xié)定有什麼不同? (answer答案)

TCP(Tranfer Control Protocol)的縮寫,是一種面向連接的保證傳輸?shù)膮f(xié)議,在傳輸資料流前,雙方會(huì)先建立一條虛擬的通訊道。可以很少差錯(cuò)傳輸資料。

UDP(User DataGram Protocol)的縮寫,是一種無連接的協(xié)議,使用UDP傳輸資料時(shí),每個(gè)資料段都是一個(gè)獨(dú)立的信息,包括完整的來源位址和目的地,在網(wǎng)路上以任何可能的路徑傳到目的地,因此,能否到達(dá)目的地,以及到達(dá)目的地的時(shí)間和內(nèi)容的完整性都不能保證。

所以TCP必UDP多了建立連線的時(shí)間。相對(duì)UDP而言,TCP具有更高的安全性和可靠性。

TCP協(xié)議傳輸?shù)拇笮〔幌拗?,一旦連接被建立,雙方可以按照一定的格式傳輸大量的數(shù)據(jù),而UDP是一個(gè)不可靠的協(xié)議,大小有限制,每次不能超過64K

以上是2020年JAVA最常見面試題彙總(收藏)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
面試官:Spring Aop 常見註解和執(zhí)行順序 面試官:Spring Aop 常見註解和執(zhí)行順序 Aug 15, 2023 pm 04:32 PM

你一定知道 Spring , 那說說 Aop 的去全部通知順序, Spring Boot 或 Spring Boot 2 對(duì) aop 的執(zhí)行順序影響?說說你在 AOP 中遇到的那些坑?

某團(tuán)面試:如果線上遇到了OOM,該如何檢查?如何解決?哪些方案? 某團(tuán)面試:如果線上遇到了OOM,該如何檢查?如何解決?哪些方案? Aug 23, 2023 pm 02:34 PM

OOM 意味著程式存在漏洞,可能是程式碼或 JVM 參數(shù)配置引起的。這篇文章跟讀者聊聊,Java 進(jìn)程觸發(fā)了 OOM 後如何排查。

餓了麼筆試題,看似簡單,難倒一批人 餓了麼筆試題,看似簡單,難倒一批人 Aug 24, 2023 pm 03:29 PM

在很多公司的筆試題中,千萬別小看,都是有坑的,一不小心自己就掉進(jìn)去了。遇到這種關(guān)於循環(huán)的筆試題,建議,自己冷靜思考,一步一步來。

上週,XX保險(xiǎn)面試,涼了! ! ! 上週,XX保險(xiǎn)面試,涼了! ! ! Aug 25, 2023 pm 03:44 PM

上週,一位群組裡的朋友去平安保險(xiǎn)面試了,結(jié)果有些遺憾,蠻可惜的,但希望你不要?dú)怵H,正如你所說的,面試中遇到的問題,基本上都是可以通過背面試題解決的,所以請(qǐng)加油!

5道String面試題,能全答對(duì)的人不到10%! (附答案) 5道String面試題,能全答對(duì)的人不到10%! (附答案) Aug 23, 2023 pm 02:49 PM

這篇來看看 Java String類別的 5 題面試題,這五題,我自己在面試過程中親身經(jīng)歷過幾題目,本篇就帶你了解這些題的答案為什麼是這樣。

小白也能與BAT面試官對(duì)線:CAS 小白也能與BAT面試官對(duì)線:CAS Aug 24, 2023 pm 03:09 PM

Java並發(fā)程式設(shè)計(jì)系列番外篇C A S(Compare and swap),文章風(fēng)格依然是圖文並茂,簡單易懂,讓讀者們也能與面試官瘋狂對(duì)線。

幾乎所有Java面試都會(huì)問到的問題:說ArrayList和LinkedList的差別 幾乎所有Java面試都會(huì)問到的問題:說ArrayList和LinkedList的差別 Jul 26, 2023 pm 03:11 PM

Java的資料結(jié)構(gòu)是面試考察的重點(diǎn),只要參與Java面試的同學(xué)相信都有所體會(huì)。面試官問這類問題的時(shí)候往往是想檢視你是否研究過Java中常用資料類型的底層結(jié)構(gòu),而不是只是簡單的停留在"會(huì)使用"的層次。

面試官:說一下類別載入的過程(10張圖解) 面試官:說一下類別載入的過程(10張圖解) Aug 23, 2023 pm 03:05 PM

當(dāng)我們要使用一個(gè)類別的時(shí)候,要透過ClassLoader將類別載入到記憶體中。

See all articles