面試(一)

1.Object有多少個函數(shù)?

Object有九個函數(shù):

  • final Class <? extends Object> getClass()返回一個對象的運(yùn)行時類,例如下面的代碼:
    `
    public class ObjectTest<T> extends Object{
    public static void main(String[] args) {
    Object a = new ObjectTest<String>();
    Object b = new ObjectTest<Integer>();
    System.out.println(a.getClass());
    System.out.println(b.getClass());
    System.out.println((new ObjectTest<String>()).getClass());
    System.out.println(a.hashCode());
    System.out.println(b.hashCode());
    }
    }
    返回結(jié)果相同,getClass都是返回ObjectTest,都是相同的。
  • int hashCode:Java程序運(yùn)行期間炬搭,在同一個對象對此調(diào)用此函數(shù)赡麦,必須返回相同值痘拆,前提是equals比較所用信息沒有被修改奄抽。如果equals方法判定兩個對象相等,那么hashCode生成相同的整數(shù)結(jié)果酝枢。如果equals判定不相等,hashCode一定產(chǎn)生不同整數(shù)結(jié)果悍手。Object類定義的hashCode方法確實(shí)會針對不同的對象返回不同值帘睦,一般是通過將該對象的內(nèi)部地址轉(zhuǎn)換為一個整數(shù)來實(shí)現(xiàn)袍患。
  • boolean equals,自反對稱傳遞竣付。
  • Object clone() throws CloneNotSupportedException诡延,必須要將Clonable接口實(shí)現(xiàn)才能調(diào)用,否則拋出異常古胆。Clonable接口本身并無內(nèi)容肆良,只是表明此對象可以使用Clone函數(shù)。
  • toString
  • finalize()方法逸绎,JVM內(nèi)存回收時調(diào)用惹恃,如果子類覆蓋了,對象一定要執(zhí)行一次內(nèi)存回收棺牧。
  • wait 導(dǎo)致當(dāng)前線程等待巫糙,直到該對象的notify或notifyAll被執(zhí)行。即申請持有鎖颊乘。
    synchronized (obj) {
    while (<condition does not hold>)
    obj.wait();
    ... // Perform action appropriate to condition
    }
    該方法必須同步執(zhí)行的参淹,否則會拋出IllegalMonitorStateException。
  • notify 隨機(jī)選擇一個對象疲牵,解除阻塞狀態(tài)承二,告知鎖解除。智能在同步方法或同步方法塊中執(zhí)行纲爸,且調(diào)用者必須持有鎖亥鸠。
  • notifyall 通知所有線程。其余與上者相同识啦。

2.JVM的垃圾回收機(jī)制介紹负蚊?

見第四條OOM發(fā)生。

3.介紹GNU颓哮?操作系統(tǒng)加載家妆?

4.Object的HashCode如果不實(shí)現(xiàn)的話返回值是什么?

由地址轉(zhuǎn)換的hash值冕茅。

1.做了什么項目伤极?了解什么框架?

2.數(shù)據(jù)庫范式定義姨伤?

參考:http://www.cnblogs.com/zhanht/p/5401699.html
參考:http://blog.csdn.net/qingking520/article/details/52937728
第一范式(1NF):屬性(實(shí)體所具有的某一特性)不可分哨坪。
第二范式(2NF):滿足第一范式,并且乍楚,一定要有一個主鍵当编,非主屬性完全依賴于主鍵。一個屬性在候選碼中出現(xiàn)就是主屬性徒溪。與之相對的就是非主屬性忿偷。完全指不是部分金顿,而是全部。
第三范式(3NF):首先是 2NF鲤桥,另外非主鍵列必須直接依賴于主鍵揍拆,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴于非主鍵列 B芜壁,非主鍵列 B 依賴于主鍵的情況礁凡。依賴傳遞。即依賴是唯一的慧妄。
BC范式(BCNF):符合3NF顷牌,并且,主屬性不依賴主屬性塞淹。
第四范式:要求把同一表內(nèi)多對多關(guān)系刪除窟蓝。
第五范式:從最終結(jié)構(gòu)建立原始結(jié)構(gòu)。

3.排序算法饱普?

4.Java內(nèi)存溢出运挫?

簡述下個人思路:JVM運(yùn)行時數(shù)據(jù)區(qū)域包括線程私有的本地方法棧、虛擬機(jī)棧套耕、程序計數(shù)器谁帕,線程共享的方法區(qū)和堆。會發(fā)生OOM的公有本地方法棧(椃肱郏可以動態(tài)擴(kuò)展匈挖,否則StackOverFlowError)嗤栓、虛擬機(jī)棧(椄改埽可以動態(tài)擴(kuò)展)七婴、方法區(qū)(包括方法區(qū)和運(yùn)行時常量池)冈爹、堆(大頭)。
什么時候發(fā)生OOM(主要以堆來闡述)澄耍,當(dāng)堆(新生代奢米,主要是Eden)沒有足夠的內(nèi)存時發(fā)起一次MinorGC(針對新生代油湖,復(fù)制法检激,其余還有標(biāo)記-清楚肴捉、標(biāo)記-整理),使用可達(dá)性分析(Python計數(shù)法)叔收;如果晉升導(dǎo)致老年代滿了每庆,則觸發(fā)一次MajorGC(老年代)。永久代滿了使用FullGC(清理整個空間今穿,包括永久代)。執(zhí)行完了發(fā)現(xiàn)還沒有內(nèi)存伦籍,才OOM蓝晒。

Hotspot虛擬機(jī)分代

5.線程與進(jìn)程的區(qū)別腮出?

線程調(diào)度的單位,進(jìn)程是資源分配的單位芝薇。

6.為什么要序列化胚嘲?什么場景用到?有哪些方法洛二?弊端馋劈?

序列化:將一個對象編碼成一個字節(jié)流,稱作將該對象序列化晾嘶;相反的過程稱為反序列化妓雾。
應(yīng)用場景:對象被序列化后,其編碼就能從一臺虛擬機(jī)傳輸?shù)搅硗庖慌_虛擬機(jī)垒迂,或者存儲到磁盤上械姻。
如何實(shí)現(xiàn):

  • 實(shí)現(xiàn)Serializable接口
    將Java對象根據(jù)屬性值轉(zhuǎn)換為字節(jié)序列,transient。static關(guān)鍵字則沒辦法實(shí)例化机断,舉例(HashMap的modCount)楷拳。場景,持久化吏奸、網(wǎng)絡(luò)傳輸欢揖、進(jìn)程通信、緩存等奋蔚。Serializable實(shí)際上就是用了一個獨(dú)立于你實(shí)現(xiàn)構(gòu)造函數(shù)之外的構(gòu)造函數(shù)去創(chuàng)建
    弊端:1.大端小端2.破壞單例她混。
    付出的代價(隱含了可能的失敗):
  • 如果沒有顯示化聲明私有靜態(tài)的final的long域下的UID旺拉,則系統(tǒng)會更具類的實(shí)現(xiàn)自動生成該標(biāo)識产上,那么,當(dāng)修改類的時候蛾狗,可能造成發(fā)布版本的變化晋涣。
  • 增加了出現(xiàn)Bug和安全漏洞的可能性。通常情況下對象是利用構(gòu)造器來創(chuàng)建的沉桌,序列化機(jī)制是一種語言之外的對象創(chuàng)建機(jī)制谢鹊。因此反序列化具備與其他構(gòu)造器相同的特點(diǎn),由于沒有顯示的構(gòu)造器留凭,很可能導(dǎo)致疏忽構(gòu)造過程的規(guī)約佃扼。
  • 加大測試負(fù)擔(dān)。
  • 盡量不使用自定義序列化形式蔼夜,使用默認(rèn)序列化形式將出很多狀況兼耀,具體詳見《Effective Java》第75條。
  • 序列化植入代碼,引用指向本對象可變的引用瘤运,導(dǎo)致程序發(fā)生不可逆轉(zhuǎn)的變化窍霞,《Effective Java》第76條。
  • 反序列化破壞單例模式拯坟,詳情見《Effective Java》第77條但金。

7.java反射機(jī)制的實(shí)現(xiàn)原理

所謂反射機(jī)制就是java語言運(yùn)行時擁有一項自觀的能力。通過這種能力可以徹底了解自身的情況為下一步的動作做準(zhǔn)備郁季,Java反射機(jī)制的實(shí)現(xiàn)主要借四個類:class冷溃、Constructor、Field梦裂、Method似枕。

反射是指在運(yùn)行時能查看一個類的狀態(tài)及特征,并能進(jìn)行動態(tài)管理的功能塞琼。
反射的應(yīng)用場景:在Java程序中許多對象在運(yùn)行時都會出現(xiàn)兩種類型:編譯時類型和運(yùn)行時類型菠净。編譯時的類型由聲明該對象時使用的類型決定,運(yùn)行時的類型由實(shí)際賦給對象的類型決定
如:Person p =new Student();
編譯時類型為Person彪杉,而運(yùn)行時為Student毅往。
除此之外,程序在運(yùn)行時還可能接收到外部傳入的一個對象派近,該對象的編譯時類型為Object攀唯,但程序又需要調(diào)用該對象運(yùn)行時類型的方法。為了這些問題程序需要在運(yùn)行時發(fā)現(xiàn)對象和類的真實(shí)信息渴丸。然而侯嘀,如果編譯時根本無法預(yù)知該對象和類可能屬于哪些類,程序只依靠運(yùn)行時信息來發(fā)現(xiàn)該對象和類的真實(shí)信息谱轨,此時就必須使用反射戒幔。

7.1 java的類裝載系統(tǒng)與反射

其實(shí)也是一個java類加載和對象初始化過程。

java虛擬機(jī)中有兩種類裝載器:啟動類裝載器和自定義類裝載器土童。前者是jvm的一部分诗茎,后者是java程序的一部分,不同的裝載器放在不同的命名空間中献汗。
反射是以免鏡子敢订,能夠在鏡子中看到這個類中“所有”的東西。
有三種方法可以在程序中獲得class:

  • 使用Class中的forname()靜態(tài)方法獲得class對象罢吃。
  • 得到該類的一個對象使用(Object九大方法之一)getClass獲得楚午。
  • 運(yùn)行時已經(jīng)知道類名,使用類名.class獲得尿招。
    而反射在JVM中的實(shí)現(xiàn)如下:
  • 一矾柜、Class.forName的實(shí)現(xiàn):在JDK中阱驾,可以發(fā)現(xiàn)最終調(diào)用的是native方法forName0(),它在C中調(diào)用的實(shí)際是findClassFromClassLoader()怪蔑,原理與ClassLoader的流程(加載啊易、連接)一樣。
  • 二饮睬、getDeclaredFields0的實(shí)現(xiàn):在JDK源碼中,可以知道class.getDeclaredFields()方法實(shí)際調(diào)用的是native方法getDeclaredFields0()篮奄,它主要實(shí)現(xiàn)步驟如下:
    1.根據(jù)Class結(jié)構(gòu)體信息捆愁,獲取field_count與fields[]字段,這個字段早已在load過程中被放入了
    2.根據(jù)field_count的大小分配內(nèi)存窟却、創(chuàng)建數(shù)組昼丑。
    3.將數(shù)組進(jìn)行forEach循環(huán),通過fields[]中的信息依次創(chuàng)建對象夸赫。
    4.返回數(shù)組指針菩帝。
  • 三、Method.invoke的實(shí)現(xiàn):
    1.創(chuàng)建Frame
    2.如果對象flag為native茬腿,交給native_handler進(jìn)行處理
    3.在frame中執(zhí)行java代碼
    4.彈出Frame
    5.返回執(zhí)行結(jié)果的指針
  • 四呼奢、class.newInstance的實(shí)現(xiàn):
    1.檢測權(quán)限、預(yù)分配空間大小等參數(shù)
    2.創(chuàng)建Object對象切平,并malloc分配空間
    3.通過Method.invoke調(diào)用構(gòu)造函數(shù)(<init>())
    4.返回Object指針
    (tips:java類加載將將.class中的二進(jìn)制流文件轉(zhuǎn)化為方法區(qū)(內(nèi)存)中的Class對象)

7.2 JavaRTTI與反射

RTTI(Run-Time Type Identification握础,通過運(yùn)行時類型識別)的含義就是在運(yùn)行時識別一個對象的類型,其對應(yīng)的類是Class對象悴品,每個java里面的類都對應(yīng)一個Class對象(在編寫并且編譯后)禀综,這個對象被保存在這個類的同名class文件里。
類加載器在類被第一次靜態(tài)調(diào)用(見java類加載)時會把那個對應(yīng)的Class對象加載到內(nèi)存中苔严。
根據(jù)上文可以知道定枷,獲取Class獨(dú)享有三種方法。通過Class對象用戶可以在運(yùn)行時動態(tài)得到大量關(guān)于這個類的信息届氢,包括接口欠窒,父類,方法悼沈,靜態(tài)成員贱迟,甚至是像newInstance()方法這樣的一個實(shí)現(xiàn)“虛擬構(gòu)造器”的一種方式。所謂的虛擬構(gòu)造器絮供,就是聲明“我不知道你的確切類型衣吠,至少在編譯期不知道,但是我就是要正確的創(chuàng)建你的一個對象”壤靶。
RTTI的核心:Class對象缚俏、instanceof關(guān)鍵字、強(qiáng)制類型裝換。
RTTI的限制忧换?顯然它在編譯時必須知道一個非常重要的東西:類名(全類名)
Java中有時候在編譯器為程序生成代碼很久之后才會出現(xiàn)要處理的那個類恬惯,那么這個時候怎么才能處理這個類呢,即在編譯的時候根本無法獲知這個對象所屬的類亚茬。答案就是利用Java的反射機(jī)制酪耳。Java的反射與RTTI的區(qū)別就在于編譯時不需要知道任何事情,匿名對象的信息在運(yùn)行時確定下來就可以刹缝。

8.Java是如何處理整型的溢出和下溢的碗暗?

Java更具類型的大小,將計算結(jié)果中的對應(yīng)低階字節(jié)存儲到對應(yīng)的值里梢夯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末言疗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子颂砸,更是在濱河造成了極大的恐慌噪奄,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件人乓,死亡現(xiàn)場離奇詭異勤篮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撒蟀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門叙谨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人保屯,你說我怎么就攤上這事手负。” “怎么了姑尺?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵竟终,是天一觀的道長。 經(jīng)常有香客問我切蟋,道長统捶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任柄粹,我火速辦了婚禮喘鸟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驻右。我一直安慰自己什黑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布堪夭。 她就那樣靜靜地躺著愕把,像睡著了一般拣凹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恨豁,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天嚣镜,我揣著相機(jī)與錄音,去河邊找鬼橘蜜。 笑死菊匿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的计福。 我是一名探鬼主播捧请,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棒搜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起活箕,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤力麸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后育韩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體克蚂,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年筋讨,在試婚紗的時候發(fā)現(xiàn)自己被綠了埃叭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡悉罕,死狀恐怖赤屋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壁袄,我是刑警寧澤类早,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站嗜逻,受9級特大地震影響涩僻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栈顷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一逆日、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萄凤,春花似錦室抽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽噩死。三九已至,卻和暖如春神年,著一層夾襖步出監(jiān)牢的瞬間已维,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工已日, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垛耳,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓飘千,卻偏偏與公主長得像堂鲜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子护奈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法缔莲,類相關(guān)的語法,內(nèi)部類的語法霉旗,繼承相關(guān)的語法痴奏,異常的語法,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • 父類實(shí)現(xiàn)深拷貝時厌秒,子類如何實(shí)現(xiàn)深度拷貝读拆。父類沒有實(shí)現(xiàn)深拷貝時,子類如何實(shí)現(xiàn)深度拷貝鸵闪。? 深拷貝同淺拷貝的區(qū)別:淺拷...
    JonesCxy閱讀 1,021評論 1 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理檐晕,服務(wù)發(fā)現(xiàn),斷路器蚌讼,智...
    卡卡羅2017閱讀 134,715評論 18 139
  • 加油辟灰!——大栗致自己 行為認(rèn)知一:少即是多 我們在處理家居的時候總是希望整整齊齊,一塵不染篡石。而在公司頭腦風(fēng)暴的時候...
    有杕之杜閱讀 717評論 0 1
  • 比起繪畫的技術(shù)伞矩,筆者筆下的任何一副作品,都像一種沉思夏志。
    夷拖尤閱讀 647評論 1 11