1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【金三銀四】Java并發(fā)編程面試題(2021最新版)

        共 1948字,需瀏覽 4分鐘

         ·

        2021-02-22 18:49

        前言

        多線程和并發(fā)問(wèn)題是Java技術(shù)面試中面試官比較喜歡問(wèn)的問(wèn)題之一。在這里,從面試的角度列出了大部分重要的問(wèn)題,但是你仍然應(yīng)該牢固的掌握J(rèn)ava多線程基礎(chǔ)知識(shí)來(lái)對(duì)應(yīng)日后碰到的問(wèn)題。

        Java并發(fā)編程最全面試題 123道

        一、基礎(chǔ)知識(shí)

        1. 為什么要使用并發(fā)編程

        • 充分利用多核CPU的計(jì)算能力:通過(guò)并發(fā)編程的形式可以將多核CPU的計(jì)算能力發(fā)揮到極致,性能得到提升

        • 方便進(jìn)行業(yè)務(wù)拆分,提升系統(tǒng)并發(fā)能力和性能:在特殊的業(yè)務(wù)場(chǎng)景下,先天的就適合于并發(fā)編程?,F(xiàn)在的系統(tǒng)動(dòng)不動(dòng)就要求百萬(wàn)級(jí)甚至千萬(wàn)級(jí)的并發(fā)量,而多線程并發(fā)編程正是開(kāi)發(fā)高并發(fā)系統(tǒng)的基礎(chǔ),利用好多線程機(jī)制可以大大提高系統(tǒng)整體的并發(fā)能力以及性能。面對(duì)復(fù)雜業(yè)務(wù)模型,并行程序會(huì)比串行程序更適應(yīng)業(yè)務(wù)需求,而并發(fā)編程更能吻合這種業(yè)務(wù)拆分 。

        2. 多線程應(yīng)用場(chǎng)景

        3. 并發(fā)編程有什么缺點(diǎn)

        并發(fā)編程的目的就是為了能提高程序的執(zhí)行效率,提高程序運(yùn)行速度,但是并發(fā)編程并不總是能提高程序運(yùn)行速度的,而且并發(fā)編程可能會(huì)遇到很多問(wèn)題,比如**:內(nèi)存泄漏、上下文切換、線程安全、死鎖**等問(wèn)題。

        4. 并發(fā)編程三個(gè)必要因素是什么?

        并發(fā)編程三要素(線程的安全性問(wèn)題體現(xiàn)在):

        原子性:原子,即一個(gè)不可再被分割的顆粒。原子性指的是一個(gè)或多個(gè)操作要么全部執(zhí)行成功要么全部執(zhí)行失敗。

        可見(jiàn)性:一個(gè)線程對(duì)共享變量的修改,另一個(gè)線程能夠立刻看到。(synchronized,volatile)

        有序性:程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。(處理器可能會(huì)對(duì)指令進(jìn)行重排序)

        出現(xiàn)線程安全問(wèn)題的原因:

        • 線程切換帶來(lái)的原子性問(wèn)題

        • 緩存導(dǎo)致的可見(jiàn)性問(wèn)題

        • 編譯優(yōu)化帶來(lái)的有序性問(wèn)題

        解決辦法:

        • JDK Atomic開(kāi)頭的原子類(lèi)、synchronized、LOCK,可以解決原子性問(wèn)題

        • synchronized、volatile、LOCK,可以解決可見(jiàn)性問(wèn)題

        • Happens-Before 規(guī)則可以解決有序性問(wèn)題

        5. Java 程序中怎么保證多線程的運(yùn)行安全?

        6. 并行和并發(fā)有什么區(qū)別?

        7. 什么是多線程

        多線程:多線程是指程序中包含多個(gè)執(zhí)行流,即在一個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程來(lái)執(zhí)行不同的任務(wù)。

        8. 多線程的好處

        可以提高 CPU 的利用率。在多線程程序中,一個(gè)線程必須等待的時(shí)候,CPU 可以運(yùn)行其它的線程而不是等待,這樣就大大提高了程序的效率。也就是說(shuō)允許單個(gè)程序創(chuàng)建多個(gè)并行執(zhí)行的線程來(lái)完成各自的任務(wù)。

        9. 多線程的劣勢(shì):

        • 線程也是程序,所以線程需要占用內(nèi)存,線程越多占用內(nèi)存也越多;

        • 多線程需要協(xié)調(diào)和管理,所以需要 CPU 時(shí)間跟蹤線程;

        • 線程之間對(duì)共享資源的訪問(wèn)會(huì)相互影響,必須解決競(jìng)用共享資源的問(wèn)題。

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

        進(jìn)程

        一個(gè)在內(nèi)存中運(yùn)行的應(yīng)用程序。每個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間,一個(gè)進(jìn)程可以有多個(gè)線程,比如在Windows系統(tǒng)中,一個(gè)運(yùn)行的xx.exe就是一個(gè)進(jìn)程。

        線程

        進(jìn)程中的一個(gè)執(zhí)行任務(wù)(控制單元),負(fù)責(zé)當(dāng)前進(jìn)程中程序的執(zhí)行。一個(gè)進(jìn)程至少有一個(gè)線程,一個(gè)進(jìn)程可以運(yùn)行多個(gè)線程,多個(gè)線程可共享數(shù)據(jù)。

        線程具有許多傳統(tǒng)進(jìn)程所具有的特征,故又稱(chēng)為輕型進(jìn)程(Light—Weight Process)或進(jìn)程元;而把傳統(tǒng)的進(jìn)程稱(chēng)為重型進(jìn)程(Heavy—Weight Process),它相當(dāng)于只有一個(gè)線程的任務(wù)。在引入了線程的操作系統(tǒng)中,通常一個(gè)進(jìn)程都有若干個(gè)線程,至少包含一個(gè)線程。

        根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是處理器任務(wù)調(diào)度和執(zhí)行的基本單位

        資源開(kāi)銷(xiāo):每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會(huì)有較大的開(kāi)銷(xiāo);線程可以看做輕量級(jí)的進(jìn)程,同一類(lèi)線程共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線程之間切換的開(kāi)銷(xiāo)小。

        包含關(guān)系:如果一個(gè)進(jìn)程內(nèi)有多個(gè)線程,則執(zhí)行過(guò)程不是一條線的,而是多條線(線程)共同完成的;線程是進(jìn)程的一部分,所以線程也被稱(chēng)為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。

        內(nèi)存分配:同一進(jìn)程的線程共享本進(jìn)程的地址空間和資源,而進(jìn)程之間的地址空間和資源是相互獨(dú)立的

        影響關(guān)系:一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,但是一個(gè)線程崩潰整個(gè)進(jìn)程都死掉。所以多進(jìn)程要比多線程健壯。

        執(zhí)行過(guò)程:每個(gè)獨(dú)立的進(jìn)程有程序運(yùn)行的入口、順序執(zhí)行序列和程序出口。但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制,兩者均可并發(fā)執(zhí)行

        1fa3b4d939c259e0b0c06b06a04cc825.webp

        Java并發(fā)編程線程學(xué)習(xí)筆記

        974bee69c6c812dc85a9927ff2f25f6e.webp

        Java并發(fā)編程的藝術(shù)

        6db9e72963020d9035c734d1ff062167.webp

        該資料獲取方式:關(guān)注+轉(zhuǎn)發(fā)后,

        下方掃碼關(guān)注公眾號(hào)加我微信領(lǐng)取【備注:公眾號(hào)】?免費(fèi)領(lǐng)取

        程序員這個(gè)職業(yè)需要我們不斷進(jìn)步,需要我們不斷學(xué)習(xí)新的知識(shí)。

        喜歡小編的文章可以點(diǎn)點(diǎn)關(guān)注哦!

        小編持續(xù)為你分享最新文章 和 福利領(lǐng)取哦



        瀏覽 81
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美三级网 | 操小骚逼操小骚逼操小骚逼 | 在线免费看毛片 | 又大又粗又长又爽视频 | 国产精品亚洲а∨天堂免在线 | 国产—a毛—a毛A免费 | 成人理伦电影无码AV | 三级片影音先锋 | 年轻少妇ass下部精品 | 摸一摸操一操 |