韩国三级大全久久网站 面試篇:虛擬機棧5連問?一聽心里就樂了
发布日期:2022-05-19 04:26 点击次数:142
“滴韩国三级大全久久网站,滴滴......”師傅我們到哪了?我還要趕著面試呢。
「師傅:」 快了快了,下個路口就到了。的确服了這幫人了,不會開車凈往里湊。
聽著司機師傅的诉苦聲,不禁想伊始打油詩:滿目尾燈紅,耳盈刺笛聲。心憂遲到久,頹首似雷轟。
一下車趕緊小跑就進了富麗堂皇的旅店,不不不,是商務樓,這大廳有點氣派,讓我有點思绪万千呀。
面試經過“咚咚咚”,“請進”。
「面試官:」 小伙子長得挺帥呀,年輕人等于有活力,來先做個簡單的自我介紹吧。
「阿Q:」 面試官你好,My name is “影流之主”,來自艾歐尼亞,是LOL中的最強中單(不摄取反駁),論單殺沒有服過誰。我的口頭禪是“無形之刃,最為致命”,當然你也不错叫我阿Q,這是我的簡歷。
「面試官:」 阿Q韩国三级大全久久网站,那咱也不寒暄了,径直切正題吧。看你jvm寫的知識點最多,那就先說一下你對虛擬機棧的长入吧。
「阿Q:」 內心OS:這波不错吹X了。咳...咳...虛擬機棧早期也叫java棧,是在jvm的運行時數據區存在的一塊內存區域。它是線程专有的,隨線程創建而創建,隨線程沦陷而結束。
依恋关系与人际关系的联系是由美国心理学家爱因斯沃斯提出的。1973年,美国心理学家爱因斯沃斯设计了“陌生情境实验(也叫依恋关系实验)”,让婴儿和母亲待在一个陌生的房间里,房间里有一个陌生人,还有很多玩具可以让孩子玩。实验过程中,母亲会离开房间,从母亲离开后和回来后孩子的反应,可以看出孩子和母亲之间的依恋关系。爱因斯沃斯从婴儿和母亲的研究中界定了亲子关系的3种基本类型:安全型、回避型和焦虑—矛盾型,爱因斯沃斯认为,这些孩子长大成人并建立人际关系时,这些特点仍会显露出来。
很多人也许不明白,“云上复试”已经说了3年了,久久精品国产精品亚洲色婷婷有什么难的?
嗯。。。假裝想一下??
眾所周知,棧只须進棧和出棧兩種操作,是以它是一種快速有用的分拨存儲模样。對于它來說,它不存在垃圾回收問題,然则它的大小是動態的大意固定不變的,因此它會存在棧溢出大意內存溢出問題......
「面試官:」 打斷一下啊韩国三级大全久久网站,你剛才說會存在棧溢出和內存溢出問題,那你能分別說一下為什么會出現這種情況嗎?
「阿Q:」 不错不错,我們清亮虛擬機棧由棧幀組成,每一個要领的調用都對應著一個棧幀的入棧。我們不错通過-Xss參數來設置棧的大小,假設我們設置的虛擬機棧大小很小,當我們調用的要领過多,也等于棧幀過多的話,就會出現StackOverflowError,即棧溢出問題。
假如我們的棧幀不固定,設置為動態擴展的,那在我們的內存不及時,也就沒有足夠的內存來辅助棧的擴展,這個時候就會出現OOM異常,阿娇陈冠希囗交13分钟在线观看即內存溢出問題。
「面試官:」 嗯嗯(點頭狀),默示小伙子条理很明晰呀,那你剛才說到棧幀設置的太小會導致棧幀溢出問題,那我們設置的大點不就不错彻底幸免棧溢出了嘛。
「阿Q:」 一聽等于要給我挖坑呀,像我們一般都比較预防中和之道,是以一聽到這種絕對的問題,必須機靈點:不不不,調整棧的大小只能以「延緩」棧溢出的時間大意說減少棧溢出的風險。
舉個例子吧
假如一個業務邏輯的要领調用需要5000次,然则此時拋出了棧溢出的錯誤。我們不错通過設置-Xss來獲取更大的棧空間,使得調用在7000次時才會溢出。此時調整棧大小就變得很荒谬義,因為這樣就會使得業務能平时辅助。
那假如是有「死遞歸」的情況則無論怎么进步棧大小都會溢出韩国三级大全久久网站,這樣也就沒有任何意義了。
「面試官:」 好的,那你看一下這個簡單的小体式,你能大體說一下它在內存中的執行過程嗎?
韩国三级大全久久网站public void test() { byte i = 15; int j = 8; int k = i + j; }
來張圖,便于全球更好地长入
「阿Q:」 先把該代碼編譯一下,然后检察它的字節碼文献。如上圖中左邊所示,執行過程如下:
领先將要執行的辅导地址0存放到PC寄存器中,此時,局部變量表和操作數棧的數據為空; 當執行第一條辅导bipush時,將操作數15放入操作數棧中,然后將PC寄存器的值置為下一條辅导的執行地址,即2; 當執行辅导地址為2的操作辅导時,將操作數棧中的數據取出來,存到局部變量表的1位置,因為該要领是實例要领,是以0位置存的是this的值,PC寄存器中的值變為3; 同步驟2和3將8先放入操作數棧,然后取出來存到局部變量表中,PC寄存器中的值也由3->5->6; 當執行到地址辅导為6、7、8時,將局部變量表中索引位置為1和2的數據再行加載到操作數棧中并進行iadd加操作,將得回的結果值存到操作數棧中,PC寄存器中的值也由6->7->8->9; 執行操作辅导istore_3,將操作數棧中的數據取出存到局部變量表中索引為3的位置,執行return辅导,要领結束。「面試官:」 內心OS:這小子貌似還不错呀。說的還不錯,那你能說一下要领中定義的局部變量是否線程安全嗎?
「阿Q:」 那我再用幾個例子來說一下吧。
public class LocalParaSafeProblem { /** * 線程安全的 * 雖然StringBuilder自己線程不安全, * 但s1 變量只存在于這個棧幀的局部變量表中, * 因為棧幀是每個線程獨立的一份, * 是以這里的s1是線程安全的 */ public static void method01() { // 線程內部創建的,屬于局部變量 StringBuilder s1 = new StringBuilder(); s1.append("a"); s1.append("b"); } /** * 線程不安全 * 因為此時StringBuilder是作為參數傳入, * 外部的其他線程也不错訪問,是以線程不安全 */ public static void method02(StringBuilder stringBuilder) { stringBuilder.append("a"); stringBuilder.append("b"); } /** * 線程不安全 * 此時StringBuilder被多個線程同時操作 */ public static void method03() { StringBuilder stringBuilder = new StringBuilder(); new Thread(() -> { stringBuilder.append("a"); stringBuilder.append("b"); }, "t1").start(); method02(stringBuilder); } /** * 線程不安全 * 因為此時要领將StringBuilder复返出去了 * 外面的其他線程不错径直修改StringBuilder這個援用了是以不安全 */ public static StringBuilder method04() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("a"); stringBuilder.append("b"); return stringBuilder; } /** * StringBuilder是線程安全的 * 此時stringBuilder值在當前棧幀的局部變量表中存在, * 其他線程無法訪問到該援用, * 要领執行完成之后此時局部變量表中的stringBuilder的就銷毀了 * 复返的stringBuilder.toString()線程不安全 * 终末的复返值將toString复返之后,其他線程不错操作而String自己是線程不安全的。 */ public static String method05() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("a"); stringBuilder.append("b"); return stringBuilder.toString(); } }
看到這估計會有點繞,那我就總結一下吧:若是對象是在要领內部產生且在內部沦陷,不會复返到外部就不存在線程安全問題;反之若是類自己線程不安全的話就存在線程安全問題。
「面試官:」 不錯不錯,有理有據,那你再說說你對堆內存的长入吧。
「阿Q:」 唉,今天太累了,說了一天這個了,不想說了。
「面試官:」 那好吧,那我們今天先到這吧,且归等奉告吧。
本文轉載自微信公眾號「阿Q說代碼」,不错通過以下二維碼關注。轉載本文請聯系阿Q說代碼公眾號。