亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java開發實用的面試題有哪些

發布時間:2021-12-22 09:54:21 來源:億速云 閱讀:129 作者:iii 欄目:編程語言

本篇內容介紹了“Java開發實用的面試題有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

  1、進程,線程,協程之間的區別是什么?


  簡而言之,進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,一個進程至少有一個線程。進程在執行過程中擁有獨立的內存單元,而多個線程共享內存資源,減少切換次數,從而效率更高。線程是進程的一個實體,是cpu調度和分派的基本單位,是比程序更小的能獨立運行的基本單位。同一進程中的多個線程之間可以并發執行。


  2、你了解守護線程嗎?它和非守護線程有什么區別


  程序運行完畢,jvm會等待非守護線程完成后關閉,但是jvm不會等待守護線程。守護線程最典型的例子就是GC線程。


  3、什么是多線程上下文切換


  多線程的上下文切換是指CPU控制權由一個已經正在運行的線程切換到另外一個就緒并等待獲取CPU執行權的線程的過程。


  4、創建兩種線程的方式?他們有什么區別?


  通過實現java.lang.Runnable或者通過擴展java.lang.Thread類。相比擴展Thread,實現Runnable接口可能更優.原因有二:
  Java不支持多繼承。因此擴展Thread類就代表這個子類不能擴展其他類。而實現Runnable接口的類還可能擴展另一個類。
  類可能只要求可執行即可,因此繼承整個Thread類的開銷過大。


  5、Thread類中的start()和run()方法有什么區別?


  start()方法被用來啟動新創建的線程,而且start()內部調用了run()方法,這和直接調用run()方法的效果不一樣。當你調用run()方法的時候,只會是在原來的線程中調用,沒有新的線程啟動,start()方法才會啟動新線程。


  6、怎么檢測一個線程是否持有對象監視器?


  Thread類提供了一個holdsLock(Object obj)方法,當且僅當對象obj的監視器被某條線程持有的時候才會返回true,注意這是一個static方法,這意味著”某條線程”指的是當前線程。


  7、Runnable和Callable的區別是什么?


  Runnable接口中的run()方法的返回值是void,它做的事情只是純粹地去執行run()方法中的代碼而已;Callable接口中的call()方法是有返回值的,是一個泛型,和Future、FutureTask配合可以用來獲取異步執行的結果。


  這其實是很有用的一個特性,因為多線程相比單線程更難、更復雜的一個重要原因就是因為多線程充滿著未知性,某條線程是否執行了?某條線程執行了多久?某條線程執行的時候我們期望的數據是否已經賦值完畢?無法得知,我們能做的只是等待這條多線程的任務執行完畢而已。而Callable+Future/FutureTask卻可以方便獲取多線程運行的結果,可以在等待時間太長沒獲取到需要的數據的情況下取消該線程的任務。


  8、你知道哪些垃圾回收算法?


  垃圾回收從理論上非常容易理解,具體的方法有以下幾種:

  1. 標記-清除
  2. 標記-復制
  3. 標記-整理
  4. 分代回收


  8、如何判斷一個對象是否應該被回收


  這就是所謂的對象存活性判斷,常用的方法有兩種:1.引用計數法; 2.對象可達性分析。由于引用計數法存在互相引用導致無法進行GC的問題,所以目前JVM虛擬機多使用對象可達性分析算法。


  10、簡單的解釋一下垃圾回收


  Java 垃圾回收機制最基本的做法是分代回收。內存中的區域被劃分成不同的世代,對象根據其存活的時間被保存在對應世代的區域中。一般的實現是劃分成3個世代:年輕、年老和永久。內存的分配是發生在年輕世代中的。當一個對象存活時間足夠長的時候,它就會被復制到年老世代中。對于不同的世代可以使用不同的垃圾回收算法。進行世代劃分的出發點是對應用中對象存活時間進行研究之后得出的統計規律。一般來說,一個應用中的大部分對象的存活時間都很短。比如局部變量的存活時間就只在方法的執行過程中。基于這一點,對于年輕世代的垃圾回收算法就可以很有針對性。


  11、調用System.gc()會發生什么?


  通知GC開始工作,但是GC真正開始的時間不確定。


  12、64位的JVM當中,int的長度是多少?


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


  12、int和Integer的區別


  Integer是int的包裝類型,在拆箱和裝箱中,二者自動轉換。int是基本類型,直接存數值,而integer是對象,用一個引用指向這個對象。


  14、int 和Integer誰占用的內存更多?


  Integer 對象會占用更多的內存。Integer是一個對象,需要存儲對象的元數據。但是 int 是一個原始類型的數據,所以占用的空間更少。


  15、String, StringBuffer和StringBuilder區別


  String是字符串常量,final修飾:StringBuffer字符串變量(線程安全);


  StringBuilder 字符串變量(線程不安全)。


  16、String和StringBuffer


  String和StringBuffer主要區別是性能:String是不可變對象,每次對String類型進行操作都等同于產生了一個新的String對象,然后指向新的String對象。所以盡量不在對String進行大量的拼接操作,否則會產生很多臨時對象,導致GC開始工作,影響系統性能。


  StringBuffer是對對象本身操作,而不是產生新的對象,因此在有大量拼接的情況下,我們建議使用StringBuffer。
  但是需要注意現在JVM會對String拼接做一定的優化:


  String s=“This is only ”+”simple”+”test”會被虛擬機直接優化成String s=“This is only simple test”,此時就不存在拼接過程。


  17、StringBuffer和StringBuilder


  StringBuffer是線程安全的可變字符串,其內部實現是可變數組。StringBuilder是jdk 1.5新增的,其功能和StringBuffer類似,但是非線程安全。因此,在沒有多線程問題的前提下,使用StringBuilder會取得更好的性能。


  18、什么是編譯器常量?使用它有什么風險?


  公共靜態不可變(public static final )變量也就是我們所說的編譯期常量,這里的 public 可選的。實際上這些變量在編譯時會被替換掉,因為編譯器知道這些變量的值,并且知道這些變量在運行時不能改變。這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值后面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的jar。為了避免這種情況,當你在更新依賴 JAR 文件時,確保重新編譯你的程序。


  19、java當中使用什么類型表示價格比較好?


  如果不是特別關心內存和性能的話,使用BigDecimal,否則使用預定義精度的 double 類型。


  20、如何將byte轉為String


  可以使用 String 接收 byte[] 參數的構造器來進行轉換,需要注意的點是要使用的正確的編碼,否則會使用平臺默認編碼,這個編碼可能跟原來的編碼相同,也可能不同。


  21、可以將int強轉為byte類型么?會產生什么問題?


  我們可以做強制轉換,但是Java中int是32位的而byte是8 位的,所以,如果強制轉化int類型的高24位將會被丟棄,byte 類型的范圍是從-128到128

“Java開發實用的面試題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大连市| 阿图什市| 礼泉县| 上高县| 汾西县| 德州市| 江川县| 怀化市| 巴彦淖尔市| 阿拉善左旗| 海口市| 锡林浩特市| 普格县| 弥勒县| 文昌市| 延吉市| 塘沽区| 隆子县| 巩留县| 石台县| 壤塘县| 灯塔市| 福清市| 增城市| 兴隆县| 沂南县| 台山市| 齐齐哈尔市| 北碚区| 菏泽市| 旌德县| 长丰县| 德惠市| 弥渡县| 始兴县| 安泽县| 娄底市| 塔河县| 洛浦县| 石门县| 怀柔区|