日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA面试常考系列二

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA面试常考系列二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?JAVA面試常考系列二

題目一

解釋一下線程和進程

進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源如程序計數器,一組寄存器和棧但是線程可以與同一個進程種其它的線程共享進程的全部資源


題目二

進程與線程有什么區別

1、線程的劃分尺度小于進程,使得多線程程序的并發性高。

2、進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。

3、每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

4、一個進程崩潰后,在保護模式下不會對其它進程產生影響。線程只是一個進程的不同執行路徑,線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉。


題目三

創建線程有幾種不同的方式?

線程的創建方式有下面三種:

1、繼承Thread類(真正意義上的線程類),是Runnable接口的實現。

2、實現Runnable接口,并重寫里面的run方法。

3、使用Executor框架創建線程池。

其中實現Runnable接口這種方式更受歡迎,因為這不需要繼承Thread類。在應用設計中已經繼承了別的對象的情況下,這需要多繼承(而Java不支持多繼承),只能實現接口。同時,線程池也是非常高效的,很容易實現和使用。


題目四

線程的幾種可用狀態分別是什么?

1.新建(new)

新創建了一個線程對象。

2.可運行(runnable)

線程對象創建后,其他線程(比如main線程)調用了該對象的start()方法。該狀態的線程位于可運行線程池中,等待被線程調度選中獲取cpu的使用權。

3.運行(running)

可運行狀態(runnable)的線程獲得了cpu時間片(timeslice)執行程序代碼。

4.阻塞(block)

阻塞狀態是指線程因為某種原因放棄了cpu使用權,也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態,才有 機會再次獲得cpu timeslice轉到運行(running)狀態。阻塞的情況分三種:

a、等待阻塞:運行(running)的線程執行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。

b、同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖 被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。

c、其他阻塞: 運行(running)的線程執行Thread.sleep(long?ms)或t.join()方法或者發出了I/O請求時JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時或者I/O處理完畢時,線程重新轉入可運行(runnable)狀態。

5.死亡(dead)

線程run()、main()方法執行結束,或者因異常退出了run()方法,則該線程結束生命周期。死亡的線程不可再次復生。


題目五

同步方法和同步代碼塊的區別是什么

定義

同步方法是指有synchronized關鍵字修飾的方法。由于java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時,內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處于阻塞狀態。

同步代碼塊是指synchronized關鍵字修飾的語句塊被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步

區別

1、同步方法默認用this或者當前類class對象作為鎖;

2、同步方法作用于整個方法,同步代碼塊作用范圍更小,作用于整個代碼塊

3、同步方法使用關鍵字synchronized修飾方法,而同步代碼塊主要是修飾需要進行同步的代碼,用synchronized(object){代碼內容}進行修飾;?


題目六

在監視器(Monitor)內部,線程同步是如何實現的?

監視器和鎖在Java虛擬機中是一塊使用的。監視器監視一塊同步代碼塊,確保一次只有一個線程執行同步代碼塊。每一個監視器都和一個對象引用相關聯。線程在獲取鎖之前不允許執行同步代碼。


題目七

什么是死鎖(deadlock),產生的條件是什么?

死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象。

死鎖的發生必須具備以下四個必要條件。

1.互斥

互斥條件是指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。

2.請求和保持

請求和保持條件是指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。

3.不剝奪

不剝奪條件是指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4.環路

環路等待條件是指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。


題目八

如何確保個線程可以訪問個資源同時又不導致死鎖?

如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會出現死鎖了。所以為了確保多個線程訪問多個資源同時又不導致死鎖,我們可以指定獲取鎖的順序,并強制線程按照指定的順序獲取鎖。?


題目九

Java集合類框架的基本接口有哪些

Java集合類提供了一套設計良好的支持對一組對象進行操作的接口和類。Java集合類里面最基本的接口有:

Collection:代表一組對象,每一個對象都是它的子元素。

Set:不包含重復元素的Collection。

List:有順序的collection,并且可以包含重復元素。

Map:可以把鍵(key)映射到值(value)的對象,鍵不能重復。

集合類接口指定了一組叫做元素的對象。集合類接口的每一種具體的實現類都可以選擇以它自己的方式對元素進行保存和排序。有的集合類允許重復的鍵,有些不允許。


題目十

為什么集合類沒有實現Cloneable和Serializable接口?

集合類接口指定了一組叫做元素的對象。集合類接口的每一種具體的實現類都可以選擇以它自己的方式對元素進行保存和排序。有的集合類允許重復的鍵,有些不允許。



總結

以上是生活随笔為你收集整理的JAVA面试常考系列二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。