2019-08-14 網(wǎng)易一面

網(wǎng)易一面

Java基礎(chǔ)

  1. 簡單介紹一下Object中的方法:

    • 用于線程通信的wait涝开、notify和notifyAll方法潮售,說明了各方法的作用;

    • 用于拷貝對象的clone方法碰镜,可以實現(xiàn)深拷貝逃呼;

    • 用于垃圾回收機制中對象在被回收前調(diào)用的finalize方法鳖孤,用于讓對象自我拯救,避免被回收抡笼;

    • 用于判斷對象相等性的equals方法苏揣,默認實現(xiàn)是使用==判斷兩個對象引用指向的地址是否相同;

    然后深入問了equals和hashCode方法的關(guān)系推姻。

  2. 重寫equals方法需要滿足的5個特性(Effective Java中有平匈,寫的時候才tm想起來)?


    • 自反性:對任一引用值x藏古,x.equals(x)的返回值一定返回true增炭;

    • 對稱性:對于任意引用值x,y拧晕,當且僅當y.equals(x)返回true時隙姿,x.equals(y)才返回true;

    • 傳遞性:如果x.equals(y) == true厂捞,y.equals(z) == true输玷,則x.equals(z) == true;

    • 一致性:如果參與比較的對象沒任何改變蔫敲,則對象比較的結(jié)果也不應(yīng)該有任何改變饲嗽;

    • 非空性:對于任意非空引用值x炭玫,x.equals(null)一定返回false奈嘿。


  3. 為什么重寫equals方法,還必須要重寫hashCode方法吞加?

    如果只重寫equals而不重寫hashCode會違反Object.hashCode約定的第二條:相等的對象必須有相等的散列碼裙犹。通常會導致基于散列的集合類無法正常運作尽狠,如HashMap、HashSet和Hashtable叶圃。

  4. 只重寫hashCode而不重寫equals方法可以嗎袄膏?

    (不可以吧。不重寫equals方法掺冠,還是默認的使用==判斷地址是否相同呀沉馆,重寫了hashCode方法又有什么用。)


    沒找到


集合

  1. 如何找到兩個 List 的交集德崭?如何找到兩個 List 的差集斥黑?如何找到兩個 List 的并集?


    求交集:list.retainAll(list2)眉厨;

    求差集:list1.removeAll(list2)锌奴;

    求并集:list1.addAll(list2)。


JVM

  1. 使用class ClassName聲明一個類憾股,不顯式地指明extends Object是怎么保證這個類的基類是 Object 的呢鹿蜀?

    不是默認的嗎?(面試官:是什么機制實現(xiàn)這種效果的服球?)


    沒找到茴恰。《深入理解Java虛擬機》 P231 類加載器機制斩熊?琐簇??


  2. Java中使用的類加載機制是雙親委派機制座享,請闡述一下雙親委派機制婉商?

    如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類渣叛,而是把這個請求委派給父類加載器去完成丈秩,每一個層次的類加載器都是如此,因此所有的類加載請求都應(yīng)該傳送到頂層的啟動類加載器中淳衙,只有當父類加載器反饋自己無法完成這個加載請求時蘑秽,子類加載器才會嘗試自己去加載。

  3. 可以手動編寫代碼來指定使用Bootstrap ClassLoader啟動類加載器來加載類嗎箫攀?為什么不可以肠牲?自己有嘗試著寫過類加載器嗎?


    不可以靴跛。Bootstrap ClassLoader啟動類加載器是由C++實現(xiàn)缀雳,是虛擬機的一部分,啟動加載器無法被Java程序直接引用梢睛,用戶編寫類加載器需要把加載請求委托給引導類加載器時肥印,直接使用null即可识椰,JVM會默認使用啟動類加載器進行加載;而其他的類加載器皆由Java實現(xiàn)深碱、獨立于虛擬機腹鹉,全都繼承自抽象類java.lang.ClassLoader。同時也是為了安全敷硅。


  4. 當你的程序占用CPU過高的時候功咒,你要怎么進行調(diào)試,說一下你的思路绞蹦?

    首先航瞭,當察覺到系統(tǒng)明顯異常的時候,使用top命令查看當前系統(tǒng)資源占用情況坦辟,然后使用jstack命令查看進程內(nèi)部狀態(tài)來定位問題刊侯,然后到源碼中查找問題。


    https://blog.csdn.net/tyjlearning/article/details/82182826

    1. 使用top命令查看系統(tǒng)資源占用情況锉走,定位到占用CPU資源過高的進程ID滨彻;

    2. 通過ps -mp <PID> -o THREAD,tid,time命令查看該進程內(nèi)部的線程信息,tid表示線程ID挪蹭,time表示線程的已運行時間亭饵,定位到進程內(nèi)占用CPU資源過高的線程ID;

      • ps p|-p|--pid <PID>顯示ID為PID的進程信息梁厉;

      • ps -m <PID>顯示ID為PID的進程下所有的線程信息辜羊;

      • ps -mp <PID> -o THREAD,tid,time中的-o THREAD,tid,time用來指定顯示格式。

    3. 通過printf "%x\n" <TID>命令將tid轉(zhuǎn)化為十六進制词顾,方便后續(xù)使用jstack工具查看進程堆棧信息(之所以拿到TID信息八秃,是為了查找方便);

    4. 使用jstack <PID>命令查看進程堆棧信息肉盹;

    5. 最后根據(jù)堆棧信息昔驱,到源碼中排查問題。


  5. 當你的程序創(chuàng)建線程的數(shù)量過多時上忍,你要怎么進行調(diào)試骤肛,說一下你的思路?


    同問題4窍蓝。


多線程

  1. 創(chuàng)建線程有哪些方法腋颠?

    • 實現(xiàn) Runnable 接口,并實現(xiàn) run 方法吓笙,然后將該類作為 new Thread() 的參數(shù)傳入淑玫,調(diào)用 Thread 類的 start 方法來實際創(chuàng)建一個線程;

    • 繼承 Thread 類,并重寫 run 方法混移, 然后調(diào)用該類的 start 方法來實際創(chuàng)建一個線程;

    • 實現(xiàn) Callable 接口侮穿,并重寫 call 方法( 該方法可以讓我們在執(zhí)行完任務(wù)之后獲取執(zhí)行結(jié)果歌径,通過 FutureTask 的 get 方法獲得該結(jié)果),然后將該類作為 new FutureTask() 的參數(shù)傳入亲茅,再將得到的 FutureTask 作為new Thread()的參數(shù)傳入 回铛,調(diào)用 Thread 類的 start 方法實際創(chuàng)建一個線程。

  2. 線程池可以幫助我們避免頻繁地創(chuàng)建銷毀線程帶來必要的開銷克锣。Java 實現(xiàn)了哪幾種線程池茵肃?闡述一下他們的應(yīng)用場景?

    • SingleThreadExecutor 創(chuàng)建一個單線程化的線程池袭祟,它只能創(chuàng)建唯一的一個工作線程(搭配無界隊列)來執(zhí)行任務(wù)验残,在需要保證任務(wù)按照指定順序(FIFO、LIFO和優(yōu)先級)執(zhí)行的場景中使用巾乳;

    • FixedThreadPool 創(chuàng)建一個定容線程池您没,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待胆绊,適用于系統(tǒng)資源有限或者同一時間段內(nèi)任務(wù)執(zhí)行數(shù)有限制的場景氨鹏;

    • CachedThreadPool 創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要压状,可靈活回收空閑線程仆抵,若無可回收線程,則新建線程种冬,適用于執(zhí)行時間短并且數(shù)量多的場景镣丑;

    • ScheduledThreadPool 創(chuàng)建一個定長線程池,支持定時和周期性任務(wù)執(zhí)行娱两,適用于定時和周期性執(zhí)行任務(wù)的場景传轰。

  3. 當線程池和阻塞隊列中都不能容納更多的線程時,需要使用飽和策略機制來處理后續(xù)提交的任務(wù)谷婆,請問飽和策略機制有哪些慨蛙?

    • AbortPolicy 直接拋出異常

    • CallerRunsPolicy 由調(diào)用者所在線程來運行任務(wù)

    • DiscardOldestPolicy 丟棄隊列中末尾的一個任務(wù)赁咙,并執(zhí)行當前任務(wù)

    • DiscardPolicy 不處理胞得,直接丟棄

設(shè)計模式

  1. 介紹一下適配器模式和門面模式(還有代理模式)骂铁?他們各自的應(yīng)用場景滑肉?

    • 門面模式為子系統(tǒng)中的一組接口提供一個高層接口疯坤,簡化系統(tǒng)的使用

      優(yōu)點是低耦合度液,被調(diào)模塊更容易擴展和維護卑硫;簡單易用前域,節(jié)省了調(diào)用者的處理流程,更好地劃分了訪問層次封孙;用戶不知道內(nèi)部實現(xiàn)迹冤,提高了安全性;

      缺點是不符合開閉原則虎忌,如果新增功能泡徙,繼承復用都沒有用,只能修改門面模塊代碼膜蠢;

      適用場景是可以隱藏復雜的實現(xiàn)步驟堪藐,維護舊系統(tǒng)的時候,可以封裝遺留代碼挑围,提供清晰接口礁竞。

    • 適配器模式將一個接口轉(zhuǎn)換成客戶希望的另一個接口,使得原本接口不兼容的類可以協(xié)同工作

      優(yōu)點是將適配器類和目標類解耦杉辙,增加了類的透明性模捂,靈活性拓展性好;

      缺點是Java只支持單繼承蜘矢,所以一個類只能適配一個適配器類枫绅;

      適用場景是當系統(tǒng)的數(shù)據(jù)和行為都正常,只有接口不匹配時硼端,可以使用適配器模式并淋。

    • 代理模式為其他對象提供一種代理以控制對這個對象的訪問,客戶訪問不到這個對象珍昨,可以通過代理間接訪問

      優(yōu)點是協(xié)調(diào)調(diào)用者與被調(diào)用者县耽,實現(xiàn)部分解耦;能夠在代理層對調(diào)用者進行保護镣典;

      缺點是增加代理層兔毙,使得調(diào)用流程復雜,可能出錯兄春,還會導致處理速度變慢澎剥;

      適用場景是遠程訪問,虛擬代理赶舆,以及權(quán)限控制等哑姚。

  2. 介紹一下裝飾模式和代理模式?

    • 裝飾模式可以動態(tài)地增加被裝飾者的行為芜茵;
  3. 介紹一下MVC用了哪些設(shè)計模式叙量?

    • 視圖層和模型層使用了觀察者模式:當模型層的數(shù)據(jù)更新時,視圖層可以及時自動更新九串;

    • 視圖層使用組合模式來嵌套子視圖绞佩;

    • 控制層使用策略模式來根據(jù)需要綁定相應(yīng)的視圖寺鸥。

Spring

  1. Spring中事務(wù)的傳播機制?

    Spring事務(wù)定義了七種傳播行為:


    image.png

數(shù)據(jù)庫

  1. 什么樣的字段適合作為索引品山?

    • 頻繁出現(xiàn)在where條件語句中的字段胆建;

    • 關(guān)聯(lián)字段需要建立索引,例如外鍵字段肘交;

    • 排序字段可以建立索引笆载;

    • 分組字段可以建立索引;

    • 統(tǒng)計字段可以建立索引酸些,如count(), max()等宰译;

  2. 什么樣的字段不能作為索引檐蚜?

    • 數(shù)據(jù)量可以確定比較少(300行以下)的表不需要建立索引魄懂;

    • 不會出現(xiàn)在where條件語句中的字段;

    • 頻繁更新的字段闯第;

    • 數(shù)據(jù)重復且分布比較均勻的字段(唯一性太差的字段)市栗,如性別、真假值咳短;

    • 參與列計算的字段填帽。

  3. 如果一個表中的記錄達到了千萬級別,應(yīng)該采用哪種拆分機制進行拆分咙好?

    隨著表中記錄數(shù)的增大篡腌,查詢的效率會越來越低。應(yīng)該采用水平分表機制來對表的行數(shù)進行拆分勾效,以此來降低查詢時需要讀的數(shù)據(jù)和索引的頁數(shù)嘹悼,同時也可以降低索引的層數(shù),提高查詢效率层宫。

    切分原則:增量區(qū)間杨伙、散列或其他業(yè)務(wù)邏輯。使用哪種切分原則要根據(jù)實際業(yè)務(wù)邏輯判斷:比如對表的訪問多是近期產(chǎn)生的新數(shù)據(jù)萌腿,歷史數(shù)據(jù)訪問較少限匣,可以考慮根據(jù)時間增量把數(shù)據(jù)按照一定時間段(比如每天)切分。如果對表的訪問較均勻毁菱,沒有明顯的熱點區(qū)域米死,則可以考慮用范圍(比如每500w一個表)或普通Hash或一致性Hash來切分。

API設(shè)計

  1. 要實現(xiàn)一個搶紅包的功能贮庞,需要對外提供接口哲身,該如何設(shè)計此接口?

    要多維度考慮贸伐】碧欤考慮安全、性能等等。


    沒找到


總結(jié)與感悟

  1. 對數(shù)據(jù)庫脯丝、Spring等基礎(chǔ)知識點掌握較為薄弱商膊;

  2. 項目較為簡單,沒有什么亮點可以吸引面試官宠进;

  3. 簡歷內(nèi)容過于寬泛晕拆,不利于引導面試官進行提問,結(jié)果就是很容易被問到自己的掌握不好的點材蹬;

  4. 一些復習過的點回答的也不太好实幕,應(yīng)該多看多思考,加深理解堤器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昆庇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闸溃,更是在濱河造成了極大的恐慌整吆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辉川,死亡現(xiàn)場離奇詭異表蝙,居然都是意外死亡,警方通過查閱死者的電腦和手機乓旗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門府蛇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屿愚,你說我怎么就攤上這事汇跨。” “怎么了渺鹦?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵扰法,是天一觀的道長。 經(jīng)常有香客問我毅厚,道長塞颁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任吸耿,我火速辦了婚禮祠锣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咽安。我一直安慰自己伴网,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布妆棒。 她就那樣靜靜地躺著澡腾,像睡著了一般沸伏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上动分,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天毅糟,我揣著相機與錄音,去河邊找鬼澜公。 笑死姆另,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的坟乾。 我是一名探鬼主播迹辐,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼甚侣!你這毒婦竟也來了明吩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤渺绒,失蹤者是張志新(化名)和其女友劉穎贺喝,沒想到半個月后菱鸥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宗兼,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年氮采,在試婚紗的時候發(fā)現(xiàn)自己被綠了殷绍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹊漠,死狀恐怖主到,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躯概,我是刑警寧澤登钥,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站娶靡,受9級特大地震影響牧牢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姿锭,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一塔鳍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呻此,春花似錦轮纫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽放前。三九已至,卻和暖如春糯彬,著一層夾襖步出監(jiān)牢的瞬間犀斋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工情连, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叽粹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓却舀,卻偏偏與公主長得像虫几,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挽拔,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,093評論 1 32
  • 一辆脸、基礎(chǔ)知識:1、JVM螃诅、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,371評論 0 4
  • 整理來自互聯(lián)網(wǎng) 1啡氢,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境术裸,java的開發(fā)工具...
    Ncompass閱讀 1,537評論 0 6
  • 我只想要拉住流年 好好說聲再見 遺憾感謝倘是,都回不去昨天 我只想銘記這瞬間 我們一起走過的光年 六月后,光年成紀念 ...
    懶貓cat閱讀 348評論 0 0
  • NDK編譯時加上 -j參數(shù)袭艺,如 測試后編譯速度至少可以提高一倍
    devzhaoyou閱讀 1,216評論 0 1