java基礎(chǔ)以及多個“比較”
1.Collections.sort排序內(nèi)部原理
在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,內(nèi)部實現(xiàn)換成了TimSort,其對對象間比較的實現(xiàn)要求更加嚴(yán)格
2.hashMap原理,java8做的改變
從結(jié)構(gòu)實現(xiàn)來講,HashMap是數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現(xiàn)的。HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。
HashMap非線程安全。ConcurrentHashMap線程安全。解決碰撞:當(dāng)出現(xiàn)沖突時,運用拉鏈法,將關(guān)鍵詞為同義詞的結(jié)點鏈接在一個單鏈表中,散列表長m,則定義一個由m個頭指針組成的指針數(shù)組T,地址為i的結(jié)點插入以T(i)為頭指針的單鏈表中。Java8中,沖突的元素超過限制(8),用紅黑樹替換鏈表。
3.String 和 StringBuilder 的區(qū)別
1)可變與不可變:String不可變,每一次執(zhí)行“+”都會新生成一個新對象,所以頻繁改變字符串的情況中不用String,以節(jié)省內(nèi)存。
2)是否多線程安全:StringBuilder并沒有對方法進(jìn)行加同步鎖,所以是非線程安全的。StringBuffer和String均線程安全。
4.Vector 與 Array 的區(qū)別
1)ArrayList在內(nèi)存不夠時默認(rèn)是擴(kuò)展50% + 1個,Vector是默認(rèn)擴(kuò)展1倍。
2)Vector屬于線程安全級別的,但是大多數(shù)情況下不使用Vector,因為線程安全需要更大的系統(tǒng)開銷。
5.HashMap 與 Hashtable 的區(qū)別
1) 歷史原因: Hashtable繼承Dictonary類, HashMap繼承自abstractMap
2) HashMap允許空的鍵值對, 但最多只有一個空對象,而HashTable不允許。
3) HashTable同步,而HashMap非同步,效率上比HashTable要高
6.ConncurrentHashMap和hashtable比較(兩個線程并發(fā)訪問map中同一條鏈,一個線程在尾部刪除,一個線程在前面遍歷查找,問為什么前面的線程還能正確的查找到后面被另一個線程刪除的節(jié)點)
ConcurrentHashMap融合了hashtable和hashmap二者的優(yōu)勢。hashtable是做了同步的,即線程安全,hashmap未考慮同步。所以hashmap在單線程情況下效率較高。hashtable在的多線程情況下,同步操作能保證程序執(zhí)行的正確性。但是hashtable是阻塞的,每次同步執(zhí)行的時候都要鎖住整個結(jié)構(gòu),ConcurrentHashMap正是為了解決這個問題而誕生的,
ConcurrentHashMap允許多個修改操作并發(fā)進(jìn)行,其關(guān)鍵在于使用了鎖分離技術(shù)(一個Array保存多個Object,使用這些對象的鎖作為分離鎖,get/put時隨機(jī)使用任意一個)。它使用了多個鎖來控制對hash表的不同部分進(jìn)行的修改。在JDK 1.6中,有HashEntry結(jié)構(gòu)存在,每次插入將新添加節(jié)點作為鏈的頭節(jié)點(同HashMap實現(xiàn)),而且每次刪除一個節(jié)點時,會將刪除節(jié)點之前的所有節(jié)點拷貝一份組成一個新的鏈,而將當(dāng)前節(jié)點的上一個節(jié)點的next指向當(dāng)前節(jié)點的下一個節(jié)點,從而在刪除以后有兩條鏈存 在,因而可以保證即使在同一條鏈中,有一個線程在刪除,而另一個線程在遍歷,它們都能工作良好,因為遍歷的線程能繼續(xù)使用原有的鏈。
Java8中,采用volatile HashEntry保存數(shù)據(jù),table元素作為鎖;從table數(shù)組+單向鏈表加上了紅黑樹。紅黑樹是一種特別的二叉查找樹,特性為:1.節(jié)點為紅或者黑 2.根節(jié)點為黑 3.葉節(jié)點為黑 4.一節(jié)點為紅,則葉節(jié)點為黑 5.一節(jié)點到其子孫節(jié)點所有路徑上的黑節(jié)點數(shù)目相同。
7.ArrayList與 LinkedList 的區(qū)別?
最明顯的區(qū)別是
ArrrayList 底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,支持隨機(jī)訪問,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)書鏈表,不支持隨機(jī)訪問。使用下標(biāo)訪問一個元素,ArrayList 的時間復(fù)雜度是 O(1),而 LinkedList 是 O(n)。LinkedList是雙向鏈表
8.Java 中,Comparator 與Comparable 有什么不同?
Comparable 接口用于定義對象的自然順序,是排序接口,而 comparator 通常用于定義用戶定制的順序,是比較接口。我們?nèi)绻枰刂颇硞€類的次序,而該類本身不支持排序(即沒有實現(xiàn)Comparable接口),那么我們就可以建立一個“該類的比較器”來進(jìn)行排序。Comparable 總是只有一個,但是可以有多個 comparator 來定義對象的順序。
9.抽象類是什么?它與接口有什么區(qū)別?你為什么要使用過抽象類?
抽象類是指不允許被實例化的類;一個類只能使用一次繼承關(guān)系。但是,一個類卻可以實現(xiàn)多個interface。
abstract class和interface所反映出的設(shè)計理念不同。其實abstract class表示的是"is-a"關(guān)系,interface表示的是"like-a"關(guān)系
實現(xiàn)抽象類和接口的類必須實現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現(xiàn)方法。但在Java8中允許接口中有靜態(tài)默認(rèn)的方法。
接口中定義的變量默認(rèn)是public static final 型,且必須給其初值,所以實現(xiàn)類中不能重新定義,也不能改變其值。抽象類中的變量默認(rèn)是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
子類中實現(xiàn)父類中的抽象方法時,可見性可以大于等于父類中的;而接口實現(xiàn)類中的接口 方法的可見性只能與接口中相同(public)。
用抽象類是為了重用。減少編碼量,降低耦合性。
10.描述 Java 中的重載和重寫?
重載和重寫都允許你用相同的名稱來實現(xiàn)不同的功能,但是重載是編譯時活動,而重寫是運行時活動。你可以在同一個類中重載方法,但是只能在子類中重寫方法。重寫必須要有繼承
重寫:1、在子類中可以根據(jù)需要對從基類中繼承來的方法進(jìn)行重寫。2、重寫的方法和被重寫的方法必須具有相同方法名稱、參數(shù)列表和返回類型。3、重寫方法不能使用比被重寫的方法更嚴(yán)格的訪問權(quán)限。
重載的時候,方法名要一樣,但是參數(shù)類型和個數(shù)不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。
11.Collection與Collections的區(qū)別是什么?
Collection是Java集合框架中的基本接口;
Collections是Java集合框架提供的一個工具類,其中包含了大量用于操作或返回集合的靜態(tài)方法。
12.Java中多態(tài)的實現(xiàn)原理
所謂多態(tài),指的就是父類引用指向子類對象,調(diào)用方法時會調(diào)用子類的實現(xiàn)而不是父類的實現(xiàn)。多態(tài)的實現(xiàn)的關(guān)鍵在于“動態(tài)綁定”。
13.object中定義了哪些方法?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(),
wait(), finalize(), getClass()
14.Java泛型和類型擦除?
泛型即參數(shù)化類型,在創(chuàng)建集合時,指定集合元素的類型,此集合只能傳入該類型的參數(shù)。類型擦除:java編譯器生成的字節(jié)碼不包含泛型信息,所以在編譯時擦除:1.泛型用最頂級父類替換;2.移除。
15.說出 5 個 JDK 1.8 引入的新特性?
Java 8 在 Java 歷史上是一個開創(chuàng)新的版本,下面 JDK 8 中 5 個主要的特性:
Lambda 表達(dá)式;允許像對象一樣傳遞匿名函數(shù) Stream API,充分利用現(xiàn)代多核 CPU,可以寫出很簡潔的代碼 ;Date 與 Time API,最終,有一個穩(wěn)定、簡單的日期和時間庫可供你使用 擴(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ù)組,隊列,鏈表和棧),樹形結(jié)構(gòu),圖狀結(jié)構(gòu)
18.Java 中的 TreeMap 是采用什么樹實現(xiàn)的?(答案)
Java 中的 TreeMap 是使用紅黑樹實現(xiàn)的。
19. 匿名內(nèi)部類是什么?如何訪問在其外面定義的變量?
匿名內(nèi)部類也就是沒有名字的內(nèi)部類,匿名內(nèi)部類只能使用一次,它通常用來簡化代碼編寫。
匿名內(nèi)部類只能訪問外部類的Final變量. Java 8更加智能:如果局部變量被匿名內(nèi)部類訪問,那么該局部變量相當(dāng)于自動使用了final修飾。
20. 如何創(chuàng)建單例模式?說了雙重檢查,他說不是線程安全的。如何高效的創(chuàng)建一個線程安全的單例?
一種是通過枚舉,一種是通過靜態(tài)內(nèi)部類。
21.poll() 方法和 remove() 方法的區(qū)別?
poll() 和
remove() 都是從隊列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會拋出異常。
22.寫一段代碼在遍歷 ArrayList 時移除一個元素
使用迭代器。
Iterator itr = list.iterator();
while(itr.hasNext()) {if(…) { itr.remove();} }
JVM
1.JVM如何加載一個類的過程,雙親委派模型中有哪些方法
類加載過程:加載、驗證(驗證階段作用是保證Class文件的字節(jié)流包含的信息符合JVM規(guī)范,不會給JVM造成危害)、準(zhǔn)備(準(zhǔn)備階段為變量分配內(nèi)存并設(shè)置類變量的初始化)、解析(解析過程是將常量池內(nèi)的符號引用替換成直接引用)、初始化。
雙親委派模型中方法:雙親委派是指如果一個類收到了類加載的請求,不會自己先嘗試加載,先找父類加載器去完成。當(dāng)頂層啟動類加載器表示無法加載這個類的時候,子類才會嘗試自己去加載。當(dāng)回到最開的發(fā)起者加載器還無法加載時,并不會向下找,而是拋出ClassNotFound異常。
方法:啟動(Bootstrap)類加載器,標(biāo)準(zhǔn)擴(kuò)展(Extension)類加載器,應(yīng)用程序類加載器(Application ),上下文(Custom)類加載器。意義是防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼 。
2.GC算法(什么樣的對象算是可回收對象,可達(dá)性分析),CMS收集器
jvm是如何判斷一個對象已經(jīng)變成了可回收的“垃圾”,一般是兩個方法:引用記數(shù)法和根搜索算法。引用記數(shù)法沒辦法解決循環(huán)引用的問題,所以用根搜索。從一系列的”GC Roots“對象開始向下搜索,搜索走過的路徑稱為引用鏈。當(dāng)一個對象到”GC Roots“之間沒有引用鏈時,被稱為引用不可達(dá)。引用不可到的對象被認(rèn)為是可回收的對象。
幾種垃圾收集器:1,Serial New/Serial Old(串行),2,Parrallel New (并行),3,Parrallel Scavenge,4,Parrallel Old,5,CMS(CMS收集器是一個以獲得最短回收停頓時間為目標(biāo)的收集器,它是一種并發(fā)收集器,采用的是Mark-sweep算法。),6,G1(是一款并行與并發(fā)收集器,并且可建立可預(yù)測的停頓時間模型,整體上是基于標(biāo)記清理,局部采用復(fù)制)
3.JVM分為哪些區(qū),每一個區(qū)干嗎的?
1)方法區(qū)(method):被所有的線程共享。方法區(qū)包含所有的類信息和靜態(tài)變量。
2)堆(heap):被所有的線程共享,存放對象實例以及數(shù)組,Java堆是GC的主要區(qū)域。
3)棧(stack):每個線程包含一個棧區(qū),棧中保存一些局部變量等。
4)程序計數(shù)器:是當(dāng)前線程執(zhí)行的字節(jié)碼的行指示器。
4.JVM新生代,老年代,持久代,都存儲哪些東西?
持久代主要存放的是Java類的類信息,與垃圾收集要收集的Java對象關(guān)系不大。所有新生成的對象首先都是放在年輕代的,年老代中存放的都是一些生命周期較長的對象。
5.內(nèi)存溢出和內(nèi)存泄漏:
內(nèi)存溢出:程序申請內(nèi)存時,沒有足夠的內(nèi)存,out of memory;內(nèi)存泄漏值垃圾對象無法回收,可以使用memory analyzer工具查看泄漏。
6.進(jìn)程與線程:
進(jìn)程值運行中的程序(獨立性,動態(tài)性,并發(fā)性),線程指進(jìn)程中的順序執(zhí)行流。區(qū)別是:1.進(jìn)程間不共享內(nèi)存 2.創(chuàng)建進(jìn)程進(jìn)行資源分配的代價要大得多,所以多線程在高并發(fā)環(huán)境中效率高。
7.序列化與反序列化:
序列化指將java對象轉(zhuǎn)化為字節(jié)序列,反序列化相反。主要是為了java線程間通訊,實現(xiàn)對象傳遞。只有實現(xiàn)了Serializable或Externalizable接口類對象才可被序列化。
8.64 位 JVM 中,int 的長度是多數(shù)?
Java 中,int 類型變量的長度是一個固定值,與平臺無關(guān),都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機(jī)中,int 類型的長度是相同的。
9.Java 中 WeakReference 與 SoftReference的區(qū)別?
Java中一共有四種類型的引用。StrongReference、 SoftReference、 WeakReference 以及 PhantomReference。
StrongReference 是 Java 的默認(rèn)引用實現(xiàn), 它會盡可能長時間的存活于 JVM 內(nèi),當(dāng)沒有任何對象指向它時將會被GC回收
WeakReference,顧名思義, 是一個弱引用, 當(dāng)所引用的對象在
JVM 內(nèi)不再有強(qiáng)引用時, 將被GC回收
雖然 WeakReference 與 SoftReference 都有利于提高 GC 和 內(nèi)存的效率,但是 WeakReference ,一旦失去最后一個強(qiáng)引用,就會被 GC 回收,而 SoftReference 會盡可能長的保留引用直到 JVM 內(nèi)存不足時才會被回收(虛擬機(jī)保證), 這一特性使得
SoftReference 非常適合緩存應(yīng)用
10.解釋 Java 堆空間及 GC?
當(dāng)通過 Java 命令啟動
Java 進(jìn)程的時候,會為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建堆空間,當(dāng)程序中創(chuàng)建對象的時候,就從對空間中分配內(nèi)存。GC 是 JVM 內(nèi)部的一個進(jìn)程,回收無效對象的內(nèi)存用于將來的分配。
11.Java 中堆和棧有什么區(qū)別?
JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對象總是在堆上分配。棧通常都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享。
并發(fā),鎖
1.volatile關(guān)鍵字, Lock
并發(fā)編程中:原子性問題,可見性問題,有序性問題。
volatile關(guān)鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性。可見性只能保證每次讀取的是最新的值,但是volatile沒辦法保證對變量的操作的原子性。在生成的會變語句中加入Lock關(guān)鍵字和內(nèi)存屏障。
Lock 實現(xiàn)提供了比使用synchronized 方法和語句可獲得的更廣泛的鎖定操作,它能以更優(yōu)雅的方式處理線程同步問題。用sychronized修飾的方法或者語句塊在代碼執(zhí)行完之后鎖自動釋放,而用Lock需要我們手動釋放鎖
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每改一點都需要重新編譯打包部署,有沒有更好的方法
可以使用熱加載
4.進(jìn)程間通信有哪幾種方式?
1)管道(Pipe),2)命名管道(named pipe),3)信號(Signal),4)消息(Message)隊列,5)共享內(nèi)存,6)內(nèi)存映射(mapped memory),7)信號量(semaphore),8)套接口(Socket)
5.Sychronized修飾靜態(tài)方法,鎖定類本身而不是實例,非靜態(tài)方法鎖定實例。
6. 操作系統(tǒng)什么情況下會死鎖?
所謂死鎖:是指多個進(jìn)程在運行過程中因爭奪資源而造成的一種僵局。產(chǎn)生的原因:競爭資源:當(dāng)系統(tǒng)中多個進(jìn)程使用共享資源,并且資源不足以滿足需要,會引起進(jìn)程對資源的競爭而產(chǎn)生死鎖。進(jìn)程間推進(jìn)的順序非法:請求和釋放資源的順序不當(dāng),也同樣會導(dǎo)致產(chǎn)生進(jìn)程死鎖
7.產(chǎn)生死鎖的四個條件:
1.互斥條件(進(jìn)程獨占資源)2.請求與保持(進(jìn)程因請求資源而阻塞時,對已獲得的資源保持不放) 3.不剝奪條件(進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪) 4.循環(huán)等待(若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系)
8. 如何理解分布式鎖?
由于在平時的工作中,線上服務(wù)器是分布式多臺部署的,經(jīng)常會面臨解決分布式場景下數(shù)據(jù)一致性的問題,那么就要利用分布式鎖來解決這些問題。
9. 線程同步與阻塞的關(guān)系?同步一定阻塞嗎?阻塞一定同步嗎?
線程同步與否 跟 阻塞非阻塞沒關(guān)系,同步是個過程,阻塞是線程的一種狀態(tài)。多個線程操作共享變量時可能會出現(xiàn)競爭。這時需要同步來防止兩個以上的線程同時進(jìn)入臨界區(qū)內(nèi),在這個過程中后進(jìn)入臨界區(qū)的線程將阻塞,等待先進(jìn)入的線程走出臨界區(qū)。
10. 同步和異步有什么區(qū)別?
同步和異步最大的區(qū)別就在于。一個需要等待,一個不需要等待。同步可以避免出現(xiàn)死鎖,讀臟數(shù)據(jù)的發(fā)生,一般共享某一資源的時候用,如果每個人都有修改權(quán)限,同時修改一個文件,有可能使一個人讀取另一個人已經(jīng)刪除的內(nèi)容,就會出錯,同步就會按順序來修改。
11. 線程池
根據(jù)系統(tǒng)自身的環(huán)境情況,有效的限制執(zhí)行線程的數(shù)量,使得運行效果達(dá)到最佳。線程主要是通過控制執(zhí)行的線程的數(shù)量,超出數(shù)量的線程排隊等候,等待有任務(wù)執(zhí)行完畢,再從隊列最前面取出任務(wù)執(zhí)行
12. 如何調(diào)用 wait()方法?使用 if 塊還是循環(huán)?為什么?
wait() 方法應(yīng)該在循環(huán)調(diào)用,因為當(dāng)線程獲取到 CPU 開始執(zhí)行的時候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會更好。
wait(),notify()和notifyall()方法是java.lang.Object類為線程提供的用于實現(xiàn)線程間通信的同步控制方法。等待或者喚醒
13. 實現(xiàn)線程的幾種方法
(1)繼承Thread類,重寫run函數(shù)
(2)實現(xiàn)Runnable接口,重寫run函數(shù)
(3)實現(xiàn)Callable接口,重寫call函數(shù)
14. 什么是多線程環(huán)境下的偽共享(false sharing)?
偽共享是多線程系統(tǒng)(每個處理器有自己的局部緩存)中一個眾所周知的性能問題。緩存系統(tǒng)中是以緩存行(cache line)為單位存儲的。緩存行是2的整數(shù)冪個連續(xù)字節(jié),一般為32-256個字節(jié)。最常見的緩存行大小是64個字節(jié)。當(dāng)多線程修改互相獨立的變量時,如果這些變量共享同一個緩存行,就會無意中影響彼此的性能,這就是偽共享。
網(wǎng)絡(luò)、數(shù)據(jù)庫
1.TCP如何保證可靠傳輸?三次握手過程?
在TCP的連接中,數(shù)據(jù)流必須以正確的順序送達(dá)對方。TCP的可靠性是通過順序編號和確認(rèn)(ACK)來實現(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 移動到目錄Document中。
3. 常用的hash算法有哪些?
1.加法hash:所謂的加法Hash就是把輸入元素一個一個的加起來構(gòu)成最后的結(jié)果。
2.位運算hash:這類型Hash函數(shù)通過利用各種位運算(常見的是移位和異或)來充分的混合輸入元素
3.乘法hash:33*hash + key.charAt(i)
4. 什么是一致性哈希?
設(shè)計目標(biāo)是為了解決因特網(wǎng)中的熱點(Hot spot)問題,一致性hash算法提出了在動態(tài)變化的Cache環(huán)境中,判定哈希算法好壞的四個定義:1、平衡性(Balance) 2、單調(diào)性(Monotonicity) 3、分散性(Spread) 4、負(fù)載(Load)
5. 數(shù)據(jù)庫中的范式有哪些?
第一范式----數(shù)據(jù)庫中的表(所有字段值)都是不可分割的原子數(shù)據(jù)項。
第二范式----數(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+樹實現(xiàn)的。什么情況下不適合建立索引:1.對于在查詢過程中很少使用或參考的列;對于那些只有很少數(shù)據(jù)值的列;對于那些定義為image,text和bit數(shù)據(jù)類型的列;當(dāng)修改性能遠(yuǎn)大于檢索性能。
根據(jù)系統(tǒng)自身的環(huán)境情況,有效的限制執(zhí)行線程的數(shù)量,使得運行效果達(dá)到最佳。線程主要是通過控制執(zhí)行的線程的數(shù)量,超出數(shù)量的線程排隊等候,等待有任務(wù)執(zhí)行完畢,再從隊列最前面取出任務(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ù)流前,雙方會先建立一條虛擬的通信道??梢院苌俨铄e傳輸數(shù)據(jù)。
UDP(User DataGram Protocol)的縮寫,是一種無連接的協(xié)議,使用UDP傳輸數(shù)據(jù)時,每個數(shù)據(jù)段都是一個獨立的信息,包括完整的源地址和目的地,在網(wǎng)絡(luò)上以任何可能的 路徑傳到目的地,因此,能否到達(dá)目的地,以及到達(dá)目的地的時間和內(nèi)容的完整性都不能保證。
所以TCP必UDP多了建立連接的時間。相對UDP而言,TCP具有更高的安全性和可靠性。
TCP協(xié)議傳輸?shù)拇笮〔幌拗疲坏┻B接被建立,雙方可以按照一定的格式傳輸大量的數(shù)據(jù),而UDP是一個不可靠的協(xié)議,大小有限制,每次不能超過64K
Atas ialah kandungan terperinci 2020年JAVA最常見面試題匯總(收藏). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Anda mesti tahu Spring, jadi mari kita bincangkan tentang susunan semua pemberitahuan Aop Bagaimana Spring Boot atau Spring Boot 2 mempengaruhi susunan pelaksanaan aop? Beritahu kami tentang perangkap yang anda hadapi dalam AOP?

OOM bermakna terdapat kelemahan dalam program, yang mungkin disebabkan oleh kod atau konfigurasi parameter JVM. Artikel ini bercakap dengan pembaca tentang cara menyelesaikan masalah selepas proses Java mencetuskan OOM.

Jangan memandang rendah soalan peperiksaan bertulis banyak syarikat Terdapat perangkap dan anda boleh jatuh ke dalamnya secara tidak sengaja. Apabila anda menghadapi soalan ujian bertulis seperti ini tentang kitaran, saya cadangkan anda berfikir dengan tenang dan ambil langkah demi langkah.

Minggu lepas, seorang rakan dalam kumpulan pergi untuk temu bual dengan Ping An Insurance Hasilnya agak kesal, tetapi saya harap anda tidak akan berkecil hati, pada dasarnya semua soalan yang dihadapi temu duga boleh diselesaikan dengan menghafal soalan temuduga Ia telah diselesaikan, jadi sila bekerja keras!

Artikel ini akan melihat 5 soalan temu bual tentang kelas Java String Saya sendiri telah mengalami beberapa daripada lima soalan ini semasa proses temu duga.

Bab tambahan bagi siri pengaturcaraan serentak Java, C A S (Banding dan tukar), masih dalam gaya yang mudah difahami dengan gambar dan teks, membolehkan pembaca berbual gila dengan penemuduga.

Struktur data Java adalah tumpuan temu bual Sesiapa yang telah mengambil bahagian dalam temu bual Java mesti mempunyai pengalaman. Apabila penemuduga bertanya soalan sedemikian, mereka sering ingin menyemak sama ada anda telah mengkaji struktur asas jenis data yang biasa digunakan di Jawa, dan bukannya hanya kekal pada tahap "tahu cara menggunakan".

Apabila kita ingin menggunakan kelas, kita perlu memuatkan kelas ke dalam memori melalui ClassLoader.
