牛客访谈 |算法还是Java?死磕还是转变?双非硕士秋招总结

与往年相同,牛客访谈如约而至!

每期访谈,我们会邀约一位已工作或已拿到好offer的大佬,

分享他的成功经验,为正在求职路上奋战的你点亮一盏明灯!

本期牛客访谈,我们邀请到已斩百度、京东、顺丰等十几个大厂offer的大佬 @左程云同桌  为大家带来秋招求职分享! 

嘉宾介绍

昵称:@左程云同桌 

学历:硕士研究生

本科:西安科技大学

硕士:西安科技大学

校招offer:Java研发方向:房多多、顺丰、平安产险(sp)、平安智慧城、哈喽出行、依图科技、同花顺、VIPKID、度小满、猫眼、萨摩耶数科(技术架构部);大数据方向:奇安信;算法方向:马蜂窝;测开方向:百度。

入职公司: JD

岗位: Java研发(中台研发部)

个人介绍

我叫唐洋,目前就读于西安科技大学,计算机硕士,计算机应用技术专业,本科毕业以准也第一名的成绩被保送到本校继续攻读硕士研究生学位,硕士阶段研究方向是计算机视觉方向,目前发表学术论文2篇,拿过2次一等奖学金和1次国家奖学金。
秋招的时候,刚开始想找视觉算法方向,不过发现算法工程师对学校是有要求的(C9),而且要求有相关的项目经历、kaggle竞赛、顶会等,这些我都没有。所以后来开始找Java研发方向,拿到一些研发的offer之后,就抱着试试的心态开始找算法工程师的岗位,然后顺利通过马蜂窝的面试,顺利签了三方,但是由于今年疫情的影响,6月3号被通知无法顺利入职,需要解约。于是开始重新准备,继续找工作,最后拿到的JD的Java研发工程师的Offer,JD物流集团,负责数据中台的建设工作。

访谈内容

1、请问你是什么时候开始有意识地为找工作应聘做准备?你给自己制定了求职计划吗?
上研的原因是因为本科的时候没有找到合适的工作,然后学校正好的保研的政策,就参加了。上研的时候我就想着我将来要做算法方向的工作,所以平时有时间一直在看相关资料、计算机基础、刷算法题等工作。到真正准备的找工作的时候,是2019年1月份寒假,就开始在家仔细的复习数据结构、计算机网络、操作系统等,准备找暑期实习(算法岗位),3月份-6月份陆续开始投递简历,但都是石沉大海,没有去了解市场真正的需求。然后7月立马开始转变,准备Java研发岗位的面试,然后大概到9月底,手里有了一些研发的offer,就又开始投递算法工程师的岗位了。

2、从春招暑期实习的死磕算法岗,再到秋招转向Java,最后再到大数据岗、算法岗。可以给我们讲讲转变背后个人的抉择与考量吗?(转变契机,心路历程的角度)

死磕算法是因为我上研就是为了找算法工程师的岗位,因为我本科的时候找了Java研发实习岗位,但是只是做普通的CRUD,觉得不是很有意思。

再转到Java是因为当时投的算法岗位的简历都石沉大海了,有很少几家公司让笔试,但是笔试之后就没有结果了,然后看了下岗位要求,发现一般都需要顶会顶刊、kaggle/天池竞赛经历、或者相关项目经历(研究生阶段虽然做过一些项目,但是太low了,没有什么沉淀),这些我都没有,所以我就放弃了算法工程师的岗位,但是我有Java的实习经历、有Java的项目(本科毕业),所以还算做是个优势,就着了Java研发。

再找了大数据岗位(奇安信),是因为奇安信与Java相关的研发岗位只有大数据,本人本科阶段也使用过Hadoop、Hbase、Hive、Luence、solr等框架,搭建过搜索引擎demo,当时面试就聊得这个项目,然后就顺利拿到了大数据岗位的offer。

最后再去投递了马蜂窝的算法岗位,是因为我有师姐(比我高一届)在里面,然后我就抱着试试看的心态投递了,然后顺利通过了笔试,面试的时候,因为我在学校成绩还算可以(当时拿了国奖),然后就问了写机器学习、深度学习的基础,还有Java内存模型、调优等相关知识,就通过了面试。

最后被分到了马蜂窝大搜部门(主要做Rank),用到的一些技术栈(spark、java、php、hdfs、kafka、hbase、redis)都比较喜欢、岗位的工作内容也比较喜欢,所以就签了。

3、你是从什么时候开始实习的?都在哪些公司实习过?实习的工作内容是什么?对你后面的秋招帮助大吗?在实习方面可以给牛油们一些什么建议?

大四保研结束,陪同学一起找工作,然后自己找到了一个Java研发的实习,是从大四期末到大四下学期开学(2016.12.27-2017.4.5),实习公司是上海红星美凯龙悦家互联网有限公司,在会员开发部,负责写会员权限管理系统的接口,主要工作是:参加敏捷开发培训、权限批量上传接口、角色资源分配接口;写完接口和前端同学交接,提测等。

我觉得实习对后面的秋招还是有一点帮助的,分两个方面来讲:一、在公司我学了SSM框架、学习了前后端分离开发和分模块开发的思想,以及一些工具的使用,如git、maven,和ci、di的流程,敏捷开发的思想等。二、我将公司学习到的东西,应用到了我的本科毕业设计里面(以前是jsp+servlet+jdbc的结构),用springboot+spring+mybatis对项目进行了重构,实现了前后端分离,模块分离,还有一些技术难点的突破。

在实习建议方面,我认为现在公司好像比较看重高并发、性能优化的问题。
实习有的话最好,没有的话也不是不行,如果有实习的话,一定要好好总结一些自己的工作内容,然后对使用到的技术比如redis、dubbo、zookeeper、mysql等有一定的思考,比如常用的功能的实现原理、启动过程、主要组件、优缺点以及改进点等,比如redis你用吧?它是单线程的,为什么还会那么快?dubbo主要组件有哪些?让你去实现的话你该如何实现。如果没有实习的话,就好好准备项目吧,在项目上去提炼一些技术难点,你的解决过程、解决方案,以及还没有可能去做提升。这里给大家分享一个我看的比较好的文章"https://mp.weixin.qq.com/s/oXVi8WgCt3BYuwpSuAMk_Q",他就是在普通的项目当中去总结了一个项目亮点。
如果没有项目经历怎么办?可以去网上或者github上找其他的项目来做。

4、大佬从本科开始就热衷于Java,最后拿了这么多offer,能看出大佬基础非常扎实。可以给牛油们分享一下Java求职的学习路线或者学习心得吗?

计算机基础:计算机网络、计算机操作系统(内存管理、进程管理、epoll/select/poll)、数据结构、linux常用操作等。

Java基础(随便找本靠谱的Java书就行、深入理解JVM虚拟机)、算法题(算法导论、还有左神的程序员代码面试指南)、常用框架原理(博客)、以及一些高级的数据结构(博客)等。具体的看一下我的帖子吧:https://www.nowcoder.com/discuss/327041?source_id=profile_create&channel=666

学习心得的话,我建议先系统性地把基础学习几遍,然后针对面经去复习会比较快一点,学习的方式就是博客,最好能建立起一个知识网,如:从JMM -> GC算法,GC Root的确定,线程逃逸问题,Java对象头(Synchronized实现原理),栈的原理,类加载机制问题,三级缓存结构、内存屏障,即volatile关键字原理,线程调度等,全部可以从jmm发散,或者从某个点切入,也能讲到JMM。

5、现在笔试难度越来越高,知识面考察越来越广,你是如何备战笔试环节的?有什么笔试技巧和笔试注意事项可以分享给大家?

笔试的话,我之前也是经常会挂掉,笔试题一般分为:选择题和算法题,有的公司可能只有算法题(腾讯、字节),前面的选择题就比较easy了,看平时自己的积累,算法题是真的硬,我算法题就平时会去刷牛客(剑指offer)、leetcode(top 100),尽量先自己做,如果30分钟还没有什么思路就可以先去看别的发的思路,然后再用30分钟去解题,如果再不会就去看别人的实现,看看自己和别人的差在哪里。做题的话最好是专项练习,比如这几天都做dp相关的题目,培养自己对dp的敏锐度,最好最好能有自己的总结,比如可以发到自己的博客/github上面,写清楚解题思路和细节。当自己解出来了之后,再去看看有没有其他的方案,争取做到beta 100%。

在技巧上,我认为做算法题的时候千万要调整自己的心态,不要去太关注时间,不能太紧张,否则头脑一片空白,可能暴力的方法你都想不出来。

在面试的时候,如果面试官让手撕代码的话,如果想不出最优解,可以先给出暴力解,然后继续对它优化,我觉得这个优化过程才是面试想要看到的,如果一上来就给出最优解,只能说明你做的题目多,后者更能反映你的算法能力。

6、你参加的技术面试中通常以什么内容为主?关于如何提高面试通过率,你有什么技巧和注意事项可以分享?(面试准备、面试表现等)

面试中问的最多的就是:你用过xxx没,那它是怎么实现的,看过它的源码没,如果让你自己实现一个,你会怎么去实现,该考虑什么?或者是给你一个场景,让你从各方面去考虑、设计。

面试的时候面试官一般不会直接以QA的形式问你(你知道xxx不,它有些什么特点),而是会继续地去深挖,不停地去发散,直到你认输。

比如我面的比较有意思的两个场景题就是:如何设计一个APP注册接口这里我贴出我的回答(大概讨论了1个多小时)

还有一个问题是(房多多)?

做一个服务,只统计一个url在最近一分钟被访问的次数

用多线程、原子操作、定时线程、队列一系列操作完成。

如果服务挂了怎么办?

从主从备份,到zookeeper,再到类似一致性hash环形架构的设计,最后到我认输。

还有阿里的面试当时让我设计一个抢红包算法,给了一些约束,然后让你实现算法,感兴趣的可以去看下,还是比较复杂的。

这些场景题是一个综合的考量,对你的知识广度特别有要求。

关于如何提高面试通过率,面试准备的话,就看面经吧,题目就那么多,看会了就行,每次把面试经历可以录音,面完了自己整理,针对不会的去查资料,或者面完了可以反问面试官对这个问题是怎么看的。

自信、自信、自信,重要的是说三遍,你们是平等的、双向选择的过程,可以当做是技术交流,没有必要把自己的姿态放得很低,让人觉得你好欺负,他可能会故意去刁难你。所以面试过程中一定要自信,主动积极得去和面试官沟通,并将他往你的领域去引导,比如说:面试让你讲讲对Java的理解,那如果你对JMM比较熟悉的话,就可以说,您是指JMM吗?面试官一般会说可以。然后你就从jmm->gc等,一顿巴巴就ok了。

还可能会有压力面,就是在你说话的时候,突然打断你,让你停下来别讲了,直接让你做题,做完继续问你问题,然后再做题。我在字节跳动三面的时候,就是压力面,做了3个算法题,不过最终没能顺利通过,压力确实太大了,被面试官打断、被质疑,我就会有点紧张,导致头脑一片空白了。

7、经历了这么多场面试,可以给我们讲讲你印象最深刻的一次面试吗?对你后续面试产生了什么影响吗?

印象最深的一次面试就是完美世界,笔试是我见过最难得,考的Java语法知识,特别细的那种,我笔试没有通过。但是后来被面试官捞起来了,因为我的本科毕业设计项目他特别感兴趣。

然后在面试的时候,被完虐,同时对面试官五体投地的那种,面经见:https://www.nowcoder.com/discuss/251184?source_id=profile_create&channel=666

面试官的情商真的非常高,面试之后说,我真的很期待和你合作,你的项目我特别感兴趣,但是就是你的基础有点欠缺,他几乎把市面上所有的Java相关的书籍全给看了,感觉JDK就是他写的那种感觉,之后问了他学习方法。然后我认识到我自己真的很菜,基础太薄弱了,知识广度也不够、更别谈深度了,到后面就开始买书,看书,看面经,面经里面只要有我不会的,或者说我理解的有问题的,我都会去网上找博客来寻求答案,同时对博客里面提到的相关资料也会去看,这是一个发散的过程,也是一个构建知识网络的过程。

正因为有了这次的面试,我后面的面试就顺利了很多,陆陆续续拿到了一些offer。

8、每个人在不同阶段都会有自己的小目标,步入职场后,你对自己后期的职业道路有什么规划吗?能不能分享一下?
我的规划是想成为技术架构师,前1~2年先从业务做起,将基础打牢固,开拓自己的知识面,同时对技术要有沉淀,然后在第3年的时候,争取自己能当上个小组长,能独当一面,或者去带新人。

9、除了上述问题,你还有哪些想要分享给牛友们的?

不要总说自己啥也不会,光说不行动,offer是不会来主动找你的,先确定自己感兴趣的工作岗位,再去调研工作岗位的要求是什么,自己是否满足,然后确定自己的目标岗位,计算机基础是肯定要会的,因为是个通用课程,然后针对自己的岗位去找面经来学习吧。

求职内推的时候,要告诉自己的内推人自己的优势是什么(acm经历、大厂实习经历、比较复杂的项目经历等),比如我现在相比其他人的优势就是,我秋招签了马蜂窝的算法工程师,这对于此时的补招机会来说,本来hc就很少,面试官需要在那么多求职者当中挑出几个比较有优势的人来进行面试,最终进行筛选。如果不及时明确自己的优势,那么你可能简历关都过不了。

如果你和我一样是个双非院校的学生,没关系,虽然我们改变不了双非的事实,但是我们可以把自己变得更好,变得更优秀,让自己变成富有竞争力的人!

如果已经签约了,那么时刻关注一下公司的动向,看看是否有裁员,警惕性高一点,不然会像我一样,在家玩了半年,突然被告知无法入职,一下子自己的人生轨迹就被改变了!

如何修改自己的简历,参考(叶神都点过赞的哟):https://www.nowcoder.com/discuss/154151


10、最后,请你给还在秋招的牛油们送句祝福吧!

加油吧,牛油们!2020年,是比较艰难的一年,这时候我们更要迎难而上,悄悄拔尖,然后惊艳所有人!


#VIPKID#
全部评论
沙发
点赞 回复 分享
发布于 2020-07-10 12:09
二楼沙发
点赞 回复 分享
发布于 2020-07-10 12:11
三楼挤挤坐二楼的沙发
点赞 回复 分享
发布于 2020-07-10 13:47

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
9 51 评论
分享
牛客网
牛客企业服务