編譯原理難以理解的問題
❶ java涓鐨勫爢鏍堥棶棰橈紵
鍏跺疄榪欎簺鍩虹鐨勪笢瑗跨綉涓婃湁涓嶅皯, 浣犲彲浠ュ氬幓csdn,閭i噷鍙浠ュ﹀埌涓嶅皯濂戒笢瑗 ,鎴戝氨鐩存帴緇欎綘綺樿創榪囨潵浜
java涓鍫嗘爤(stack)鍜屽爢(heap)
涓銆佸爢鏍(stack)鍜屽爢(heap)錛
錛1錛夊唴瀛樺垎閰嶇殑絳栫暐
銆銆鎸夌収緙栬瘧鍘熺悊鐨勮傜偣,紼嬪簭榪愯屾椂鐨勫唴瀛樺垎閰嶆湁涓夌嶇瓥鐣,鍒嗗埆鏄闈欐佺殑,鏍堝紡鐨,鍜屽爢寮忕殑.
銆闈欐佸瓨鍌ㄥ垎閰嶆槸鎸囧湪緙栬瘧鏃跺氨鑳界『瀹氭瘡涓鏁版嵁鐩鏍囧湪榪愯屾椂鍒葷殑瀛樺偍絀洪棿闇奼,鍥犺屽湪緙栬瘧鏃跺氨鍙浠ョ粰浠栦滑鍒嗛厤鍥哄畾鐨勫唴瀛樼┖闂.榪欑嶅垎閰嶇瓥鐣ヨ佹眰紼嬪簭浠g爜涓涓嶅厑璁告湁鍙鍙樻暟鎹緇撴瀯(姣斿傚彲鍙樻暟緇)鐨勫瓨鍦,涔熶笉鍏佽告湁宓屽楁垨鑰呴掑綊鐨勭粨鏋勫嚭鐜,鍥犱負瀹冧滑閮戒細瀵艱嚧緙栬瘧紼嬪簭鏃犳硶璁$畻鍑嗙『鐨勫瓨鍌ㄧ┖闂撮渶奼.
銆鏍堝紡瀛樺偍鍒嗛厤涔熷彲縐頒負鍔ㄦ佸瓨鍌ㄥ垎閰,鏄鐢變竴涓綾諱技浜庡爢鏍堢殑榪愯屾爤鏉ュ疄鐜扮殑.鍜岄潤鎬佸瓨鍌ㄥ垎閰嶇浉鍙,鍦ㄦ爤寮忓瓨鍌ㄦ柟妗堜腑,紼嬪簭瀵規暟鎹鍖虹殑闇奼傚湪緙栬瘧鏃舵槸瀹屽叏鏈鐭ョ殑,鍙鏈夊埌榪愯岀殑鏃跺欐墠鑳藉熺煡閬,浣嗘槸瑙勫畾鍦ㄨ繍琛屼腑榪涘叆涓涓紼嬪簭妯″潡鏃,蹇呴』鐭ラ亾璇ョ▼搴忔ā鍧楁墍闇鐨勬暟鎹鍖哄ぇ灝忔墠鑳藉熶負鍏跺垎閰嶅唴瀛.鍜屾垜浠鍦ㄦ暟鎹緇撴瀯鎵鐔熺煡鐨勬爤涓鏍,鏍堝紡瀛樺偍鍒嗛厤鎸夌収鍏堣繘鍚庡嚭鐨勫師鍒欒繘琛屽垎閰嶃
銆闈欐佸瓨鍌ㄥ垎閰嶈佹眰鍦ㄧ紪璇戞椂鑳界煡閬撴墍鏈夊彉閲忕殑瀛樺偍瑕佹眰,鏍堝紡瀛樺偍鍒嗛厤瑕佹眰鍦ㄨ繃紼嬬殑鍏ュ彛澶勫繀欏葷煡閬撴墍鏈夌殑瀛樺偍瑕佹眰,鑰屽爢寮忓瓨鍌ㄥ垎閰嶅垯涓撻棬璐熻矗鍦ㄧ紪璇戞椂鎴栬繍琛屾椂妯″潡鍏ュ彛澶勯兘鏃犳硶紜瀹氬瓨鍌ㄨ佹眰鐨勬暟鎹緇撴瀯鐨勫唴瀛樺垎閰,姣斿傚彲鍙橀暱搴︿覆鍜屽硅薄瀹炰緥.鍫嗙敱澶х墖鐨勫彲鍒╃敤鍧楁垨絀洪棽鍧楃粍鎴,鍫嗕腑鐨勫唴瀛樺彲浠ユ寜鐓т換鎰忛『搴忓垎閰嶅拰閲婃斁.
錛2錛夊爢鍜屾爤鐨勬瘮杈
銆銆涓婇潰鐨勫畾涔変粠緙栬瘧鍘熺悊鐨勬暀鏉愪腑鎬葷粨鑰屾潵,闄ら潤鎬佸瓨鍌ㄥ垎閰嶄箣澶,閮芥樉寰楀緢鍛嗘澘鍜岄毦浠ョ悊瑙,涓嬮潰鎾囧紑闈欐佸瓨鍌ㄥ垎閰,闆嗕腑姣旇緝鍫嗗拰鏍:
銆浠庡爢鍜屾爤鐨勫姛鑳藉拰浣滅敤鏉ラ氫織鐨勬瘮杈,鍫嗕富瑕佺敤鏉ュ瓨鏀懼硅薄鐨勶紝鏍堜富瑕佹槸鐢ㄦ潵鎵ц岀▼搴忕殑.鑰岃繖縐嶄笉鍚屽張涓昏佹槸鐢變簬鍫嗗拰鏍堢殑鐗圭偣鍐沖畾鐨:
銆鍦ㄧ紪紼嬩腑錛屼緥濡侰/C++涓錛屾墍鏈夌殑鏂規硶璋冪敤閮芥槸閫氳繃鏍堟潵榪涜岀殑,鎵鏈夌殑灞閮ㄥ彉閲,褰㈠紡鍙傛暟閮芥槸浠庢爤涓鍒嗛厤鍐呭瓨絀洪棿鐨勩傚疄闄呬笂涔熶笉鏄浠涔堝垎閰,鍙鏄浠庢爤欏跺悜涓婄敤灝辮,灝卞ソ鍍忓伐鍘備腑鐨勪紶閫佸甫(conveyor belt)涓鏍,Stack Pointer浼氳嚜鍔ㄦ寚寮曚綘鍒版斁涓滆タ鐨勪綅緗,浣犳墍瑕佸仛鐨勫彧鏄鎶婁笢瑗挎斁涓嬫潵灝辮.閫鍑哄嚱鏁扮殑鏃跺欙紝淇鏀規爤鎸囬拡灝卞彲浠ユ妸鏍堜腑鐨勫唴瀹歸攢姣.榪欐牱鐨勬ā寮忛熷害鏈蹇,褰撶劧瑕佺敤鏉ヨ繍琛岀▼搴忎簡.闇瑕佹敞鎰忕殑鏄,鍦ㄥ垎閰嶇殑鏃跺,姣斿備負涓涓鍗沖皢瑕佽皟鐢ㄧ殑紼嬪簭妯″潡鍒嗛厤鏁版嵁鍖烘椂,搴斾簨鍏堢煡閬撹繖涓鏁版嵁鍖虹殑澶у皬,涔熷氨璇存槸鉶界劧鍒嗛厤鏄鍦ㄧ▼搴忚繍琛屾椂榪涜岀殑,浣嗘槸鍒嗛厤鐨勫ぇ灝忓氬皯鏄紜瀹氱殑,涓嶅彉鐨,鑰岃繖涓"澶у皬澶氬皯"鏄鍦ㄧ紪璇戞椂紜瀹氱殑,涓嶆槸鍦ㄨ繍琛屾椂.
銆 鍫嗘槸搴旂敤紼嬪簭鍦ㄨ繍琛岀殑鏃跺欒鋒眰鎿嶄綔緋葷粺鍒嗛厤緇欒嚜宸卞唴瀛橈紝鐢變簬浠庢搷浣滅郴緇熺$悊鐨勫唴瀛樺垎閰,鎵浠ュ湪鍒嗛厤鍜岄攢姣佹椂閮借佸崰鐢ㄦ椂闂達紝鍥犳ょ敤鍫嗙殑鏁堢巼闈炲父浣.浣嗘槸鍫嗙殑浼樼偣鍦ㄤ簬,緙栬瘧鍣ㄤ笉蹇呯煡閬撹佷粠鍫嗛噷鍒嗛厤澶氬皯瀛樺偍絀洪棿錛屼篃涓嶅繀鐭ラ亾瀛樺偍鐨勬暟鎹瑕佸湪鍫嗛噷鍋滅暀澶氶暱鐨勬椂闂,鍥犳,鐢ㄥ爢淇濆瓨鏁版嵁鏃朵細寰楀埌鏇村ぇ鐨勭伒媧繪с備簨瀹炰笂,闈㈠悜瀵硅薄鐨勫氭佹,鍫嗗唴瀛樺垎閰嶆槸蹇呬笉鍙灝戠殑,鍥犱負澶氭佸彉閲忔墍闇鐨勫瓨鍌ㄧ┖闂村彧鏈夊湪榪愯屾椂鍒涘緩浜嗗硅薄涔嬪悗鎵嶈兘紜瀹.鍦–++涓錛岃佹眰鍒涘緩涓涓瀵硅薄鏃訛紝鍙闇鐢╪ew鍛戒護緙栧埗鐩稿叧鐨勪唬鐮佸嵆鍙銆傛墽琛岃繖浜涗唬鐮佹椂錛屼細鍦ㄥ爢閲岃嚜鍔ㄨ繘琛屾暟鎹鐨勪繚瀛.褰撶劧錛屼負杈懼埌榪欑嶇伒媧繪э紝蹇呯劧浼氫粯鍑轟竴瀹氱殑浠d環:鍦ㄥ爢閲屽垎閰嶅瓨鍌ㄧ┖闂存椂浼氳姳鎺夋洿闀跨殑鏃墮棿錛佽繖涔熸f槸瀵艱嚧鎴戜滑鍒氭墠鎵璇寸殑鏁堢巼浣庣殑鍘熷洜,鐪嬫潵鍒楀畞鍚屽織璇寸殑濂,浜虹殑浼樼偣寰寰涔熸槸浜虹殑緙虹偣,浜虹殑緙虹偣寰寰涔熸槸浜虹殑浼樼偣(鏅晘).
錛3錛塉VM涓鐨勫爢鍜屾爤
銆銆JVM鏄鍩轟簬鍫嗘爤鐨勮櫄鎷熸満.JVM涓烘瘡涓鏂板壋寤虹殑綰跨▼閮藉垎閰嶄竴涓鍫嗘爤.涔熷氨鏄璇,瀵逛簬涓涓狫ava紼嬪簭鏉ヨ達紝瀹冪殑榪愯屽氨鏄閫氳繃瀵瑰爢鏍堢殑鎿嶄綔鏉ュ畬鎴愮殑銆傚爢鏍堜互甯т負鍗曚綅淇濆瓨綰跨▼鐨勭姸鎬併侸VM瀵瑰爢鏍堝彧榪涜屼袱縐嶆搷浣:浠ュ撫涓哄崟浣嶇殑鍘嬫爤鍜屽嚭鏍堟搷浣溿
銆銆 鎴戜滑鐭ラ亾,鏌愪釜綰跨▼姝e湪鎵ц岀殑鏂規硶縐頒負姝ょ嚎紼嬬殑褰撳墠鏂規硶.鎴戜滑鍙鑳戒笉鐭ラ亾,褰撳墠鏂規硶浣跨敤鐨勫撫縐頒負褰撳墠甯с傚綋綰跨▼嬋媧諱竴涓狫ava鏂規硶,JVM灝變細鍦ㄧ嚎紼嬬殑Java鍫嗘爤閲屾柊鍘嬪叆涓涓甯с傝繖涓甯ц嚜鐒舵垚涓轟簡褰撳墠甯.鍦ㄦゆ柟娉曟墽琛屾湡闂,榪欎釜甯у皢鐢ㄦ潵淇濆瓨鍙傛暟,灞閮ㄥ彉閲,涓闂磋$畻榪囩▼鍜屽叾浠栨暟鎹.榪欎釜甯у湪榪欓噷鍜岀紪璇戝師鐞嗕腑鐨勬椿鍔ㄧ邯褰曠殑姒傚康鏄宸涓嶅氱殑.
銆銆 浠嶫ava鐨勮繖縐嶅垎閰嶆満鍒舵潵鐪,鍫嗘爤鍙堝彲浠ヨ繖鏍風悊瑙:鍫嗘爤(Stack)鏄鎿嶄綔緋葷粺鍦ㄥ緩絝嬫煇涓榪涚▼鏃舵垨鑰呯嚎紼(鍦ㄦ敮鎸佸氱嚎紼嬬殑鎿嶄綔緋葷粺涓鏄綰跨▼)涓鴻繖涓綰跨▼寤虹珛鐨勫瓨鍌ㄥ尯鍩燂紝璇ュ尯鍩熷叿鏈夊厛榪涘悗鍑虹殑鐗規с
銆 姣忎竴涓狫ava搴旂敤閮藉敮涓瀵瑰簲涓涓狫VM瀹炰緥錛屾瘡涓涓瀹炰緥鍞涓瀵瑰簲涓涓鍫嗐傚簲鐢ㄧ▼搴忓湪榪愯屼腑鎵鍒涘緩鐨勬墍鏈夌被瀹炰緥鎴栨暟緇勯兘鏀懼湪榪欎釜鍫嗕腑,騫剁敱搴旂敤鎵鏈夌殑綰跨▼鍏變韓.璺烠/C++涓嶅悓錛孞ava涓鍒嗛厤鍫嗗唴瀛樻槸鑷鍔ㄥ垵濮嬪寲鐨勩侸ava涓鎵鏈夊硅薄鐨勫瓨鍌ㄧ┖闂撮兘鏄鍦ㄥ爢涓鍒嗛厤鐨勶紝浣嗘槸榪欎釜瀵硅薄鐨勫紩鐢ㄥ嵈鏄鍦ㄥ爢鏍堜腑鍒嗛厤,涔熷氨鏄璇村湪寤虹珛涓涓瀵硅薄鏃朵粠涓や釜鍦版柟閮藉垎閰嶅唴瀛橈紝鍦ㄥ爢涓鍒嗛厤鐨勫唴瀛樺疄闄呭緩絝嬭繖涓瀵硅薄錛岃屽湪鍫嗘爤涓鍒嗛厤鐨勫唴瀛樺彧鏄涓涓鎸囧悜榪欎釜鍫嗗硅薄鐨勬寚閽(寮曠敤)鑰屽凡銆
❷ IT中劍宗和氣宗的區別與聯系是啥
在華山派里,有氣宗和劍宗之分。在計算機領域,也有氣宗和劍宗之分。氣宗即計算機科學,劍宗即計算機技術。氣是基礎,劍是方法。沒有扎實的科學基礎,想在劍道上持續進步是很困難的。畢竟我們不可能有令狐沖那樣好的運氣,而且,計算機技術方面的獨孤九劍也是不存在的。
年輕人偏愛技術,因為這是一種馬上就可以給你成就感的東西。而對於較枯燥的科學,則是能敷衍就敷衍,以及格為目標,考過就忘的。這也很正常,手裡有劍的時候總是希望能馬上練出兩套劍法,行走江湖,難得有人會喜歡上費時間又不能馬上看到成效的氣功。可是我們不能忘掉《笑傲江湖》中的評論,雖然出自岳不群之口「劍宗功夫易於速成,見效極快。大家都練十年,定是劍宗占上風;各練二十年,那是各擅勝場,難分上下;要到二十年之後,練氣宗功夫的才漸漸的越來越強;到得三十年時,練劍宗功夫的便再也不能望氣宗之項背了。」而計算機領域發展如此之快,沒有氣功為基礎的話,練一套劍法需要花費大量的時間。而好不容易等你練好了,過不了多久,你又要疲於奔命的去學習另一套更好的劍法。這就是為什麼有人說搞計算機的人其實也是吃青春飯的,因為年齡大了之後,要想在技術上跟上潮流,這個,基本上,很難。
那麼我們的出路在哪裡呢?難道以後真的為了趕上劍法的潮流,聞雞起舞,發懸梁,錐刺股?努力學習和工作本身並沒有錯,但是如果是方法錯了,努力有什麼用呢?所以應該「Work smart,not work hard」。怎麼才能 work smart呢?那麼,請把手裡的劍先放在旁邊,讓我們練練氣功吧。當你有了氣功的功底,就會發現那些一套又一套的劍法只不過是同一思想的不同表示而已。就像太極劍一樣,你一旦把握到了「劍意」,就不會太在意「劍招」了。這就是為什麼學數學的人轉學計算機的時候都不會太難,因為他們的數學功底扎實,而這就是一種有助於練劍的氣功。以前在bbs上有不少人討論過我們的課程設置中是否數學課過多了,那麼我會回答,這種氣功沒練到家,以後練一些難的劍法恐怕不容易。當然如果你的目標很簡單,學兩套普普通通的劍法,行走江湖,混口飯吃。沒問題,我想要不要學離散數學,編譯原理都沒關系。很多人沒學過離散數學一樣可以編出程序來。但是沒有離散數學,要找出一個好演算法來解決問題是很困難的。再比如編譯原理,在學它之前,要發現程序中的錯誤太困難了,哪怕編譯器給我指出了錯誤,我甚至都難以理解為什麼錯了。而學了編譯原理之後,就很容易找到錯誤並且理解這個錯誤,保證下次不會再犯。如果沒有這些基礎,很多工作都很難勝任。比如「Clean Room」,必須用 inspect方法把所有錯誤找出來之後才能進行編譯,如果不懂編譯原理,光看原碼能發現多少錯誤?比如「Formal Prove」,沒有離散數學,想都不用想。我們必須記住的是,軟體的開發過程包括需求、規格說明書、分析、設計、實現、整合、維護等階段。而測試,更是每個階段都必不可少的。如果只練,那麼你能做的只不過是實現的部分而已。
除了數學之外,還有軟體工程也是一個很重要的內功。當然,如果你希望只通過上課就可以學會軟體工程,那我會告訴你,別費力氣了。軟體工程是用出來的,不是看出來的。首先,掌握軟體工程的基礎很重要,然後,實踐,然後,再理論,再實踐。這樣的循環的過程,就是一個進步的過程。當然軟體工程本身的發展也非常快,大家有興趣可以關注一下CMU 的SEI,那是世界頂級的幫派。他們提出的CMM,就象一種考核整個幫派戰鬥力的手段。而PSP(Personal Software Process)是一種很不錯的內功心法(甚至可以說是劍法),就像武林秘笈一樣。:-),只不過是大家都可以學的。那麼TSP(Team Software Process)就是劍陣了。
當然也許會有人痴迷於氣功而不喜歡練劍,這種人我很佩服,因為我做不到,所以不敢多加評。只不過,我們是劍手,要開創一片天地,還是要靠劍,以內力為基礎的劍。所以仔細想想,岳靈珊說得不錯:「最好是氣功劍術,兩者都是主」。或者就是說,兩手都要抓,兩手都要硬。
以上內容是轉載的,僅供參考。
❸ 編譯原理難不難
編譯原理通常被認為是一門較為艱深的課程。網上不少評論提到,有人花費了一年半的時間學習軟體理論,卻依然覺得編譯原理難以理解。甚至有人直言,這是本科軟體課程中最難的一門課。不少學生抱怨,國內的編譯教材往往晦澀難懂,缺乏易於理解的內容。
很多人誤以為,編譯原理的應用僅限於編寫程序語言的編譯器,因此覺得這門課程實用性不大,學習興趣不高。實際上,編譯原理在軟體開發的多個方面都有廣泛應用,比如靜態分析、代碼優化和跨平台編譯等。此外,理解編譯原理有助於提升軟體開發的整體水平,無論是編寫簡單的腳本還是復雜的大型系統。
另一個常見的誤區是,編寫編譯器必須完全手工完成。實際上,現代編譯器開發已經高度自動化,有許多工具和框架能夠簡化這一過程。例如,LLVM、GCC等編譯器基礎設施可以大大降低編譯器開發的復雜度,使得開發者能夠專注於核心邏輯的實現。
然而,盡管編譯原理確實具有一定的挑戰性,它的重要性不容忽視。通過學習編譯原理,可以深刻理解程序如何從源代碼轉換為機器碼,這對於深入掌握計算機科學的基礎知識具有重要意義。同時,掌握編譯原理也有助於培養邏輯思維能力和問題解決能力,這對任何軟體開發者的成長都大有裨益。
總之,編譯原理雖然具有一定的難度,但其價值和實用性不容小覷。通過正確的學習方法和工具,即使是初學者也能逐步掌握這一領域的知識,從而在軟體開發中發揮更大的作用。
❹ 大學最難學的課程
一 課程
1.數學.
相信很多大學生們在大學裡面覺得《高等數學》、《微積分》很難,也很擔心這些課程會掛科,也有不少大學生是在這大學數學這門課掛科的,可以想像一下這課程的難度了。
2.大學物理.
理科、工科大學生在大學裡面必須要學大學物理的。雖說大學物理課程上的內容一般在初中、高中時期都學過了,但是經過一整個高考後暑假的荒廢,以及大一一整年沒學物理課程了,很多大學生們感覺大學物理很難。我那時候就是覺得大學物理難的,雖說課堂上也聽課,但是感覺自己已經沒有了高中時期的那股拼搏勁兒了,所以這門課學的很糟糕。
3.c語言.
大學編程課程對於大部分大學生來說是初學的,就像那些當初從初一才開始學英語就覺得英語很難一樣,不少大學生對於編程裡面的思維也是一頭霧水的。
4.醫學.
有句話叫「勸人學醫,天打雷劈」,可見這門課程學起來的困難程度了。記得以前有見過一個學醫的同學的書籍,一本厚厚的500多頁的書是他們將要考試時候的書籍,還有更多的幾十本書是他們的課本。
5.建築學.
學建築學的話需要畫圖、考證書,想想就難。
6.電力學.
電力學有大量的理論知識,還要畫圖,有個同學上的某電力大學,最後因為掛科太多而導致延期一年畢業。
二 社交
不少大學生們在上大學之前都是書獃子一樣的人,整日就把心思放在學習上,想著如何把不懂得內容搞懂以及如何把成績提高上去。到了大學的時候,真正的大學生在大學期間不僅要把專業課學好,而且要提高自己的社交能力。我就是那種大學以前只關注學習的人,到了大學的時候就覺得提高社交很重要,但是也感覺這個是比較難的。
三 戀愛
不少大學生在大學之前只關注學習,即使是有喜歡的人或者有人喜歡自己的話,也會盡量的壓制自己的感情,而是把心思放在學習上,這樣往往會錯過一段最重要的談戀愛的時機。到了大學期間比較重要的事情就是談戀愛,因為談戀愛可以培養照顧人得能力。
❺ 為了寫好代碼,你堅持了哪些好習慣
我本人的本科專業就是軟體工程,作為開發人員,一開始學習的時候就養成編碼的好習慣真的可以省下很多時間成本,可以讓寫的代碼更加容易理解、更加容易擴展,也可以具有更強的通用性。
那麼我堅持了哪些好習慣呢?
多閱讀優秀的代碼
有空的時候多看看一些優秀的開源框架的代碼,不要求研究透徹,只要能學習到其中的一些優秀的設計理念就可以了,可以通過打斷點調試的方式去看源碼。
多看看官方文檔,它一定是最准確、最實時的資料。編寫官方文檔的人,也通常就是這些技術或者軟體的開發者,他們是對這些東西最了解的人,所以編寫的文檔不僅質量非常高,通常內容也都是最新的。
編程的好習慣真的要從一開始就要養成,即使不是開源代碼也要認真對待,在持續的練習過程中養成編程的好習慣。