堆疊溢位報錯引發的思考

cayley的程式設計之路發表於2019-03-03

2015年底寫的小文如今拿出來如今拿出來分享

Stack overflow

這幾天開始看買了很久的一本書《javascript資料結構與演算法》,我很後悔自己不早一點看這本書,開啟書翻看之後我更後悔,後悔大學時期老師講了一學期的“C語言資料結構”,那個時候對自己將來從事什麼職業,哪一個行業根本沒有概念,還曾夢想著成為那種腳踩高跟鞋,左手星巴克,右臂90度挎包行走在車來人往的CBD,呵呵,看看現在的自己,每天幾近凌晨到家,第二天滿滿雞血行走在鍵盤之間,每次清晨洗完臉後才會發現,oh 原來這才是生活以及鏡中真實的自己,既然選擇了這個職業也就沒什麼熱愛不熱愛的,只要你投入時間和汗水,它也一定會回報你買得起Chanel 和La Mer。

所以人生的哪一個時刻,當你在接觸一些新東西的時候,都應該以“這是增長我技能”的心態去對待,說不定哪一個時刻你就會用到它,翻開我的書,那些似曾熟悉的名詞一個個從腦中飄過,圖,二叉樹,動態規劃….”好像那些知識和概念曾在老師的板書上出現過很多次,依稀還能聞到那些充滿知識的粉筆沫,我以前覺得做前端是不需要用到這些知識的,現在我發現自己是多麼的才疏學淺,我學的東西太淺了,而我需要學的東西實在太多了,或者換一種角度,這也正是自己進階路上的寶石,和怪物,收穫每一顆寶石,打倒每一個怪物就可以通關了(進階)。

看資料結構與演算法的主要原因是,一次遞迴呼叫事件引發的,遞迴呼叫應該是大家都熟悉和使用過的簡單演算法,雖然使用它並不能提升效能,但是使用遞迴更容易理解和少寫很多冗餘程式碼,而我之前也只是死死地記住了它的使用條件和簡單例項

  1. 有反覆的執行過程(呼叫自身)
  2. 有跳出反覆執行過程的條件(遞迴出口)
  3. 例項有:階乘,斐波那契數列

在真實的開發過程中,如果沒有系統的學習和不斷地實踐,其實你根本想不到如何使用它,這就是為什麼我曾經寫過那麼多的for迴圈和if判斷,或者更直接的說“你其實根本就沒有學會它”,在最近的一次除錯過程中,我在終端執行gulp命令後,開始在瀏覽器中測試頁面效果,然而控制檯報了一個在我真正從事開發的這9個月中從未遇到過的error

Maximum call stack size exceeded

當時的我都沒有過腦子直接copy到Google上面,按下回車的瞬間,各種各樣的搜尋結果映入眼簾,OMG當時我才發現,這不是我常常用來提問的知名問答平臺stack overflow的名字嗎?而我是多麼的可笑,聯為什麼報這個錯誤都不知道,當時非常的沮喪,找不到原因,最後老大告訴我,我在子類中呼叫了父類的loader方法,但是父類找不到模板,繼續loader之後,造成了無限遞迴呼叫,導致了:too much recursion,而就在前幾天,老大剛剛給我和師兄講了遞迴的用法,還幫我修改了我在類種寫的冗餘程式碼,而那天我只是搞懂了老大講的內容,回來之後自己沒有細看和深入學習真東西還是學不到的,一個平臺給你學習和成長的機會,並且不斷地push你,這樣的機會也是要緊緊抓住不能放手的,所以你自己才是驅動一切事物的核心,如今這件事過去一週後,我翻看了我的《javascript資料結構與演算法》,第十一章:演算法補充知識中清晰的講解了遞迴的使用,js呼叫棧限制,瀏覽器異常報錯,異常捕獲等,而這些我如果早一點看和學習,並且按照書中的例子去實踐,估計老大那次給我講的時候我會理解的更透徹,但如果沒有這兩次的經歷,我也不會開始系統的學習資料結構和演算法,正如當初我沒有學好這門課程,如今我在這上吃了苦頭,又如當初我發誓死也不當程式設計師,而如今的程式碼工作者正是自己,生活中簡直太多的“如果,當初,要是”了,所以把握住當下的每一件事都本著“它將令我成長,它將為我所用”去做,才會活的更棒。即使今天的我在灰頭土臉的敲程式碼,也要學會畫精緻的妝容,擁有敏銳的時尚氣息,過有品質的生活,夢想就是用來實現的,難道不是嗎

相關文章