几个头痛的问题
最近不是求职季嘛,经常听小伙伴们提及的几个重要的话题是什么呢?
- 第1种情况:在念书期间没进过实验室,没有参加过比赛,也没有实习经历,那找工作时,简历上、面试时,项目经验这一块怎么弄呢?
- 第2种情况:读研的小伙伴,期间以看论文,做研究类工作为主,或者说搞的是A研究,做的是A相关的项目,毕业有意愿从事计算机相关的岗位,简历上没项目怎么办?
- 第3种情况:已经参加工作了的小伙伴,说之前一直做的A工作或者A岗位,现在有转开发相关岗位的意愿,简历上也没项目经验怎么办呢?
老实讲,这几个问题是蛮头痛的,而且还不太好说。
我自己也有亲身体会,之前记得分享过自己的的社招转行经历,当时应该属于上面说的第3种情况,基本上也是头铁硬转的,自学党嘛,谈不上有什么实际的互联网开发经验。老实讲自己的运气还算可以,但是有些东西好像也不算单纯偶然。
尝试聊聊个人当时的几点准备和想法吧,就这个问题上,希望能有用。
应届生?项目经验?
我发现提到类似刚才上面那些问题的小伙伴们,很多其实都是应届毕业生(包括本、硕),表示没有项目经验有点慌。
u1s1,应届生校招面试时,对项目经历的要求倒还好,不用太过焦虑!
有一个比这个更重要的事情那就是基础的准备!有些小伙伴有疑问了,天天掰扯基础基础,到底啥是基础啊?!
这个在之前的两篇学习路线的梳理文中都有提及,而且基础都是通用的:
- C/C++学习路线梳理(后台开发方向)
- Java后端开发学习路线梳理
主要包括:
- 编程语言
- 数据结构与算法题
- 计算机网络
- 操作系统
- 数据库/SQL
- 设计模式
- 应用框架
自己有很多朋友同学都是一线面试官,就这个问题还专门和他们交流过。面试官心里非常清楚,要求应届生有比较厚重的项目经验是不现实的,更是完全没有必要的。应届生可塑性强,只要以上基础扎实,公司都是非常愿意培养的。
面试过程中,有项目/比赛/实习等类似经历都是加分项,这没错,但别忘了前提是建立在基础表现得扎实的情况下,如果抛去这个前提,所谓的项目经历怕只会画蛇添足,并不能起到决定性作用。
再打个很实际的比喻,找过工作的小伙伴们可能也有体会。面试时,项目经验/实习经历吹得再多,一道手写算法题写不出来照样凉;但反之,如果项目经历虽稍欠,但对于面试官提出的基础问题和算法题一答一个准,则十有八九能上岸。
所以我觉得不能本末倒置,基础才是应该着力去抓的。
如果距离校招还有不少时间,那在校期间如果有比较合适的实验室项目/比赛/实习,当然可以尝试一下,这也是一段难得的经历,可以写进简历。但如果真的马上临近校招了,还是应该先把基础准备扎实。
对有些硕士生而言,其实大部分在读研阶段导师都还是会安排任务的,甚至包括各种开周会、写报告,这些过程中所做的研究其实都可以成为项目经验的一部分,只不过需要自己好好挖掘、提炼、整理、表达出来。
再者,就算读研期间没有项目,那毕业论文总该是有的,也总应该是做了一个研究,或者完成了一件事情。这些其实也可以好好挖掘一下,表达成项目经验写进简历。
其实面试时,对于面试官来说,大概率不太会关心所做项目的具体内容。很多时候只是通过聊项目的方式,来感知我们的学习能力、表达能力,以及思维的清晰程度。
所以就看会不会 吹 表达了!
善于利用开源项目
优秀的开源作者们积攒了数十年的财富
所有的知识、见识、智慧和艺术
像是专门为我们准备的礼物
我们为什么不 白瞟 利用呢?
就个人感受而言,开源项目对于我成长的帮助是非常之大的。因为像我这种非科班自学党,练手的几乎唯一途径那就是大量研究、吸收别人的开源项目,眼界很大程度上也是靠这个来提升。
之前也已经推荐过很多相关的开源项目了:
那又有小伙伴可能会疑问,如何把一个开源项目吸收成自己的,以应付面试呢?
个人觉得不能靠死记硬背,也不可泛泛而看,而应该是有主有次,重在吸收技术关键点和整体架构思路。所以如果要做个总结,我愿意以这样一个大致流程去吸收别人的开源项目:
- 首先正式开始啃开源项目之前,基础不可少,比如语言底子、网络协议、基本工具、基本应用框架、甚至包括一些设计模式等等,否则人家开源项目很难下牙。
- 正式看一个开源项目时,首先可以全局梳理一下该项目用到的所有技术点、组件以及对应的作用和解决的问题,没听过的先去了解,不会的先单独补,各个击破先。
- 接下来很重要的一步是:把项目运行跑起来!只要能跑起来看到效果,也就成功了一半,顿时信心大增。
- 针对某几个关键技术点,或者关键模块各个击破,规划好一个顺序,仔细研究其源代码,跟进去细看。过程中可以借助于思维导图的辅助来做总结、串联和回顾,并且做好笔记和输出,否则即使当时颇有心得,事后又像走迷宫一样再踩一遍坑。当然该过程肯定是有个反复的,想一遍搞定不太可能。几轮一折腾,应该说对这个开源项目就比较熟悉了。
- 最后一步才是考虑把这个开源项目转化成自己的。比如可以考虑做代码上的优化,功能上的优化,甚至加入一些创新一点的想法,当然咱也可以把它推翻重来。
善于做好技术输出
个人觉得,无论应届校招还是社招转行,在没有项目经验的情况下,要想博得面试官的青睐,别的不说,做技术的态度肯定要有,这样最起码能证明自己是有方面的意愿和行动,否则如何说服别人呢。
那如何体现一个人的技术态度呢?
一个最直接,最有说服力的方式那就是亮出你的技术博客或者GitHub链接,或者其他作品链接,这个再面试时是一个很大的加分项。其实面试官可能真的没有在意里面具体写的什么内容,但是我们热爱技术、热爱分享的样子已经被面试官着着实实地看在眼里了。
所以学完一个东西,一定一定记得要留下点什么,这些都是后续发展的资本。
再比方说,由于转行真的没有实际的企业项目经验,但是咱通过自学,有自己的技术心得或者作品,那面试官跟咱也有得聊了,而且大概率是我们自己熟悉的领域,这样岂不是也为自己赢得了机会。
这个在之前做过的那么多期搭建博客、写博客的视频里,就是这个意思,因为我自己觉得受用很大,所以觉得可以尝试。
善于利用知名框架和项目
再比方说,还是由于应届或者转行确实没有实际项目经验,但如果我们研究过企业级开发所涉及的常用框架、项目或者技术的核心原理,深入到源码级别,那面试时也是可以和面试官侃上几个回合的。
常见的比如Spring
、Redis
、Nginx
… 等等这种很多互联网公司都会使用的知名技术、框架或者项目,只要有一个很懂原理,能够在源码级别和面试官侃侃而谈,那上岸的机会还是有的。毕竟这些知名框架中的任何一个,都能折射出很多的底层知识和内功。
不过我想,如果能到这个地步,一般来说自己应该也会有很漂亮的技术输出,甚至个人作品了,这种情况下还是非常受欢迎的。
挖掘已有项目的亮点
当然这一条指的是已经参加工作的小伙伴,比如我当时,从通信领域的某一个搬砖岗想转互联网,虽然说项目的业务和技术栈都有差别,但是前公司项目并不是完全不能用,照样可以写进简历,只不过需要做一下挖掘,开发领域共性的东西提炼一下。
而且也可以有意识地把之前参与过的项目里,一些有技术含量的东西深耕挖掘一下,有些东西可能不是我们做的,但是还是可以问、可以打听、可以提前准备,然后结合代码花点时间理解和吃透,从而变成自己的,这样也就可以写了。
而且有些情况下,也可以结合一些开源项目里看到的比较先进的技术点,可以想着如何融合到现有做过的项目里去,只要自己能理解,也就能转换成自己的项目经验。
后 记
聊了这么多,必须要说的是,这些能够得以实施的前提是,最起码还有时间来准备和周旋。如果实在没时间准备这些了,那还不如巩固基础,先保证能拿到基本分为宜。
成年人的世界里好像真的没有容易的事情,既然我们想在没有项目经历的情况下跨过这道门槛,那过程中肯定就没有轻松的事情,掉点毛也正常。然而等熬过了这段,自己真的会成长。
一起共勉吧。
注:本文在开源项目:JavaCollection 中已收录,包含自学编程路线、心路历程、面试题和面经、及系列技术文章等,资源持续更新中…
每天进步一点点
慢一点才能更快