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牱锛屽紑濮嬭嚜涓诲湴浠庣粡楠屼腑瀛︿範銆