靜兒最近在總結一些面試題,那是因為做什么事情都要認真。面試也一樣,靜兒作為新美大金融部門的面試官,負責任的告訴大家,下面的問題回答不上來,面試是過不了的。不過以下絕不是原題,你會發現自己實力不過硬,最終肯定是被問出來的。
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實現了區別於synchronized同步鎖的一種樂觀鎖。
CAS利用CPU的CAS指令,同時借助JNI來完成java的非阻塞算法,其他的原子操作都是利用類似的特性完成的。java的concurrent包相對於使用synchronized性能提升也是主要依賴於它。
跑題時間:
這幾年萬聖節都會買南瓜自己做南瓜燈。我給小鮮肉在美國買的西餐刀非常安全,我都是把南瓜洗干凈,旁邊放一個干凈鐵盆,讓小鮮肉自己雕刻南瓜燈,我睡覺去。因為我承諾了要用做南瓜燈剩下的邊角料給他做南瓜餅,所以睡覺起來會看到桌子上很干凈。記得有一年我覺得浪費,把南瓜頂上的蓋也做着吃了,小鮮肉很生氣,我們只好第二天一起去超時重買了一個小貝貝南瓜重做了一個南瓜燈。
南瓜餅可以直接將南瓜煮熟放糖放面粉做成餅油炸。用牛奶來和面味道更好。我總習慣捏出來各種動物形狀做一盤外焦里嫩的動物大餐。但是如果是一整個南瓜,那就蒸成9分熟之后和面粉一起用杵搗,搗的時間越長越有彈性。這個工作當然是交給小鮮肉來做的。但是這樣就不好捏成形狀了,只用勺子弄成球下鍋。油鍋開始時是小火,南瓜餅熟的差不多了,再開大點火,外面酥脆,里面松軟。
只可惜現在都是很忙,周末也只是辦公間隙里去給小鮮肉做點小點心。記得原來總是特別清閑,找工作也總是不給自己加壓,說自己不做管理。過着管好自己就可以的生活。有次帶着小鮮肉去華科看牡丹,看到一個姑娘悠閑的躺在長椅上曬太陽。這可不就是原來的自己。悠然的過了那么多年,告訴自己“有花堪折直須折”,早就做好了准備接受現在的一切,而真的到來的時候,除了慶幸自己想要做的都試過了,還是多少有些傷感。
男神在我手機上看我的BOSS直聘。我說:“人家老公查媳婦手機都是看看媳婦到底跟誰聊了天,都聊了啥,你看你”。男神漫不經心的說:“對啊,關心啊,所以把你手機沒收了。”然后接着看BOSS直聘。
別看周末是這樣的,平時我忙的都不回家,也就是周末才回家一趟。每天男神都給我請安,問我是否活着。他最近改了頭像,頭像是東軟的一條小道,因為原來我倆在東軟的時候每天早晨我倆都剛好能在那條小道上打個照面。從那以來,兩個人就是彼此牽掛、彼此信任、一起努力的往前走。奮斗是很辛苦,如果一個人的話是很難堅持。兩個人相互鼓勵的往前走,想要放棄的時候,總是不忍心讓對方失望,於是就實現了一個又一個的目標。
男神最近在一路開掛的面試,面試過程中收獲了一打年輕漂亮的獵頭和HR。因為他換工作的理由是:“我想找個離媳婦近的工作,每天接送媳婦上下班。”我相信我家男神的自制力,看到男神的offer薪資秒殺我,我趕緊發個短信問他:“以后你這么牛逼了,還能每周給我洗衣服嗎?”男神毫不猶豫的回了個:“能”。結果周末回家告訴我我上周的衣服還有幾件沒洗的,讓我有空自己洗吧,我突然覺得天兒咋這么冷呢。還幻想着勸我家男神來我們新美大,像以前我在人人的時候一樣,每周末來給我收拾工位呢。不來也好,旁邊站着一個女神收割機,我壓力也是有的。
當一個人站在自己面前,其實自己心里是很清楚的。誰是合適的,誰是喜歡的。而到底誰是對的人取決於自己的人生規划。規划着想要幸福就選合適的,天生為才藝而生的人會選喜歡的。如果來生還是今世的重復,縱然多情要比無情苦。痛苦才是才藝的源泉,經歷過才會感同身受。原來看過一個從零維空間到十維空間的,突然覺得之前遇見過的人都是其中一個維度的選擇,只是自己不喜歡那個選擇,於是在這個空間里做了調整。
一個人做了一場夢,醒來感嘆夢而已。實際上做夢的時候,體內有數以萬計的細胞終其一生只為演繹這場夢境。誰又能肯定自己不是別人夢境中的一個細胞呢。所以呢,別把自己太當回事,演繹好自己,好夢!