在佛系经营这个公众号一年多之后,Jerry哥将自己的名字改成了JerryCode
Jerry哥作为一个刚刚结束2020秋招的人,谈谈自己一开始的乌托邦和最后的实现
- 背景
- 研一
- 研二
- 实习
- 秋招
- 最后的选择
背景
先说一下自己的背景,Jerry哥本硕都是一个中流211学校
的学生,本科的时候只学过C语言
的知识,做过几个当时看起来很牛逼的课设(对于本科生来说),不排斥打代码。当然本科的时候学习是比较懒散的,看到什么学什么,没有什么特定的目标。
考研的时候也是佛系,也就考了本校的研究生。但是在当时,计算机学院的分数可比通信学院的分数低,而且那个时候华为是非常火的,所以还是报考了通信学院。
作为一名研究生,我是在一个中流211学校就读,读的也不是计算机科班专业,老师对计算机这块也不是很懂,但是研究方向却是深度学习方面的。由于老师的横向项目也是比较多,所以自己平时既需要做学术上的汇报,还要参与老师的横向项目。所幸的是项目都是和打代码相关,偏软件,也就萌生了往软开发展的想法。
研一
研一刚进来的时候,自己其实还是个萌新,啥都不懂,那个时候学院宣传的是一半的人可以进世界500强,而且很多人都去了华为、中兴、携程这些公司。那个时候华为中兴还是香饽饽,而且由于自己刚从本科升入研究生,感觉只要找个年薪有20W左右的工作就很满足了。
研一刚入学的时候,自己已经会python了,但是还是不是很熟练,数据结构基础为0,计算机网络学过皮毛,操作系统为0,可以说干啥啥不行,搬砖都不行。那时候只会import导包,然后十几行代码完成一件事情。
后来看师兄师姐都找的是java相关的工作,就开始学习java,买的第一本书叫做《第一行代码Java》
,从类、对象再到各种private、public关键字一个个的学,中间也是走了很多弯路。学习数据结构,从《大话数据结构》
这本书,了解了什么是树、链表、数组等等,原来树中还有前序遍历、中序遍历和后序遍历,不单单有二叉树,还有B树、B+树,真是千变万化。
研一快一半的时候,开始对数据结构有一定的了解,也知道了当时间复杂度过高的时候开始考虑以时间换空间这样的操作。当然光看数据结构其实对自己没有太多的提升,当然需要做一些算法题来进行总结。我的第一本入门书是《剑指offer》
。现在回看感觉《剑指》
其实非常入门了,但对于当时的我来说其实是非常吃力的。我还记得第一道题目是二维数组的查找,把我想的那是头昏脑胀。其实这个就和长跑比赛一样,一下子让你跑十公里,可能没跑完三公里你整个人就挂在那里了。训练总是循序渐进的,俗话说一口吃不下一个大胖子,目标跑十公里,总要从一公里开始,一公里一公里的往上加才是训练的本质。
所以,我在那些无聊的研究生课上,把这本《剑指offer》
读完了,对一些算法题有一定的了解。Java上面我也是会了一些语法基础,最起码可以在Leetcode上面做一些题目了。
当经典的两数之和不再使用两层for循环的时候,我想我已经开始触碰到算法的皮毛了。
后来的算法的学习我要感谢一个网站叫做acwing,网站的创始人是yxc,y总当时还是北大研三的学生,曾经拿过noip的金牌。他对算法有很深的了解,也拿过几乎所有互联网的SSP(我一开始也不信,直到你看完他的算法讲解就会感觉这种人活该拿ssp)。当时的我对背包问题似懂非懂,于是乎我就去哔哩哔哩上面搜“背包九讲”,随缘地点开了第一个视频连接打算看看up主讲的怎么样。
yxc在哔哩哔哩上讲了八周的leetcode专题解答,我花了一个月的时间看完了leetcode专题,就四个字,茅塞顿开。
快研二的时候,我的leetcode已经刷了三百道左右的题目了,可以说那个时候对算法也有了热爱。至少拿到一道题目,就大概知道是用什么数据结构去解决问题。
研二
研一要结束了,我帮老师做了一个后端的项目,所以我就打算找后端的工作。其实一开始的我,是对算法工程师情有独钟。
那时候的算法工程师,是大家眼中的香饽饽。
一是因为算法工程师工资比较高,比起普通的客户端开发和服务端开发来说,工资至少要高个3k以上;
二是因为算法工程师的难度比较大,更加需要深厚的算法功底、数学知识,一般都需要一篇非常好的论文才有资格去参加面试
而且那个时候大家对算法工程师的宣传都是这样
当时作为萌新,都是听到XXX实验室某个巨佬师兄师姐成功面上了大厂算法工程师,成为了学院的的焦点。毕竟算法工程师是神仙打架,八仙过海,各显神通。
当然现在变成了这样
其实一开始都是学的cpp的相关知识,然后打算打一个比赛拿个名次,希望自己也能成为人上人。
后来放弃了,主要有两点:
- 自己当时没有好的论文,也没有好的idea,至少论文上会比其他人吃亏
- 当时自己的计算机基础不是很扎实,虽然做过比较多的项目,但是毕竟面试都会问的基础比较深
当然放弃的过程肯定没有这么彻底,肯定有起起落落的过程,
首先一个既定事实就是所有的稍微偏向编程的工科实验室都在做ml相关。甭管有没有关系只要是数据就拿进来卷一卷,数据本身有没有意义也不关心,美其名曰创新点。在这么多实验室都在招ml相关学生的同时工业界的需求并没有明显增加(别听培训中介说的人员需求增加几十倍,他不这么说你会去报班?)。所以整个行业的门槛在水涨船高,这是事实。
我很明白很多人觉得AI说出来高大上,但是真的没有!!!一开始学习的时候很有乐趣,加一点点小trick就是准确率(accuracy)60%->85%的改变。但是之后就是无限的调参(tuning)AKA 炼丹,真的非常非常痛苦!!!没有技术含量(完全靠经验,调多了就会调了),完全就是一个字:试。通常情况下没有办法解释为啥这个参数最优,代表:神经网络。
小公司不可能自己针对自己业务设计架构,没有那个资金的。大公司有资金去招人设计,但是设计出来的有办法保证性能优于开源架构?即便自己设计架构(bytedance)也真的就是北美那几个学校+top2的phd有机会参与,硕士进去还是调参。(前排提示:这一段有部分为我个人猜测,毕竟我是做后端的)
后来和一个在企鹅厂工作的十余年的老兵交流之后,他建议我可以投一下实习,看看自己的简历在实习市场属于什么的位置,再对自己的求职意向有一个评估。当然我没有去投,因为就自我评估而言,我应该属于最后一档的学生。
所以挣扎了一段时间后,也打算从算法往后端走了。
之前公众号里也举过一个例子
说真的现在算法岗前方一片狼藉 工资高的背后各路神仙打架 开发确实是一个不错的港湾 给大家举一个例子
某末流985实验室非王牌实验室
a同学平时是实验室的大神 实验室主要是以做深度学习算法为主的 但是还没有paper 但是凭借对深度学习的热爱想找算法岗 毕竟算法岗看起来是那么的高大上
b同学平时在实验室里是比较一般的同学 深知自己以后是走不了算法这一条路 所以自己在网上自学了前端/后端的知识 打算找一份JAVA开发的工作
到最后可能a 同学可能会因为paper 学历等原因 可能连一面都过不了
我身边就是有一个这样的真实的案例 一个师兄是图像实验室的 然后发了一篇不错的SCI二区 idea 也是自己想的 最后面的是阿里的某部门算法岗
最后三面都过了之后接到电话说感觉学历有点低 可能和岗位不match
个人还是比较难受的 因为算法岗这种岗位无法突击 需要平时对某一领域有一定的深入研究
如通信信号领域、脑电波领域、生物医学信号领域等等 其实在某个特定领域针对一些算法有较为深入的研究并且真的真的是在这个领域有天赋
(不过这种人一般都被劝去读博士了吧,然后后面应该会去面技术 博士技术大咖专场)
所以如果没有比赛top,没有不错的会议论文,建议还是搞搞开发吧,毕竟降维打击这种东西,还是一个定理,平时对编程悟性高的人,转开发还是很快就上手的
可惜现在后端开发也是卷得很严重了orz
当时的我先去看了看对后端工作的要求,后端工作一般都需要会一门后端语言如java、go、PHP等,了解mysql、redis,了解计算机网络、操作系统、算法与数据结构等基础知识。
从研二开始,我开始学习JVM虚拟机的知识和408全家桶。研二开始没课了,自己也花比较多的时间去补一些基础。
学习计算机网络,我看的是王道视频,由于之前有一定的学习基础,看起来非常快,大概花了两周左右的时间就看完了。计算机网络的核心就是OSI七层模型,自底向上的对数据分发进行学习,彻底了解两台计算机在广域网之间是如何进行通信的。
操作系统我是过完年后才开始学的,操作系统也是看的是王道视频,大概花了两周左右的时间。
后端开发工程师,还要对后端使用的一些中间件有一定的了解,主要还是两个东西,一个是mysql,一个是redis
语言方面,无论是go还是java,不外乎都是垃圾回收机制,并发编程这些东西,当然java会比较复杂点,可能还会涉及到一些并发类的实现。
mysql
mysql的学习,我是用视频+书籍为主
- Mysql中有哪几种锁?
- 简述在MySQL数据库中MyISAM和InnoDB的区别
- Mysql中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
- B+树索引和哈希索引的区别
这里推荐我学习的两本书《高性能mysql》和《mysql必知必会》
高性能mysql主要会讲到一些关于数据库的底层知识,比如隔离级别,引擎选择,mysql内部执行一条指令需要经历哪些架构,主从之间怎么复制等等。这本书也是很多人推荐的一本神书,确实物有所值。
至于mysql必知必会,主要讲的是一些基础的sql语句,面试中问到sql的机会虽然并不是很大,但是一旦问到了,最好是能够回答上来,证明你并不是只会八股文,也可以实战
redis
redis其实也是数据库中的一种,通常用于做一些缓存方面的处理
- Redis是什么
- 五种数据类型
- 什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?
- Redis 有哪些架构模式?讲讲各自的特点
- 什么是一致性哈希算法?什么是哈希槽?
关于语言方面,这个就看你准备的是什么语言了,由于我准备的是Java,所以很多知识都会往高并发、虚拟机以及垃圾回收等去学习。虽然大家常说语言不是关键,后期可以另外学,基础才是王道。但是其实一个大前提就是换语言首先自己要懂这个语言的精髓。
后续可以写一些关于准备秋招推荐的书籍和视频。
实习
暑假实习,我拿到了两个offer,一个是字节,一个是腾讯。 因为我投的比较早,所以拿了这两个之后其他家的实习面试我都没面了。都是后端的开发岗位,字节是data部门,腾讯是ieg,最后还是去了字节,可能是因为ieg不是纯后台把。面试的时候感觉两家公司的侧重点完全不一样。
字节就像是你的老婆,打破砂锅问到底,每一个知识点都问的很基础,甚至面试官还手写了一段sql代码问你在哪个隔离级别下会出现什么样的事情,不单单需要你只会背诵八股文。
腾讯更像是你的女朋友,不在乎的你的基础背景,只问项目,把你项目上的点一个个挖出来,并且给你出题说如果我现在的需求是XXX你要怎么做,像极了读书时期的纪念日,动不动就想搞点浪漫的事情。
最后还是去了字节,后端开发,转了golang语言。实习大概做了三个多月的时候,也成功的留用了。字节是大小周,三餐+房补,对实习生来说非常友好,而且同事也是非常nice,有问必答。
后续可以出一个实习的文章说说实习遇到的趣事。
秋招
秋招的时候大概面了十家左右的公司吧。
pdd-面试不是很难,三面有说有笑,由于是java技术栈我也比较熟悉,问的也不是很深,主要还是讨论下在字节做的啥。11116确实顶不住,面包再大也很难吃得下。
字节-转正成功,其实字节秋招应该问的比较难,主要每个礼拜都有笔试题,笔试题我看了,确实属于比较难的了,而且不能跳出界面使用编辑器,更加考验算法功底了。
美团-面试不是很难,但是听说是去字节实习的,有一面手撕了四道算法题,然后没有问项目,所幸都做出来了。
网易-面试感觉比较拖拉,整个战线非常长,所幸也是拿了
腾讯-不知道为啥,八月的时候ieg给我打电话就问我还想不想去腾讯,当时说可以,记得捞我。等到提前批笔试完正式批结束了都没捞我,整个秋招过程中没有面过企鹅,奇了怪了,是不是因为实习拒了所以关了小黑屋了
阿里-二面挂,问的特别深,至少我感觉除了他家之外其他家问不出这么深的问题,基本上不热身没有前戏,直接往高难度发展,很多时候我知道的答案都出现在他的题干里,故卒
最后的选择
最后的最后我还是选择了美团,可能有这几个原因吧
- 我面的是后端的岗位,由于实习的时候接触过golang,感觉go的整个生态有种说不出来的别扭,可能也是自己一开始接触的语言是Java,先入为主了
- 在字节实习的时候其实和全职员工一样,由于字节是大小周,感觉也是比较累,没有什么时间做技术沉淀
- 个人比较看好美团的未来发展,也知道美团在Java技术这块建树颇丰,而且美团双休不累,前期更加适合发育
其实每个人考虑的点都不一样,鱼和熊掌不能兼得,选择自己想要的就好啦。
接下来打算整理一下秋招的一些思路,mysql面试题,redis面试题,希望能够帮助到大家。
今年也遇到了许多不错的小伙伴,特此感谢一波哈哈哈
第一个是Guide哥,我在准备面试的过程中经常打开他整理的Javaguide面试宝典,有一说一是我见过最好的Java突击面试题了,五星好评点上去了。专注Java后端学习和大厂面试的公众号
第二个是我在字节实习认识的Yang哥,ACM巨佬,估计是选字节了,毕竟SSP超级巨星,ACL顶会在手,天下我有。专注于分享自然语言处理知识和算法技巧,这里有最深度的论文解读和最详细的算法题解。
第三个是关注了好些年的帅地,一开始看帅地的公众号感觉是一个三十余岁的老码农,后来才发现是一个刚要踏入社会的程序员。帅地在鹅厂工作,大学期间通过自学编程,挣到了人生的第一个 30W
和Jerry哥聊技术,聊生活