国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 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í)現(xiàn)換成了TimSort,其對對象間比較的實(shí)現(xiàn)要求更加嚴(yán)格

2.hashMap原理,java8做的改變

從結(jié)構(gòu)實(shí)現(xiàn)來講,HashMap是數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實(shí)現(xiàn)的。HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。

HashMap非線程安全。ConcurrentHashMap線程安全。解決碰撞:當(dāng)出現(xiàn)沖突時(shí),運(yùn)用拉鏈法,將關(guān)鍵詞為同義詞的結(jié)點(diǎn)鏈接在一個(gè)單鏈表中,散列表長m,則定義一個(gè)由m個(gè)頭指針組成的指針數(shù)組T,地址為i的結(jié)點(diǎn)插入以T(i)為頭指針的單鏈表中。Java8中,沖突的元素超過限制(8),用紅黑樹替換鏈表。

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

1)可變與不可變:String不可變,每一次執(zhí)行“+”都會(huì)新生成一個(gè)新對象,所以頻繁改變字符串的情況中不用String,以節(jié)省內(nèi)存。

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

4.Vector 與 Array 的區(qū)別

1)ArrayList在內(nèi)存不夠時(shí)默認(rèn)是擴(kuò)展50% + 1個(gè),Vector是默認(rèn)擴(kuò)展1倍。

2)Vector屬于線程安全級別的,但是大多數(shù)情況下不使用Vector,因?yàn)榫€程安全需要更大的系統(tǒng)開銷。

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

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

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

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

6.ConncurrentHashMap和hashtable比較(兩個(gè)線程并發(fā)訪問map中同一條鏈,一個(gè)線程在尾部刪除,一個(gè)線程在前面遍歷查找,問為什么前面的線程還能正確的查找到后面被另一個(gè)線程刪除的節(jié)點(diǎn))

ConcurrentHashMap融合了hashtable和hashmap二者的優(yōu)勢。hashtable是做了同步的,即線程安全,hashmap未考慮同步。所以hashmap在單線程情況下效率較高。hashtable在的多線程情況下,同步操作能保證程序執(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è)鎖來控制對hash表的不同部分進(jìn)行的修改。在JDK 1.6中,有HashEntry結(jié)構(gòu)存在,每次插入將新添加節(jié)點(diǎn)作為鏈的頭節(jié)點(diǎn)(同HashMap實(shí)現(xiàn)),而且每次刪除一個(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è)線程在遍歷,它們都能工作良好,因?yàn)楸闅v的線程能繼續(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 的區(qū)別?

最明顯的區(qū)別是

ArrrayList 底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,支持隨機(jī)訪問,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)書鏈表,不支持隨機(jī)訪問。使用下標(biāo)訪問一個(gè)元素,ArrayList 的時(shí)間復(fù)雜度是 O(1),而 LinkedList 是 O(n)。LinkedList是雙向鏈表

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

Comparable 接口用于定義對象的自然順序,是排序接口,而 comparator 通常用于定義用戶定制的順序,是比較接口。我們?nèi)绻枰刂颇硞€(gè)類的次序,而該類本身不支持排序(即沒有實(shí)現(xiàn)Comparable接口),那么我們就可以建立一個(gè)“該類的比較器”來進(jìn)行排序。Comparable 總是只有一個(gè),但是可以有多個(gè) comparator 來定義對象的順序。

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

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

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

實(shí)現(xiàn)抽象類和接口的類必須實(shí)現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實(shí)現(xiàn)方法。但在Java8中允許接口中有靜態(tài)默認(rèn)的方法。

接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

子類中實(shí)現(xiàn)父類中的抽象方法時(shí),可見性可以大于等于父類中的;而接口實(shí)現(xiàn)類中的接口 方法的可見性只能與接口中相同(public)。

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

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

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

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

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

11.Collection與Collections的區(qū)別是什么?

Collection是Java集合框架中的基本接口;

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

12.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)綁定”。

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

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

wait(), finalize(), getClass()

14.Java泛型和類型擦除?

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

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

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)、默認(rèn)方法; 重復(fù)注解,現(xiàn)在你可以將相同的注解在同一類型上使用多次。

16.java中public,private,protected以及默認(rèn)關(guān)鍵字的訪問范圍:

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

17. 常用數(shù)據(jù)結(jié)構(gòu):

集合,線性結(jié)構(gòu)(數(shù)組,隊(duì)列,鏈表和棧),樹形結(jié)構(gòu),圖狀結(jié)構(gòu)

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

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

19. 匿名內(nèi)部類是什么?如何訪問在其外面定義的變量?

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

匿名內(nèi)部類只能訪問外部類的Final變量. Java 8更加智能:如果局部變量被匿名內(nèi)部類訪問,那么該局部變量相當(dāng)于自動(dòng)使用了final修飾。

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

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

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

poll() 和

remove() 都是從隊(duì)列中取出一個(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文件的字節(jié)流包含的信息符合JVM規(guī)范,不會(huì)給JVM造成危害)、準(zhǔn)備(準(zhǔn)備階段為變量分配內(nèi)存并設(shè)置類變量的初始化)、解析(解析過程是將常量池內(nèi)的符號引用替換成直接引用)、初始化。

雙親委派模型中方法:雙親委派是指如果一個(gè)類收到了類加載的請求,不會(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)類加載器。意義是防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼 。

2.GC算法(什么樣的對象算是可回收對象,可達(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收集器是一個(gè)以獲得最短回收停頓時(shí)間為目標(biāo)的收集器,它是一種并發(fā)收集器,采用的是Mark-sweep算法。),6,G1(是一款并行與并發(fā)收集器,并且可建立可預(yù)測的停頓時(shí)間模型,整體上是基于標(biāo)記清理,局部采用復(fù)制)

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

1)方法區(qū)(method):被所有的線程共享。方法區(qū)包含所有的類信息和靜態(tài)變量。

2)堆(heap):被所有的線程共享,存放對象實(shí)例以及數(shù)組,Java堆是GC的主要區(qū)域。

3)棧(stack):每個(gè)線程包含一個(gè)棧區(qū),棧中保存一些局部變量等。

4)程序計(jì)數(shù)器:是當(dāng)前線程執(zhí)行的字節(jié)碼的行指示器。

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

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

5.內(nèi)存溢出和內(nèi)存泄漏:

內(nèi)存溢出:程序申請內(nèi)存時(shí),沒有足夠的內(nèi)存,out of memory;內(nèi)存泄漏值垃圾對象無法回收,可以使用memory analyzer工具查看泄漏。

6.進(jìn)程與線程:

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

7.序列化與反序列化:

序列化指將java對象轉(zhuǎn)化為字節(jié)序列,反序列化相反。主要是為了java線程間通訊,實(shí)現(xiàn)對象傳遞。只有實(shí)現(xiàn)了Serializable或Externalizable接口類對象才可被序列化。

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

Java 中,int 類型變量的長度是一個(gè)固定值,與平臺無關(guān),都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機(jī)中,int 類型的長度是相同的。

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

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

StrongReference 是 Java 的默認(rèn)引用實(shí)現(xiàn), 它會(huì)盡可能長時(shí)間的存活于 JVM 內(nèi),當(dāng)沒有任何對象指向它時(shí)將會(huì)被GC回收

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

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

雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內(nèi)存的效率,但是 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ì)為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建堆空間,當(dāng)程序中創(chuàng)建對象的時(shí)候,就從對空間中分配內(nèi)存。GC 是 JVM 內(nèi)部的一個(gè)進(jìn)程,回收無效對象的內(nèi)存用于將來的分配。

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

JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會(huì)在多個(gè)線程之間共享,而堆被整個(gè) JVM 的所有線程共享。

并發(fā),鎖


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

并發(fā)編程中:原子性問題,可見性問題,有序性問題。

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

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

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

SQL優(yōu)化、表機(jī)構(gòu)優(yōu)化、索引優(yōu)化、緩存參數(shù)優(yōu)化

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

可以使用熱加載

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

1)管道(Pipe),2)命名管道(named pipe),3)信號(Signal),4)消息(Message)隊(duì)列,5)共享內(nèi)存,6)內(nèi)存映射(mapped memory),7)信號量(semaphore),8)套接口(Socket)

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

6. 操作系統(tǒng)什么情況下會(huì)死鎖?

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

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

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

8. 如何理解分布式鎖?

由于在平時(shí)的工作中,線上服務(wù)器是分布式多臺部署的,經(jīng)常會(huì)面臨解決分布式場景下數(shù)據(jù)一致性的問題,那么就要利用分布式鎖來解決這些問題。

9. 線程同步與阻塞的關(guān)系?同步一定阻塞嗎?阻塞一定同步嗎?

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

10. 同步和異步有什么區(qū)別?

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

11. 線程池

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

12. 如何調(diào)用 wait()方法?使用 if 塊還是循環(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類為線程提供的用于實(shí)現(xiàn)線程間通信的同步控制方法。等待或者喚醒

13. 實(shí)現(xiàn)線程的幾種方法

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

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

(3)實(shí)現(xiàn)Callable接口,重寫call函數(shù)

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

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

網(wǎng)絡(luò)、數(shù)據(jù)庫


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

在TCP的連接中,數(shù)據(jù)流必須以正確的順序送達(dá)對方。TCP的可靠性是通過順序編號和確認(rèn)(ACK)來實(shí)現(xiàn)的。TCP 連接是通過三次握手進(jìn)行初始化的。三次握手的目的是同步連接雙方的序列號和確認(rèn)號并交換 TCP 窗口大小信息。第一次是客戶端發(fā)起連接;第二次表示服務(wù)器收到了客戶端的請求;第三次表示客戶端收到了服務(wù)器的反饋。

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 移動(dòng)到目錄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. 數(shù)據(jù)庫中的范式有哪些?

第一范式----數(shù)據(jù)庫中的表(所有字段值)都是不可分割的原子數(shù)據(jù)項(xiàng)。

第二范式----數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只和主鍵的某一部分相關(guān)。

第三范式----數(shù)據(jù)庫表中每一列數(shù)據(jù)都和主鍵直接相關(guān),不能間接相關(guān)。范式是為了減小數(shù)據(jù)冗余。

6. 數(shù)據(jù)庫中的索引的結(jié)構(gòu)?什么情況下適合建索引?

數(shù)據(jù)庫中索引的結(jié)構(gòu)是一種排序的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫索引是通過B樹和變形的B+樹實(shí)現(xiàn)的。什么情況下不適合建立索引:1.對于在查詢過程中很少使用或參考的列;對于那些只有很少數(shù)據(jù)值的列;對于那些定義為image,text和bit數(shù)據(jù)類型的列;當(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. 常用的數(shù)據(jù)庫有哪些?redis用過嗎?

MySQL、SQL Server、Oracle數(shù)據(jù)庫。

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

GPL (GNU General Public License) :GNU通用公共許可協(xié)議

LGPL (GNU Lesser General Public License) :GNU寬通用公共許可協(xié)議

BSD

(Berkeley Software Distribution) :伯克利軟件分發(fā)許可協(xié)議

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

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

MPL (Mozilla Public License) :Mozilla公共許可協(xié)議

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

1.get從服務(wù)器獲取信息,post向服務(wù)器傳信息

2.get傳送數(shù)據(jù)量比較小,post可以比較大

3.get安全性比較低

11. TCP 協(xié)議與 UDP 協(xié)議有什么區(qū)別?(answer答案)

TCP(Tranfer Control Protocol)的縮寫,是一種面向連接的保證傳輸?shù)膮f(xié)議,在傳輸數(shù)據(jù)流前,雙方會(huì)先建立一條虛擬的通信道??梢院苌俨铄e(cuò)傳輸數(shù)據(jù)。

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

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

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

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

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系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脫衣機(jī)

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版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
面試官:Spring Aop 常見注解和執(zhí)行順序 面試官:Spring Aop 常見注解和執(zhí)行順序 Aug 15, 2023 pm 04:32 PM

你肯定知道 Spring , 那說說 Aop 的去全部通知順序, Spring Boot 或者 Spring Boot 2 對 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)的筆試題,建議,自己冷靜思考,一步一步來。

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

Java并發(fā)編程系列番外篇C A S(Compare and swap),文章風(fēng)格依然是圖文并茂,通俗易懂,讓讀者們也能與面試官瘋狂對線。

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

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

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

當(dāng)我們要使用一個(gè)類的時(shí)候,要通過ClassLoader將類加載到內(nèi)存中。

See all articles