gc演算法書
① 如何准備互聯網公司面試(演算法相關)
書籍: 《演算法導論》 這本是大部頭,很多人都看不完。我本人也並沒有看完,它跟了我這么多年,完全是屬於常看常新的牛書。每一次看,都發現會有新的收獲。比如,以前並不知道求K位數或者中位數有平均為O(n)復雜度的演算法。看到了別的地方的參考資料,才知道,原來《算導》上專門有一小節講這個內容。我基本上是本科比較集中的看了一遍,研一的時候又集中的看了一遍,才算是粗略的看完。但是其實,很多理論性的,以及圖論一部分依然還是沒有看完。個人推薦,先從簡單的開始,挑選比較熟悉的一些偏重與數據結構方面的知識作為起點。這本書的習題非常重要,要是有時間,能夠全部做完,那絕對是能夠神功在手了。其實,集中把,第二部分(排序),第三部分(數據結構),第四部分(高級設計,我基本主要看動態規劃和貪心),第五部分(高級數據結構,B樹和二項堆,並差集),第六部分(圖演算法,最大流部分較難,自己可以看情況掌握)。這些部分可以先從演算法本身開始,偽代碼全部看懂。因為演算法導論講的很詳細,而且有來龍去脈,基本不會有太大難度。數學證明,推薦大家掌握,但是,突擊或者第一次,可以選擇性的看看。我自己是重復看,才把證明看掉的。第一次看的時候,基本都跳過了。不過,證明和習題是精髓!希望如果有時間,一定要補回來。 《編程之美》《挑戰編程》 這本書絕對是將全中國企業,或者說是一部分懶惰的企業面試題庫提升了一個檔次的一本神書。網路面我師兄的時候,我師兄直接把有一道題的最優解答出來了。但是,那個面試官顯然是不知道最優解,一直在引導我師兄答出,這本書裡面的第四個解。呵呵。書很不錯。全部看一遍並不難。說個不好聽的,可以背下來,而且相信我,基本上絕對有用!比如說,n!後面有多少個0。我相信,你們今年面試或者筆試,一定會碰到這道題。《挑戰編程》大家可以自行考慮一下吧,這個完全是針對acm競賽的,不過,看看題也不錯。 《編程珠璣》 業界神書嘛。習題全部做完就是了。其實都是些小東西,但是,基本上一步步考察你的解決問題的能力。個人覺得,最常用的就是bit map做排序或者去重,拓展一下就是bloom filter,我當時都是在這本書裡面看到的。 《演算法技術手冊》 這本書貌似出鏡不多。書很薄,代碼寫的非常好,其實基本上全部都是基礎演算法和數據結構的實現。但是,它牛逼就在於,代碼寫的太好了,基本上,看一遍,絕對能背下來。面試基礎很重要。基本上每個筆試或者面試,都會考一個100行以內的小程序。比如,給定一棵樹,以及其中一個節點x,要求出這棵樹的中序遍歷序列中,x的後續節點,非遞歸實現。這種題非常簡單,但是,真正寫對的,其實並不多。《STL源碼剖析》《C標准庫》 都不厚。挑著看一遍非常舒服。特別是,看看STL每個數據結構迭代器類型啊,紅黑書如何實現啊。C標准庫,最常見的,比如strcpy()和memcpy()有什麼區別啊。特別是,STL,看過之後,對泛型還是能有一定了解的。《C專家編程》《Effective c++》《深度探索C++對象模型》 第一本比較簡單,可以當八卦書看。後兩本其實也沒啥好說的,其實都是些業界公認的牛書。我再重復一遍也沒什麼意義。但是,的確,考察基本上也就都是這么幾本書上面的東西。基本上後兩本主要側重看c++對象方面的一些指示,特別是多態相關的。 《具體數學》《組合數學》 這兩本其實可以看作修身養性的書。我當時是時間比較充裕的時候看完的。純突擊,大家就可以跳過了。但是,看完真的很有用。比如說,你們就可以跟面試官扯約瑟夫環的構造解了(這道題我覺得80%會遇到),直接推推公式,就不用寫模擬代碼了。《組合數學》也是,很多筆試一般會有些小智力題。不過,其實一般的題目,不看這本書也可以搞定。所以,這兩本僅供參考。大家有興趣的時候,可以翻翻。《Linux內核源碼剖析》《Linux環境高級編程》…… 要是有機會,能看看最好。因為很多公司都會考察Linux相關的知識。最少要會點腳本,一些簡單的Linux命令,以及正則表達式什麼的。要是能聊聊內核源碼或者驅動開發什麼的東西,面試官肯定更加喜歡了。 知識: c & c++ 首先要知道c和c++的區別。常考的有const的用法,一些生僻關鍵字比如extern,static的用法。 結構體與類的差別。類裡面的字對齊問題,也就是說一個類到底有多大。以及一個空的類有多大。 虛函數以及多態相關的顯然是重點。比如析構函數什麼時候需要寫成虛函數,構造函數是否可以是虛函數。 int a[10]; a 和 &a的區別。 java java我並不熟。但是基本上肯定會考一些虛擬機相關的,以及GC等知識。然後,一般招聘的java程序員都會問到很多多線程編程的東西,以及hadoop!這個絕對是重點,淘寶絕對就是問這個的。 操作系統 這個看工作崗位的實際要求。基本的進程線程區別==肯定是會問到的。要是要求高一些,就會問很多多線程編程的問題。一些競爭死鎖等基礎知識,一些進程調度的演算法,最近的kernel好像用的是CFS調度演算法。shell編程,如何讀取程序堆棧,寫一些core mp的讀取程序等等的。 數據結構 基本上所有的排序都要會寫。與樹有關的操作都要會些非遞歸版本。圖一般考的不多。Flood-Fill演算法等等。查找中位數。B樹和紅黑書最好要掌握,不用會寫,能扯扯基本就行。KMP,這個很有可能考!而且的確真的不好懂。要是實在不行,背下來吧。哈哈。 網路 這個其實比較基礎了。我個人網路方面的知識並不好。但是各種協議的基礎,幾次握手啊,一些操作系統的api實現到底是單工還是雙工用的是TCP還是UDP。我個人網路純粹靠拼RP。 資料庫 資料庫非常重要。基本的SQL肯定是要會的。最常見有一道題,inner join和out join的區別。MySQL是重點,基本上很多企業都是問這個。然後,網路扯多了會跟你扯MySQL引擎 的一些東西。這些我就不太懂了。要是能准備的話,或者說的確是做這方面的,就可以著重多准備下。 大規模數據處理這一塊絕對是重點!而且本身不是一個系統的學科分支。但是,基本上幾家大公司都會問這方面的。推薦先讀讀google那幾篇論文。Page Rank那一篇,然後Map Rece好像有幾篇吧。Big Table什麼的。推薦一個網址。這篇貌似是轉載的,我以前找到的源地址現在找不到了。處理這一類問題基本上思路都是,哈希,map rece以及bit map等等的。對了,推薦看一下外排序以及相關的敗者樹。這些都是大規模數據處理的一些典型問題。掌握了這些其實也就夠了。這塊有點屠龍之技的感覺,特別是對於學生,基本沒有誰能有機會把這些代碼實現出來。但是,沒辦法,這些公司就是喜歡考。看完那篇博客的,然後再自行查找一些資料,基本就夠了。萬變不離其中,而且,這些東西,沒辦法考那麼難的。 推薦一個博客吧,作者收集了100+道面試題,並且全部給出了代碼。把這個全部看完,基本上很多面試筆試,都是這些原題。 推薦Top Language裡面的今天我們思考系列,好幾年前的了。看大牛的思考過程,非常有幫助。希望自己能多想想再看答案。注意,google group好像有時被牆。 我把發芽網的題庫版塊也掃了一遍。 還有好多一時想不起來了。
② java常見gc演算法有哪些
1:標記—清除 Mark-Sweep
過程:標記可回收對象,進行清除
缺點:標記和清除效率低,清除後會產生內存碎片
2:復制演算法
過程:將內存劃分為相等的兩塊,將存活的對象復制到另一塊內存,把已經使用的內存清理掉
缺點:使用的內存變為了原來的一半
進化:將一塊內存按8:1的比例分為一塊Eden區(80%)和兩塊Survivor區(10%)
每次使用Eden和一塊Survivor,回收時,將存活的對象一次性復制到另一塊Survivor上,如果另一塊Survivor空間不足,則使用分配擔保機制存入老年代
3:標記—整理 Mark—Compact
過程:所有存活的對象向一端移動,然後清除掉邊界以外的內存
4:分代收集演算法
過程:將堆分為新生代和老年代,根據區域特點選用不同的收集演算法,如果新生代朝生夕死,則採用復制演算法,老年代採用標記清除,或標記整理
面試的話說出來這四種足夠了
③ java常見gc演算法有哪些
1:標記—清除
Mark-Sweep
過程:標記可回收對象,進行清除
缺點:標記和清除效率低,清除後會產生內存碎片
2:復制演算法
過程:將內存劃分為相等的兩塊,將存活的對象復制到另一塊內存,把已經使用的內存清理掉
缺點:使用的內存變為了原來的一半
進化:將一塊內存按8:1的比例分為一塊Eden區(80%)和兩塊Survivor區(10%)
每次使用Eden和一塊Survivor,回收時,將存活的對象一次性復制到另一塊Survivor上,如果另一塊Survivor空間不足,則使用分配擔保機制存入老年代
3:標記—整理
Mark—Compact
過程:所有存活的對象向一端移動,然後清除掉邊界以外的內存
4:分代收集演算法
過程:將堆分為新生代和老年代,根據區域特點選用不同的收集演算法,如果新生代朝生夕死,則採用復制演算法,老年代採用標記清除,或標記整理
面試的話說出來這四種足夠了
④ AI涓婚樹功鍗曟潵鍟︾収鐫璇
AI涓婚樹功鍗曠湅榪欏嚑涓灝卞熶簡!
銆夾IGC:鏅鴻兘鍒涗綔鏃朵唬銆
浠庢満鍣ㄥ︿範鍒版櫤鑳藉壋閫狅紝浠嶱GC銆乁GC鍒癆IGC錛屾垜浠鍗沖皢瑙佽瘉涓鍦烘繁鍒葷殑鐢熶駭鍔涘彉闈╋紝鑰岃繖浠藉彉闈╀篃浼氬獎鍝嶅埌鎴戜滑宸ヤ綔涓庣敓媧葷殑鏂規柟闈㈤潰銆傚悜鎵鏈夊叧娉ㄦ湭鏉ョ戞妧鐨勪粠涓氳呫佸壋涓氳呫佹姇璧勪漢銆佹斂搴滈儴闂ㄧ戞櫘AIGC鐨勫晢涓氳惤鍦板満鏅鍜岃屼笟搴旂敤妗堜緥銆傝╂垜浠涓璧瘋繋鎺ュ叏鏂扮殑鏅鴻兘鍒涗綔鏃朵唬銆
銆夾I鏈鏉ヨ繘琛屽紡銆
鏉庡紑澶嶅崥澹鑱旀墜縐戝夠浣滃墮檲鎻甯嗭紝棰勬祴鏃犻檺鎺ヨ繎鐪熷疄鐨勭戞妧鏈鏉ヨВ鏋愭湭鏉20騫翠漢宸ユ櫤鑳界瓑縐戞妧鍙戝睍瓚嬪娍錛屾濊冪戞妧钀藉湴瀵逛漢涓庝漢綾葷ぞ浼氱殑鍐插嚮涔︿腑10涓寮曚漢鍏ヨ儨鐨勭煭綃囨晠浜嬶紝灞曠ず浜嗕竴緋誨垪浠や漢澶у紑鐪肩晫鐨勬湭鏉ュ満鏅-韜涓村叾澧冪殑娌夋蹈寮忓ū涔愭柟寮忋佽嚜濡備嬌鐢ㄤ漢綾昏璦鐨勮櫄鎷熶即渚c 娌℃湁鈥滃徃鏈衡濈殑瀹屽叏鑷鍔ㄩ┚椹舵苯杞︺佽兘澶熶互鍋囦貢鐪熺殑鐓х墖鍜岃嗛戱紝浠ュ強鍩轟簬閲忓瓙璁$畻銆佽$畻鏈鴻嗚夊拰鍏朵粬 AI 鎶鏈鐨勫睍寮搴旂敤
銆婄宸ュぇ鑴戙
縐誨姩浜掕仈緗戞柟鍏存湭鑹撅紝鍏冨畤瀹欏懠鍟歌屾潵銆傛暟瀛楁椂浠f穠鐜扮殑鎶鏈闈╂柊澶у箙鏀瑰彉浜嗕漢浠鐨勭敓媧繪柟寮忋傜幇浠婏紝浜掕仈緗戝凡緇忓彇浠d簡涔︽湰鍜岃懼爞錛屾垚涓虹幇浠d漢鏈澶х殑鐭ヨ瘑鏉ユ簮銆傞潰瀵規搗閲忎俊鎮錛屼互鍙婁簰鑱旂綉鍥烘湁鐨勫歡寮傚睘鎬э紝鐜頒唬浜哄繀欏誨緩璁句竴涓鏇村厛榪涚殑宸ュ叿鍜屾柟娉曟潵綆$悊鐭ヨ瘑銆佸勭悊淇℃伅銆傚ぇ鏁版嵁鍏堥攱鎬濇兂瀹躲佺戞妧浣滃舵秱瀛愭矝閫氳繃涓浜虹粡鍘嗐佺粡楠屽拰鏁忛攼鐨勫垽鏂錛岀珯鍦ㄧ戞妧鍜屾椂浠g殑鍓嶆部緇欏嚭浜嗕竴涓娓呮櫚鐨勭瓟妗堜竴涓絎浜屽ぇ鑴戙
銆婃妧鏈闄烽槺銆
鏈涔︿綔鑰呭皢甯﹂嗚昏呬滑閬嶈堝悇涓鏃朵唬鎶鏈榪涙ュ逛漢浠宸ヤ綔褰㈡佺殑褰卞搷錛屾彮紺轟笉鍚屾椂浠b滄墦宸ヤ漢鈥濈殑澶勫冿紝騫舵渶緇堝皢鐩鍏夎漿鍚戞湭鏉ワ紝璇曞浘鍒嗘瀽褰撳墠鐨凙I闈╁懡灝嗗規垜浠鐨勫伐浣滈犳垚浣曠嶅獎鍝嶏紝浠ュ強鎴戜滑璇ュ備綍鍋氬嚭搴斿廣備綔鑰呭姏鍥捐存槑錛屾妧鏈榪涙ュ規敹鍏ラ犳垚浣曠嶅獎鍝嶏紝灝嗗喅瀹氫漢浠瀵瑰畠鐨勬佸害銆傚伐涓氶潻鍛芥槸鍘嗗彶涓婄殑閲嶅ぇ鏃跺埢錛屼絾褰撴椂鍑犱箮娌℃湁浜烘剰璇嗗埌瀹冪殑宸ㄥぇ鍚庢灉
銆婃湭鏉ュ懠鍟歌屾潵銆
浣滆呭郊寰椔鋒埓鏇艱開鏂鍜屽彶钂傝姮路縐戠壒鍕掑叏闈㈠睍紺轟簡鍟嗕笟鍒涗笟椋庡彛涓婄殑9澶ф寚鏁板瀷鎶鏈涓閲忓瓙璁$畻銆佷漢宸ユ櫤鑳姐佺綉緇溿佹満鍣ㄤ漢銆佽櫄鎷熺幇瀹炰笌澧炲己鐜板疄銆3D鎵撳嵃銆佸尯鍧楅摼銆佹潗鏂欑戝︿笌綰崇背鎶鏈銆佺敓鐗╂妧鏈錛屽苟媧炲療榪9澶ф寚鏁板瀷鎶鏈鐨勪簰鐩歌瀺鍚堜細甯︽潵宸ㄥぇ鐨勫彉闈╁姏閲忥紝灝嗕細瀹屽叏閲嶅戞垜浠鐨勭敓媧繪柟寮忎笌鍟嗕笟妯″紡銆備袱浣嶄綔鑰呯粨鍚9澶ф寚鏁板瀷鎶鏈鐨勮瀺鍚堬紝鍏呭垎棰勬祴鍜屾弿榪頒簡闆跺敭涓氥佸箍鍛婁笟銆佸ū涔愪笟銆佹暀鑲層佸尰鐤椾繚鍋ャ侀暱瀵褲佸晢涓氥侀熷搧涓氱瓑8澶ц屼笟鎸囨暟鍨嬪彉闈╃殑鏈鏉ャ
銆婂ぉ鎵嶄笌綆楁硶銆
浣滆呭郊寰椔鋒埓鏇艱開鏂鍜屽彶钂傝姮路縐戠壒鍕掑叏闈㈠睍紺轟簡鍟嗕笟鍒涗笟椋庡彛涓婄殑9澶ф寚鏁板瀷鎶鏈涓閲忓瓙璁$畻銆佷漢宸ユ櫤鑳姐佺綉緇溿佹満鍣ㄤ漢銆佽櫄鎷熺幇瀹炰笌澧炲己鐜板疄銆3D鎵撳嵃銆佸尯鍧楅摼銆佹潗鏂欑戝︿笌綰崇背鎶鏈銆佺敓鐗╂妧鏈錛屽苟媧炲療榪9澶ф寚鏁板瀷鎶鏈鐨勪簰鐩歌瀺鍚堜細甯︽潵宸ㄥぇ鐨勫彉闈╁姏閲忥紝灝嗕細瀹屽叏閲嶅戞垜浠鐨勭敓媧繪柟寮忎笌鍟嗕笟妯″紡銆備袱浣嶄綔鑰呯粨鍚9澶ф寚鏁板瀷鎶鏈鐨勮瀺鍚堬紝鍏呭垎棰勬祴鍜屾弿榪頒簡闆跺敭涓氥佸箍鍛婁笟銆佸ū涔愪笟銆佹暀鑲層佸尰鐤椾繚鍋ャ侀暱瀵褲佸晢涓氥侀熷搧涓氱瓑8澶ц屼笟鎸囨暟鍨嬪彉闈╃殑鏈鏉ャ
銆婁漢宸ヤ笉鏅鴻兘銆
榪欐湰涔︿細鍛婅瘔浣狅紝楂樹及浜嗕漢宸ユ櫤鑳戒細甯︽潵浠涔堢ぞ浼氶棶棰橈紝浠ュ強鑷鍔ㄩ┚椹惰繖浠朵簨鏈夊氶毦錛屽畠榪樹細鍛婅瘔浣狅紝鐜伴樁孌典漢宸ユ櫤鑳界殑紺句細鍖栧簲鐢ㄧ殑鏍規湰鐭涚浘鏄浠涔堛備漢浠涓嶅簲璇ュ亣璁捐$畻鏈鴻兘澶熸案榪滄g『錛屽傛灉浜轟滑鑳藉熻よ瘑鍒版妧鏈浣跨敤鐨勫矓闄愭э紝鍙浠ヨ╂妧鏈鏇村ソ鍦伴犵忎漢綾匯
銆婃繁搴﹀︿範銆
鍏ㄧ悆縐戞妧宸ㄥご綰風悍鎷ユ姳娣卞害瀛︿範錛岃嚜鍔ㄩ┚椹躲丄I鍖葷枟銆佽闊寵瘑鍒銆佸浘鍍忚瘑鍒銆佹櫤鑳界炕璇戜互鍙婇渿鎯婁笘鐣岀殑AlphaGo錛岃儗鍚庨兘鏄娣卞害瀛︿範鍦ㄥ彂鎸ョ炲囩殑浣滅敤銆傛繁搴﹀︿範鏄浜哄伐鏅鴻兘浠庢傚康鍒扮箒鑽e緱浠ュ疄鐜扮殑涓繪祦鎶鏈銆傜粡榪囨繁搴﹀︿範璁緇冪殑璁$畻鏈猴紝涓嶅啀琚鍔ㄦ寜鐓ф寚浠よ繍杞錛岃屾槸鍍忚嚜鐒惰繘鍖栫殑鐢熷懡閭f牱錛屽紑濮嬭嚜涓誨湴浠庣粡楠屼腑瀛︿範銆