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