2019年JAVA最常見(jiàn)面試題匯總

文末福利出沒(méi)J蘖蕖J候选霉涨!

java基礎(chǔ)以及多個(gè)“比較”

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

在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort惫周,而在Java 7中尘惧,內(nèi)部實(shí)現(xiàn)換成了TimSort,其對(duì)對(duì)象間比較的實(shí)現(xiàn)要求更加嚴(yán)格

2.hashMap原理递递,java8做的改變

從結(jié)構(gòu)實(shí)現(xiàn)來(lái)講喷橙,HashMap是數(shù)組+鏈表+紅黑樹(shù)(JDK1.8增加了紅黑樹(shù)部分)實(shí)現(xiàn)的。HashMap最多只允許一條記錄的鍵為null登舞,允許多條記錄的值為null贰逾。HashMap非線程安全。ConcurrentHashMap線程安全菠秒。解決碰撞:當(dāng)出現(xiàn)沖突時(shí)疙剑,運(yùn)用拉鏈法,將關(guān)鍵詞為同義詞的結(jié)點(diǎn)鏈接在一個(gè)單鏈表中践叠,散列表長(zhǎng)m言缤,則定義一個(gè)由m個(gè)頭指針組成的指針數(shù)組T,地址為i的結(jié)點(diǎn)插入以T(i)為頭指針的單鏈表中禁灼。Java8中管挟,沖突的元素超過(guò)限制(8),用紅黑樹(shù)替換鏈表弄捕。

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

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

2)是否多線程安全:StringBuilder并沒(méi)有對(duì)方法進(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屬于線程安全級(jí)別的讯檐,但是大多數(shù)情況下不使用Vector羡疗,因?yàn)榫€程安全需要更大的系統(tǒng)開(kāi)銷。

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

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

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

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

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

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

ConcurrentHashMap允許多個(gè)修改操作并發(fā)進(jìn)行,其關(guān)鍵在于使用了鎖分離技術(shù)(一個(gè)Array保存多個(gè)Object身冀,使用這些對(duì)象的鎖作為分離鎖钝尸,get/put時(shí)隨機(jī)使用任意一個(gè))。它使用了多個(gè)鎖來(lái)控制對(duì)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ù)組+單向鏈表加上了紅黑樹(shù)淆储。紅黑樹(shù)是一種特別的二叉查找樹(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ī)訪問(wèn)点额,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)書(shū)鏈表,不支持隨機(jī)訪問(wèn)莺琳。使用下標(biāo)訪問(wèn)一個(gè)元素还棱,ArrayList 的時(shí)間復(fù)雜度是 O(1),而 LinkedList 是 O(n)惭等。LinkedList是雙向鏈表

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

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

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

抽象類是指不允許被實(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í)塔沃,可見(jiàn)性可以大于等于父類中的;而接口實(shí)現(xiàn)類中的接口 方法的可見(jiàn)性只能與接口中相同(public)阳谍。

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

10.描述 Java 中的重載和重寫(xiě)鸽疾?

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

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

重載的時(shí)候,方法名要一樣埠戳,但是參數(shù)類型和個(gè)數(shù)不一樣井誉,返回值類型可以相同也可以不相同。無(wú)法以返回型別作為重載函數(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),指的就是父類引用指向子類對(duì)象屋灌,調(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.泛型用最頂級(jí)父類替換叠蝇;2.移除。

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

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

Lambda 表達(dá)式;允許像對(duì)象一樣傳遞匿名函數(shù) Stream API单芜,充分利用現(xiàn)代多核 CPU蜕该,可以寫(xiě)出很簡(jiǎn)潔的代碼 ;Date 與 Time API洲鸠,最終堂淡,有一個(gè)穩(wěn)定、簡(jiǎn)單的日期和時(shí)間庫(kù)可供你使用 擴(kuò)展方法扒腕,現(xiàn)在绢淀,接口中可以有靜態(tài)、默認(rèn)方法瘾腰; 重復(fù)注解皆的,現(xiàn)在你可以將相同的注解在同一類型上使用多次。

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

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

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

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

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

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

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

匿名內(nèi)部類也就是沒(méi)有名字的內(nèi)部類梗顺,匿名內(nèi)部類只能使用一次,它通常用來(lái)簡(jiǎn)化代碼編寫(xiě)车摄。

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

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

一種是通過(guò)枚舉粟关,一種是通過(guò)靜態(tài)內(nèi)部類疮胖。

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

poll() 和

remove() 都是從隊(duì)列中取出一個(gè)元素闷板,但是 poll() 在獲取元素失敗的時(shí)候會(huì)返回空澎灸,但是 remove() 失敗的時(shí)候會(huì)拋出異常。

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

使用迭代器蛔垢。

Iterator itr = list.iterator();

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

JVM

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

類加載過(guò)程:加載、驗(yàn)證(驗(yàn)證階段作用是保證Class文件的字節(jié)流包含的信息符合JVM規(guī)范鹏漆,不會(huì)給JVM造成危害)巩梢、準(zhǔn)備(準(zhǔn)備階段為變量分配內(nèi)存并設(shè)置類變量的初始化)、解析(解析過(guò)程是將常量池內(nèi)的符號(hào)引用替換成直接引用)艺玲、初始化括蝠。

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

方法:?jiǎn)?dòng)(Bootstrap)類加載器朋譬,標(biāo)準(zhǔn)擴(kuò)展(Extension)類加載器,應(yīng)用程序類加載器(Application )兴垦,上下文(Custom)類加載器徙赢。意義是防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼 。

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

jvm是如何判斷一個(gè)對(duì)象已經(jīng)變成了可回收的“垃圾”,一般是兩個(gè)方法:引用記數(shù)法和根搜索算法钦幔。引用記數(shù)法沒(méi)辦法解決循環(huán)引用的問(wèn)題枕屉,所以用根搜索。從一系列的”GC Roots“對(duì)象開(kāi)始向下搜索鲤氢,搜索走過(guò)的路徑稱為引用鏈搀庶。當(dāng)一個(gè)對(duì)象到”GC Roots“之間沒(méi)有引用鏈時(shí)拐纱,被稱為引用不可達(dá)。引用不可到的對(duì)象被認(rèn)為是可回收的對(duì)象哥倔。

幾種垃圾收集器: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ù)測(cè)的停頓時(shí)間模型,整體上是基于標(biāo)記清理拨与,局部采用復(fù)制)

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

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

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

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

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

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

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

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

內(nèi)存溢出:程序申請(qǐng)內(nèi)存時(shí)唠倦,沒(méi)有足夠的內(nèi)存称鳞,out of memory;內(nèi)存泄漏值垃圾對(duì)象無(wú)法回收稠鼻,可以使用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對(duì)象轉(zhuǎn)化為字節(jié)序列,反序列化相反亚皂。主要是為了java線程間通訊俱箱,實(shí)現(xiàn)對(duì)象傳遞。只有實(shí)現(xiàn)了Serializable或Externalizable接口類對(duì)象才可被序列化灭必。

8.64 位 JVM 中狞谱,int 的長(zhǎng)度是多數(shù)?

Java 中厂财,int 類型變量的長(zhǎng)度是一個(gè)固定值芋簿,與平臺(tái)無(wú)關(guān),都是 32 位璃饱。意思就是說(shuō)与斤,在 32 位 和 64 位 的Java 虛擬機(jī)中,int 類型的長(zhǎng)度是相同的荚恶。

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

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

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

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

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

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

SoftReference 非常適合緩存應(yīng)用

10.解釋 Java 堆空間及 GC悼院?

當(dāng)通過(guò) Java 命令啟動(dòng)

Java 進(jìn)程的時(shí)候伤为,會(huì)為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建堆空間据途,當(dāng)程序中創(chuàng)建對(duì)象的時(shí)候绞愚,就從對(duì)空間中分配內(nèi)存叙甸。GC 是 JVM 內(nèi)部的一個(gè)進(jìn)程,回收無(wú)效對(duì)象的內(nèi)存用于將來(lái)的分配位衩。

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

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

并發(fā)跷睦,鎖

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

并發(fā)編程中:原子性問(wèn)題肋演,可見(jiàn)性問(wèn)題抑诸,有序性問(wèn)題。

volatile關(guān)鍵字能保證可見(jiàn)性爹殊,字能禁止指令重排序蜕乡,但是不能保證原子性」?洌可見(jiàn)性只能保證每次讀取的是最新的值层玲,但是volatile沒(méi)辦法保證對(duì)變量的操作的原子性。在生成的會(huì)變語(yǔ)句中加入Lock關(guān)鍵字和內(nèi)存屏障反症。

Lock 實(shí)現(xiàn)提供了比使用synchronized 方法和語(yǔ)句可獲得的更廣泛的鎖定操作辛块,它能以更優(yōu)雅的方式處理線程同步問(wèn)題。用sychronized修飾的方法或者語(yǔ)句塊在代碼執(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)都需要重新編譯打包部署,有沒(méi)有更好的方法

可以使用熱加載

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

1)管道(Pipe)卿捎,2)命名管道(named pipe),3)信號(hào)(Signal)爵嗅,4)消息(Message)隊(duì)列娇澎,5)共享內(nèi)存,6)內(nèi)存映射(mapped memory)睹晒,7)信號(hào)量(semaphore)趟庄,8)套接口(Socket)

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

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

所謂死鎖:是指多個(gè)進(jìn)程在運(yùn)行過(guò)程中因爭(zhēng)奪資源而造成的一種僵局。產(chǎn)生的原因:競(jìng)爭(zhēng)資源:當(dāng)系統(tǒng)中多個(gè)進(jìn)程使用共享資源猫十,并且資源不足以滿足需要览濒,會(huì)引起進(jìn)程對(duì)資源的競(jìng)爭(zhēng)而產(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ú)占資源)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í)的工作中,線上服務(wù)器是分布式多臺(tái)部署的尤筐,經(jīng)常會(huì)面臨解決分布式場(chǎng)景下數(shù)據(jù)一致性的問(wèn)題汇荐,那么就要利用分布式鎖來(lái)解決這些問(wèn)題。

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

線程同步與否 跟 阻塞非阻塞沒(méi)關(guān)系油昂,同步是個(gè)過(guò)程革娄,阻塞是線程的一種狀態(tài)。多個(gè)線程操作共享變量時(shí)可能會(huì)出現(xiàn)競(jìng)爭(zhēng)秕狰。這時(shí)需要同步來(lái)防止兩個(gè)以上的線程同時(shí)進(jìn)入臨界區(qū)內(nèi)稠腊,在這個(gè)過(guò)程中后進(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ì)按順序來(lái)修改。

11. 線程池

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

12. 如何調(diào)用 wait()方法难礼?使用 if 塊還是循環(huán)娃圆?為什么?

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

wait(),notify()和notifyall()方法是java.lang.Object類為線程提供的用于實(shí)現(xiàn)線程間通信的同步控制方法吧寺。等待或者喚醒

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

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

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

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

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

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

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

1.TCP如何保證可靠傳輸茧泪?三次握手過(guò)程?

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

2. Linux下你常用的命令有哪些顷霹?

1. cd命令用來(lái)改變所在目錄。cd / 轉(zhuǎn)到根目錄中cd ~ 轉(zhuǎn)到用戶目錄下

2. ls命令用來(lái)查看目錄的內(nèi)容宜猜。

3. cp命令用來(lái)拷貝文件cp

4.mv命令 mv t.txt Document 把文件t.txt 移動(dòng)到目錄Document中泼返。

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

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

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

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

4. 什么是一致性哈希绅喉?

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

5. 數(shù)據(jù)庫(kù)中的范式有哪些?

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

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

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

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

數(shù)據(jù)庫(kù)中索引的結(jié)構(gòu)是一種排序的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫(kù)索引是通過(guò)B樹(shù)和變形的B+樹(shù)實(shí)現(xiàn)的在跳。什么情況下不適合建立索引:1.對(duì)于在查詢過(guò)程中很少使用或參考的列枪萄;對(duì)于那些只有很少數(shù)據(jù)值的列;對(duì)于那些定義為image猫妙,text和bit數(shù)據(jù)類型的列瓷翻;當(dāng)修改性能遠(yuǎn)大于檢索性能。

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

7. concurrent包下面沪羔,都用過(guò)什么饥伊?

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

8. 常用的數(shù)據(jù)庫(kù)有哪些?redis用過(guò)嗎琅豆?

9. 你知道的開(kāi)源協(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)的縮寫(xiě)冻押,是一種面向連接的保證傳輸?shù)膮f(xié)議驰贷,在傳輸數(shù)據(jù)流前,雙方會(huì)先建立一條虛擬的通信道洛巢±ㄌ唬可以很少差錯(cuò)傳輸數(shù)據(jù)。

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

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

TCP協(xié)議傳輸?shù)拇笮〔幌拗蒲党坏┻B接被建立,雙方可以按照一定的格式傳輸大量的數(shù)據(jù)挚冤,而UDP是一個(gè)不可靠的協(xié)議况增,大小有限制,每次不能超過(guò)64K训挡。

-THE END-

歡迎大家加入Java高級(jí)架構(gòu)師之路:712477306

本群提供免費(fèi)的面試資料 架構(gòu)視頻?以及大神的解答

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澳骤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子澜薄,更是在濱河造成了極大的恐慌为肮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肤京,死亡現(xiàn)場(chǎng)離奇詭異颊艳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)棋枕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)白修,“玉大人,你說(shuō)我怎么就攤上這事重斑”Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵窥浪,是天一觀的道長(zhǎng)祖很。 經(jīng)常有香客問(wèn)我,道長(zhǎng)寒矿,這世上最難降的妖魔是什么突琳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮符相,結(jié)果婚禮上拆融,老公的妹妹穿的比我還像新娘。我一直安慰自己啊终,他們只是感情好镜豹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蓝牲,像睡著了一般趟脂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上例衍,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天昔期,我揣著相機(jī)與錄音,去河邊找鬼佛玄。 笑死硼一,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梦抢。 我是一名探鬼主播般贼,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奥吩!你這毒婦竟也來(lái)了哼蛆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霞赫,失蹤者是張志新(化名)和其女友劉穎腮介,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體端衰,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萤厅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年橄抹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕味。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡楼誓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出名挥,到底是詐尸還是另有隱情疟羹,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布禀倔,位于F島的核電站榄融,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏救湖。R本人自食惡果不足惜愧杯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞋既。 院中可真熱鬧力九,春花似錦、人聲如沸邑闺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)陡舅。三九已至抵乓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間靶衍,已是汗流浹背灾炭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颅眶,地道東北人咆贬。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像帚呼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子皱蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容