牛客访谈 |算法还是Java?死磕还是转变?双非硕士秋招总结
与往年相同,牛客访谈如约而至!
分享他的成功经验,为正在求职路上奋战的你点亮一盏明灯!
嘉宾介绍
昵称:@左程云同桌
学历:硕士研究生
本科:西安科技大学
硕士:西安科技大学
校招offer:Java研发方向:房多多、顺丰、平安产险(sp)、平安智慧城、哈喽出行、依图科技、同花顺、VIPKID、度小满、猫眼、萨摩耶数科(技术架构部);大数据方向:奇安信;算法方向:马蜂窝;测开方向:百度。
入职公司: JD
个人介绍
访谈内容
1、请问你是什么时候开始有意识地为找工作应聘做准备?你给自己制定了求职计划吗?死磕算法是因为我上研就是为了找算法工程师的岗位,因为我本科的时候找了Java研发实习岗位,但是只是做普通的CRUD,觉得不是很有意思。
再转到Java是因为当时投的算法岗位的简历都石沉大海了,有很少几家公司让笔试,但是笔试之后就没有结果了,然后看了下岗位要求,发现一般都需要顶会顶刊、kaggle/天池竞赛经历、或者相关项目经历(研究生阶段虽然做过一些项目,但是太low了,没有什么沉淀),这些我都没有,所以我就放弃了算法工程师的岗位,但是我有Java的实习经历、有Java的项目(本科毕业),所以还算做是个优势,就着了Java研发。
再找了大数据岗位(奇安信),是因为奇安信与Java相关的研发岗位只有大数据,本人本科阶段也使用过Hadoop、Hbase、Hive、Luence、solr等框架,搭建过搜索引擎demo,当时面试就聊得这个项目,然后就顺利拿到了大数据岗位的offer。
最后再去投递了马蜂窝的算法岗位,是因为我有师姐(比我高一届)在里面,然后我就抱着试试看的心态投递了,然后顺利通过了笔试,面试的时候,因为我在学校成绩还算可以(当时拿了国奖),然后就问了写机器学习、深度学习的基础,还有Java内存模型、调优等相关知识,就通过了面试。
大四保研结束,陪同学一起找工作,然后自己找到了一个Java研发的实习,是从大四期末到大四下学期开学(2016.12.27-2017.4.5),实习公司是上海红星美凯龙悦家互联网有限公司,在会员开发部,负责写会员权限管理系统的接口,主要工作是:参加敏捷开发培训、权限批量上传接口、角色资源分配接口;写完接口和前端同学交接,提测等。
我觉得实习对后面的秋招还是有一点帮助的,分两个方面来讲:一、在公司我学了SSM框架、学习了前后端分离开发和分模块开发的思想,以及一些工具的使用,如git、maven,和ci、di的流程,敏捷开发的思想等。二、我将公司学习到的东西,应用到了我的本科毕业设计里面(以前是jsp+servlet+jdbc的结构),用springboot+spring+mybatis对项目进行了重构,实现了前后端分离,模块分离,还有一些技术难点的突破。
计算机基础:计算机网络、计算机操作系统(内存管理、进程管理、epoll/select/poll)、数据结构、linux常用操作等。
Java基础(随便找本靠谱的Java书就行、深入理解JVM虚拟机)、算法题(算法导论、还有左神的程序员代码面试指南)、常用框架原理(博客)、以及一些高级的数据结构(博客)等。具体的看一下我的帖子吧:https://www.nowcoder.com/discuss/327041?source_id=profile_create&channel=666
笔试的话,我之前也是经常会挂掉,笔试题一般分为:选择题和算法题,有的公司可能只有算法题(腾讯、字节),前面的选择题就比较easy了,看平时自己的积累,算法题是真的硬,我算法题就平时会去刷牛客(剑指offer)、leetcode(top 100),尽量先自己做,如果30分钟还没有什么思路就可以先去看别的发的思路,然后再用30分钟去解题,如果再不会就去看别人的实现,看看自己和别人的差在哪里。做题的话最好是专项练习,比如这几天都做dp相关的题目,培养自己对dp的敏锐度,最好最好能有自己的总结,比如可以发到自己的博客/github上面,写清楚解题思路和细节。当自己解出来了之后,再去看看有没有其他的方案,争取做到beta 100%。
在技巧上,我认为做算法题的时候千万要调整自己的心态,不要去太关注时间,不能太紧张,否则头脑一片空白,可能暴力的方法你都想不出来。
面试中问的最多的就是:你用过xxx没,那它是怎么实现的,看过它的源码没,如果让你自己实现一个,你会怎么去实现,该考虑什么?或者是给你一个场景,让你从各方面去考虑、设计。
面试的时候面试官一般不会直接以QA的形式问你(你知道xxx不,它有些什么特点),而是会继续地去深挖,不停地去发散,直到你认输。
比如我面的比较有意思的两个场景题就是:如何设计一个APP注册接口这里我贴出我的回答(大概讨论了1个多小时)
还有一个问题是(房多多)?
做一个服务,只统计一个url在最近一分钟被访问的次数
用多线程、原子操作、定时线程、队列一系列操作完成。
如果服务挂了怎么办?
从主从备份,到zookeeper,再到类似一致性hash环形架构的设计,最后到我认输。
还有阿里的面试当时让我设计一个抢红包算法,给了一些约束,然后让你实现算法,感兴趣的可以去看下,还是比较复杂的。
这些场景题是一个综合的考量,对你的知识广度特别有要求。
关于如何提高面试通过率,面试准备的话,就看面经吧,题目就那么多,看会了就行,每次把面试经历可以录音,面完了自己整理,针对不会的去查资料,或者面完了可以反问面试官对这个问题是怎么看的。
自信、自信、自信,重要的是说三遍,你们是平等的、双向选择的过程,可以当做是技术交流,没有必要把自己的姿态放得很低,让人觉得你好欺负,他可能会故意去刁难你。所以面试过程中一定要自信,主动积极得去和面试官沟通,并将他往你的领域去引导,比如说:面试让你讲讲对Java的理解,那如果你对JMM比较熟悉的话,就可以说,您是指JMM吗?面试官一般会说可以。然后你就从jmm->gc等,一顿巴巴就ok了。
印象最深的一次面试就是完美世界,笔试是我见过最难得,考的Java语法知识,特别细的那种,我笔试没有通过。但是后来被面试官捞起来了,因为我的本科毕业设计项目他特别感兴趣。
然后在面试的时候,被完虐,同时对面试官五体投地的那种,面经见:https://www.nowcoder.com/discuss/251184?source_id=profile_create&channel=666
面试官的情商真的非常高,面试之后说,我真的很期待和你合作,你的项目我特别感兴趣,但是就是你的基础有点欠缺,他几乎把市面上所有的Java相关的书籍全给看了,感觉JDK就是他写的那种感觉,之后问了他学习方法。然后我认识到我自己真的很菜,基础太薄弱了,知识广度也不够、更别谈深度了,到后面就开始买书,看书,看面经,面经里面只要有我不会的,或者说我理解的有问题的,我都会去网上找博客来寻求答案,同时对博客里面提到的相关资料也会去看,这是一个发散的过程,也是一个构建知识网络的过程。
不要总说自己啥也不会,光说不行动,offer是不会来主动找你的,先确定自己感兴趣的工作岗位,再去调研工作岗位的要求是什么,自己是否满足,然后确定自己的目标岗位,计算机基础是肯定要会的,因为是个通用课程,然后针对自己的岗位去找面经来学习吧。
求职内推的时候,要告诉自己的内推人自己的优势是什么(acm经历、大厂实习经历、比较复杂的项目经历等),比如我现在相比其他人的优势就是,我秋招签了马蜂窝的算法工程师,这对于此时的补招机会来说,本来hc就很少,面试官需要在那么多求职者当中挑出几个比较有优势的人来进行面试,最终进行筛选。如果不及时明确自己的优势,那么你可能简历关都过不了。
如果你和我一样是个双非院校的学生,没关系,虽然我们改变不了双非的事实,但是我们可以把自己变得更好,变得更优秀,让自己变成富有竞争力的人!
如果已经签约了,那么时刻关注一下公司的动向,看看是否有裁员,警惕性高一点,不然会像我一样,在家玩了半年,突然被告知无法入职,一下子自己的人生轨迹就被改变了!
如何修改自己的简历,参考(叶神都点过赞的哟):https://www.nowcoder.com/discuss/154151
加油吧,牛油们!2020年,是比较艰难的一年,这时候我们更要迎难而上,悄悄拔尖,然后惊艳所有人!