看板 Soft_Job 關於我們 聯絡資訊
我是一個Java Programmer,在前一間公司面試新人的時候開始,我會喜歡問一些 名詞解釋的問題,就是:那是什麼?什麼狀況會發生?發生了要如何解決? 各位有寫Java的朋友,如果面試的時候被問到『請解釋什麼是StackOverFlowError ?什麼情況會發生?該如何修正與預防?』各位會覺得? (很難、太容易、適當、不適當、有鑒別度、沒鑒別度) 目前我觀察的結果是: 對剛入行沒多久的開發者來說,這題似乎很難。 -- 生命起源於簡單的化學反應,靈魂是腦神經上頭的火花。 掌紋沒有含意,不過是具有止滑功用的紋路。 而神不存在,死去的人們只是等待細菌分解的腐肉而已。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.232.127 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1434968091.A.DF2.html
tw689: stackoverflow 就查東西的網站 06/22 18:26
zanyking: 是啊,就是這樣所以我假設大家都知道那是啥才問的... 06/22 18:28
y2468101216: 我不理解這個問題 所以這是冷笑話? 06/22 18:34
et282523: "堆疊空間不足" OR "StackOverFlow" 網頁打不了!!! 06/22 18:36
zanyking: 這不是冷笑話拉,Java真的會丟這個ERROR。 06/22 18:42
zelda123: 新人應該不會知道,資深工程師至少要知道是什麼錯誤 06/22 18:46
Ekmund: 是叫你查這個網站的錯誤 06/22 18:50
hcwang1126: Reclusive function 容易跳這訊息 06/22 19:14
hungys: 直覺想到 recursive call 的 call stack overflow,但不確 06/22 19:28
hungys: 定是不是噴這個錯誤 0.0 06/22 19:28
syclin: 遞迴太深? 06/22 19:32
Bencrie: 教遞迴的時候應該多少會提吧。我覺得問這個 ok 06/22 19:43
YahooTaiwan: StackTrace 超過限制大小? 06/22 19:58
leicheong: 最常見是遞迴太深, 自己call自己但未能觸發離開條件. 06/22 20:07
noonOut: 聽起來比默默踩出去還要好一點... 06/22 20:17
sing10407: 要有一點經驗才有辦法回答出來 06/22 20:18
Bencrie: 是說 Java 的堆疊有可能像 C/C++ 那樣搞到損壞嗎? 06/22 20:22
lovdkkkk: 考純 Java 路線的人來說, 對沒經驗的太難, 因為 Java 就 06/22 20:24
lovdkkkk: 是不要人去管記憶體, 如果是考 c 也懂的就很一般 06/22 20:25
lovdkkkk: 但鑑別度我想是有的, 可找出有認真下功夫學的人 06/22 20:26
sing10407: 可以考慮問java的nullPointerException,jounior應該 06/22 20:26
sing10407: 有機會遇到 06/22 20:26
lovdkkkk: 不過若是口頭問不是筆試, 我第一句也會想回連不到 SF... 06/22 20:27
noonOut: 不過我倒是很好奇發生的時候要怎麼處理 06/22 20:40
KMTATM: stackoverflow網站掛掉的時候會跳出來 06/22 20:41
noonOut: 趕快退堆疊還來得急嗎? 06/22 20:41
zanyking: 是啊,NPE是第一個問的,送分用。 06/22 20:42
zanyking: 處理方式要看是什麼原因造成,沒給終止條件造成的就補, 06/22 20:44
noonOut: 所以 runtime 應該沒救了吧? 06/22 20:45
zanyking: 因為tree traversal太深造成的,加大stackSize,或改用 06/22 20:49
zanyking: for + stack 來改寫recusion 06/22 20:49
zanyking: java 8之後若支援,那就改寫成tail recursion 06/22 20:51
zanyking: runtime想救是沒研究過,不過我個人是不會想對Error賭 06/22 20:53
zanyking: 人品,因為不知道這個問題是不是也導致jvm上其他thread 06/22 20:54
zanyking: 也掛了。如果掛了,還是掛GC thread這種,那救也沒用。 06/22 20:55
zanyking: 嗯,剛剛查了一下,應該是還可以救,它似乎不像heap是 06/22 20:58
zanyking: 共享的,不過這是jvm 的實作來決定的事了。 06/22 20:58
noonOut: 我想像是類似 C 那樣分佈記憶體,踏上 guarding 之類 06/22 21:00
noonOut: 不過實際上會搞到 stack 爆掉在 runtime 就可能也沒用 06/22 21:01
noonOut: 只是好奇問問看 XD 06/22 21:01
zanyking: 所以還有一種解法是切多個thread來解。 06/22 21:02
noonOut: 也許 java 真的有什麼 practice 能 handle 這種狀況 06/22 21:02
noonOut: 切多 thread 是指把 stack usage 分配到不同 thread 上? 06/22 21:03
ringo543: http://stackoverflow.com/a/29279234 06/22 21:18
ringo543: stackoverflow的這篇stackoverflow的解說很恰當 06/22 21:18
recorriendo: 對JVM怎麼運作有點了的話都知道這是什麼吧 06/22 21:42
cha122977: 忘了哪科教的了 第一次學call stack時有印象 06/22 22:13
tomroy: 我有一次是Thread開太多最後開不出來爆炸丟這個給我 06/23 00:09
GoalBased: 你工作常遇到這個exception嗎? 不然為啥要問這個 06/23 00:23
sedgewick: 是不是和當題目很容易判斷... 06/23 00:41
sedgewick: 如果發現題目跟某些履歷表上的資訊高度正相關... 06/23 00:41
sedgewick: 這題就不要考... 因為以文中的例子而言, 看年資就好了 06/23 00:42
sedgewick: 適不適合... 第一句打錯了. :D 06/23 00:42
sedgewick: 通常考題要考的應該是履歷上比較看不出來的... 06/23 00:43
Killercat: 其實我覺得要問「為什麼這是Error而非Exception」XD 06/23 07:25
Killercat: 這也是一個不錯的問題這樣.... 06/23 07:25
beemos: 有笑有推 06/23 08:36
robler: 這冷笑話吧XD 06/23 09:11
robler: 不過說真的 這個東西很少人會真的碰到吧 06/23 09:13
Chikei: 看想要知道啥吧,這題我覺得拿來鑑別是不是稍微懂jvm還算 06/23 10:35
Chikei: 不錯 06/23 10:35
pennymarkfox: stackoverflow跟outofmemoryexception到底差在哪? 06/23 10:53
Killercat: 這其實不難碰到,recursive亂寫,碰到沒cover到的 06/23 10:59
Killercat: 判斷回傳,就會炸了 06/23 10:59
meowyih: 就回 stackoverflow 的網站出錯了之類的白目答案看看? 06/23 12:28
jk47tai: 基本上這問題,問中手才有用,高手要愈到這問題越來越難 06/23 15:43
jk47tai: ,新手則是遇不到 06/23 15:43
DWR: 只要一個不小心寫了無限迴圈就會遇到了 所以新手也會拉 06/24 12:54