双非本,非科班自学转码分享

大彬
大约 16 分钟

双非本,非科班的自我救赎之路

大家好,我是大彬~

今天跟大家分享一位学弟的秋招经历,他跟大彬一样,也是非科班转码的,在今年这样的环境下,能成功”上岸“,非常不容易。

接下来一起看看他的经历(学弟花了周末两天时间写的,整整5000多字,非常用心),希望他的分享能帮助到正在参加校招的小伙伴们,以及后面的学弟学妹们!

背景介绍

先简要说说我的基本情况吧,本人就读于山西某二本院校,专业生物方向。

大一期间,借助学校的平台报了一个非全的计算机专业的第二学历。

大二下开始真正接触到Java。

大三下学期(今年上半年)找到了一份实习,下半年七月开始投递简历,于是便打响了我的秋招之战,直到10月下旬,才有两家小公司的意向,其中一家为蚂蚁集团旗下某子公司,base又在老家郑州,也算是符合我的预期。诚然,不敢和大佬相比,本人既无学历光环,手中也无大厂offer。

但正如大彬网站首页所说:“作为一名转码选手,深感这一路的不易”,这一路走来也踩过不少坑,也积累了不少自己的见解,在这里和大家分享下我的经验,同时也当做是对我这两年的一个总结。大家有不同意见的,欢迎交流。

修炼历程

我是如何与Java结缘的?

都说兴趣是最好的老师,可能大多数转码的同学和我一样,基于各种原因对自己本专业没有学习的欲望。

我个人很喜欢理工科,恰巧大一军训结束后,我看到学校可以报一个非全的第二专业,然后就选择了计科。但真正和Java结缘是在大二,大一的时候学的都是像离散数学、操作系统、计算机网络原理这些科目,因为纯靠自学而且这些又都是计算机的底层知识(后来发现很有用),当时差点劝退我这个小白,于是就给自己制定了一个方针:“第一学历的考试及格就行,第二学历尽量认真去学”,就这样坚持了一个学期,后来经过验证,两边都没有耽误,效果还不错。但这时候我对于计算机的理解也仅仅只是那些理论上的东西,完全不知道如果要靠它吃饭的话需要具体学哪些东西又需要学到哪种程度?

转机出现在大二下学期,因为需要学Java这门课,这也是我接触到的第一种编程语言(后来也学习了c++),然后一位朋友给我分享了B站老杜的Java教程,就发现Java不仅可以开发很酷的网站,也可以做出自己的小游戏,这就像打开了编程世界的大门,这些新奇的事物一扫前期理论知识带给我的枯燥感,每一个都吸引着我去不断的靠近它们,就这样我的Java修炼之路便开始了......

如何安排学习?

相信绝大多数的自学者都是按照网上的路线走的,但是学习路线上的内容那么多,我们需要从校招面试的角度去分析哪些是“常考点”,哪些是“低频考点”,这样我们才能把时间花在刀刃上,做到有针对性的准备校招。下面分享下本人的几点见解:

  • **JavaSE:**这一块我是分 Java语言特性 + JUC + JVM由浅入深逐渐去学习的。

    • Java语言特性:首先一定要熟练掌握语法,了解其新特性比如函数式编程、stream流的使用等。再者,像集合、IO流、反射、JDK动态代理、多线程这几块是高频面试题,尤其是集合方面,举个例子:面试官可能会以Map为切入点,问你HashMap的put流程,然后延伸到在JDK1.7和1.8的多线程环境下put的时候分别会出现什么问题?出现该问题的原因以及如何解决?像这种情况就得多背八股文了,有精力的也可以去扒源码来加深自己的理解。
    • JUC: 并发编程几乎也是必问,通过学习JUC能帮助你理解大部分问题。它考察的方式也很灵活,比如面试官可以直接问你理论知识,像线程池的七大参数、四种拒绝策略、线程池的执行原理等等,也可以给你一个场景让你去设计代码考察你的coding能力,我就曾经遇到过这样一个场景“项目中有一个main方法,执行具体的核心业务逻辑前需要开两个线程先校验参数,待参数校验完毕后,main方法才能执行核心业务逻辑,如何设计你的代码实现此需求?” 如果你对JUC下不太了解的话可能就会没有思路,反之,可能你一下子就会想到有一个CountDownLatch的类能解决这个问题。除此之外,像各种锁:ReentrantLock、Synchronized以及Synchronized是否被static关键字修饰、读写锁、可重入锁、CAS等、生产者和消费者问题、集合类不安全的解决方案等等,如果这些不理解的话,面试官随便问一下细节可能你就懵了。因为这一块知识稍微有点难度,建议大家在学习的时候可以从视频入门,在学习的过程中一定不要懒,自己多动手用代码去验证、去实现、弄懂它的大致原理,如果想在深入的话可以去网上找找大佬写的优质博客或读一些相关的书籍。
    • JVM: 对付校招的话,出现频率高的像JVM的内存区域,垃圾回收算法以及老年代用什么算法,CMS和G1的区别,程序计数器有什么用,虚拟机栈是否存在溢出以及什么情况下会溢出等等此类问题...我参考的是大彬的网站open in new window。不知道大家有没有遇到过这样的情况,比如你百度一个面试题,要么出来的是长篇大论(讲的很细,内容很多),要么寥寥几句,如果你直接按照搜来的答案说的话,要么很费时间,要么说不了几句就没了,而大彬网站中的大多数问题的答案属于你可以一字不用改动直接背给面试官的那种。当然,大家如果时间允许并且想要了解某个技术细节的话,不能只囫囵吞枣,还是要沉下心慢慢去思考的。
  • 算法:经常听到有小伙伴问“算法到底要不要刷”,大家不坚定的态度无外乎是因为“工作中用不到”、“算法晦涩难懂,学起来枯燥”、“投入产出比高,需要长期投入才有效果”这几个因素。我想告诉大家的是,如果你想冲击大中厂的话,一定要去刷。就拿我这次秋招来说,做了几十家的笔试题,80%以上都有算法,更何况笔试是你秋招的第一道关卡,如果你算法题做不出来的话连面试都很难进。那如何规划呢,我的建议是如果你时间充足的话(比如正在大二或者大三上),学完JavaSE就能开始刷题了,这样一边刷题一边还能让你掌握语言特性。但是时间不充足的话(比如马上要找实习了技术栈还没学完,或者马上面临校园招聘了),这种情况下我还是建议先完善自己的技术栈,起码先把自己的技术体系形成闭环,待找到实习(工作)后再抽时间刷(我就是后者)。所以说,干什么都要趁早,早,就是优势。至于如何刷题,推荐大家去刷代码随想录,然后再刷剑指offer上的那70多道,两者加上接近三百道题了,(这时候已经能手撕大多数企业的题了),时间充裕的话还可以再刷刷hot100。注意,算法题也是需要多多回顾的,刷一遍是绝对不够的,建议多刷几遍,这样才能形成自己的理解做到活学活用。

  • 数据库:

    • MySQL:面试官经常从“MySQL架构、索引原理、事务原理与锁机制、日志机制、存储引擎执行细节”这几个方面去考察,也有一些笔试题中会出现场景题让你编写SQL。我推荐大家可以先过一遍小林的图解MySQL,这个讲的比较细也比较基础,然后有了基础之后再去看一下《MySQL45讲》会轻松很多,而且里面有很多真实的场景,你也可以稍加修饰吸收成你自己的经验来和面试官进行掰扯,45讲看完之后其实对数据库的各类面试题理解起来就很容易了,此时等到面试前再突击下大彬的MySQL面试题,效率直接起飞。至于SQL场景题的话,只能多练了,这个大家可以去牛客上刷SQL的在线编程题,刷到“SQL进阶挑战”完全就够了,不仅是应付笔试,面对以后工作用到的CRUD也是绰绰有余。
    • Redis: 面试常从“底层数据结构,主从复制,持久化、缓存一致性”等角度考察,学习路线和MySQL差不多,也是小林的图解 + 大彬的面试题
  • 各种框架:

    • 首先我想说一下框架在面试中的比重,大厂问的比较少,反倒小公司会问的多一点。该学到哪种程度呢,至少是springboot,像微服务那些是加分项,大厂的话不会太看中你的技术栈有多新,它们更注重你的基础。所以我觉得技术栈的话学到boot就没多大问题了,可以将后面的时间用来夯实你的基础。
    • 如何学习框架
      • 初级阶段:建议还是以视频为主吧,这样入门很快,毕竟框架也是实操性较强的东西,直接看视频效果会更直观一点。
      • 运用阶段:学完框架之后,就一定得多练多敲,一方面强化记忆,另一方面增强对这门技术的熟练度。比如可以从B站上找一个小项目练练手,或者从开源平台上找一些相关的Demo自己调试一下让它跑起来,扒开它的源码看自己能不能优化、改造某个功能等。这些都能让你快速升级,熟练掌握技术栈并养成自己的编程思想。
      • 质变阶段:当你对各类技术栈的使用已相当熟练,你可以去选择专攻某一个模块。比如你可以去研究spring中的某一个组件,比如Bean组件,IOC容器等。除此之外java中的轮子有很多,你也可以自己实现一个功能全面的rpc框架,也能写到你的简历上面,也能和面试官聊上一阵。
  • 计算机基础:

    首先希望大家清楚,任何新技术的出现,都是为了完善旧技术的缺点,我们有学不完的技术,但是计算机基础的知识是永远不会变的。假如你不懂网络原理,可能你理解前后端用HTTP进行交互时就比较抽象、也无法实现自己的rpc框架...如果你不了解操作系统,也很难理解Redis中的大key对持久化的影响...对于校招来说,只需要好好准备操作系统和网络原理就行了。B站上也有很多资源,像王道考研的OS和网络,八股文的话可以看小林的图解,然后在看看大彬的面试题。

    可能细心的小伙伴已经发现了,我的路线总结下来基本上是 大彬 (面试)+ 小林图解(基础八股) + 代码随想录(刷题)

遇到问题如何解决?

有句话是“旁观者清,近观者迷”,自学的过程本身就是孤独的,在这个过程中我们肯定也会遇到很多大大小小的问题,有时候自己碰到一个没法解决的问题就会陷在一个死胡同里好几天,不仅耽误学习进度,严重的时候还会影响我们的学习士气。当遇到这些情况时我们就要虚心地向别人请教、提问。我也加了很多的技术交流群,下面分享一下我对于"提问"的经验。

  • 提问之前
    • 我们一定要尝试自己解决,不是说一遇到问题自己都懒得思考就直接去提问,可以和小伙伴交流、通过网上搜索,查阅一些论坛社区等手段来解决问题
    • 如果实在不能解决,就要梳理好自己要问什么,整理好你要表达的话语,尽量做到准确,简明,让别人一看就能明白你不懂的地方在哪。
  • 怎样提问
    • 第一点:因为你是求助者,一定要虚心。如果没有人回答你的问题也不要阴阳怪气,交流群本身是用来交流技术分享经验的一个地方。
    • 第二是准确描述你的问题的前因后果,比如你做过什么样的尝试,得到了什么样的结果,你想要的结果是什么

实习与秋招

先插一句:无论是找实习还是准备秋招,一定要趁早,早就是优势,早就代表着更多的机会!

我的实习历程

深知自己与别人的差距,于是我上半年二月份就开始在网上投实习的简历了,到四月底的时候找到了杭州一家公司,我仍清晰地记得那天收到offer时的心情,走上Java这条路以来,第一次感受到了被认可,这也给了我很大的一个信心让我坚定地在这条路上一直走下去。

相信大多数实习生进公司之后面对的都是边缘业务的CRUD,接触不到项目的核心,你如果想要得到更多的收获就得主动去找mentor要一些有挑战性的活,比如我实习期间承担难度最大的一件事就是完成了项目中分布式WebSocket的开发,从一开始确定技术解决方案,然后同mentor一起验证方案的可行性,再到具体编码实现,在整个流程中学到了很多东西,这后来也成为了我经常和面试官对线的地方,四个月的实习也是我成长最快的一段时间。

总之,我想告诉大家的是,如果自己的起点就比别人低,那就得自己去争取更多的机会,这样才能使自己一直保持着竞争力

我的秋招历程

在实习期间的时候,我就开始投递了一小部分提前批(全GG),因为当时是七月份,并没有意识到到今年秋招的寒气,到八月份的时候我就辞职了,便全身心的转移到了秋招的战线上。

直到八月末九月初的时候已经投了100家左右,也做了将近二十多家的笔试,算法题平均都能a个75%,但是仅收到了两家面试,面试过程也都还算顺利,但还是都挂了,这个时候已经意识到形势的严峻了,我已经开始有点慌了,中间甚至有过放弃的念头,但我的直觉告诉我不能就这样灰头土脸的收场,无论结果怎样都要给自己一个合理的交代。

后来就每天边做笔试边投简历,也转变了投递策略,不能只局限在牛客和力扣上找公司,智联、BOSS、51JOB、甚至在抖音上碰到博主推的公司也开始投,全面广撒网。就这样战线一直拉到十月下旬。

两个月的秋招战线,可以说是我整个Java之路上最难熬的一段时间,经历了多次面试前的紧张、面试后的期待、收到感谢信后的失望,也感谢自己没有放弃吧,最后也算是拿到了这一行的敲门砖。

心得感悟

汝之蜜糖,彼之砒霜,这里引用某位网友的一段话“每个人都应经过自己的摸索,找到适合自己的路线。不管是应届生参加校招,还是在校生找实习,求职的过程都注定是艰难且孤独的,这时候不光要拼学历门槛、技术能力、语言表达能力,还要拼谁能沉得住气,谁能扛得住一次又一次面试失败后的打击。面试招聘常有金三银四和金九银十的说法,但这都是一个理想状态,在你实力没那么强的情况下,求职可能是一个比较长期的过程。不要给自己设置deadline,不是说十月之后就没有招聘,十月十一月,十二月,可能一家公司结束了招聘,又会有另外一家开始招聘。有人五月份六月份才拿到实习offer,而也有人在临近毕业五月甚至六月的时候才拿到自己满意的offer,一直面下去,多复盘,会有好结果的。”

致谢

每个人在修炼的路上都是孤独的,我们只有怀着宗教般的意志和初恋般的热情,做任何事情都要抱着“流水不争先,争的是滔滔不绝”的态度去不断地提升自己,才有可能成就某种事业。作为一枚菜鸟小白,一路走来,受到了不少大佬的帮助,感谢我的那位朋友,感谢大彬,感谢卡哥,感谢小林,你们的帮助给这条路上的小白注入了源源不断的动力。最后,祝愿大家考研、找工作的伙伴都能顺利上岸!

Loading...