1. 程式人生 > >入我新美大的Java後臺開發面試題總結

入我新美大的Java後臺開發面試題總結

情況 查詢優化 做什麽 工作 我認 人的 方便 xpl 別人

  靜兒最近在總結一些面試題,那是因為做什麽事情都要認真。面試也一樣,靜兒作為新美大金融部門的面試官,負責任的告訴大家,下面的問題回答不上來,面試是過不了的。不過以下絕不是原題,你會發現自己實力不過硬,最終肯定是被問出來的。

  1>如何定位線上服務OOM問題 

2>JVM的GC ROOTS存在於那些地方

3>mysql innodb怎樣做查詢優化

  4>java cas的概念

  下面靜兒就以自己面試的標準簡單回答一下這些題怎樣回答算過關。

  1>如何定位線上服務OOM問題

  因為面試主要是看思路,答案還是其次,那麽要是我回答這個問題。我可能會把整個思路都說出來:Java服務OOM,比較常見的原因是

  ?? 有可能是內存分配確實過小,而正常業務使用了大量內存

    比如jmap -heap命令可以查看新生代老年代的堆內存大小及使用情況,看看是否內存本身分配過小。

  ?? 某一個對象被頻繁申請,卻沒有釋放,內存不斷泄漏,導致內存耗盡

    比如jmap -histo:live 對象顯示存活對象的信息,並按照所占內存大小的排序。因為包含了實例數、所占內存大小、類名,所以很直觀。

  ?? 某一個資源被頻繁申請,系統資源耗盡,例如:不斷創建線程,不斷發起網絡連接  

    可以用pstree、netstat查看進程創建線程數,網絡連接數,如果資源耗盡,也會出現OOM。也可以查看/proc/${PID}/fd 和/proc/${PID}/task,查看句柄詳情和線程數。

  

  2>JVM的GC ROOTS存在於那些地方

  問到這個問題應該是前面一步步引導過來的,如果沒有,在直接回答這個問題之前,最好簡要描述一下JVM的內存結構和根搜索算法(GC ROOTS Tracing)做可達性分析。

  GC Roots的對象包括如下幾種(靜兒來新美大的時候就被我們架構師問過這個問題):

  ?? 虛擬機棧(棧楨中的本地變量表)中的引用的對象

  ?? 方法區中的類靜態屬性引用的對象

  ?? 方法區中的常量引用的對象

  ?? 本地方法棧中JNI的引用的對象

  GC管理的主要區域是Java堆,一般情況下只針對堆進行垃圾回收。方法區、棧和本地方法區不被GC所管理,因而選擇這些區域作為GC ROOTS。被GC ROOTS引用的對象不會被垃圾回收。

  

  3>mysql innodb怎樣做查詢優化

  這個問題的答案就比較多了,各人的心得都是不一樣的。主要考察在工作實踐中的總結和思考能力。最好面試者能在總結的通用答案之後加上實際項目中的使用例子。

  ?? innodb_buffer_pool_size 此參數的作用是緩沖數據和索引,對性能可以產生線性的提高,最大可設置為內存大小的百分之七八十的樣子

  ?? 打開慢查詢日誌,增加參數:log-queries-not-using-indexes,方便把系統中沒有走索引的sql語句全抓出來優化

  ?? 通過explain做查詢分析,看看有沒有用索引,訪問的行數rows

  ?? 關閉skip_name_resolve,減少逆向DNS解析的消耗

  另外還有一些實際寫代碼過程中深入骨髓的,比如數據動靜分離提高query_cache的命中率啦,減少字段冗余,減少查詢次數啦,復雜查詢分解啦,分頁優化啦啥的。

  很多人說面試題和實際開發聯系不大,覺得沒啥用。其實很多活培訓兩個月都是能幹的。人和人之間的差距確實沒有明顯到你能幹我不能幹的程度。但是之前做過一個項目,我和別人一起幹,幹完之後我要修改很多其他人的各種慢查詢問題啦,性能問題啦之類。我看了他們寫的sql,我發現這些sql我會理所當然不那麽用的。因為我在人人的時候就很註意這些方面,我認為是理所當然的,知道這樣影響性能。

  還有就是面試評價好的人實際寫代碼的時候確實出的問題要少,因為他們考慮更全面。很多人不是有意要出bug的,但是確實是不知道啊,不知道要考慮情況A,情況B,不知道JVM底層的實現,所以有可能會產生的意想不到的結果。出了問題了也不知道往哪個方向去想。

  4>java cas的概念

  cas:compare and swap,比較並交換

  java的concurrent包中借助cas實現了區別於synchronouse同步鎖的一種樂觀鎖。

  CAS通過調用JNI的代碼來實現

  

跑題時間:

  這幾年萬聖節都會買南瓜自己做南瓜燈。我給小鮮肉在美國買的西餐刀非常安全,我都是把南瓜洗幹凈,旁邊放一個幹凈鐵盆,讓小鮮肉自己雕刻南瓜燈,我睡覺去。因為我承諾了要用做南瓜燈剩下的邊角料給他做南瓜餅,所以睡覺起來會看到桌子上很幹凈。記得有一年我覺得浪費,把南瓜頂上的蓋也做著吃了,小鮮肉很生氣,我們只好第二天一起去超時重買了一個小貝貝南瓜重做了一個南瓜燈。

  南瓜餅可以直接將南瓜煮熟放糖放面粉做成餅油炸。用牛奶來和面味道更好。我總習慣捏出來各種動物形狀做一盤外焦裏嫩的動物大餐。但是如果是一整個南瓜,那就蒸成9分熟之後和面粉一起用杵搗,搗的時間越長越有彈性。這個工作當然是交給小鮮肉來做的。但是這樣就不好捏成形狀了,只用勺子弄成球下鍋。油鍋開始時是小火,南瓜餅熟的差不多了,再開大點火,外面酥脆,裏面松軟。

  只可惜現在都是很忙,周末也只是辦公間隙裏去給小鮮肉做點小點心。記得原來總是特別清閑,找工作也總是不給自己加壓,說自己不做管理。過著管好自己就可以的生活。有次帶著小鮮肉去華科看牡丹,看到一個姑娘悠閑的躺在長椅上曬太陽。這可不就是原來的自己。悠然的過了那麽多年,告訴自己“有花堪折直須折”,早就做好了準備接受現在的一切,而真的到來的時候,除了慶幸自己想要做的都試過了,還是多少有些傷感。

  男神在我手機上看我的BOSS直聘。我說:“人家老公查媳婦手機都是看看媳婦到底跟誰聊了天,都聊了啥,你看你”。男神漫不經心的說:“對啊,關心啊,所以把你手機沒收了。”然後接著看BOSS直聘。

  別看周末是這樣的,平時我忙的都不回家,也就是周末才回家一趟。每天男神都給我請安,問我是否活著。他最近改了頭像,頭像是東軟的一條小道,因為原來我倆在東軟的時候每天早晨我倆都剛好能在那條小道上打個照面。從那以來,兩個人就是彼此牽掛、彼此信任、一起努力的往前走。奮鬥是很辛苦,如果一個人的話是很難堅持。兩個人相互鼓勵的往前走,想要放棄的時候,總是不忍心讓對方失望,於是就實現了一個又一個的目標。

  男神最近在一路開掛的面試,面試過程中收獲了一打年輕漂亮的獵頭和HR。因為他換工作的理由是:“我想找個離媳婦近的工作,每天接送媳婦上下班。”我相信我家男神的自制力,看到男神的offer薪資秒殺我,我趕緊發個短信問他:“以後你這麽牛逼了,還能每周給我洗衣服嗎?”男神毫不猶豫的回了個:“能”。結果周末回家告訴我我上周的衣服還有幾件沒洗的,讓我有空自己洗吧,我突然覺得天兒咋這麽冷呢。還幻想著勸我家男神來我們新美大,像以前我在人人的時候一樣,每周末來給我收拾工位呢。不來也好,旁邊站著一個女神收割機,我壓力也是有的。

  當一個人站在自己面前,其實自己心裏是很清楚的。誰是合適的,誰是喜歡的。而到底誰是對的人取決於自己的人生規劃。規劃著想要幸福就選合適的,天生為才藝而生的人會選喜歡的。如果來生還是今世的重復,縱然多情要比無情苦。痛苦才是才藝的源泉,經歷過才會感同身受。原來看過一個從零維空間到十維空間的,突然覺得之前遇見過的人都是其中一個維度的選擇,只是自己不喜歡那個選擇,於是在這個空間裏做了調整。

  一個人做了一場夢,醒來感嘆夢而已。實際上做夢的時候,體內有數以萬計的細胞終其一生只為演繹這場夢境。誰又能肯定自己不是別人夢境中的一個細胞呢。所以呢,別把自己太當回事,演繹好自己,好夢!

入我新美大的Java後臺開發面試題總結