编译原理难以理解的问题
❶ 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.电力学.
电力学有大量的理论知识,还要画图,有个同学上的某电力大学,最后因为挂科太多而导致延期一年毕业。
二 社交
不少大学生们在上大学之前都是书呆子一样的人,整日就把心思放在学习上,想着如何把不懂得内容搞懂以及如何把成绩提高上去。到了大学的时候,真正的大学生在大学期间不仅要把专业课学好,而且要提高自己的社交能力。我就是那种大学以前只关注学习的人,到了大学的时候就觉得提高社交很重要,但是也感觉这个是比较难的。
三 恋爱
不少大学生在大学之前只关注学习,即使是有喜欢的人或者有人喜欢自己的话,也会尽量的压制自己的感情,而是把心思放在学习上,这样往往会错过一段最重要的谈恋爱的时机。到了大学期间比较重要的事情就是谈恋爱,因为谈恋爱可以培养照顾人得能力。
❺ 为了写好代码,你坚持了哪些好习惯
我本人的本科专业就是软件工程,作为开发人员,一开始学习的时候就养成编码的好习惯真的可以省下很多时间成本,可以让写的代码更加容易理解、更加容易扩展,也可以具有更强的通用性。
那么我坚持了哪些好习惯呢?
多阅读优秀的代码
有空的时候多看看一些优秀的开源框架的代码,不要求研究透彻,只要能学习到其中的一些优秀的设计理念就可以了,可以通过打断点调试的方式去看源码。
多看看官方文档,它一定是最准确、最实时的资料。编写官方文档的人,也通常就是这些技术或者软件的开发者,他们是对这些东西最了解的人,所以编写的文档不仅质量非常高,通常内容也都是最新的。
编程的好习惯真的要从一开始就要养成,即使不是开源代码也要认真对待,在持续的练习过程中养成编程的好习惯。