[請益] 面試時考什麼是StackOverFlowError

看板Soft_Job作者 (最後的六年級生)時間10年前 (2015/06/22 18:14), 編輯推噓26(26042)
留言68則, 30人參與, 最新討論串1/2 (看更多)
我是一個Java Programmer,在前一間公司面試新人的時候開始,我會喜歡問一些 名詞解釋的問題,就是:那是什麼?什麼狀況會發生?發生了要如何解決? 各位有寫Java的朋友,如果面試的時候被問到『請解釋什麼是StackOverFlowError ?什麼情況會發生?該如何修正與預防?』各位會覺得? (很難、太容易、適當、不適當、有鑒別度、沒鑒別度) 目前我觀察的結果是: 對剛入行沒多久的開發者來說,這題似乎很難。 -- 生命起源於簡單的化學反應,靈魂是腦神經上頭的火花。 掌紋沒有含意,不過是具有止滑功用的紋路。 而神不存在,死去的人們只是等待細菌分解的腐肉而已。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.232.127 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1434968091.A.DF2.html

06/22 18:26, , 1F
stackoverflow 就查東西的網站
06/22 18:26, 1F

06/22 18:28, , 2F
是啊,就是這樣所以我假設大家都知道那是啥才問的...
06/22 18:28, 2F

06/22 18:34, , 3F
我不理解這個問題 所以這是冷笑話?
06/22 18:34, 3F

06/22 18:36, , 4F
"堆疊空間不足" OR "StackOverFlow" 網頁打不了!!!
06/22 18:36, 4F

06/22 18:42, , 5F
這不是冷笑話拉,Java真的會丟這個ERROR。
06/22 18:42, 5F

06/22 18:46, , 6F
新人應該不會知道,資深工程師至少要知道是什麼錯誤
06/22 18:46, 6F

06/22 18:50, , 7F
是叫你查這個網站的錯誤
06/22 18:50, 7F

06/22 19:14, , 8F
Reclusive function 容易跳這訊息
06/22 19:14, 8F

06/22 19:28, , 9F
直覺想到 recursive call 的 call stack overflow,但不確
06/22 19:28, 9F

06/22 19:28, , 10F
定是不是噴這個錯誤 0.0
06/22 19:28, 10F

06/22 19:32, , 11F
遞迴太深?
06/22 19:32, 11F

06/22 19:43, , 12F
教遞迴的時候應該多少會提吧。我覺得問這個 ok
06/22 19:43, 12F

06/22 19:58, , 13F
StackTrace 超過限制大小?
06/22 19:58, 13F

06/22 20:07, , 14F
最常見是遞迴太深, 自己call自己但未能觸發離開條件.
06/22 20:07, 14F

06/22 20:17, , 15F
聽起來比默默踩出去還要好一點...
06/22 20:17, 15F

06/22 20:18, , 16F
要有一點經驗才有辦法回答出來
06/22 20:18, 16F

06/22 20:22, , 17F
是說 Java 的堆疊有可能像 C/C++ 那樣搞到損壞嗎?
06/22 20:22, 17F

06/22 20:24, , 18F
考純 Java 路線的人來說, 對沒經驗的太難, 因為 Java 就
06/22 20:24, 18F

06/22 20:25, , 19F
是不要人去管記憶體, 如果是考 c 也懂的就很一般
06/22 20:25, 19F

06/22 20:26, , 20F
但鑑別度我想是有的, 可找出有認真下功夫學的人
06/22 20:26, 20F

06/22 20:26, , 21F
可以考慮問java的nullPointerException,jounior應該
06/22 20:26, 21F

06/22 20:26, , 22F
有機會遇到
06/22 20:26, 22F

06/22 20:27, , 23F
不過若是口頭問不是筆試, 我第一句也會想回連不到 SF...
06/22 20:27, 23F

06/22 20:40, , 24F
不過我倒是很好奇發生的時候要怎麼處理
06/22 20:40, 24F

06/22 20:41, , 25F
stackoverflow網站掛掉的時候會跳出來
06/22 20:41, 25F

06/22 20:41, , 26F
趕快退堆疊還來得急嗎?
06/22 20:41, 26F

06/22 20:42, , 27F
是啊,NPE是第一個問的,送分用。
06/22 20:42, 27F

06/22 20:44, , 28F
處理方式要看是什麼原因造成,沒給終止條件造成的就補,
06/22 20:44, 28F

06/22 20:45, , 29F
所以 runtime 應該沒救了吧?
06/22 20:45, 29F

06/22 20:49, , 30F
因為tree traversal太深造成的,加大stackSize,或改用
06/22 20:49, 30F

06/22 20:49, , 31F
for + stack 來改寫recusion
06/22 20:49, 31F

06/22 20:51, , 32F
java 8之後若支援,那就改寫成tail recursion
06/22 20:51, 32F

06/22 20:53, , 33F
runtime想救是沒研究過,不過我個人是不會想對Error賭
06/22 20:53, 33F

06/22 20:54, , 34F
人品,因為不知道這個問題是不是也導致jvm上其他thread
06/22 20:54, 34F

06/22 20:55, , 35F
也掛了。如果掛了,還是掛GC thread這種,那救也沒用。
06/22 20:55, 35F

06/22 20:58, , 36F
嗯,剛剛查了一下,應該是還可以救,它似乎不像heap是
06/22 20:58, 36F

06/22 20:58, , 37F
共享的,不過這是jvm 的實作來決定的事了。
06/22 20:58, 37F

06/22 21:00, , 38F
我想像是類似 C 那樣分佈記憶體,踏上 guarding 之類
06/22 21:00, 38F

06/22 21:01, , 39F
不過實際上會搞到 stack 爆掉在 runtime 就可能也沒用
06/22 21:01, 39F

06/22 21:01, , 40F
只是好奇問問看 XD
06/22 21:01, 40F

06/22 21:02, , 41F
所以還有一種解法是切多個thread來解。
06/22 21:02, 41F

06/22 21:02, , 42F
也許 java 真的有什麼 practice 能 handle 這種狀況
06/22 21:02, 42F

06/22 21:03, , 43F
切多 thread 是指把 stack usage 分配到不同 thread 上?
06/22 21:03, 43F

06/22 21:18, , 44F

06/22 21:18, , 45F
stackoverflow的這篇stackoverflow的解說很恰當
06/22 21:18, 45F

06/22 21:42, , 46F
對JVM怎麼運作有點了的話都知道這是什麼吧
06/22 21:42, 46F

06/22 22:13, , 47F
忘了哪科教的了 第一次學call stack時有印象
06/22 22:13, 47F

06/23 00:09, , 48F
我有一次是Thread開太多最後開不出來爆炸丟這個給我
06/23 00:09, 48F

06/23 00:23, , 49F
你工作常遇到這個exception嗎? 不然為啥要問這個
06/23 00:23, 49F

06/23 00:41, , 50F
是不是和當題目很容易判斷...
06/23 00:41, 50F

06/23 00:41, , 51F
如果發現題目跟某些履歷表上的資訊高度正相關...
06/23 00:41, 51F

06/23 00:42, , 52F
這題就不要考... 因為以文中的例子而言, 看年資就好了
06/23 00:42, 52F

06/23 00:42, , 53F
適不適合... 第一句打錯了. :D
06/23 00:42, 53F

06/23 00:43, , 54F
通常考題要考的應該是履歷上比較看不出來的...
06/23 00:43, 54F

06/23 07:25, , 55F
其實我覺得要問「為什麼這是Error而非Exception」XD
06/23 07:25, 55F

06/23 07:25, , 56F
這也是一個不錯的問題這樣....
06/23 07:25, 56F

06/23 08:36, , 57F
有笑有推
06/23 08:36, 57F

06/23 09:11, , 58F
這冷笑話吧XD
06/23 09:11, 58F

06/23 09:13, , 59F
不過說真的 這個東西很少人會真的碰到吧
06/23 09:13, 59F

06/23 10:35, , 60F
看想要知道啥吧,這題我覺得拿來鑑別是不是稍微懂jvm還算
06/23 10:35, 60F

06/23 10:35, , 61F
不錯
06/23 10:35, 61F

06/23 10:53, , 62F
stackoverflow跟outofmemoryexception到底差在哪?
06/23 10:53, 62F

06/23 10:59, , 63F
這其實不難碰到,recursive亂寫,碰到沒cover到的
06/23 10:59, 63F

06/23 10:59, , 64F
判斷回傳,就會炸了
06/23 10:59, 64F

06/23 12:28, , 65F
就回 stackoverflow 的網站出錯了之類的白目答案看看?
06/23 12:28, 65F

06/23 15:43, , 66F
基本上這問題,問中手才有用,高手要愈到這問題越來越難
06/23 15:43, 66F

06/23 15:43, , 67F
,新手則是遇不到
06/23 15:43, 67F

06/24 12:54, , 68F
只要一個不小心寫了無限迴圈就會遇到了 所以新手也會拉
06/24 12:54, 68F
文章代碼(AID): #1LX-0Rto (Soft_Job)
文章代碼(AID): #1LX-0Rto (Soft_Job)