从二月开始的找工作之旅,总算在8月底结束,作为一个非科班菜鸡转行,感慨良多(另外:我就是那位“我不是小康”提到的菜鸡同学@我不是小康 )
简介
本硕985机械,本科只了解一些机器人编程的基本知识,几乎完全不了解互联网。在读研后决定转行,正式开始准备从研一下学期开始,历经一年。学习的时间是在和多方抗争与妥协下争取的。
由于在实验室学的是CPP,所以做开始主要面的是CPP后台开发,但是过程中也面了JAVA研发岗。春招投了5家,秋招投了7家,大致已有结果的如下
春招offer:
腾讯微信支付(已实习)
阿里新零售(已实习)
字节今日头条(面试感觉最佳,3个小时结束流程)
美团广告(面试官好喜欢给我推荐书籍,目前还没看。。。)
CVTE(一面结束,玄学面试)
秋招offer:
腾讯微信支付(实习已转正)
阿里新零售(实习已转正)
字节技术中台(已意向,依然面试感觉最佳)
百度搜索架构部(已意向)
学习过程:
学习过程所看的书籍可参考@我不是小康 ,我们都深受@健康成长天线宝宝啊 大佬的学习之路影响,从中收获很多
在学习过程中有许多自己的感想。可能跟我个人性格有关,我比较喜欢去探索一些底层原理。比如在看《Linux内核设计与实现》时看到slab层染色时,就会去探索为什么要染色,染色怎么做,然后就会发现和CPU的全相联和组相联等概念有关。大家都会看《深度探索C++对象模型》去学习C++的内存对象模型,也会知道C++的虚函数原理,但是虚函数查找执行在汇编层面是怎样的呢?另外就是自己了解的关于CPU缓存一致性问题(腾讯面试官问过,还建议我看一下x86体系架构)
现在招聘的要求也来越高了,技术理解只有广度已经行不通了,项目经历也从加分项变成了必备项。所以首先对于基础知识的学习,一定不能浅尝辄止,很多大厂挖掘的深度非常深(阿里问过我同学@我不是小康 全加器和半加器的区别)。我在最开始学习的时候对于技术深层原理的探索是出自个人兴趣,后来面试后发现技术面试官很多都是技术宅,他们很乐意探索技术,他们经常跟我聊的很high,最后还会推荐我一些书籍(已经很多面试官给我推荐书籍了,从C++到x86体系架构,再到分布式存储),还有面试官建议我自己写一个简单的Linux内核。我在学习过程中最开始也不擅长总结,后来在我同学的影响下,也开始整理,最后那么多书籍经过浓缩就变成了一个个精简的word文档,在后来找工作的时候真香~~
刷题:
现在笔试,或者是面试刷题,成了很多人的拦路虎,我最开始的时候也是非常害怕做题,实习面试字节之前我紧张的不行,总担心自己一个题都做不出来。但是经过这些面试和笔试,有些感受还是不太一样
首先笔试。说实话,笔试是真难,要想全部做出来,感觉没有竞赛经历还是太困难了。不过也只能尽人事了,最开始我找不到一个可以练习笔试的平台,后来无意之间发现了一个北大up主——大雪菜的刷题平台(https://www.acwing.com/),后来也推荐给了我同学。这个北大大佬的平台上既可以锻炼笔试能力,也可以刷一些面试常见题。它提供的是笔试做题的那种编码版面,需要自己控制输入输出,不像lc那样只写一个函数功能。因此对于提升笔试能力有一定帮助。
其次面试手撕代码。这种就可以多刷lc和剑指offer。很多厂的手撕代码题不会很难(如果非常难,你可能要考虑一下是不是劝退了),我在我的lc主页上收藏了一些我面试常见的题(我也没面过几家公司,可能没有普遍性,主页链接 https://leetcode-cn.com/list/kwq1xth),刷题可以多总结一下,面试常问的就那些题型。另外,切忌在面试时闷头做题,一定要在3分钟之内给出思路,然后依照要求进行实现。
源码:
很多公司都比较喜欢面试人阅读过相关源码,体现一个人的学习能力和对新技术的探索。阅读源码要注重两点:1、项目的选择,2、源码的阅读方法。
1、选择源码一定要选择广为人知,确实性能优异的项目。这样的项目的技术点更多,更经典或者更新,同时和面试官有共同话题。如果自己时间不是非常充足,可以找一些比较小的项目。我在学习的时候主要看了levelDB和libevent这两个项目
2、对于源码阅读方法,我最开始也是从模块功能到实现细节这样的过程去分析,但是后来发现,这样直接去看会很干,知其然而不知其所以然。所以我后来就会去看这些项目的应用场景,去分析它到底在解决一个什么问题。只有在了解了这些才会明白为什么会有这个项目,为什么其他类似的项目不能取代它(这不正是面试官最喜欢问的嘛),也只有这样才会明白它为什么是这样的架构设计(没有一个架构是脱离业务的),搞明白这些,看懂源码实现细节就是水到渠成的事了。比如我在看完levelDB后,对于它基于LSM的思想进行了一些分析,为什么用这种架构(提高读能力),有什么弊端(写放大),怎么改进(查找了一些国外的论文,找到了一些解决方案,SSD+KV分离)。这些是对一个项目的分析,也是面试时和面试官的谈资,不然阅读这个项目就没有任何意义。
项目:
前面说到了,现在面试,项目经历已经成了一个必选项。不管项目大小,star个数。项目关键的是要体现学习能力,个人思考,还有编码能力。在已经有项目之后,如何去说非常重要,面试官完全不知道你的项目,而且他每天面试那么多人,不可能每个都会去GitHub主页上看的,就算看,也只是大致看看编码风格(实习时我看过我的同事面试,每天他的工作巨多,都是挤时间出来面试,所以面试者对于项目的介绍几乎完全就是在面试那一个小时之内,不要太寄希望于面试官还会在面试之后去GitHub上仔细看)。
我最开始面试介绍项目时,直接就开始将我的项目是xxx,有xxx技术,有些细节xxx是怎么设计的,事无巨细全部说出来。发现这样有的面试官根本没有耐心听完,同时他抓不到重点,没有提问空间,导致提一些很干的基础底层技术问题。其实面试官更想看到面试者的思考,看到项目的价值。不要让他觉得你这个项目毫无价值,只是为了应付面试。比如做了一个文件服务器,首先可以说,当初你想做一个文件共享平台,方便同学之间的文献,资料共享,为了实现这个需求开始了这个项目。然后介绍时,关键介绍项目功能,核心技术点,功能效果。比如:这个是一个xxx文件服务器,主要用于实现xxx功能,应用了xxx,xxx,xxx等技术,并发量达到xxx,文件传输速度达到xxx,目前有多少人在使用。不要介绍的太详细,这样给面试官留下提问的空间,充分的去展现项目。
实习:
误打误撞,不知道为什么让我这个菜鸡拿到这个实习机会,在实习期间,我收获很多,过程也很痛苦。
首先,不能盲目地相信实习就一定会在秋招时加分(也可能是招致针对的原因,我秋招面试美团时,被狂问架构设计,领域驱动设计,搞得人都要死)。如果只想通过实习镀金,作为进入BAT的加分项,那么去一些较小的公司价值不大,一定要去实力相近的公司才有分量(当然对于实在是想通过实习学习技术,提升自己的人来说,就没必要过多地关注去哪实习,自己满意就行)。
其次,认为自己是个实习生,公司也不会要我做什么重要的东西,我主要就是学习。这种想法千万不能有。进入公司,导师,leader都知道你是个实习生,但安排工作时一点也不会含糊的,想要学习,自己挤时间出来(而且现在卷的这么严重,大家实习都在玩命,说是说实习生,主要是学习,结果最后考核时一个个都拿得出很多产出,对比之下感觉自己啥都没做)。我在实习时,刚进去花了两周熟悉业务,第三周就开始设计一个新项目实现方案,从需求分析,用例梳理,领域划分,时序绘制,系统交互、库表设计都要做出来,期间导师会指出不足和需优化的地方,然后你重新去想。在方案确定之后就开始迭代,我作为一个实习生,和一群工作了10年的人组队开发,进度每次都是被我阻塞,所以压力非常大,经常加班,实习两个月,就没有过周末。
第三,也是很关键的一点,抛弃学生思维。作为一个在校学生,往往都太过多地关注技术本身,而没有去思考业务。在学校是为了技术而技术,但是在公司,是为了业务而技术(我一直认为,互联网科技公司,准确地应该叫互联网科技商业公司,他们做高科技是为了商业,为了赚钱,如果能用极其脑残的技术转到和现在一样的钱,他们是不会花那么大代价去研发新技术的)
第四,在实习期间,为了能够完成开发工作,我学习了《领域驱动设计》,《软件方法》等书,这些书对于了解DDD和微服务很有帮助(虽然我很多也不理解,实践经验太少)
第五,经过这个实习,我改变了对于互联网行业的认识。在校的时候听大家都说互联网这好那好,这不好那不好。我个人认为,互联网行业只是从业的一条路,其他的路未必不是一个好的选择。如果自己很喜欢其他行业,就因为说这个行业什么钱多就进来非常不好,这样很委屈自己,干的不开心也不会长久,但是我很喜欢我同事跟我说的一句话:互联网不是最好的,它和其他行业一样很累,甚至更累,但是它可以让你获得其他有些行业付出同样辛苦却获得不到的回报。这话有点现实~~
第六就是,我在这次实习中见到了许多大佬,不管是学历,能力都碾压我的存在。这让我明白,互联网不缺天才,自己只是一个社畜~~~
以上就是我个人的一些经历和思考总结,如果有想分享经历,交流学习的大佬,可以找@我不是小康 ,进群交流。
想了解微信支付的同学,欢迎加好友,微信号:zjx17716155510
最后希望各位大佬都能成功上岸,收获心仪的offer!!!
全部评论
(11) 回帖