ncs java 成都 面试_成都java工程师面试一般都是哪些问题,基础难不难!
了解了許多學員參加的Java面試,他們表示,面試官提出的基礎性問題還是比較多。從這個突破口切入,Java新手想要成功通過面試,基礎知識方面也需要準備,今天達內成都Java培訓班小編就來給大家分享一些Java基礎面試題!
1.java支持的數據類型有哪些?什么是自動拆裝箱?
基本數據類型:
整型:byte short int long
字符型:char
浮點型:float double
布爾型:boolean
整數默認int,小數默認double,float和long必須加后綴(因為默認double,轉float會損失精度,所以不會自動轉,如果超過了int范圍沒有加L后綴,那么也會報錯)
String類型屬于引用類型,引用類型聲明的變量是指該變量在內存中實際存儲的是一個引用地址,實體在堆中,引用類型包括類,數組,接口等,而包裝類也屬于引用類型,自動裝箱,拆箱就是基本類型和引用類型(此處為包裝類型)間的轉換,而轉換為引用類型的話,就new一個對象,從而可以調用包裝類型中封裝好的方法,方便使用!
2.int 和 Integer 有什么區別 ?
1.int是基本數據類型,Integer的引用數據類型
2.int默認0,Integer默認null
3.int存儲在棧中,Integer存儲在堆中
4.int變量存儲數據原始值,Integer變量存儲的是引用地址
5.Integer通過實例化創建的,是對象!
3.String 和StringBuffer以及StringBuilder的區別
String 字符串常量
StringBuffer 字符串變量(線程安全)
StringBuilder 字符串變量(線程不安全)
字符串常量創建后長度,內容都不可以改變,可以new,也可以直接“abc”這樣給值
字符串變量倍創建后長度,內容都是可以被修改的,只能通過new創建!
4.&和&&的區別?
&&和&都是判斷兩邊表達式是否為真,使用&時,如果左邊為假,那么它還會去驗證右邊,但是使用&&時,如果左邊為假,它就不會驗證右邊了,具有短路的效果,效率比單&高!
5.你能比較一下Java和JavaSciprt嗎?
java:面向對象 需要編譯再進行運行 屬于強類型(編譯時才能確定變量類型)
javascript:基于對象和事件驅動 解釋型語言 弱類型(執行時才能確定變量類型)
6.Java中是如何支持正則表達式操作的?
通過String類中的一些方法,比如matchs(),replaceAll(),replaceFirst(),split()等
7.介紹一下Synchronized鎖,如果用這個關鍵字修飾一個靜態方法,鎖住什么?如果修飾成員方法,鎖住什么?
Syscronized鎖是同步鎖,如果關鍵字修飾靜態方法的話是一個類鎖(當前類的所有線程都必須等待同步線程執行),如果關鍵字修飾成員方法的話是一個對象鎖(當前對象的所有進程必須等待同步進程執行完,釋放鎖)
(靜態方法:可以不用生成實例對象而直接引用)
8.介紹一下Volatile
Volatile關鍵字修飾共享變量,保證其他線程訪問這個變量的時候始終是最新值,也就是Volatile會更新最新值到java主內存中,其他線程使用這個變量的時候會從java主內存中去取得這個變量(非volatiel不具備這個特性,非volatile變量在被某個線程修改之后會被緩存,線程A更新了這個值,線程B讀取到的可能并不是最新值),volatile不具備原子性(讀volatile具備原子性,但volatile變量i的i++操作不具備原子性),這是volatile與synchrozied,lock的最大差異!
9.鎖有了解嘛,說一下Synchronized和lock
java為某個共享資源的同步提供了兩種鎖機制:Synchrozied和lock
二者有以下區別:
1.用法不一樣:在需要同步的對象中加入Synchrozied鎖,Synchrozied既可以加載在方法的前面也可以加載在特定的代碼塊中,括號表示需要鎖的對象,而lock需要顯示的指定起始位置和終止位置,Synchrozied是托管給JVM執行的,而lock的鎖定是通過開發人員手動代碼實現的
2.性能不一樣:jdk5中增加了一個lock接口的實現類ReentrantLock,他們的性能在資源不同的情況下會有很大的不同:在資源競爭不是很激烈的情況下,synchorized的性能要優于ReentrantLock,但是在資源競爭很激烈的情況下,synchoorized的性能會下降很快而ReentrantLock的性能會基本保持不變
3.鎖機制不一樣:synchorized獲得鎖和釋放鎖的方式都在結構中,當獲取多個鎖時間,必須以相反的方式釋放鎖,并且自動解鎖,不會應用出現異常而引發死鎖,而Lock則需要開發人員手動釋放,并且必須在final塊中釋放,否則會引發死鎖
4.靈活性不一樣:比如ABC三個線程,兩個讀文件一個寫文件,synchorized只能依次枷鎖和解鎖,而lock可以讓讀共享,這樣更好,所以后面就引發了鎖優化技術
10.講一講Java里面的final關鍵字怎么用的?
被final修飾的類不能繼承,被final修飾的fan方法不能重寫,被final修飾的變量為常量,值不能改變
11.wait方法底層原理
object中的方法,可以暫停線程,期間會釋放對象鎖,不像sleep方法,線程休眠期間依然持有鎖,wait方法的線程必須調用notify或notifyall方法喚醒線程
比如:當一個線程執行到wait方法時,它就進入到一個和對象相關的等待池中,同時失去對象鎖,當它被一個notify方法喚醒時,等待池中的線程就被放到了鎖池中,該線程從鎖池獲得對象鎖,然后回到wait前的中斷現場
12.Java有哪些特性,舉個多態的例子。
封裝,繼承,多態,多態可以理解為一致類型,不同形態,比如Animal animal=new Dog()
13.String為啥不可變?不可變的優勢在哪里?
因為String類被final修飾,string類的底層數組也是被final修飾的
1.提高字符串常量池的效率和安全,如果你知道一個對象是不可變的,那么拷貝對象的內容時就不用復制它本身而只用復制它的地址,復制地址需要很小的內存,效率也很好
2.對多線程安全,多線程的情況下,一個可變對象的值可能會被多個線程修改造成不可預期的結果,而不可變對象就不存在這個問題
14.請列舉你所知道的Object類的方法。
1.clone:創建并返回此對象的一個副本
2.equals:比較“相等”
3.finalize:當垃圾回收器確定不存在該對象的引用時,由對象的垃圾回收器調用方法
4.getclass:返回它的運行時類
5.hashcode:返回對象的哈希碼
6.notify:喚醒此對象監視器上等待的單個線程(隨機喚醒)
7.notifyall:換線此對象監視器上等待的所有線程
8.tostring:返回對象的字符串表示
9.wait:暫停當前線程(可以設置超時時間)
15.重載和重寫的區別?相同參數不同返回值能重載嗎?
重寫是針對父類和子類的概念,重載是針對一個類中的概念,相同參數不同返回值不可以重載,因為重載必須改變參數列表,否則虛擬機怎么知道要調用哪一個
16.”static”關鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
static關鍵字表明一個成員變量或者成員方法可以在沒有所屬類的實例變量的情況下被訪問
java中static方法不能被覆蓋,因為方法的覆蓋是基于運行時動態綁定的,而static方法是編譯時靜態綁定的,static方法跟類的任何實例都不相關,所以沒有覆蓋這個概念
java中也不可以覆蓋private方法,因為private修飾的變量和方法只能在當前類中使用,任何其他類繼承了該類是訪問不到private變量和方法的
17.類加載機制,雙親委派模型,好處是什么?
類加載機制:JVM把類的數據從class文件加載到內存,并對數據進行校驗,轉換解析和初始化,最終形成可以被JVM直接使用的java類型
雙親委派模型:每次收到類的加載請求時,先將請求委派給父類加載器,如果父類加載器無法完成加載,那么子類嘗試自己加載,這樣使得java類隨著類加載器一起具備了一種帶有優先級的層次關系
18.靜態變量存在哪?
static修飾的,位于全局區
19.講講什么是泛型?
泛型是一種參數化的類型,它的<>里面可以放任何類型,而且不需要強制類型轉化,是多態的一種表現
20.解釋extends 和super 泛型限定符-上界不存下界不取
extends指定上界限,只能傳入本類和子類
super指定下界限,只能傳入本類和父類
總結
以上是生活随笔為你收集整理的ncs java 成都 面试_成都java工程师面试一般都是哪些问题,基础难不难!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创意黑板论文答辩PPT模板
- 下一篇: Shell脚本之正则表达式详解